aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.gitignore12
-rw-r--r--HOWTO/INSTALL.md6
-rw-r--r--OTP_VERSION3
-rw-r--r--README.md14
-rw-r--r--bootstrap/bin/start.bootbin5306 -> 5343 bytes
-rw-r--r--bootstrap/bin/start_clean.bootbin5306 -> 5343 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/beam_asm.beambin11524 -> 11428 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/beam_block.beambin9564 -> 9688 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/beam_bool.beambin15652 -> 15720 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/beam_bs.beambin5928 -> 5924 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/beam_bsm.beambin12636 -> 12632 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/beam_dead.beambin12972 -> 12972 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/beam_disasm.beambin26216 -> 26204 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/beam_peep.beambin2424 -> 2544 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/beam_receive.beambin6384 -> 6380 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/beam_reorder.beambin1992 -> 2040 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/beam_split.beambin2396 -> 2496 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/beam_trim.beambin7864 -> 7856 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/beam_type.beambin17148 -> 17728 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/beam_utils.beambin13756 -> 13668 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/beam_validator.beambin29988 -> 30188 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/beam_z.beambin2636 -> 2888 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/cerl.beambin31940 -> 32080 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/cerl_clauses.beambin2956 -> 2956 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/cerl_inline.beambin38716 -> 38688 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/cerl_trees.beambin20676 -> 20908 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/compile.beambin38704 -> 38976 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/compiler.app4
-rw-r--r--bootstrap/lib/compiler/ebin/compiler.appup4
-rw-r--r--bootstrap/lib/compiler/ebin/core_lint.beambin13580 -> 13572 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/core_parse.beambin50896 -> 57124 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/core_pp.beambin13148 -> 12020 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/rec_env.beambin4920 -> 4916 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/sys_core_dsetel.beambin7184 -> 7180 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/sys_core_fold.beambin52236 -> 52348 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/sys_pre_attributes.beambin3308 -> 3308 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/sys_pre_expand.beambin13472 -> 13472 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/v3_codegen.beambin55864 -> 55848 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/v3_core.beambin53308 -> 54404 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/v3_kernel.beambin46880 -> 46676 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/code.beambin12140 -> 12140 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/code_server.beambin24740 -> 24808 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/disk_log.beambin35860 -> 35832 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/disk_log_1.beambin24876 -> 24884 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/dist_util.beambin10352 -> 10672 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/erl_distribution.beambin1832 -> 1648 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/erl_epmd.beambin7068 -> 7180 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/error_handler.beambin1660 -> 1656 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/erts_debug.beambin5548 -> 5544 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/file.beambin14460 -> 14456 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/file_io_server.beambin15564 -> 15544 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/gen_sctp.beambin3612 -> 3604 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/global.beambin32252 -> 32244 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/global_group.beambin17568 -> 17548 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/group.beambin14040 -> 14032 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/hipe_unified_loader.beambin13792 -> 13792 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/inet.beambin23320 -> 23312 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/inet_db.beambin27044 -> 27024 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/inet_dns.beambin19596 -> 19596 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/inet_gethost_native.beambin10436 -> 10436 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/inet_parse.beambin12924 -> 12912 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/inet_res.beambin14868 -> 14868 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/kernel.app6
-rw-r--r--bootstrap/lib/kernel/ebin/kernel.appup12
-rw-r--r--bootstrap/lib/kernel/ebin/kernel_config.beambin2764 -> 2764 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/net_kernel.beambin22600 -> 22968 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/ram_file.beambin6996 -> 6984 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/rpc.beambin8580 -> 8132 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/seq_trace.beambin1440 -> 1608 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/user_drv.beambin11412 -> 11408 bytes
-rw-r--r--bootstrap/lib/kernel/include/dist.hrl3
-rw-r--r--bootstrap/lib/kernel/include/dist_util.hrl2
-rw-r--r--bootstrap/lib/kernel/include/inet.hrl2
-rw-r--r--bootstrap/lib/kernel/include/inet_sctp.hrl2
-rw-r--r--bootstrap/lib/kernel/include/net_address.hrl2
-rw-r--r--bootstrap/lib/stdlib/ebin/array.beambin12008 -> 12000 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/beam_lib.beambin18612 -> 18580 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/c.beambin14608 -> 14600 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/dets.beambin53688 -> 53676 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/dets_server.beambin6988 -> 6984 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/dets_utils.beambin28756 -> 28748 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/dets_v9.beambin49844 -> 49824 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/dict.beambin9332 -> 9324 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/digraph_utils.beambin6824 -> 6816 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/epp.beambin28208 -> 28828 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/erl_bits.beambin2528 -> 2524 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/erl_compile.beambin7280 -> 7280 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/erl_eval.beambin30640 -> 30632 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/erl_expand_records.beambin21764 -> 21760 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/erl_lint.beambin89756 -> 90264 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/erl_parse.beambin82296 -> 82864 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/erl_pp.beambin26796 -> 27344 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/erl_scan.beambin28844 -> 28840 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/erl_tar.beambin17156 -> 17152 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/escript.beambin17592 -> 17576 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/ets.beambin22604 -> 22592 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/eval_bits.beambin8096 -> 8092 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/file_sorter.beambin30408 -> 30400 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/filelib.beambin8056 -> 8048 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/filename.beambin12444 -> 14884 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/gen.beambin4276 -> 5412 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/gen_event.beambin13524 -> 13416 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/gen_fsm.beambin10476 -> 9480 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/gen_server.beambin13744 -> 12448 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/gen_statem.beambin0 -> 13492 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/io_lib_pretty.beambin15156 -> 15152 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/lib.beambin9600 -> 9596 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/lists.beambin29768 -> 29904 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/maps.beambin2404 -> 2892 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/otp_internal.beambin11896 -> 9636 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/proc_lib.beambin10656 -> 10676 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/qlc.beambin70148 -> 70112 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/qlc_pt.beambin76244 -> 76228 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/queue.beambin6184 -> 6180 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/re.beambin13600 -> 13580 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/shell.beambin30236 -> 30232 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/sofs.beambin40656 -> 40624 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/stdlib.app5
-rw-r--r--bootstrap/lib/stdlib/ebin/stdlib.appup12
-rw-r--r--bootstrap/lib/stdlib/ebin/supervisor.beambin23456 -> 23436 bytes
-rw-r--r--bootstrap/lib/stdlib/ebin/unicode.beambin11612 -> 11592 bytes
-rw-r--r--bootstrap/lib/stdlib/include/assert.hrl31
-rw-r--r--bootstrap/lib/stdlib/include/erl_compile.hrl2
-rw-r--r--bootstrap/lib/stdlib/include/ms_transform.hrl2
-rw-r--r--bootstrap/lib/stdlib/include/qlc.hrl2
-rw-r--r--bootstrap/lib/stdlib/include/zip.hrl2
-rw-r--r--configure.in65
-rw-r--r--erts/AUTHORS2
-rw-r--r--erts/Makefile.in2
-rw-r--r--erts/aclocal.m42
-rwxr-xr-xerts/autoconf/configure.vxworks2
-rw-r--r--erts/autoconf/vxworks/sed.general2
-rw-r--r--erts/autoconf/vxworks/sed.vxworks_cpu322
-rw-r--r--erts/autoconf/vxworks/sed.vxworks_ppc322
-rw-r--r--erts/autoconf/vxworks/sed.vxworks_ppc6032
-rw-r--r--erts/autoconf/vxworks/sed.vxworks_ppc603_nolongcall2
-rw-r--r--erts/autoconf/vxworks/sed.vxworks_ppc8602
-rw-r--r--erts/autoconf/vxworks/sed.vxworks_simlinux2
-rw-r--r--erts/autoconf/vxworks/sed.vxworks_simso2
-rw-r--r--erts/autoconf/vxworks/sed.vxworks_sparc2
-rw-r--r--erts/configure.in303
-rw-r--r--erts/doc/Makefile2
-rw-r--r--erts/doc/src/Makefile17
-rw-r--r--erts/doc/src/absform.xml33
-rw-r--r--erts/doc/src/alt_dist.xml2
-rw-r--r--erts/doc/src/book.xml2
-rw-r--r--erts/doc/src/communication.xml2
-rw-r--r--erts/doc/src/crash_dump.xml2
-rw-r--r--erts/doc/src/driver.xml2
-rw-r--r--erts/doc/src/epmd.xml4
-rw-r--r--erts/doc/src/erl.xml76
-rw-r--r--erts/doc/src/erl_dist_protocol.xml4
-rw-r--r--erts/doc/src/erl_driver.xml2
-rw-r--r--erts/doc/src/erl_nif.xml566
-rw-r--r--erts/doc/src/erl_prim_loader.xml2
-rw-r--r--erts/doc/src/erl_tracer.xml652
-rw-r--r--erts/doc/src/erlang.xml1039
-rw-r--r--erts/doc/src/erlc.xml2
-rw-r--r--erts/doc/src/erlsrv.xml2
-rw-r--r--erts/doc/src/erts_alloc.xml33
-rw-r--r--erts/doc/src/inet_cfg.xml2
-rw-r--r--erts/doc/src/init.xml2
-rw-r--r--erts/doc/src/match_spec.xml135
-rw-r--r--erts/doc/src/notes.xml253
-rw-r--r--erts/doc/src/notes_history.xml2
-rw-r--r--erts/doc/src/part.xml2
-rw-r--r--erts/doc/src/part_notes.xml2
-rw-r--r--erts/doc/src/part_notes_history.xml2
-rw-r--r--erts/doc/src/ref_man.xml3
-rw-r--r--erts/doc/src/run_erl.xml2
-rw-r--r--erts/doc/src/specs.xml1
-rw-r--r--erts/doc/src/start.xml2
-rw-r--r--erts/doc/src/start_erl.xml2
-rw-r--r--erts/doc/src/tty.xml2
-rw-r--r--erts/doc/src/werl.xml2
-rw-r--r--erts/doc/src/zlib.xml2
-rw-r--r--erts/emulator/Makefile2
-rw-r--r--erts/emulator/Makefile.in33
-rw-r--r--erts/emulator/beam/atom.c2
-rw-r--r--erts/emulator/beam/atom.h2
-rw-r--r--erts/emulator/beam/atom.names31
-rw-r--r--erts/emulator/beam/beam_bif_load.c229
-rw-r--r--erts/emulator/beam/beam_bp.c196
-rw-r--r--erts/emulator/beam/beam_bp.h40
-rw-r--r--erts/emulator/beam/beam_catches.c8
-rw-r--r--erts/emulator/beam/beam_catches.h2
-rw-r--r--erts/emulator/beam/beam_debug.c4
-rw-r--r--erts/emulator/beam/beam_emu.c288
-rw-r--r--erts/emulator/beam/beam_load.c285
-rw-r--r--erts/emulator/beam/beam_load.h3
-rw-r--r--erts/emulator/beam/beam_ranges.c2
-rw-r--r--erts/emulator/beam/benchmark.c2
-rw-r--r--erts/emulator/beam/benchmark.h2
-rw-r--r--erts/emulator/beam/bif.c350
-rw-r--r--erts/emulator/beam/bif.h70
-rw-r--r--erts/emulator/beam/bif.tab9
-rw-r--r--erts/emulator/beam/big.c28
-rw-r--r--erts/emulator/beam/big.h3
-rw-r--r--erts/emulator/beam/binary.c6
-rw-r--r--erts/emulator/beam/break.c31
-rw-r--r--erts/emulator/beam/code_ix.c3
-rw-r--r--erts/emulator/beam/code_ix.h2
-rw-r--r--erts/emulator/beam/copy.c46
-rw-r--r--erts/emulator/beam/dist.c44
-rw-r--r--erts/emulator/beam/dist.h6
-rw-r--r--erts/emulator/beam/dtrace-wrapper.h2
-rw-r--r--erts/emulator/beam/elib_memmove.c2
-rw-r--r--erts/emulator/beam/erl_afit_alloc.c4
-rw-r--r--erts/emulator/beam/erl_afit_alloc.h2
-rw-r--r--erts/emulator/beam/erl_alloc.c300
-rw-r--r--erts/emulator/beam/erl_alloc.h10
-rw-r--r--erts/emulator/beam/erl_alloc.types25
-rw-r--r--erts/emulator/beam/erl_alloc_util.c142
-rw-r--r--erts/emulator/beam/erl_alloc_util.h39
-rw-r--r--erts/emulator/beam/erl_ao_firstfit_alloc.c4
-rw-r--r--erts/emulator/beam/erl_ao_firstfit_alloc.h2
-rw-r--r--erts/emulator/beam/erl_arith.c2
-rw-r--r--erts/emulator/beam/erl_async.c18
-rw-r--r--erts/emulator/beam/erl_async.h2
-rw-r--r--erts/emulator/beam/erl_bestfit_alloc.c4
-rw-r--r--erts/emulator/beam/erl_bestfit_alloc.h2
-rw-r--r--erts/emulator/beam/erl_bif_binary.c2
-rw-r--r--erts/emulator/beam/erl_bif_chksum.c2
-rw-r--r--erts/emulator/beam/erl_bif_ddll.c8
-rw-r--r--erts/emulator/beam/erl_bif_guard.c2
-rw-r--r--erts/emulator/beam/erl_bif_info.c273
-rw-r--r--erts/emulator/beam/erl_bif_lists.c95
-rw-r--r--erts/emulator/beam/erl_bif_op.c2
-rw-r--r--erts/emulator/beam/erl_bif_os.c2
-rw-r--r--erts/emulator/beam/erl_bif_port.c35
-rw-r--r--erts/emulator/beam/erl_bif_re.c10
-rw-r--r--erts/emulator/beam/erl_bif_trace.c744
-rw-r--r--erts/emulator/beam/erl_bif_unique.c26
-rw-r--r--erts/emulator/beam/erl_bif_unique.h14
-rw-r--r--erts/emulator/beam/erl_binary.h2
-rw-r--r--erts/emulator/beam/erl_bits.c2
-rw-r--r--erts/emulator/beam/erl_bits.h6
-rw-r--r--erts/emulator/beam/erl_cpu_topology.c12
-rw-r--r--erts/emulator/beam/erl_cpu_topology.h2
-rw-r--r--erts/emulator/beam/erl_db.c21
-rw-r--r--erts/emulator/beam/erl_db.h2
-rw-r--r--erts/emulator/beam/erl_db_hash.c4
-rw-r--r--erts/emulator/beam/erl_db_hash.h2
-rw-r--r--erts/emulator/beam/erl_db_tree.c4
-rw-r--r--erts/emulator/beam/erl_db_tree.h2
-rw-r--r--erts/emulator/beam/erl_db_util.c506
-rw-r--r--erts/emulator/beam/erl_db_util.h10
-rw-r--r--erts/emulator/beam/erl_debug.c16
-rw-r--r--erts/emulator/beam/erl_driver.h2
-rw-r--r--erts/emulator/beam/erl_drv_nif.h11
-rw-r--r--erts/emulator/beam/erl_drv_thread.c4
-rw-r--r--erts/emulator/beam/erl_fun.c4
-rw-r--r--erts/emulator/beam/erl_fun.h2
-rw-r--r--erts/emulator/beam/erl_gc.c371
-rw-r--r--erts/emulator/beam/erl_gc.h8
-rw-r--r--erts/emulator/beam/erl_goodfit_alloc.c6
-rw-r--r--erts/emulator/beam/erl_goodfit_alloc.h2
-rw-r--r--erts/emulator/beam/erl_hl_timer.c34
-rw-r--r--erts/emulator/beam/erl_init.c151
-rw-r--r--erts/emulator/beam/erl_instrument.c2
-rw-r--r--erts/emulator/beam/erl_instrument.h2
-rw-r--r--erts/emulator/beam/erl_lock_check.c7
-rw-r--r--erts/emulator/beam/erl_lock_check.h2
-rw-r--r--erts/emulator/beam/erl_lock_count.c2
-rw-r--r--erts/emulator/beam/erl_lock_count.h2
-rw-r--r--erts/emulator/beam/erl_map.c131
-rw-r--r--erts/emulator/beam/erl_map.h5
-rw-r--r--erts/emulator/beam/erl_math.c2
-rw-r--r--erts/emulator/beam/erl_message.c239
-rw-r--r--erts/emulator/beam/erl_message.h127
-rw-r--r--erts/emulator/beam/erl_monitors.c4
-rw-r--r--erts/emulator/beam/erl_monitors.h2
-rw-r--r--erts/emulator/beam/erl_msacc.c4
-rw-r--r--erts/emulator/beam/erl_mtrace.c2
-rw-r--r--erts/emulator/beam/erl_mtrace.h2
-rw-r--r--erts/emulator/beam/erl_nif.c1127
-rw-r--r--erts/emulator/beam/erl_nif.h44
-rw-r--r--erts/emulator/beam/erl_nif_api_funcs.h39
-rw-r--r--erts/emulator/beam/erl_node_container_utils.h2
-rw-r--r--erts/emulator/beam/erl_node_tables.c34
-rw-r--r--erts/emulator/beam/erl_node_tables.h4
-rw-r--r--erts/emulator/beam/erl_port.h92
-rw-r--r--erts/emulator/beam/erl_port_task.c55
-rw-r--r--erts/emulator/beam/erl_port_task.h4
-rw-r--r--erts/emulator/beam/erl_printf_term.c2
-rw-r--r--erts/emulator/beam/erl_printf_term.h2
-rw-r--r--erts/emulator/beam/erl_process.c3462
-rw-r--r--erts/emulator/beam/erl_process.h277
-rw-r--r--erts/emulator/beam/erl_process_dict.c10
-rw-r--r--erts/emulator/beam/erl_process_dict.h2
-rw-r--r--erts/emulator/beam/erl_process_dump.c38
-rw-r--r--erts/emulator/beam/erl_process_lock.c193
-rw-r--r--erts/emulator/beam/erl_process_lock.h40
-rw-r--r--erts/emulator/beam/erl_ptab.c4
-rw-r--r--erts/emulator/beam/erl_ptab.h10
-rw-r--r--erts/emulator/beam/erl_sched_spec_pre_alloc.c2
-rw-r--r--erts/emulator/beam/erl_sched_spec_pre_alloc.h2
-rw-r--r--erts/emulator/beam/erl_smp.h2
-rw-r--r--erts/emulator/beam/erl_sock.h2
-rw-r--r--erts/emulator/beam/erl_sys_driver.h2
-rw-r--r--erts/emulator/beam/erl_term.c92
-rw-r--r--erts/emulator/beam/erl_term.h93
-rw-r--r--erts/emulator/beam/erl_thr_progress.c14
-rw-r--r--erts/emulator/beam/erl_thr_progress.h2
-rw-r--r--erts/emulator/beam/erl_thr_queue.c40
-rw-r--r--erts/emulator/beam/erl_thr_queue.h6
-rw-r--r--erts/emulator/beam/erl_threads.h2
-rw-r--r--erts/emulator/beam/erl_time.h2
-rw-r--r--erts/emulator/beam/erl_time_sup.c20
-rw-r--r--erts/emulator/beam/erl_trace.c3125
-rw-r--r--erts/emulator/beam/erl_trace.h98
-rw-r--r--erts/emulator/beam/erl_unicode.c62
-rw-r--r--erts/emulator/beam/erl_unicode.h2
-rw-r--r--erts/emulator/beam/erl_unicode_normalize.h2
-rw-r--r--erts/emulator/beam/erl_utils.h2
-rw-r--r--erts/emulator/beam/erl_vm.h6
-rw-r--r--erts/emulator/beam/erl_zlib.c2
-rw-r--r--erts/emulator/beam/erl_zlib.h2
-rw-r--r--erts/emulator/beam/erlang_dtrace.d31
-rw-r--r--erts/emulator/beam/erlang_lttng.c (renamed from erts/include/erl_native_features_config.h.in)16
-rw-r--r--erts/emulator/beam/erlang_lttng.h424
-rw-r--r--erts/emulator/beam/error.h2
-rw-r--r--erts/emulator/beam/export.c2
-rw-r--r--erts/emulator/beam/export.h2
-rw-r--r--erts/emulator/beam/external.c245
-rw-r--r--erts/emulator/beam/external.h9
-rw-r--r--erts/emulator/beam/global.h67
-rw-r--r--erts/emulator/beam/hash.c2
-rw-r--r--erts/emulator/beam/hash.h2
-rw-r--r--erts/emulator/beam/index.c6
-rw-r--r--erts/emulator/beam/index.h2
-rw-r--r--erts/emulator/beam/io.c678
-rw-r--r--erts/emulator/beam/lttng-wrapper.h107
-rw-r--r--erts/emulator/beam/module.c2
-rw-r--r--erts/emulator/beam/module.h2
-rw-r--r--erts/emulator/beam/ops.tab35
-rw-r--r--erts/emulator/beam/packet_parser.c2
-rw-r--r--erts/emulator/beam/packet_parser.h2
-rw-r--r--erts/emulator/beam/register.c18
-rw-r--r--erts/emulator/beam/register.h2
-rw-r--r--erts/emulator/beam/safe_hash.c2
-rw-r--r--erts/emulator/beam/safe_hash.h2
-rw-r--r--erts/emulator/beam/sys.h49
-rw-r--r--erts/emulator/beam/time.c4
-rw-r--r--erts/emulator/beam/utils.c59
-rw-r--r--erts/emulator/beam/version.h2
-rw-r--r--erts/emulator/drivers/common/efile_drv.c29
-rw-r--r--erts/emulator/drivers/common/erl_efile.h8
-rw-r--r--erts/emulator/drivers/common/gzio.h2
-rw-r--r--erts/emulator/drivers/common/gzio_zutil.h2
-rw-r--r--erts/emulator/drivers/common/inet_drv.c14
-rw-r--r--erts/emulator/drivers/common/ram_file_drv.c2
-rw-r--r--erts/emulator/drivers/common/zlib_drv.c2
-rw-r--r--erts/emulator/drivers/unix/bin_drv.c2
-rw-r--r--erts/emulator/drivers/unix/multi_drv.c2
-rw-r--r--erts/emulator/drivers/unix/sig_drv.c2
-rw-r--r--erts/emulator/drivers/unix/ttsl_drv.c151
-rw-r--r--erts/emulator/drivers/unix/unix_efile.c25
-rw-r--r--erts/emulator/drivers/vxworks/vxworks_resolv.c2
-rw-r--r--erts/emulator/drivers/win32/registry_drv.c2
-rw-r--r--erts/emulator/drivers/win32/ttsl_drv.c2
-rw-r--r--erts/emulator/drivers/win32/win_con.c6
-rw-r--r--erts/emulator/drivers/win32/win_con.h2
-rw-r--r--erts/emulator/drivers/win32/win_efile.c2
-rw-r--r--erts/emulator/hipe/TODO2
-rw-r--r--erts/emulator/hipe/elf64ppc.x2
-rw-r--r--erts/emulator/hipe/hipe_amd64.c118
-rw-r--r--erts/emulator/hipe/hipe_amd64.h2
-rw-r--r--erts/emulator/hipe/hipe_amd64.tab2
-rw-r--r--erts/emulator/hipe/hipe_amd64_asm.m42
-rw-r--r--erts/emulator/hipe/hipe_amd64_bifs.m42
-rw-r--r--erts/emulator/hipe/hipe_amd64_gc.h2
-rw-r--r--erts/emulator/hipe/hipe_amd64_glue.S2
-rw-r--r--erts/emulator/hipe/hipe_amd64_glue.h2
-rw-r--r--erts/emulator/hipe/hipe_amd64_primops.h2
-rw-r--r--erts/emulator/hipe/hipe_arch.h2
-rw-r--r--erts/emulator/hipe/hipe_arm.c2
-rw-r--r--erts/emulator/hipe/hipe_arm.h2
-rw-r--r--erts/emulator/hipe/hipe_arm.tab2
-rw-r--r--erts/emulator/hipe/hipe_arm_asm.m42
-rw-r--r--erts/emulator/hipe/hipe_arm_bifs.m42
-rw-r--r--erts/emulator/hipe/hipe_arm_gc.h2
-rw-r--r--erts/emulator/hipe/hipe_arm_glue.S2
-rw-r--r--erts/emulator/hipe/hipe_arm_glue.h2
-rw-r--r--erts/emulator/hipe/hipe_arm_primops.h2
-rw-r--r--erts/emulator/hipe/hipe_bif0.c30
-rw-r--r--erts/emulator/hipe/hipe_bif0.h2
-rw-r--r--erts/emulator/hipe/hipe_bif0.tab2
-rw-r--r--erts/emulator/hipe/hipe_bif1.c2
-rw-r--r--erts/emulator/hipe/hipe_bif1.h2
-rw-r--r--erts/emulator/hipe/hipe_bif1.tab2
-rw-r--r--erts/emulator/hipe/hipe_bif2.c2
-rw-r--r--erts/emulator/hipe/hipe_bif2.tab2
-rw-r--r--erts/emulator/hipe/hipe_bif64.c2
-rw-r--r--erts/emulator/hipe/hipe_bif64.h2
-rw-r--r--erts/emulator/hipe/hipe_bif64.tab2
-rw-r--r--erts/emulator/hipe/hipe_bif_list.m42
-rw-r--r--erts/emulator/hipe/hipe_debug.c4
-rw-r--r--erts/emulator/hipe/hipe_debug.h2
-rw-r--r--erts/emulator/hipe/hipe_gbif_list.h2
-rw-r--r--erts/emulator/hipe/hipe_gc.c2
-rw-r--r--erts/emulator/hipe/hipe_gc.h2
-rw-r--r--erts/emulator/hipe/hipe_mkliterals.c2
-rw-r--r--erts/emulator/hipe/hipe_mode_switch.c142
-rw-r--r--erts/emulator/hipe/hipe_mode_switch.h2
-rw-r--r--erts/emulator/hipe/hipe_native_bif.c6
-rw-r--r--erts/emulator/hipe/hipe_native_bif.h2
-rw-r--r--erts/emulator/hipe/hipe_ops.tab2
-rw-r--r--erts/emulator/hipe/hipe_ppc.c2
-rw-r--r--erts/emulator/hipe/hipe_ppc.h2
-rw-r--r--erts/emulator/hipe/hipe_ppc.tab2
-rw-r--r--erts/emulator/hipe/hipe_ppc64.tab2
-rw-r--r--erts/emulator/hipe/hipe_ppc_asm.m42
-rw-r--r--erts/emulator/hipe/hipe_ppc_bifs.m42
-rw-r--r--erts/emulator/hipe/hipe_ppc_gc.h2
-rw-r--r--erts/emulator/hipe/hipe_ppc_glue.S2
-rw-r--r--erts/emulator/hipe/hipe_ppc_glue.h2
-rw-r--r--erts/emulator/hipe/hipe_ppc_primops.h2
-rw-r--r--erts/emulator/hipe/hipe_primops.h2
-rw-r--r--erts/emulator/hipe/hipe_process.h2
-rw-r--r--erts/emulator/hipe/hipe_risc_gc.h2
-rw-r--r--erts/emulator/hipe/hipe_risc_glue.h2
-rw-r--r--erts/emulator/hipe/hipe_risc_stack.c2
-rw-r--r--erts/emulator/hipe/hipe_signal.h2
-rw-r--r--erts/emulator/hipe/hipe_sparc.c2
-rw-r--r--erts/emulator/hipe/hipe_sparc.h2
-rw-r--r--erts/emulator/hipe/hipe_sparc.tab2
-rw-r--r--erts/emulator/hipe/hipe_sparc_asm.m42
-rw-r--r--erts/emulator/hipe/hipe_sparc_bifs.m42
-rw-r--r--erts/emulator/hipe/hipe_sparc_gc.h2
-rw-r--r--erts/emulator/hipe/hipe_sparc_glue.S2
-rw-r--r--erts/emulator/hipe/hipe_sparc_glue.h2
-rw-r--r--erts/emulator/hipe/hipe_sparc_primops.h2
-rw-r--r--erts/emulator/hipe/hipe_stack.c2
-rw-r--r--erts/emulator/hipe/hipe_stack.h2
-rw-r--r--erts/emulator/hipe/hipe_x86.c2
-rw-r--r--erts/emulator/hipe/hipe_x86.h2
-rw-r--r--erts/emulator/hipe/hipe_x86.tab2
-rw-r--r--erts/emulator/hipe/hipe_x86_abi.txt2
-rw-r--r--erts/emulator/hipe/hipe_x86_asm.m42
-rw-r--r--erts/emulator/hipe/hipe_x86_bifs.m42
-rw-r--r--erts/emulator/hipe/hipe_x86_gc.h2
-rw-r--r--erts/emulator/hipe/hipe_x86_glue.S2
-rw-r--r--erts/emulator/hipe/hipe_x86_glue.h2
-rw-r--r--erts/emulator/hipe/hipe_x86_primops.h2
-rw-r--r--erts/emulator/hipe/hipe_x86_signal.c2
-rw-r--r--erts/emulator/hipe/hipe_x86_stack.c2
-rw-r--r--erts/emulator/internal_doc/dec.erl2
-rw-r--r--erts/emulator/internal_doc/erl_ext_dist.txt2
-rw-r--r--erts/emulator/nifs/common/erl_tracer_nif.c261
-rw-r--r--erts/emulator/pcre/pcre.mk2
-rw-r--r--erts/emulator/sys/common/erl_check_io.c5
-rw-r--r--erts/emulator/sys/common/erl_check_io.h2
-rw-r--r--erts/emulator/sys/common/erl_mmap.c159
-rw-r--r--erts/emulator/sys/common/erl_mmap.h124
-rw-r--r--erts/emulator/sys/common/erl_mseg.c143
-rw-r--r--erts/emulator/sys/common/erl_mseg.h8
-rw-r--r--erts/emulator/sys/common/erl_mtrace_sys_wrap.c2
-rw-r--r--erts/emulator/sys/common/erl_os_monotonic_time_extender.c4
-rw-r--r--erts/emulator/sys/common/erl_poll.c2
-rw-r--r--erts/emulator/sys/common/erl_poll.h2
-rw-r--r--erts/emulator/sys/common/erl_sys_common_misc.c2
-rw-r--r--erts/emulator/sys/common/erl_util_queue.h2
-rw-r--r--erts/emulator/sys/unix/driver_int.h2
-rw-r--r--erts/emulator/sys/unix/erl_child_setup.c3
-rw-r--r--erts/emulator/sys/unix/erl_main.c2
-rw-r--r--erts/emulator/sys/unix/erl_unix_sys.h3
-rw-r--r--erts/emulator/sys/unix/erl_unix_sys_ddll.c2
-rw-r--r--erts/emulator/sys/unix/sys.c38
-rw-r--r--erts/emulator/sys/unix/sys_drivers.c18
-rw-r--r--erts/emulator/sys/unix/sys_float.c114
-rw-r--r--erts/emulator/sys/unix/sys_time.c26
-rw-r--r--erts/emulator/sys/unix/sys_uds.c2
-rw-r--r--erts/emulator/sys/unix/sys_uds.h2
-rw-r--r--erts/emulator/sys/win32/dosmap.c2
-rw-r--r--erts/emulator/sys/win32/driver_int.h2
-rw-r--r--erts/emulator/sys/win32/erl_main.c2
-rw-r--r--erts/emulator/sys/win32/erl_poll.c12
-rw-r--r--erts/emulator/sys/win32/erl_win32_sys_ddll.c2
-rw-r--r--erts/emulator/sys/win32/erl_win_dyn_driver.h2
-rw-r--r--erts/emulator/sys/win32/erl_win_sys.h2
-rw-r--r--erts/emulator/sys/win32/sys.c13
-rw-r--r--erts/emulator/sys/win32/sys_env.c2
-rw-r--r--erts/emulator/sys/win32/sys_float.c5
-rw-r--r--erts/emulator/sys/win32/sys_interrupt.c8
-rw-r--r--erts/emulator/sys/win32/sys_time.c8
-rw-r--r--erts/emulator/test/Makefile7
-rw-r--r--erts/emulator/test/a_SUITE.erl77
-rw-r--r--erts/emulator/test/after_SUITE.erl195
-rw-r--r--erts/emulator/test/alloc_SUITE.erl189
-rw-r--r--erts/emulator/test/alloc_SUITE_data/cpool.c2
-rw-r--r--erts/emulator/test/alloc_SUITE_data/migration.c2
-rw-r--r--erts/emulator/test/async_ports_SUITE.erl39
-rw-r--r--erts/emulator/test/beam_SUITE.erl133
-rw-r--r--erts/emulator/test/beam_literals_SUITE.erl188
-rw-r--r--erts/emulator/test/bif_SUITE.erl358
-rw-r--r--erts/emulator/test/big_SUITE.erl150
-rw-r--r--erts/emulator/test/big_SUITE_data/literal_test.erl2
-rw-r--r--erts/emulator/test/binary_SUITE.erl806
-rw-r--r--erts/emulator/test/bs_bincomp_SUITE.erl2
-rw-r--r--erts/emulator/test/bs_bit_binaries_SUITE.erl90
-rw-r--r--erts/emulator/test/bs_construct_SUITE.erl331
-rw-r--r--erts/emulator/test/bs_match_bin_SUITE.erl56
-rw-r--r--erts/emulator/test/bs_match_int_SUITE.erl96
-rw-r--r--erts/emulator/test/bs_match_misc_SUITE.erl232
-rw-r--r--erts/emulator/test/bs_match_tail_SUITE.erl77
-rw-r--r--erts/emulator/test/bs_utf_SUITE.erl110
-rw-r--r--erts/emulator/test/busy_port_SUITE.erl637
-rw-r--r--erts/emulator/test/busy_port_SUITE_data/Makefile.src2
-rw-r--r--erts/emulator/test/busy_port_SUITE_data/hard_busy_drv.c2
-rw-r--r--erts/emulator/test/busy_port_SUITE_data/hs_busy_drv.c2
-rw-r--r--erts/emulator/test/busy_port_SUITE_data/scheduling_drv.c2
-rw-r--r--erts/emulator/test/busy_port_SUITE_data/soft_busy_drv.c2
-rw-r--r--erts/emulator/test/call_trace_SUITE.erl1622
-rw-r--r--erts/emulator/test/code_SUITE.erl821
-rw-r--r--erts/emulator/test/code_SUITE_data/another_code_test.erl2
-rw-r--r--erts/emulator/test/code_SUITE_data/cpbugx.erl2
-rw-r--r--erts/emulator/test/code_SUITE_data/fun_confusion.erl2
-rw-r--r--erts/emulator/test/code_SUITE_data/literals.erl2
-rw-r--r--erts/emulator/test/code_SUITE_data/many_funs.erl2
-rw-r--r--erts/emulator/test/code_SUITE_data/my_code_test.erl2
-rw-r--r--erts/emulator/test/code_SUITE_data/versions.erl2
-rw-r--r--erts/emulator/test/code_parallel_load_SUITE.erl49
-rw-r--r--erts/emulator/test/crypto_SUITE.erl399
-rw-r--r--erts/emulator/test/crypto_reference.erl2
-rw-r--r--erts/emulator/test/ddll_SUITE.erl1609
-rw-r--r--erts/emulator/test/decode_packet_SUITE.erl508
-rw-r--r--erts/emulator/test/dgawd_handler.erl2
-rw-r--r--erts/emulator/test/dirty_nif_SUITE.erl327
-rw-r--r--erts/emulator/test/dirty_nif_SUITE_data/Makefile.src6
-rw-r--r--erts/emulator/test/dirty_nif_SUITE_data/dirty_nif_SUITE.c223
-rw-r--r--erts/emulator/test/distribution_SUITE.erl2684
-rw-r--r--erts/emulator/test/distribution_SUITE_data/run.erl2
-rw-r--r--erts/emulator/test/driver_SUITE.erl3083
-rw-r--r--erts/emulator/test/driver_SUITE_data/async_blast_drv.c2
-rw-r--r--erts/emulator/test/driver_SUITE_data/consume_timeslice_drv.c2
-rw-r--r--erts/emulator/test/driver_SUITE_data/ioq_exit_drv.c2
-rw-r--r--erts/emulator/test/driver_SUITE_data/otp_9302_drv.c2
-rw-r--r--erts/emulator/test/driver_SUITE_data/thr_free_drv.c2
-rw-r--r--erts/emulator/test/driver_SUITE_data/thr_msg_blast_drv.c2
-rw-r--r--erts/emulator/test/efile_SUITE.erl144
-rw-r--r--erts/emulator/test/erl_drv_thread_SUITE.erl120
-rw-r--r--erts/emulator/test/erl_link_SUITE.erl1523
-rw-r--r--erts/emulator/test/erts_debug_SUITE.erl36
-rw-r--r--erts/emulator/test/estone_SUITE.erl61
-rw-r--r--erts/emulator/test/evil_SUITE.erl458
-rw-r--r--erts/emulator/test/exception_SUITE.erl631
-rw-r--r--erts/emulator/test/float_SUITE.erl324
-rw-r--r--erts/emulator/test/float_SUITE_data/has_fpe_bug.erl2
-rw-r--r--erts/emulator/test/fun_SUITE.erl798
-rw-r--r--erts/emulator/test/fun_r13_SUITE.erl92
-rw-r--r--erts/emulator/test/gc_SUITE.erl80
-rw-r--r--erts/emulator/test/guard_SUITE.erl324
-rw-r--r--erts/emulator/test/hash_SUITE.erl78
-rw-r--r--erts/emulator/test/hibernate_SUITE.erl256
-rw-r--r--erts/emulator/test/ignore_cores.erl14
-rw-r--r--erts/emulator/test/list_bif_SUITE.erl169
-rw-r--r--erts/emulator/test/long_timers_test.erl2
-rw-r--r--erts/emulator/test/lttng_SUITE.erl498
-rw-r--r--erts/emulator/test/lttng_SUITE_data/Makefile.src7
-rw-r--r--erts/emulator/test/lttng_SUITE_data/caller_drv.c159
-rw-r--r--erts/emulator/test/map_SUITE.erl338
-rw-r--r--erts/emulator/test/match_spec_SUITE.erl1166
-rw-r--r--erts/emulator/test/message_queue_data_SUITE.erl74
-rw-r--r--erts/emulator/test/module_info_SUITE.erl45
-rw-r--r--erts/emulator/test/monitor_SUITE.erl1092
-rw-r--r--erts/emulator/test/mtx_SUITE.erl406
-rw-r--r--erts/emulator/test/mtx_SUITE_data/Makefile.src2
-rw-r--r--erts/emulator/test/mtx_SUITE_data/mtx_SUITE.c2
-rw-r--r--erts/emulator/test/multi_load_SUITE.erl31
-rw-r--r--erts/emulator/test/nested_SUITE.erl96
-rw-r--r--erts/emulator/test/nif_SUITE.erl1443
-rw-r--r--erts/emulator/test/nif_SUITE_data/Makefile.src3
-rw-r--r--erts/emulator/test/nif_SUITE_data/echo_drv.c62
-rw-r--r--erts/emulator/test/nif_SUITE_data/nif_SUITE.c286
-rw-r--r--erts/emulator/test/nif_SUITE_data/nif_mod.c2
-rw-r--r--erts/emulator/test/nif_SUITE_data/nif_mod.erl4
-rw-r--r--erts/emulator/test/nif_SUITE_data/tester.erl3
-rw-r--r--erts/emulator/test/node_container_SUITE.erl1627
-rw-r--r--erts/emulator/test/nofrag_SUITE.erl106
-rw-r--r--erts/emulator/test/num_bif_SUITE.erl2
-rw-r--r--erts/emulator/test/old_mod.erl34
-rw-r--r--erts/emulator/test/old_scheduler_SUITE.erl349
-rw-r--r--erts/emulator/test/op_SUITE.erl294
-rw-r--r--erts/emulator/test/port_SUITE.erl2005
-rw-r--r--erts/emulator/test/port_SUITE_data/dead_port.c2
-rw-r--r--erts/emulator/test/port_SUITE_data/port_test.erl2
-rw-r--r--erts/emulator/test/port_bif_SUITE.erl87
-rw-r--r--erts/emulator/test/port_trace_SUITE.erl652
-rw-r--r--erts/emulator/test/port_trace_SUITE_data/Makefile.src3
-rw-r--r--erts/emulator/test/port_trace_SUITE_data/echo_drv.c277
-rw-r--r--erts/emulator/test/process_SUITE.erl392
-rw-r--r--erts/emulator/test/pseudoknot_SUITE.erl2
-rw-r--r--erts/emulator/test/random_iolist.erl2
-rw-r--r--erts/emulator/test/receive_SUITE.erl35
-rw-r--r--erts/emulator/test/ref_SUITE.erl51
-rw-r--r--erts/emulator/test/register_SUITE.erl62
-rw-r--r--erts/emulator/test/save_calls_SUITE.erl271
-rw-r--r--erts/emulator/test/scheduler_SUITE.erl1894
-rw-r--r--erts/emulator/test/scheduler_SUITE_data/Makefile.src8
-rw-r--r--erts/emulator/test/scheduler_SUITE_data/scheduler_SUITE.c31
-rw-r--r--erts/emulator/test/send_term_SUITE.erl180
-rw-r--r--erts/emulator/test/sensitive_SUITE.erl505
-rw-r--r--erts/emulator/test/signal_SUITE.erl438
-rw-r--r--erts/emulator/test/smoke_test_SUITE.erl48
-rw-r--r--erts/emulator/test/statistics_SUITE.erl433
-rw-r--r--erts/emulator/test/system_info_SUITE.erl237
-rw-r--r--erts/emulator/test/system_profile_SUITE.erl110
-rw-r--r--erts/emulator/test/time_SUITE.erl298
-rw-r--r--erts/emulator/test/timer_bif_SUITE.erl714
-rw-r--r--erts/emulator/test/trace_SUITE.erl2527
-rw-r--r--erts/emulator/test/trace_bif_SUITE.erl337
-rw-r--r--erts/emulator/test/trace_call_count_SUITE.erl314
-rw-r--r--erts/emulator/test/trace_call_time_SUITE.erl657
-rw-r--r--erts/emulator/test/trace_local_SUITE.erl1482
-rw-r--r--erts/emulator/test/trace_local_SUITE_data/trace_local_dummy.erl2
-rw-r--r--erts/emulator/test/trace_meta_SUITE.erl74
-rw-r--r--erts/emulator/test/trace_nif_SUITE.erl335
-rw-r--r--erts/emulator/test/trace_port_SUITE.erl772
-rw-r--r--erts/emulator/test/tracer_SUITE.erl617
-rw-r--r--erts/emulator/test/tracer_SUITE_data/Makefile.src8
-rw-r--r--erts/emulator/test/tracer_SUITE_data/tracer_test.c116
-rw-r--r--erts/emulator/test/tracer_test.erl55
-rw-r--r--erts/emulator/test/tuple_SUITE.erl10
-rw-r--r--erts/emulator/test/unique_SUITE.erl251
-rw-r--r--erts/emulator/test/z_SUITE.erl302
-rwxr-xr-xerts/emulator/utils/beam_makeops332
-rwxr-xr-xerts/emulator/utils/beam_strip2
-rwxr-xr-xerts/emulator/utils/count2
-rw-r--r--erts/emulator/utils/loaded2
-rwxr-xr-xerts/emulator/utils/make_alloc_types2
-rwxr-xr-xerts/emulator/utils/make_compiler_flags2
-rwxr-xr-xerts/emulator/utils/make_driver_tab15
-rwxr-xr-xerts/emulator/utils/make_preload2
-rwxr-xr-xerts/emulator/utils/make_tables2
-rwxr-xr-xerts/emulator/utils/make_version2
-rw-r--r--erts/emulator/utils/mkver.c2
-rw-r--r--erts/emulator/valgrind/suppress.patched.3.6.02
-rw-r--r--erts/emulator/valgrind/suppress.standard2
-rw-r--r--erts/emulator/zlib/zlib.mk2
-rw-r--r--erts/epmd/Makefile2
-rw-r--r--erts/epmd/epmd.mk2
-rw-r--r--erts/epmd/src/Makefile2
-rw-r--r--erts/epmd/src/Makefile.in2
-rw-r--r--erts/epmd/src/epmd.c10
-rw-r--r--erts/epmd/src/epmd.h2
-rw-r--r--erts/epmd/src/epmd_cli.c32
-rw-r--r--erts/epmd/src/epmd_int.h69
-rw-r--r--erts/epmd/src/epmd_srv.c214
-rw-r--r--erts/epmd/test/Makefile2
-rw-r--r--erts/epmd/test/epmd_SUITE.erl1214
-rw-r--r--erts/etc/Makefile2
-rw-r--r--erts/etc/common/Makefile2
-rw-r--r--erts/etc/common/Makefile.in2
-rw-r--r--erts/etc/common/ct_run.c26
-rw-r--r--erts/etc/common/dialyzer.c26
-rw-r--r--erts/etc/common/erlc.c26
-rw-r--r--erts/etc/common/erlexec.c34
-rw-r--r--erts/etc/common/escript.c26
-rw-r--r--erts/etc/common/heart.c2
-rw-r--r--erts/etc/common/inet_gethost.c4
-rw-r--r--erts/etc/common/typer.c26
-rw-r--r--erts/etc/unix/Install.src2
-rw-r--r--erts/etc/unix/Makefile2
-rw-r--r--erts/etc/unix/README2
-rw-r--r--erts/etc/unix/RELNOTES2
-rw-r--r--erts/etc/unix/cerl.src2
-rw-r--r--erts/etc/unix/dyn_erl.c2
-rw-r--r--erts/etc/unix/erl.src.src2
-rw-r--r--erts/etc/unix/etp-commands.in4
-rw-r--r--erts/etc/unix/etp-thr.py2
-rw-r--r--erts/etc/unix/etp_commands.erl2
-rw-r--r--erts/etc/unix/etp_commands.mk2
-rw-r--r--erts/etc/unix/format_man_pages2
-rw-r--r--erts/etc/unix/run_erl.c18
-rw-r--r--erts/etc/unix/run_erl.h2
-rw-r--r--erts/etc/unix/safe_string.c2
-rw-r--r--erts/etc/unix/safe_string.h2
-rw-r--r--erts/etc/unix/setuid_socket_wrap.c2
-rw-r--r--erts/etc/unix/start.src2
-rw-r--r--erts/etc/unix/start_erl.src2
-rw-r--r--erts/etc/win32/Install.c2
-rw-r--r--erts/etc/win32/Makefile2
-rw-r--r--erts/etc/win32/Nmakefile.start_erl2
-rw-r--r--erts/etc/win32/beam.rc2
-rwxr-xr-xerts/etc/win32/cygwin_tools/erl2
-rwxr-xr-xerts/etc/win32/cygwin_tools/erlc2
-rwxr-xr-xerts/etc/win32/cygwin_tools/javac.sh2
-rwxr-xr-xerts/etc/win32/cygwin_tools/make_bootstrap_ini.sh2
-rwxr-xr-xerts/etc/win32/cygwin_tools/make_local_ini.sh2
-rwxr-xr-xerts/etc/win32/cygwin_tools/mingw/ar.sh2
-rwxr-xr-xerts/etc/win32/cygwin_tools/mingw/cc.sh2
-rw-r--r--erts/etc/win32/cygwin_tools/mingw/coffix.c2
-rwxr-xr-xerts/etc/win32/cygwin_tools/mingw/emu_cc.sh2
-rwxr-xr-xerts/etc/win32/cygwin_tools/mingw/ld.sh2
-rwxr-xr-xerts/etc/win32/cygwin_tools/mingw/mc.sh2
-rwxr-xr-xerts/etc/win32/cygwin_tools/mingw/rc.sh2
-rwxr-xr-xerts/etc/win32/cygwin_tools/vc/ar.sh2
-rwxr-xr-xerts/etc/win32/cygwin_tools/vc/cc.sh2
-rw-r--r--erts/etc/win32/cygwin_tools/vc/cc_wrap.c2
-rw-r--r--erts/etc/win32/cygwin_tools/vc/coffix.c2
-rwxr-xr-xerts/etc/win32/cygwin_tools/vc/emu_cc.sh2
-rwxr-xr-xerts/etc/win32/cygwin_tools/vc/ld.sh2
-rw-r--r--erts/etc/win32/cygwin_tools/vc/ld_wrap.c2
-rwxr-xr-xerts/etc/win32/cygwin_tools/vc/mc.sh2
-rwxr-xr-xerts/etc/win32/cygwin_tools/vc/rc.sh2
-rw-r--r--erts/etc/win32/erl.c2
-rw-r--r--erts/etc/win32/erl.rc2
-rw-r--r--erts/etc/win32/erl_log.c2
-rw-r--r--erts/etc/win32/erlsrv/erlsrv_global.h2
-rw-r--r--erts/etc/win32/erlsrv/erlsrv_interactive.c2
-rw-r--r--erts/etc/win32/erlsrv/erlsrv_interactive.h2
-rw-r--r--erts/etc/win32/erlsrv/erlsrv_main.c2
-rw-r--r--erts/etc/win32/erlsrv/erlsrv_registry.c2
-rw-r--r--erts/etc/win32/erlsrv/erlsrv_registry.h2
-rw-r--r--erts/etc/win32/erlsrv/erlsrv_service.c2
-rw-r--r--erts/etc/win32/erlsrv/erlsrv_service.h2
-rw-r--r--erts/etc/win32/erlsrv/erlsrv_util.c2
-rw-r--r--erts/etc/win32/erlsrv/erlsrv_util.h2
-rw-r--r--erts/etc/win32/init_file.c2
-rw-r--r--erts/etc/win32/init_file.h2
-rw-r--r--erts/etc/win32/msys_tools/erl2
-rw-r--r--erts/etc/win32/msys_tools/erlc2
-rw-r--r--erts/etc/win32/msys_tools/javac.sh2
-rw-r--r--erts/etc/win32/msys_tools/make_bootstrap_ini.sh2
-rw-r--r--erts/etc/win32/msys_tools/make_local_ini.sh2
-rw-r--r--erts/etc/win32/msys_tools/vc/ar.sh2
-rw-r--r--erts/etc/win32/msys_tools/vc/cc.sh2
-rw-r--r--erts/etc/win32/msys_tools/vc/coffix.c2
-rw-r--r--erts/etc/win32/msys_tools/vc/emu_cc.sh2
-rw-r--r--erts/etc/win32/msys_tools/vc/ld.sh2
-rw-r--r--erts/etc/win32/msys_tools/vc/mc.sh2
-rw-r--r--erts/etc/win32/msys_tools/vc/rc.sh2
-rw-r--r--erts/etc/win32/nsis/Makefile2
-rwxr-xr-xerts/etc/win32/nsis/dll_version_helper.sh2
-rw-r--r--erts/etc/win32/nsis/erlang20.nsi2
-rwxr-xr-xerts/etc/win32/nsis/find_redist.sh2
-rw-r--r--erts/etc/win32/port_entry.c2
-rw-r--r--erts/etc/win32/resource.h2
-rw-r--r--erts/etc/win32/start_erl.c2
-rw-r--r--erts/etc/win32/win_erlexec.c2
-rw-r--r--erts/example/Makefile2
-rw-r--r--erts/example/matrix_nif.c2
-rw-r--r--erts/example/matrix_nif.erl2
-rw-r--r--erts/example/next_perm.cc2
-rw-r--r--erts/example/next_perm.erl2
-rw-r--r--erts/example/pg_async.c2
-rw-r--r--erts/example/pg_async.erl2
-rw-r--r--erts/example/pg_async2.c2
-rw-r--r--erts/example/pg_async2.erl2
-rw-r--r--erts/example/pg_encode.c2
-rw-r--r--erts/example/pg_encode.h2
-rw-r--r--erts/example/pg_encode2.c2
-rw-r--r--erts/example/pg_encode2.h2
-rw-r--r--erts/example/pg_sync.c2
-rw-r--r--erts/example/pg_sync.erl2
-rw-r--r--erts/include/erl_fixed_size_int_types.h2
-rw-r--r--erts/include/erl_int_sizes_config.h.in2
-rw-r--r--erts/include/erl_memory_trace_parser.h2
-rw-r--r--erts/include/internal/README2
-rw-r--r--erts/include/internal/erl_errno.h2
-rw-r--r--erts/include/internal/erl_memory_trace_protocol.h2
-rw-r--r--erts/include/internal/erl_misc_utils.h2
-rw-r--r--erts/include/internal/erl_printf.h2
-rw-r--r--erts/include/internal/erl_printf_format.h2
-rw-r--r--erts/include/internal/erts_internal.mk.in2
-rw-r--r--erts/include/internal/ethr_atomics.h2
-rw-r--r--erts/include/internal/ethr_internal.h2
-rw-r--r--erts/include/internal/ethr_mutex.h2
-rw-r--r--erts/include/internal/ethr_optimized_fallbacks.h2
-rw-r--r--erts/include/internal/ethread.h4
-rw-r--r--erts/include/internal/ethread.mk.in2
-rw-r--r--erts/include/internal/ethread_header_config.h.in2
-rw-r--r--erts/include/internal/ethread_inline.h2
-rw-r--r--erts/include/internal/i386/atomic.h2
-rw-r--r--erts/include/internal/i386/ethr_dw_atomic.h2
-rw-r--r--erts/include/internal/i386/ethr_membar.h2
-rw-r--r--erts/include/internal/i386/ethread.h2
-rw-r--r--erts/include/internal/i386/rwlock.h2
-rw-r--r--erts/include/internal/i386/spinlock.h2
-rw-r--r--erts/include/internal/libatomic_ops/ethr_atomic.h2
-rw-r--r--erts/include/internal/libatomic_ops/ethr_dw_atomic.h2
-rw-r--r--erts/include/internal/libatomic_ops/ethr_membar.h2
-rw-r--r--erts/include/internal/libatomic_ops/ethread.h2
-rw-r--r--erts/include/internal/ppc32/atomic.h2
-rw-r--r--erts/include/internal/ppc32/ethr_membar.h2
-rw-r--r--erts/include/internal/ppc32/ethread.h2
-rw-r--r--erts/include/internal/ppc32/rwlock.h2
-rw-r--r--erts/include/internal/ppc32/spinlock.h2
-rw-r--r--erts/include/internal/pthread/ethr_event.h2
-rw-r--r--erts/include/internal/sparc32/atomic.h2
-rw-r--r--erts/include/internal/sparc32/ethr_membar.h2
-rw-r--r--erts/include/internal/sparc32/ethread.h2
-rw-r--r--erts/include/internal/sparc32/rwlock.h2
-rw-r--r--erts/include/internal/sparc32/spinlock.h2
-rw-r--r--erts/include/internal/sparc64/ethread.h2
-rw-r--r--erts/include/internal/tile/atomic.h2
-rw-r--r--erts/include/internal/tile/ethr_membar.h2
-rw-r--r--erts/include/internal/tile/ethread.h2
-rw-r--r--erts/include/internal/win/ethr_atomic.h2
-rw-r--r--erts/include/internal/win/ethr_dw_atomic.h2
-rw-r--r--erts/include/internal/win/ethr_event.h2
-rw-r--r--erts/include/internal/win/ethr_membar.h2
-rw-r--r--erts/include/internal/win/ethread.h2
-rw-r--r--erts/include/internal/x86_64/ethread.h2
-rw-r--r--erts/lib/internal/README2
-rw-r--r--erts/lib_src/Makefile2
-rw-r--r--erts/lib_src/Makefile.in3
-rw-r--r--erts/lib_src/common/erl_memory_trace_parser.c2
-rw-r--r--erts/lib_src/common/erl_misc_utils.c2
-rw-r--r--erts/lib_src/common/erl_printf.c2
-rw-r--r--erts/lib_src/common/erl_printf_format.c2
-rw-r--r--erts/lib_src/common/ethr_atomics.c2
-rw-r--r--erts/lib_src/common/ethr_aux.c2
-rw-r--r--erts/lib_src/common/ethr_cbf.c2
-rw-r--r--erts/lib_src/common/ethr_mutex.c2
-rw-r--r--erts/lib_src/pthread/ethr_event.c8
-rw-r--r--erts/lib_src/pthread/ethr_x86_sse2_asm.c2
-rw-r--r--erts/lib_src/pthread/ethread.c2
-rwxr-xr-xerts/lib_src/utils/make_atomics_api2
-rw-r--r--erts/lib_src/win/ethr_event.c2
-rw-r--r--erts/lib_src/win/ethread.c2
-rw-r--r--erts/preloaded/Makefile2
-rw-r--r--erts/preloaded/ebin/erl_prim_loader.beambin55528 -> 55732 bytes
-rw-r--r--erts/preloaded/ebin/erl_tracer.beambin0 -> 2112 bytes
-rw-r--r--erts/preloaded/ebin/erlang.beambin102148 -> 104620 bytes
-rw-r--r--erts/preloaded/ebin/erts_code_purger.beambin8704 -> 8696 bytes
-rw-r--r--erts/preloaded/ebin/erts_internal.beambin9976 -> 10536 bytes
-rw-r--r--erts/preloaded/ebin/init.beambin44588 -> 49924 bytes
-rw-r--r--erts/preloaded/ebin/otp_ring0.beambin1448 -> 1444 bytes
-rw-r--r--erts/preloaded/ebin/prim_eval.beambin1320 -> 1312 bytes
-rw-r--r--erts/preloaded/ebin/prim_file.beambin44800 -> 44764 bytes
-rw-r--r--erts/preloaded/ebin/prim_inet.beambin72608 -> 72544 bytes
-rw-r--r--erts/preloaded/ebin/prim_zip.beambin23156 -> 23152 bytes
-rw-r--r--erts/preloaded/ebin/zlib.beambin14156 -> 14136 bytes
-rw-r--r--erts/preloaded/src/Makefile5
-rw-r--r--erts/preloaded/src/add_abstract_code2
-rw-r--r--erts/preloaded/src/erl_prim_loader.erl19
-rw-r--r--erts/preloaded/src/erl_tracer.erl63
-rw-r--r--erts/preloaded/src/erlang.erl145
-rw-r--r--erts/preloaded/src/erts.app.src2
-rw-r--r--erts/preloaded/src/erts_internal.erl31
-rw-r--r--erts/preloaded/src/init.erl200
-rw-r--r--erts/preloaded/src/otp_ring0.erl2
-rw-r--r--erts/preloaded/src/prim_eval.S2
-rw-r--r--erts/preloaded/src/prim_eval.erl2
-rw-r--r--erts/preloaded/src/prim_inet.erl2
-rw-r--r--erts/preloaded/src/prim_zip.erl2
-rw-r--r--erts/preloaded/src/zip_internal.hrl2
-rw-r--r--erts/preloaded/src/zlib.erl2
-rw-r--r--erts/start_scripts/Makefile2
-rw-r--r--erts/start_scripts/no_dot_erlang.rel.src2
-rw-r--r--erts/start_scripts/start_all_example.rel.src2
-rw-r--r--erts/start_scripts/start_clean.rel.src2
-rw-r--r--erts/start_scripts/start_sasl.rel.src2
-rw-r--r--erts/test/Makefile2
-rw-r--r--erts/test/erl_print_SUITE.erl507
-rw-r--r--erts/test/erl_print_SUITE_data/Makefile.src2
-rw-r--r--erts/test/erl_print_SUITE_data/character_test.h2
-rw-r--r--erts/test/erl_print_SUITE_data/erl_print_tests.c2
-rw-r--r--erts/test/erl_print_SUITE_data/integer_64_test.h2
-rw-r--r--erts/test/erl_print_SUITE_data/integer_test.h2
-rw-r--r--erts/test/erl_print_SUITE_data/snprintf_test.h2
-rw-r--r--erts/test/erl_print_SUITE_data/string_test.h2
-rw-r--r--erts/test/erlc_SUITE.erl329
-rw-r--r--erts/test/erlc_SUITE_data/include/erl_test.hrl2
-rw-r--r--erts/test/erlc_SUITE_data/src/erl_test_bad.erl2
-rw-r--r--erts/test/erlc_SUITE_data/src/erl_test_missing_header.erl2
-rw-r--r--erts/test/erlc_SUITE_data/src/erl_test_ok.erl2
-rw-r--r--erts/test/erlc_SUITE_data/src/yecc_test_bad.yrl2
-rw-r--r--erts/test/erlc_SUITE_data/src/yecc_test_ok.yrl2
-rw-r--r--erts/test/erlexec_SUITE.erl240
-rw-r--r--erts/test/erlexec_SUITE_data/Makefile.src2
-rw-r--r--erts/test/erlexec_SUITE_data/erlexec_tests.c2
-rw-r--r--erts/test/ethread_SUITE.erl247
-rw-r--r--erts/test/ethread_SUITE_data/Makefile.src2
-rw-r--r--erts/test/ethread_SUITE_data/ethread_tests.c2
-rw-r--r--erts/test/ignore_cores.erl14
-rw-r--r--erts/test/install_SUITE.erl350
-rw-r--r--erts/test/nt_SUITE.erl703
-rw-r--r--erts/test/nt_SUITE_data/Makefile.src2
-rw-r--r--erts/test/nt_SUITE_data/nt_info.c2
-rw-r--r--erts/test/otp_SUITE.erl563
-rw-r--r--erts/test/run_erl_SUITE.erl155
-rw-r--r--erts/test/run_erl_SUITE_data/defuncter.pl2
-rw-r--r--erts/test/run_erl_SUITE_data/run_erl_test.pl2
-rw-r--r--erts/test/upgrade_SUITE.erl20
-rw-r--r--erts/test/upgrade_SUITE_data/start.src2
-rw-r--r--erts/test/utils/gccifier.c2
-rwxr-xr-xerts/test/utils/gccifier.sh2
-rw-r--r--erts/test/z_SUITE.erl47
-rw-r--r--erts/vsn.mk2
-rw-r--r--lib/Makefile2
-rw-r--r--lib/asn1/Makefile2
-rw-r--r--lib/asn1/c_src/Makefile2
-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.xml29
-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.erl2
-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.erl58
-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.erl18
-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.erl23
-rw-r--r--lib/asn1/test/ber_decode_error.erl2
-rw-r--r--lib/asn1/test/error_SUITE.erl6
-rw-r--r--lib/asn1/test/h323test.erl2
-rw-r--r--lib/asn1/test/syntax_SUITE.erl4
-rw-r--r--lib/asn1/test/testChoExtension.erl2
-rw-r--r--lib/asn1/test/testChoExternal.erl2
-rw-r--r--lib/asn1/test/testChoOptional.erl2
-rw-r--r--lib/asn1/test/testChoPrim.erl2
-rw-r--r--lib/asn1/test/testChoRecursive.erl2
-rw-r--r--lib/asn1/test/testChoTypeRefCho.erl2
-rw-r--r--lib/asn1/test/testChoTypeRefPrim.erl2
-rw-r--r--lib/asn1/test/testChoTypeRefSeq.erl2
-rw-r--r--lib/asn1/test/testChoTypeRefSet.erl2
-rw-r--r--lib/asn1/test/testChoiceIndefinite.erl2
-rw-r--r--lib/asn1/test/testCompactBitString.erl2
-rw-r--r--lib/asn1/test/testConstraints.erl2
-rw-r--r--lib/asn1/test/testContextSwitchingTypes.erl4
-rw-r--r--lib/asn1/test/testDER.erl2
-rw-r--r--lib/asn1/test/testDeepTConstr.erl2
-rw-r--r--lib/asn1/test/testDef.erl2
-rw-r--r--lib/asn1/test/testDoubleEllipses.erl2
-rw-r--r--lib/asn1/test/testEnumExt.erl2
-rw-r--r--lib/asn1/test/testExtensibilityImplied.erl2
-rw-r--r--lib/asn1/test/testFragmented.erl2
-rw-r--r--lib/asn1/test/testINSTANCE_OF.erl2
-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.erl2
-rw-r--r--lib/asn1/test/testMegaco.erl6
-rw-r--r--lib/asn1/test/testMergeCompile.erl16
-rw-r--r--lib/asn1/test/testMultipleLevels.erl2
-rw-r--r--lib/asn1/test/testNBAPsystem.erl18
-rw-r--r--lib/asn1/test/testOpenTypeImplicitTag.erl2
-rw-r--r--lib/asn1/test/testOpt.erl2
-rw-r--r--lib/asn1/test/testParamBasic.erl2
-rw-r--r--lib/asn1/test/testParameterizedInfObj.erl8
-rw-r--r--lib/asn1/test/testPrim.erl2
-rw-r--r--lib/asn1/test/testPrimExternal.erl2
-rw-r--r--lib/asn1/test/testPrimStrings.erl2
-rw-r--r--lib/asn1/test/testRfcs.erl6
-rw-r--r--lib/asn1/test/testSSLspecs.erl52
-rw-r--r--lib/asn1/test/testSelectionTypes.erl2
-rw-r--r--lib/asn1/test/testSeq2738.erl2
-rw-r--r--lib/asn1/test/testSeqDefault.erl2
-rw-r--r--lib/asn1/test/testSeqExtension.erl2
-rw-r--r--lib/asn1/test/testSeqExternal.erl2
-rw-r--r--lib/asn1/test/testSeqOf.erl2
-rw-r--r--lib/asn1/test/testSeqOfCho.erl2
-rw-r--r--lib/asn1/test/testSeqOfExternal.erl2
-rw-r--r--lib/asn1/test/testSeqOfIndefinite.erl16
-rw-r--r--lib/asn1/test/testSeqOfTag.erl2
-rw-r--r--lib/asn1/test/testSeqOptional.erl2
-rw-r--r--lib/asn1/test/testSeqPrim.erl2
-rw-r--r--lib/asn1/test/testSeqSetDefaultVal.erl2
-rw-r--r--lib/asn1/test/testSeqSetIndefinite.erl2
-rw-r--r--lib/asn1/test/testSeqTag.erl2
-rw-r--r--lib/asn1/test/testSeqTypeRefCho.erl2
-rw-r--r--lib/asn1/test/testSeqTypeRefPrim.erl2
-rw-r--r--lib/asn1/test/testSeqTypeRefSeq.erl2
-rw-r--r--lib/asn1/test/testSeqTypeRefSet.erl2
-rw-r--r--lib/asn1/test/testSetDefault.erl2
-rw-r--r--lib/asn1/test/testSetExtension.erl2
-rw-r--r--lib/asn1/test/testSetExternal.erl2
-rw-r--r--lib/asn1/test/testSetOf.erl2
-rw-r--r--lib/asn1/test/testSetOfCho.erl2
-rw-r--r--lib/asn1/test/testSetOfExternal.erl2
-rw-r--r--lib/asn1/test/testSetOfTag.erl2
-rw-r--r--lib/asn1/test/testSetOptional.erl2
-rw-r--r--lib/asn1/test/testSetPrim.erl2
-rw-r--r--lib/asn1/test/testSetTag.erl2
-rw-r--r--lib/asn1/test/testSetTypeRefCho.erl2
-rw-r--r--lib/asn1/test/testSetTypeRefPrim.erl2
-rw-r--r--lib/asn1/test/testSetTypeRefSeq.erl2
-rw-r--r--lib/asn1/test/testSetTypeRefSet.erl2
-rw-r--r--lib/asn1/test/testTCAP.erl18
-rw-r--r--lib/asn1/test/testTcapsystem.erl2
-rw-r--r--lib/asn1/test/testTimer.erl2
-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.erl85
-rw-r--r--lib/asn1/test/test_modified_x420.erl4
-rw-r--r--lib/asn1/test/test_partial_incomplete_decode.erl60
-rw-r--r--lib/asn1/test/test_selective_decode.erl2
-rw-r--r--lib/asn1/test/test_special_decode_performance.erl24
-rw-r--r--lib/asn1/test/test_undecoded_rest.erl4
-rw-r--r--lib/asn1/test/test_x691.erl2
-rw-r--r--lib/asn1/vsn.mk2
-rw-r--r--lib/common_test/Makefile2
-rw-r--r--lib/common_test/doc/src/Makefile45
-rw-r--r--lib/common_test/doc/src/basics_chapter.xml232
-rw-r--r--lib/common_test/doc/src/book.xml2
-rw-r--r--lib/common_test/doc/src/common_test_app.xml778
-rw-r--r--lib/common_test/doc/src/config_file_chapter.xml560
-rw-r--r--lib/common_test/doc/src/cover_chapter.xml351
-rw-r--r--lib/common_test/doc/src/ct.xml1415
-rw-r--r--lib/common_test/doc/src/ct_cover.xml106
-rw-r--r--lib/common_test/doc/src/ct_ftp.xml277
-rw-r--r--lib/common_test/doc/src/ct_hooks.xml862
-rw-r--r--lib/common_test/doc/src/ct_hooks_chapter.xml693
-rw-r--r--lib/common_test/doc/src/ct_master.xml220
-rw-r--r--lib/common_test/doc/src/ct_master_chapter.xml293
-rw-r--r--lib/common_test/doc/src/ct_netconfc.xml1042
-rw-r--r--lib/common_test/doc/src/ct_property_test.xml116
-rw-r--r--lib/common_test/doc/src/ct_rpc.xml220
-rw-r--r--lib/common_test/doc/src/ct_run.xml302
-rw-r--r--lib/common_test/doc/src/ct_slave.xml221
-rw-r--r--lib/common_test/doc/src/ct_snmp.xml523
-rw-r--r--lib/common_test/doc/src/ct_ssh.xml1150
-rw-r--r--lib/common_test/doc/src/ct_telnet.xml604
-rw-r--r--lib/common_test/doc/src/dependencies_chapter.xml384
-rw-r--r--lib/common_test/doc/src/event_handler_chapter.xml386
-rw-r--r--lib/common_test/doc/src/example_chapter.xml912
-rw-r--r--lib/common_test/doc/src/getting_started_chapter.xml288
-rw-r--r--lib/common_test/doc/src/install_chapter.xml27
-rw-r--r--lib/common_test/doc/src/introduction.xml75
-rw-r--r--lib/common_test/doc/src/notes.xml149
-rw-r--r--lib/common_test/doc/src/notes_history.xml2
-rw-r--r--lib/common_test/doc/src/part.xml35
-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.xml40
-rw-r--r--lib/common_test/doc/src/run_test_chapter.xml2237
-rw-r--r--lib/common_test/doc/src/test_structure_chapter.xml148
-rw-r--r--lib/common_test/doc/src/unix_telnet.xml135
-rw-r--r--lib/common_test/doc/src/why_test_chapter.xml45
-rw-r--r--lib/common_test/doc/src/write_test_chapter.xml1371
-rw-r--r--lib/common_test/include/ct.hrl2
-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/Makefile2
-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.erl83
-rw-r--r--lib/common_test/src/ct_config.erl2
-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.erl50
-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.erl129
-rw-r--r--lib/common_test/src/ct_ftp.erl2
-rw-r--r--lib/common_test/src/ct_gen_conn.erl2
-rw-r--r--lib/common_test/src/ct_groups.erl123
-rw-r--r--lib/common_test/src/ct_hooks.erl32
-rw-r--r--lib/common_test/src/ct_hooks_lock.erl2
-rw-r--r--lib/common_test/src/ct_logs.erl329
-rw-r--r--lib/common_test/src/ct_master.erl14
-rw-r--r--lib/common_test/src/ct_master_event.erl2
-rw-r--r--lib/common_test/src/ct_master_logs.erl15
-rw-r--r--lib/common_test/src/ct_master_status.erl2
-rw-r--r--lib/common_test/src/ct_netconfc.erl15
-rw-r--r--lib/common_test/src/ct_netconfc.hrl2
-rw-r--r--lib/common_test/src/ct_property_test.erl2
-rw-r--r--lib/common_test/src/ct_release_test.erl33
-rw-r--r--lib/common_test/src/ct_repeat.erl2
-rw-r--r--lib/common_test/src/ct_rpc.erl2
-rw-r--r--lib/common_test/src/ct_run.erl65
-rw-r--r--lib/common_test/src/ct_ssh.erl2
-rw-r--r--lib/common_test/src/ct_telnet.erl46
-rw-r--r--lib/common_test/src/ct_telnet_client.erl19
-rw-r--r--lib/common_test/src/ct_testspec.erl118
-rw-r--r--lib/common_test/src/ct_util.erl9
-rw-r--r--lib/common_test/src/ct_util.hrl3
-rw-r--r--lib/common_test/src/ct_webtool.erl2
-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.erl29
-rw-r--r--lib/common_test/src/cth_surefire.erl5
-rw-r--r--lib/common_test/src/erl2html2.erl4
-rw-r--r--lib/common_test/src/test_server.app.src39
-rw-r--r--lib/common_test/src/test_server.appup.src22
-rw-r--r--lib/common_test/src/test_server.erl312
-rw-r--r--lib/common_test/src/test_server_ctrl.erl70
-rw-r--r--lib/common_test/src/test_server_gl.erl87
-rw-r--r--lib/common_test/src/test_server_internal.hrl3
-rw-r--r--lib/common_test/src/test_server_io.erl2
-rw-r--r--lib/common_test/src/test_server_node.erl13
-rw-r--r--lib/common_test/src/test_server_sup.erl8
-rw-r--r--lib/common_test/src/unix_telnet.erl18
-rw-r--r--lib/common_test/src/vts.erl2
-rw-r--r--lib/common_test/test/Makefile5
-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.erl2
-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.erl2
-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.erl28
-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.erl23
-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.erl2
-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.erl2
-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.erl48
-rw-r--r--lib/common_test/test/ct_hooks_SUITE_data/cth/tests/ct_cth_empty_SUITE.erl75
-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.erl96
-rw-r--r--lib/common_test/test/ct_hooks_SUITE_data/cth/tests/cth_log_SUITE.erl2
-rw-r--r--lib/common_test/test/ct_hooks_SUITE_data/cth/tests/empty_cth.erl40
-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.erl130
-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.erl46
-rw-r--r--lib/common_test/test/ct_hooks_SUITE_data/cth/tests/minimal_terminate_cth.erl64
-rw-r--r--lib/common_test/test/ct_hooks_SUITE_data/cth/tests/prio_cth.erl134
-rw-r--r--lib/common_test/test/ct_hooks_SUITE_data/cth/tests/recover_post_suite_cth.erl134
-rw-r--r--lib/common_test/test/ct_hooks_SUITE_data/cth/tests/same_id_cth.erl136
-rw-r--r--lib/common_test/test/ct_hooks_SUITE_data/cth/tests/skip_post_suite_cth.erl130
-rw-r--r--lib/common_test/test/ct_hooks_SUITE_data/cth/tests/skip_pre_end_cth.erl134
-rw-r--r--lib/common_test/test/ct_hooks_SUITE_data/cth/tests/skip_pre_suite_cth.erl132
-rw-r--r--lib/common_test/test/ct_hooks_SUITE_data/cth/tests/state_update_cth.erl154
-rw-r--r--lib/common_test/test/ct_hooks_SUITE_data/cth/tests/undef_cth.erl128
-rw-r--r--lib/common_test/test/ct_hooks_SUITE_data/cth/tests/update_config_cth.erl154
-rw-r--r--lib/common_test/test/ct_hooks_SUITE_data/cth/tests/verify_config_cth.erl248
-rw-r--r--lib/common_test/test/ct_hooks_SUITE_data/cth/tests/verify_data_dir_cth.erl178
-rw-r--r--lib/common_test/test/ct_master_SUITE.erl2
-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.erl2
-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.erl9
-rw-r--r--lib/common_test/test/ct_netconfc_SUITE_data/netconfc1_SUITE.erl21
-rw-r--r--lib/common_test/test/ct_netconfc_SUITE_data/netconfc_remote_SUITE.erl34
-rw-r--r--lib/common_test/test/ct_netconfc_SUITE_data/ns.erl2
-rw-r--r--lib/common_test/test/ct_pre_post_test_io_SUITE.erl128
-rw-r--r--lib/common_test/test/ct_pre_post_test_io_SUITE_data/cth_ctrl.erl10
-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.erl190
-rw-r--r--lib/common_test/test/ct_release_test_SUITE_data/release_test_SUITE.erl118
-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.erl2
-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.erl111
-rw-r--r--lib/common_test/test/ct_surefire_SUITE_data/fail_SUITE.erl (renamed from lib/compiler/test/compilation_SUITE_data/otp_2173.erl)26
-rw-r--r--lib/common_test/test/ct_surefire_SUITE_data/fail_pre_init_per_suite.erl47
-rw-r--r--lib/common_test/test/ct_surefire_SUITE_data/pass_SUITE.erl (renamed from lib/compiler/test/compilation_SUITE_data/bin_syntax_1.erl)26
-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_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.erl27
-rw-r--r--lib/common_test/test/ct_test_support_eh.erl2
-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.erl4
-rw-r--r--lib/common_test/test/test_server_SUITE.erl2
-rw-r--r--lib/common_test/test/test_server_SUITE_data/test_server_SUITE.erl2
-rw-r--r--lib/common_test/test/test_server_SUITE_data/test_server_break_SUITE.erl2
-rw-r--r--lib/common_test/test/test_server_SUITE_data/test_server_conf01_SUITE.erl2
-rw-r--r--lib/common_test/test/test_server_SUITE_data/test_server_conf02_SUITE.erl2
-rw-r--r--lib/common_test/test/test_server_SUITE_data/test_server_cover_SUITE.erl2
-rw-r--r--lib/common_test/test/test_server_SUITE_data/test_server_parallel01_SUITE.erl2
-rw-r--r--lib/common_test/test/test_server_SUITE_data/test_server_shuffle01_SUITE.erl2
-rw-r--r--lib/common_test/test/test_server_SUITE_data/test_server_skip_SUITE.erl2
-rw-r--r--lib/common_test/test/test_server_SUITE_data/test_server_unicode_SUITE.erl2
-rw-r--r--lib/common_test/test/test_server_test_lib.erl2
-rw-r--r--lib/common_test/test_server/Makefile2
-rw-r--r--lib/common_test/test_server/configure.in2
-rw-r--r--lib/common_test/test_server/ts.config4
-rw-r--r--lib/common_test/test_server/ts.erl2
-rw-r--r--lib/common_test/test_server/ts.hrl2
-rw-r--r--lib/common_test/test_server/ts_autoconf_win32.erl12
-rw-r--r--lib/common_test/test_server/ts_benchmark.erl2
-rw-r--r--lib/common_test/test_server/ts_erl_config.erl2
-rw-r--r--lib/common_test/test_server/ts_install.erl2
-rw-r--r--lib/common_test/test_server/ts_install_cth.erl19
-rw-r--r--lib/common_test/test_server/ts_lib.erl2
-rw-r--r--lib/common_test/test_server/ts_make.erl2
-rw-r--r--lib/common_test/test_server/ts_run.erl15
-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.xml2
-rw-r--r--lib/compiler/doc/src/notes.xml51
-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/Makefile2
-rw-r--r--lib/compiler/src/beam_a.erl2
-rw-r--r--lib/compiler/src/beam_asm.erl10
-rw-r--r--lib/compiler/src/beam_block.erl16
-rw-r--r--lib/compiler/src/beam_bool.erl8
-rw-r--r--lib/compiler/src/beam_bs.erl2
-rw-r--r--lib/compiler/src/beam_bsm.erl2
-rw-r--r--lib/compiler/src/beam_clean.erl2
-rw-r--r--lib/compiler/src/beam_dead.erl2
-rw-r--r--lib/compiler/src/beam_dict.erl2
-rw-r--r--lib/compiler/src/beam_disasm.erl2
-rw-r--r--lib/compiler/src/beam_disasm.hrl2
-rw-r--r--lib/compiler/src/beam_except.erl2
-rw-r--r--lib/compiler/src/beam_flatten.erl2
-rw-r--r--lib/compiler/src/beam_jump.erl2
-rw-r--r--lib/compiler/src/beam_listing.erl2
-rw-r--r--lib/compiler/src/beam_peep.erl5
-rw-r--r--lib/compiler/src/beam_receive.erl2
-rw-r--r--lib/compiler/src/beam_reorder.erl11
-rw-r--r--lib/compiler/src/beam_split.erl4
-rw-r--r--lib/compiler/src/beam_trim.erl2
-rw-r--r--lib/compiler/src/beam_type.erl68
-rw-r--r--lib/compiler/src/beam_utils.erl118
-rw-r--r--lib/compiler/src/beam_validator.erl18
-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.erl18
-rw-r--r--lib/compiler/src/compile.erl59
-rw-r--r--lib/compiler/src/compiler.app.src2
-rw-r--r--lib/compiler/src/compiler.appup.src2
-rw-r--r--lib/compiler/src/core_lib.erl2
-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.erl5
-rw-r--r--lib/compiler/src/sys_core_dsetel.erl2
-rw-r--r--lib/compiler/src/sys_core_fold.erl19
-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/v3_codegen.erl2
-rw-r--r--lib/compiler/src/v3_core.erl103
-rw-r--r--lib/compiler/src/v3_kernel.erl12
-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/Makefile6
-rw-r--r--lib/compiler/test/andor_SUITE.erl65
-rw-r--r--lib/compiler/test/apply_SUITE.erl2
-rw-r--r--lib/compiler/test/beam_block_SUITE.erl182
-rw-r--r--lib/compiler/test/beam_bool_SUITE.erl197
-rw-r--r--lib/compiler/test/beam_disasm_SUITE.erl2
-rw-r--r--lib/compiler/test/beam_except_SUITE.erl2
-rw-r--r--lib/compiler/test/beam_reorder_SUITE.erl16
-rw-r--r--lib/compiler/test/beam_type_SUITE.erl36
-rw-r--r--lib/compiler/test/beam_utils_SUITE.erl83
-rw-r--r--lib/compiler/test/beam_validator_SUITE.erl4
-rw-r--r--lib/compiler/test/bs_bincomp_SUITE.erl48
-rw-r--r--lib/compiler/test/bs_bit_binaries_SUITE.erl2
-rw-r--r--lib/compiler/test/bs_construct_SUITE.erl2
-rw-r--r--lib/compiler/test/bs_match_SUITE.erl98
-rw-r--r--lib/compiler/test/bs_utf_SUITE.erl2
-rw-r--r--lib/compiler/test/compilation_SUITE.erl377
-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_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_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.erl344
-rw-r--r--lib/compiler/test/compile_SUITE_data/attributes.erl2
-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.erl2
-rw-r--r--lib/compiler/test/core_fold_SUITE.erl2
-rw-r--r--lib/compiler/test/error_SUITE.erl2
-rw-r--r--lib/compiler/test/error_SUITE_data/head_mismatch_line.erl2
-rw-r--r--lib/compiler/test/float_SUITE.erl2
-rw-r--r--lib/compiler/test/fun_SUITE.erl32
-rw-r--r--lib/compiler/test/guard_SUITE.erl52
-rw-r--r--lib/compiler/test/inline_SUITE.erl2
-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.erl14
-rw-r--r--lib/compiler/test/match_SUITE.erl143
-rw-r--r--lib/compiler/test/misc_SUITE.erl5
-rw-r--r--lib/compiler/test/num_bif_SUITE.erl2
-rw-r--r--lib/compiler/test/receive_SUITE.erl2
-rw-r--r--lib/compiler/test/record_SUITE.erl62
-rw-r--r--lib/compiler/test/record_SUITE_data/record_access_in_guards.erl2
-rw-r--r--lib/compiler/test/regressions_SUITE.erl2
-rw-r--r--lib/compiler/test/test_lib.erl18
-rw-r--r--lib/compiler/test/trycatch_SUITE.erl94
-rw-r--r--lib/compiler/test/warnings_SUITE.erl2
-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.xml2
-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/Makefile2
-rw-r--r--lib/cosEvent/test/event_channel_SUITE.erl2
-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.erl2
-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.xml2
-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/Makefile2
-rw-r--r--lib/cosEventDomain/test/event_domain_SUITE.erl2
-rw-r--r--lib/cosEventDomain/test/generated_SUITE.erl2
-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.xml2
-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/Makefile2
-rw-r--r--lib/cosFileTransfer/test/fileTransfer_SUITE.erl2
-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.xml18
-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/Makefile2
-rw-r--r--lib/cosNotification/test/eventDB_SUITE.erl2
-rw-r--r--lib/cosNotification/test/generated_SUITE.erl2
-rw-r--r--lib/cosNotification/test/grammar_SUITE.erl2
-rw-r--r--lib/cosNotification/test/notification_SUITE.erl2
-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.xml2
-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/Makefile2
-rw-r--r--lib/cosProperty/test/generated_SUITE.erl2
-rw-r--r--lib/cosProperty/test/property_SUITE.erl2
-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.xml18
-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/Makefile2
-rw-r--r--lib/cosTime/test/generated_SUITE.erl2
-rw-r--r--lib/cosTime/test/time_SUITE.erl2
-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.xml18
-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/Makefile2
-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.erl2
-rw-r--r--lib/cosTransactions/test/transactions_SUITE.erl2
-rw-r--r--lib/cosTransactions/vsn.mk2
-rw-r--r--lib/crypto/Makefile2
-rw-r--r--lib/crypto/c_src/Makefile.in2
-rw-r--r--lib/crypto/c_src/crypto.c240
-rw-r--r--lib/crypto/c_src/crypto_callback.c2
-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.xml22
-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.xml25
-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.erl30
-rw-r--r--lib/crypto/test/blowfish_SUITE.erl2
-rw-r--r--lib/crypto/test/crypto_SUITE.erl53
-rw-r--r--lib/crypto/test/old_crypto_SUITE.erl10
-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.xml17
-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.erl2
-rw-r--r--lib/debugger/src/dbg_idb.erl2
-rw-r--r--lib/debugger/src/dbg_iserver.erl2
-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.erl2
-rw-r--r--lib/debugger/src/dbg_wx_code.erl2
-rw-r--r--lib/debugger/src/dbg_wx_filedialog_win.erl2
-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.erl2
-rw-r--r--lib/debugger/src/dbg_wx_mon_win.erl2
-rw-r--r--lib/debugger/src/dbg_wx_settings.erl2
-rw-r--r--lib/debugger/src/dbg_wx_src_view.erl2
-rw-r--r--lib/debugger/src/dbg_wx_trace_win.erl2
-rw-r--r--lib/debugger/src/dbg_wx_view.erl2
-rw-r--r--lib/debugger/src/dbg_wx_winman.erl2
-rw-r--r--lib/debugger/src/debugger.appup.src2
-rw-r--r--lib/debugger/src/debugger.erl2
-rw-r--r--lib/debugger/src/i.erl2
-rw-r--r--lib/debugger/src/int.erl2
-rw-r--r--lib/debugger/test/Makefile2
-rw-r--r--lib/debugger/test/andor_SUITE.erl183
-rw-r--r--lib/debugger/test/bs_bincomp_SUITE.erl69
-rw-r--r--lib/debugger/test/bs_construct_SUITE.erl262
-rw-r--r--lib/debugger/test/bs_match_bin_SUITE.erl73
-rw-r--r--lib/debugger/test/bs_match_int_SUITE.erl123
-rw-r--r--lib/debugger/test/bs_match_misc_SUITE.erl225
-rw-r--r--lib/debugger/test/bs_match_tail_SUITE.erl69
-rw-r--r--lib/debugger/test/bs_utf_SUITE.erl79
-rw-r--r--lib/debugger/test/bug_SUITE.erl54
-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.erl13
-rw-r--r--lib/debugger/test/dbg_ui_SUITE.erl124
-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.erl60
-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.erl293
-rw-r--r--lib/debugger/test/fun_SUITE.erl144
-rw-r--r--lib/debugger/test/guard_SUITE.erl1489
-rw-r--r--lib/debugger/test/int_SUITE.erl237
-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.erl47
-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.erl247
-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.erl67
-rw-r--r--lib/debugger/test/line_number_SUITE.erl18
-rw-r--r--lib/debugger/test/map_SUITE.erl34
-rw-r--r--lib/debugger/test/record_SUITE.erl213
-rw-r--r--lib/debugger/test/test_lib.erl2
-rw-r--r--lib/debugger/test/trycatch_SUITE.erl569
-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_chapter.xml2
-rw-r--r--lib/dialyzer/doc/src/notes.xml61
-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/Makefile2
-rw-r--r--lib/dialyzer/src/dialyzer.app.src8
-rw-r--r--lib/dialyzer/src/dialyzer.appup.src2
-rw-r--r--lib/dialyzer/src/dialyzer.erl3
-rw-r--r--lib/dialyzer/src/dialyzer.hrl4
-rw-r--r--lib/dialyzer/src/dialyzer_behaviours.erl2
-rw-r--r--lib/dialyzer/src/dialyzer_cl.erl2
-rw-r--r--lib/dialyzer/src/dialyzer_contracts.erl100
-rw-r--r--lib/dialyzer/src/dialyzer_dataflow.erl275
-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.erl2
-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_timing.erl2
-rw-r--r--lib/dialyzer/src/dialyzer_typesig.erl589
-rw-r--r--lib/dialyzer/src/dialyzer_utils.erl89
-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.erl2
-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_flip0
-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/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/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/small_SUITE_data/results/literals3
-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/src/literals.erl6
-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/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.xml34
-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_dict.erl2
-rw-r--r--lib/diameter/src/base/diameter_internal.hrl2
-rw-r--r--lib/diameter/src/base/diameter_misc_sup.erl2
-rw-r--r--lib/diameter/src/base/diameter_peer_fsm.erl57
-rw-r--r--lib/diameter/src/base/diameter_peer_fsm_sup.erl2
-rw-r--r--lib/diameter/src/base/diameter_service.erl537
-rw-r--r--lib/diameter/src/base/diameter_session.erl2
-rw-r--r--lib/diameter/src/base/diameter_traffic.erl39
-rw-r--r--lib/diameter/src/base/diameter_watchdog.erl64
-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.src46
-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/transport/diameter_etcp.erl2
-rw-r--r--lib/diameter/src/transport/diameter_etcp_sup.erl2
-rw-r--r--lib/diameter/src/transport/diameter_sctp_sup.erl2
-rw-r--r--lib/diameter/src/transport/diameter_tcp.erl251
-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_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_length_SUITE.erl2
-rw-r--r--lib/diameter/test/diameter_reg_SUITE.erl2
-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.erl2
-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.xml29
-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/src/edoc.appup.src2
-rw-r--r--lib/edoc/src/edoc.erl15
-rw-r--r--lib/edoc/src/edoc_extract.erl48
-rw-r--r--lib/edoc/src/edoc_specs.erl20
-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.xml33
-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.erl7
-rw-r--r--lib/eldap/test/Makefile2
-rw-r--r--lib/eldap/test/eldap_basic_SUITE.erl29
-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.xml19
-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.escript2
-rw-r--r--lib/erl_docgen/priv/css/Makefile2
-rw-r--r--lib/erl_docgen/priv/dtd/Makefile2
-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.xsl16
-rw-r--r--lib/erl_docgen/priv/xsl/db_html_params.xsl2
-rw-r--r--lib/erl_docgen/priv/xsl/db_man.xsl2
-rw-r--r--lib/erl_docgen/priv/xsl/db_pdf.xsl2
-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_xmerl_xml_cb.erl2
-rw-r--r--lib/erl_docgen/src/erl_docgen.appup.src2
-rw-r--r--lib/erl_docgen/vsn.mk2
-rw-r--r--lib/erl_interface/Makefile2
-rw-r--r--lib/erl_interface/configure.in4
-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.xml32
-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.in2
-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.c201
-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.h2
-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.c5
-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.erl194
-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.erl232
-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.erl366
-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.c2
-rw-r--r--lib/erl_interface/test/ei_decode_encode_SUITE.erl264
-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.erl390
-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.erl192
-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.erl186
-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.erl793
-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.erl122
-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.erl1141
-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.c2
-rw-r--r--lib/erl_interface/test/erl_eterm_SUITE_data/print_term.c2
-rw-r--r--lib/erl_interface/test/erl_ext_SUITE.erl68
-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.erl174
-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.erl110
-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.erl325
-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.erl112
-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.erl20
-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.xml2
-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.erl2
-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.erl2
-rw-r--r--lib/et/src/et_wx_viewer.erl2
-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/eunit/doc/overview.edoc9
-rw-r--r--lib/eunit/doc/src/book.xml2
-rw-r--r--lib/eunit/doc/src/notes.xml16
-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/test/Makefile2
-rw-r--r--lib/eunit/test/eunit_SUITE.erl2
-rw-r--r--lib/eunit/vsn.mk2
-rw-r--r--lib/gs/Makefile2
-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.xml2
-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/hipe/Makefile2
-rw-r--r--lib/hipe/amd64/Makefile2
-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/Makefile2
-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/Makefile2
-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_lib.erl2
-rw-r--r--lib/hipe/cerl/cerl_messagean.erl2
-rw-r--r--lib/hipe/cerl/cerl_pmatch.erl2
-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.erl113
-rw-r--r--lib/hipe/cerl/erl_types.erl859
-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.xml66
-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/Makefile2
-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.erl2
-rw-r--r--lib/hipe/flow/hipe_gen_cfg.erl2
-rw-r--r--lib/hipe/flow/liveness.inc2
-rw-r--r--lib/hipe/icode/Makefile2
-rw-r--r--lib/hipe/icode/hipe_beam_to_icode.erl2
-rw-r--r--lib/hipe/icode/hipe_icode.hrl2
-rw-r--r--lib/hipe/icode/hipe_icode_bincomp.erl2
-rw-r--r--lib/hipe/icode/hipe_icode_callgraph.erl2
-rw-r--r--lib/hipe/icode/hipe_icode_cfg.erl2
-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_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.erl2
-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_type.erl2
-rw-r--r--lib/hipe/icode/hipe_icode_type.hrl2
-rw-r--r--lib/hipe/llvm/Makefile2
-rw-r--r--lib/hipe/main/Makefile2
-rw-r--r--lib/hipe/main/hipe.appup.src2
-rw-r--r--lib/hipe/misc/Makefile2
-rw-r--r--lib/hipe/misc/hipe_consttab.erl2
-rw-r--r--lib/hipe/misc/hipe_consttab.hrl2
-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/Makefile2
-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/Makefile2
-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/Makefile2
-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/Makefile2
-rw-r--r--lib/hipe/rtl/hipe_icode2rtl.erl2
-rw-r--r--lib/hipe/rtl/hipe_rtl.erl2
-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.inc2
-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_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.erl2
-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.erl2
-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/Makefile2
-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/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/hipe_SUITE.erl3
-rw-r--r--lib/hipe/test/hipe_testsuite_driver.erl2
-rw-r--r--lib/hipe/tools/Makefile2
-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/Makefile2
-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/Makefile2
-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.xml2
-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/Makefile2
-rw-r--r--lib/ic/test/c_client_erl_server_SUITE.erl2
-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.c2
-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.erl2
-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.erl2
-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.erl2
-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.erl2
-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.erl2
-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.erl2
-rw-r--r--lib/ic/test/ic_be_SUITE_data/plain.idl2
-rw-r--r--lib/ic/test/ic_pp_SUITE.erl2
-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.erl2
-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.erl2
-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.erl2
-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/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.xml68
-rw-r--r--lib/inets/doc/src/mod_security.xml2
-rw-r--r--lib/inets/doc/src/notes.xml89
-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.erl4
-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.erl2
-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.erl8
-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.erl20
-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.erl11
-rw-r--r--lib/inets/src/http_server/httpd_response.erl3
-rw-r--r--lib/inets/src/http_server/httpd_script_env.erl16
-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/Makefile5
-rw-r--r--lib/inets/src/inets_app/inets.app.src3
-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_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.erl38
-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/Makefile5
-rw-r--r--lib/inets/test/erl_make_certs.erl2
-rw-r--r--lib/inets/test/ftp_SUITE.erl484
-rw-r--r--lib/inets/test/ftp_format_SUITE.erl111
-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.erl79
-rw-r--r--lib/inets/test/httpc_cookie_SUITE.erl371
-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.erl343
-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.erl7
-rw-r--r--lib/inets/test/httpd_mod.erl187
-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.erl489
-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.erl39
-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.xml2
-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.erl2
-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.erl60
-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/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.xml573
-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.xml488
-rw-r--r--lib/kernel/doc/src/gen_udp.xml224
-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.xml168
-rw-r--r--lib/kernel/doc/src/inet.xml1661
-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.xml96
-rw-r--r--lib/kernel/doc/src/notes_history.xml2
-rw-r--r--lib/kernel/doc/src/os.xml236
-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/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/examples/uds_dist/c_src/uds_drv.c12
-rw-r--r--lib/kernel/include/dist.hrl3
-rw-r--r--lib/kernel/include/dist_util.hrl2
-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/Makefile2
-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.erl4
-rw-r--r--lib/kernel/src/code_server.erl471
-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.erl20
-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.erl2
-rw-r--r--lib/kernel/src/erts_debug.erl2
-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.erl2
-rw-r--r--lib/kernel/src/gen_tcp.erl2
-rw-r--r--lib/kernel/src/gen_udp.erl2
-rw-r--r--lib/kernel/src/global_group.erl6
-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.erl16
-rw-r--r--lib/kernel/src/inet6_sctp.erl2
-rw-r--r--lib/kernel/src/inet6_tcp.erl2
-rw-r--r--lib/kernel/src/inet6_tcp_dist.erl2
-rw-r--r--lib/kernel/src/inet6_udp.erl2
-rw-r--r--lib/kernel/src/inet_boot.hrl2
-rw-r--r--lib/kernel/src/inet_config.erl2
-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.hrl2
-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.erl2
-rw-r--r--lib/kernel/src/inet_tcp.erl2
-rw-r--r--lib/kernel/src/inet_udp.erl2
-rw-r--r--lib/kernel/src/kernel.app.src4
-rw-r--r--lib/kernel/src/kernel.appup.src10
-rw-r--r--lib/kernel/src/kernel.erl2
-rw-r--r--lib/kernel/src/kernel_config.erl2
-rw-r--r--lib/kernel/src/net.erl2
-rw-r--r--lib/kernel/src/net_adm.erl2
-rw-r--r--lib/kernel/src/net_kernel.erl133
-rw-r--r--lib/kernel/src/os.erl2
-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/Makefile2
-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.erl544
-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.erl809
-rw-r--r--lib/kernel/test/ch.erl2
-rw-r--r--lib/kernel/test/ch_sup.erl2
-rw-r--r--lib/kernel/test/cleanup.erl23
-rw-r--r--lib/kernel/test/code_SUITE.erl504
-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.erl5956
-rw-r--r--lib/kernel/test/disk_log_SUITE_data/wrap_log_test.erl2
-rw-r--r--lib/kernel/test/erl_boot_server_SUITE.erl318
-rw-r--r--lib/kernel/test/erl_distribution_SUITE.erl1289
-rw-r--r--lib/kernel/test/erl_distribution_wb_SUITE.erl453
-rw-r--r--lib/kernel/test/erl_prim_loader_SUITE.erl353
-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.erl160
-rw-r--r--lib/kernel/test/error_logger_warn_SUITE.erl72
-rw-r--r--lib/kernel/test/file_SUITE.erl3909
-rw-r--r--lib/kernel/test/file_name_SUITE.erl770
-rw-r--r--lib/kernel/test/gen_sctp_SUITE.erl1800
-rw-r--r--lib/kernel/test/gen_tcp_api_SUITE.erl337
-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.erl478
-rw-r--r--lib/kernel/test/gen_tcp_misc_SUITE.erl679
-rw-r--r--lib/kernel/test/gen_udp_SUITE.erl439
-rw-r--r--lib/kernel/test/global_SUITE.erl3310
-rw-r--r--lib/kernel/test/global_SUITE_data/global_trace.erl2
-rw-r--r--lib/kernel/test/global_group_SUITE.erl1465
-rw-r--r--lib/kernel/test/heart_SUITE.erl132
-rw-r--r--lib/kernel/test/ignore_cores.erl14
-rw-r--r--lib/kernel/test/inet_SUITE.erl643
-rw-r--r--lib/kernel/test/inet_res_SUITE.erl46
-rwxr-xr-xlib/kernel/test/inet_res_SUITE_data/run-named2
-rw-r--r--lib/kernel/test/inet_sockopt_SUITE.erl806
-rw-r--r--lib/kernel/test/init_SUITE.erl559
-rw-r--r--lib/kernel/test/interactive_shell_SUITE.erl460
-rw-r--r--lib/kernel/test/kernel_SUITE.erl26
-rw-r--r--lib/kernel/test/kernel_config_SUITE.erl46
-rw-r--r--lib/kernel/test/loose_node.erl2
-rw-r--r--lib/kernel/test/multi_load_SUITE.erl17
-rw-r--r--lib/kernel/test/myApp.erl2
-rw-r--r--lib/kernel/test/os_SUITE.erl214
-rw-r--r--lib/kernel/test/pdict_SUITE.erl34
-rw-r--r--lib/kernel/test/pg2_SUITE.erl244
-rw-r--r--lib/kernel/test/prim_file_SUITE.erl1992
-rw-r--r--lib/kernel/test/ram_file_SUITE.erl758
-rw-r--r--lib/kernel/test/rpc_SUITE.erl575
-rw-r--r--lib/kernel/test/sendfile_SUITE.erl4
-rw-r--r--lib/kernel/test/seq_trace_SUITE.erl465
-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.erl415
-rw-r--r--lib/kernel/test/wrap_log_reader_SUITE_data/wrap_log_test.erl2
-rw-r--r--lib/kernel/test/zlib_SUITE.erl518
-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.xml2
-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.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/Makefile2
-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/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.xmlsrc2
-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.xml2
-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.xml36
-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.erl168
-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.erl239
-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.erl2
-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.erl8
-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.erl2
-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.erl6
-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.erl2
-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.xml17
-rw-r--r--lib/observer/doc/src/notes_history.xml2
-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/include/etop.hrl2
-rw-r--r--lib/observer/src/Makefile2
-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.erl2
-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.src2
-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.erl57
-rw-r--r--lib/observer/src/observer_app_wx.erl6
-rw-r--r--lib/observer/src/observer_defs.hrl2
-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.erl11
-rw-r--r--lib/observer/src/observer_pro_wx.erl2
-rw-r--r--lib/observer/src/observer_procinfo.erl14
-rw-r--r--lib/observer/src/observer_sys_wx.erl100
-rw-r--r--lib/observer/src/observer_trace_wx.erl2
-rw-r--r--lib/observer/src/observer_tv.hrl2
-rw-r--r--lib/observer/src/observer_tv_wx.erl2
-rw-r--r--lib/observer/src/observer_wx.erl60
-rw-r--r--lib/observer/src/ttb.erl6
-rw-r--r--lib/observer/src/ttb_et.erl2
-rw-r--r--lib/observer/test/crashdump_helper.erl2
-rw-r--r--lib/observer/test/crashdump_viewer_SUITE.erl31
-rw-r--r--lib/observer/test/etop_SUITE.erl2
-rw-r--r--lib/observer/test/observer_SUITE.erl4
-rw-r--r--lib/observer/test/ttb_SUITE.erl59
-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.xml2
-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/Makefile2
-rw-r--r--lib/odbc/test/README2
-rw-r--r--lib/odbc/test/mysql.erl2
-rw-r--r--lib/odbc/test/odbc_connect_SUITE.erl2
-rw-r--r--lib/odbc/test/odbc_data_type_SUITE.erl2
-rw-r--r--lib/odbc/test/odbc_query_SUITE.erl2
-rw-r--r--lib/odbc/test/odbc_start_SUITE.erl2
-rw-r--r--lib/odbc/test/odbc_test.hrl2
-rw-r--r--lib/odbc/test/odbc_test_lib.erl2
-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/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.xml18
-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/Makefile2
-rw-r--r--lib/orber/test/cdrcoding_10_SUITE.erl2
-rw-r--r--lib/orber/test/cdrcoding_11_SUITE.erl2
-rw-r--r--lib/orber/test/cdrcoding_12_SUITE.erl2
-rw-r--r--lib/orber/test/cdrlib_SUITE.erl2
-rw-r--r--lib/orber/test/corba_SUITE.erl2
-rw-r--r--lib/orber/test/csiv2_SUITE.erl2
-rw-r--r--lib/orber/test/data_types_SUITE.erl2
-rw-r--r--lib/orber/test/generated_SUITE.erl2
-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.erl2
-rw-r--r--lib/orber/test/iop_ior_10_SUITE.erl2
-rw-r--r--lib/orber/test/iop_ior_11_SUITE.erl2
-rw-r--r--lib/orber/test/iop_ior_12_SUITE.erl2
-rw-r--r--lib/orber/test/ip_v4v6_interop_SUITE.erl2
-rw-r--r--lib/orber/test/lname_SUITE.erl2
-rw-r--r--lib/orber/test/multi_ORB_SUITE.erl2
-rw-r--r--lib/orber/test/naming_context_SUITE.erl2
-rw-r--r--lib/orber/test/orber_SUITE.erl2
-rw-r--r--lib/orber/test/orber_acl_SUITE.erl2
-rw-r--r--lib/orber/test/orber_firewall_ipv4_in_SUITE.erl2
-rw-r--r--lib/orber/test/orber_firewall_ipv4_out_SUITE.erl2
-rw-r--r--lib/orber/test/orber_firewall_ipv6_in_SUITE.erl2
-rw-r--r--lib/orber/test/orber_firewall_ipv6_out_SUITE.erl2
-rw-r--r--lib/orber/test/orber_nat_SUITE.erl2
-rw-r--r--lib/orber/test/orber_test.idl2
-rw-r--r--lib/orber/test/orber_test_lib.erl2
-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.erl2
-rw-r--r--lib/orber/test/tc_SUITE.erl2
-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.xml2
-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/Makefile2
-rw-r--r--lib/os_mon/test/cpu_sup_SUITE.erl307
-rw-r--r--lib/os_mon/test/disksup_SUITE.erl88
-rw-r--r--lib/os_mon/test/memsup_SUITE.erl922
-rw-r--r--lib/os_mon/test/os_mon_SUITE.erl102
-rw-r--r--lib/os_mon/test/os_mon_conf.erl2
-rw-r--r--lib/os_mon/test/os_mon_mib_SUITE.erl666
-rw-r--r--lib/os_mon/test/os_sup_SUITE.erl197
-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.xml2
-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/Makefile2
-rw-r--r--lib/otp_mibs/test/otp_mibs_SUITE.erl2
-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.xml2
-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/Makefile2
-rw-r--r--lib/parsetools/test/leex_SUITE.erl2
-rw-r--r--lib/parsetools/test/yecc_SUITE.erl2
-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.xml2
-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/Makefile2
-rw-r--r--lib/percept/test/egd_SUITE.erl456
-rw-r--r--lib/percept/test/ipc_tree.erl2
-rw-r--r--lib/percept/test/percept_SUITE.erl130
-rw-r--r--lib/percept/test/percept_db_SUITE.erl38
-rw-r--r--lib/public_key/Makefile2
-rw-r--r--lib/public_key/asn1/Makefile2
-rw-r--r--lib/public_key/doc/src/Makefile2
-rw-r--r--lib/public_key/doc/src/book.xml2
-rw-r--r--lib/public_key/doc/src/notes.xml18
-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.xml11
-rw-r--r--lib/public_key/doc/src/ref_man.xml2
-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.erl2
-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.erl4
-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.erl10
-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.erl121
-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.xml12
-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_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.erl2
-rw-r--r--lib/reltool/src/reltool_mod_win.erl2
-rw-r--r--lib/reltool/src/reltool_server.erl2
-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.erl49
-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/runtime_tools/Makefile2
-rw-r--r--lib/runtime_tools/c_src/Makefile.in71
-rw-r--r--lib/runtime_tools/c_src/dtrace_user.d2
-rw-r--r--lib/runtime_tools/c_src/dyntrace.c606
-rw-r--r--lib/runtime_tools/c_src/dyntrace_lttng.h367
-rw-r--r--lib/runtime_tools/c_src/trace_file_drv.c19
-rw-r--r--lib/runtime_tools/c_src/trace_ip_drv.c20
-rw-r--r--lib/runtime_tools/doc/src/LTTng.xml459
-rw-r--r--lib/runtime_tools/doc/src/Makefile4
-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/notes.xml17
-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.xml2
-rw-r--r--lib/runtime_tools/doc/src/runtime_tools_app.xml2
-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/Makefile2
-rw-r--r--lib/runtime_tools/src/appmon_info.erl11
-rw-r--r--lib/runtime_tools/src/dbg.erl140
-rw-r--r--lib/runtime_tools/src/dyntrace.erl79
-rw-r--r--lib/runtime_tools/src/erts_alloc_config.erl10
-rw-r--r--lib/runtime_tools/src/msacc.erl18
-rw-r--r--lib/runtime_tools/src/observer_backend.erl37
-rw-r--r--lib/runtime_tools/src/percept_profile.erl9
-rw-r--r--lib/runtime_tools/src/runtime_tools.app.src6
-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/Makefile1
-rw-r--r--lib/runtime_tools/test/dbg_SUITE.erl1471
-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.erl37
-rw-r--r--lib/runtime_tools/test/dyntrace_lttng_SUITE.erl377
-rw-r--r--lib/runtime_tools/test/erts_alloc_config_SUITE.erl164
-rw-r--r--lib/runtime_tools/test/runtime_tools_SUITE.erl41
-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/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.xml44
-rw-r--r--lib/sasl/doc/src/notes_history.xml2
-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.xml2
-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.xml2
-rw-r--r--lib/sasl/doc/src/sasl_intro.xml2
-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/Makefile2
-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.erl2
-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.src2
-rw-r--r--lib/sasl/src/sasl.appup.src10
-rw-r--r--lib/sasl/src/sasl.erl2
-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.erl43
-rw-r--r--lib/sasl/src/systools_rc.erl2
-rw-r--r--lib/sasl/src/systools_relup.erl2
-rw-r--r--lib/sasl/test/Makefile2
-rw-r--r--lib/sasl/test/alarm_handler_SUITE.erl2
-rw-r--r--lib/sasl/test/installer.erl2
-rw-r--r--lib/sasl/test/rb_SUITE.erl2
-rw-r--r--lib/sasl/test/release_handler_SUITE.erl17
-rw-r--r--lib/sasl/test/sasl_SUITE.erl2
-rw-r--r--lib/sasl/test/sasl_report_SUITE.erl2
-rw-r--r--lib/sasl/test/systools_SUITE.erl2
-rw-r--r--lib/sasl/test/systools_rc_SUITE.erl2
-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.xml20
-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.erl2
-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/Makefile2
-rw-r--r--lib/snmp/test/exp/snmp_agent_bl_test.erl2
-rw-r--r--lib/snmp/test/exp/snmp_agent_ms_test.erl2
-rw-r--r--lib/snmp/test/exp/snmp_agent_mt_test.erl2
-rw-r--r--lib/snmp/test/exp/snmp_agent_v1_test.erl2
-rw-r--r--lib/snmp/test/exp/snmp_agent_v2_test.erl2
-rw-r--r--lib/snmp/test/exp/snmp_agent_v3_test.erl2
-rw-r--r--lib/snmp/test/klas3.erl2
-rw-r--r--lib/snmp/test/modules.mk2
-rw-r--r--lib/snmp/test/sa.erl2
-rw-r--r--lib/snmp/test/snmp_SUITE.erl2
-rw-r--r--lib/snmp/test/snmp_agent_mibs_test.erl2
-rw-r--r--lib/snmp/test/snmp_agent_nfilter_test.erl2
-rw-r--r--lib/snmp/test/snmp_agent_test.erl2
-rw-r--r--lib/snmp/test/snmp_agent_test_lib.erl2
-rw-r--r--lib/snmp/test/snmp_app_test.erl2
-rw-r--r--lib/snmp/test/snmp_appup_test.erl2
-rw-r--r--lib/snmp/test/snmp_compiler_test.erl2
-rw-r--r--lib/snmp/test/snmp_conf_test.erl2
-rw-r--r--lib/snmp/test/snmp_log_test.erl2
-rw-r--r--lib/snmp/test/snmp_manager_config_test.erl2
-rw-r--r--lib/snmp/test/snmp_manager_test.erl2
-rw-r--r--lib/snmp/test/snmp_manager_user.erl2
-rw-r--r--lib/snmp/test/snmp_manager_user_old.erl2
-rw-r--r--lib/snmp/test/snmp_manager_user_test.erl2
-rw-r--r--lib/snmp/test/snmp_manager_user_test_lib.erl2
-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.xml19
-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.xml17
-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.xml218
-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.erl101
-rw-r--r--lib/ssh/src/ssh.hrl6
-rw-r--r--lib/ssh/src/ssh_acceptor.erl45
-rw-r--r--lib/ssh/src/ssh_acceptor_sup.erl7
-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.erl2
-rw-r--r--lib/ssh/src/ssh_channel.erl7
-rw-r--r--lib/ssh/src/ssh_channel_sup.erl2
-rw-r--r--lib/ssh/src/ssh_cli.erl2
-rw-r--r--lib/ssh/src/ssh_client_key.erl2
-rw-r--r--lib/ssh/src/ssh_client_key_api.erl2
-rw-r--r--lib/ssh/src/ssh_connect.hrl10
-rw-r--r--lib/ssh/src/ssh_connection.erl152
-rw-r--r--lib/ssh/src/ssh_connection_handler.erl2899
-rw-r--r--lib/ssh/src/ssh_connection_sup.erl2
-rw-r--r--lib/ssh/src/ssh_daemon_channel.erl2
-rw-r--r--lib/ssh/src/ssh_dbg.erl140
-rw-r--r--lib/ssh/src/ssh_file.erl2
-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.erl48
-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.erl2
-rw-r--r--lib/ssh/src/ssh_sftp.erl2
-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.erl2
-rw-r--r--lib/ssh/src/ssh_subsystem_sup.erl2
-rw-r--r--lib/ssh/src/ssh_sup.erl2
-rw-r--r--lib/ssh/src/ssh_system_sup.erl11
-rw-r--r--lib/ssh/src/ssh_transport.erl197
-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.erl2
-rw-r--r--lib/ssh/src/ssh_xfer.hrl2
-rw-r--r--lib/ssh/src/sshc_sup.erl6
-rw-r--r--lib/ssh/src/sshd_sup.erl2
-rw-r--r--lib/ssh/test/Makefile3
-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.erl32
-rw-r--r--lib/ssh/test/ssh_basic_SUITE.erl4
-rw-r--r--lib/ssh/test/ssh_benchmark_SUITE.erl48
-rw-r--r--lib/ssh/test/ssh_connection_SUITE.erl46
-rw-r--r--lib/ssh/test/ssh_echo_server.erl3
-rw-r--r--lib/ssh/test/ssh_options_SUITE.erl59
-rw-r--r--lib/ssh/test/ssh_peername_sockname_server.erl2
-rw-r--r--lib/ssh/test/ssh_property_test_SUITE.erl2
-rw-r--r--lib/ssh/test/ssh_protocol_SUITE.erl4
-rw-r--r--lib/ssh/test/ssh_renegotiate_SUITE.erl12
-rw-r--r--lib/ssh/test/ssh_sftp_SUITE.erl31
-rw-r--r--lib/ssh/test/ssh_sftpd_SUITE.erl11
-rw-r--r--lib/ssh/test/ssh_sftpd_erlclient_SUITE.erl5
-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.erl95
-rw-r--r--lib/ssh/test/ssh_test_cli.erl9
-rw-r--r--lib/ssh/test/ssh_test_lib.erl80
-rw-r--r--lib/ssh/test/ssh_test_lib.hrl27
-rw-r--r--lib/ssh/test/ssh_to_openssh_SUITE.erl44
-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.erl7
-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.xml167
-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.xml71
-rw-r--r--lib/ssl/doc/src/ssl_app.xml2
-rw-r--r--lib/ssl/doc/src/ssl_distribution.xml25
-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.erl359
-rw-r--r--lib/ssl/src/dtls_connection.hrl2
-rw-r--r--lib/ssl/src/dtls_connection_sup.erl2
-rw-r--r--lib/ssl/src/dtls_handshake.erl7
-rw-r--r--lib/ssl/src/dtls_handshake.hrl2
-rw-r--r--lib/ssl/src/dtls_record.erl25
-rw-r--r--lib/ssl/src/dtls_record.hrl2
-rw-r--r--lib/ssl/src/dtls_v1.erl2
-rw-r--r--lib/ssl/src/inet6_tls_dist.erl46
-rw-r--r--lib/ssl/src/inet_tls_dist.erl97
-rw-r--r--lib/ssl/src/ssl.app.src1
-rw-r--r--lib/ssl/src/ssl.appup.src6
-rw-r--r--lib/ssl/src/ssl.erl90
-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.erl101
-rw-r--r--lib/ssl/src/ssl_connection.erl1048
-rw-r--r--lib/ssl/src/ssl_connection.hrl5
-rw-r--r--lib/ssl/src/ssl_dist_sup.erl2
-rw-r--r--lib/ssl/src/ssl_handshake.erl214
-rw-r--r--lib/ssl/src/ssl_handshake.hrl4
-rw-r--r--lib/ssl/src/ssl_internal.hrl5
-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.erl4
-rw-r--r--lib/ssl/src/ssl_record.hrl2
-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.erl2
-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.erl37
-rw-r--r--lib/ssl/src/ssl_v2.erl2
-rw-r--r--lib/ssl/src/ssl_v3.erl2
-rw-r--r--lib/ssl/src/tls.erl2
-rw-r--r--lib/ssl/src/tls_connection.erl627
-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.erl50
-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.erl62
-rw-r--r--lib/ssl/test/Makefile2
-rw-r--r--lib/ssl/test/erl_make_certs.erl2
-rw-r--r--lib/ssl/test/ssl_ECC_SUITE.erl58
-rw-r--r--lib/ssl/test/ssl_alpn_handshake_SUITE.erl28
-rw-r--r--lib/ssl/test/ssl_basic_SUITE.erl974
-rw-r--r--lib/ssl/test/ssl_bench_SUITE.erl2
-rw-r--r--lib/ssl/test/ssl_certificate_verify_SUITE.erl289
-rw-r--r--lib/ssl/test/ssl_crl_SUITE.erl40
-rw-r--r--lib/ssl/test/ssl_dist_SUITE.erl16
-rw-r--r--lib/ssl/test/ssl_handshake_SUITE.erl12
-rw-r--r--lib/ssl/test/ssl_npn_handshake_SUITE.erl27
-rw-r--r--lib/ssl/test/ssl_npn_hello_SUITE.erl20
-rw-r--r--lib/ssl/test/ssl_packet_SUITE.erl159
-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.erl16
-rw-r--r--lib/ssl/test/ssl_sni_SUITE.erl22
-rw-r--r--lib/ssl/test/ssl_test_lib.erl119
-rw-r--r--lib/ssl/test/ssl_to_openssl_SUITE.erl155
-rw-r--r--lib/ssl/test/ssl_upgrade_SUITE.erl14
-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.xml2
-rw-r--r--lib/stdlib/doc/src/base64.xml2
-rw-r--r--lib/stdlib/doc/src/binary.xml4
-rw-r--r--lib/stdlib/doc/src/book.xml2
-rw-r--r--lib/stdlib/doc/src/c.xml2
-rw-r--r--lib/stdlib/doc/src/calendar.xml2
-rw-r--r--lib/stdlib/doc/src/dets.xml2
-rw-r--r--lib/stdlib/doc/src/dict.xml2
-rw-r--r--lib/stdlib/doc/src/digraph.xml4
-rw-r--r--lib/stdlib/doc/src/digraph_utils.xml9
-rw-r--r--lib/stdlib/doc/src/epp.xml3
-rw-r--r--lib/stdlib/doc/src/erl_anno.xml4
-rw-r--r--lib/stdlib/doc/src/erl_eval.xml2
-rw-r--r--lib/stdlib/doc/src/erl_expand_records.xml2
-rw-r--r--lib/stdlib/doc/src/erl_id_trans.xml2
-rw-r--r--lib/stdlib/doc/src/erl_internal.xml2
-rw-r--r--lib/stdlib/doc/src/erl_lint.xml2
-rw-r--r--lib/stdlib/doc/src/erl_parse.xml12
-rw-r--r--lib/stdlib/doc/src/erl_pp.xml2
-rw-r--r--lib/stdlib/doc/src/erl_tar.xml2
-rw-r--r--lib/stdlib/doc/src/ets.xml16
-rw-r--r--lib/stdlib/doc/src/file_sorter.xml2
-rw-r--r--lib/stdlib/doc/src/filelib.xml2
-rw-r--r--lib/stdlib/doc/src/filename.xml160
-rw-r--r--lib/stdlib/doc/src/gen_event.xml2
-rw-r--r--lib/stdlib/doc/src/gen_fsm.xml16
-rw-r--r--lib/stdlib/doc/src/gen_server.xml3
-rw-r--r--lib/stdlib/doc/src/gen_statem.xml1671
-rw-r--r--lib/stdlib/doc/src/io.xml2
-rw-r--r--lib/stdlib/doc/src/io_lib.xml2
-rw-r--r--lib/stdlib/doc/src/io_protocol.xml2
-rw-r--r--lib/stdlib/doc/src/lib.xml2
-rw-r--r--lib/stdlib/doc/src/lists.xml17
-rw-r--r--lib/stdlib/doc/src/log_mf_h.xml2
-rw-r--r--lib/stdlib/doc/src/maps.xml62
-rw-r--r--lib/stdlib/doc/src/math.xml2
-rw-r--r--lib/stdlib/doc/src/ms_transform.xml2
-rw-r--r--lib/stdlib/doc/src/notes.xml89
-rw-r--r--lib/stdlib/doc/src/notes_history.xml2
-rw-r--r--lib/stdlib/doc/src/ordsets.xml2
-rw-r--r--lib/stdlib/doc/src/part.xml2
-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.xml2
-rw-r--r--lib/stdlib/doc/src/proc_lib.xml15
-rw-r--r--lib/stdlib/doc/src/proplists.xml2
-rw-r--r--lib/stdlib/doc/src/qlc.xml2
-rw-r--r--lib/stdlib/doc/src/queue.xml2
-rw-r--r--lib/stdlib/doc/src/random.xml2
-rw-r--r--lib/stdlib/doc/src/re.xml2
-rw-r--r--lib/stdlib/doc/src/ref_man.xml3
-rw-r--r--lib/stdlib/doc/src/shell.xml2
-rw-r--r--lib/stdlib/doc/src/shell_default.xml2
-rw-r--r--lib/stdlib/doc/src/slave.xml2
-rw-r--r--lib/stdlib/doc/src/sofs.xml5
-rw-r--r--lib/stdlib/doc/src/specs.xml1
-rw-r--r--lib/stdlib/doc/src/stdlib_app.xml2
-rw-r--r--lib/stdlib/doc/src/string.xml2
-rw-r--r--lib/stdlib/doc/src/supervisor.xml10
-rw-r--r--lib/stdlib/doc/src/supervisor_bridge.xml2
-rw-r--r--lib/stdlib/doc/src/sys.xml31
-rw-r--r--lib/stdlib/doc/src/timer.xml2
-rw-r--r--lib/stdlib/doc/src/unicode.xml2
-rw-r--r--lib/stdlib/doc/src/unicode_usage.xml2
-rw-r--r--lib/stdlib/doc/src/win32reg.xml2
-rw-r--r--lib/stdlib/doc/src/zip.xml2
-rw-r--r--lib/stdlib/examples/erl_id_trans.erl4
-rw-r--r--lib/stdlib/include/assert.hrl31
-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/binary.erl2
-rw-r--r--lib/stdlib/src/c.erl2
-rw-r--r--lib/stdlib/src/calendar.erl2
-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.erl72
-rw-r--r--lib/stdlib/src/erl_bits.erl2
-rw-r--r--lib/stdlib/src/erl_compile.erl2
-rw-r--r--lib/stdlib/src/erl_internal.erl2
-rw-r--r--lib/stdlib/src/erl_lint.erl108
-rw-r--r--lib/stdlib/src/erl_parse.yrl14
-rw-r--r--lib/stdlib/src/erl_posix_msg.erl2
-rw-r--r--lib/stdlib/src/erl_pp.erl26
-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/ets.erl2
-rw-r--r--lib/stdlib/src/eval_bits.erl2
-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.erl1308
-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.erl2
-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/ordsets.erl2
-rw-r--r--lib/stdlib/src/otp_internal.erl121
-rw-r--r--lib/stdlib/src/pool.erl2
-rw-r--r--lib/stdlib/src/proc_lib.erl25
-rw-r--r--lib/stdlib/src/proplists.erl2
-rw-r--r--lib/stdlib/src/queue.erl2
-rw-r--r--lib/stdlib/src/rand.erl10
-rw-r--r--lib/stdlib/src/random.erl2
-rw-r--r--lib/stdlib/src/re.erl2
-rw-r--r--lib/stdlib/src/sets.erl2
-rw-r--r--lib/stdlib/src/shell_default.erl2
-rw-r--r--lib/stdlib/src/slave.erl2
-rw-r--r--lib/stdlib/src/sofs.erl2
-rw-r--r--lib/stdlib/src/stdlib.app.src3
-rw-r--r--lib/stdlib/src/stdlib.appup.src10
-rw-r--r--lib/stdlib/src/string.erl2
-rw-r--r--lib/stdlib/src/supervisor.erl6
-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/Makefile1
-rw-r--r--lib/stdlib/test/array_SUITE.erl79
-rw-r--r--lib/stdlib/test/base64_SUITE.erl59
-rw-r--r--lib/stdlib/test/beam_lib_SUITE.erl741
-rw-r--r--lib/stdlib/test/binary_module_SUITE.erl1243
-rw-r--r--lib/stdlib/test/binref.erl8
-rw-r--r--lib/stdlib/test/c_SUITE.erl183
-rw-r--r--lib/stdlib/test/c_SUITE_data/m.erl2
-rw-r--r--lib/stdlib/test/calendar_SUITE.erl237
-rw-r--r--lib/stdlib/test/dets_SUITE.erl368
-rw-r--r--lib/stdlib/test/dict_SUITE.erl13
-rw-r--r--lib/stdlib/test/digraph_SUITE.erl404
-rw-r--r--lib/stdlib/test/digraph_utils_SUITE.erl329
-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.erl36
-rw-r--r--lib/stdlib/test/epp_SUITE.erl515
-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.erl51
-rw-r--r--lib/stdlib/test/erl_eval_SUITE.erl1010
-rw-r--r--lib/stdlib/test/erl_expand_records_SUITE.erl143
-rw-r--r--lib/stdlib/test/erl_internal_SUITE.erl19
-rw-r--r--lib/stdlib/test/erl_lint_SUITE.erl547
-rw-r--r--lib/stdlib/test/erl_lint_SUITE_data/format.erl2
-rw-r--r--lib/stdlib/test/erl_pp_SUITE.erl353
-rw-r--r--lib/stdlib/test/erl_scan_SUITE.erl532
-rw-r--r--lib/stdlib/test/error_logger_forwarder.erl8
-rw-r--r--lib/stdlib/test/error_logger_h_SUITE.erl31
-rw-r--r--lib/stdlib/test/escript_SUITE.erl685
-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.erl4711
-rw-r--r--lib/stdlib/test/ets_tough_SUITE.erl59
-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.erl1365
-rw-r--r--lib/stdlib/test/filelib_SUITE.erl236
-rw-r--r--lib/stdlib/test/filename_SUITE.erl1108
-rw-r--r--lib/stdlib/test/fixtable_SUITE.erl493
-rw-r--r--lib/stdlib/test/format_SUITE.erl26
-rw-r--r--lib/stdlib/test/gen_event_SUITE.erl1232
-rw-r--r--lib/stdlib/test/gen_fsm_SUITE.erl431
-rw-r--r--lib/stdlib/test/gen_server_SUITE.erl895
-rw-r--r--lib/stdlib/test/gen_statem_SUITE.erl1584
-rw-r--r--lib/stdlib/test/id_transform_SUITE.erl23
-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.erl1761
-rw-r--r--lib/stdlib/test/io_proto_SUITE.erl1463
-rw-r--r--lib/stdlib/test/lists_SUITE.erl2321
-rw-r--r--lib/stdlib/test/log_mf_h_SUITE.erl49
-rw-r--r--lib/stdlib/test/maps_SUITE.erl68
-rw-r--r--lib/stdlib/test/ms_transform_SUITE.erl585
-rw-r--r--lib/stdlib/test/naughty_child.erl2
-rw-r--r--lib/stdlib/test/proc_lib_SUITE.erl102
-rw-r--r--lib/stdlib/test/qlc_SUITE.erl615
-rw-r--r--lib/stdlib/test/qlc_SUITE_data/join_info_compat.erl2
-rw-r--r--lib/stdlib/test/queue_SUITE.erl436
-rw-r--r--lib/stdlib/test/rand_SUITE.erl63
-rw-r--r--lib/stdlib/test/random_SUITE.erl102
-rw-r--r--lib/stdlib/test/random_iolist.erl2
-rw-r--r--lib/stdlib/test/random_unicode_list.erl2
-rw-r--r--lib/stdlib/test/re_SUITE.erl604
-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.erl39
-rw-r--r--lib/stdlib/test/select_SUITE.erl467
-rw-r--r--lib/stdlib/test/sets_SUITE.erl13
-rw-r--r--lib/stdlib/test/shell_SUITE.erl3298
-rw-r--r--lib/stdlib/test/slave_SUITE.erl178
-rw-r--r--lib/stdlib/test/sofs_SUITE.erl2987
-rw-r--r--lib/stdlib/test/stdlib_SUITE.erl53
-rw-r--r--lib/stdlib/test/string_SUITE.erl564
-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.erl66
-rw-r--r--lib/stdlib/test/supervisor_bridge_SUITE.erl85
-rw-r--r--lib/stdlib/test/sys_SUITE.erl94
-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.erl619
-rw-r--r--lib/stdlib/test/timer_SUITE.erl51
-rw-r--r--lib/stdlib/test/timer_simple_SUITE.erl333
-rw-r--r--lib/stdlib/test/unicode_SUITE.erl708
-rw-r--r--lib/stdlib/test/win32reg_SUITE.erl62
-rw-r--r--lib/stdlib/test/y2k_SUITE.erl157
-rw-r--r--lib/stdlib/test/zip_SUITE.erl174
-rw-r--r--lib/stdlib/vsn.mk2
-rw-r--r--lib/syntax_tools/doc/src/Makefile2
-rw-r--r--lib/syntax_tools/doc/src/book.xml2
-rw-r--r--lib/syntax_tools/doc/src/notes.xml6
-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/src/erl_prettypr.erl374
-rw-r--r--lib/syntax_tools/src/erl_syntax.erl1410
-rw-r--r--lib/syntax_tools/src/erl_syntax_lib.erl181
-rw-r--r--lib/syntax_tools/src/igor.erl13
-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/syntax_tools_SUITE.erl25
-rw-r--r--lib/syntax_tools/test/syntax_tools_SUITE_data/empty.erl1
-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.erl84
-rw-r--r--lib/syntax_tools/vsn.mk2
-rw-r--r--lib/tools/Makefile2
-rw-r--r--lib/tools/c_src/Makefile.in2
-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.xml2
-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.xml28
-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.el2
-rw-r--r--lib/tools/emacs/erlang-skels.el120
-rw-r--r--lib/tools/emacs/erlang-test.el107
-rw-r--r--lib/tools/emacs/erlang.el324
-rw-r--r--lib/tools/emacs/test.erl.indented15
-rw-r--r--lib/tools/emacs/test.erl.orig15
-rw-r--r--lib/tools/src/Makefile2
-rw-r--r--lib/tools/src/cover.erl161
-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.erl109
-rw-r--r--lib/tools/src/tags.erl4
-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.erl6
-rw-r--r--lib/tools/src/xref_parser.yrl2
-rw-r--r--lib/tools/test/Makefile2
-rw-r--r--lib/tools/test/cover_SUITE.erl1669
-rw-r--r--lib/tools/test/cprof_SUITE.erl313
-rw-r--r--lib/tools/test/emacs_SUITE.erl2
-rw-r--r--lib/tools/test/emem_SUITE.erl842
-rw-r--r--lib/tools/test/eprof_SUITE.erl53
-rw-r--r--lib/tools/test/fprof_SUITE.erl1491
-rw-r--r--lib/tools/test/ignore_cores.erl14
-rw-r--r--lib/tools/test/instrument_SUITE.erl192
-rw-r--r--lib/tools/test/lcnt_SUITE.erl74
-rw-r--r--lib/tools/test/make_SUITE.erl218
-rw-r--r--lib/tools/test/tools_SUITE.erl45
-rw-r--r--lib/tools/test/xref_SUITE.erl2988
-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.xml2
-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/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.erl2
-rw-r--r--lib/wx/api_gen/gl_scan_doc.erl2
-rw-r--r--lib/wx/api_gen/wx_extra/added_func.h7
-rw-r--r--lib/wx/api_gen/wx_extra/wxEvtHandler.c_src2
-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.erl10
-rw-r--r--lib/wx/api_gen/wx_gen.hrl2
-rw-r--r--lib/wx/api_gen/wx_gen_cpp.erl50
-rw-r--r--lib/wx/api_gen/wx_gen_erl.erl6
-rw-r--r--lib/wx/api_gen/wxapi.conf17
-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_derived_dest.h6
-rw-r--r--lib/wx/c_src/gen/wxe_funcs.cpp179
-rw-r--r--lib/wx/c_src/gen/wxe_macros.h2540
-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.c4
-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.cpp4
-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.cpp7
-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.h2
-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.in10
-rw-r--r--lib/wx/doc/src/Makefile2
-rw-r--r--lib/wx/doc/src/book.xml2
-rw-r--r--lib/wx/doc/src/notes.xml22
-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/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.erl15
-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.erl2
-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.erl2
-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.hrl8
-rw-r--r--lib/wx/src/Makefile2
-rw-r--r--lib/wx/src/gen/wxAcceleratorEntry.erl2
-rw-r--r--lib/wx/src/gen/wxAcceleratorTable.erl2
-rw-r--r--lib/wx/src/gen/wxActivateEvent.erl2
-rw-r--r--lib/wx/src/gen/wxArtProvider.erl2
-rw-r--r--lib/wx/src/gen/wxAuiNotebook.erl41
-rw-r--r--lib/wx/src/gen/wxAuiNotebookEvent.erl2
-rw-r--r--lib/wx/src/gen/wxBitmap.erl2
-rw-r--r--lib/wx/src/gen/wxBitmapButton.erl47
-rw-r--r--lib/wx/src/gen/wxBitmapDataObject.erl2
-rw-r--r--lib/wx/src/gen/wxBoxSizer.erl2
-rw-r--r--lib/wx/src/gen/wxBrush.erl2
-rw-r--r--lib/wx/src/gen/wxBufferedDC.erl2
-rw-r--r--lib/wx/src/gen/wxBufferedPaintDC.erl2
-rw-r--r--lib/wx/src/gen/wxButton.erl43
-rw-r--r--lib/wx/src/gen/wxCalendarCtrl.erl43
-rw-r--r--lib/wx/src/gen/wxCalendarDateAttr.erl2
-rw-r--r--lib/wx/src/gen/wxCalendarEvent.erl2
-rw-r--r--lib/wx/src/gen/wxCaret.erl2
-rw-r--r--lib/wx/src/gen/wxCheckBox.erl43
-rw-r--r--lib/wx/src/gen/wxCheckListBox.erl92
-rw-r--r--lib/wx/src/gen/wxChildFocusEvent.erl2
-rw-r--r--lib/wx/src/gen/wxChoice.erl80
-rw-r--r--lib/wx/src/gen/wxChoicebook.erl43
-rw-r--r--lib/wx/src/gen/wxClientDC.erl2
-rw-r--r--lib/wx/src/gen/wxClipboard.erl2
-rw-r--r--lib/wx/src/gen/wxClipboardTextEvent.erl2
-rw-r--r--lib/wx/src/gen/wxCloseEvent.erl2
-rw-r--r--lib/wx/src/gen/wxColourData.erl2
-rw-r--r--lib/wx/src/gen/wxColourDialog.erl59
-rw-r--r--lib/wx/src/gen/wxColourPickerCtrl.erl67
-rw-r--r--lib/wx/src/gen/wxColourPickerEvent.erl2
-rw-r--r--lib/wx/src/gen/wxComboBox.erl80
-rw-r--r--lib/wx/src/gen/wxCommandEvent.erl2
-rw-r--r--lib/wx/src/gen/wxContextMenuEvent.erl2
-rw-r--r--lib/wx/src/gen/wxControl.erl43
-rw-r--r--lib/wx/src/gen/wxControlWithItems.erl43
-rw-r--r--lib/wx/src/gen/wxCursor.erl2
-rw-r--r--lib/wx/src/gen/wxDC.erl2
-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.erl67
-rw-r--r--lib/wx/src/gen/wxDialog.erl67
-rw-r--r--lib/wx/src/gen/wxDirDialog.erl59
-rw-r--r--lib/wx/src/gen/wxDirPickerCtrl.erl67
-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.erl2
-rw-r--r--lib/wx/src/gen/wxEvtHandler.erl2
-rw-r--r--lib/wx/src/gen/wxFileDataObject.erl2
-rw-r--r--lib/wx/src/gen/wxFileDialog.erl59
-rw-r--r--lib/wx/src/gen/wxFileDirPickerEvent.erl2
-rw-r--r--lib/wx/src/gen/wxFilePickerCtrl.erl67
-rw-r--r--lib/wx/src/gen/wxFindReplaceData.erl2
-rw-r--r--lib/wx/src/gen/wxFindReplaceDialog.erl59
-rw-r--r--lib/wx/src/gen/wxFlexGridSizer.erl2
-rw-r--r--lib/wx/src/gen/wxFocusEvent.erl2
-rw-r--r--lib/wx/src/gen/wxFont.erl2
-rw-r--r--lib/wx/src/gen/wxFontData.erl2
-rw-r--r--lib/wx/src/gen/wxFontDialog.erl59
-rw-r--r--lib/wx/src/gen/wxFontPickerCtrl.erl67
-rw-r--r--lib/wx/src/gen/wxFontPickerEvent.erl2
-rw-r--r--lib/wx/src/gen/wxFrame.erl67
-rw-r--r--lib/wx/src/gen/wxGBSizerItem.erl2
-rw-r--r--lib/wx/src/gen/wxGLCanvas.erl43
-rw-r--r--lib/wx/src/gen/wxGauge.erl82
-rw-r--r--lib/wx/src/gen/wxGenericDirCtrl.erl43
-rw-r--r--lib/wx/src/gen/wxGraphicsBrush.erl2
-rw-r--r--lib/wx/src/gen/wxGraphicsContext.erl2
-rw-r--r--lib/wx/src/gen/wxGraphicsFont.erl2
-rw-r--r--lib/wx/src/gen/wxGraphicsMatrix.erl2
-rw-r--r--lib/wx/src/gen/wxGraphicsObject.erl2
-rw-r--r--lib/wx/src/gen/wxGraphicsPath.erl2
-rw-r--r--lib/wx/src/gen/wxGraphicsPen.erl2
-rw-r--r--lib/wx/src/gen/wxGraphicsRenderer.erl2
-rw-r--r--lib/wx/src/gen/wxGrid.erl57
-rw-r--r--lib/wx/src/gen/wxGridBagSizer.erl2
-rw-r--r--lib/wx/src/gen/wxGridCellAttr.erl2
-rw-r--r--lib/wx/src/gen/wxGridCellBoolEditor.erl2
-rw-r--r--lib/wx/src/gen/wxGridCellBoolRenderer.erl2
-rw-r--r--lib/wx/src/gen/wxGridCellChoiceEditor.erl2
-rw-r--r--lib/wx/src/gen/wxGridCellEditor.erl2
-rw-r--r--lib/wx/src/gen/wxGridCellFloatEditor.erl2
-rw-r--r--lib/wx/src/gen/wxGridCellFloatRenderer.erl2
-rw-r--r--lib/wx/src/gen/wxGridCellNumberEditor.erl2
-rw-r--r--lib/wx/src/gen/wxGridCellNumberRenderer.erl2
-rw-r--r--lib/wx/src/gen/wxGridCellRenderer.erl2
-rw-r--r--lib/wx/src/gen/wxGridCellStringRenderer.erl2
-rw-r--r--lib/wx/src/gen/wxGridCellTextEditor.erl2
-rw-r--r--lib/wx/src/gen/wxGridEvent.erl2
-rw-r--r--lib/wx/src/gen/wxGridSizer.erl2
-rw-r--r--lib/wx/src/gen/wxHelpEvent.erl2
-rw-r--r--lib/wx/src/gen/wxHtmlEasyPrinting.erl2
-rw-r--r--lib/wx/src/gen/wxHtmlLinkEvent.erl2
-rw-r--r--lib/wx/src/gen/wxHtmlWindow.erl57
-rw-r--r--lib/wx/src/gen/wxIcon.erl2
-rw-r--r--lib/wx/src/gen/wxIconBundle.erl2
-rw-r--r--lib/wx/src/gen/wxIconizeEvent.erl2
-rw-r--r--lib/wx/src/gen/wxIdleEvent.erl2
-rw-r--r--lib/wx/src/gen/wxImage.erl2
-rw-r--r--lib/wx/src/gen/wxImageList.erl2
-rw-r--r--lib/wx/src/gen/wxInitDialogEvent.erl2
-rw-r--r--lib/wx/src/gen/wxJoystickEvent.erl2
-rw-r--r--lib/wx/src/gen/wxKeyEvent.erl2
-rw-r--r--lib/wx/src/gen/wxLayoutAlgorithm.erl2
-rw-r--r--lib/wx/src/gen/wxListBox.erl80
-rw-r--r--lib/wx/src/gen/wxListCtrl.erl74
-rw-r--r--lib/wx/src/gen/wxListEvent.erl2
-rw-r--r--lib/wx/src/gen/wxListItem.erl2
-rw-r--r--lib/wx/src/gen/wxListItemAttr.erl2
-rw-r--r--lib/wx/src/gen/wxListView.erl43
-rw-r--r--lib/wx/src/gen/wxListbook.erl43
-rw-r--r--lib/wx/src/gen/wxLocale.erl2
-rw-r--r--lib/wx/src/gen/wxLogNull.erl2
-rw-r--r--lib/wx/src/gen/wxMDIChildFrame.erl61
-rw-r--r--lib/wx/src/gen/wxMDIClientWindow.erl43
-rw-r--r--lib/wx/src/gen/wxMDIParentFrame.erl66
-rw-r--r--lib/wx/src/gen/wxMask.erl2
-rw-r--r--lib/wx/src/gen/wxMaximizeEvent.erl2
-rw-r--r--lib/wx/src/gen/wxMemoryDC.erl2
-rw-r--r--lib/wx/src/gen/wxMenu.erl2
-rw-r--r--lib/wx/src/gen/wxMenuBar.erl48
-rw-r--r--lib/wx/src/gen/wxMenuEvent.erl2
-rw-r--r--lib/wx/src/gen/wxMenuItem.erl2
-rw-r--r--lib/wx/src/gen/wxMessageDialog.erl59
-rw-r--r--lib/wx/src/gen/wxMiniFrame.erl66
-rw-r--r--lib/wx/src/gen/wxMirrorDC.erl2
-rw-r--r--lib/wx/src/gen/wxMouseCaptureChangedEvent.erl2
-rw-r--r--lib/wx/src/gen/wxMouseEvent.erl2
-rw-r--r--lib/wx/src/gen/wxMoveEvent.erl2
-rw-r--r--lib/wx/src/gen/wxMultiChoiceDialog.erl59
-rw-r--r--lib/wx/src/gen/wxNavigationKeyEvent.erl2
-rw-r--r--lib/wx/src/gen/wxNotebook.erl43
-rw-r--r--lib/wx/src/gen/wxNotebookEvent.erl2
-rw-r--r--lib/wx/src/gen/wxNotifyEvent.erl2
-rw-r--r--lib/wx/src/gen/wxPageSetupDialog.erl2
-rw-r--r--lib/wx/src/gen/wxPageSetupDialogData.erl2
-rw-r--r--lib/wx/src/gen/wxPaintDC.erl2
-rw-r--r--lib/wx/src/gen/wxPaintEvent.erl2
-rw-r--r--lib/wx/src/gen/wxPalette.erl2
-rw-r--r--lib/wx/src/gen/wxPaletteChangedEvent.erl2
-rw-r--r--lib/wx/src/gen/wxPanel.erl43
-rw-r--r--lib/wx/src/gen/wxPasswordEntryDialog.erl50
-rw-r--r--lib/wx/src/gen/wxPen.erl2
-rw-r--r--lib/wx/src/gen/wxPickerBase.erl43
-rw-r--r--lib/wx/src/gen/wxPopupTransientWindow.erl47
-rw-r--r--lib/wx/src/gen/wxPopupWindow.erl43
-rw-r--r--lib/wx/src/gen/wxPostScriptDC.erl2
-rw-r--r--lib/wx/src/gen/wxPreviewCanvas.erl57
-rw-r--r--lib/wx/src/gen/wxPreviewControlBar.erl43
-rw-r--r--lib/wx/src/gen/wxPreviewFrame.erl66
-rw-r--r--lib/wx/src/gen/wxPrintData.erl2
-rw-r--r--lib/wx/src/gen/wxPrintDialog.erl59
-rw-r--r--lib/wx/src/gen/wxPrintDialogData.erl2
-rw-r--r--lib/wx/src/gen/wxPrintPreview.erl2
-rw-r--r--lib/wx/src/gen/wxPrinter.erl2
-rw-r--r--lib/wx/src/gen/wxPrintout.erl2
-rw-r--r--lib/wx/src/gen/wxProgressDialog.erl59
-rw-r--r--lib/wx/src/gen/wxQueryNewPaletteEvent.erl2
-rw-r--r--lib/wx/src/gen/wxRadioBox.erl46
-rw-r--r--lib/wx/src/gen/wxRadioButton.erl43
-rw-r--r--lib/wx/src/gen/wxRegion.erl2
-rw-r--r--lib/wx/src/gen/wxSashEvent.erl2
-rw-r--r--lib/wx/src/gen/wxSashLayoutWindow.erl34
-rw-r--r--lib/wx/src/gen/wxSashWindow.erl43
-rw-r--r--lib/wx/src/gen/wxScreenDC.erl2
-rw-r--r--lib/wx/src/gen/wxScrollBar.erl45
-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.erl43
-rw-r--r--lib/wx/src/gen/wxSetCursorEvent.erl2
-rw-r--r--lib/wx/src/gen/wxShowEvent.erl2
-rw-r--r--lib/wx/src/gen/wxSingleChoiceDialog.erl59
-rw-r--r--lib/wx/src/gen/wxSizeEvent.erl2
-rw-r--r--lib/wx/src/gen/wxSizer.erl2
-rw-r--r--lib/wx/src/gen/wxSizerFlags.erl2
-rw-r--r--lib/wx/src/gen/wxSizerItem.erl2
-rw-r--r--lib/wx/src/gen/wxSlider.erl43
-rw-r--r--lib/wx/src/gen/wxSpinButton.erl43
-rw-r--r--lib/wx/src/gen/wxSpinCtrl.erl43
-rw-r--r--lib/wx/src/gen/wxSpinEvent.erl2
-rw-r--r--lib/wx/src/gen/wxSplashScreen.erl66
-rw-r--r--lib/wx/src/gen/wxSplitterEvent.erl2
-rw-r--r--lib/wx/src/gen/wxSplitterWindow.erl43
-rw-r--r--lib/wx/src/gen/wxStaticBitmap.erl43
-rw-r--r--lib/wx/src/gen/wxStaticBox.erl43
-rw-r--r--lib/wx/src/gen/wxStaticBoxSizer.erl2
-rw-r--r--lib/wx/src/gen/wxStaticLine.erl43
-rw-r--r--lib/wx/src/gen/wxStaticText.erl43
-rw-r--r--lib/wx/src/gen/wxStatusBar.erl43
-rw-r--r--lib/wx/src/gen/wxStdDialogButtonSizer.erl2
-rw-r--r--lib/wx/src/gen/wxStyledTextCtrl.erl60
-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.erl2
-rw-r--r--lib/wx/src/gen/wxSystemSettings.erl2
-rw-r--r--lib/wx/src/gen/wxTaskBarIcon.erl2
-rw-r--r--lib/wx/src/gen/wxTaskBarIconEvent.erl2
-rw-r--r--lib/wx/src/gen/wxTextAttr.erl2
-rw-r--r--lib/wx/src/gen/wxTextCtrl.erl43
-rw-r--r--lib/wx/src/gen/wxTextDataObject.erl2
-rw-r--r--lib/wx/src/gen/wxTextEntryDialog.erl59
-rw-r--r--lib/wx/src/gen/wxToggleButton.erl43
-rw-r--r--lib/wx/src/gen/wxToolBar.erl43
-rw-r--r--lib/wx/src/gen/wxToolTip.erl2
-rw-r--r--lib/wx/src/gen/wxToolbook.erl43
-rw-r--r--lib/wx/src/gen/wxTopLevelWindow.erl43
-rw-r--r--lib/wx/src/gen/wxTreeCtrl.erl43
-rw-r--r--lib/wx/src/gen/wxTreeEvent.erl2
-rw-r--r--lib/wx/src/gen/wxTreebook.erl43
-rw-r--r--lib/wx/src/gen/wxUpdateUIEvent.erl2
-rw-r--r--lib/wx/src/gen/wxWindow.erl78
-rw-r--r--lib/wx/src/gen/wxWindowCreateEvent.erl2
-rw-r--r--lib/wx/src/gen/wxWindowDC.erl2
-rw-r--r--lib/wx/src/gen/wxWindowDestroyEvent.erl2
-rw-r--r--lib/wx/src/gen/wxXmlResource.erl2
-rw-r--r--lib/wx/src/gen/wx_misc.erl2
-rw-r--r--lib/wx/src/gen/wxe_debug.hrl2542
-rw-r--r--lib/wx/src/gen/wxe_funcs.hrl2540
-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.erl8
-rw-r--r--lib/wx/src/wx_object.erl10
-rw-r--r--lib/wx/src/wxe.hrl2
-rw-r--r--lib/wx/src/wxe_master.erl2
-rw-r--r--lib/wx/src/wxe_server.erl24
-rw-r--r--lib/wx/src/wxe_util.erl2
-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.erl27
-rw-r--r--lib/wx/test/wx_class_SUITE.erl73
-rw-r--r--lib/wx/test/wx_event_SUITE.erl34
-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.xml16
-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.erl2
-rw-r--r--lib/xmerl/src/xmerl_xs.erl2
-rw-r--r--lib/xmerl/src/xmerl_xsd.erl28
-rw-r--r--lib/xmerl/src/xmerl_xsd_type.erl16
-rw-r--r--lib/xmerl/test/Makefile2
-rw-r--r--lib/xmerl/test/xmerl_SUITE.erl594
-rw-r--r--lib/xmerl/test/xmerl_SUITE_data/xpath/xpath_abbrev.erl403
-rw-r--r--lib/xmerl/test/xmerl_SUITE_data/xpath/xpath_lib.erl212
-rw-r--r--lib/xmerl/test/xmerl_SUITE_data/xpath/xpath_text.erl8
-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.erl83
-rw-r--r--lib/xmerl/test/xmerl_sax_std_SUITE.erl16384
-rw-r--r--lib/xmerl/test/xmerl_std_SUITE.erl12769
-rw-r--r--lib/xmerl/test/xmerl_test_lib.erl4
-rw-r--r--lib/xmerl/test/xmerl_xsd_MS2002-01-16_SUITE.erl14490
-rw-r--r--lib/xmerl/test/xmerl_xsd_NIST2002-01-16_SUITE.erl13254
-rw-r--r--lib/xmerl/test/xmerl_xsd_SUITE.erl1087
-rw-r--r--lib/xmerl/test/xmerl_xsd_Sun2002-01-16_SUITE.erl426
-rw-r--r--lib/xmerl/test/xmerl_xsd_lib.erl245
-rw-r--r--lib/xmerl/vsn.mk2
-rwxr-xr-xmake/make_emakefile2
-rwxr-xr-xotp_build4
-rw-r--r--otp_versions.table5
-rw-r--r--system/COPYRIGHT2
-rw-r--r--system/doc/definitions/term.defs1
-rw-r--r--system/doc/design_principles/Makefile17
-rw-r--r--system/doc/design_principles/applications.xml2
-rw-r--r--system/doc/design_principles/appup_cookbook.xml5
-rw-r--r--system/doc/design_principles/book.xml2
-rw-r--r--system/doc/design_principles/code_lock.diabin0 -> 2932 bytes
-rw-r--r--system/doc/design_principles/code_lock.pngbin0 -> 59160 bytes
-rw-r--r--system/doc/design_principles/code_lock_2.diabin0 -> 2621 bytes
-rw-r--r--system/doc/design_principles/code_lock_2.pngbin0 -> 48927 bytes
-rw-r--r--system/doc/design_principles/des_princ.xml6
-rw-r--r--system/doc/design_principles/distributed_applications.xml2
-rw-r--r--system/doc/design_principles/events.xml2
-rw-r--r--system/doc/design_principles/fsm.xml12
-rw-r--r--system/doc/design_principles/gen_server_concepts.xml2
-rw-r--r--system/doc/design_principles/included_applications.xml2
-rw-r--r--system/doc/design_principles/part.xml3
-rw-r--r--system/doc/design_principles/release_handling.xml4
-rw-r--r--system/doc/design_principles/release_structure.xml2
-rw-r--r--system/doc/design_principles/spec_proc.xml33
-rw-r--r--system/doc/design_principles/statem.xml1457
-rw-r--r--system/doc/design_principles/sup_princ.xml10
-rw-r--r--system/doc/design_principles/xmlfiles.mk3
-rw-r--r--system/doc/efficiency_guide/Makefile2
-rw-r--r--system/doc/efficiency_guide/advanced.xml2
-rw-r--r--system/doc/efficiency_guide/appendix.xml2
-rw-r--r--system/doc/efficiency_guide/binaryhandling.xml2
-rw-r--r--system/doc/efficiency_guide/book.xml2
-rw-r--r--system/doc/efficiency_guide/commoncaveats.xml2
-rw-r--r--system/doc/efficiency_guide/drivers.xml2
-rw-r--r--system/doc/efficiency_guide/functions.xml2
-rw-r--r--system/doc/efficiency_guide/introduction.xml2
-rw-r--r--system/doc/efficiency_guide/listhandling.xml2
-rw-r--r--system/doc/efficiency_guide/myths.xml2
-rw-r--r--system/doc/efficiency_guide/part.xml2
-rw-r--r--system/doc/efficiency_guide/processes.xml2
-rw-r--r--system/doc/efficiency_guide/profiling.xml2
-rw-r--r--system/doc/efficiency_guide/tablesDatabases.xml2
-rw-r--r--system/doc/efficiency_guide/xmlfiles.mk2
-rw-r--r--system/doc/embedded/Makefile2
-rw-r--r--system/doc/embedded/book.xml2
-rw-r--r--system/doc/embedded/embedded_nt.xml2
-rw-r--r--system/doc/embedded/embedded_solaris.xml2
-rw-r--r--system/doc/embedded/intro.xml2
-rw-r--r--system/doc/embedded/part.xml2
-rw-r--r--system/doc/embedded/starting.xml2
-rw-r--r--system/doc/embedded/target.xml2
-rw-r--r--system/doc/embedded/vme_problems.xml2
-rw-r--r--system/doc/embedded/xmlfiles.mk2
-rw-r--r--system/doc/embedded/xntp.xml2
-rw-r--r--system/doc/getting_started/Makefile2
-rw-r--r--system/doc/getting_started/book.xml2
-rw-r--r--system/doc/getting_started/conc_prog.xml2
-rw-r--r--system/doc/getting_started/intro.xml2
-rw-r--r--system/doc/getting_started/part.xml2
-rw-r--r--system/doc/getting_started/records_macros.xml2
-rw-r--r--system/doc/getting_started/robustness.xml2
-rw-r--r--system/doc/getting_started/seq_prog.xml2
-rw-r--r--system/doc/getting_started/xmlfiles.mk2
-rw-r--r--system/doc/installation_guide/Makefile2
-rw-r--r--system/doc/installation_guide/book.xml2
-rw-r--r--system/doc/installation_guide/install-binary.xml2
-rw-r--r--system/doc/installation_guide/part.xml2
-rw-r--r--system/doc/installation_guide/xmlfiles.mk2
-rw-r--r--system/doc/oam/Makefile2
-rw-r--r--system/doc/oam/book.xml2
-rw-r--r--system/doc/oam/oam_intro.xml2
-rw-r--r--system/doc/oam/part.xml2
-rw-r--r--system/doc/oam/xmlfiles.mk2
-rw-r--r--system/doc/programming_examples/Makefile2
-rw-r--r--system/doc/programming_examples/book.xml2
-rw-r--r--system/doc/programming_examples/funs.xmlsrc4
-rw-r--r--system/doc/programming_examples/list_comprehensions.xml2
-rw-r--r--system/doc/programming_examples/part.xml2
-rw-r--r--system/doc/programming_examples/records.xml2
-rw-r--r--system/doc/programming_examples/xmlfiles.mk2
-rw-r--r--system/doc/reference_manual/Makefile2
-rw-r--r--system/doc/reference_manual/book.xml2
-rw-r--r--system/doc/reference_manual/code_loading.xml55
-rw-r--r--system/doc/reference_manual/expressions.xml10
-rw-r--r--system/doc/reference_manual/macros.xml48
-rw-r--r--system/doc/reference_manual/modules.xml3
-rw-r--r--system/doc/reference_manual/part.xml2
-rw-r--r--system/doc/reference_manual/patterns.xml2
-rw-r--r--system/doc/reference_manual/typespec.xml40
-rw-r--r--system/doc/reference_manual/xmlfiles.mk2
-rw-r--r--system/doc/system_architecture_intro/Makefile2
-rw-r--r--system/doc/system_architecture_intro/book.xml2
-rw-r--r--system/doc/system_architecture_intro/part.xml2
-rw-r--r--system/doc/system_architecture_intro/sys_arch_intro.xml2
-rw-r--r--system/doc/system_architecture_intro/xmlfiles.mk2
-rw-r--r--system/doc/system_principles/Makefile2
-rw-r--r--system/doc/system_principles/book.xml2
-rw-r--r--system/doc/system_principles/create_target.xmlsrc2
-rw-r--r--system/doc/system_principles/error_logging.xml2
-rw-r--r--system/doc/system_principles/part.xml2
-rw-r--r--system/doc/system_principles/upgrade.xml2
-rw-r--r--system/doc/system_principles/versions.xml2
-rw-r--r--system/doc/system_principles/xmlfiles.mk2
-rw-r--r--system/doc/top/Makefile2
-rw-r--r--system/doc/top/book.xml2
-rw-r--r--system/doc/top/src/erl_html_tools.erl2
-rw-r--r--system/doc/top/src/erlresolvelinks.erl2
-rw-r--r--system/doc/top/src/otp_man_index.erl2
-rw-r--r--system/doc/top/templates/applications.html.src2
-rw-r--r--system/doc/top/templates/index.html.src10
-rw-r--r--system/doc/tutorial/Makefile2
-rw-r--r--system/doc/tutorial/appendix.xmlsrc2
-rw-r--r--system/doc/tutorial/book.xml2
-rw-r--r--system/doc/tutorial/distribution.xml2
-rw-r--r--system/doc/tutorial/part.xml2
-rw-r--r--system/doc/tutorial/xmlfiles.mk2
5606 files changed, 181929 insertions, 150610 deletions
diff --git a/.gitignore b/.gitignore
index 3dcfa79f4d..3fc95170aa 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,6 +3,7 @@
# emacs
*~
lib/tools/emacs/*.elc
+TAGS
# vim
.*.sw[a-z]
@@ -360,15 +361,8 @@ JAVADOC-GENERATED
# system
-/system/doc/pdf/*.pdf
-/system/doc/pdf/*.fo
-/system/doc/html/*.html
-/system/doc/html/*.eix
-/system/doc/html/js
-/system/doc/html/*/*.html
-/system/doc/html/*/*.gif
-/system/doc/html/*/*.jpg
-/system/doc/html/*/*.eix
+/system/doc/pdf
+/system/doc/html
/system/doc/top/PR.template
/system/doc/top/erlresolvelinks.js
/system/doc/programming_examples/funs.xml
diff --git a/HOWTO/INSTALL.md b/HOWTO/INSTALL.md
index a823d5abbc..2ae1ed3c8d 100644
--- a/HOWTO/INSTALL.md
+++ b/HOWTO/INSTALL.md
@@ -68,7 +68,7 @@ also find the utilities needed for building the documentation.
Required for building the application `crypto`.
Further, `ssl` and `ssh` require a working crypto application and
will also be skipped if OpenSSL is missing. The `public_key`
- application will available without `crypto`, but the functionality
+ application is available without `crypto`, but the functionality
will be very limited.
The development package of OpenSSL including the header files are needed as well
@@ -356,8 +356,6 @@ Some of the available `configure` options are:
depending on operating system and hardware platform. Note that by
enabling this you might get a seemingly working system that sometimes
fail on floating point operations.
-* `--enable-darwin-universal` - Build universal binaries on darwin i386.
-* `--enable-darwin-64bit` - Build 64-bit binaries on darwin
* `--enable-m64-build` - Build 64-bit binaries using the `-m64` flag to
`(g)cc`
* `--enable-m32-build` - Build 32-bit binaries using the `-m32` flag to
@@ -406,7 +404,7 @@ Some of the available `configure` options are:
that has to be the same as the filename. You also have to define
`STATIC_ERLANG_{NIF,DRIVER}` when compiling the .o files for the nif/driver.
If your nif/driver depends on some other dynamic library, you now have to link
- that to the Erlang VM binary. This is easily achived by passing `LIBS=-llibname`
+ that to the Erlang VM binary. This is easily achieved by passing `LIBS=-llibname`
to configure.
* `--without-$app` - By default all applications in Erlang/OTP will be included
in a release. If this is not wanted it is possible to specify that Erlang/OTP
diff --git a/OTP_VERSION b/OTP_VERSION
index cc12e7c6aa..6ea9a3bd47 100644
--- a/OTP_VERSION
+++ b/OTP_VERSION
@@ -1,2 +1 @@
-19.0-rc0
-
+19.0
diff --git a/README.md b/README.md
index b5c27f1bae..9986d6bc18 100644
--- a/README.md
+++ b/README.md
@@ -36,6 +36,8 @@ Here are the [instructions for submitting patches] [2].
In short:
+* Go to the JIRA issue tracker at [bugs.erlang.org] [7] to see reported issues which you can contribute to. Search for issues with the status *Contribution Needed*.
+
* We prefer to receive proposed updates via email on the
[`erlang-patches`] [3] mailing list or through a pull request.
@@ -58,8 +60,12 @@ In short:
may suggest improvements that are needed before the change can be accepted
and merged.
-* Once or twice a week, a status email called ["What's cooking in Erlang/OTP"] [4]
- will be sent to the [`erlang-patches`] [3] mailing list.
+
+Bug Reports
+--------------------------
+
+Please look at the [instructions for submitting bugs reports] [6].
+
Copyright and License
---------------------
@@ -85,7 +91,9 @@ Copyright and License
[1]: http://www.erlang.org
- [2]: http://wiki.github.com/erlang/otp/submitting-patches
+ [2]: http://wiki.github.com/erlang/otp/contribution-guidelines
[3]: http://www.erlang.org/static/doc/mailinglist.html
[4]: http://erlang.github.com/otp/
[5]: HOWTO/INSTALL.md
+ [6]: https://github.com/erlang/otp/wiki/Bug-reports
+ [7]: http://bugs.erlang.org
diff --git a/bootstrap/bin/start.boot b/bootstrap/bin/start.boot
index 73381d4d8b..cc0edd5427 100644
--- a/bootstrap/bin/start.boot
+++ b/bootstrap/bin/start.boot
Binary files differ
diff --git a/bootstrap/bin/start_clean.boot b/bootstrap/bin/start_clean.boot
index 73381d4d8b..cc0edd5427 100644
--- a/bootstrap/bin/start_clean.boot
+++ b/bootstrap/bin/start_clean.boot
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/beam_asm.beam b/bootstrap/lib/compiler/ebin/beam_asm.beam
index ae57c8dd6b..c8bc82022c 100644
--- a/bootstrap/lib/compiler/ebin/beam_asm.beam
+++ b/bootstrap/lib/compiler/ebin/beam_asm.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/beam_block.beam b/bootstrap/lib/compiler/ebin/beam_block.beam
index 2854b91bae..cccf21d9ab 100644
--- a/bootstrap/lib/compiler/ebin/beam_block.beam
+++ b/bootstrap/lib/compiler/ebin/beam_block.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/beam_bool.beam b/bootstrap/lib/compiler/ebin/beam_bool.beam
index e677c125a3..1673c4aadb 100644
--- a/bootstrap/lib/compiler/ebin/beam_bool.beam
+++ b/bootstrap/lib/compiler/ebin/beam_bool.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/beam_bs.beam b/bootstrap/lib/compiler/ebin/beam_bs.beam
index 18b9f8bc1b..6105ef85ca 100644
--- a/bootstrap/lib/compiler/ebin/beam_bs.beam
+++ b/bootstrap/lib/compiler/ebin/beam_bs.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/beam_bsm.beam b/bootstrap/lib/compiler/ebin/beam_bsm.beam
index b65f915978..51abd68b00 100644
--- a/bootstrap/lib/compiler/ebin/beam_bsm.beam
+++ b/bootstrap/lib/compiler/ebin/beam_bsm.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/beam_dead.beam b/bootstrap/lib/compiler/ebin/beam_dead.beam
index 10926614e6..4fda5157fa 100644
--- a/bootstrap/lib/compiler/ebin/beam_dead.beam
+++ b/bootstrap/lib/compiler/ebin/beam_dead.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/beam_disasm.beam b/bootstrap/lib/compiler/ebin/beam_disasm.beam
index b2fd7faa0c..477ab0a957 100644
--- a/bootstrap/lib/compiler/ebin/beam_disasm.beam
+++ b/bootstrap/lib/compiler/ebin/beam_disasm.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/beam_peep.beam b/bootstrap/lib/compiler/ebin/beam_peep.beam
index 334047bbf6..2a2b8d38f5 100644
--- a/bootstrap/lib/compiler/ebin/beam_peep.beam
+++ b/bootstrap/lib/compiler/ebin/beam_peep.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/beam_receive.beam b/bootstrap/lib/compiler/ebin/beam_receive.beam
index 0aa196f3de..fef3fcc816 100644
--- a/bootstrap/lib/compiler/ebin/beam_receive.beam
+++ b/bootstrap/lib/compiler/ebin/beam_receive.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/beam_reorder.beam b/bootstrap/lib/compiler/ebin/beam_reorder.beam
index 0dc44add6b..45d1dcfa2f 100644
--- a/bootstrap/lib/compiler/ebin/beam_reorder.beam
+++ b/bootstrap/lib/compiler/ebin/beam_reorder.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/beam_split.beam b/bootstrap/lib/compiler/ebin/beam_split.beam
index a4e2b78938..4a63468419 100644
--- a/bootstrap/lib/compiler/ebin/beam_split.beam
+++ b/bootstrap/lib/compiler/ebin/beam_split.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/beam_trim.beam b/bootstrap/lib/compiler/ebin/beam_trim.beam
index 194882f68a..67d290e733 100644
--- a/bootstrap/lib/compiler/ebin/beam_trim.beam
+++ b/bootstrap/lib/compiler/ebin/beam_trim.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/beam_type.beam b/bootstrap/lib/compiler/ebin/beam_type.beam
index 35bc046ef8..1c61b33c25 100644
--- a/bootstrap/lib/compiler/ebin/beam_type.beam
+++ b/bootstrap/lib/compiler/ebin/beam_type.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/beam_utils.beam b/bootstrap/lib/compiler/ebin/beam_utils.beam
index a97fc853a7..664140540c 100644
--- a/bootstrap/lib/compiler/ebin/beam_utils.beam
+++ b/bootstrap/lib/compiler/ebin/beam_utils.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/beam_validator.beam b/bootstrap/lib/compiler/ebin/beam_validator.beam
index 73fa117755..a3fced0154 100644
--- a/bootstrap/lib/compiler/ebin/beam_validator.beam
+++ b/bootstrap/lib/compiler/ebin/beam_validator.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/beam_z.beam b/bootstrap/lib/compiler/ebin/beam_z.beam
index 7bf77d7d33..11ddf0e062 100644
--- a/bootstrap/lib/compiler/ebin/beam_z.beam
+++ b/bootstrap/lib/compiler/ebin/beam_z.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/cerl.beam b/bootstrap/lib/compiler/ebin/cerl.beam
index 88857b8905..dea6cb4ee2 100644
--- a/bootstrap/lib/compiler/ebin/cerl.beam
+++ b/bootstrap/lib/compiler/ebin/cerl.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/cerl_clauses.beam b/bootstrap/lib/compiler/ebin/cerl_clauses.beam
index 95dd3f3cbb..cc4e3a92a3 100644
--- a/bootstrap/lib/compiler/ebin/cerl_clauses.beam
+++ b/bootstrap/lib/compiler/ebin/cerl_clauses.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/cerl_inline.beam b/bootstrap/lib/compiler/ebin/cerl_inline.beam
index cc90a53ef9..dcfb32d866 100644
--- a/bootstrap/lib/compiler/ebin/cerl_inline.beam
+++ b/bootstrap/lib/compiler/ebin/cerl_inline.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/cerl_trees.beam b/bootstrap/lib/compiler/ebin/cerl_trees.beam
index 37120929ba..a2c27861c4 100644
--- a/bootstrap/lib/compiler/ebin/cerl_trees.beam
+++ b/bootstrap/lib/compiler/ebin/cerl_trees.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/compile.beam b/bootstrap/lib/compiler/ebin/compile.beam
index 5234f98a75..b309544c39 100644
--- a/bootstrap/lib/compiler/ebin/compile.beam
+++ b/bootstrap/lib/compiler/ebin/compile.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/compiler.app b/bootstrap/lib/compiler/ebin/compiler.app
index 37a6ce4acb..53891c7260 100644
--- a/bootstrap/lib/compiler/ebin/compiler.app
+++ b/bootstrap/lib/compiler/ebin/compiler.app
@@ -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.
@@ -19,7 +19,7 @@
{application, compiler,
[{description, "ERTS CXC 138 10"},
- {vsn, "6.0.2"},
+ {vsn, "6.0.3"},
{modules, [
beam_a,
beam_asm,
diff --git a/bootstrap/lib/compiler/ebin/compiler.appup b/bootstrap/lib/compiler/ebin/compiler.appup
index ceb96264d5..367a845adf 100644
--- a/bootstrap/lib/compiler/ebin/compiler.appup
+++ b/bootstrap/lib/compiler/ebin/compiler.appup
@@ -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.
@@ -16,7 +16,7 @@
%% limitations under the License.
%%
%% %CopyrightEnd%
-{"6.0.2",
+{"6.0.3",
[{<<".*">>,[{restart_application, compiler}]}],
[{<<".*">>,[{restart_application, compiler}]}]
}.
diff --git a/bootstrap/lib/compiler/ebin/core_lint.beam b/bootstrap/lib/compiler/ebin/core_lint.beam
index 69143cdd23..0e47e00b15 100644
--- a/bootstrap/lib/compiler/ebin/core_lint.beam
+++ b/bootstrap/lib/compiler/ebin/core_lint.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/core_parse.beam b/bootstrap/lib/compiler/ebin/core_parse.beam
index 3ef8588f65..920dbc922f 100644
--- a/bootstrap/lib/compiler/ebin/core_parse.beam
+++ b/bootstrap/lib/compiler/ebin/core_parse.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/core_pp.beam b/bootstrap/lib/compiler/ebin/core_pp.beam
index f320fd6908..e274211c6c 100644
--- a/bootstrap/lib/compiler/ebin/core_pp.beam
+++ b/bootstrap/lib/compiler/ebin/core_pp.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/rec_env.beam b/bootstrap/lib/compiler/ebin/rec_env.beam
index 9388b5d4e1..a7c78175c3 100644
--- a/bootstrap/lib/compiler/ebin/rec_env.beam
+++ b/bootstrap/lib/compiler/ebin/rec_env.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/sys_core_dsetel.beam b/bootstrap/lib/compiler/ebin/sys_core_dsetel.beam
index 0c2d05286a..81da8b62c5 100644
--- a/bootstrap/lib/compiler/ebin/sys_core_dsetel.beam
+++ b/bootstrap/lib/compiler/ebin/sys_core_dsetel.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/sys_core_fold.beam b/bootstrap/lib/compiler/ebin/sys_core_fold.beam
index 52c0d62f5f..7d01ed81d5 100644
--- a/bootstrap/lib/compiler/ebin/sys_core_fold.beam
+++ b/bootstrap/lib/compiler/ebin/sys_core_fold.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/sys_pre_attributes.beam b/bootstrap/lib/compiler/ebin/sys_pre_attributes.beam
index 934a539ad9..58dff1b796 100644
--- a/bootstrap/lib/compiler/ebin/sys_pre_attributes.beam
+++ b/bootstrap/lib/compiler/ebin/sys_pre_attributes.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/sys_pre_expand.beam b/bootstrap/lib/compiler/ebin/sys_pre_expand.beam
index 71d381b5b3..0914282354 100644
--- a/bootstrap/lib/compiler/ebin/sys_pre_expand.beam
+++ b/bootstrap/lib/compiler/ebin/sys_pre_expand.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/v3_codegen.beam b/bootstrap/lib/compiler/ebin/v3_codegen.beam
index 322469639f..0923d4e678 100644
--- a/bootstrap/lib/compiler/ebin/v3_codegen.beam
+++ b/bootstrap/lib/compiler/ebin/v3_codegen.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/v3_core.beam b/bootstrap/lib/compiler/ebin/v3_core.beam
index 8fc18ce4a5..110d376a0a 100644
--- a/bootstrap/lib/compiler/ebin/v3_core.beam
+++ b/bootstrap/lib/compiler/ebin/v3_core.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/v3_kernel.beam b/bootstrap/lib/compiler/ebin/v3_kernel.beam
index 6555a39c86..47eaf3b5e8 100644
--- a/bootstrap/lib/compiler/ebin/v3_kernel.beam
+++ b/bootstrap/lib/compiler/ebin/v3_kernel.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/code.beam b/bootstrap/lib/kernel/ebin/code.beam
index 28d8a5b579..784d8c2e71 100644
--- a/bootstrap/lib/kernel/ebin/code.beam
+++ b/bootstrap/lib/kernel/ebin/code.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/code_server.beam b/bootstrap/lib/kernel/ebin/code_server.beam
index 135fd066d9..6f99487ca7 100644
--- a/bootstrap/lib/kernel/ebin/code_server.beam
+++ b/bootstrap/lib/kernel/ebin/code_server.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/disk_log.beam b/bootstrap/lib/kernel/ebin/disk_log.beam
index 3384baedc0..5aa8bf7dc1 100644
--- a/bootstrap/lib/kernel/ebin/disk_log.beam
+++ b/bootstrap/lib/kernel/ebin/disk_log.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/disk_log_1.beam b/bootstrap/lib/kernel/ebin/disk_log_1.beam
index fc1c4781f1..cb627c10a5 100644
--- a/bootstrap/lib/kernel/ebin/disk_log_1.beam
+++ b/bootstrap/lib/kernel/ebin/disk_log_1.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/dist_util.beam b/bootstrap/lib/kernel/ebin/dist_util.beam
index 521bdb5d91..eb09a06785 100644
--- a/bootstrap/lib/kernel/ebin/dist_util.beam
+++ b/bootstrap/lib/kernel/ebin/dist_util.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/erl_distribution.beam b/bootstrap/lib/kernel/ebin/erl_distribution.beam
index eacacf799c..198f23e14b 100644
--- a/bootstrap/lib/kernel/ebin/erl_distribution.beam
+++ b/bootstrap/lib/kernel/ebin/erl_distribution.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/erl_epmd.beam b/bootstrap/lib/kernel/ebin/erl_epmd.beam
index 267958ae88..8e8460514c 100644
--- a/bootstrap/lib/kernel/ebin/erl_epmd.beam
+++ b/bootstrap/lib/kernel/ebin/erl_epmd.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/error_handler.beam b/bootstrap/lib/kernel/ebin/error_handler.beam
index 64f44baeb7..a898c909ac 100644
--- a/bootstrap/lib/kernel/ebin/error_handler.beam
+++ b/bootstrap/lib/kernel/ebin/error_handler.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/erts_debug.beam b/bootstrap/lib/kernel/ebin/erts_debug.beam
index 908c63cb9a..ab883f3a50 100644
--- a/bootstrap/lib/kernel/ebin/erts_debug.beam
+++ b/bootstrap/lib/kernel/ebin/erts_debug.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/file.beam b/bootstrap/lib/kernel/ebin/file.beam
index a66a2621b9..28d72dfafc 100644
--- a/bootstrap/lib/kernel/ebin/file.beam
+++ b/bootstrap/lib/kernel/ebin/file.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/file_io_server.beam b/bootstrap/lib/kernel/ebin/file_io_server.beam
index dabb6b194e..c22b7e4dec 100644
--- a/bootstrap/lib/kernel/ebin/file_io_server.beam
+++ b/bootstrap/lib/kernel/ebin/file_io_server.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/gen_sctp.beam b/bootstrap/lib/kernel/ebin/gen_sctp.beam
index 91aaa41063..fe2ff17ff1 100644
--- a/bootstrap/lib/kernel/ebin/gen_sctp.beam
+++ b/bootstrap/lib/kernel/ebin/gen_sctp.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/global.beam b/bootstrap/lib/kernel/ebin/global.beam
index 419102e285..465dab3a52 100644
--- a/bootstrap/lib/kernel/ebin/global.beam
+++ b/bootstrap/lib/kernel/ebin/global.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/global_group.beam b/bootstrap/lib/kernel/ebin/global_group.beam
index 1269f7e321..03202f68eb 100644
--- a/bootstrap/lib/kernel/ebin/global_group.beam
+++ b/bootstrap/lib/kernel/ebin/global_group.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/group.beam b/bootstrap/lib/kernel/ebin/group.beam
index 3df8f6030c..38eb0e7a6c 100644
--- a/bootstrap/lib/kernel/ebin/group.beam
+++ b/bootstrap/lib/kernel/ebin/group.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/hipe_unified_loader.beam b/bootstrap/lib/kernel/ebin/hipe_unified_loader.beam
index a90757bd32..5a2f294951 100644
--- a/bootstrap/lib/kernel/ebin/hipe_unified_loader.beam
+++ b/bootstrap/lib/kernel/ebin/hipe_unified_loader.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/inet.beam b/bootstrap/lib/kernel/ebin/inet.beam
index 55598b0067..8cfdf389ad 100644
--- a/bootstrap/lib/kernel/ebin/inet.beam
+++ b/bootstrap/lib/kernel/ebin/inet.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/inet_db.beam b/bootstrap/lib/kernel/ebin/inet_db.beam
index 1b7450f0d3..30ab40c93f 100644
--- a/bootstrap/lib/kernel/ebin/inet_db.beam
+++ b/bootstrap/lib/kernel/ebin/inet_db.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/inet_dns.beam b/bootstrap/lib/kernel/ebin/inet_dns.beam
index 88ecaaf10b..f4be62bae6 100644
--- a/bootstrap/lib/kernel/ebin/inet_dns.beam
+++ b/bootstrap/lib/kernel/ebin/inet_dns.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/inet_gethost_native.beam b/bootstrap/lib/kernel/ebin/inet_gethost_native.beam
index 93f60428a1..f090de9fba 100644
--- a/bootstrap/lib/kernel/ebin/inet_gethost_native.beam
+++ b/bootstrap/lib/kernel/ebin/inet_gethost_native.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/inet_parse.beam b/bootstrap/lib/kernel/ebin/inet_parse.beam
index 4323d12bf1..c5c171aa54 100644
--- a/bootstrap/lib/kernel/ebin/inet_parse.beam
+++ b/bootstrap/lib/kernel/ebin/inet_parse.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/inet_res.beam b/bootstrap/lib/kernel/ebin/inet_res.beam
index ada7300673..2713c7fef6 100644
--- a/bootstrap/lib/kernel/ebin/inet_res.beam
+++ b/bootstrap/lib/kernel/ebin/inet_res.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/kernel.app b/bootstrap/lib/kernel/ebin/kernel.app
index 14f526c30c..8e00bc4a45 100644
--- a/bootstrap/lib/kernel/ebin/kernel.app
+++ b/bootstrap/lib/kernel/ebin/kernel.app
@@ -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.
@@ -22,7 +22,7 @@
{application, kernel,
[
{description, "ERTS CXC 138 10"},
- {vsn, "4.1.1"},
+ {vsn, "5.0"},
{modules, [application,
application_controller,
application_master,
@@ -116,6 +116,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-2.6", "sasl-2.6"]}
]
}.
diff --git a/bootstrap/lib/kernel/ebin/kernel.appup b/bootstrap/lib/kernel/ebin/kernel.appup
index 5cd6724383..1ed9771492 100644
--- a/bootstrap/lib/kernel/ebin/kernel.appup
+++ b/bootstrap/lib/kernel/ebin/kernel.appup
@@ -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.
@@ -16,11 +16,11 @@
%% limitations under the License.
%%
%% %CopyrightEnd%
-{"4.1.1",
+{"5.0",
%% Up from - max one major revision back
- [{<<"4\\.[0-1](\\.[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-1](\\.[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/bootstrap/lib/kernel/ebin/kernel_config.beam b/bootstrap/lib/kernel/ebin/kernel_config.beam
index 8691aff64a..8379f77e94 100644
--- a/bootstrap/lib/kernel/ebin/kernel_config.beam
+++ b/bootstrap/lib/kernel/ebin/kernel_config.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/net_kernel.beam b/bootstrap/lib/kernel/ebin/net_kernel.beam
index bd15759017..8afe1c0388 100644
--- a/bootstrap/lib/kernel/ebin/net_kernel.beam
+++ b/bootstrap/lib/kernel/ebin/net_kernel.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/ram_file.beam b/bootstrap/lib/kernel/ebin/ram_file.beam
index b119b3656c..2b14a4d28b 100644
--- a/bootstrap/lib/kernel/ebin/ram_file.beam
+++ b/bootstrap/lib/kernel/ebin/ram_file.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/rpc.beam b/bootstrap/lib/kernel/ebin/rpc.beam
index 4d1cbdb625..684d95afa0 100644
--- a/bootstrap/lib/kernel/ebin/rpc.beam
+++ b/bootstrap/lib/kernel/ebin/rpc.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/seq_trace.beam b/bootstrap/lib/kernel/ebin/seq_trace.beam
index 68d1b50f84..0155810ca7 100644
--- a/bootstrap/lib/kernel/ebin/seq_trace.beam
+++ b/bootstrap/lib/kernel/ebin/seq_trace.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/user_drv.beam b/bootstrap/lib/kernel/ebin/user_drv.beam
index e306b172bf..1d72927105 100644
--- a/bootstrap/lib/kernel/ebin/user_drv.beam
+++ b/bootstrap/lib/kernel/ebin/user_drv.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/include/dist.hrl b/bootstrap/lib/kernel/include/dist.hrl
index 47d9459a19..d6bccdf474 100644
--- a/bootstrap/lib/kernel/include/dist.hrl
+++ b/bootstrap/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/bootstrap/lib/kernel/include/dist_util.hrl b/bootstrap/lib/kernel/include/dist_util.hrl
index d5df2be4ec..43e50d4325 100644
--- a/bootstrap/lib/kernel/include/dist_util.hrl
+++ b/bootstrap/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/bootstrap/lib/kernel/include/inet.hrl b/bootstrap/lib/kernel/include/inet.hrl
index d983fa9e72..b39df8c3f2 100644
--- a/bootstrap/lib/kernel/include/inet.hrl
+++ b/bootstrap/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/bootstrap/lib/kernel/include/inet_sctp.hrl b/bootstrap/lib/kernel/include/inet_sctp.hrl
index d6376e452e..ddb3cdc26c 100644
--- a/bootstrap/lib/kernel/include/inet_sctp.hrl
+++ b/bootstrap/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/bootstrap/lib/kernel/include/net_address.hrl b/bootstrap/lib/kernel/include/net_address.hrl
index 9dd4b78cd4..4988175593 100644
--- a/bootstrap/lib/kernel/include/net_address.hrl
+++ b/bootstrap/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/bootstrap/lib/stdlib/ebin/array.beam b/bootstrap/lib/stdlib/ebin/array.beam
index 4ad8942b06..b7b808035a 100644
--- a/bootstrap/lib/stdlib/ebin/array.beam
+++ b/bootstrap/lib/stdlib/ebin/array.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/beam_lib.beam b/bootstrap/lib/stdlib/ebin/beam_lib.beam
index 8b987fd7f7..bdea71378f 100644
--- a/bootstrap/lib/stdlib/ebin/beam_lib.beam
+++ b/bootstrap/lib/stdlib/ebin/beam_lib.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/c.beam b/bootstrap/lib/stdlib/ebin/c.beam
index 133035102e..e1d964115d 100644
--- a/bootstrap/lib/stdlib/ebin/c.beam
+++ b/bootstrap/lib/stdlib/ebin/c.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/dets.beam b/bootstrap/lib/stdlib/ebin/dets.beam
index b255a4e10f..0dfaca7a48 100644
--- a/bootstrap/lib/stdlib/ebin/dets.beam
+++ b/bootstrap/lib/stdlib/ebin/dets.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/dets_server.beam b/bootstrap/lib/stdlib/ebin/dets_server.beam
index da999f3025..502eb98318 100644
--- a/bootstrap/lib/stdlib/ebin/dets_server.beam
+++ b/bootstrap/lib/stdlib/ebin/dets_server.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/dets_utils.beam b/bootstrap/lib/stdlib/ebin/dets_utils.beam
index ab627d50df..37247c7176 100644
--- a/bootstrap/lib/stdlib/ebin/dets_utils.beam
+++ b/bootstrap/lib/stdlib/ebin/dets_utils.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/dets_v9.beam b/bootstrap/lib/stdlib/ebin/dets_v9.beam
index 0b966769ba..f381b9b624 100644
--- a/bootstrap/lib/stdlib/ebin/dets_v9.beam
+++ b/bootstrap/lib/stdlib/ebin/dets_v9.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/dict.beam b/bootstrap/lib/stdlib/ebin/dict.beam
index 3b2b5a4c04..c91e90a0a9 100644
--- a/bootstrap/lib/stdlib/ebin/dict.beam
+++ b/bootstrap/lib/stdlib/ebin/dict.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/digraph_utils.beam b/bootstrap/lib/stdlib/ebin/digraph_utils.beam
index 9065fda936..80e91be663 100644
--- a/bootstrap/lib/stdlib/ebin/digraph_utils.beam
+++ b/bootstrap/lib/stdlib/ebin/digraph_utils.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/epp.beam b/bootstrap/lib/stdlib/ebin/epp.beam
index d19b427124..54909eeaa3 100644
--- a/bootstrap/lib/stdlib/ebin/epp.beam
+++ b/bootstrap/lib/stdlib/ebin/epp.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/erl_bits.beam b/bootstrap/lib/stdlib/ebin/erl_bits.beam
index af8619bac0..a5aec9de8b 100644
--- a/bootstrap/lib/stdlib/ebin/erl_bits.beam
+++ b/bootstrap/lib/stdlib/ebin/erl_bits.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/erl_compile.beam b/bootstrap/lib/stdlib/ebin/erl_compile.beam
index 82949da20a..2c02065f58 100644
--- a/bootstrap/lib/stdlib/ebin/erl_compile.beam
+++ b/bootstrap/lib/stdlib/ebin/erl_compile.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/erl_eval.beam b/bootstrap/lib/stdlib/ebin/erl_eval.beam
index b58781d3f8..d5bd46593c 100644
--- a/bootstrap/lib/stdlib/ebin/erl_eval.beam
+++ b/bootstrap/lib/stdlib/ebin/erl_eval.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/erl_expand_records.beam b/bootstrap/lib/stdlib/ebin/erl_expand_records.beam
index 617913c674..e8ce1fa0da 100644
--- a/bootstrap/lib/stdlib/ebin/erl_expand_records.beam
+++ b/bootstrap/lib/stdlib/ebin/erl_expand_records.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/erl_lint.beam b/bootstrap/lib/stdlib/ebin/erl_lint.beam
index 3a0681d1bf..ebe80a32a8 100644
--- a/bootstrap/lib/stdlib/ebin/erl_lint.beam
+++ b/bootstrap/lib/stdlib/ebin/erl_lint.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/erl_parse.beam b/bootstrap/lib/stdlib/ebin/erl_parse.beam
index f00eef7500..9b04739d58 100644
--- a/bootstrap/lib/stdlib/ebin/erl_parse.beam
+++ b/bootstrap/lib/stdlib/ebin/erl_parse.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/erl_pp.beam b/bootstrap/lib/stdlib/ebin/erl_pp.beam
index 4cc4884c92..b3343c9ccb 100644
--- a/bootstrap/lib/stdlib/ebin/erl_pp.beam
+++ b/bootstrap/lib/stdlib/ebin/erl_pp.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/erl_scan.beam b/bootstrap/lib/stdlib/ebin/erl_scan.beam
index 6c35d20c46..f33c5bd6f9 100644
--- a/bootstrap/lib/stdlib/ebin/erl_scan.beam
+++ b/bootstrap/lib/stdlib/ebin/erl_scan.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/erl_tar.beam b/bootstrap/lib/stdlib/ebin/erl_tar.beam
index 9bcbabc27c..d29dbf18fd 100644
--- a/bootstrap/lib/stdlib/ebin/erl_tar.beam
+++ b/bootstrap/lib/stdlib/ebin/erl_tar.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/escript.beam b/bootstrap/lib/stdlib/ebin/escript.beam
index c006d9a1ad..70ac06c476 100644
--- a/bootstrap/lib/stdlib/ebin/escript.beam
+++ b/bootstrap/lib/stdlib/ebin/escript.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/ets.beam b/bootstrap/lib/stdlib/ebin/ets.beam
index a15534b365..130d9df1b5 100644
--- a/bootstrap/lib/stdlib/ebin/ets.beam
+++ b/bootstrap/lib/stdlib/ebin/ets.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/eval_bits.beam b/bootstrap/lib/stdlib/ebin/eval_bits.beam
index be20e8c720..0529da7250 100644
--- a/bootstrap/lib/stdlib/ebin/eval_bits.beam
+++ b/bootstrap/lib/stdlib/ebin/eval_bits.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/file_sorter.beam b/bootstrap/lib/stdlib/ebin/file_sorter.beam
index 9286aea119..03d9020bb5 100644
--- a/bootstrap/lib/stdlib/ebin/file_sorter.beam
+++ b/bootstrap/lib/stdlib/ebin/file_sorter.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/filelib.beam b/bootstrap/lib/stdlib/ebin/filelib.beam
index 5ea27fdca6..904edee66f 100644
--- a/bootstrap/lib/stdlib/ebin/filelib.beam
+++ b/bootstrap/lib/stdlib/ebin/filelib.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/filename.beam b/bootstrap/lib/stdlib/ebin/filename.beam
index f1252b1e7e..c129ac4f97 100644
--- a/bootstrap/lib/stdlib/ebin/filename.beam
+++ b/bootstrap/lib/stdlib/ebin/filename.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/gen.beam b/bootstrap/lib/stdlib/ebin/gen.beam
index 586973a973..08735311fb 100644
--- a/bootstrap/lib/stdlib/ebin/gen.beam
+++ b/bootstrap/lib/stdlib/ebin/gen.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/gen_event.beam b/bootstrap/lib/stdlib/ebin/gen_event.beam
index 4788735049..b53ac26280 100644
--- a/bootstrap/lib/stdlib/ebin/gen_event.beam
+++ b/bootstrap/lib/stdlib/ebin/gen_event.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/gen_fsm.beam b/bootstrap/lib/stdlib/ebin/gen_fsm.beam
index f78a7368d5..595574585b 100644
--- a/bootstrap/lib/stdlib/ebin/gen_fsm.beam
+++ b/bootstrap/lib/stdlib/ebin/gen_fsm.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/gen_server.beam b/bootstrap/lib/stdlib/ebin/gen_server.beam
index 8ebe9d7a3a..3097207512 100644
--- a/bootstrap/lib/stdlib/ebin/gen_server.beam
+++ b/bootstrap/lib/stdlib/ebin/gen_server.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/gen_statem.beam b/bootstrap/lib/stdlib/ebin/gen_statem.beam
new file mode 100644
index 0000000000..3dc104f1c3
--- /dev/null
+++ b/bootstrap/lib/stdlib/ebin/gen_statem.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/io_lib_pretty.beam b/bootstrap/lib/stdlib/ebin/io_lib_pretty.beam
index 9d37b74ad3..8488125227 100644
--- a/bootstrap/lib/stdlib/ebin/io_lib_pretty.beam
+++ b/bootstrap/lib/stdlib/ebin/io_lib_pretty.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/lib.beam b/bootstrap/lib/stdlib/ebin/lib.beam
index 8e594d97ad..06ddba221a 100644
--- a/bootstrap/lib/stdlib/ebin/lib.beam
+++ b/bootstrap/lib/stdlib/ebin/lib.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/lists.beam b/bootstrap/lib/stdlib/ebin/lists.beam
index 91297311b2..22705c8a9a 100644
--- a/bootstrap/lib/stdlib/ebin/lists.beam
+++ b/bootstrap/lib/stdlib/ebin/lists.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/maps.beam b/bootstrap/lib/stdlib/ebin/maps.beam
index 7533b56554..5f041ab10f 100644
--- a/bootstrap/lib/stdlib/ebin/maps.beam
+++ b/bootstrap/lib/stdlib/ebin/maps.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/otp_internal.beam b/bootstrap/lib/stdlib/ebin/otp_internal.beam
index e834be6dca..ce8fc8a5c5 100644
--- a/bootstrap/lib/stdlib/ebin/otp_internal.beam
+++ b/bootstrap/lib/stdlib/ebin/otp_internal.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/proc_lib.beam b/bootstrap/lib/stdlib/ebin/proc_lib.beam
index 568015b3e4..d3249b120e 100644
--- a/bootstrap/lib/stdlib/ebin/proc_lib.beam
+++ b/bootstrap/lib/stdlib/ebin/proc_lib.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/qlc.beam b/bootstrap/lib/stdlib/ebin/qlc.beam
index 436b62e50e..fa3240810d 100644
--- a/bootstrap/lib/stdlib/ebin/qlc.beam
+++ b/bootstrap/lib/stdlib/ebin/qlc.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/qlc_pt.beam b/bootstrap/lib/stdlib/ebin/qlc_pt.beam
index 4032af0dd7..4a065ec57f 100644
--- a/bootstrap/lib/stdlib/ebin/qlc_pt.beam
+++ b/bootstrap/lib/stdlib/ebin/qlc_pt.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/queue.beam b/bootstrap/lib/stdlib/ebin/queue.beam
index 4365c5518d..a63a321330 100644
--- a/bootstrap/lib/stdlib/ebin/queue.beam
+++ b/bootstrap/lib/stdlib/ebin/queue.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/re.beam b/bootstrap/lib/stdlib/ebin/re.beam
index 7b2e736a21..c68d7cc82a 100644
--- a/bootstrap/lib/stdlib/ebin/re.beam
+++ b/bootstrap/lib/stdlib/ebin/re.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/shell.beam b/bootstrap/lib/stdlib/ebin/shell.beam
index 8e64036c90..b0c98f4b98 100644
--- a/bootstrap/lib/stdlib/ebin/shell.beam
+++ b/bootstrap/lib/stdlib/ebin/shell.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/sofs.beam b/bootstrap/lib/stdlib/ebin/sofs.beam
index 5514b0d4f9..5099d4ecc0 100644
--- a/bootstrap/lib/stdlib/ebin/sofs.beam
+++ b/bootstrap/lib/stdlib/ebin/sofs.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/stdlib.app b/bootstrap/lib/stdlib/ebin/stdlib.app
index 7287cbd451..4c8f196620 100644
--- a/bootstrap/lib/stdlib/ebin/stdlib.app
+++ b/bootstrap/lib/stdlib/ebin/stdlib.app
@@ -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.
@@ -20,7 +20,7 @@
%%
{application, stdlib,
[{description, "ERTS CXC 138 10"},
- {vsn, "2.7"},
+ {vsn, "3.0"},
{modules, [array,
base64,
beam_lib,
@@ -65,6 +65,7 @@
gen_event,
gen_fsm,
gen_server,
+ gen_statem,
io,
io_lib,
io_lib_format,
diff --git a/bootstrap/lib/stdlib/ebin/stdlib.appup b/bootstrap/lib/stdlib/ebin/stdlib.appup
index 8b0206f6be..737486d3c5 100644
--- a/bootstrap/lib/stdlib/ebin/stdlib.appup
+++ b/bootstrap/lib/stdlib/ebin/stdlib.appup
@@ -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.
@@ -16,11 +16,11 @@
%% limitations under the License.
%%
%% %CopyrightEnd%
-{"2.7",
+{"3.0",
%% Up from - max one major revision back
- [{<<"2\\.[5-7](\\.[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-7](\\.[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/bootstrap/lib/stdlib/ebin/supervisor.beam b/bootstrap/lib/stdlib/ebin/supervisor.beam
index e03a3264a6..d30b4a037b 100644
--- a/bootstrap/lib/stdlib/ebin/supervisor.beam
+++ b/bootstrap/lib/stdlib/ebin/supervisor.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/ebin/unicode.beam b/bootstrap/lib/stdlib/ebin/unicode.beam
index 17a318c4d4..1f5c92e369 100644
--- a/bootstrap/lib/stdlib/ebin/unicode.beam
+++ b/bootstrap/lib/stdlib/ebin/unicode.beam
Binary files differ
diff --git a/bootstrap/lib/stdlib/include/assert.hrl b/bootstrap/lib/stdlib/include/assert.hrl
index f913760102..9e5d4eb598 100644
--- a/bootstrap/lib/stdlib/include/assert.hrl
+++ b/bootstrap/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/bootstrap/lib/stdlib/include/erl_compile.hrl b/bootstrap/lib/stdlib/include/erl_compile.hrl
index c5fb491308..1c45613716 100644
--- a/bootstrap/lib/stdlib/include/erl_compile.hrl
+++ b/bootstrap/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/bootstrap/lib/stdlib/include/ms_transform.hrl b/bootstrap/lib/stdlib/include/ms_transform.hrl
index f8a2d35394..0d2c19fd4e 100644
--- a/bootstrap/lib/stdlib/include/ms_transform.hrl
+++ b/bootstrap/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/bootstrap/lib/stdlib/include/qlc.hrl b/bootstrap/lib/stdlib/include/qlc.hrl
index e3513314a0..60cd92aab0 100644
--- a/bootstrap/lib/stdlib/include/qlc.hrl
+++ b/bootstrap/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/bootstrap/lib/stdlib/include/zip.hrl b/bootstrap/lib/stdlib/include/zip.hrl
index 5f5abf9df3..2d0ee56f87 100644
--- a/bootstrap/lib/stdlib/include/zip.hrl
+++ b/bootstrap/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/configure.in b/configure.in
index 89486590b8..8a7f372a50 100644
--- a/configure.in
+++ b/configure.in
@@ -234,8 +234,8 @@ AS_HELP_STRING([--enable-native-libs],
[compile Erlang libraries to native code]))
AC_ARG_WITH(dynamic-trace,
-AS_HELP_STRING([--with-dynamic-trace={dtrace|systemtap}],
- [specify use of dynamic trace framework, dtrace or systemtap])
+AS_HELP_STRING([--with-dynamic-trace={dtrace|lttng|systemtap}],
+ [specify use of dynamic trace framework, dtrace, lttng or systemtap])
AS_HELP_STRING([--without-dynamic-trace],
[don't enable any dynamic tracing (default)]))
AC_ARG_ENABLE(vm-probes,
@@ -297,24 +297,6 @@ dnl *) erl_mandir='$(erlang_libdir)/man' ;;
dnl esac ], erl_mandir='$(erlang_libdir)/man')
dnl AC_SUBST(erl_mandir)
-AC_ARG_ENABLE(darwin-universal,
-AS_HELP_STRING([--enable-darwin-universal],
- [build universal binaries on darwin i386]),
-[ case "$enableval" in
- no) enable_darwin_universal=no ;;
- *) enable_darwin_univeral=yes ;;
- esac
-],enable_darwin_universal=no)
-
-
-AC_ARG_ENABLE(darwin-64bit,
-AS_HELP_STRING([--enable-darwin-64bit], [build 64bit binaries on darwin]),
-[ case "$enableval" in
- no) enable_darwin_64bit=no ;;
- *) enable_darwin_64bit=yes ;;
- esac
-],enable_darwin_64bit=no)
-
AC_ARG_ENABLE(m64-build,
AS_HELP_STRING([--enable-m64-build],
[build 64bit binaries using the -m64 flag to (g)cc]),
@@ -329,12 +311,7 @@ AS_HELP_STRING([--enable-m32-build],
[build 32bit binaries using the -m32 flag to (g)cc]),
[ case "$enableval" in
no) enable_m32_build=no ;;
- *)
- if test X${enable_darwin_64bit} = Xyes -o X${enable_m64_build} = Xyes;
- then
- AC_MSG_ERROR([(--enable-darwin-64bit or --enable-m64-build) and --enable-m32-build are mutually exclusive]) ;
- fi ;
- enable_m32_build=yes ;;
+ *) enable_m32_build=yes ;;
esac
],enable_m32_build=no)
@@ -342,42 +319,6 @@ AC_ARG_WITH(libatomic_ops,
AS_HELP_STRING([--with-libatomic_ops=PATH],
[specify and prefer usage of libatomic_ops in the ethread library]))
-dnl OK, we might have darwin switches off different kinds, lets
-dnl check it all before continuing.
-TMPSYS=`uname -s`-`uname -m`
-if test X${enable_darwin_universal} = Xyes; then
- if test X${enable_darwin_64bit} = Xyes; then
- AC_MSG_ERROR([--enable-darwin-universal and --enable-darwin-64bit mutually exclusive])
- fi
- enable_hipe=no
- CFLAGS="-arch i386 -arch ppc $CFLAGS"
- export CFLAGS
- LDFLAGS="-arch i386 -arch ppc $LDFLAGS"
- export LDFLAGS
-fi
-if test X${enable_darwin_64bit} = Xyes; then
- case "$TMPSYS" in
- Darwin-i386|Darwin-x86_64)
- ;;
- Darwin*)
- AC_MSG_ERROR([--enable-darwin-64bit only supported on x86 hosts])
- ;;
- *)
- AC_MSG_ERROR([--enable-darwin-64bit only supported on Darwin])
- ;;
- esac
- enable_hipe=no
- CFLAGS="-m64 $CFLAGS"
- export CFLAGS
- LDFLAGS="-m64 $LDFLAGS"
- export LDFLAGS
-elif test X"$TMPSYS" '=' X"Darwin-i386"; then
- CFLAGS="-m32 $CFLAGS"
- export CFLAGS
- LDFLAGS="-m32 $LDFLAGS"
- export LDFLAGS
-fi
-
m4_define(DEFAULT_SANITIZERS, [address,undefined])
AC_ARG_ENABLE(sanitizers,
AS_HELP_STRING(
diff --git a/erts/AUTHORS b/erts/AUTHORS
index d8746f65b2..5555502099 100644
--- a/erts/AUTHORS
+++ b/erts/AUTHORS
@@ -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/erts/Makefile.in b/erts/Makefile.in
index feed00dad5..3052dc3065 100644
--- a/erts/Makefile.in
+++ b/erts/Makefile.in
@@ -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/erts/aclocal.m4 b/erts/aclocal.m4
index 017fdbd589..86799186fd 100644
--- a/erts/aclocal.m4
+++ b/erts/aclocal.m4
@@ -1,7 +1,7 @@
dnl
dnl %CopyrightBegin%
dnl
-dnl Copyright Ericsson AB 1998-2015. All Rights Reserved.
+dnl Copyright Ericsson AB 1998-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/erts/autoconf/configure.vxworks b/erts/autoconf/configure.vxworks
index 96dd1f8401..a13e0a6c56 100755
--- a/erts/autoconf/configure.vxworks
+++ b/erts/autoconf/configure.vxworks
@@ -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/erts/autoconf/vxworks/sed.general b/erts/autoconf/vxworks/sed.general
index 5adee4db45..96a70e4148 100644
--- a/erts/autoconf/vxworks/sed.general
+++ b/erts/autoconf/vxworks/sed.general
@@ -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/erts/autoconf/vxworks/sed.vxworks_cpu32 b/erts/autoconf/vxworks/sed.vxworks_cpu32
index e3d54246ab..71663676e7 100644
--- a/erts/autoconf/vxworks/sed.vxworks_cpu32
+++ b/erts/autoconf/vxworks/sed.vxworks_cpu32
@@ -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/erts/autoconf/vxworks/sed.vxworks_ppc32 b/erts/autoconf/vxworks/sed.vxworks_ppc32
index 012760e127..2146e862fd 100644
--- a/erts/autoconf/vxworks/sed.vxworks_ppc32
+++ b/erts/autoconf/vxworks/sed.vxworks_ppc32
@@ -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/erts/autoconf/vxworks/sed.vxworks_ppc603 b/erts/autoconf/vxworks/sed.vxworks_ppc603
index 55af52571b..fca1ba76d9 100644
--- a/erts/autoconf/vxworks/sed.vxworks_ppc603
+++ b/erts/autoconf/vxworks/sed.vxworks_ppc603
@@ -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/erts/autoconf/vxworks/sed.vxworks_ppc603_nolongcall b/erts/autoconf/vxworks/sed.vxworks_ppc603_nolongcall
index e0c0891aeb..51c589d79a 100644
--- a/erts/autoconf/vxworks/sed.vxworks_ppc603_nolongcall
+++ b/erts/autoconf/vxworks/sed.vxworks_ppc603_nolongcall
@@ -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/erts/autoconf/vxworks/sed.vxworks_ppc860 b/erts/autoconf/vxworks/sed.vxworks_ppc860
index 8828339e34..485504e706 100644
--- a/erts/autoconf/vxworks/sed.vxworks_ppc860
+++ b/erts/autoconf/vxworks/sed.vxworks_ppc860
@@ -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/erts/autoconf/vxworks/sed.vxworks_simlinux b/erts/autoconf/vxworks/sed.vxworks_simlinux
index 950fb79ec5..10cd7bbb82 100644
--- a/erts/autoconf/vxworks/sed.vxworks_simlinux
+++ b/erts/autoconf/vxworks/sed.vxworks_simlinux
@@ -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/erts/autoconf/vxworks/sed.vxworks_simso b/erts/autoconf/vxworks/sed.vxworks_simso
index 6f2796f04e..cd30f8c2b2 100644
--- a/erts/autoconf/vxworks/sed.vxworks_simso
+++ b/erts/autoconf/vxworks/sed.vxworks_simso
@@ -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/erts/autoconf/vxworks/sed.vxworks_sparc b/erts/autoconf/vxworks/sed.vxworks_sparc
index e67c34af26..a3758423e8 100644
--- a/erts/autoconf/vxworks/sed.vxworks_sparc
+++ b/erts/autoconf/vxworks/sed.vxworks_sparc
@@ -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/erts/configure.in b/erts/configure.in
index ba735fe921..a34dfc6dbd 100644
--- a/erts/configure.in
+++ b/erts/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 1997-2015. 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.
@@ -62,9 +62,6 @@ if test x"${ERL_TOP}/erts" != x"$srcdir"; then
fi
erl_top=${ERL_TOP}
-# Remove old configuration information
-/bin/rm -f "$ERL_TOP/erts/CONF_INFO"
-
# echo XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
# echo X
# echo "X srcdir = $srcdir"
@@ -102,7 +99,7 @@ ERL_XCOMP_SYSROOT_INIT
AC_ISC_POSIX
-AC_CONFIG_HEADER($host/config.h:config.h.in include/internal/$host/ethread_header_config.h:include/internal/ethread_header_config.h.in include/$host/erl_int_sizes_config.h:include/erl_int_sizes_config.h.in include/$host/erl_native_features_config.h:include/erl_native_features_config.h.in)
+AC_CONFIG_HEADER($host/config.h:config.h.in include/internal/$host/ethread_header_config.h:include/internal/ethread_header_config.h.in include/$host/erl_int_sizes_config.h:include/erl_int_sizes_config.h.in)
dnl ----------------------------------------------------------------------
dnl Optional features.
dnl ----------------------------------------------------------------------
@@ -140,7 +137,7 @@ AS_HELP_STRING([--enable-dirty-schedulers], [enable dirty scheduler support]),
[ case "$enableval" in
no) enable_dirty_schedulers=no ;;
*) enable_dirty_schedulers=yes ;;
- esac ], enable_dirty_schedulers=no)
+ esac ], enable_dirty_schedulers=default)
AC_ARG_ENABLE(smp-support,
AS_HELP_STRING([--enable-smp-support], [enable smp support])
@@ -215,24 +212,6 @@ AS_HELP_STRING([--enable-fp-exceptions],
esac
],enable_fp_exceptions=auto)
-AC_ARG_ENABLE(darwin-universal,
-AS_HELP_STRING([--enable-darwin-universal],
- [build universal binaries on darwin i386]),
-[ case "$enableval" in
- no) enable_darwin_universal=no ;;
- *) enable_darwin_univeral=yes ;;
- esac
-],enable_darwin_universal=no)
-
-
-AC_ARG_ENABLE(darwin-64bit,
-AS_HELP_STRING([--enable-darwin-64bit], [build 64bit binaries on darwin]),
-[ case "$enableval" in
- no) enable_darwin_64bit=no ;;
- *) enable_darwin_64bit=yes ;;
- esac
-],enable_darwin_64bit=no)
-
AC_ARG_ENABLE(m64-build,
AS_HELP_STRING([--enable-m64-build],
[build 64bit binaries using the -m64 flag to (g)cc]),
@@ -247,18 +226,13 @@ AS_HELP_STRING([--enable-m32-build],
[build 32bit binaries using the -m32 flag to (g)cc]),
[ case "$enableval" in
no) enable_m32_build=no ;;
- *)
- if test X${enable_darwin_64bit} = Xyes -o X${enable_m64_build} = Xyes;
- then
- AC_MSG_ERROR([(--enable-darwin-64bit or --enable-m64-build) and --enable-m32-build are mutually exclusive]) ;
- fi ;
- enable_m32_build=yes ;;
+ *) enable_m32_build=yes ;;
esac
],enable_m32_build=no)
AC_ARG_WITH(dynamic-trace,
-AS_HELP_STRING([--with-dynamic-trace={dtrace|systemtap}],
- [specify use of dynamic trace framework, dtrace or systemtap])
+AS_HELP_STRING([--with-dynamic-trace={dtrace|lttng|systemtap}],
+ [specify use of dynamic trace framework, dtrace, lttng or systemtap])
AS_HELP_STRING([--without-dynamic-trace],
[don't enable any dynamic tracing (default)]))
@@ -268,6 +242,10 @@ fi
case "$with_dynamic_trace" in
no) DYNAMIC_TRACE_FRAMEWORK=;;
+ lttng)
+ AC_DEFINE(USE_LTTNG,[1],
+ [Define if you want to use lttng for dynamic tracing])
+ DYNAMIC_TRACE_FRAMEWORK=lttng;;
dtrace)
AC_DEFINE(USE_DTRACE,[1],
[Define if you want to use dtrace for dynamic tracing])
@@ -303,10 +281,12 @@ AS_HELP_STRING([--enable-vm-probes],
fi)
AC_SUBST(USE_VM_PROBES)
-if test X"$use_vm_probes" = X"yes"; then
- USE_VM_PROBES=yes
- AC_DEFINE(USE_VM_PROBES,[1],
- [Define to enable VM dynamic trace probes])
+if test X"$DYNAMIC_TRACE_FRAMEWORK" != X"lttng"; then
+ if test X"$use_vm_probes" = X"yes"; then
+ USE_VM_PROBES=yes
+ AC_DEFINE(USE_VM_PROBES,[1],
+ [Define to enable VM dynamic trace probes])
+ fi
fi
AC_ARG_WITH(assumed-cache-line-size,
@@ -377,42 +357,7 @@ AC_MSG_CHECKING([OTP version])
AC_MSG_RESULT([$OTP_VERSION])
AC_SUBST(OTP_VERSION)
-dnl OK, we might have darwin switches off different kinds, lets
-dnl check it all before continuing.
-TMPSYS=`uname -s`-`uname -m`
-if test X${enable_darwin_universal} = Xyes; then
- if test X${enable_darwin_64bit} = Xyes; then
- AC_MSG_ERROR([--enable-darwin-universal and --enable-darwin-64bit mutually exclusive])
- fi
- enable_hipe=no
- case $CFLAGS in
- *-arch\ ppc*)
- ;;
- *)
- CFLAGS="-arch ppc $CFLAGS"
- ;;
- esac
- case $CFLAGS in
- *-arch\ i386*)
- ;;
- *)
- CFLAGS="-arch i386 $CFLAGS"
- ;;
- esac
-fi
-if test X${enable_darwin_64bit} = Xyes; then
- case "$TMPSYS" in
- Darwin-i386|Darwin-x86_64)
- ;;
- Darwin*)
- AC_MSG_ERROR([--enable-darwin-64bit only supported on x86 hosts])
- ;;
- *)
- AC_MSG_ERROR([--enable-darwin-64bit only supported on Darwin])
- ;;
- esac
-fi
-if test X${enable_darwin_64bit} = Xyes -o X${enable_m64_build} = Xyes; then
+if test X${enable_m64_build} = Xyes; then
case $CFLAGS in
*-m64*)
;;
@@ -474,11 +419,8 @@ case $host_os in
win32)
# The ethread library requires _WIN32_WINNT of at least 0x0403.
# -D_WIN32_WINNT=* from CPPFLAGS is saved in ETHR_DEFS.
- CPPFLAGS="$CPPFLAGS -D_WIN32_WINNT=0x0501 -DWINVER=0x0501"
+ CPPFLAGS="$CPPFLAGS -D_WIN32_WINNT=0x0600 -DWINVER=0x0600"
;;
- darwin*)
- CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE"
- ;;
*)
;;
esac
@@ -584,6 +526,7 @@ fi
if test "x$GCC" = xyes; then
# Treat certain GCC warnings as errors
LM_TRY_ENABLE_CFLAG([-Werror=return-type], [WERRORFLAGS])
+ LM_TRY_ENABLE_CFLAG([-Werror=implicit], [WERRORFLAGS])
# until the emulator can handle this, I suggest we turn it off!
#WFLAGS="-Wall -Wshadow -Wcast-qual -Wmissing-declarations"
@@ -737,32 +680,13 @@ case $ARCH-$OPSYS in
esac
;;
*-darwin*)
- if test X${enable_darwin_universal} = Xyes; then
- AC_MSG_NOTICE([Adjusting LDFLAGS for universal binaries])
-
- case $LDFLAGS in
- *-arch\ ppc*)
- ;;
- *)
- LDFLAGS="-arch ppc $LDFLAGS"
- ;;
- esac
- case $LDFLAGS in
- *-arch\ i386*)
- ;;
- *)
- LDFLAGS="-arch i386 $LDFLAGS"
- ;;
- esac
- else
- case $LDFLAGS in
- *-m32*)
- ;;
- *)
- LDFLAGS="-m32 $LDFLAGS"
- ;;
- esac
- fi
+ case $LDFLAGS in
+ *-m32*)
+ ;;
+ *)
+ LDFLAGS="-m32 $LDFLAGS"
+ ;;
+ esac
;;
*)
if test X${enable_m64_build} = Xyes; then
@@ -802,8 +726,27 @@ esac
AC_SUBST(LIBCARBON)
-dnl Check if we should/can build a sharing-preserving emulator
+_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
+AC_PATH_PROG(MKDIR, mkdir, false, $_search_path)
+if test "$ac_cv_path_MKDIR" = false; then
+ AC_MSG_ERROR([No 'mkdir' command found])
+fi
+
+_search_path=
+
+
+# Remove old configuration information.
+# Next line should be placed after AC_PATH_PROG(RM, ...), but before
+# first output to CONN_INFO. So this is just the right place.
+$RM -f "$ERL_TOP/erts/CONF_INFO"
+
+dnl Check if we should/can build a sharing-preserving emulator
AC_MSG_CHECKING(if we are building a sharing-preserving emulator)
if test "$enable_sharing_preserving" = "yes"; then
AC_DEFINE(SHCOPY, [1],
@@ -833,27 +776,13 @@ if test "$ac_cv_prog_AR" = false; then
AC_MSG_ERROR([No 'ar' command found in PATH])
fi
-_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
-
-AC_PATH_PROG(MKDIR, mkdir, false, $_search_path)
-if test "$ac_cv_path_MKDIR" = false; then
- AC_MSG_ERROR([No 'mkdir' command found])
-fi
-
-_search_path=
-
#
# Get programs needed for building the documentation
#
## Delete previous failed configure results
if test -f doc/CONF_INFO; then
- rm doc/CONF_INFO
+ $RM doc/CONF_INFO
fi
AC_CHECK_PROGS(XSLTPROC, xsltproc)
@@ -1077,6 +1006,23 @@ case $ERTS_BUILD_SMP_EMU in
;;
esac
+AC_MSG_CHECKING(whether dirty schedulers should be enabled)
+case $ERTS_BUILD_SMP_EMU-$enable_dirty_schedulers in
+ yes-yes)
+ DIRTY_SCHEDULER_SUPPORT=yes;;
+ yes-default)
+ ## Maybe yes for OTP 19...
+ DIRTY_SCHEDULER_SUPPORT=no;;
+ no-default)
+ DIRTY_SCHEDULER_SUPPORT=no;;
+ no-yes)
+ AC_MSG_ERROR([No smp emulator will be built, but dirty schedulers requested]);;
+ *)
+ DIRTY_SCHEDULER_SUPPORT=no;;
+esac
+AC_MSG_RESULT($DIRTY_SCHEDULER_SUPPORT)
+AC_SUBST(DIRTY_SCHEDULER_SUPPORT)
+
if test $ERTS_BUILD_SMP_EMU = yes; then
if test $found_threads = no; then
@@ -1279,14 +1225,6 @@ esac
if test $emu_threads != yes; then
enable_lock_check=no
enable_lock_count=no
- AC_MSG_CHECKING(whether dirty schedulers should be enabled)
- if test "x$enable_dirty_schedulers" != "xno"; then
- AC_DEFINE(ERL_NIF_DIRTY_SCHEDULER_SUPPORT, 1, [Dirty scheduler support])
- AC_DEFINE(ERL_DRV_DIRTY_SCHEDULER_SUPPORT, 1, [Dirty scheduler support])
- AC_MSG_RESULT(yes)
- else
- AC_MSG_RESULT(no)
- fi
else
# Threads enabled for emulator
EMU_THR_LIB_NAME=$ETHR_LIB_NAME
@@ -1306,17 +1244,6 @@ else
EMU_THR_DEFS="$EMU_THR_DEFS -DERTS_ENABLE_LOCK_COUNT"
fi
- AC_MSG_CHECKING(whether dirty schedulers should be enabled)
- if test "x$enable_dirty_schedulers" != "xno"; then
- EMU_THR_DEFS="$EMU_THR_DEFS -DERTS_DIRTY_SCHEDULERS"
- AC_DEFINE(ERTS_DIRTY_SCHEDULERS, 1, [Define if the emulator supports dirty schedulers])
- AC_DEFINE(ERL_NIF_DIRTY_SCHEDULER_SUPPORT, 1, [Dirty scheduler support])
- AC_DEFINE(ERL_DRV_DIRTY_SCHEDULER_SUPPORT, 1, [Dirty scheduler support])
- AC_MSG_RESULT(yes)
- else
- AC_MSG_RESULT(no)
- fi
-
case $host_os in
linux*)
AC_MSG_CHECKING([whether dlopen() needs to be called before first call to dlerror()])
@@ -1625,7 +1552,7 @@ AC_CHECK_HEADERS(fcntl.h limits.h unistd.h syslog.h dlfcn.h ieeefp.h \
sys/ioctl.h sys/time.h sys/uio.h \
sys/socket.h sys/sockio.h sys/socketio.h \
net/errno.h malloc.h arpa/nameser.h libdlpi.h \
- pty.h util.h utmp.h langinfo.h poll.h sdkddkver.h)
+ pty.h util.h libutil.h utmp.h langinfo.h poll.h sdkddkver.h)
AC_CHECK_MEMBERS([struct ifreq.ifr_hwaddr], [], [],
[#ifdef __WIN32__
@@ -2809,44 +2736,6 @@ if test "$cross_compiling" != "yes" && test X${enable_hipe} != Xno; then
fi
fi
-case $ARCH-$OPSYS in
- amd64-darwin*|x86-darwin*)
- AC_MSG_CHECKING([For modern (leopard) style mcontext_t])
- AC_TRY_COMPILE([
- #include <stdlib.h>
- #include <sys/types.h>
- #include <unistd.h>
- #include <mach/mach.h>
- #include <pthread.h>
- #include <machine/signal.h>
- #include <ucontext.h>
- ],[
- #if defined(__APPLE__) && defined(__MACH__) && !defined(__DARWIN__)
- #define __DARWIN__ 1
- #endif
-
- #ifndef __DARWIN__
- #error inpossible
- #else
-
- mcontext_t mc = NULL;
- int x = mc->__fs.__fpu_mxcsr;
-
- #endif
- ],darwin_mcontext_leopard=yes,
- darwin_mcontext_leopard=no)
- if test X"$darwin_mcontext_leopard" = X"yes"; then
- AC_DEFINE(DARWIN_MODERN_MCONTEXT,[],[Modern style mcontext_t in MacOSX])
- AC_MSG_RESULT(yes)
- else
- AC_MSG_RESULT(no)
- fi
- ;;
- *)
- darwin_mcontext_leopard=no
- ;;
-esac
-
if test X${enable_fp_exceptions} = Xauto ; then
case $host_os in
*linux*)
@@ -3462,6 +3351,13 @@ if test X${enable_hipe} = Xyes; then
AC_DEFINE(HIPE,[1],[Define to enable HiPE])
HIPE_HELPERS="xmerl syntax_tools edoc"
ENABLE_ALLOC_TYPE_VARS="$ENABLE_ALLOC_TYPE_VARS hipe"
+ case "$ARCH" in
+ amd64)
+ # For now exec_alloc is only used for hipe on amd64
+ AC_MSG_NOTICE([Enable exec_alloc for hipe code allocation])
+ ENABLE_ALLOC_TYPE_VARS="$ENABLE_ALLOC_TYPE_VARS exec_alloc"
+ ;;
+ esac
fi
fi
AC_SUBST(HIPE_HELPERS)
@@ -3787,14 +3683,8 @@ case $host_os in
DED_LDFLAGS="-m64 $DED_LDFLAGS"
;;
*)
- if test X${enable_darwin_universal} != Xyes; then
- DED_LDFLAGS="-m32 $DED_LDFLAGS"
- fi
;;
esac
- if test X${enable_darwin_universal} = Xyes; then
- DED_LDFLAGS="-arch ppc -arch i386 $DED_LDFLAGS"
- fi
DED_LD="$CC"
DED_LD_FLAG_RUNTIME_LIBRARY_PATH="$CFLAG_RUNTIME_LIBRARY_PATH"
;;
@@ -3879,14 +3769,20 @@ dnl
LM_FIND_EMU_CC
dnl
-dnl DTrace
+dnl DTrace & LTTNG
dnl
case $DYNAMIC_TRACE_FRAMEWORK in
dtrace|systemtap)
AC_CHECK_TOOL(DTRACE, dtrace, none)
test "$DTRACE" = "none" && AC_MSG_ERROR([No dtrace utility found.]);
+ enable_lttng_test=no
enable_dtrace_test=yes;;
- *) enable_dtrace_test=no;;
+ lttng)
+ enable_lttng_test=yes
+ enable_dtrace_test=no;;
+ *)
+ enable_lttng_test=no
+ enable_dtrace_test=no;;
esac
AC_SUBST(DTRACE)
@@ -3927,7 +3823,7 @@ if test "$enable_dtrace_test" = "yes" ; then
[$RM -f $DTRACE_2STEP_TEST
dtrace -G $DTRACE_CPP $DTRACE_BITS_FLAG -Iemulator/beam -o $DTRACE_2STEP_TEST -s emulator/beam/erlang_dtrace.d conftest.$OBJEXT 2>&AS_MESSAGE_LOG_FD
if test -f $DTRACE_2STEP_TEST; then
- rm $DTRACE_2STEP_TEST
+ $RM $DTRACE_2STEP_TEST
DTRACE_ENABLED_2STEP=yes
fi],
[])
@@ -3953,6 +3849,37 @@ if test "$enable_dtrace_test" = "yes" ; then
fi
fi
+if test "$enable_lttng_test" = "yes" ; then
+ AC_CHECK_HEADERS(lttng/tracepoint.h)
+ AC_CHECK_HEADERS(lttng/tracepoint-event.h)
+ dnl The macro tracepoint_enabled is not present in older lttng versions
+ dnl checking for tracepoint_enabled
+ AC_MSG_CHECKING([for tracepoint_enabled in lttng/tracepoint.h])
+ AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [#include <lttng/tracepoint.h>
+ #define TRACEPOINT_PROVIDER com_ericsson_otp
+ TRACEPOINT_EVENT(
+ com_ericsson_otp,
+ dummy,
+ TP_ARGS(int, my_int),
+ TP_FIELDS(ctf_integer(int, my_int, my_int)))
+ #define TRACEPOINT_CREATE_PROBES
+ #define TRACEPOINT_DEFINE],
+ [if(tracepoint_enabled(com_ericsson_otp,dummy)) do {} while(0)])],
+ [AC_MSG_RESULT([yes])],
+ [AC_MSG_ERROR([no (available in lttng-ust v2.7)])])
+ if test "x$ac_cv_header_lttng_tracepoint_h" = "xyes" \
+ -a "x$ac_cv_header_lttng_tracepoint_event_h" = "xyes"; then
+ # No straight forward way to test for liblttng-ust when no public symbol exists,
+ # just add the lib.
+ LIBS="$LIBS -llttng-ust -ldl"
+ else
+ AC_MSG_ERROR([No LTTng support found.])
+ fi
+fi
+
+
dnl
dnl SSL, SSH and CRYPTO need the OpenSSL libraries
dnl
@@ -4103,7 +4030,7 @@ ssl_done=yes # Default only one run
# Remove all SKIP files from previous runs
for a in ssl crypto ssh; do
- /bin/rm -f $ERL_TOP/lib/$a/SKIP
+ $RM -f $ERL_TOP/lib/$a/SKIP
done
SSL_DYNAMIC_ONLY=$enable_dynamic_ssl
@@ -4700,7 +4627,7 @@ need_java="jinterface ic/java_src"
# Remove all SKIP files from previous runs
for a in $need_java ; do
- /bin/rm -f $ERL_TOP/lib/$a/SKIP
+ $RM -f $ERL_TOP/lib/$a/SKIP
done
if test "X$with_javac" = "Xno"; then
@@ -4751,7 +4678,7 @@ dnl this deliberately does not believe that 'gcc' is a C++ compiler
AC_CHECK_TOOLS(CXX, [$CCC c++ g++ CC cxx cc++ cl], false)
# Remove SKIP file from previous run
-/bin/rm -f $ERL_TOP/lib/orber/SKIP
+$RM -f $ERL_TOP/lib/orber/SKIP
if test "$CXX" = false; then
echo "No C++ compiler found" > $ERL_TOP/lib/orber/SKIP
diff --git a/erts/doc/Makefile b/erts/doc/Makefile
index d415e544f3..f26a43592e 100644
--- a/erts/doc/Makefile
+++ b/erts/doc/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/erts/doc/src/Makefile b/erts/doc/src/Makefile
index 83f4c58560..b96cbbce40 100644
--- a/erts/doc/src/Makefile
+++ b/erts/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.
@@ -50,12 +50,14 @@ XML_REF1_FILES = epmd.xml \
XML_REF3_EFILES = \
erl_prim_loader.xml \
erlang.xml \
+ erl_tracer.xml \
init.xml \
zlib.xml
XML_REF3_FILES = \
driver_entry.xml \
erl_nif.xml \
+ erl_tracer.xml \
erl_driver.xml \
erl_prim_loader.xml \
erlang.xml \
@@ -154,18 +156,9 @@ clean:
rm -f $(SPECDIR)/*
rm -f errs core *~
-$(SPECDIR)/specs_driver_entry.xml:
+$(SPECDIR)/specs_%.xml:
escript $(SPECS_EXTRACTOR) $(SPECS_FLAGS) \
- -o$(dir $@) -module driver_entry
-$(SPECDIR)/specs_erl_nif.xml:
- escript $(SPECS_EXTRACTOR) $(SPECS_FLAGS) \
- -o$(dir $@) -module erl_nif
-$(SPECDIR)/specs_erl_driver.xml:
- escript $(SPECS_EXTRACTOR) $(SPECS_FLAGS) \
- -o$(dir $@) -module erl_driver
-$(SPECDIR)/specs_erts_alloc.xml:
- escript $(SPECS_EXTRACTOR) $(SPECS_FLAGS) \
- -o$(dir $@) -module erts_alloc
+ -o$(dir $@) -module $(patsubst $(SPECDIR)/specs_%.xml,%,$@)
# ----------------------------------------------------
# Release Target
diff --git a/erts/doc/src/absform.xml b/erts/doc/src/absform.xml
index ccdecf44ec..bfabb7f042 100644
--- a/erts/doc/src/absform.xml
+++ b/erts/doc/src/absform.xml
@@ -68,22 +68,12 @@
<item>If D is a module declaration consisting of the forms
<c>F_1</c>, ..., <c>F_k</c>, then
Rep(D) = <c>[Rep(F_1), ..., Rep(F_k)]</c>.</item>
- <item>If F is an attribute <c>-behavior(Behavior)</c>, then
- Rep(F) = <c>{attribute,LINE,behavior,Behavior}</c>.</item>
- <item>If F is an attribute <c>-behaviour(Behaviour)</c>, then
- Rep(F) = <c>{attribute,LINE,behaviour,Behaviour}</c>.</item>
- <item>If F is an attribute <c>-compile(Options)</c>, then
- Rep(F) = <c>{attribute,LINE,compile,Options}</c>.</item>
<item>If F is an attribute <c>-export([Fun_1/A_1, ..., Fun_k/A_k])</c>, then
Rep(F) = <c>{attribute,LINE,export,[{Fun_1,A_1}, ..., {Fun_k,A_k}]}</c>.</item>
- <item>If F is an attribute <c>-export_type([Type_1/A_1, ..., Type_k/A_k])</c>, then
- Rep(F) = <c>{attribute,LINE,export_type,[{Type_1,A_1}, ..., {Type_k,A_k}]}</c>.</item>
<item>If F is an attribute <c>-import(Mod,[Fun_1/A_1, ..., Fun_k/A_k])</c>, then
Rep(F) = <c>{attribute,LINE,import,{Mod,[{Fun_1,A_1}, ..., {Fun_k,A_k}]}}</c>.</item>
<item>If F is an attribute <c>-module(Mod)</c>, then
Rep(F) = <c>{attribute,LINE,module,Mod}</c>.</item>
- <item>If F is an attribute <c>-optional_callbacks([Fun_1/A_1, ..., Fun_k/A_k])</c>, then
- Rep(F) = <c>{attribute,LINE,optional_callbacks,[{Fun_1,A_1}, ..., {Fun_k,A_k}]}</c>.</item>
<item>If F is an attribute <c>-file(File,Line)</c>, then
Rep(F) = <c>{attribute,LINE,file,{File,Line}}</c>.</item>
<item>If F is a function declaration
@@ -182,7 +172,7 @@
<p>Individual patterns are represented as follows:</p>
<list type="bulleted">
<item>If P is an atomic literal <c>L</c>, then Rep(P) = Rep(L).</item>
- <item>If P is a binary pattern
+ <item>If P is a bit string pattern
<c>&lt;&lt;P_1:Size_1/TSL_1, ..., P_k:Size_k/TSL_k>></c>, where each
<c>Size_i</c> is an expression that can be evaluated to an integer
and each <c>TSL_i</c> is a type specificer list, then
@@ -241,12 +231,13 @@
<p>An expression E is one of the following alternatives:</p>
<list type="bulleted">
<item>If E is an atomic literal <c>L</c>, then Rep(E) = Rep(L).</item>
- <item>If E is a binary comprehension
+ <item>If E is a bit string comprehension
<c>&lt;&lt;E_0 || Q_1, ..., Q_k>></c>,
where each <c>Q_i</c> is a qualifier, then
Rep(E) = <c>{bc,LINE,Rep(E_0),[Rep(Q_1), ..., Rep(Q_k)]}</c>.
For Rep(Q), see below.</item>
- <item>If E is a binary constructor <c>&lt;&lt;E_1:Size_1/TSL_1, ..., E_k:Size_k/TSL_k>></c>,
+ <item>If E is a bit string constructor
+ <c>&lt;&lt;E_1:Size_1/TSL_1, ..., E_k:Size_k/TSL_k>></c>,
where each <c>Size_i</c> is an expression and each
<c>TSL_i</c> is a type specificer list, then Rep(E) =
<c>{bin,LINE,[{bin_element,LINE,Rep(E_1),Rep(Size_1),Rep(TSL_1)}, ..., {bin_element,LINE,Rep(E_k),Rep(Size_k),Rep(TSL_k)}]}</c>.
@@ -386,16 +377,17 @@
<item>If Q is a generator <c>P &lt;- E</c>, where <c>P</c> is
a pattern and <c>E</c> is an expression, then
Rep(Q) = <c>{generate,LINE,Rep(P),Rep(E)}</c>.</item>
- <item>If Q is a generator <c>P &lt;= E</c>, where <c>P</c> is
+ <item>If Q is a bit string generator
+ <c>P &lt;= E</c>, where <c>P</c> is
a pattern and <c>E</c> is an expression, then
Rep(Q) = <c>{b_generate,LINE,Rep(P),Rep(E)}</c>.</item>
</list>
</section>
<section>
- <title>Binary Element Type Specifiers</title>
- <p>A type specifier list TSL for a binary element is a sequence of type
- specifiers <c>TS_1 - ... - TS_k</c>, and
+ <title>Bit String Element Type Specifiers</title>
+ <p>A type specifier list TSL for a bit string element is a sequence
+ of type specifiers <c>TS_1 - ... - TS_k</c>, and
Rep(TSL) = <c>[Rep(TS_1), ..., Rep(TS_k)]</c>.</p>
<list type="bulleted">
<item>If TS is a type specifier <c>A</c>, where <c>A</c> is an atom,
@@ -473,7 +465,7 @@
<p>A guard test <c>Gt</c> is one of the following alternatives:</p>
<list type="bulleted">
<item>If Gt is an atomic literal <c>L</c>, then Rep(Gt) = Rep(L).</item>
- <item>If Gt is a binary constructor
+ <item>If Gt is a bit string constructor
<c>&lt;&lt;Gt_1:Size_1/TSL_1, ..., Gt_k:Size_k/TSL_k>></c>,
where each <c>Size_i</c> is a guard test and each
<c>TSL_i</c> is a type specificer list, then
@@ -540,7 +532,7 @@
<c>{ann_type,LINE,[Rep(A),Rep(T_0)]}</c>.</item>
<item>If T is an atom or integer literal L, then Rep(T) = Rep(L).
</item>
- <item>If T is a bitstring type <c>&lt;&lt;_:M,_:_*N>></c>,
+ <item>If T is a bit string type <c>&lt;&lt;_:M,_:_*N>></c>,
where <c>M</c> and <c>N</c> are singleton integer types, then Rep(T) =
<c>{type,LINE,binary,[Rep(M),Rep(N)]}</c>.</item>
<item>If T is the empty list type <c>[]</c>, then Rep(T) =
@@ -634,6 +626,9 @@
<item>If A is an association type <c>K => V</c>, where
<c>K</c> and <c>V</c> are types, then Rep(A) =
<c>{type,LINE,map_field_assoc,[Rep(K),Rep(V)]}</c>.</item>
+ <item>If A is an association type <c>K := V</c>, where
+ <c>K</c> and <c>V</c> are types, then Rep(A) =
+ <c>{type,LINE,map_field_exact,[Rep(K),Rep(V)]}</c>.</item>
</list>
</section>
diff --git a/erts/doc/src/alt_dist.xml b/erts/doc/src/alt_dist.xml
index 2263302707..e283acc1b4 100644
--- a/erts/doc/src/alt_dist.xml
+++ b/erts/doc/src/alt_dist.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/erts/doc/src/book.xml b/erts/doc/src/book.xml
index 12eda03ee5..a0780c91d9 100644
--- a/erts/doc/src/book.xml
+++ b/erts/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/erts/doc/src/communication.xml b/erts/doc/src/communication.xml
index 3deea3e4af..1eb05310e9 100644
--- a/erts/doc/src/communication.xml
+++ b/erts/doc/src/communication.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>
diff --git a/erts/doc/src/crash_dump.xml b/erts/doc/src/crash_dump.xml
index 61c9159823..0b827ae583 100644
--- a/erts/doc/src/crash_dump.xml
+++ b/erts/doc/src/crash_dump.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/erts/doc/src/driver.xml b/erts/doc/src/driver.xml
index a68e87d3b3..4bef5e1388 100644
--- a/erts/doc/src/driver.xml
+++ b/erts/doc/src/driver.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/erts/doc/src/epmd.xml b/erts/doc/src/epmd.xml
index 28fcc8f7af..d9f580d081 100644
--- a/erts/doc/src/epmd.xml
+++ b/erts/doc/src/epmd.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>
@@ -37,7 +37,7 @@
<comsummary>
<p>Erlang Port Mapper Daemon</p>
<taglist>
- <tag><c><![CDATA[epmd [-d|-debug] [DbgExtra...] [-port No] [-daemon] [-relaxed_command_check]]]></c></tag>
+ <tag><c><![CDATA[epmd [-d|-debug] [DbgExtra...] [-address Addresses] [-port No] [-daemon] [-relaxed_command_check]]]></c></tag>
<item>
<p>Starts the port mapper daemon</p>
</item>
diff --git a/erts/doc/src/erl.xml b/erts/doc/src/erl.xml
index 1c4a0056a7..1bbde7f1e0 100644
--- a/erts/doc/src/erl.xml
+++ b/erts/doc/src/erl.xml
@@ -4,7 +4,7 @@
<comref>
<header>
<copyright>
- <year>1996</year><year>2015</year>
+ <year>1996</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -387,6 +387,28 @@
<p>Replaces the path specified in the boot script. See
<seealso marker="sasl:script">script(4)</seealso>.</p>
</item>
+ <tag><c><![CDATA[-proto_dist Proto]]></c></tag>
+ <item>
+ <p>Specify a protocol for Erlang distribution.</p>
+ <taglist>
+ <tag><c>inet_tcp</c></tag>
+ <item>
+ <p>TCP over IPv4 (the default)</p>
+ </item>
+ <tag><c>inet_tls</c></tag>
+ <item>
+ <p>distribution over TLS/SSL</p>
+ </item>
+ <tag><c>inet6_tcp</c></tag>
+ <item>
+ <p>TCP over IPv6</p>
+ </item>
+ </taglist>
+ <p>For example, to start up IPv6 distributed nodes:</p>
+<pre>
+% <input>erl -name [email protected] -proto_dist inet6_tcp</input>
+</pre>
+ </item>
<tag><c><![CDATA[-remsh Node]]></c></tag>
<item>
<p>Starts Erlang with a remote shell connected to <c><![CDATA[Node]]></c>.</p>
@@ -605,11 +627,48 @@
<p>Sets the default binary virtual heap size of processes to the size
<c><![CDATA[Size]]></c>.</p>
</item>
+ <marker id="+hmax"/>
+ <tag><c><![CDATA[+hmax Size]]></c></tag>
+ <item>
+ <p>Sets the default maximum heap size of processes to the size
+ <c><![CDATA[Size]]></c>. If <c>+hmax</c> is not given, the default is <c>0</c>
+ which means that no maximum heap size is used.
+ For more information, see the documentation of
+ <seealso marker="erlang#process_flag_max_heap_size">
+ <c>process_flag(max_heap_size, MaxHeapSize)</c></seealso>.</p>
+ </item>
+ <marker id="+hmaxel"/>
+ <tag><c><![CDATA[+hmaxel true|false]]></c></tag>
+ <item>
+ <p>Sets whether to send an error logger message for processes that reach
+ the maximum heap size or not. If <c>+hmaxel</c> is not given, the default is <c>true</c>.
+ For more information, see the documentation of
+ <seealso marker="erlang#process_flag_max_heap_size">
+ <c>process_flag(max_heap_size, MaxHeapSize)</c></seealso>.</p>
+ </item>
+ <marker id="+hmaxk"/>
+ <tag><c><![CDATA[+hmaxk true|false]]></c></tag>
+ <item>
+ <p>Sets whether to kill processes that reach the maximum heap size or not. If
+ <c>+hmaxk</c> is not given, the default is <c>true</c>. For more information,
+ see the documentation of
+ <seealso marker="erlang#process_flag_max_heap_size">
+ <c>process_flag(max_heap_size, MaxHeapSize)</c></seealso>.</p>
+ </item>
<tag><c><![CDATA[+hpds Size]]></c></tag>
<item>
<p>Sets the initial process dictionary size of processes to the size
<c><![CDATA[Size]]></c>.</p>
</item>
+ <tag><marker id="+hmqd"><c>+hmqd off_heap|on_heap|mixed</c></marker></tag>
+ <item><p>
+ Sets the default value for the process flag
+ <c>message_queue_data</c>. If <c>+hmqd</c> is not
+ passed, <c>mixed</c> will be the default. For more information,
+ see the documentation of
+ <seealso marker="erlang#process_flag_message_queue_data"><c>process_flag(message_queue_data,
+ MQD)</c></seealso>.
+ </p></item>
<tag><c><![CDATA[+K true | false]]></c></tag>
<item>
<p>Enables or disables the kernel poll functionality if
@@ -1339,21 +1398,6 @@
<seealso marker="kernel:error_logger#warning_map/0">error_logger(3)</seealso>
for further information.</p>
</item>
- <tag><c><![CDATA[+xFlag Value]]></c></tag>
- <item>
- <p>Default process flag settings.</p>
- <taglist>
- <tag><marker id="+xmqd"><c>+xmqd off_heap|on_heap|mixed</c></marker></tag>
- <item><p>
- Sets the default value for the process flag
- <c>message_queue_data</c>. If <c>+xmqd</c> is not
- passed, <c>mixed</c> will be the default. For more information,
- see the documentation of
- <seealso marker="erlang#process_flag_message_queue_data"><c>process_flag(message_queue_data,
- MQD)</c></seealso>.
- </p></item>
- </taglist>
- </item>
<tag><c><![CDATA[+zFlag Value]]></c></tag>
<item>
<p>Miscellaneous flags.</p>
diff --git a/erts/doc/src/erl_dist_protocol.xml b/erts/doc/src/erl_dist_protocol.xml
index b435d5c9b4..f9fa981d9a 100644
--- a/erts/doc/src/erl_dist_protocol.xml
+++ b/erts/doc/src/erl_dist_protocol.xml
@@ -364,14 +364,14 @@ If Result > 0, the packet only consists of [119, Result].
NodeInfo is, as expressed in Erlang:
</p>
<code>
- io:format("active name ~ts at port ~p, fd = ~p ~n",
+ io:format("active name ~ts at port ~p, fd = ~p~n",
[NodeName, Port, Fd]).
</code>
<p>
or
</p>
<code>
- io:format("old/unused name ~ts at port ~p, fd = ~p~n",
+ io:format("old/unused name ~ts at port ~p, fd = ~p ~n",
[NodeName, Port, Fd]).
</code>
diff --git a/erts/doc/src/erl_driver.xml b/erts/doc/src/erl_driver.xml
index 241d4131d5..175b7f6bfb 100644
--- a/erts/doc/src/erl_driver.xml
+++ b/erts/doc/src/erl_driver.xml
@@ -4,7 +4,7 @@
<cref>
<header>
<copyright>
- <year>2001</year><year>2015</year>
+ <year>2001</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/erts/doc/src/erl_nif.xml b/erts/doc/src/erl_nif.xml
index be0e406b9c..33a4fee182 100644
--- a/erts/doc/src/erl_nif.xml
+++ b/erts/doc/src/erl_nif.xml
@@ -4,7 +4,7 @@
<cref>
<header>
<copyright>
- <year>2001</year><year>2015</year>
+ <year>2001</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -138,29 +138,6 @@ ok
automatically unloaded when the module code that it belongs to is purged
by the code server.</p>
- <p><marker id="lengthy_work"/>
- As mentioned in the <seealso marker="#WARNING">warning</seealso> text at
- the beginning of this document it is of vital importance that a native function
- return relatively quickly. It is hard to give an exact maximum amount
- of time that a native function is allowed to work, but as a rule of thumb
- a well-behaving native function should return to its caller before a
- millisecond has passed. This can be achieved using different approaches.
- If you have full control over the code to execute in the native
- function, the best approach is to divide the work into multiple chunks of
- work and call the native function multiple times, either directly from Erlang code
- or by having a native function schedule a future NIF call via the
- <seealso marker="#enif_schedule_nif"> enif_schedule_nif</seealso> function. Function
- <seealso marker="#enif_consume_timeslice">enif_consume_timeslice</seealso> can be
- used to help with such work division. In some cases, however, this might not
- be possible, e.g. when calling third-party libraries. Then you typically want
- to dispatch the work to another thread, return
- from the native function, and wait for the result. The thread can send
- the result back to the calling thread using message passing. Information
- about thread primitives can be found below. If you have built your system
- with <em>the currently experimental</em> support for dirty schedulers,
- you may want to try out this functionality by dispatching the work to a
- <seealso marker="#dirty_nifs">dirty NIF</seealso>,
- which does not have the same duration restriction as a normal NIF.</p>
</description>
<section>
<title>FUNCTIONALITY</title>
@@ -328,38 +305,161 @@ ok
</list></p>
</item>
- <tag>Long-running NIFs</tag>
- <item><p><marker id="dirty_nifs"/>Native functions
- <seealso marker="#lengthy_work">
- must normally run quickly</seealso>, as explained earlier in this document. They
- generally should execute for no more than a millisecond. But not all native functions
- can execute so quickly; for example, functions that encrypt large blocks of data or
- perform lengthy file system operations can often run for tens of seconds or more.</p>
- <p>If the functionality of a long-running NIF can be split so that its work can be
- achieved through a series of shorter NIF calls, the application can either make that series
- of NIF calls from the Erlang level, or it can call a NIF that first performs a chunk of the
- work, then invokes the <seealso marker="#enif_schedule_nif">enif_schedule_nif</seealso>
- function to schedule another NIF call to perform the next chunk. The final call scheduled
- in this manner can then return the overall result. Breaking up a long-running function in
- this manner enables the VM to regain control between calls to the NIFs, thereby avoiding
- degraded responsiveness, scheduler load balancing problems, and other strange behaviours.</p>
- <p>A NIF that cannot be split and cannot execute in a millisecond or less is called a "dirty NIF"
- because it performs work that the Erlang runtime cannot handle cleanly.
- <em>Note that the dirty NIF functionality described here is experimental</em> and that you have to
- enable support for dirty schedulers when building OTP in order to try the functionality out.
- Applications that make use of such functions must indicate to the runtime that the functions are
- dirty so they can be handled specially. To schedule a dirty NIF for execution, the
- appropriate flags value can be set for the NIF in its <seealso marker="#ErlNifFunc">ErlNifFunc</seealso>
- entry, or the application can call <seealso marker="#enif_schedule_nif">enif_schedule_nif</seealso>,
- passing to it a pointer to the dirty NIF to be executed and indicating with the <c>flags</c>
- argument whether it expects the operation to be CPU-bound or I/O-bound.</p>
- <note><p>Dirty NIF support is available only when the emulator is configured with dirty
- schedulers enabled. This feature is currently disabled by default. To determine whether
- the dirty NIF API is available, native code can check to see if the C preprocessor macro
- <c>ERL_NIF_DIRTY_SCHEDULER_SUPPORT</c> is defined. Also, if the Erlang runtime was built
- without threading support, dirty schedulers are disabled. To check at runtime for the presence
- of dirty scheduler threads, code can use the <seealso marker="#enif_system_info"><c>
- enif_system_info()</c></seealso> API function.</p></note>
+ <tag><marker id="lengthy_work"/>Long-running NIFs</tag>
+
+ <item><p>
+ As mentioned in the <seealso marker="#WARNING">warning</seealso> text at
+ the beginning of this document it is of <em>vital importance</em> that a
+ native function return relatively quickly. It is hard to give an exact
+ maximum amount of time that a native function is allowed to work, but as a
+ rule of thumb a well-behaving native function should return to its caller
+ before a millisecond has passed. This can be achieved using different
+ approaches. If you have full control over the code to execute in the
+ native function, the best approach is to divide the work into multiple
+ chunks of work and call the native function multiple times. In some
+ cases this might however not always be possible, e.g. when calling
+ third-party libraries.</p>
+
+ <p>The
+ <seealso marker="#enif_consume_timeslice">enif_consume_timeslice()</seealso>
+ function can be used to inform the runtime system about the lenght of the
+ NIF call. It should typically always be used unless the NIF executes very
+ quickly.</p>
+
+ <p>If the NIF call is too lenghty one needs to handle this in one of the
+ following ways in order to avoid degraded responsiveness, scheduler load
+ balancing problems, and other strange behaviours:</p>
+
+ <taglist>
+ <tag>Yielding NIF</tag>
+ <item>
+ <p>
+ If the functionality of a long-running NIF can be split so that
+ its work can be achieved through a series of shorter NIF calls,
+ the application can either make that series of NIF calls from the
+ Erlang level, or it can call a NIF that first performs a chunk of
+ the work, then invokes the
+ <seealso marker="#enif_schedule_nif">enif_schedule_nif</seealso>
+ function to schedule another NIF call to perform the next chunk.
+ The final call scheduled in this manner can then return the
+ overall result. Breaking up a long-running function in
+ this manner enables the VM to regain control between calls to the
+ NIFs.
+ </p>
+ <p>
+ This approach is always preferred over the other alternatives
+ described below. This both from a performance perspective and
+ a system characteristics perspective.
+ </p>
+ </item>
+
+ <tag>Threaded NIF</tag>
+ <item>
+ <p>
+ This is accomplished by dispatching the work to another thread
+ managed by the NIF library, return from the NIF, and wait for the
+ result. The thread can send the result back to the Erlang
+ process using <seealso marker="#enif_send">enif_send</seealso>.
+ Information about thread primitives can be found below.
+ </p>
+ </item>
+
+ <tag><marker id="dirty_nifs"/>Dirty NIF</tag>
+ <item>
+
+ <note>
+ <p>
+ <em>The dirty NIF functionality described here
+ is experimental</em>. Dirty NIF support is available only when
+ the emulator is configured with dirty schedulers enabled. This
+ feature is currently disabled by default. The Erlang runtime
+ without SMP support do not support dirty schedulers even when
+ the dirty scheduler support has been enabled. To check at
+ runtime for the presence of dirty scheduler threads, code can
+ use the
+ <seealso marker="#enif_system_info"><c>enif_system_info()</c></seealso>
+ API function.
+ </p>
+ </note>
+
+ <p>
+ A NIF that cannot be split and cannot execute in a millisecond or
+ less is called a "dirty NIF" because it performs work that the
+ Erlang runtime cannot handle cleanly. Applications that make use
+ of such functions must indicate to the runtime that the functions
+ are dirty so they can be handled specially. To schedule a dirty
+ NIF for execution, the appropriate flags value can be set for the
+ NIF in its <seealso marker="#ErlNifFunc"><c>ErlNifFunc</c></seealso>
+ entry, or the application can call
+ <seealso marker="#enif_schedule_nif"><c>enif_schedule_nif</c></seealso>,
+ passing to it a pointer to the dirty NIF to be executed and
+ indicating with the <c>flags</c> argument whether it expects the
+ operation to be CPU-bound or I/O-bound. A dirty NIF executing
+ on a dirty scheduler does not have the same duration restriction
+ as a normal NIF.
+ </p>
+
+ <p>
+ While a process is executing a dirty NIF some operations that
+ communicate with it may take a very long time to complete.
+ Suspend, or garbage collection of a process executing a dirty
+ NIF cannot be done until the dirty NIF has returned, so other
+ processes waiting for such operations to complete might have to
+ wait for a very long time. Blocking multi scheduling, i.e.,
+ calling
+ <seealso marker="erlang#system_flag_multi_scheduling"><c>erlang:system_flag(multi_scheduling,
+ block)</c></seealso>, might also take a very long time to
+ complete. This since all ongoing dirty operations on all
+ dirty schedulers need to complete before the the block
+ operation can complete.
+ </p>
+
+ <p>
+ A lot of operations communicating with a process executing a
+ dirty NIF can, however, complete while it is executing the
+ dirty NIF. For example, retreiving information about it via
+ <c>process_info()</c>, setting its group leader,
+ register/unregister its name, etc.
+ </p>
+
+ <p>
+ Termination of a process executing a dirty NIF can only be
+ completed up to a certain point while it is executing the
+ dirty NIF. All Erlang resources such as registered names,
+ ETS tables, etc will be released. All links and monitors
+ will be triggered. The actual execution of the NIF will
+ however <em>not</em> be stopped. The NIF can safely contiue
+ execution, allocate heap memory, etc, but it is of course better
+ to stop executing as soon as possible. The NIF can check
+ whether current process is alive or not using
+ <seealso marker="#enif_is_current_process_alive"><c>enif_is_current_process_alive</c></seealso>.
+ Communication using
+ <seealso marker="#enif_send"><c>enif_send</c></seealso>,
+ and <seealso marker="#enif_port_command"><c>enif_port_command</c></seealso>
+ will also be dropped when the sending process is not alive.
+ Deallocation of certain internal resources such as process
+ heap, and process control block will be delayed until the
+ dirty NIF has completed.
+ </p>
+
+ <p>Currently known issues that are planned to be fixed:</p>
+ <list>
+ <item>
+ <p>
+ Since purging of a module currently might need to garbage
+ collect a process in order to determine if it has
+ references to the module, a process executing a dirty
+ NIF might delay purging for a very long time. Delaying
+ a purge operatin implies delaying <em>all</em> code
+ loding operations which might cause severe problems for
+ the system as a whole.
+ </p>
+ </item>
+ </list>
+
+ </item>
+ </taglist>
+
</item>
</taglist>
</section>
@@ -508,6 +608,10 @@ typedef struct {
CPU-bound, its <c>flags</c> field should be set to
<c>ERL_NIF_DIRTY_JOB_CPU_BOUND</c>, or for I/O-bound jobs,
<c>ERL_NIF_DIRTY_JOB_IO_BOUND</c>.</p>
+ <note><p>If one of the
+ <c>ERL_NIF_DIRTY_JOB_*_BOUND</c> flags is set, and the runtime
+ system has no support for dirty schedulers, the runtime system
+ will refuse to load the NIF library.</p></note>
</item>
<tag><marker id="ErlNifBinary"/>ErlNifBinary</tag>
<item>
@@ -524,6 +628,18 @@ typedef struct {
<p>Note that <c>ErlNifBinary</c> is a semi-opaque type and you are
only allowed to read fields <c>size</c> and <c>data</c>.</p>
</item>
+
+ <tag><marker id="ErlNifBinaryToTerm"/>ErlNifBinaryToTerm</tag>
+ <item>
+ <p>An enumeration of the options that can be given to
+ <seealso marker="#enif_binary_to_term">enif_binary_to_term</seealso>.
+ For default behavior, use the value <c>0</c>.</p>
+ <taglist>
+ <tag><c>ERL_NIF_BIN2TERM_SAFE</c></tag>
+ <item><p>Use this option when receiving data from untrusted sources.</p></item>
+ </taglist>
+ </item>
+
<tag><marker id="ErlNifPid"/>ErlNifPid</tag>
<item>
<p><c>ErlNifPid</c> is a process identifier (pid). In contrast to
@@ -532,6 +648,14 @@ typedef struct {
<seealso marker="#ErlNifEnv">environment</seealso>. <c>ErlNifPid</c>
is an opaque type.</p>
</item>
+ <tag><marker id="ErlNifPort"/>ErlNifPort</tag>
+ <item>
+ <p><c>ErlNifPort</c> is a port identifier. In contrast to
+ port id terms (instances of <c>ERL_NIF_TERM</c>), <c>ErlNifPort</c>'s are self
+ contained and not bound to any
+ <seealso marker="#ErlNifEnv">environment</seealso>. <c>ErlNifPort</c>
+ is an opaque type.</p>
+ </item>
<tag><marker id="ErlNifResourceType"/>ErlNifResourceType</tag>
<item>
@@ -546,8 +670,7 @@ typedef struct {
<code type="none">
typedef void ErlNifResourceDtor(ErlNifEnv* env, void* obj);
</code>
- <p>The function prototype of a resource destructor function.
- A destructor function is not allowed to call any term-making functions.</p>
+ <p>The function prototype of a resource destructor function.</p>
</item>
<tag><marker id="ErlNifCharEncoding"/>ErlNifCharEncoding</tag>
<item>
@@ -591,6 +714,21 @@ typedef enum {
</taglist>
</item>
+ <tag><marker id="ErlNifUniqueInteger"/>ErlNifUniqueInteger</tag>
+ <item>
+ <p>An enumeration of the properties that can be requested from
+ <seealso marker="#enif_make_unique_integer">enif_unique_integer</seealso>.
+ For default properties, use the value <c>0</c>.</p>
+ <taglist>
+ <tag><c>ERL_NIF_UNIQUE_POSITIVE</c></tag>
+ <item><p>Return only positive integers</p></item>
+ <tag><c>ERL_NIF_UNIQUE_MONOTONIC</c></tag>
+ <item><p>Return only
+ <seealso marker="time_correction#Strictly_Monotonically_Increasing">strictly
+ monotonically increasing</seealso> integer corresponding to creation time</p></item>
+ </taglist>
+ </item>
+
</taglist>
</section>
@@ -632,6 +770,25 @@ typedef enum {
have been allocated with <seealso marker="#enif_alloc_env">enif_alloc_env</seealso>.
</p></desc>
</func>
+ <func><name><ret>size_t</ret><nametext>enif_binary_to_term(ErlNifEnv *env, const unsigned char* data, size_t size, ERL_NIF_TERM *term, ErlNifBinaryToTerm opts)</nametext></name>
+ <fsummary>Create a term from the external format</fsummary>
+ <desc>
+ <p>Create a term that is the result of decoding the binary data
+ at <c>data</c>, which must be encoded according to the Erlang external term format.
+ No more than <c>size</c> bytes are read from <c>data</c>. Argument <c>opts</c>
+ correspond to the second argument to <seealso marker="erlang#binary_to_term-2">
+ <c>erlang:binary_to_term/2</c></seealso>, and must be either <c>0</c> or
+ <c>ERL_NIF_BIN2TERM_SAFE</c>.</p>
+ <p>On success, store the resulting term at <c>*term</c> and return
+ the actual number of bytes read. Return zero if decoding fails or if <c>opts</c>
+ is invalid.</p>
+ <p>See also:
+ <seealso marker="#ErlNifBinaryToTerm"><c>ErlNifBinaryToTerm</c></seealso>,
+ <seealso marker="erlang#binary_to_term-2"><c>erlang:binary_to_term/2</c></seealso> and
+ <seealso marker="#enif_term_to_binary"><c>enif_term_to_binary</c></seealso>.
+ </p>
+ </desc>
+ </func>
<func><name><ret>int</ret><nametext>enif_compare(ERL_NIF_TERM lhs, ERL_NIF_TERM rhs)</nametext></name>
<fsummary>Compare two terms</fsummary>
<desc><p>Return an integer less than, equal to, or greater than
@@ -689,7 +846,48 @@ typedef enum {
a number of repeated NIF-calls without the need to create threads.
See also the <seealso marker="#WARNING">warning</seealso> text at the beginning of this document.</p>
</desc>
+
+ </func>
+
+ <func>
+ <name><ret>ErlNifTime</ret><nametext>enif_convert_time_unit(ErlNifTime val, ErlNifTimeUnit from, ErlNifTimeUnit to)</nametext></name>
+ <fsummary>Convert time unit of a time value</fsummary>
+ <desc>
+ <marker id="enif_convert_time_unit"></marker>
+ <p>Arguments:</p>
+ <taglist>
+ <tag><c>val</c></tag>
+ <item>Value to convert time unit for.</item>
+ <tag><c>from</c></tag>
+ <item>Time unit of <c>val</c>.</item>
+ <tag><c>to</c></tag>
+ <item>Time unit of returned value.</item>
+ </taglist>
+ <p>Converts the <c>val</c> value of time unit <c>from</c> to
+ the corresponding value of time unit <c>to</c>. The result is
+ rounded using the floor function.</p>
+ <p>Returns <c>ERL_NIF_TIME_ERROR</c> if called with an invalid
+ time unit argument.</p>
+ <p>See also:
+ <seealso marker="#ErlNifTime"><c>ErlNifTime</c></seealso> and
+ <seealso marker="#ErlNifTimeUnit"><c>ErlNifTimeUnit</c></seealso>.
+ </p>
+ </desc>
+ </func>
+
+ <func>
+ <name><ret>ERL_NIF_TERM</ret><nametext>enif_cpu_time(ErlNifEnv *)</nametext></name>
+ <fsummary></fsummary>
+ <desc>
+ <p>Returns the CPU time in the same format as <seealso marker="erlang#timestamp-0">erlang:timestamp()</seealso>.
+ The CPU time is the time the current logical cpu has spent executing since
+ some arbitrary point in the past.
+ If the OS does not support fetching of this value <c>enif_cpu_time</c>
+ invokes <seealso marker="#enif_make_badarg">enif_make_badarg</seealso>.
+ </p>
+ </desc>
</func>
+
<func><name><ret>int</ret><nametext>enif_equal_tids(ErlNifTid tid1, ErlNifTid tid2)</nametext></name>
<fsummary></fsummary>
<desc><p>Same as <seealso marker="erl_driver#erl_drv_equal_tids">erl_drv_equal_tids</seealso>.
@@ -744,6 +942,12 @@ typedef enum {
pid variable <c>*pid</c> from it and return true. Otherwise return false.
No check if the process is alive is done.</p></desc>
</func>
+ <func><name><ret>int</ret><nametext>enif_get_local_port(ErlNifEnv* env, ERL_NIF_TERM term, ErlNifPort* port_id)</nametext></name>
+ <fsummary>Read an local port term</fsummary>
+ <desc><p>If <c>term</c> identifies a node local port, initialize the
+ port variable <c>*port_id</c> from it and return true. Otherwise return false.
+ No check if the port is alive is done.</p></desc>
+ </func>
<func><name><ret>int</ret><nametext>enif_get_list_cell(ErlNifEnv* env, ERL_NIF_TERM list, ERL_NIF_TERM* head, ERL_NIF_TERM* tail)</nametext></name>
<fsummary>Get head and tail from a list</fsummary>
<desc><p>Set <c>*head</c> and <c>*tail</c> from
@@ -863,6 +1067,13 @@ typedef enum {
<fsummary>Determine if a term is a binary</fsummary>
<desc><p>Return true if <c>term</c> is a binary</p></desc>
</func>
+ <func><name><ret>int</ret><nametext>enif_is_current_process_alive(ErlNifEnv* env)</nametext></name>
+ <fsummary>Determine if currently executing process is alive or not.</fsummary>
+ <desc><p>Return true if currently executing process is currently alive; otherwise
+ false.</p>
+ <p>This function can only be used from a NIF-calling thread, and with an
+ environment corresponding to currently executing processes.</p></desc>
+ </func>
<func><name><ret>int</ret><nametext>enif_is_empty_list(ErlNifEnv* env, ERL_NIF_TERM term)</nametext></name>
<fsummary>Determine if a term is an empty list</fsummary>
<desc><p>Return true if <c>term</c> is an empty list.</p></desc>
@@ -893,15 +1104,10 @@ typedef enum {
<func><name><ret>int</ret><nametext>enif_is_on_dirty_scheduler(ErlNifEnv* env)</nametext></name>
<fsummary>Check to see if executing on a dirty scheduler thread</fsummary>
<desc>
- <p>Check to see if the current NIF is executing on a dirty scheduler thread. If the
- emulator is built with threading support, calling <c>enif_is_on_dirty_scheduler</c>
- from within a dirty NIF returns true. It returns false when the calling NIF is a regular
- NIF running on a normal scheduler thread, or when the emulator is built without threading
- support.</p>
- <note><p>This function is available only when the emulator is configured with dirty
- schedulers enabled. This feature is currently disabled by default. To determine whether
- the dirty NIF API is available, native code can check to see if the C preprocessor macro
- <c>ERL_NIF_DIRTY_SCHEDULER_SUPPORT</c> is defined.</p></note>
+ <p>Check to see if the current NIF is executing on a dirty scheduler thread. If
+ executing on a dirty scheduler thread true returned; otherwise false.</p>
+ <p>This function can only be used from a NIF-calling thread, and with an
+ environment corresponding to currently executing processes.</p>
</desc>
</func>
<func><name><ret>int</ret><nametext>enif_is_pid(ErlNifEnv* env, ERL_NIF_TERM term)</nametext></name>
@@ -912,6 +1118,18 @@ typedef enum {
<fsummary>Determine if a term is a port</fsummary>
<desc><p>Return true if <c>term</c> is a port.</p></desc>
</func>
+ <func><name><ret>int</ret><nametext>enif_is_port_alive(ErlNifEnv* env, ErlNifPort *port_id)</nametext></name>
+ <fsummary>Determine if a local port is alive or not.</fsummary>
+ <desc><p>Return true if <c>port_id</c> is currently alive.</p>
+ <p>This function is only thread-safe when the emulator with SMP support is used.
+ It can only be used in a non-SMP emulator from a NIF-calling thread.</p></desc>
+ </func>
+ <func><name><ret>int</ret><nametext>enif_is_process_alive(ErlNifEnv* env, ErlNifPid *pid)</nametext></name>
+ <fsummary>Determine if a local process is alive or not.</fsummary>
+ <desc><p>Return true if <c>pid</c> is currently alive.</p>
+ <p>This function is only thread-safe when the emulator with SMP support is used.
+ It can only be used in a non-SMP emulator from a NIF-calling thread.</p></desc>
+ </func>
<func><name><ret>int</ret><nametext>enif_is_ref(ErlNifEnv* env, ERL_NIF_TERM term)</nametext></name>
<fsummary>Determine if a term is a reference</fsummary>
<desc><p>Return true if <c>term</c> is a reference.</p></desc>
@@ -961,7 +1179,7 @@ typedef enum {
<seealso marker="#enif_is_exception">enif_is_exception</seealso>, but
not to any other NIF API function.</p>
<p>See also: <seealso marker="#enif_has_pending_exception">enif_has_pending_exception</seealso>
- and <seealso marker="#enif_raise_exception">enif_raise_exception</seealso>
+ and <seealso marker="#enif_raise_exception">enif_raise_exception</seealso>.
</p>
<note><p>In earlier versions (older than erts-7.0, OTP 18) the return value
from <c>enif_make_badarg</c> had to be returned from the NIF. This
@@ -1195,6 +1413,23 @@ typedef enum {
<fsummary>Create an unsigned integer term</fsummary>
<desc><p>Create an integer term from an unsigned 64-bit integer.</p></desc>
</func>
+ <func>
+ <name><ret>ERL_NIF_TERM</ret><nametext>enif_make_unique_integer(ErlNifEnv *env, ErlNifUniqueInteger properties)</nametext></name>
+ <fsummary></fsummary>
+ <desc>
+ <p>Returns a unique integer with the same properties as given by <seealso marker="erlang#unique_integer-1">erlang:unique_integer/1</seealso>.</p>
+ <p><c>env</c> is the environment to create the integer in.</p>
+ <p>
+ <c>ERL_NIF_UNIQUE_POSITIVE</c> and <c>ERL_NIF_UNIQUE_MONOTONIC</c> can
+ be passed as the second argument to change the properties of the
+ integer returned. It is possible to combine them by or:ing the
+ two values together.
+ </p>
+ <p>See also:
+ <seealso marker="#ErlNifUniqueInteger"><c>ErlNifUniqueInteger</c></seealso>.
+ </p>
+ </desc>
+ </func>
<func><name><ret>ERL_NIF_TERM</ret><nametext>enif_make_ulong(ErlNifEnv* env, unsigned long i)</nametext></name>
<fsummary>Create an integer term from an unsigned long int</fsummary>
<desc><p>Create an integer term from an <c>unsigned long int</c>.</p></desc>
@@ -1265,6 +1500,33 @@ enif_map_iterator_destroy(env, &amp;iter);
or false if the iterator is positioned at the head (before the first
entry).</p></desc>
</func>
+
+ <func>
+ <name><ret>ErlNifTime</ret><nametext>enif_monotonic_time(ErlNifTimeUnit time_unit)</nametext></name>
+ <fsummary>Get Erlang Monotonic Time</fsummary>
+ <desc>
+ <marker id="enif_monotonic_time"></marker>
+ <p>Arguments:</p>
+ <taglist>
+ <tag><c>time_unit</c></tag>
+ <item>Time unit of returned value.</item>
+ </taglist>
+ <p>
+ Returns the current
+ <seealso marker="time_correction#Erlang_Monotonic_Time">Erlang
+ monotonic time</seealso>. Note that it is not uncommon with
+ negative values.
+ </p>
+ <p>Returns <c>ERL_NIF_TIME_ERROR</c> if called with an invalid
+ time unit argument, or if called from a thread that is not a
+ scheduler thread.</p>
+ <p>See also:
+ <seealso marker="#ErlNifTime"><c>ErlNifTime</c></seealso> and
+ <seealso marker="#ErlNifTimeUnit"><c>ErlNifTimeUnit</c></seealso>.
+ </p>
+ </desc>
+ </func>
+
<func><name><ret>ErlNifMutex *</ret><nametext>enif_mutex_create(char *name)</nametext></name>
<fsummary></fsummary>
<desc><p>Same as <seealso marker="erl_driver#erl_drv_mutex_create">erl_drv_mutex_create</seealso>.
@@ -1290,6 +1552,11 @@ enif_map_iterator_destroy(env, &amp;iter);
<desc><p>Same as <seealso marker="erl_driver#erl_drv_mutex_unlock">erl_drv_mutex_unlock</seealso>.
</p></desc>
</func>
+ <func><name><ret>ERL_NIF_TERM</ret><nametext>enif_now_time(ErlNifEnv *env)</nametext></name>
+ <fsummary></fsummary>
+ <desc><p>Retuns an <seealso marker="erlang#now-0">erlang:now()</seealso> timestamp.
+ The enif_now_time function is <em>deprecated</em>.</p></desc>
+ </func>
<func><name><ret>ErlNifResourceType *</ret><nametext>enif_open_resource_type(ErlNifEnv* env,
const char* module_str, const char* name,
ErlNifResourceDtor* dtor, ErlNifResourceFlags flags, ErlNifResourceFlags* tried)</nametext></name>
@@ -1319,6 +1586,36 @@ enif_map_iterator_destroy(env, &amp;iter);
and <seealso marker="#upgrade">upgrade</seealso>.</p>
</desc>
</func>
+ <func><name><ret>int</ret><nametext>enif_port_command(ErlNifEnv* env, const ErlNifPort* to_port, ErlNifEnv *msg_env, ERL_NIF_TERM msg)</nametext></name>
+ <fsummary>Send a port_command to to_port</fsummary>
+ <desc>
+ <p>This function works the same as <seealso marker="erlang#port_command-2">erlang:port_command/2</seealso>
+ except that it is always completely asynchronous.</p>
+ <taglist>
+ <tag><c>env</c></tag>
+ <item>The environment of the calling process. May not be NULL.</item>
+ <tag><c>*to_port</c></tag>
+ <item>The port id of the receiving port. The port id should refer to a
+ port on the local node.</item>
+ <tag><c>msg_env</c></tag>
+ <item>The environment of the message term. Can be a process
+ independent environment allocated with
+ <seealso marker="#enif_alloc_env">enif_alloc_env</seealso> or NULL.</item>
+ <tag><c>msg</c></tag>
+ <item>The message term to send. The same limitations apply as on the
+ payload to <seealso marker="erlang#port_command-2">erlang:port_command/2</seealso>.</item>
+ </taglist>
+ <p>Using a <c>msg_env</c> of NULL is an optimization which groups together
+ calls to <c>enif_alloc_env</c>, <c>enif_make_copy</c>, <c>enif_port_command</c>
+ and <c>enif_free_env</c> into one call. This optimization is only usefull
+ when a majority of the terms are to be copied from <c>env</c> to the <c>msg_env</c>.</p>
+ <p>This function return true if the command was successfully sent; otherwise,
+ false. The call may return false if it detects that the command failed for some
+ reason. For example, <c>*to_port</c> does not refer to a local port, if currently
+ executing process, i.e. the sender, is not alive, or if <c>msg</c> is invalid.</p>
+ <p>See also: <seealso marker="#enif_get_local_port"><c>enif_get_local_port</c></seealso>.</p>
+ </desc>
+ </func>
<func><name><ret>void *</ret><nametext>enif_priv_data(ErlNifEnv* env)</nametext></name>
<fsummary>Get the private data of a NIF library</fsummary>
<desc><p>Return the pointer to the private data that was set by <c>load</c>,
@@ -1442,17 +1739,23 @@ enif_map_iterator_destroy(env, &amp;iter);
<tag><c>msg_env</c></tag>
<item>The environment of the message term. Must be a process
independent environment allocated with
- <seealso marker="#enif_alloc_env">enif_alloc_env</seealso>.</item>
+ <seealso marker="#enif_alloc_env">enif_alloc_env</seealso> or NULL.</item>
<tag><c>msg</c></tag>
<item>The message term to send.</item>
</taglist>
- <p>Return true on success, or false if <c>*to_pid</c> does not refer to an alive local process.</p>
+ <p>Return true if the message was successfully sent; otherwise, false. The send
+ operation will fail if <c>*to_pid</c> does not refer to an alive local process,
+ or if currently executing process, i.e. the sender, is not alive.</p>
<p>The message environment <c>msg_env</c> with all its terms (including
<c>msg</c>) will be invalidated by a successful call to <c>enif_send</c>. The environment
should either be freed with <seealso marker="#enif_free_env">enif_free_env</seealso>
of cleared for reuse with <seealso marker="#enif_clear_env">enif_clear_env</seealso>.</p>
+ <p>If <c>msg_env</c> is set to NULL the <c>msg</c> term is copied and
+ the original term and its environemt is still valid after the call.</p>
<p>This function is only thread-safe when the emulator with SMP support is used.
It can only be used in a non-SMP emulator from a NIF-calling thread.</p>
+ <note><p>Passing <c>msg_env</c> as <c>NULL</c> is only supported since
+ erts-8.0 (OTP 19).</p></note>
</desc>
</func>
<func><name><ret>unsigned</ret><nametext>enif_sizeof_resource(void* obj)</nametext></name>
@@ -1460,12 +1763,33 @@ enif_map_iterator_destroy(env, &amp;iter);
<desc><p>Get the byte size of a resource object <c>obj</c> obtained by
<seealso marker="#enif_alloc_resource">enif_alloc_resource</seealso>.</p></desc>
</func>
+
+ <func><name><ret>int</ret><nametext>enif_snprintf(char *str, size_t size, const char *format, ...)</nametext></name>
+ <fsummary>Format strings and Erlang terms</fsummary>
+ <desc>
+ <p>Similar to <c>snprintf</c> but this format string also accepts <c>"%T"</c> which formats Erlang terms.
+ </p>
+ </desc>
+ </func>
+
<func>
<name><ret>void</ret><nametext>enif_system_info(ErlNifSysInfo *sys_info_ptr, size_t size)</nametext></name>
<fsummary>Get information about the Erlang runtime system</fsummary>
<desc><p>Same as <seealso marker="erl_driver#driver_system_info">driver_system_info</seealso>.
</p></desc>
</func>
+ <func><name><ret>int</ret><nametext>enif_term_to_binary(ErlNifEnv *env, ERL_NIF_TERM term, ErlNifBinary *bin)</nametext></name>
+ <fsummary>Convert a term to the external format</fsummary>
+ <desc>
+ <p>Allocates a new binary with <seealso marker="#enif_alloc_binary">enif_alloc_binary</seealso>
+ and stores the result of encoding <c>term</c> according to the Erlang external term format.</p>
+ <p>Returns true on success or false if allocation failed.</p>
+ <p>See also:
+ <seealso marker="erlang#term_to_binary-1"><c>erlang:term_to_binary/1</c></seealso> and
+ <seealso marker="#enif_binary_to_term"><c>enif_binary_to_term</c></seealso>.
+ </p>
+ </desc>
+ </func>
<func><name><ret>int</ret><nametext>enif_thread_create(char *name,ErlNifTid *tid,void * (*func)(void *),void *args,ErlNifThreadOpts *opts)</nametext></name>
<fsummary></fsummary>
<desc><p>Same as <seealso marker="erl_driver#erl_drv_thread_create">erl_drv_thread_create</seealso>.
@@ -1496,54 +1820,6 @@ enif_map_iterator_destroy(env, &amp;iter);
<desc><p>Same as <seealso marker="erl_driver#erl_drv_thread_self">erl_drv_thread_self</seealso>.
</p></desc>
</func>
- <func><name><ret>int</ret><nametext>enif_tsd_key_create(char *name, ErlNifTSDKey *key)</nametext></name>
- <fsummary></fsummary>
- <desc><p>Same as <seealso marker="erl_driver#erl_drv_tsd_key_create">erl_drv_tsd_key_create</seealso>.
- </p></desc>
- </func>
- <func><name><ret>void</ret><nametext>enif_tsd_key_destroy(ErlNifTSDKey key)</nametext></name>
- <fsummary></fsummary>
- <desc><p>Same as <seealso marker="erl_driver#erl_drv_tsd_key_destroy">erl_drv_tsd_key_destroy</seealso>.
- </p></desc>
- </func>
- <func><name><ret>void *</ret><nametext>enif_tsd_get(ErlNifTSDKey key)</nametext></name>
- <fsummary></fsummary>
- <desc><p>Same as <seealso marker="erl_driver#erl_drv_tsd_get">erl_drv_tsd_get</seealso>.
- </p></desc>
- </func>
- <func><name><ret>void</ret><nametext>enif_tsd_set(ErlNifTSDKey key, void *data)</nametext></name>
- <fsummary></fsummary>
- <desc><p>Same as <seealso marker="erl_driver#erl_drv_tsd_set">erl_drv_tsd_set</seealso>.
- </p></desc>
- </func>
-
-
- <func>
- <name><ret>ErlNifTime</ret><nametext>enif_monotonic_time(ErlNifTimeUnit time_unit)</nametext></name>
- <fsummary>Get Erlang Monotonic Time</fsummary>
- <desc>
- <marker id="enif_monotonic_time"></marker>
- <p>Arguments:</p>
- <taglist>
- <tag><c>time_unit</c></tag>
- <item>Time unit of returned value.</item>
- </taglist>
- <p>
- Returns
- <seealso marker="time_correction#Erlang_Monotonic_Time">Erlang
- monotonic time</seealso>. Note that it is not uncommon with
- negative values.
- </p>
- <p>Returns <c>ERL_NIF_TIME_ERROR</c> if called with an invalid
- time unit argument, or if called from a thread that is not a
- scheduler thread.</p>
- <p>See also:</p>
- <list>
- <item><seealso marker="#ErlNifTime"><c>ErlNifTime</c></seealso></item>
- <item><seealso marker="#ErlNifTimeUnit"><c>ErlNifTimeUnit</c></seealso></item>
- </list>
- </desc>
- </func>
<func>
<name><ret>ErlNifTime</ret><nametext>enif_time_offset(ErlNifTimeUnit time_unit)</nametext></name>
@@ -1563,41 +1839,33 @@ enif_map_iterator_destroy(env, &amp;iter);
<p>Returns <c>ERL_NIF_TIME_ERROR</c> if called with an invalid
time unit argument, or if called from a thread that is not a
scheduler thread.</p>
- <p>See also:</p>
- <list>
- <item><seealso marker="#ErlNifTime"><c>ErlNifTime</c></seealso></item>
- <item><seealso marker="#ErlNifTimeUnit"><c>ErlNifTimeUnit</c></seealso></item>
- </list>
+ <p>See also:
+ <seealso marker="#ErlNifTime"><c>ErlNifTime</c></seealso> and
+ <seealso marker="#ErlNifTimeUnit"><c>ErlNifTimeUnit</c></seealso>.
+ </p>
</desc>
</func>
- <func>
- <name><ret>ErlNifTime</ret><nametext>enif_convert_time_unit(ErlNifTime val, ErlNifTimeUnit from, ErlNifTimeUnit to)</nametext></name>
- <fsummary>Convert time unit of a time value</fsummary>
- <desc>
- <marker id="enif_convert_time_unit"></marker>
- <p>Arguments:</p>
- <taglist>
- <tag><c>val</c></tag>
- <item>Value to convert time unit for.</item>
- <tag><c>from</c></tag>
- <item>Time unit of <c>val</c>.</item>
- <tag><c>to</c></tag>
- <item>Time unit of returned value.</item>
- </taglist>
- <p>Converts the <c>val</c> value of time unit <c>from</c> to
- the corresponding value of time unit <c>to</c>. The result is
- rounded using the floor function.</p>
- <p>Returns <c>ERL_NIF_TIME_ERROR</c> if called with an invalid
- time unit argument.</p>
- <p>See also:</p>
- <list>
- <item><seealso marker="#ErlNifTime"><c>ErlNifTime</c></seealso></item>
- <item><seealso marker="#ErlNifTimeUnit"><c>ErlNifTimeUnit</c></seealso></item>
- </list>
- </desc>
+ <func><name><ret>int</ret><nametext>enif_tsd_key_create(char *name, ErlNifTSDKey *key)</nametext></name>
+ <fsummary></fsummary>
+ <desc><p>Same as <seealso marker="erl_driver#erl_drv_tsd_key_create">erl_drv_tsd_key_create</seealso>.
+ </p></desc>
+ </func>
+ <func><name><ret>void</ret><nametext>enif_tsd_key_destroy(ErlNifTSDKey key)</nametext></name>
+ <fsummary></fsummary>
+ <desc><p>Same as <seealso marker="erl_driver#erl_drv_tsd_key_destroy">erl_drv_tsd_key_destroy</seealso>.
+ </p></desc>
+ </func>
+ <func><name><ret>void *</ret><nametext>enif_tsd_get(ErlNifTSDKey key)</nametext></name>
+ <fsummary></fsummary>
+ <desc><p>Same as <seealso marker="erl_driver#erl_drv_tsd_get">erl_drv_tsd_get</seealso>.
+ </p></desc>
+ </func>
+ <func><name><ret>void</ret><nametext>enif_tsd_set(ErlNifTSDKey key, void *data)</nametext></name>
+ <fsummary></fsummary>
+ <desc><p>Same as <seealso marker="erl_driver#erl_drv_tsd_set">erl_drv_tsd_set</seealso>.
+ </p></desc>
</func>
-
</funcs>
<section>
<title>SEE ALSO</title>
diff --git a/erts/doc/src/erl_prim_loader.xml b/erts/doc/src/erl_prim_loader.xml
index 8f66e07ae1..d3ece37cc5 100644
--- a/erts/doc/src/erl_prim_loader.xml
+++ b/erts/doc/src/erl_prim_loader.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/erts/doc/src/erl_tracer.xml b/erts/doc/src/erl_tracer.xml
new file mode 100644
index 0000000000..d4c8bbad31
--- /dev/null
+++ b/erts/doc/src/erl_tracer.xml
@@ -0,0 +1,652 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE erlref SYSTEM "erlref.dtd">
+
+<erlref>
+ <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>erl_tracer</title>
+ <prepared></prepared>
+ <docno></docno>
+ <date></date>
+ <rev></rev>
+ </header>
+ <module>erl_tracer</module>
+ <modulesummary>Erlang Tracer Behaviour</modulesummary>
+ <description>
+ <p>A behaviour module for implementing the back end of the erlang
+ tracing system. The functions in this module will be called whenever
+ a trace probe is triggered. Both the <c>enabled</c> and <c>trace</c>
+ functions are called in the context of the entity that triggered the
+ trace probe.
+ This means that the overhead by having the tracing enabled will be
+ greatly effected by how much time is spent in these functions. So do as
+ little work as possible in these functions.</p>
+ <note>
+ <p>All functions in this behaviour have to be implemented as NIF's.
+ This is a limitation that may the lifted in the future.
+ There is an <seealso marker="#example">example tracer module nif</seealso>
+ implementation at the end of this page.</p>
+ </note>
+ <warning>
+ <p>Do not send messages or issue port commands to the <c>Tracee</c>
+ in any of the callbacks. Doing so is not allowed and can cause all
+ sorts of strange behaviour, including but not limited to infinite
+ recursions.</p>
+ </warning>
+ </description>
+
+ <datatypes>
+ <datatype> <name name="trace_tag_send" /> </datatype>
+ <datatype> <name name="trace_tag_receive" /> </datatype>
+ <datatype> <name name="trace_tag_call" /> </datatype>
+ <datatype> <name name="trace_tag_procs" /> </datatype>
+ <datatype> <name name="trace_tag_ports" /> </datatype>
+ <datatype> <name name="trace_tag_running_procs" /> </datatype>
+ <datatype> <name name="trace_tag_running_ports" /> </datatype>
+ <datatype> <name name="trace_tag_gc" /> </datatype>
+ <datatype>
+ <name name="trace_tag" />
+ <desc>
+ <p>The different trace tags that the tracer will be called with.
+ Each trace tag is described in greater detail in
+ <seealso marker="#Module:trace/6">Module:trace/6</seealso>
+ </p>
+ </desc>
+ </datatype>
+ <datatype>
+ <name name="tracee" />
+ <desc>
+ <p>The process or port that the trace belongs to.
+ </p>
+ </desc>
+ </datatype>
+ <datatype>
+ <name name="trace_opts" />
+ <desc>
+ <p>The options for the tracee.</p>
+ <taglist>
+ <tag><c>timestamp</c></tag>
+ <item>If not set to <c>undefined</c>, the tracer has been requested to
+ include a timestamp.</item>
+ <tag><c>match_spec_result</c></tag>
+ <item>If not set to <c>true</c>, the tracer has been requested to
+ include the output of a match specification that was run.</item>
+ <tag><c>scheduler_id</c></tag>
+ <item>Set to a number if the scheduler id is to be included by the tracer.
+ Otherwise it is set to <c>undefined</c>.</item>
+ </taglist>
+ </desc>
+ </datatype>
+ <datatype>
+ <name name="tracer_state" />
+ <desc>
+ <p>
+ The state which is given when calling
+ <seealso marker="erlang#trace-3"><c>erlang:trace(PidPortSpec,true,[{tracer,Module,TracerState}])</c></seealso>.
+ The tracer state is an immutable value that is passed to erl_tracer callbacks and should
+ contain all the data that is needed to generate the trace event.
+ </p>
+ </desc>
+ </datatype>
+ </datatypes>
+
+ <section>
+ <title>CALLBACK FUNCTIONS</title>
+ <p>The following functions
+ should be exported from a <c>erl_tracer</c> callback module.</p>
+ <taglist>
+ <tag><seealso marker="#Module:enabled/3"><c>Module:enabled/3</c></seealso></tag>
+ <item>Mandatory</item>
+ <tag><seealso marker="#Module:trace/6"><c>Module:trace/6</c></seealso></tag>
+ <item>Mandatory</item>
+ <tag><seealso marker="#Module:enabled_procs/3"><c>Module:enabled_procs/3</c></seealso></tag>
+ <item>Optional</item>
+ <tag><seealso marker="#Module:trace_procs/6"><c>Module:trace_procs/6</c></seealso></tag>
+ <item>Optional</item>
+ <tag><seealso marker="#Module:enabled_ports/3"><c>Module:enabled_ports/3</c></seealso></tag>
+ <item>Optional</item>
+ <tag><seealso marker="#Module:trace_ports/6"><c>Module:trace_ports/6</c></seealso></tag>
+ <item>Optional</item>
+ <tag><seealso marker="#Module:enabled_running_ports/3"><c>Module:enabled_running_ports/3</c></seealso></tag>
+ <item>Optional</item>
+ <tag><seealso marker="#Module:trace_running_ports/6"><c>Module:trace_running_ports/6</c></seealso></tag>
+ <item>Optional</item>
+ <tag><seealso marker="#Module:enabled_running_procs/3"><c>Module:enabled_running_procs/3</c></seealso></tag>
+ <item>Optional</item>
+ <tag><seealso marker="#Module:trace_running_procs/6"><c>Module:trace_running_procs/6</c></seealso></tag>
+ <item>Optional</item>
+ </taglist>
+
+ </section>
+
+ <funcs>
+ <func>
+ <name>Module:enabled(TraceTag, TracerState, Tracee) -> Result</name>
+ <fsummary>Check if a trace event should be generated.</fsummary>
+ <type>
+ <v>TraceTag = <seealso marker="#type-trace_tag">trace_tag()</seealso> | trace_status</v>
+ <v>TracerState = term()</v>
+ <v>Tracee = <seealso marker="#type-tracee">tracee()</seealso></v>
+ <v>Result = trace | discard | remove</v>
+ </type>
+ <desc>
+ <p>This callback will be called whenever a tracepoint is triggered. It
+ allows the tracer to decide whether a trace should be generated or not.
+ This check is made as early as possible in order to limit the amount of
+ overhead associated with tracing. If <c>trace</c> is returned the
+ necessary trace data will be created and the trace call-back of the tracer
+ will be called. If <c>discard</c> is returned, this trace call
+ will be discarded and no call to trace will be done.
+ </p>
+ <p><c>trace_status</c> is a special type of <c>TraceTag</c> which is used
+ to check if the tracer should still be active. It is called in multiple
+ scenarios, but most significantly it is used when tracing is started
+ using this tracer. If <c>remove</c> is returned when the <c>trace_status</c>
+ is checked, the tracer will be removed from the tracee.</p>
+ <p>This function may be called multiple times per tracepoint, so it
+ is important that it is both fast and side effect free.</p>
+ </desc>
+ </func>
+ <func>
+ <name>Module:trace(TraceTag, TracerState, Tracee, FirstTraceTerm, SecondTraceTerm, Opts) -> Result</name>
+ <fsummary>Check if a trace event should be generated.</fsummary>
+ <type>
+ <v>TraceTag = <seealso marker="#type-trace_tag">trace_tag()</seealso></v>
+ <v>TracerState = term()</v>
+ <v>Tracee = <seealso marker="#type-tracee">tracee()</seealso></v>
+ <v>FirstTraceTerm = term()</v>
+ <v>SecondTraceTerm = term() | undefined</v>
+ <v>Opts = <seealso marker="#type-trace_opts">trace_opts()</seealso></v>
+ <v>Result = ok</v>
+ </type>
+ <desc>
+ <p>This callback will be called when a tracepoint is triggered and
+ the <seealso marker="#Module:enabled/3">Module:enabled/3</seealso>
+ callback returned <c>trace</c>. In it any side effects needed by
+ the tracer should be done. The tracepoint payload is located in
+ the <c>FirstTraceTerm</c> and <c>SecondTraceTerm</c>. The content
+ of the TraceTerms depends on which <c>TraceTag</c> has been triggered.
+ The <c>FirstTraceTerm</c> and <c>SecondTraceTerm</c> correspond to the
+ fourth and fifth slot in the trace tuples described in
+ <seealso marker="erlang#trace_3_trace_messages">erlang:trace/3</seealso>.
+ If the tuple only has four elements, <c>SecondTraceTerm</c> will be
+ <c>undefined</c>.</p>
+ </desc>
+ </func>
+ <func>
+ <name name="trace">Module:trace(seq_trace, TracerState, Label, SeqTraceInfo, undefined, Opts) -> Result</name>
+ <fsummary>Check if a sequence trace event should be generated.</fsummary>
+ <type>
+ <v>TracerState = term()</v>
+ <v>Label = term()</v>
+ <v>SeqTraceInfo = term()</v>
+ <v>Opts = <seealso marker="#type-trace_opts">trace_opts()</seealso></v>
+ <v>Result = ok</v>
+ </type>
+ <desc>
+ <p>The <c>TraceTag</c> <c>seq_trace</c> is handled a little bit
+ differently. There is not <c>Tracee</c> for seq_trace, instead the
+ <c>Label</c> associated with the seq_trace event is given.
+ For more info on what <c>Label</c> and <c>SeqTraceInfo</c> can be
+ see the <seealso marker="kernel:seq_trace">seq_trace</seealso> manual.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>Module:enabled_procs(TraceTag, TracerState, Tracee) -> Result</name>
+ <fsummary>Check if a trace event should be generated.</fsummary>
+ <type>
+ <v>TraceTag = <seealso marker="#type-trace_tag_procs">trace_tag_procs()</seealso></v>
+ <v>TracerState = term()</v>
+ <v>Tracee = <seealso marker="#type-tracee">tracee()</seealso></v>
+ <v>Result = trace | discard | remove</v>
+ </type>
+ <desc>
+ <p>This callback will be called whenever a tracepoint with trace flag
+ <seealso marker="erlang#trace-3"><c>procs</c></seealso>
+ is triggered.</p>
+ <p>If <c>enabled_procs/3</c> is not defined <c>enabled/3</c> will be called instead.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>Module:trace_procs(TraceTag, TracerState, Tracee, FirstTraceTerm, SecondTraceTerm, Opts) -> Result</name>
+ <fsummary>Check if a trace event should be generated.</fsummary>
+ <type>
+ <v>TraceTag = <seealso marker="#type-trace_tag_procs">trace_tag()</seealso></v>
+ <v>TracerState = term()</v>
+ <v>Tracee = <seealso marker="#type-tracee">tracee()</seealso></v>
+ <v>FirstTraceTerm = term()</v>
+ <v>SecondTraceTerm = term() | undefined</v>
+ <v>Opts = <seealso marker="#type-trace_opts">trace_opts()</seealso></v>
+ <v>Result = ok</v>
+ </type>
+ <desc>
+ <p>This callback will be called when a tracepoint is triggered and
+ the <seealso marker="#Module:enabled_procs/3">Module:enabled_procs/3</seealso>
+ callback returned <c>trace</c>.</p>
+ <p>If <c>trace_procs/6</c> is not defined <c>trace/6</c> will be called instead.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>Module:enabled_ports(TraceTag, TracerState, Tracee) -> Result</name>
+ <fsummary>Check if a trace event should be generated.</fsummary>
+ <type>
+ <v>TraceTag = <seealso marker="#type-trace_tag_ports">trace_tag_ports()</seealso></v>
+ <v>TracerState = term()</v>
+ <v>Tracee = <seealso marker="#type-tracee">tracee()</seealso></v>
+ <v>Result = trace | discard | remove</v>
+ </type>
+ <desc>
+ <p>This callback will be called whenever a tracepoint with trace flag
+ <seealso marker="erlang#trace-3"><c>ports</c></seealso>
+ is triggered.</p>
+ <p>If <c>enabled_ports/3</c> is not defined <c>enabled/3</c> will be called instead.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>Module:trace_ports(TraceTag, TracerState, Tracee, FirstTraceTerm, SecondTraceTerm, Opts) -> Result</name>
+ <fsummary>Check if a trace event should be generated.</fsummary>
+ <type>
+ <v>TraceTag = <seealso marker="#type-trace_tag_ports">trace_tag()</seealso></v>
+ <v>TracerState = term()</v>
+ <v>Tracee = <seealso marker="#type-tracee">tracee()</seealso></v>
+ <v>FirstTraceTerm = term()</v>
+ <v>SecondTraceTerm = term() | undefined</v>
+ <v>Opts = <seealso marker="#type-trace_opts">trace_opts()</seealso></v>
+ <v>Result = ok</v>
+ </type>
+ <desc>
+ <p>This callback will be called when a tracepoint is triggered and
+ the <seealso marker="#Module:enabled_ports/3">Module:enabled_ports/3</seealso>
+ callback returned <c>trace</c>.</p>
+ <p>If <c>trace_ports/6</c> is not defined <c>trace/6</c> will be called instead.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>Module:enabled_running_procs(TraceTag, TracerState, Tracee) -> Result</name>
+ <fsummary>Check if a trace event should be generated.</fsummary>
+ <type>
+ <v>TraceTag = <seealso marker="#type-trace_tag_running_procs">trace_tag_running_procs()</seealso></v>
+ <v>TracerState = term()</v>
+ <v>Tracee = <seealso marker="#type-tracee">tracee()</seealso></v>
+ <v>Result = trace | discard | remove</v>
+ </type>
+ <desc>
+ <p>This callback will be called whenever a tracepoint with trace flag
+ <seealso marker="erlang#trace-3"><c>running_procs | running</c></seealso>
+ is triggered.</p>
+ <p>If <c>enabled_running_procs/3</c> is not defined <c>enabled/3</c> will be called instead.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>Module:trace_running_procs(TraceTag, TracerState, Tracee, FirstTraceTerm, SecondTraceTerm, Opts) -> Result</name>
+ <fsummary>Check if a trace event should be generated.</fsummary>
+ <type>
+ <v>TraceTag = <seealso marker="#type-trace_tag_running_procs">trace_tag_running_procs()</seealso></v>
+ <v>TracerState = term()</v>
+ <v>Tracee = <seealso marker="#type-tracee">tracee()</seealso></v>
+ <v>FirstTraceTerm = term()</v>
+ <v>SecondTraceTerm = term() | undefined</v>
+ <v>Opts = <seealso marker="#type-trace_opts">trace_opts()</seealso></v>
+ <v>Result = ok</v>
+ </type>
+ <desc>
+ <p>This callback will be called when a tracepoint is triggered and
+ the <seealso marker="#Module:enabled_running_procs/3">Module:enabled_running_procs/3</seealso>
+ callback returned <c>trace</c>.</p>
+ <p>If <c>trace_running_procs/6</c> is not defined <c>trace/6</c> will be called instead.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>Module:enabled_running_ports(TraceTag, TracerState, Tracee) -> Result</name>
+ <fsummary>Check if a trace event should be generated.</fsummary>
+ <type>
+ <v>TraceTag = <seealso marker="#type-trace_tag_running_ports">trace_tag_running_ports()</seealso></v>
+ <v>TracerState = term()</v>
+ <v>Tracee = <seealso marker="#type-tracee">tracee()</seealso></v>
+ <v>Result = trace | discard | remove</v>
+ </type>
+ <desc>
+ <p>This callback will be called whenever a tracepoint with trace flag
+ <seealso marker="erlang#trace-3"><c>running_ports</c></seealso>
+ is triggered.</p>
+ <p>If <c>enabled_running_ports/3</c> is not defined <c>enabled/3</c> will be called instead.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>Module:trace_running_ports(TraceTag, TracerState, Tracee, FirstTraceTerm, SecondTraceTerm, Opts) -> Result</name>
+ <fsummary>Check if a trace event should be generated.</fsummary>
+ <type>
+ <v>TraceTag = <seealso marker="#type-trace_tag_running_ports">trace_tag_running_ports()</seealso></v>
+ <v>TracerState = term()</v>
+ <v>Tracee = <seealso marker="#type-tracee">tracee()</seealso></v>
+ <v>FirstTraceTerm = term()</v>
+ <v>SecondTraceTerm = term() | undefined</v>
+ <v>Opts = <seealso marker="#type-trace_opts">trace_opts()</seealso></v>
+ <v>Result = ok</v>
+ </type>
+ <desc>
+ <p>This callback will be called when a tracepoint is triggered and
+ the <seealso marker="#Module:enabled_running_ports/3">Module:enabled_running_ports/3</seealso>
+ callback returned <c>trace</c>.</p>
+ <p>If <c>trace_running_ports/6</c> is not defined <c>trace/6</c> will be called instead.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>Module:enabled_call(TraceTag, TracerState, Tracee) -> Result</name>
+ <fsummary>Check if a trace event should be generated.</fsummary>
+ <type>
+ <v>TraceTag = <seealso marker="#type-trace_tag_call">trace_tag_call()</seealso></v>
+ <v>TracerState = term()</v>
+ <v>Tracee = <seealso marker="#type-tracee">tracee()</seealso></v>
+ <v>Result = trace | discard | remove</v>
+ </type>
+ <desc>
+ <p>This callback will be called whenever a tracepoint with trace flag
+ <seealso marker="erlang#trace-3"><c>call | return_to</c></seealso>
+ is triggered.</p>
+ <p>If <c>enabled_call/3</c> is not defined <c>enabled/3</c> will be called instead.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>Module:trace_call(TraceTag, TracerState, Tracee, FirstTraceTerm, SecondTraceTerm, Opts) -> Result</name>
+ <fsummary>Check if a trace event should be generated.</fsummary>
+ <type>
+ <v>TraceTag = <seealso marker="#type-trace_tag_call">trace_tag_call()</seealso></v>
+ <v>TracerState = term()</v>
+ <v>Tracee = <seealso marker="#type-tracee">tracee()</seealso></v>
+ <v>FirstTraceTerm = term()</v>
+ <v>SecondTraceTerm = term() | undefined</v>
+ <v>Opts = <seealso marker="#type-trace_opts">trace_opts()</seealso></v>
+ <v>Result = ok</v>
+ </type>
+ <desc>
+ <p>This callback will be called when a tracepoint is triggered and
+ the <seealso marker="#Module:enabled_call/3">Module:enabled_call/3</seealso>
+ callback returned <c>trace</c>.</p>
+ <p>If <c>trace_call/6</c> is not defined <c>trace/6</c> will be called instead.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>Module:enabled_send(TraceTag, TracerState, Tracee) -> Result</name>
+ <fsummary>Check if a trace event should be generated.</fsummary>
+ <type>
+ <v>TraceTag = <seealso marker="#type-trace_tag_send">trace_tag_send()</seealso></v>
+ <v>TracerState = term()</v>
+ <v>Tracee = <seealso marker="#type-tracee">tracee()</seealso></v>
+ <v>Result = trace | discard | remove</v>
+ </type>
+ <desc>
+ <p>This callback will be called whenever a tracepoint with trace flag
+ <seealso marker="erlang#trace-3"><c>send</c></seealso>
+ is triggered.</p>
+ <p>If <c>enabled_send/3</c> is not defined <c>enabled/3</c> will be called instead.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>Module:trace_send(TraceTag, TracerState, Tracee, FirstTraceTerm, SecondTraceTerm, Opts) -> Result</name>
+ <fsummary>Check if a trace event should be generated.</fsummary>
+ <type>
+ <v>TraceTag = <seealso marker="#type-trace_tag_send">trace_tag_send()</seealso></v>
+ <v>TracerState = term()</v>
+ <v>Tracee = <seealso marker="#type-tracee">tracee()</seealso></v>
+ <v>FirstTraceTerm = term()</v>
+ <v>SecondTraceTerm = term() | undefined</v>
+ <v>Opts = <seealso marker="#type-trace_opts">trace_opts()</seealso></v>
+ <v>Result = ok</v>
+ </type>
+ <desc>
+ <p>This callback will be called when a tracepoint is triggered and
+ the <seealso marker="#Module:enabled_send/3">Module:enabled_send/3</seealso>
+ callback returned <c>trace</c>.</p>
+ <p>If <c>trace_send/6</c> is not defined <c>trace/6</c> will be called instead.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>Module:enabled_receive(TraceTag, TracerState, Tracee) -> Result</name>
+ <fsummary>Check if a trace event should be generated.</fsummary>
+ <type>
+ <v>TraceTag = <seealso marker="#type-trace_tag_receive">trace_tag_receive()</seealso></v>
+ <v>TracerState = term()</v>
+ <v>Tracee = <seealso marker="#type-tracee">tracee()</seealso></v>
+ <v>Result = trace | discard | remove</v>
+ </type>
+ <desc>
+ <p>This callback will be called whenever a tracepoint with trace flag
+ <seealso marker="erlang#trace-3"><c>'receive'</c></seealso>
+ is triggered.</p>
+ <p>If <c>enabled_receive/3</c> is not defined <c>enabled/3</c> will be called instead.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>Module:trace_receive(TraceTag, TracerState, Tracee, FirstTraceTerm, SecondTraceTerm, Opts) -> Result</name>
+ <fsummary>Check if a trace event should be generated.</fsummary>
+ <type>
+ <v>TraceTag = <seealso marker="#type-trace_tag_receive">trace_tag_receive()</seealso></v>
+ <v>TracerState = term()</v>
+ <v>Tracee = <seealso marker="#type-tracee">tracee()</seealso></v>
+ <v>FirstTraceTerm = term()</v>
+ <v>SecondTraceTerm = term() | undefined</v>
+ <v>Opts = <seealso marker="#type-trace_opts">trace_opts()</seealso></v>
+ <v>Result = ok</v>
+ </type>
+ <desc>
+ <p>This callback will be called when a tracepoint is triggered and
+ the <seealso marker="#Module:enabled_receive/3">Module:enabled_receive/3</seealso>
+ callback returned <c>trace</c>.</p>
+ <p>If <c>trace_receive/6</c> is not defined <c>trace/6</c> will be called instead.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>Module:enabled_garbage_collection(TraceTag, TracerState, Tracee) -> Result</name>
+ <fsummary>Check if a trace event should be generated.</fsummary>
+ <type>
+ <v>TraceTag = <seealso marker="#type-trace_tag_gc">trace_tag_gc()</seealso></v>
+ <v>TracerState = term()</v>
+ <v>Tracee = <seealso marker="#type-tracee">tracee()</seealso></v>
+ <v>Result = trace | discard | remove</v>
+ </type>
+ <desc>
+ <p>This callback will be called whenever a tracepoint with trace flag
+ <seealso marker="erlang#trace-3"><c>garbage_collection</c></seealso>
+ is triggered.</p>
+ <p>If <c>enabled_garbage_collection/3</c> is not defined <c>enabled/3</c> will be called instead.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>Module:trace_garbage_collection(TraceTag, TracerState, Tracee, FirstTraceTerm, SecondTraceTerm, Opts) -> Result</name>
+ <fsummary>Check if a trace event should be generated.</fsummary>
+ <type>
+ <v>TraceTag = <seealso marker="#type-trace_tag_gc">trace_tag_gc()</seealso></v>
+ <v>TracerState = term()</v>
+ <v>Tracee = <seealso marker="#type-tracee">tracee()</seealso></v>
+ <v>FirstTraceTerm = term()</v>
+ <v>SecondTraceTerm = term() | undefined</v>
+ <v>Opts = <seealso marker="#type-trace_opts">trace_opts()</seealso></v>
+ <v>Result = ok</v>
+ </type>
+ <desc>
+ <p>This callback will be called when a tracepoint is triggered and
+ the <seealso marker="#Module:enabled_garbage_collection/3">Module:enabled_garbage_collection/3</seealso>
+ callback returned <c>trace</c>.</p>
+ <p>If <c>trace_garbage_collection/6</c> is not defined <c>trace/6</c> will be called instead.</p>
+ </desc>
+ </func>
+
+ </funcs>
+ <section>
+ <marker id="example"></marker>
+ <title>Erl Tracer Module example</title>
+ <p>In the example below a tracer module with a nif backend sends a message
+ for each <c>send</c> trace tag containing only the sender and receiver.
+ Using this tracer module, a much more lightweight message tracer is
+ used that only records who sent messages to who.</p>
+ <p>Here is an example session using it on Linux.</p>
+ <pre>
+$ gcc -I erts-8.0/include/ -fPIC -shared -o erl_msg_tracer.so erl_msg_tracer.c
+$ erl
+Erlang/OTP 19 [DEVELOPMENT] [erts-8.0] [source-ed2b56b] [64-bit] [smp:8:8] [async-threads:10] [hipe] [kernel-poll:false]
+
+Eshell V8.0 (abort with ^G)
+1&gt; c(erl_msg_tracer), erl_msg_tracer:load().
+ok
+2&gt; Tracer = spawn(fun F() -&gt; receive M -&gt; io:format("~p~n",[M]), F() end end).
+&lt;0.37.0&gt;
+3&gt; erlang:trace(new, true, [send,{tracer, erl_msg_tracer, Tracer}]).
+0
+{&lt;0.39.0&gt;,&lt;0.27.0&gt;}
+4&gt; {ok, D} = file:open("/tmp/tmp.data",[write]).
+{trace,#Port&lt;0.486&gt;,&lt;0.40.0&gt;}
+{trace,&lt;0.40.0&gt;,&lt;0.21.0&gt;}
+{trace,#Port&lt;0.487&gt;,&lt;0.4.0&gt;}
+{trace,#Port&lt;0.488&gt;,&lt;0.4.0&gt;}
+{trace,#Port&lt;0.489&gt;,&lt;0.4.0&gt;}
+{trace,#Port&lt;0.490&gt;,&lt;0.4.0&gt;}
+{ok,&lt;0.40.0&gt;}
+{trace,&lt;0.41.0&gt;,&lt;0.27.0&gt;}
+5&gt;
+ </pre>
+ <p>erl_msg_tracer.erl</p>
+ <pre>
+-module(erl_msg_tracer).
+
+-export([enabled/3, trace/6, load/0]).
+
+load() ->
+ erlang:load_nif("erl_msg_tracer", []).
+
+enabled(_, _, _) ->
+ error.
+
+trace(_, _, _,_, _, _) ->
+ error.
+ </pre>
+ <p>erl_msg_tracer.c</p>
+ <pre>
+#include "erl_nif.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", 6, trace}
+};
+
+ERL_NIF_INIT(erl_msg_tracer, nif_funcs, load, NULL, upgrade, unload)
+
+static int load(ErlNifEnv* env, void** priv_data, ERL_NIF_TERM load_info)
+{
+ *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 || *priv_data != NULL) {
+ return -1; /* Don't know how to do that */
+ }
+ if (load(env, priv_data, load_info)) {
+ return -1;
+ }
+ return 0;
+}
+
+/*
+ * argv[0]: TraceTag
+ * argv[1]: TracerState
+ * argv[2]: Tracee
+ */
+static ERL_NIF_TERM enabled(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+{
+ ErlNifPid to_pid;
+ if (enif_get_local_pid(env, argv[1], &amp;to_pid))
+ if (!enif_is_process_alive(env, &amp;to_pid))
+ if (enif_is_identical(enif_make_atom(env, "trace_status"), argv[0]))
+ /* tracer is dead so we should remove this tracepoint */
+ return enif_make_atom(env, "remove");
+ else
+ return enif_make_atom(env, "discard");
+
+ /* Only generate trace for when tracer != tracee */
+ if (enif_is_identical(argv[1], argv[2]))
+ return enif_make_atom(env, "discard");
+
+ /* Only trigger trace messages on 'send' */
+ if (enif_is_identical(enif_make_atom(env, "send"), argv[0]))
+ return enif_make_atom(env, "trace");
+
+ /* Have to answer trace_status */
+ if (enif_is_identical(enif_make_atom(env, "trace_status"), argv[0]))
+ return enif_make_atom(env, "trace");
+
+ return enif_make_atom(env, "discard");
+}
+
+/*
+ * argv[0]: TraceTag, should only be 'send'
+ * argv[1]: TracerState, process to send {argv[2], argv[4]} to
+ * argv[2]: Tracee
+ * argv[3]: Message, ignored
+ * argv[4]: Recipient
+ * argv[5]: Options, ignored
+ */
+static ERL_NIF_TERM trace(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+{
+ ErlNifPid to_pid;
+
+ if (enif_get_local_pid(env, argv[1], &amp;to_pid)) {
+ ERL_NIF_TERM msg = enif_make_tuple3(env, enif_make_atom(env, "trace"), argv[2], argv[4]);
+ enif_send(env, &amp;to_pid, NULL, msg);
+ }
+
+ return enif_make_atom(env, "ok");
+}
+ </pre>
+ </section>
+</erlref>
diff --git a/erts/doc/src/erlang.xml b/erts/doc/src/erlang.xml
index 803da382ed..9287b32fec 100644
--- a/erts/doc/src/erlang.xml
+++ b/erts/doc/src/erlang.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>
@@ -52,7 +52,6 @@
<datatype>
<name>ext_binary()</name>
<desc>
- <marker id="type-ext_binary"></marker>
<p>A binary data object, structured according to
the Erlang external term format.</p>
</desc>
@@ -1811,7 +1810,8 @@ os_prompt% </pre>
</item>
</taglist>
<note><p>On many platforms, the OS supports only status
- codes 0-255.</p></note>
+ codes 0-255. A too large status code will be truncated by clearing
+ the high bits.</p></note>
<p>For integer <c><anno>Status</anno></c>, the Erlang runtime system
closes all ports and allows async threads to finish their
operations before exiting. To exit without such flushing, use
@@ -2612,6 +2612,48 @@ os_prompt% </pre>
</func>
<func>
+ <name name="match_spec_test" arity="3"/>
+ <fsummary>Test that a match specification works</fsummary>
+ <desc>
+ <p>
+ This function is a utility to test a match_spec used in calls to
+ <seealso marker="stdlib:ets#select/2">ets:select/2</seealso> and
+ <seealso marker="#trace_pattern/3">erlang:trace_pattern/3</seealso>.
+ The function both tests MatchSpec for "syntactic" correctness and
+ runs the match_spec against the object. If the match_spec contains
+ errors, the tuple {error, Errors} is returned where Errors is a list
+ of natural language descriptions of what was wrong with the match_spec.
+ </p>
+ <p>
+ If the <c><anno>Type</anno></c> is <c>table</c> the object to match
+ against should be a tuple. The function then returns
+ {ok,Result,[],Warnings} where Result is what would have been the
+ result in a real ets:select/2 call or false if the match_spec does
+ not match the object tuple.
+ </p>
+
+ <p>
+ If <c><anno>Type</anno></c> is <c>trace</c> the object to match
+ against should be a list. The function returns
+ {ok, Result, Flags, Warnings} where Result is <c>true</c> if a trace
+ message should be emitted, <c>false</c> if a trace message should not
+ be emitted or the message term to be appended to the trace message.
+ Flags is a list containing all the trace flags that will be enabled,
+ at the moment this is only <c>return_trace</c>.
+ </p>
+
+ <p>
+ This is a useful debugging and test tool, especially when writing complicated
+ match specifications.
+ </p>
+ <p>
+ See also
+ <seealso marker="stdlib:ets#test_ms/2">ets:test_ms/2</seealso>.
+ </p>
+ </desc>
+ </func>
+
+ <func>
<name name="max" arity="2"/>
<fsummary>Returns the largest of two terms.</fsummary>
<desc>
@@ -4279,6 +4321,7 @@ os_prompt% </pre>
</desc>
</func>
+ <marker id="process_flag_min_heap_size"/>
<func>
<name name="process_flag" arity="2" clause_i="3"/>
<fsummary>Sets process flag <c>min_heap_size</c> for the calling process.</fsummary>
@@ -4297,9 +4340,95 @@ os_prompt% </pre>
<p>Returns the old value of the flag.</p>
</desc>
</func>
- <marker id="process_flag_message_queue_data"/>
+ <marker id="process_flag_max_heap_size"/>
<func>
<name name="process_flag" arity="2" clause_i="5"/>
+ <type name="max_heap_size"/>
+ <fsummary>Sets process flag <c>max_heap_size</c> for the calling process.</fsummary>
+ <desc>
+ <p>
+ This flag sets the maximum heap size for the calling process.
+ If <c><anno>MaxHeapSize</anno></c> is an integer, the system default
+ values for <c>kill</c> and <c>error_logger</c> are used.
+ <taglist>
+ <tag><c>size</c></tag>
+ <item>
+ <p>
+ The maximum size in words of the process. If set to zero, the
+ heap size limit is disabled. Badarg will be thrown if the value is
+ smaller than
+ <seealso marker="#process_flag_min_heap_size"><c>min_heap_size</c></seealso>.
+ The size check is only done when a garbage collection is triggered.
+ </p>
+ <p>
+ <c>size</c> is the entire heap of the process when garbage collection
+ is triggered, this includes all generational heaps, the process stack,
+ any <seealso marker="#process_flag_message_queue_data">
+ messages that are considered to be part of the heap</seealso> and any
+ extra memory that the garbage collector needs during collection.
+ </p>
+ <p>
+ <c>size</c> is the same as can be retrieved using
+ <seealso marker="#process_info_total_heap_size">
+ <c>erlang:process_info(Pid, total_heap_size)</c></seealso>,
+ or by adding <c>heap_block_size</c>, <c>old_heap_block_size</c>
+ and <c>mbuf_size</c> from <seealso marker="#process_info_garbage_collection_info">
+ <c>erlang:process_info(Pid, garbage_collection_info)</c></seealso>.
+ </p>
+ </item>
+ <tag><c>kill</c></tag>
+ <item>
+ <p>
+ When set to <c>true</c> the runtime system will send an
+ untrappable exit signal with reason <c>kill</c> to the process
+ if the maximum heap size is reached. The garbage collection
+ that triggered the <c>kill</c> will not be completed, instead the
+ process will exit as soon as is possible. When set to <c>false</c>
+ no exit signal will be sent to the process, instead it will
+ continue executing.
+ </p>
+ <p>
+ If <c>kill</c> is not defined in the map
+ the system default will be used. The default system default
+ is <c>true</c>. It can be changed by either the erl
+ <seealso marker="erl#+hmaxk">+hmaxk</seealso> option,
+ or <seealso marker="#system_flag_max_heap_size"><c>
+ erlang:system_flag(max_heap_size, MaxHeapSize)</c></seealso>.
+ </p>
+ </item>
+ <tag><c>error_logger</c></tag>
+ <item>
+ <p>
+ When set to <c>true</c> the runtime system will send a
+ message to the current <seealso marker="kernel:error_logger"><c>error_logger</c></seealso>
+ containing details about the process when the maximum
+ heap size is reached. One <c>error_logger</c> report will
+ be sent each time the limit is reached.
+ </p>
+ <p>
+ If <c>error_logger</c> is not defined in the map the system
+ default will be used. The default system default is <c>true</c>.
+ It can be changed by either the erl <seealso marker="erl#+hmaxel">+hmaxel</seealso>
+ option, or <seealso marker="#system_flag_max_heap_size"><c>
+ erlang:system_flag(max_heap_size, MaxHeapSize)</c></seealso>.
+ </p>
+ </item>
+ <p>
+ The heap size of a process is quite hard to predict, especially the
+ amount of memory that is used during the garbage collection. When
+ contemplating using this option, it is recommended to first run
+ it in production with <c>kill</c> set to <c>false</c> and inspect
+ the <c>error_logger</c> reports to see what the normal peak sizes
+ of the processes in the system is and then tune the value
+ accordingly.
+ </p>
+ </taglist>
+ </p>
+ </desc>
+ </func>
+ <marker id="process_flag_message_queue_data"/>
+ <func>
+ <name name="process_flag" arity="2" clause_i="6"/>
<fsummary>Set process flag <c>message_queue_data</c> for the calling process</fsummary>
<type name="message_queue_data"/>
<desc>
@@ -4328,7 +4457,7 @@ os_prompt% </pre>
</taglist>
<p>
The default <c>message_queue_data</c> process flag is determined
- by the <seealso marker="erl#+xmqd"><c>+xmqd</c></seealso>
+ by the <seealso marker="erl#+hmqd"><c>+hmqd</c></seealso>
<c>erl</c> command line argument.
</p>
<p>
@@ -4349,7 +4478,7 @@ os_prompt% </pre>
</desc>
</func>
<func>
- <name name="process_flag" arity="2" clause_i="6"/>
+ <name name="process_flag" arity="2" clause_i="7"/>
<fsummary>Sets process flag <c>priority</c> for the calling process.</fsummary>
<type name="priority_level"/>
<desc>
@@ -4423,7 +4552,7 @@ os_prompt% </pre>
</func>
<func>
- <name name="process_flag" arity="2" clause_i="7"/>
+ <name name="process_flag" arity="2" clause_i="8"/>
<fsummary>Sets process flag <c>save_calls</c> for the calling process.</fsummary>
<desc>
<p><c><anno>N</anno></c> must be an integer in the interval 0..10000.
@@ -4454,7 +4583,7 @@ os_prompt% </pre>
</func>
<func>
- <name name="process_flag" arity="2" clause_i="8"/>
+ <name name="process_flag" arity="2" clause_i="9"/>
<fsummary>Sets process flag <c>sensitive</c> for the calling process.</fsummary>
<desc>
<p>Sets or clears flag <c>sensitive</c> for the current process.
@@ -4508,6 +4637,7 @@ os_prompt% </pre>
<type name="process_info_result_item"/>
<type name="priority_level"/>
<type name="stack_item"/>
+ <type name="max_heap_size" />
<type name="message_queue_data" />
<desc>
<p>Returns a list containing <c><anno>InfoTuple</anno></c>s with
@@ -4561,6 +4691,7 @@ os_prompt% </pre>
<type name="process_info_result_item"/>
<type name="stack_item"/>
<type name="priority_level"/>
+ <type name="max_heap_size" />
<type name="message_queue_data" />
<desc>
<p>Returns information about the process identified by
@@ -4653,13 +4784,14 @@ os_prompt% </pre>
The content of <c><anno>GCInfo</anno></c> can be changed without
prior notice.</p>
</item>
+ <marker id="process_info_garbage_collection_info"/>
<tag><c>{garbage_collection_info, <anno>GCInfo</anno>}</c></tag>
<item>
<p><c><anno>GCInfo</anno></c> is a list containing miscellaneous
detailed information about garbage collection for this process.
The content of <c><anno>GCInfo</anno></c> can be changed without
prior notice.
- See <seealso marker="#gc_start">gc_start</seealso> in
+ See <seealso marker="#gc_minor_start">gc_minor_start</seealso> in
<seealso marker="#trace/3">erlang:trace/3</seealso> for details about
what each item means.
</p>
@@ -4832,10 +4964,13 @@ os_prompt% </pre>
total suspend count on <c><anno>Suspendee</anno></c>,
only the parts contributed by <c><anno>Pid</anno></c>.</p>
</item>
+ <marker id="process_info_total_heap_size"/>
<tag><c>{total_heap_size, <anno>Size</anno>}</c></tag>
<item>
<p><c><anno>Size</anno></c> is the total size, in words, of all heap
- fragments of the process. This includes the process stack.</p>
+ fragments of the process. This includes the process stack and
+ any unreceived messages that are considered to be part of the
+ heap. </p>
</item>
<tag><c>{trace, <anno>InternalTraceFlags</anno>}</c></tag>
<item>
@@ -4934,10 +5069,6 @@ os_prompt% </pre>
<p>Stops the execution of the calling process with an
exception of given class, reason, and call stack backtrace
(<em>stacktrace</em>).</p>
- <warning>
- <p>This BIF is intended for debugging. Avoid to use it in applications,
- unless you really know what you are doing.</p>
- </warning>
<p><c><anno>Class</anno></c> is <c>error</c>, <c>exit</c>, or
<c>throw</c>. So, if it were not for the stacktrace,
<c>erlang:raise(<anno>Class</anno>, <anno>Reason</anno>,
@@ -5524,6 +5655,7 @@ true</pre>
<name name="spawn_opt" arity="2"/>
<fsummary>Creates a new process with a fun as entry point.</fsummary>
<type name="priority_level"/>
+ <type name="max_heap_size" />
<type name="message_queue_data" />
<type name="spawn_opt_option" />
<desc>
@@ -5541,6 +5673,7 @@ true</pre>
<name name="spawn_opt" arity="3"/>
<fsummary>Creates a new process with a fun as entry point on a given node.</fsummary>
<type name="priority_level"/>
+ <type name="max_heap_size" />
<type name="message_queue_data" />
<type name="spawn_opt_option" />
<desc>
@@ -5557,6 +5690,7 @@ true</pre>
<name name="spawn_opt" arity="4"/>
<fsummary>Creates a new process with a function as entry point.</fsummary>
<type name="priority_level"/>
+ <type name="max_heap_size" />
<type name="message_queue_data" />
<type name="spawn_opt_option" />
<desc>
@@ -5660,13 +5794,23 @@ true</pre>
fine-tuning an application and to measure the execution
time with various <c><anno>VSize</anno></c> values.</p>
</item>
+ <tag><c>{max_heap_size, <anno>Size</anno>}</c></tag>
+ <item>
+ <p>Sets the <c>max_heap_size</c> process flag. The default
+ <c>max_heap_size</c> is determined by the
+ <seealso marker="erl#+hmax"><c>+hmax</c></seealso> <c>erl</c>
+ command line argument. For more information, see the
+ documentation of
+ <seealso marker="#process_flag_max_heap_size"><c>process_flag(max_heap_size,
+ <anno>Size</anno>)</c></seealso>.</p>
+ </item>
<tag><c>{message_queue_data, <anno>MQD</anno>}</c></tag>
<item>
<p>Sets the state of the <c>message_queue_data</c> process
flag. <c><anno>MQD</anno></c> should be either <c>off_heap</c>,
<c>on_heap</c>, or <c>mixed</c>. The default
<c>message_queue_data</c> process flag is determined by the
- <seealso marker="erl#+xmqd"><c>+xmqd</c></seealso> <c>erl</c>
+ <seealso marker="erl#+hmqd"><c>+hmqd</c></seealso> <c>erl</c>
command line argument. For more information, see the
documentation of
<seealso marker="#process_flag_message_queue_data"><c>process_flag(message_queue_data,
@@ -5680,6 +5824,7 @@ true</pre>
<name name="spawn_opt" arity="5"/>
<fsummary>Creates a new process with a function as entry point on a given node.</fsummary>
<type name="priority_level"/>
+ <type name="max_heap_size" />
<type name="message_queue_data" />
<type name="spawn_opt_option" />
<desc>
@@ -6461,46 +6606,75 @@ ok
</desc>
</func>
+ <marker id="system_flag_max_heap_size"></marker>
<func>
<name name="system_flag" arity="2" clause_i="8"/>
+ <type name="max_heap_size"/>
+ <fsummary>Sets system flag <c>max_heap_size</c></fsummary>
+ <desc>
+ <p>
+ Sets the default maximum heap size settings for processes.
+ The size is given in words. The new <c>max_heap_size</c>
+ effects only processes spawned efter the change has been made.
+ <c>max_heap_size</c> can be set for individual processes using
+ <seealso marker="#spawn_opt/4">spawn_opt/N</seealso> or
+ <seealso marker="#process_flag_message_queue_data">process_flag/2</seealso>.</p>
+ <p>Returns the old value of the flag.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="system_flag" arity="2" clause_i="9"/>
<fsummary>Sets system flag <c>multi_scheduling</c>.</fsummary>
<desc>
<p><marker id="system_flag_multi_scheduling"></marker>
If multi-scheduling is enabled, more than one scheduler
thread is used by the emulator. Multi-scheduling can be
- blocked. When multi-scheduling is blocked, only
- one scheduler thread schedules Erlang processes.</p>
+ blocked in two different ways. Either all schedulers but
+ one is blocked, or all <em>normal</em> schedulers but
+ one is blocked. When only normal schedulers are blocked
+ dirty schedulers are free to continue to schedule
+ processes.</p>
<p>If <c><anno>BlockState</anno> =:= block</c>, multi-scheduling is
- blocked. If <c><anno>BlockState</anno> =:= unblock</c> and no one
+ blocked. That is, one and only one scheduler thread will
+ execute. If <c><anno>BlockState</anno> =:= unblock</c> and no one
else blocks multi-scheduling, and this process has
blocked only once, multi-scheduling is unblocked.</p>
- <p>One process can block multi-scheduling multiple times.
- If a process has blocked multiple times, it must
- unblock exactly as many times as it has blocked before it
- has released its multi-scheduling block. If a process that
- has blocked multi-scheduling exits, it releases its
- blocking of multi-scheduling.</p>
+ <p>If <c><anno>BlockState</anno> =:= block_normal</c>, normal
+ multi-scheduling is blocked. That is, only one normal scheduler
+ thread will execute, but multiple dirty schedulers may execute.
+ If <c><anno>BlockState</anno> =:= unblock_normal</c> and no one
+ else blocks normal multi-scheduling, and this process has
+ blocked only once, normal multi-scheduling is unblocked.</p>
+ <p>One process can block multi-scheduling as well as normal
+ multi-scheduling multiple times. If a process has blocked
+ multiple times, it must unblock exactly as many times as it
+ has blocked before it has released its multi-scheduling
+ block. If a process that has blocked multi-scheduling or normal
+ multi scheduling exits, it automatically releases its blocking
+ of multi-scheduling and normal multi-scheduling.</p>
<p>The return values are <c>disabled</c>, <c>blocked</c>,
- or <c>enabled</c>. The returned value describes the
- state just after the call to
+ <c>blocked_normal</c>, or <c>enabled</c>. The returned value
+ describes the state just after the call to
<c>erlang:system_flag(multi_scheduling, <anno>BlockState</anno>)</c>
has been made. For information about the return values, see
<seealso marker="#system_info_multi_scheduling">erlang:system_info(multi_scheduling)</seealso>.</p>
- <note><p>Blocking of multi-scheduling is normally not needed.
- If you feel that you need to block multi-scheduling,
- consider it a few more times again. Blocking multi-scheduling
- is only to be used as a last resort, as it is most likely
- a <em>very inefficient</em> way to solve the problem.</p>
+ <note><p>Blocking of multi-scheduling and normal multi-scheduling
+ is normally not needed. If you feel that you need to use these
+ features, consider it a few more times again. Blocking
+ multi-scheduling is only to be used as a last resort, as it is
+ most likely a <em>very inefficient</em> way to solve the problem.</p>
</note>
<p>See also
<seealso marker="#system_info_multi_scheduling">erlang:system_info(multi_scheduling)</seealso>,
+ <seealso marker="#system_info_normal_multi_scheduling_blockers">erlang:system_info(normal_multi_scheduling_blockers)</seealso>,
<seealso marker="#system_info_multi_scheduling_blockers">erlang:system_info(multi_scheduling_blockers)</seealso>, and
<seealso marker="#system_info_schedulers">erlang:system_info(schedulers)</seealso>.</p>
</desc>
</func>
<func>
- <name name="system_flag" arity="2" clause_i="9"/>
+ <name name="system_flag" arity="2" clause_i="10"/>
<fsummary>Sets system flag <c>scheduler_bind_type</c>.</fsummary>
<type name="scheduler_bind_type"/>
<desc>
@@ -6618,7 +6792,7 @@ ok
</func>
<func>
- <name name="system_flag" arity="2" clause_i="10"/>
+ <name name="system_flag" arity="2" clause_i="11"/>
<fsummary>Sets system flag <c>scheduler_wall_time</c>.</fsummary>
<desc><p><marker id="system_flag_scheduler_wall_time"></marker>
Turns on or off scheduler wall time measurements.</p>
@@ -6628,7 +6802,7 @@ ok
</func>
<func>
- <name name="system_flag" arity="2" clause_i="11"/>
+ <name name="system_flag" arity="2" clause_i="12"/>
<fsummary>Sets system flag <c>schedulers_online</c>.</fsummary>
<desc>
<p><marker id="system_flag_schedulers_online"></marker>
@@ -6653,7 +6827,7 @@ ok
</func>
<func>
- <name name="system_flag" arity="2" clause_i="12"/>
+ <name name="system_flag" arity="2" clause_i="13"/>
<fsummary>Sets system flag <c>trace_control_word</c>.</fsummary>
<desc>
<p>Sets the value of the node trace control word to
@@ -6667,7 +6841,7 @@ ok
</func>
<func>
- <name name="system_flag" arity="2" clause_i="12"/>
+ <name name="system_flag" arity="2" clause_i="14"/>
<fsummary>Finalize the Time Offset</fsummary>
<desc>
<p><marker id="system_flag_time_offset"></marker>
@@ -6784,11 +6958,7 @@ ok
As from <c>ERTS</c> 5.6.1, the return value is a list
of <c>{instance, InstanceNo, InstanceInfo}</c> tuples,
where <c>InstanceInfo</c> contains information about
- a specific instance of the allocator. As from
- <c>ERTS</c> 5.10.4, the returned list when calling
- <c>erlang:system_info({allocator, mseg_alloc})</c> also
- includes an <c>{erts_mmap, _}</c> tuple as one element
- in the list. If <c><anno>Alloc</anno></c> is not a
+ a specific instance of the allocator. If <c><anno>Alloc</anno></c> is not a
recognized allocator, <c>undefined</c> is returned.
If <c><anno>Alloc</anno></c> is disabled,
<c>false</c> is returned.</p>
@@ -6800,7 +6970,13 @@ ok
briefly documented.</p>
<p>The recognized allocators are listed in
<seealso marker="erts:erts_alloc">erts_alloc(3)</seealso>.
- After reading the <c>erts_alloc(3)</c> documentation,
+ Information about super carriers can be obtained from
+ <c>ERTS</c> 8.0 with <c>{allocator, erts_mmap}</c> or from
+ <c>ERTS</c> 5.10.4, the returned list when calling with
+ <c>{allocator, mseg_alloc}</c> also includes an
+ <c>{erts_mmap, _}</c> tuple as one element in the list.</p>
+
+ <p>After reading the <c>erts_alloc(3)</c> documentation,
the returned information
more or less speaks for itself, but it can be worth
explaining some things. Call counts are presented by two
@@ -6932,6 +7108,81 @@ ok
</func>
<func>
+ <name name="system_info" arity="1" clause_i="27"/>
+ <name name="system_info" arity="1" clause_i="28"/>
+ <name name="system_info" arity="1" clause_i="36"/>
+ <name name="system_info" arity="1" clause_i="37"/>
+ <name name="system_info" arity="1" clause_i="38"/>
+ <name name="system_info" arity="1" clause_i="39"/>
+ <type name="message_queue_data"/>
+ <type name="max_heap_size"/>
+ <fsummary>Information about the default process heap settings.</fsummary>
+ <desc>
+ <taglist>
+ <tag><c>fullsweep_after</c></tag>
+ <item>
+ <p>Returns <c>{fullsweep_after, integer() >= 0}</c>, which is
+ the <c>fullsweep_after</c> garbage collection setting used
+ by default. For more information, see
+ <c>garbage_collection</c> described in the following.</p>
+ </item>
+ <tag><c>garbage_collection</c></tag>
+ <item>
+ <p>Returns a list describing the default garbage collection
+ settings. A process spawned on the local node by a
+ <c>spawn</c> or <c>spawn_link</c> uses these
+ garbage collection settings. The default settings can be
+ changed by using
+ <seealso marker="#system_flag/2">system_flag/2</seealso>.
+ <seealso marker="#spawn_opt/4">spawn_opt/4</seealso>
+ can spawn a process that does not use the default
+ settings.</p>
+ </item>
+ <tag><c>max_heap_size</c></tag>
+ <item>
+ <p>Returns <c>{max_heap_size, <anno>MaxHeapSize</anno>}</c>,
+ where <c><anno>MaxHeapSize</anno></c> is the current
+ system-wide max heap size settings for spawned processes.
+ This setting can be set using the <c>erl</c> command line
+ flags <seealso marker="erl#+hmax"><c>+hmax</c></seealso>,
+ <seealso marker="erl#+hmaxk"><c>+hmaxk</c></seealso> and
+ <seealso marker="erl#+hmaxel"><c>+hmaxel</c></seealso>. It can
+ also be changed at run-time using
+ <seealso marker="#system_flag_max_heap_size">
+ <c>erlang:system_flag(max_heap_size, MaxHeapSize)</c></seealso>.
+ For more details about the <c>max_heap_size</c> process flag
+ see <seealso marker="#process_flag_max_heap_size">
+ <c>process_flag(max_heap_size, MaxHeapSize)</c></seealso>.
+ </p>
+ </item>
+ <tag><c>min_heap_size</c></tag>
+ <item>
+ <p>Returns <c>{min_heap_size, <anno>MinHeapSize</anno>}</c>,
+ where <c><anno>MinHeapSize</anno></c> is the current
+ system-wide minimum heap size for spawned processes.</p>
+ </item>
+ <tag><marker id="system_info_message_queue_data"><c>message_queue_data</c></marker></tag>
+ <item>
+ <p>Returns the default value of the <c>message_queue_data</c>
+ process flag which is either <c>off_heap</c>, <c>on_heap</c>, or <c>mixed</c>.
+ This default is set by the <c>erl</c> command line argument
+ <seealso marker="erl#+hmqd"><c>+hmqd</c></seealso>. For more information on the
+ <c>message_queue_data</c> process flag, see documentation of
+ <seealso marker="#process_flag_message_queue_data"><c>process_flag(message_queue_data,
+ MQD)</c></seealso>.</p>
+ </item>
+ <tag><c>min_bin_vheap_size</c></tag>
+ <item>
+ <p>Returns <c>{min_bin_vheap_size,
+ <anno>MinBinVHeapSize</anno>}</c>, where
+ <c><anno>MinBinVHeapSize</anno></c> is the current system-wide
+ minimum binary virtual heap size for spawned processes.</p>
+ </item>
+ </taglist>
+ </desc>
+ </func>
+
+ <func>
<name name="system_info" arity="1" clause_i="6"/>
<name name="system_info" arity="1" clause_i="7"/>
<name name="system_info" arity="1" clause_i="8"/>
@@ -6951,8 +7202,6 @@ ok
<name name="system_info" arity="1" clause_i="24"/>
<name name="system_info" arity="1" clause_i="25"/>
<name name="system_info" arity="1" clause_i="26"/>
- <name name="system_info" arity="1" clause_i="27"/>
- <name name="system_info" arity="1" clause_i="28"/>
<name name="system_info" arity="1" clause_i="29"/>
<name name="system_info" arity="1" clause_i="30"/>
<name name="system_info" arity="1" clause_i="31"/>
@@ -6960,10 +7209,6 @@ ok
<name name="system_info" arity="1" clause_i="33"/>
<name name="system_info" arity="1" clause_i="34"/>
<name name="system_info" arity="1" clause_i="35"/>
- <name name="system_info" arity="1" clause_i="36"/>
- <name name="system_info" arity="1" clause_i="37"/>
- <name name="system_info" arity="1" clause_i="38"/>
- <name name="system_info" arity="1" clause_i="39"/>
<name name="system_info" arity="1" clause_i="40"/>
<name name="system_info" arity="1" clause_i="41"/>
<name name="system_info" arity="1" clause_i="42"/>
@@ -6993,6 +7238,7 @@ ok
<name name="system_info" arity="1" clause_i="66"/>
<name name="system_info" arity="1" clause_i="67"/>
<name name="system_info" arity="1" clause_i="68"/>
+ <name name="system_info" arity="1" clause_i="69"/>
<fsummary>Information about the system.</fsummary>
<desc>
<p>Returns various information about the current system
@@ -7229,25 +7475,6 @@ ok
<c>ERL_MAX_ETS_TABLES</c> before starting the Erlang
runtime system.</p>
</item>
- <tag><c>fullsweep_after</c></tag>
- <item>
- <p>Returns <c>{fullsweep_after, integer() >= 0}</c>, which is
- the <c>fullsweep_after</c> garbage collection setting used
- by default. For more information, see
- <c>garbage_collection</c> described in the following.</p>
- </item>
- <tag><c>garbage_collection</c></tag>
- <item>
- <p>Returns a list describing the default garbage collection
- settings. A process spawned on the local node by a
- <c>spawn</c> or <c>spawn_link</c> uses these
- garbage collection settings. The default settings can be
- changed by using
- <seealso marker="#system_flag/2">system_flag/2</seealso>.
- <seealso marker="#spawn_opt/4">spawn_opt/4</seealso>
- can spawn a process that does not use the default
- settings.</p>
- </item>
<tag><c>heap_sizes</c></tag>
<item>
<p>Returns a list of integers representing valid heap sizes
@@ -7322,19 +7549,6 @@ ok
<item>
<p>Returns a string containing the Erlang machine name.</p>
</item>
- <tag><c>min_heap_size</c></tag>
- <item>
- <p>Returns <c>{min_heap_size, <anno>MinHeapSize</anno>}</c>,
- where <c><anno>MinHeapSize</anno></c> is the current
- system-wide minimum heap size for spawned processes.</p>
- </item>
- <tag><c>min_bin_vheap_size</c></tag>
- <item>
- <p>Returns <c>{min_bin_vheap_size,
- <anno>MinBinVHeapSize</anno>}</c>, where
- <c><anno>MinBinVHeapSize</anno></c> is the current system-wide
- minimum binary virtual heap size for spawned processes.</p>
- </item>
<tag><c>modified_timing_level</c></tag>
<item>
<p>Returns the modified timing-level (an integer) if
@@ -7347,7 +7561,8 @@ ok
<tag><c>multi_scheduling</c></tag>
<item>
<marker id="system_info_multi_scheduling"></marker>
- <p>Returns <c>disabled</c>, <c>blocked</c>, or <c>enabled</c>:</p>
+ <p>Returns <c>disabled</c>, <c>blocked</c>, <c>blocked_normal</c>,
+ or <c>enabled</c>:</p>
<taglist>
<tag><c>disabled</c></tag>
<item>
@@ -7358,14 +7573,22 @@ ok
<tag><c>blocked</c></tag>
<item>
<p>The emulator has more than one scheduler thread,
- but all scheduler threads except one are blocked,
- that is, only one scheduler thread schedules
+ but all scheduler threads except one are blocked.
+ That is, only one scheduler thread schedules
Erlang processes and executes Erlang code.</p>
</item>
+ <tag><c>blocked_normal</c></tag>
+ <item>
+ <p>The emulator has more than one scheduler thread,
+ but all normal scheduler threads except one are
+ blocked. Note that dirty schedulers are not
+ blocked, and may schedule Erlang processes and
+ execute native code.</p>
+ </item>
<tag><c>enabled</c></tag>
<item>
<p>The emulator has more than one scheduler thread,
- and no scheduler threads are blocked, that is,
+ and no scheduler threads are blocked. That is,
all available scheduler threads schedule
Erlang processes and execute Erlang code.</p>
</item>
@@ -7373,6 +7596,7 @@ ok
<p>See also
<seealso marker="#system_flag_multi_scheduling">erlang:system_flag(multi_scheduling, BlockState)</seealso>,
<seealso marker="#system_info_multi_scheduling_blockers">erlang:system_info(multi_scheduling_blockers)</seealso>,
+ <seealso marker="#system_info_normal_multi_scheduling_blockers">erlang:system_info(normal_multi_scheduling_blockers)</seealso>,
and
<seealso marker="#system_info_schedulers">erlang:system_info(schedulers)</seealso>.</p>
</item>
@@ -7389,6 +7613,8 @@ ok
<p>See also
<seealso marker="#system_flag_multi_scheduling">erlang:system_flag(multi_scheduling, BlockState)</seealso>,
<seealso marker="#system_info_multi_scheduling">erlang:system_info(multi_scheduling)</seealso>,
+ <seealso marker="#system_info_normal_multi_scheduling_blockers">erlang:system_info(normal_multi_scheduling_blockers)</seealso>,
+
and
<seealso marker="#system_info_schedulers">erlang:system_info(schedulers)</seealso>.</p>
</item>
@@ -7398,15 +7624,23 @@ ok
used by the runtime system. It is on the form
"&lt;major ver&gt;.&lt;minor ver&gt;".</p>
</item>
- <tag><marker id="system_info_message_queue_data"><c>message_queue_data</c></marker></tag>
+ <tag><c>normal_multi_scheduling_blockers</c></tag>
<item>
- <p>Returns the default value of the <c>message_queue_data</c>
- process flag which is either <c>off_heap</c>, <c>on_heap</c>, or <c>mixed</c>.
- This default is set by the <c>erl</c> command line argument
- <seealso marker="erl#+xmqd"><c>+xmqd</c></seealso>. For more information on the
- <c>message_queue_data</c> process flag, see documentation of
- <seealso marker="#process_flag_message_queue_data"><c>process_flag(message_queue_data,
- MQD)</c></seealso>.</p>
+ <marker id="system_info_normal_multi_scheduling_blockers"></marker>
+ <p>Returns a list of <c><anno>Pid</anno></c>s when
+ normal multi-scheduling is blocked (i.e. all normal schedulers
+ but one is blocked), otherwise the empty list is returned.
+ The <c><anno>Pid</anno></c>s in the list represent all the
+ processes currently blocking normal multi-scheduling.
+ A <c><anno>Pid</anno></c> occurs only once in the list, even if
+ the corresponding process has blocked multiple times.</p>
+ <p>See also
+ <seealso marker="#system_flag_multi_scheduling">erlang:system_flag(multi_scheduling, BlockState)</seealso>,
+ <seealso marker="#system_info_multi_scheduling">erlang:system_info(multi_scheduling)</seealso>,
+ <seealso marker="#system_info_multi_scheduling_blockers">erlang:system_info(multi_scheduling_blockers)</seealso>,
+
+ and
+ <seealso marker="#system_info_schedulers">erlang:system_info(schedulers)</seealso>.</p>
</item>
<tag><marker id="system_info_otp_release"><c>otp_release</c></marker></tag>
<item>
@@ -7649,6 +7883,7 @@ ok
<seealso marker="#system_info_scheduler_id">erlang:system_info(scheduler_id)</seealso>,
<seealso marker="#system_flag_multi_scheduling">erlang:system_flag(multi_scheduling, BlockState)</seealso>,
<seealso marker="#system_info_multi_scheduling">erlang:system_info(multi_scheduling)</seealso>,
+ <seealso marker="#system_info_normal_multi_scheduling_blockers">erlang:system_info(normal_multi_scheduling_blockers)</seealso>
and
<seealso marker="#system_info_multi_scheduling_blockers">erlang:system_info(multi_scheduling_blockers)</seealso>.</p>
</item>
@@ -7880,7 +8115,7 @@ ok
<c>stack_size</c>, <c>mbuf_size</c>, <c>old_heap_size</c>,
and <c>old_heap_block_size</c>. These tuples are
explained in the description of trace message
- <seealso marker="#gc_start">gc_start</seealso> (see
+ <seealso marker="#gc_minor_start">gc_minor_start</seealso> (see
<seealso marker="#trace/3">erlang:trace/3</seealso>).
New tuples can be added, and the order of the tuples in
the <c>Info</c> list can be changed at any time without
@@ -7938,12 +8173,13 @@ ok
<c>GcPid</c> and <c>Info</c>
are the same as for <c>long_gc</c> earlier, except that
the tuple tagged with <c>timeout</c> is not present.</p>
- <p>As of <c>ERTS</c> 5.6, the monitor message is sent
- if the sum of the sizes of all memory blocks allocated
- for all heap generations is equal to or higher than <c>Size</c>.
- Previously the monitor message was sent if the memory block
- allocated for the youngest generation was equal to or higher
- than <c>Size</c>.</p>
+ <p>The monitor message is sent if the sum of the sizes of
+ all memory blocks allocated for all heap generations after
+ a garbage collection is equal to or higher than <c>Size</c>.</p>
+ <p>When a process is killed by <seealso marker="#process_flag_max_heap_size">
+ <c>max_heap_size</c></seealso>, it is killed before the
+ garbage collection is complete and thus no large heap message
+ will be sent.</p>
</item>
<tag><c>busy_port</c></tag>
<item>
@@ -8303,22 +8539,47 @@ timestamp() ->
<c><anno>How</anno> == false</c>) the trace flags in
<c><anno>FlagList</anno></c> for
the process or processes represented by
- <c><anno>PidSpec</anno></c>.</p>
- <p><c><anno>PidSpec</anno></c> is either a process identifier
- (pid) for a local process, or one of the following atoms:</p>
+ <c><anno>PidPortSpec</anno></c>.</p>
+ <p><c><anno>PidPortSpec</anno></c> is either a process identifier
+ (pid) for a local process, a port identifier,
+ or one of the following atoms:</p>
<taglist>
+ <tag><c>all</c></tag>
+ <item>
+ <p>All currently existing processes and ports and all that
+ will be created in the future.</p>
+ </item>
+ <tag><c>processes</c></tag>
+ <item>
+ <p>All currently existing processes and all that will be created in the future.</p>
+ </item>
+ <tag><c>ports</c></tag>
+ <item>
+ <p>All currently existing ports and all that will be created in the future.</p>
+ </item>
<tag><c>existing</c></tag>
<item>
+ <p>All currently existing processes and ports.</p>
+ </item>
+ <tag><c>existing_processes</c></tag>
+ <item>
<p>All currently existing processes.</p>
</item>
+ <tag><c>existing_ports</c></tag>
+ <item>
+ <p>All currently existing ports.</p>
+ </item>
<tag><c>new</c></tag>
<item>
- <p>All processes that are created in the future.</p>
+ <p>All processes and ports that will be created in the future.</p>
</item>
- <tag><c>all</c></tag>
+ <tag><c>new_processes</c></tag>
<item>
- <p>All currently existing processes and all processes that
- are created in the future.</p>
+ <p>All processes that will be created in the future.</p>
+ </item>
+ <tag><c>new_ports</c></tag>
+ <item>
+ <p>All ports that will be created in the future.</p>
</item>
</taglist>
<p><c><anno>FlagList</anno></c> can contain any number of the
@@ -8327,35 +8588,28 @@ timestamp() ->
<taglist>
<tag><c>all</c></tag>
<item>
- <p>Sets all trace flags except <c>{tracer, Tracer}</c> and
+ <p>Sets all trace flags except <c>tracer</c> and
<c>cpu_timestamp</c>, which are in their nature different
than the others.</p>
</item>
<tag><c>send</c></tag>
<item>
<p>Traces sending of messages.</p>
- <p>Message tags: <c>send</c> and
- <c>send_to_non_existing_process</c>.</p>
+ <p>Message tags: <c><seealso marker="#trace_3_trace_messages_send">send</seealso></c> and
+ <c><seealso marker="#trace_3_trace_messages_send_to_non_existing_process">send_to_non_existing_process</seealso></c>.</p>
</item>
<tag><c>'receive'</c></tag>
<item>
<p>Traces receiving of messages.</p>
- <p>Message tags: <c>'receive'</c>.</p>
+ <p>Message tags: <c><seealso marker="#trace_3_trace_messages_receive">'receive'</seealso></c>.</p>
</item>
- <tag><c>procs</c></tag>
- <item>
- <p>Traces process-related events.</p>
- <p>Message tags: <c>spawn</c>, <c>exit</c>,
- <c>register</c>, <c>unregister</c>, <c>link</c>,
- <c>unlink</c>, <c>getting_linked</c>, and
- <c>getting_unlinked</c>.</p>
- </item>
- <tag><c>call</c></tag>
+<tag><c>call</c></tag>
<item>
<p>Traces certain function calls. Specify which function
calls to trace by calling
<seealso marker="#trace_pattern/3">erlang:trace_pattern/3</seealso>.</p>
- <p>Message tags: <c>call</c> and <c>return_from</c>.</p>
+ <p>Message tags: <c><seealso marker="#trace_3_trace_messages_call">call</seealso></c> and
+ <c><seealso marker="#trace_3_trace_messages_return_from">return_from</seealso></c>.</p>
</item>
<tag><c>silent</c></tag>
<item>
@@ -8373,8 +8627,9 @@ timestamp() ->
specification function <c>{silent,Bool}</c>, giving
a high degree of control of which functions with which
arguments that trigger the trace.</p>
- <p>Message tags: <c>call</c>, <c>return_from</c>, and
- <c>return_to</c>. Or rather, the absence of.</p>
+ <p>Message tags: <c><seealso marker="#trace_3_trace_messages_call">call</seealso></c>,
+ <c><seealso marker="#trace_3_trace_messages_return_from">return_from</seealso></c>, and
+ <c><seealso marker="#trace_3_trace_messages_return_to">return_to</seealso></c>. Or rather, the absence of.</p>
</item>
<tag><c>return_to</c></tag>
<item>
@@ -8395,23 +8650,65 @@ timestamp() ->
<p>To get trace messages containing return values from
functions, use the <c>{return_trace}</c> match
specification action instead.</p>
- <p>Message tags: <c>return_to</c>.</p>
+ <p>Message tags: <c><seealso marker="#trace_3_trace_messages_return_to">return_to</seealso></c>.</p>
+ </item>
+ <tag><c>procs</c></tag>
+ <item>
+ <p>Traces process-related events.</p>
+ <p>Message tags: <c><seealso marker="#trace_3_trace_messages_spawn">spawn</seealso></c>,
+ <c><seealso marker="#trace_3_trace_messages_spawned">spawned</seealso></c>,
+ <c><seealso marker="#trace_3_trace_messages_exit">exit</seealso></c>,
+ <c><seealso marker="#trace_3_trace_messages_register">register</seealso></c>,
+ <c><seealso marker="#trace_3_trace_messages_unregister">unregister</seealso></c>,
+ <c><seealso marker="#trace_3_trace_messages_link">link</seealso></c>,
+ <c><seealso marker="#trace_3_trace_messages_unlink">unlink</seealso></c>,
+ <c><seealso marker="#trace_3_trace_messages_getting_linked">getting_linked</seealso></c>, and
+ <c><seealso marker="#trace_3_trace_messages_getting_unlinked">getting_unlinked</seealso></c>.</p>
+ </item>
+ <tag><c>ports</c></tag>
+ <item>
+ <p>Traces port-related events.</p>
+ <p>Message tags: <c><seealso marker="#trace_3_trace_messages_open">open</seealso></c>,
+ <c><seealso marker="#trace_3_trace_messages_closed">closed</seealso></c>,
+ <c><seealso marker="#trace_3_trace_messages_register">register</seealso></c>,
+ <c><seealso marker="#trace_3_trace_messages_unregister">unregister</seealso></c>,
+ <c><seealso marker="#trace_3_trace_messages_getting_linked">getting_linked</seealso></c>, and
+ <c><seealso marker="#trace_3_trace_messages_getting_unlinked">getting_unlinked</seealso></c>.</p>
</item>
<tag><c>running</c></tag>
<item>
<p>Traces scheduling of processes.</p>
- <p>Message tags: <c>in</c> and <c>out</c>.</p>
+ <p>Message tags: <c><seealso marker="#trace_3_trace_messages_in_proc">in</seealso></c> and
+ <c><seealso marker="#trace_3_trace_messages_out_proc">out</seealso></c>.</p>
</item>
<tag><c>exiting</c></tag>
<item>
<p>Traces scheduling of exiting processes.</p>
- <p>Message tags: <c>in_exiting</c>, <c>out_exiting</c>, and
- <c>out_exited</c>.</p>
+ <p>Message tags: <c><seealso marker="#trace_3_trace_messages_in_exiting_proc">in_exiting</seealso></c>,
+ <c><seealso marker="#trace_3_trace_messages_out_exiting_proc">out_exiting</seealso></c>, and
+ <c><seealso marker="#trace_3_trace_messages_out_exited_proc">out_exited</seealso></c>.</p>
+ </item>
+ <tag><c>running_procs</c></tag>
+ <item>
+ <p>Traces scheduling of processes just like <c>running</c>.
+ However this option also includes schedule events when the
+ process executes within the context of a port without
+ being scheduled out itself.</p>
+ <p>Message tags: <c><seealso marker="#trace_3_trace_messages_in_proc">in</seealso></c> and
+ <c><seealso marker="#trace_3_trace_messages_out_proc">out</seealso></c>.</p>
+ </item>
+ <tag><c>running_ports</c></tag>
+ <item>
+ <p>Traces scheduling of ports.</p>
+ <p>Message tags: <c><seealso marker="#trace_3_trace_messages_in_port">in</seealso></c> and
+ <c><seealso marker="#trace_3_trace_messages_out_port">out</seealso></c>.</p>
</item>
<tag><c>garbage_collection</c></tag>
<item>
<p>Traces garbage collections of processes.</p>
- <p>Message tags: <c>gc_start</c> and <c>gc_end</c>.</p>
+ <p>Message tags: <c><seealso marker="#trace_3_trace_messages_gc_minor_start">gc_minor_start</seealso></c>,
+ <c><seealso marker="#trace_3_trace_messages_gc_max_heap_size">gc_max_heap_size</seealso></c> and
+ <c><seealso marker="#trace_3_trace_messages_gc_minor_end">gc_minor_end</seealso></c>.</p>
</item>
<tag><c>timestamp</c></tag>
<item>
@@ -8426,8 +8723,8 @@ timestamp() ->
in CPU time, not wall clock time. That is, <c>cpu_timestamp</c>
will not be used if <c>monotonic_timestamp</c>, or
<c>strict_monotonic_timestamp</c> is enabled.
- Only allowed with <c>PidSpec==all</c>. If the host
- machine OS does not support high-resolution
+ Only allowed with <c><anno>PidPortSpec</anno>==all</c>. If the
+ host machine OS does not support high-resolution
CPU time measurements, <c>trace/3</c> exits with
<c>badarg</c>. Notice that most OS do
not synchronize this value across cores, so be prepared
@@ -8439,8 +8736,8 @@ timestamp() ->
<seealso marker="time_correction#Erlang_Monotonic_Time">Erlang
monotonic time</seealso> time-stamp in all trace messages. The
time-stamp (Ts) has the same format and value as produced by
- <c>erlang:monotonic_time(nano_seconds)</c>. This flag overrides
- the <c>cpu_timestamp</c> flag.</p>
+ <c><seealso marker="#monotonic_time-1">erlang:monotonic_time(nano_seconds)</seealso></c>.
+ This flag overrides the <c>cpu_timestamp</c> flag.</p>
</item>
<tag><c>strict_monotonic_timestamp</c></tag>
<item>
@@ -8449,9 +8746,9 @@ timestamp() ->
monotonic time</seealso> and a monotonically increasing
integer in all trace messages. The time-stamp (Ts) has the
same format and value as produced by
- <c>{erlang:monotonic_time(nano_seconds),
- erlang:unique_integer([monotonic])}</c>. This flag overrides
- the <c>cpu_timestamp</c> flag.</p>
+ <c>{<seealso marker="#monotonic_time-1">erlang:monotonic_time(nano_seconds)</seealso>,
+ <seealso marker="#unique_integer-1">erlang:unique_integer([monotonic])</seealso>}</c>.
+ This flag overrides the <c>cpu_timestamp</c> flag.</p>
</item>
<tag><c>arity</c></tag>
<item>
@@ -8485,12 +8782,20 @@ timestamp() ->
<item>
<p>Specifies where to send the trace messages. <c>Tracer</c>
must be the process identifier of a local process
- or the port identifier
- of a local port. If this flag is not given, trace
- messages are sent to the process that called
- <c>erlang:trace/3</c>.</p>
+ or the port identifier of a local port.</p>
+ </item>
+ <tag><c>{tracer, TracerModule, TracerState}</c></tag>
+ <item>
+ <p>Specifies that a tracer module should be called
+ instead of sending a trace message. The tracer module
+ can then ignore or change the trace message. For more details
+ on how to write a tracer module see
+ <seealso marker="erts:erl_tracer"><c>erl_tracer</c></seealso>
+ </p>
</item>
</taglist>
+ <p>If no <c>tracer</c> is given, the calling process
+ will be receiving all of the trace messages</p>
<p>The effect of combining <c>set_on_first_link</c> with
<c>set_on_link</c> is the same as having
<c>set_on_first_link</c> alone. Likewise for
@@ -8511,21 +8816,36 @@ timestamp() ->
the other one will become active.</p>
<marker id="trace_3_trace_messages"></marker>
<taglist>
- <tag><c>{trace, Pid, 'receive', Msg}</c></tag>
- <item>
- <p>When <c>Pid</c> receives message <c>Msg</c>.</p>
- </item>
- <tag><c>{trace, Pid, send, Msg, To}</c></tag>
+ <tag>
+ <marker id="trace_3_trace_messages_send"></marker>
+ <c>{trace, PidPort, send, Msg, To}</c>
+ </tag>
<item>
- <p>When <c>Pid</c> sends message <c>Msg</c> to
+ <p>When <c>PidPort</c> sends message <c>Msg</c> to
process <c>To</c>.</p>
</item>
- <tag><c>{trace, Pid, send_to_non_existing_process, Msg, To}</c></tag>
+ <tag>
+ <marker id="trace_3_trace_messages_send_to_non_existing_process"></marker>
+ <c>{trace, PidPort, send_to_non_existing_process, Msg, To}</c>
+ </tag>
<item>
- <p>When <c>Pid</c> sends message <c>Msg</c> to
+ <p>When <c>PidPort</c> sends message <c>Msg</c> to
the non-existing process <c>To</c>.</p>
</item>
- <tag><c>{trace, Pid, call, {M, F, Args}}</c></tag>
+ <tag>
+ <marker id="trace_3_trace_messages_receive"></marker>
+ <c>{trace, PidPort, 'receive', Msg}</c>
+ </tag>
+ <item>
+ <p>When <c>PidPort</c> receives message <c>Msg</c>.
+ If <c>Msg</c> is set to timeout, then a receive
+ statement may have timedout, or the process received
+ a message with the payload <c>timeout</c>.</p>
+ </item>
+ <tag>
+ <marker id="trace_3_trace_messages_call"></marker>
+ <c>{trace, Pid, call, {M, F, Args}}</c>
+ </tag>
<item>
<p>When <c>Pid</c> calls a traced function. The return
values of calls are never supplied, only the call and its
@@ -8534,7 +8854,10 @@ timestamp() ->
change the contents of this message, so that <c>Arity</c>
is specified instead of <c>Args</c>.</p>
</item>
- <tag><c>{trace, Pid, return_to, {M, F, Arity}}</c></tag>
+ <tag>
+ <marker id="trace_3_trace_messages_return_to"></marker>
+ <c>{trace, Pid, return_to, {M, F, Arity}}</c>
+ </tag>
<item>
<p>When <c>Pid</c> returns <em>to</em> the specified
function. This trace message is sent if both
@@ -8546,76 +8869,175 @@ timestamp() ->
(that is, the functions match specification matched, and
<c>{message, false}</c> was not an action).</p>
</item>
- <tag><c>{trace, Pid, return_from, {M, F, Arity}, ReturnValue}</c></tag>
+ <tag>
+ <marker id="trace_3_trace_messages_return_from"></marker>
+ <c>{trace, Pid, return_from, {M, F, Arity}, ReturnValue}</c>
+ </tag>
<item>
<p>When <c>Pid</c> returns <em>from</em> the specified
function. This trace message is sent if flag <c>call</c>
is set, and the function has a match specification
with a <c>return_trace</c> or <c>exception_trace</c> action.</p>
</item>
- <tag><c>{trace, Pid, exception_from, {M, F, Arity}, {Class, Value}}</c></tag>
+ <tag>
+ <marker id="trace_3_trace_messages_exception_from"></marker>
+ <c>{trace, Pid, exception_from, {M, F, Arity}, {Class, Value}}</c>
+ </tag>
<item>
<p>When <c>Pid</c> exits <em>from</em> the specified
function because of an exception. This trace message is
sent if flag <c>call</c> is set, and the function has
a match specification with an <c>exception_trace</c> action.</p>
</item>
- <tag><c>{trace, Pid, spawn, Pid2, {M, F, Args}}</c></tag>
+ <tag>
+ <marker id="trace_3_trace_messages_spawn"></marker>
+ <c>{trace, Pid, spawn, Pid2, {M, F, Args}}</c>
+ </tag>
<item>
<p>When <c>Pid</c> spawns a new process <c>Pid2</c> with
the specified function call as entry point.</p>
<p><c>Args</c> is supposed to be the argument list,
but can be any term if the spawn is erroneous.</p>
</item>
- <tag><c>{trace, Pid, exit, Reason}</c></tag>
+ <tag>
+ <marker id="trace_3_trace_messages_spawned"></marker>
+ <c>{trace, Pid, spawned, Pid2, {M, F, Args}}</c>
+ </tag>
+ <item>
+ <p>When <c>Pid</c> is spawned by process <c>Pid2</c> with
+ the specified function call as entry point.</p>
+ <p><c>Args</c> is supposed to be the argument list,
+ but can be any term if the spawn is erroneous.</p>
+ </item>
+ <tag>
+ <marker id="trace_3_trace_messages_exit"></marker>
+ <c>{trace, Pid, exit, Reason}</c>
+ </tag>
<item>
<p>When <c>Pid</c> exits with reason <c>Reason</c>.</p>
</item>
- <tag><c>{trace, Pid, link, Pid2}</c></tag>
+ <tag>
+ <marker id="trace_3_trace_messages_register"></marker>
+ <c>{trace, PidPort, register, RegName}</c>
+ </tag>
+ <item>
+ <p>When <c>PidPort</c> gets the name <c>RegName</c> registered.</p>
+ </item>
+ <tag>
+ <marker id="trace_3_trace_messages_unregister"></marker>
+ <c>{trace, PidPort, unregister, RegName}</c>
+ </tag>
+ <item>
+ <p>When <c>PidPort</c> gets the name <c>RegName</c> unregistered.
+ This is done automatically when a registered
+ process or port exits.</p>
+ </item>
+ <tag>
+ <marker id="trace_3_trace_messages_link"></marker>
+ <c>{trace, Pid, link, Pid2}</c>
+ </tag>
<item>
<p>When <c>Pid</c> links to a process <c>Pid2</c>.</p>
</item>
- <tag><c>{trace, Pid, unlink, Pid2}</c></tag>
+ <tag>
+ <marker id="trace_3_trace_messages_unlink"></marker>
+ <c>{trace, Pid, unlink, Pid2}</c>
+ </tag>
<item>
<p>When <c>Pid</c> removes the link from a process
<c>Pid2</c>.</p>
</item>
- <tag><c>{trace, Pid, getting_linked, Pid2}</c></tag>
+ <tag>
+ <marker id="trace_3_trace_messages_getting_linked"></marker>
+ <c>{trace, PidPort, getting_linked, Pid2}</c>
+ </tag>
<item>
- <p>When <c>Pid</c> gets linked to a process <c>Pid2</c>.</p>
+ <p>When <c>PidPort</c> gets linked to a process <c>Pid2</c>.</p>
</item>
- <tag><c>{trace, Pid, getting_unlinked, Pid2}</c></tag>
+ <tag>
+ <marker id="trace_3_trace_messages_getting_unlinked"></marker>
+ <c>{trace, PidPort, getting_unlinked, Pid2}</c>
+ </tag>
<item>
- <p>When <c>Pid</c> gets unlinked from a process <c>Pid2</c>.</p>
+ <p>When <c>PidPort</c> gets unlinked from a process <c>Pid2</c>.</p>
</item>
- <tag><c>{trace, Pid, register, RegName}</c></tag>
+ <tag>
+ <marker id="trace_3_trace_messages_exit"></marker>
+ <c>{trace, Pid, exit, Reason}</c>
+ </tag>
<item>
- <p>When <c>Pid</c> gets the name <c>RegName</c> registered.</p>
+ <p>When <c>Pid</c> exits with reason <c>Reason</c>.</p>
</item>
- <tag><c>{trace, Pid, unregister, RegName}</c></tag>
+ <tag>
+ <marker id="trace_3_trace_messages_open"></marker>
+ <c>{trace, Port, open, Pid, Driver}</c>
+ </tag>
<item>
- <p>When <c>Pid</c> gets the name <c>RegName</c> unregistered.
- This is done automatically when a registered
- process exits.</p>
+ <p>When <c>Pid</c> opens a new port <c>Port</c> with
+ the running the <c>Driver</c>.</p>
+ <p><c>Driver</c> is the name of the driver as an atom.</p>
+ </item>
+ <tag>
+ <marker id="trace_3_trace_messages_closed"></marker>
+ <c>{trace, Port, closed, Reason}</c>
+ </tag>
+ <item>
+ <p>When <c>Port</c> closed with <c>Reason</c>.</p>
</item>
- <tag><c>{trace, Pid, in, {M, F, Arity} | 0}</c></tag>
+ <tag>
+ <marker id="trace_3_trace_messages_in_proc"></marker>
+ <marker id="trace_3_trace_messages_in_exiting_proc"></marker>
+ <c>{trace, Pid, in | in_exiting, {M, F, Arity} | 0}</c>
+ </tag>
<item>
<p>When <c>Pid</c> is scheduled to run. The process
runs in function <c>{M, F, Arity}</c>. On some rare
occasions, the current function cannot be determined,
then the last element is <c>0</c>.</p>
</item>
- <tag><c>{trace, Pid, out, {M, F, Arity} | 0}</c></tag>
+ <tag>
+ <marker id="trace_3_trace_messages_out_proc"></marker>
+ <marker id="trace_3_trace_messages_out_exiting_proc"></marker>
+ <marker id="trace_3_trace_messages_out_exited_proc"></marker>
+ <c>{trace, Pid, out | out_exiting | out_exited, {M, F, Arity} | 0}</c>
+ </tag>
<item>
<p>When <c>Pid</c> is scheduled out. The process was
running in function {M, F, Arity}. On some rare occasions,
the current function cannot be determined, then the last
element is <c>0</c>.</p>
</item>
- <tag><c>{trace, Pid, gc_start, Info}</c></tag>
+ <tag>
+ <marker id="trace_3_trace_messages_in_port"></marker>
+ <c>{trace, Port, in, Command | 0}</c>
+ </tag>
+ <item>
+ <p>When <c>Port</c> is scheduled to run. <c>Command</c> is the
+ first thing the port will execute, it may however run several
+ commands before being scheduled out. On some rare
+ occasions, the current function cannot be determined,
+ then the last element is <c>0</c>.</p>
+ <p>The possible commands are: <c>call | close | command | connect | control | flush | info | link | open | unlink</c></p>
+ </item>
+ <tag>
+ <marker id="trace_3_trace_messages_out_port"></marker>
+ <c>{trace, Port, out, Command | 0}</c>
+ </tag>
+ <item>
+ <p>When <c>Port</c> is scheduled out. The last command run
+ was <c>Command</c>. On some rare occasions,
+ the current function cannot be determined, then the last
+ element is <c>0</c>. <c>Command</c> can contain the same
+ commands as <c>in</c>
+ </p>
+ </item>
+ <tag>
+ <marker id="trace_3_trace_messages_gc_minor_start"></marker>
+ <c>{trace, Pid, gc_minor_start, Info}</c>
+ </tag>
<item>
- <marker id="gc_start"></marker>
- <p>Sent when garbage collection is about to be started.
+ <marker id="gc_minor_start"></marker>
+ <p>Sent when a young garbage collection is about to be started.
<c>Info</c> is a list of two-element tuples, where
the first element is a key, and the second is the value.
Do not depend on any order of the tuples.
@@ -8654,26 +9076,59 @@ timestamp() ->
</taglist>
<p>All sizes are in words.</p>
</item>
- <tag><c>{trace, Pid, gc_end, Info}</c></tag>
+ <tag>
+ <marker id="trace_3_trace_messages_gc_max_heap_size"></marker>
+ <c>{trace, Pid, gc_max_heap_size, Info}</c>
+ </tag>
+ <item>
+ <p>
+ Sent when the <seealso marker="#process_flag_max_heap_size"><c>max_heap_size</c></seealso>
+ is reached during garbage collection. <c>Info</c> contains the
+ same kind of list as in message <c>gc_start</c>,
+ but the sizes reflect the sizes that triggered max_heap_size to
+ be reached.
+ </p>
+ </item>
+ <tag>
+ <marker id="trace_3_trace_messages_gc_minor_end"></marker>
+ <c>{trace, Pid, gc_minor_end, Info}</c>
+ </tag>
<item>
- <p>Sent when garbage collection is finished. <c>Info</c>
- contains the same kind of list as in message <c>gc_start</c>,
+ <p>Sent when young garbage collection is finished. <c>Info</c>
+ contains the same kind of list as in message <c>gc_minor_start</c>,
but the sizes reflect the new sizes after
garbage collection.</p>
</item>
+ <tag>
+ <marker id="trace_3_trace_messages_gc_major_start"></marker>
+ <c>{trace, Pid, gc_major_start, Info}</c>
+ </tag>
+ <item>
+ <p>Sent when fullsweep garbage collection is about to be started. <c>Info</c>
+ contains the same kind of list as in message <c>gc_minor_start</c>.</p>
+ </item>
+ <tag>
+ <marker id="trace_3_trace_messages_gc_major_end"></marker>
+ <c>{trace, Pid, gc_major_end, Info}</c>
+ </tag>
+ <item>
+ <p>Sent when fullsweep garbage collection is finished. <c>Info</c>
+ contains the same kind of list as in message <c>gc_minor_start</c>
+ but the sizes reflect the new sizes after a fullsweep garbage collection.</p>
+ </item>
</taglist>
- <p>If the tracing process dies, the flags are silently
- removed.</p>
- <p>Only one process can trace a particular process. Therefore,
+ <p>If the tracing process/port dies or the tracer module returns
+ <c>remove</c>, the flags are silently removed.</p>
+ <p>Each process can only be traced by one tracer. Therefore,
attempts to trace an already traced process fail.</p>
<p>Returns: A number indicating the number of processes that
- matched <c><anno>PidSpec</anno></c>.
- If <c><anno>PidSpec</anno></c> is a process
+ matched <c><anno>PidPortSpec</anno></c>.
+ If <c><anno>PidPortSpec</anno></c> is a process
identifier, the return value is <c>1</c>.
- If <c><anno>PidSpec</anno></c>
+ If <c><anno>PidPortSpec</anno></c>
is <c>all</c> or <c>existing</c>, the return value is
- the number of processes running, excluding tracer processes.
- If <c><anno>PidSpec</anno></c> is <c>new</c>, the return value is
+ the number of processes running.
+ If <c><anno>PidPortSpec</anno></c> is <c>new</c>, the return value is
<c>0</c>.</p>
<p>Failure: <c>badarg</c> if the specified arguments are
not supported. For example, <c>cpu_timestamp</c> is not
@@ -8685,7 +9140,11 @@ timestamp() ->
<name name="trace_delivered" arity="1"/>
<fsummary>Notification when trace has been delivered.</fsummary>
<desc>
- <p>The delivery of trace messages is dislocated on the time-line
+ <p>The delivery of trace messages (generated by
+ <seealso marker="#trace/3"><c>erlang:trace/3</c></seealso>,
+ <seealso marker="kernel:seq_trace"><c>seq_trace</c></seealso> or
+ <seealso marker="#system_profile/2"><c>erlang:system_profile/2</c></seealso>)
+ is dislocated on the time-line
compared to other events in the system. If you know that
<c><anno>Tracee</anno></c> has passed some specific point
in its execution,
@@ -8706,13 +9165,16 @@ timestamp() ->
has not been traced by someone, but if this is the case,
<em>no</em> trace messages have been delivered when the
<c>trace_delivered</c> message arrives.</p>
- <p>Notice that that <c><anno>Tracee</anno></c> must refer
+ <p>Notice that <c><anno>Tracee</anno></c> must refer
to a process currently,
or previously existing on the same node as the caller of
<c>erlang:trace_delivered(<anno>Tracee</anno>)</c> resides on.
The special <c><anno>Tracee</anno></c> atom <c>all</c>
- denotes all processes
- that currently are traced in the node.</p>
+ denotes all processes that currently are traced in the node.</p>
+ <p>When used together with an <seealso marker="erts:erl_tracer">
+ Tracer Module</seealso> any message sent in the trace callback
+ is guaranteed to have reached it's recipient before the
+ <c>trace_delivered</c> message is sent.</p>
<p>Example: Process <c>A</c> is <c><anno>Tracee</anno></c>,
port <c>B</c> is tracer, and process <c>C</c> is the port
owner of <c>B</c>. <c>C</c> wants to close <c>B</c> when
@@ -8735,13 +9197,16 @@ timestamp() ->
<type name="trace_info_flag"/>
<type name="trace_match_spec"/>
<desc>
- <p>Returns trace information about a process or function.</p>
- <p>To get information about a process,
- <c><anno>PidOrFunc</anno></c> is to
- be a process identifier (pid) or the atom <c>new</c>.
- The atom <c>new</c> means that the default trace state for
- processes to be created is returned.</p>
- <p>The following <c>Item</c>s are valid:</p>
+ <p>Returns trace information about a port, process, function or event.</p>
+ <p><em>To get information about a port or process</em>,
+ <c><anno>PidPortFuncEvent</anno></c> is to
+ be a process identifier (pid), port identifier or one of
+ the atoms <c>new</c>, <c>new_processes</c>, <c>new_ports</c>.
+ The atom <c>new</c> or <c>new_processes</c> means that the default trace
+ state for processes to be created is returned. The atom <c>new_ports</c>
+ means that the default trace state for ports to be created is returned.
+ </p>
+ <p>The following <c>Item</c>s are valid for ports and processes:</p>
<taglist>
<tag><c>flags</c></tag>
<item>
@@ -8750,24 +9215,30 @@ timestamp() ->
traces are enabled, and one or more of the followings
atoms if traces are enabled: <c>send</c>,
<c>'receive'</c>, <c>set_on_spawn</c>, <c>call</c>,
- <c>return_to</c>, <c>procs</c>, <c>set_on_first_spawn</c>,
- <c>set_on_link</c>, <c>running</c>,
+ <c>return_to</c>, <c>procs</c>, <c>ports</c>, <c>set_on_first_spawn</c>,
+ <c>set_on_link</c>, <c>running</c>, <c>running_procs</c>,
+ <c>running_ports</c>, <c>silent</c>, <c>exiting</c>
+ <c>monotonic_timestamp</c>, <c>strict_monotonic_timestamp</c>,
<c>garbage_collection</c>, <c>timestamp</c>, and
<c>arity</c>. The order is arbitrary.</p>
</item>
<tag><c>tracer</c></tag>
<item>
- <p>Returns the identifier for process or port tracing this
+ <p>Returns the identifier for process, port or a tuple containing
+ the tracer module and tracer state tracing this
process. If this process is not being traced, the return
value is <c>[]</c>.</p>
</item>
</taglist>
- <p>To get information about a function, <c>PidOrFunc</c> is to
+ <p><em>To get information about a function</em>, <c><anno>PidPortFuncEvent</anno></c> is to
be the three-element tuple <c>{Module, Function, Arity}</c> or
the atom <c>on_load</c>. No wild cards are allowed. Returns
<c>undefined</c> if the function does not exist, or
- <c>false</c> if the function is not traced.</p>
- <p>The following <c>Item</c>s are valid::</p>
+ <c>false</c> if the function is not traced. If <c><anno>PidPortFuncEvent</anno></c>
+ is <c>on_load</c>, the information returned refers to
+ the default value for code that will be loaded.</p>
+
+ <p>The following <c>Item</c>s are valid for functions:</p>
<taglist>
<tag><c>traced</c></tag>
<item>
@@ -8786,8 +9257,8 @@ timestamp() ->
</item>
<tag><c>meta</c></tag>
<item>
- <p>Returns the meta-trace tracer process or port for this
- function, if it has one. If the function is not
+ <p>Returns the meta-trace tracer process, port or trace module
+ for this function, if it has one. If the function is not
meta-traced, the returned value is <c>false</c>. If
the function is meta-traced but has once detected that
the tracer process is invalid, the returned value is [].</p>
@@ -8826,39 +9297,177 @@ timestamp() ->
is active for this function.</p>
</item>
</taglist>
+ <p><em>To get information about an event</em>, <c><anno>PidPortFuncEvent</anno></c> is to
+ be one of the atoms <c>send</c> or <c>'receive'</c>.</p>
+ <p>The only valid <c>Item</c> for events is:</p>
+ <taglist>
+ <tag><c>match_spec</c></tag>
+ <item>
+ <p>Returns the match specification for this event, if it
+ has one, or <c>true</c> if no match specification has been
+ set.</p>
+ </item>
+ </taglist>
<p>The return value is <c>{<anno>Item</anno>, Value}</c>, where
<c>Value</c> is the requested information as described earlier.
If a pid for a dead process was given, or the name of a
non-existing function, <c>Value</c> is <c>undefined</c>.</p>
- <p>If <c><anno>PidOrFunc</anno></c> is <c>on_load</c>, the information
- returned refers to the default value for code that will be
- loaded.</p>
</desc>
</func>
<func>
<name name="trace_pattern" arity="2" clause_i="1"/>
- <fsummary>Sets trace patterns for global call tracing.</fsummary>
+ <fsummary>Sets trace patterns for call, send or 'receive' tracing.</fsummary>
<type name="trace_pattern_mfa"/>
<type name="trace_match_spec"/>
<desc>
<p>The same as
- <seealso marker="#trace_pattern/3">erlang:trace_pattern(MFA, MatchSpec, [])</seealso>,
+ <seealso marker="#trace_pattern/3">erlang:trace_pattern(Event, MatchSpec, [])</seealso>,
retained for backward compatibility.</p>
</desc>
</func>
<func>
- <name name="trace_pattern" arity="3"/>
+ <name name="trace_pattern" arity="3" clause_i="1"/>
+ <fsummary>Sets trace pattern for message sending.</fsummary>
+ <type name="trace_match_spec"/>
+ <desc>
+ <p>Sets trace pattern for <em>message sending</em>.
+ Must be combined with
+ <seealso marker="#trace/3">erlang:trace/3</seealso>
+ to set the <c>send</c> trace flag for one or more processes.
+ By default all messages, sent from <c>send</c> traced processes,
+ are traced. Use <c>erlang:trace_pattern/3</c> to limit
+ traced send events based on the message content, the sender
+ and/or the receiver.</p>
+ <p>Argument <c><anno>MatchSpec</anno></c> can take the
+ following forms:</p>
+ <taglist>
+ <tag><c><anno>MatchSpecList</anno></c></tag>
+ <item>
+ <p>A list of match specifications. 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>. An empty list is the same as <c>true</c>.
+ See the users guide section
+ <seealso marker="erts:match_spec">Match Specifications in Erlang</seealso>
+ for more information.</p>
+ </item>
+ <tag><c>true</c></tag>
+ <item>
+ <p>Enables tracing for all sent messages (from <c>send</c>
+ traced processes). Any match specification is
+ removed. <em>This is the default</em>.</p>
+ </item>
+ <tag><c>false</c></tag>
+ <item>
+ <p>Disables tracing for all sent messages.
+ Any match specification is removed.</p>
+ </item>
+ </taglist>
+ <p>Argument <c><anno>FlagList</anno></c> must be <c>[]</c>
+ for send tracing.</p>
+ <p>The return value is always <c>1</c>.</p>
+ <p>Example; only trace messages to a specific process <c>Pid</c>:</p>
+ <pre>
+> <input>erlang:trace_pattern(send, [{[Pid, '_'],[],[]}], []).</input>
+1</pre>
+ <p>Only trace messages matching <c>{reply, _}</c>:</p>
+ <pre>
+> <input>erlang:trace_pattern(send, [{['_', {reply,'_'}],[],[]}], []).</input>
+1</pre>
+ <p>Only trace messages sent to the sender itself:</p>
+ <pre>
+> <input>erlang:trace_pattern(send, [{['$1', '_'],[{'=:=','$1',{self}}],[]}], []).</input>
+1</pre>
+ <p>Only trace messages sent to other nodes:</p>
+ <pre>
+> <input>erlang:trace_pattern(send, [{['$1', '_'],[{'=/=',{node,'$1'},{node}}],[]}], []).</input>
+1</pre>
+ <note><p>A match specification for <c>send</c> trace can use
+ all guard and body functions except <c>caller</c>.</p></note>
+ </desc>
+ </func>
+
+ <func>
+ <name name="trace_pattern" arity="3" clause_i="2"/>
+ <fsummary>Sets trace pattern for tracing of message receiving.</fsummary>
+ <type name="trace_match_spec"/>
+ <desc>
+ <p></p>
+ <p>Sets trace pattern for <em>message receiving</em>.
+ Must be combined with
+ <seealso marker="#trace/3">erlang:trace/3</seealso>
+ to set the <c>'receive'</c> trace flag for one or more processes.
+ By default all messages, received by <c>'receive'</c> traced processes,
+ are traced. Use <c>erlang:trace_pattern/3</c> to limit
+ traced receive events based on the message content, the sender
+ and/or the receiver.</p>
+ <p>Argument <c><anno>MatchSpec</anno></c> can take the
+ following forms:</p>
+ <taglist>
+ <tag><c><anno>MatchSpecList</anno></c></tag>
+ <item>
+ <p>A list of match specifications. 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>. An empty
+ list is the same as <c>true</c>. See the users guide section
+ <seealso marker="erts:match_spec">Match Specifications in Erlang</seealso>
+ for more information.</p>
+ </item>
+ <tag><c>true</c></tag>
+ <item>
+ <p>Enables tracing for all received messages (to <c>'receive'</c>
+ traced processes). Any match specification is
+ removed. <em>This is the default</em>.</p>
+ </item>
+ <tag><c>false</c></tag>
+ <item>
+ <p>Disables tracing for all received messages.
+ Any match specification is removed.</p>
+ </item>
+ </taglist>
+ <p>Argument <c><anno>FlagList</anno></c> must be <c>[]</c>
+ for receive tracing.</p>
+ <p>The return value is always <c>1</c>.</p>
+ <p>Example; only trace messages from a specific process <c>Pid</c>:</p>
+ <pre>
+> <input>erlang:trace_pattern('receive', [{['_',Pid, '_'],[],[]}], []).</input>
+1</pre>
+ <p>Only trace messages matching <c>{reply, _}</c>:</p>
+ <pre>
+> <input>erlang:trace_pattern('receive', [{['_','_', {reply,'_'}],[],[]}], []).</input>
+1</pre>
+ <p>Only trace messages from other nodes:</p>
+ <pre>
+> <input>erlang:trace_pattern('receive', [{['$1', '_', '_'],[{'=/=','$1',{node}}],[]}], []).</input>
+1</pre>
+ <note><p>A match specification for <c>'receive'</c> trace can
+ use all guard and body functions except <c>caller,
+ is_seq_trace, get_seq_token, set_seq_token, enable_trace,
+ disable_trace, trace, silent</c> and <c>process_dump</c>.</p></note>
+ </desc>
+ </func>
+
+ <func>
+ <name name="trace_pattern" arity="3" clause_i="3"/>
<fsummary>Sets trace patterns for tracing of function calls.</fsummary>
<type name="trace_pattern_mfa"/>
<type name="trace_match_spec"/>
<type name="trace_pattern_flag"/>
<desc>
- <p>Enables or disables call tracing for
- one or more functions. Must be combined with
+ <p>Enables or disables <em>call tracing</em> for one or more functions.
+ Must be combined with
<seealso marker="#trace/3">erlang:trace/3</seealso>
- to set the <c>call</c> trace flag for one or more processes.</p>
+ to set the <c>call</c> trace flag
+ for one or more processes.</p>
<p>Conceptually, call tracing works as follows. Inside
the Erlang Virtual Machine, a set of processes and
a set of functions are to be traced. If a traced process
@@ -8913,7 +9522,8 @@ timestamp() ->
</item>
<tag><c>true</c></tag>
<item>
- <p>Enables tracing for the matching functions.</p>
+ <p>Enables tracing for the matching functions.
+ Any match specification is removed.</p>
</item>
<tag><c><anno>MatchSpecList</anno></c></tag>
<item>
@@ -8955,13 +9565,12 @@ timestamp() ->
the process, a <c>return_to</c> message is also sent
when this function returns to its caller.</p>
</item>
- <tag><c>meta | {meta, <anno>Pid</anno>}</c></tag>
+ <tag><c>meta | {meta, <anno>Pid</anno>} | {meta, <anno>TracerModule</anno>, <anno>TracerState</anno>}</c>
+ </tag>
<item>
<p>Turns on or off meta-tracing for all types of function
- calls. Trace messages are sent to the tracer process
- or port <c><anno>Pid</anno></c> whenever any of the specified
- functions are called, regardless of how they are called.
- If no <c><anno>Pid</anno></c> is specified,
+ calls. Trace messages are sent to the tracer whenever any of
+ the specified functions are called. If no tracer is specified,
<c>self()</c> is used as a default tracer process.</p>
<p>Meta-tracing traces all processes and does not care
about the process trace flags set by <c>trace/3</c>,
@@ -8969,7 +9578,7 @@ timestamp() ->
<c>[call, timestamp]</c>.</p>
<p>The match specification function <c>{return_trace}</c>
works with meta-trace and sends its trace message to the
- same tracer process.</p>
+ same tracer.</p>
</item>
<tag><c>call_count</c></tag>
<item>
diff --git a/erts/doc/src/erlc.xml b/erts/doc/src/erlc.xml
index 9fc5864413..a64927fec2 100644
--- a/erts/doc/src/erlc.xml
+++ b/erts/doc/src/erlc.xml
@@ -4,7 +4,7 @@
<comref>
<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/erts/doc/src/erlsrv.xml b/erts/doc/src/erlsrv.xml
index ccb8b2dd76..fb00444aa4 100644
--- a/erts/doc/src/erlsrv.xml
+++ b/erts/doc/src/erlsrv.xml
@@ -4,7 +4,7 @@
<comref>
<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/erts/doc/src/erts_alloc.xml b/erts/doc/src/erts_alloc.xml
index 15b78ffa10..9aef1c0b1f 100644
--- a/erts/doc/src/erts_alloc.xml
+++ b/erts/doc/src/erts_alloc.xml
@@ -4,7 +4,7 @@
<cref>
<header>
<copyright>
- <year>2002</year><year>2015</year>
+ <year>2002</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -52,6 +52,8 @@
<item>Allocator used for ETS data.</item>
<tag><c>driver_alloc</c></tag>
<item>Allocator used for driver data.</item>
+ <tag><c>literal_alloc</c></tag>
+ <item>Allocator used for constant terms in Erlang code.</item>
<tag><c>sl_alloc</c></tag>
<item>Allocator used for memory blocks that are expected to be
short-lived.</item>
@@ -61,6 +63,9 @@
<tag><c>fix_alloc</c></tag>
<item>A fast allocator used for some frequently used
fixed size data types.</item>
+ <tag><c>exec_alloc</c></tag>
+ <item>Allocator used by hipe for native executable code
+ on specific architectures (x86_64).</item>
<tag><c>std_alloc</c></tag>
<item>Allocator used for most memory blocks not allocated via any of
the other allocators described above.</item>
@@ -77,8 +82,9 @@
instead of creating new segments. This in order to reduce
the number of system calls made.</item>
</taglist>
- <p><c>sys_alloc</c> is always enabled and
- cannot be disabled. <c>mseg_alloc</c> is always enabled if it is
+ <p><c>sys_alloc</c> and <c>literal_alloc</c> are always enabled and
+ cannot be disabled. <c>exec_alloc</c> is only available if it is needed
+ and cannot be disabled. <c>mseg_alloc</c> is always enabled if it is
available and an allocator that uses it is enabled. All other
allocators can be <seealso marker="#M_e">enabled or disabled</seealso>.
By default all allocators are enabled.
@@ -250,11 +256,13 @@
<item><c>E: ets_alloc</c></item>
<item><c>F: fix_alloc</c></item>
<item><c>H: eheap_alloc</c></item>
+ <item><c>I: literal_alloc</c></item>
<item><c>L: ll_alloc</c></item>
<item><c>M: mseg_alloc</c></item>
<item><c>R: driver_alloc</c></item>
<item><c>S: sl_alloc</c></item>
<item><c>T: temp_alloc</c></item>
+ <item><c>X: exec_alloc</c></item>
<item><c>Y: sys_alloc</c></item>
</list>
<p>The following flags are available for configuration of
@@ -563,6 +571,25 @@
set to <c>false</c>, <c>sys_alloc</c> carriers will never be
created by allocators using the <c>alloc_util</c> framework.</item>
</taglist>
+ <p>The following flag is special for <c>literal_alloc</c>:</p>
+ <taglist>
+ <tag><marker id="MIscs"/><c><![CDATA[+MIscs <size in MB>]]></c></tag>
+ <item>
+ <c>literal_alloc</c> super carrier size (in MB). The amount of
+ <em>virtual</em> address space reserved for literal terms in
+ Erlang code on 64-bit architectures. The default is 1024 (1GB)
+ and is usually sufficient. The flag is ignored on 32-bit
+ architectures.</item>
+ </taglist>
+ <p>The following flag is special for <c>exec_alloc</c>:</p>
+ <taglist>
+ <tag><marker id="MXscs"/><c><![CDATA[+MXscs <size in MB>]]></c></tag>
+ <item>
+ <c>exec_alloc</c> super carrier size (in MB). The amount of
+ <em>virtual</em> address space reserved for native executable code
+ used by hipe on specific architectures (x86_64). The default is 512 MB.
+ </item>
+ </taglist>
<p>Instrumentation flags:</p>
<taglist>
<tag><marker id="Mim"/><c>+Mim true|false</c></tag>
diff --git a/erts/doc/src/inet_cfg.xml b/erts/doc/src/inet_cfg.xml
index 5caf232a62..027fe600d7 100644
--- a/erts/doc/src/inet_cfg.xml
+++ b/erts/doc/src/inet_cfg.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/erts/doc/src/init.xml b/erts/doc/src/init.xml
index 2a33096d04..84a5aea335 100644
--- a/erts/doc/src/init.xml
+++ b/erts/doc/src/init.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/erts/doc/src/match_spec.xml b/erts/doc/src/match_spec.xml
index 08dad8cc10..7be3d15de6 100644
--- a/erts/doc/src/match_spec.xml
+++ b/erts/doc/src/match_spec.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,21 +33,15 @@
<file>match_spec.xml</file>
</header>
<p>A "match specification" (match_spec) is an Erlang term describing a
- small "program" that will try to match something (either the
- parameters to a function as used in the <c><![CDATA[erlang:trace_pattern/2]]></c>
- BIF, or the objects in an ETS table.).
+ small "program" that will try to match something. It can be used
+ to either control tracing with
+ <seealso marker="erlang#trace_pattern/3">erlang:trace_pattern/3</seealso>
+ or to search for objects in an ETS table with for example
+ <seealso marker="stdlib:ets#select/2">ets:select/2</seealso>.
The match_spec in many ways works like a small function in Erlang, but is
interpreted/compiled by the Erlang runtime system to something much more
efficient than calling an Erlang function. The match_spec is also
very limited compared to the expressiveness of real Erlang functions.</p>
- <p>Match specifications are given to the BIF <c><![CDATA[erlang:trace_pattern/2]]></c> to
- execute matching of function arguments as well as to define some actions
- to be taken when the match succeeds (the <c><![CDATA[MatchBody]]></c> part). Match
- specifications can also be used in ETS, to specify objects to be
- returned from an <c><![CDATA[ets:select/2]]></c> call (or other select
- calls). The semantics and restrictions differ slightly when using
- match specifications for tracing and in ETS, the differences are
- defined in a separate paragraph below.</p>
<p>The most notable difference between a match_spec and an Erlang fun is
of course the syntax. Match specifications are Erlang terms, not
Erlang code. A match_spec also has a somewhat strange concept of
@@ -287,7 +281,7 @@
can <em>not</em> be one of the atoms <c><![CDATA[all]]></c>, <c><![CDATA[new]]></c> or
<c><![CDATA[existing]]></c> (unless, of course, they are registered names).
<c><![CDATA[P2]]></c> can <em>not</em> be <c><![CDATA[cpu_timestamp]]></c> nor
- <c><![CDATA[{tracer,_}]]></c>.
+ <c><![CDATA[tracer]]></c>.
Returns <c><![CDATA[true]]></c> and may only be used in
the <c><![CDATA[MatchBody]]></c> part when tracing.
</p>
@@ -298,7 +292,7 @@
be either a process identifier or a registered name and is given
as the first argument to the match_spec function.
<c><![CDATA[P2]]></c> can <em>not</em> be <c><![CDATA[cpu_timestamp]]></c> nor
- <c><![CDATA[{tracer,_}]]></c>. Returns
+ <c><![CDATA[tracer]]></c>. Returns
<c><![CDATA[true]]></c> and may only be used in the <c><![CDATA[MatchBody]]></c> part
when tracing.
</p>
@@ -308,11 +302,14 @@
disable list is applied first, but effectively all changes
are applied atomically. The trace flags
are the same as for <c><![CDATA[erlang:trace/3]]></c> not including
- <c><![CDATA[cpu_timestamp]]></c> but including <c><![CDATA[{tracer,_}]]></c>. If a
+ <c><![CDATA[cpu_timestamp]]></c> but including <c><![CDATA[tracer]]></c>. If a
tracer is specified in both lists, the tracer in the
enable list takes precedence. If no tracer is specified the
same tracer as the process executing the match spec is
- used. With three parameters to this function the first is
+ used. When using a <seealso marker="erl_tracer">tracer module</seealso>
+ the module has to be loaded before the match specification is executed.
+ If it is not loaded the match will fail.
+ With three parameters to this function the first is
either a process identifier or the registered name of a
process to set trace flags on, the second is the disable
list, and the third is the enable list. Returns
@@ -379,6 +376,51 @@
the pid() of the current process.</p>
</section>
+ <marker id="match_target"></marker>
+ <section>
+ <title>Match target</title>
+ <p>Each execution of a match specification is done against
+ a match target term. The format and content of the target term
+ depends on the context in which the match is done. The match
+ target for ETS is always a full table tuple. The match target
+ for call trace is always a list of all function arguments. The
+ match target for event trace depends on the event type, see
+ table below.</p>
+ <table>
+ <row>
+ <cell align="left" valign="middle">Context</cell>
+ <cell align="left" valign="middle">Type</cell>
+ <cell align="left" valign="middle">Match target</cell>
+ <cell align="left" valign="middle">Description</cell>
+ </row>
+ <row>
+ <cell align="left" valign="middle">ETS</cell>
+ <cell align="left" valign="middle"></cell>
+ <cell align="left" valign="middle">{Key, Value1, Value2, ...}</cell>
+ <cell align="left" valign="middle">A table object</cell>
+ </row>
+ <row>
+ <cell align="left" valign="middle">Trace</cell>
+ <cell align="left" valign="middle">call</cell>
+ <cell align="left" valign="middle">[Arg1, Arg2, ...]</cell>
+ <cell align="left" valign="middle">Function arguments</cell>
+ </row>
+ <row>
+ <cell align="left" valign="middle">Trace</cell>
+ <cell align="left" valign="middle">send</cell>
+ <cell align="left" valign="middle">[Receiver, Message]</cell>
+ <cell align="left" valign="middle">Receiving process/port and message term</cell>
+ </row>
+ <row>
+ <cell align="left" valign="middle">Trace</cell>
+ <cell align="left" valign="middle">'receive'</cell>
+ <cell align="left" valign="middle">[Node, Sender, Message]</cell>
+ <cell align="left" valign="middle">Sending node, process/port and message term</cell>
+ </row>
+ <tcaption>Match target depending on context</tcaption>
+ </table>
+ </section>
+
<section>
<title>Variables and literals</title>
<p>Variables take the form <c><![CDATA['$<number>']]></c> where
@@ -393,10 +435,8 @@
<c><![CDATA[MatchCondition]]></c> parts, only variables bound previously may
be used. As a special case, in the
<c><![CDATA[MatchCondition/MatchBody]]></c> parts, the variable <c><![CDATA['$_']]></c>
- expands to the whole expression which matched the
- <c><![CDATA[MatchHead]]></c> (i.e., the whole parameter list to the possibly
- traced function or the whole matching object in the ets table)
- and the variable <c><![CDATA['$$']]></c> expands to a list
+ expands to the whole <seealso marker="#match_target">match target</seealso>
+ term and the variable <c><![CDATA['$$']]></c> expands to a list
of the values of all bound variables in order
(i.e. <c><![CDATA[['$1','$2', ...]]]></c>).
</p>
@@ -477,8 +517,8 @@
<p>For each tuple in the <c><![CDATA[MatchExpression]]></c> list and while no
match has succeeded:</p>
<list type="bulleted">
- <item>Match the <c><![CDATA[MatchHead]]></c> part against the arguments to the
- function,
+ <item>Match the <c><![CDATA[MatchHead]]></c> part against the
+ match target term,
binding the <c><![CDATA['$<number>']]></c> variables (much like in
<c><![CDATA[ets:match/2]]></c>).
If the <c><![CDATA[MatchHead]]></c> cannot match the arguments, the match fails.
@@ -519,13 +559,10 @@
term. The <c><![CDATA[ActionTerm]]></c>'s are executed as in an imperative
language, i.e. for their side effects. Functions with side effects
are also allowed when tracing.</p>
- <p>In ETS the match head is a <c><![CDATA[tuple()]]></c> (or a single match
- variable) while it is a list (or a single match variable) when
- tracing.</p>
</section>
<section>
- <title>Examples</title>
+ <title>Tracing Examples</title>
<p>Match an argument list of three where the first and third arguments
are equal:</p>
<code type="none"><![CDATA[
@@ -582,7 +619,47 @@
parameter list with a single variable is a special case. In all
other cases the <c><![CDATA[MatchHead]]></c> has to be a <em>proper</em> list.
</p>
- <p>Match all objects in an ets table where the first element is
+ <p>Only generate trace message if trace control word is set to 1:</p>
+ <code type="none"><![CDATA[
+[{'_',
+ [{'==',{get_tcw},{const, 1}}],
+ []}]
+ ]]></code>
+ <p>Only generate trace message if there is a seq trace token:</p>
+ <code type="none"><![CDATA[
+[{'_',
+ [{'==',{is_seq_trace},{const, 1}}],
+ []}]
+ ]]></code>
+ <p>Remove 'silent' trace flag when first argument is 'verbose'
+ and add it when it is 'silent':</p>
+ <code type="none"><![CDATA[
+[{'$1',
+ [{'==',{hd, '$1'},verbose}],
+ [{trace, [silent],[]}]},
+ {'$1',
+ [{'==',{hd, '$1'},silent}],
+ [{trace, [],[silent]}]}]
+ ]]></code>
+ <p>Add return_trace message if function is of arity 3:</p>
+ <code type="none"><![CDATA[
+[{'$1',
+ [{'==',{length, '$1'},3}],
+ [{return_trace}]},
+ {'_',[],[]}]
+ ]]></code>
+ <p>Only generate trace message if function is of arity 3 and first argument is 'trace':</p>
+ <code type="none"><![CDATA[
+[{['trace','$2','$3'],
+ [],
+ []},
+ {'_',[],[]}]
+ ]]></code>
+ </section>
+
+ <section>
+ <title>ETS Examples</title>
+ <p>Match all objects in an ets table where the first element is
the atom 'strider' and the tuple arity is 3 and return the whole
object.</p>
<code type="none"><![CDATA[
@@ -590,7 +667,7 @@
[],
['$_']}]
]]></code>
- <p>Match all objects in an ets table with arity &gt; 1 and the first
+ <p>Match all objects in an ets table with arity &gt; 1 and the first
element is 'gandalf', return element 2.</p>
<code type="none"><![CDATA[
[{'$1',
@@ -601,7 +678,7 @@
it's much more efficient to match that key in the <c><![CDATA[MatchHead]]></c>
part than in the <c><![CDATA[MatchConditions]]></c> part. The search space of
the tables is restricted with regards to the <c><![CDATA[MatchHead]]></c> so
- that only objects with the matching key are searched.
+ that only objects with the matching key are searched.
</p>
<p>Match tuples of 3 elements where the second element is either
'merry' or 'pippin', return the whole objects.</p>
diff --git a/erts/doc/src/notes.xml b/erts/doc/src/notes.xml
index a726cc7b97..7501ccd9ce 100644
--- a/erts/doc/src/notes.xml
+++ b/erts/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>
@@ -32,6 +32,257 @@
<p>This document describes the changes made to the ERTS application.</p>
+<section><title>Erts 7.3.1</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ <c>process_info(Pid, last_calls)</c> did not work for
+ <c>Pid /= self()</c>.</p>
+ <p>
+ Own Id: OTP-13418</p>
+ </item>
+ <item>
+ <p>
+ Make sure to create a crash dump when running out of
+ memory. This was accidentally removed in the erts-7.3
+ release.</p>
+ <p>
+ Own Id: OTP-13419</p>
+ </item>
+ <item>
+ <p>
+ Schedulers could be woken by a premature timeout on
+ Linux. This premature wakeup was however harmless.</p>
+ <p>
+ Own Id: OTP-13420</p>
+ </item>
+ <item>
+ <p>
+ A process communicating with a port via one of the
+ <c>erlang:port_*</c> BIFs could potentially end up in an
+ inconsistent state if the port terminated during the
+ communication. When this occurred the process could later
+ block in a <c>receive</c> even though it had messages
+ matching in its message queue.</p>
+ <p>
+ This bug was introduced in erts version 5.10 (OTP R16A).</p>
+ <p>
+ Own Id: OTP-13424 Aux Id: OTP-10336 </p>
+ </item>
+ <item>
+ <p>
+ The reference count of a process structure could under
+ rare circumstances be erroneously managed. When this
+ happened invalid memory accesses occurred.</p>
+ <p>
+ Own Id: OTP-13446</p>
+ </item>
+ <item>
+ <p>
+ Fix race between <c>process_flag(trap_exit,true)</c> and
+ a received exit signal.</p>
+ <p>
+ A process could terminate due to exit signal even though
+ <c>process_flag(trap_exit,true)</c> had returned. A very
+ specific timing between call to <c>process_flag/2</c> and
+ exit signal from another scheduler was required for this
+ to happen.</p>
+ <p>
+ Own Id: OTP-13452</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>Erts 7.3</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ The '-path' flag to 'erl' has been documented. This flag
+ replaces the path specified in the boot script. It has
+ always existed, but was earlier only documented in SASL
+ (script).</p>
+ <p>
+ Own Id: OTP-13060</p>
+ </item>
+ <item>
+ <p>
+ The <c>call_time</c> tracing functionality internally
+ used a time based on OS system time in order to measure
+ call time which could cause erroneous results if OS
+ system time was changed during tracing.</p>
+ <p>
+ This functionality now use Erlang monotonic time in order
+ to measure time. Besides fixing the erroneous results due
+ to OS system time being used, the results are often also
+ better since Erlang monotonic time often has better
+ accuracy and precision.</p>
+ <p>
+ Own Id: OTP-13216</p>
+ </item>
+ <item>
+ <p>
+ Fix behaviour of -delay_write command line switch of
+ epmd, which is used for debugging - in some cases epmd
+ was sleeping twice the requested amount of time.</p>
+ <p>
+ Own Id: OTP-13220</p>
+ </item>
+ <item>
+ <p>
+ Fix race between timeout and exit signal that could cause
+ a process to ignore the exit signal and continue
+ execution. Bug exist since OTP 18.0.</p>
+ <p>
+ Own Id: OTP-13245</p>
+ </item>
+ <item>
+ <p>
+ Fix bug in <c>erlang:halt/1,2</c> for large exit status
+ values, causing either <c>badarg</c> (on 32-bit) or exit
+ with a crash dump and/or core dump (on 64-bit). Make
+ <c>erlang:halt/1,2</c> tolerate any non negative integer
+ as exit status and truncate high order bits if the OS
+ does not support it.</p>
+ <p>
+ Own Id: OTP-13251 Aux Id: ERL-49 </p>
+ </item>
+ <item>
+ <p>
+ <seealso
+ marker="kernel:gen_tcp#accept/2"><c>gen_tcp:accept/2</c></seealso>
+ was not <seealso
+ marker="erts:time_correction#Time_Warp_Safe_Code">time
+ warp safe</seealso>. This since it used the same time as
+ returned by <seealso
+ marker="erts:erlang#now/0"><c>erlang:now/0</c></seealso>
+ when calculating timeout. This has now been fixed.</p>
+ <p>
+ Own Id: OTP-13254 Aux Id: OTP-11997, OTP-13222 </p>
+ </item>
+ <item>
+ <p>
+ Fix faulty error handling when writing to a compressed
+ file.</p>
+ <p>
+ Own Id: OTP-13270</p>
+ </item>
+ <item>
+ <p>
+ Fix sendfile usage for large files on FreeBSD</p>
+ <p>
+ Own Id: OTP-13271</p>
+ </item>
+ <item>
+ <p>
+ Fix bug that could cause
+ <c>process_info(P,current_location)</c> to crash emulator
+ for hipe compiled modules.</p>
+ <p>
+ Own Id: OTP-13282 Aux Id: ERL-79 </p>
+ </item>
+ <item>
+ <p>
+ Out of memory errors have been changed to cause an exit
+ instead of abort.</p>
+ <p>
+ Own Id: OTP-13292</p>
+ </item>
+ <item>
+ <p>
+ When calling <c>garbage_collect/[1,2]</c> or
+ <c>check_process_code/[2,3]</c> from a process with a
+ higher priority than the priority of the process operated
+ on, the run queues could end up in an inconsistent state.
+ This bug has now been fixed.</p>
+ <p>
+ Own Id: OTP-13298 Aux Id: OTP-11388 </p>
+ </item>
+ <item>
+ <p>
+ A workaround for an issue with older gcc versions (less
+ than 5) and inline assembly on 32-bit x86 caused an
+ emulator crash when it had been compiled with a newer gcc
+ version. An improved <c>configure</c> test, run when
+ building OTP, now detects whether the workaround should
+ be used or not.</p>
+ <p>
+ Own Id: OTP-13326 Aux Id: ERL-80 </p>
+ </item>
+ </list>
+ </section>
+
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>Introduced new statistics functionality in order to
+ more efficiently retrieve information about run able and
+ active processes and ports. For more information see:</p>
+ <list> <item><seealso
+ marker="erlang#statistics_total_run_queue_lengths"><c>statistics(total_run_queue_lengths)</c></seealso></item>
+ <item><seealso
+ marker="erlang#statistics_run_queue_lengths"><c>statistics(run_queue_lengths)</c></seealso></item>
+ <item><seealso
+ marker="erlang#statistics_total_active_tasks"><c>statistics(total_active_tasks)</c></seealso></item>
+ <item><seealso
+ marker="erlang#statistics_active_tasks"><c>statistics(active_tasks)</c></seealso></item>
+ </list>
+ <p>
+ Own Id: OTP-13201</p>
+ </item>
+ <item>
+ <p>
+ Time warp safety improvements.</p>
+ <p>
+ Introduced the options <c>monotonic_timestamp</c>, and
+ <c>strict_monotonic_timestamp</c> to the trace,
+ sequential trace, and system profile functionality. This
+ since the already existing <c>timestamp</c> option is not
+ time warp safe.</p>
+ <p>
+ Introduced the option <c>safe_fixed_monotonic_time</c> to
+ <c>ets:info/2</c> and <c>dets:info/2</c>. This since the
+ already existing <c>safe_fixed</c> option is not time
+ warp safe.</p>
+ <p>
+ Own Id: OTP-13222 Aux Id: OTP-11997 </p>
+ </item>
+ <item>
+ <p>
+ Fix a register race where down nodes goes undetected in
+ epmd</p>
+ <p>
+ Own Id: OTP-13301</p>
+ </item>
+ <item>
+ <p>
+ Improved the gcc inline assembly implementing double word
+ atomic compare and exchange on x86/x86_64 so that it also
+ can be used when compiling with clang.</p>
+ <p>
+ Own Id: OTP-13336</p>
+ </item>
+ <item>
+ <p>
+ An optimization preventing a long wait for a scheduler
+ thread looking up information about a process executing
+ on another scheduler thread had unintentionally been lost
+ in erts-5.10 (OTP R16A). This optimization has now been
+ reintroduced.</p>
+ <p>
+ Own Id: OTP-13365 Aux Id: OTP-9892 </p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
<section><title>Erts 7.2.1</title>
<section><title>Fixed Bugs and Malfunctions</title>
diff --git a/erts/doc/src/notes_history.xml b/erts/doc/src/notes_history.xml
index 0886ae4039..0bc2ab1383 100644
--- a/erts/doc/src/notes_history.xml
+++ b/erts/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/erts/doc/src/part.xml b/erts/doc/src/part.xml
index 2f5eca93db..b2abfc62ca 100644
--- a/erts/doc/src/part.xml
+++ b/erts/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/erts/doc/src/part_notes.xml b/erts/doc/src/part_notes.xml
index 83bb479715..e579b7635d 100644
--- a/erts/doc/src/part_notes.xml
+++ b/erts/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/erts/doc/src/part_notes_history.xml b/erts/doc/src/part_notes_history.xml
index 055d1681d5..277683a2b5 100644
--- a/erts/doc/src/part_notes_history.xml
+++ b/erts/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/erts/doc/src/ref_man.xml b/erts/doc/src/ref_man.xml
index ac589f8cb5..e45402a397 100644
--- a/erts/doc/src/ref_man.xml
+++ b/erts/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>
@@ -56,5 +56,6 @@
<xi:include href="driver_entry.xml"/>
<xi:include href="erts_alloc.xml"/>
<xi:include href="erl_nif.xml"/>
+ <xi:include href="erl_tracer.xml"/>
</application>
diff --git a/erts/doc/src/run_erl.xml b/erts/doc/src/run_erl.xml
index faec3c68c1..6b0fef7c0a 100644
--- a/erts/doc/src/run_erl.xml
+++ b/erts/doc/src/run_erl.xml
@@ -4,7 +4,7 @@
<comref>
<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/erts/doc/src/specs.xml b/erts/doc/src/specs.xml
index 41a3984659..ed6be650e5 100644
--- a/erts/doc/src/specs.xml
+++ b/erts/doc/src/specs.xml
@@ -2,6 +2,7 @@
<specs xmlns:xi="http://www.w3.org/2001/XInclude">
<xi:include href="../specs/specs_erl_prim_loader.xml"/>
<xi:include href="../specs/specs_erlang.xml"/>
+ <xi:include href="../specs/specs_erl_tracer.xml"/>
<xi:include href="../specs/specs_init.xml"/>
<xi:include href="../specs/specs_zlib.xml"/>
</specs>
diff --git a/erts/doc/src/start.xml b/erts/doc/src/start.xml
index 386fbe6e88..adacf5b98d 100644
--- a/erts/doc/src/start.xml
+++ b/erts/doc/src/start.xml
@@ -4,7 +4,7 @@
<comref>
<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/erts/doc/src/start_erl.xml b/erts/doc/src/start_erl.xml
index 62610b43b0..243aeaa717 100644
--- a/erts/doc/src/start_erl.xml
+++ b/erts/doc/src/start_erl.xml
@@ -4,7 +4,7 @@
<comref>
<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/erts/doc/src/tty.xml b/erts/doc/src/tty.xml
index cd46d1203c..b2866c82cf 100644
--- a/erts/doc/src/tty.xml
+++ b/erts/doc/src/tty.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/erts/doc/src/werl.xml b/erts/doc/src/werl.xml
index 9e7ad584eb..1a3cb6f502 100644
--- a/erts/doc/src/werl.xml
+++ b/erts/doc/src/werl.xml
@@ -4,7 +4,7 @@
<comref>
<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/erts/doc/src/zlib.xml b/erts/doc/src/zlib.xml
index 0a641346d9..861661043f 100644
--- a/erts/doc/src/zlib.xml
+++ b/erts/doc/src/zlib.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/erts/emulator/Makefile b/erts/emulator/Makefile
index 550e6e6f5b..65fdbdb747 100644
--- a/erts/emulator/Makefile
+++ b/erts/emulator/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/erts/emulator/Makefile.in b/erts/emulator/Makefile.in
index 12148ad9c7..2212aed5e0 100644
--- a/erts/emulator/Makefile.in
+++ b/erts/emulator/Makefile.in
@@ -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,8 @@ LDFLAGS=@LDFLAGS@
ARFLAGS=rc
OMIT_OMIT_FP=no
+DIRTY_SCHEDULER_SUPPORT=@DIRTY_SCHEDULER_SUPPORT@
+
ifeq ($(TYPE),debug)
PURIFY =
TYPEMARKER = .debug
@@ -174,6 +176,10 @@ FLAVOR_MARKER=.smp
FLAVOR_FLAGS=-DERTS_SMP
ENABLE_ALLOC_TYPE_VARS += smp nofrag
M4FLAGS += -DERTS_SMP=1
+ifeq ($(DIRTY_SCHEDULER_SUPPORT),yes)
+THR_DEFS += -DERTS_DIRTY_SCHEDULERS
+endif
+
else
# If flavor isn't one of the above, it *is* plain flavor...
@@ -182,7 +188,6 @@ FLAVOR_MARKER=
FLAVOR_FLAGS=
ENABLE_ALLOC_TYPE_VARS += nofrag
M4FLAGS +=
-
endif
TF_MARKER=$(TYPEMARKER)$(FLAVOR_MARKER)
@@ -577,7 +582,7 @@ GENERATE += $(TARGET)/erl_version.h
# driver table
$(TTF_DIR)/driver_tab.c: Makefile.in utils/make_driver_tab
- $(gen_verbose)LANG=C $(PERL) utils/make_driver_tab -o $@ -nifs $(STATIC_NIF_LIBS) -drivers $(DRV_OBJS) $(STATIC_DRIVER_LIBS)
+ $(gen_verbose)LANG=C $(PERL) utils/make_driver_tab -o $@ -nifs $(NIF_OBJS) $(STATIC_NIF_LIBS) -drivers $(DRV_OBJS) $(STATIC_DRIVER_LIBS)
GENERATE += $(TTF_DIR)/driver_tab.c
@@ -600,8 +605,8 @@ $(PRELOAD_SRC): $(ERL_TOP)/erts/preloaded/ebin/otp_ring0.beam \
$(ERL_TOP)/erts/preloaded/ebin/prim_zip.beam \
$(ERL_TOP)/erts/preloaded/ebin/erl_prim_loader.beam \
$(ERL_TOP)/erts/preloaded/ebin/erlang.beam \
- $(ERL_TOP)/erts/preloaded/ebin/erts_internal.beam
-
+ $(ERL_TOP)/erts/preloaded/ebin/erts_internal.beam \
+ $(ERL_TOP)/erts/preloaded/ebin/erl_tracer.beam
$(gen_verbose)LANG=C $(PERL) utils/make_preload $(MAKE_PRELOAD_EXTRA) -rc $^ > $@
else
PRELOAD_OBJ = $(OBJDIR)/preload.o
@@ -616,7 +621,8 @@ $(PRELOAD_SRC): $(ERL_TOP)/erts/preloaded/ebin/otp_ring0.beam \
$(ERL_TOP)/erts/preloaded/ebin/prim_zip.beam \
$(ERL_TOP)/erts/preloaded/ebin/erl_prim_loader.beam \
$(ERL_TOP)/erts/preloaded/ebin/erlang.beam \
- $(ERL_TOP)/erts/preloaded/ebin/erts_internal.beam
+ $(ERL_TOP)/erts/preloaded/ebin/erts_internal.beam \
+ $(ERL_TOP)/erts/preloaded/ebin/erl_tracer.beam
$(gen_verbose)LANG=C $(PERL) utils/make_preload -old $^ > $@
endif
@@ -690,6 +696,9 @@ $(OBJDIR)/%.o: drivers/common/%.c
$(OBJDIR)/%.o: drivers/$(ERLANG_OSTYPE)/%.c
$(V_CC) $(CFLAGS) $(INCLUDES) -Idrivers/common -Idrivers/$(ERLANG_OSTYPE) -I../etc/$(ERLANG_OSTYPE) -c $< -o $@
+$(OBJDIR)/%.o: nifs/common/%.c
+ $(V_CC) $(CFLAGS) -DLIBSCTP=$(LIBSCTP) $(INCLUDES) -Inifs/common -Inifs/$(ERLANG_OSTYPE) -c $< -o $@
+
# ----------------------------------------------------------------------
# Specials
#
@@ -779,6 +788,9 @@ RUN_OBJS = \
$(OBJDIR)/erl_ptab.o $(OBJDIR)/erl_map.o \
$(OBJDIR)/erl_msacc.o
+LTTNG_OBJS = $(OBJDIR)/erlang_lttng.o
+NIF_OBJS = $(OBJDIR)/erl_tracer_nif.o
+
ifeq ($(TARGET),win32)
DRV_OBJS = \
$(OBJDIR)/registry_drv.o \
@@ -885,9 +897,9 @@ ifdef HIPE_ENABLED
EXTRA_BASE_OBJS += $(HIPE_OBJS)
endif
-BASE_OBJS = $(EMU_OBJS) $(RUN_OBJS) $(OS_OBJS) $(EXTRA_BASE_OBJS)
+BASE_OBJS = $(EMU_OBJS) $(RUN_OBJS) $(OS_OBJS) $(EXTRA_BASE_OBJS) $(LTTNG_OBJS)
-before_DTrace_OBJS = $(BASE_OBJS) $(DRV_OBJS)
+before_DTrace_OBJS = $(BASE_OBJS) $(DRV_OBJS) $(NIF_OBJS)
DTRACE_OBJS =
ifdef DTRACE_ENABLED_2STEP
@@ -1040,6 +1052,7 @@ endif
BEAM_SRC=$(wildcard beam/*.c)
DRV_COMMON_SRC=$(wildcard drivers/common/*.c)
DRV_OSTYPE_SRC=$(wildcard drivers/$(ERLANG_OSTYPE)/*.c)
+NIF_COMMON_SRC=$(wildcard nifs/common/*.c)
ALL_SYS_SRC=$(wildcard sys/$(ERLANG_OSTYPE)/*.c) $(wildcard sys/common/*.c)
# We use $(shell ls) here instead of wildcard as $(wildcard ) resolved at
# loadtime of the makefile and at that time these files are not generated yet.
@@ -1072,7 +1085,7 @@ MG_FLAG=-MG
endif
DEP_CC=$(CC)
-DEP_FLAGS=-MM $(MG_FLAG) $(CFLAGS) $(INCLUDES) -Idrivers/common -Idrivers/$(ERLANG_OSTYPE)
+DEP_FLAGS=-MM $(MG_FLAG) $(CFLAGS) $(INCLUDES) -Inifs/common -Idrivers/common -Idrivers/$(ERLANG_OSTYPE)
SYS_SRC=$(ALL_SYS_SRC)
endif
@@ -1097,6 +1110,8 @@ $(TTF_DIR)/depend.mk: $(TTF_DIR)/GENERATED $(PRELOAD_SRC)
| $(SED_DEPEND) >> $(TTF_DIR)/depend.mk
$(V_at)$(DEP_CC) $(DEP_FLAGS) -I../etc/$(ERLANG_OSTYPE) $(DRV_OSTYPE_SRC) \
| $(SED_DEPEND) >> $(TTF_DIR)/depend.mk
+ $(V_at)$(DEP_CC) $(DEP_FLAGS) $(NIF_COMMON_SRC) \
+ | $(SED_DEPEND) >> $(TTF_DIR)/depend.mk
$(V_at)$(DEP_CC) $(DEP_FLAGS) $(SYS_SRC) \
| $(SED_DEPEND) >> $(TTF_DIR)/depend.mk
$(V_at)$(DEP_CC) $(DEP_FLAGS) $(TARGET_SRC) \
diff --git a/erts/emulator/beam/atom.c b/erts/emulator/beam/atom.c
index 099c00bcf6..a5e778e4aa 100644
--- a/erts/emulator/beam/atom.c
+++ b/erts/emulator/beam/atom.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/erts/emulator/beam/atom.h b/erts/emulator/beam/atom.h
index 2c002ca92f..fbd0528009 100644
--- a/erts/emulator/beam/atom.h
+++ b/erts/emulator/beam/atom.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.
diff --git a/erts/emulator/beam/atom.names b/erts/emulator/beam/atom.names
index dca8b503bf..8f65e71531 100644
--- a/erts/emulator/beam/atom.names
+++ b/erts/emulator/beam/atom.names
@@ -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,7 +43,7 @@ atom false true
atom Underscore='_'
atom Noname='nonode@nohost'
atom EOT='$end_of_table'
-atom Cookie=''
+atom Empty=''
#
# Used in the Beam emulator loop. (Smaller literals usually means tighter code.)
@@ -125,7 +125,9 @@ atom binary_longest_suffix_trap
atom binary_to_list_continue
atom binary_to_term_trap
atom block
+atom block_normal
atom blocked
+atom blocked_normal
atom bm
atom bnot
atom bor
@@ -159,6 +161,7 @@ atom close
atom closed
atom code
atom command
+atom commandv
atom compact
atom compat_rel
atom compile
@@ -190,9 +193,12 @@ atom dexit
atom depth
atom dgroup_leader
atom dictionary
+atom dirty_cpu
atom dirty_cpu_schedulers_online
+atom dirty_io
atom disable_trace
atom disabled
+atom discard
atom display_items
atom dist
atom dist_cmd
@@ -227,6 +233,7 @@ atom exception_trace
atom extended
atom Eq='=:='
atom Eqeq='=='
+atom erl_tracer
atom erlang
atom ERROR='ERROR'
atom error_handler
@@ -239,6 +246,9 @@ atom exact_reductions
atom exclusive
atom exit_status
atom existing
+atom existing_processes
+atom existing_ports
+atom existing
atom exiting
atom exports
atom external
@@ -263,6 +273,11 @@ atom garbage_collecting
atom garbage_collection
atom garbage_collection_info
atom gc_end
+atom gc_major_end
+atom gc_major_start
+atom gc_max_heap_size
+atom gc_minor_end
+atom gc_minor_start
atom gc_start
atom Ge='>='
atom generational
@@ -305,6 +320,7 @@ atom index
atom infinity
atom info
atom info_msg
+atom init
atom initial_call
atom input
atom internal
@@ -348,8 +364,10 @@ atom match
atom match_limit
atom match_limit_recursion
atom match_spec
+atom match_spec_result
atom max
atom maximum
+atom max_heap_size
atom max_tables max_processes
atom mbuf_size
atom md5
@@ -396,6 +414,8 @@ atom net_kernel_terminated
atom never_utf
atom new
atom new_index
+atom new_processes
+atom new_ports
atom new_uniq
atom newline
atom next
@@ -535,6 +555,7 @@ atom scheme
atom scientific
atom scope
atom seconds
+atom send_to_non_existing_process
atom sensitive
atom sequential_tracer
atom sequential_trace_token
@@ -556,6 +577,7 @@ atom size
atom sl_alloc
atom spawn_executable
atom spawn_driver
+atom spawned
atom ssl_tls
atom stack_size
atom start
@@ -564,6 +586,7 @@ atom static
atom stderr_to_stdout
atom stop
atom stream
+atom strict_monotonic
atom strict_monotonic_timestamp
atom sunrm
atom suspend
@@ -591,8 +614,9 @@ atom total_active_tasks
atom total_heap_size
atom total_run_queue_lengths
atom tpkt
-atom trace trace_ts traced
+atom trace trace_ts traced
atom trace_control_word
+atom trace_status
atom tracer
atom trap_exit
atom trim
@@ -612,6 +636,7 @@ atom use_stdio
atom used
atom utf8
atom unblock
+atom unblock_normal
atom uniq
atom unless_suspending
atom unloaded
diff --git a/erts/emulator/beam/beam_bif_load.c b/erts/emulator/beam/beam_bif_load.c
index 0b47fc3586..15e878ba65 100644
--- a/erts/emulator/beam/beam_bif_load.c
+++ b/erts/emulator/beam/beam_bif_load.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.
@@ -38,7 +38,7 @@
#include "erl_thr_progress.h"
static void set_default_trace_pattern(Eterm module);
-static Eterm check_process_code(Process* rp, Module* modp, Uint flags, int *redsp);
+static Eterm check_process_code(Process* rp, Module* modp, Uint flags, int *redsp, int fcalls);
static void delete_code(Module* modp);
static void decrement_refc(BeamCodeHeader*);
static int any_heap_ref_ptrs(Eterm* start, Eterm* end, char* mod_start, Uint mod_size);
@@ -467,7 +467,7 @@ check_old_code_1(BIF_ALIST_1)
}
Eterm
-erts_check_process_code(Process *c_p, Eterm module, Uint flags, int *redsp)
+erts_check_process_code(Process *c_p, Eterm module, Uint flags, int *redsp, int fcalls)
{
Module* modp;
Eterm res;
@@ -483,7 +483,7 @@ erts_check_process_code(Process *c_p, Eterm module, Uint flags, int *redsp)
return am_false;
erts_rlock_old_code(code_ix);
res = (!modp->old.code_hdr ? am_false :
- check_process_code(c_p, modp, flags, redsp));
+ check_process_code(c_p, modp, flags, redsp, fcalls));
erts_runlock_old_code(code_ix);
return res;
@@ -506,7 +506,7 @@ BIF_RETTYPE erts_internal_check_process_code_2(BIF_ALIST_2)
goto badarg;
}
- res = erts_check_process_code(BIF_P, BIF_ARG_1, flags, &reds);
+ res = erts_check_process_code(BIF_P, BIF_ARG_1, flags, &reds, BIF_P->fcalls);
ASSERT(is_value(res));
@@ -625,8 +625,8 @@ BIF_RETTYPE call_on_load_function_1(BIF_ALIST_1)
{
Module* modp = erts_get_module(BIF_ARG_1, erts_active_code_ix());
- if (modp && modp->curr.code_hdr) {
- BIF_TRAP_CODE_PTR_0(BIF_P, modp->curr.code_hdr->on_load_function_ptr);
+ if (modp && modp->old.code_hdr) {
+ BIF_TRAP_CODE_PTR_0(BIF_P, modp->old.code_hdr->on_load_function_ptr);
}
else {
BIF_ERROR(BIF_P, BADARG);
@@ -651,14 +651,14 @@ BIF_RETTYPE finish_after_on_load_2(BIF_ALIST_2)
code_ix = erts_active_code_ix();
modp = erts_get_module(BIF_ARG_1, code_ix);
- if (!modp || !modp->curr.code_hdr) {
+ if (!modp || !modp->old.code_hdr) {
error:
erts_smp_thr_progress_unblock();
erts_smp_proc_lock(BIF_P, ERTS_PROC_LOCK_MAIN);
erts_release_code_write_permission();
BIF_ERROR(BIF_P, BADARG);
}
- if (modp->curr.code_hdr->on_load_function_ptr == NULL) {
+ if (modp->old.code_hdr->on_load_function_ptr == NULL) {
goto error;
}
if (BIF_ARG_2 != am_false && BIF_ARG_2 != am_true) {
@@ -667,44 +667,55 @@ BIF_RETTYPE finish_after_on_load_2(BIF_ALIST_2)
if (BIF_ARG_2 == am_true) {
int i;
+ struct erl_module_instance t;
+
+ /*
+ * Swap old and new code.
+ */
+ t = modp->curr;
+ modp->curr = modp->old;
+ modp->old = t;
/*
* The on_load function succeded. Fix up export entries.
*/
for (i = 0; i < export_list_size(code_ix); i++) {
Export *ep = export_list(i,code_ix);
- if (ep != NULL &&
- ep->code[0] == BIF_ARG_1 &&
- ep->code[4] != 0) {
+ if (ep == NULL || ep->code[0] != BIF_ARG_1) {
+ continue;
+ }
+ if (ep->code[4] != 0) {
ep->addressv[code_ix] = (void *) ep->code[4];
ep->code[4] = 0;
+ } else {
+ if (ep->addressv[code_ix] == ep->code+3 &&
+ ep->code[3] == (BeamInstr) em_apply_bif) {
+ continue;
+ }
+ ep->addressv[code_ix] = ep->code+3;
+ ep->code[3] = (BeamInstr) em_call_error_handler;
}
}
modp->curr.code_hdr->on_load_function_ptr = NULL;
set_default_trace_pattern(BIF_ARG_1);
} else if (BIF_ARG_2 == am_false) {
- BeamInstr* code;
- BeamInstr* end;
+ int i;
/*
- * The on_load function failed. Remove the loaded code.
- * This is an combination of delete and purge. We purge
- * the current code; the old code is not touched.
+ * The on_load function failed. Remove references to the
+ * code that is about to be purged from the export entries.
*/
- erts_total_code_size -= modp->curr.code_length;
- code = (BeamInstr*) modp->curr.code_hdr;
- end = (BeamInstr *) ((char *)code + modp->curr.code_length);
- erts_cleanup_funs_on_purge(code, end);
- beam_catches_delmod(modp->curr.catches, code, modp->curr.code_length,
- erts_active_code_ix());
- if (modp->curr.code_hdr->literals_start) {
- erts_free(ERTS_ALC_T_LITERAL, modp->curr.code_hdr->literals_start);
- }
- erts_free(ERTS_ALC_T_CODE, modp->curr.code_hdr);
- modp->curr.code_hdr = NULL;
- modp->curr.code_length = 0;
- modp->curr.catches = BEAM_CATCHES_NIL;
- erts_remove_from_ranges(code);
+
+ for (i = 0; i < export_list_size(code_ix); i++) {
+ Export *ep = export_list(i,code_ix);
+ if (ep == NULL || ep->code[0] != BIF_ARG_1) {
+ continue;
+ }
+ if (ep->code[3] == (BeamInstr) em_apply_bif) {
+ continue;
+ }
+ ep->code[4] = 0;
+ }
}
erts_smp_thr_progress_unblock();
erts_smp_proc_lock(BIF_P, ERTS_PROC_LOCK_MAIN);
@@ -719,13 +730,13 @@ set_default_trace_pattern(Eterm module)
Binary *match_spec;
Binary *meta_match_spec;
struct trace_pattern_flags trace_pattern_flags;
- Eterm meta_tracer_pid;
+ ErtsTracer meta_tracer;
erts_get_default_trace_pattern(&trace_pattern_is_on,
&match_spec,
&meta_match_spec,
&trace_pattern_flags,
- &meta_tracer_pid);
+ &meta_tracer);
if (trace_pattern_is_on) {
Eterm mfa[1];
mfa[0] = module;
@@ -733,7 +744,7 @@ set_default_trace_pattern(Eterm module)
match_spec,
meta_match_spec,
1, trace_pattern_flags,
- meta_tracer_pid, 1);
+ meta_tracer, 1);
}
}
@@ -751,9 +762,14 @@ check_mod_funs(Process *p, ErlOffHeap *off_heap, char *area, size_t area_size)
return 0;
}
+static Uint hfrag_literal_size(Eterm* start, Eterm* end,
+ char* lit_start, Uint lit_size);
+static void hfrag_literal_copy(Eterm **hpp, ErlOffHeap *ohp,
+ Eterm *start, Eterm *end,
+ char *lit_start, Uint lit_size);
static Eterm
-check_process_code(Process* rp, Module* modp, Uint flags, int *redsp)
+check_process_code(Process* rp, Module* modp, Uint flags, int *redsp, int fcalls)
{
BeamInstr* start;
char* literals;
@@ -831,9 +847,14 @@ check_process_code(Process* rp, Module* modp, Uint flags, int *redsp)
}
/*
- * Message queue can contains funs, but (at least currently) no
- * constants. If we got references to this module from the message
- * queue, a GC cannot remove these...
+ * Message queue can contains funs, and may contain
+ * literals. If we got references to this module from the message
+ * queue.
+ *
+ * If a literal is in the message queue we maka an explicit copy of
+ * and attach it to the heap fragment. Each message needs to be
+ * self contained, we cannot save the literal in the old_heap or
+ * any other heap than the message it self.
*/
erts_smp_proc_lock(rp, ERTS_PROC_LOCK_MSGQ);
@@ -850,15 +871,31 @@ check_process_code(Process* rp, Module* modp, Uint flags, int *redsp)
hfrag = msgp->data.heap_frag;
else
continue;
- for (; hfrag; hfrag = hfrag->next) {
- if (check_mod_funs(rp, &hfrag->off_heap, mod_start, mod_size))
- return am_true;
- /* Should not contain any constants... */
- ASSERT(!any_heap_refs(&hfrag->mem[0],
- &hfrag->mem[hfrag->used_size],
- literals,
- lit_bsize));
- }
+ {
+ ErlHeapFragment *hf;
+ Uint lit_sz;
+ for (hf=hfrag; hf; hf = hf->next) {
+ if (check_mod_funs(rp, &hfrag->off_heap, mod_start, mod_size))
+ return am_true;
+ lit_sz = hfrag_literal_size(&hf->mem[0], &hf->mem[hf->used_size],
+ literals, lit_bsize);
+ }
+ if (lit_sz > 0) {
+ ErlHeapFragment *bp = new_message_buffer(lit_sz);
+ Eterm *hp = bp->mem;
+
+ for (hf=hfrag; hf; hf = hf->next) {
+ hfrag_literal_copy(&hp, &bp->off_heap,
+ &hf->mem[0], &hf->mem[hf->used_size],
+ literals, lit_bsize);
+ hfrag=hf;
+ }
+ /* link new hfrag last */
+ ASSERT(hfrag->next == NULL);
+ hfrag->next = bp;
+ bp->next = NULL;
+ }
+ }
}
while (1) {
@@ -905,29 +942,26 @@ check_process_code(Process* rp, Module* modp, Uint flags, int *redsp)
goto try_literal_gc;
}
-#ifdef DEBUG
/*
- * Message buffer fragments should not have any references
- * to constants, and off heap lists should already have
- * been moved into process off heap structure.
+ * Message buffer fragments (matched messages)
+ * - off heap lists should already have been moved into
+ * process off heap structure.
+ * - Check for literals
*/
for (msgp = rp->msg_frag; msgp; msgp = msgp->next) {
- if (msgp->data.attached == ERTS_MSG_COMBINED_HFRAG)
- hfrag = &msgp->hfrag;
- else
- hfrag = msgp->data.heap_frag;
+ hfrag = erts_message_to_heap_frag(msgp);
for (; hfrag; hfrag = hfrag->next) {
Eterm *hp, *hp_end;
ASSERT(!check_mod_funs(rp, &hfrag->off_heap, mod_start, mod_size));
hp = &hfrag->mem[0];
hp_end = &hfrag->mem[hfrag->used_size];
- ASSERT(!any_heap_refs(hp, hp_end, literals, lit_bsize));
+
+ if (any_heap_refs(hp, hp_end, literals, lit_bsize))
+ goto try_literal_gc;
}
}
-#endif
-
return am_false;
try_literal_gc:
@@ -945,7 +979,7 @@ check_process_code(Process* rp, Module* modp, Uint flags, int *redsp)
need_gc &= ~done_gc;
/*
- * Try to get rid of constants by by garbage collecting.
+ * Try to get rid of literals by by garbage collecting.
* Clear both fvalue and ftrace.
*/
@@ -955,7 +989,7 @@ check_process_code(Process* rp, Module* modp, Uint flags, int *redsp)
if (need_gc & ERTS_ORDINARY_GC__) {
FLAGS(rp) |= F_NEED_FULLSWEEP;
- *redsp += erts_garbage_collect_nobump(rp, 0, rp->arg_reg, rp->arity);
+ *redsp += erts_garbage_collect_nobump(rp, 0, rp->arg_reg, rp->arity, fcalls);
done_gc |= ERTS_ORDINARY_GC__;
}
if (need_gc & ERTS_LITERAL_GC__) {
@@ -1027,6 +1061,80 @@ any_heap_refs(Eterm* start, Eterm* end, char* mod_start, Uint mod_size)
return 0;
}
+static Uint
+hfrag_literal_size(Eterm* start, Eterm* end, char* lit_start, Uint lit_size)
+{
+ Eterm* p;
+ Eterm val;
+ Uint sz = 0;
+
+ for (p = start; p < end; p++) {
+ val = *p;
+ switch (primary_tag(val)) {
+ case TAG_PRIMARY_BOXED:
+ case TAG_PRIMARY_LIST:
+ if (ErtsInArea(val, lit_start, lit_size)) {
+ sz += size_object(val);
+ }
+ break;
+ case TAG_PRIMARY_HEADER:
+ if (!header_is_transparent(val)) {
+ Eterm* new_p;
+ if (header_is_bin_matchstate(val)) {
+ ErlBinMatchState *ms = (ErlBinMatchState*) p;
+ ErlBinMatchBuffer *mb = &(ms->mb);
+ if (ErtsInArea(mb->orig, lit_start, lit_size)) {
+ sz += size_object(mb->orig);
+ }
+ }
+ new_p = p + thing_arityval(val);
+ ASSERT(start <= new_p && new_p < end);
+ p = new_p;
+ }
+ }
+ }
+ return sz;
+}
+
+static void
+hfrag_literal_copy(Eterm **hpp, ErlOffHeap *ohp,
+ Eterm *start, Eterm *end,
+ char *lit_start, Uint lit_size) {
+ Eterm* p;
+ Eterm val;
+ Uint sz;
+
+ for (p = start; p < end; p++) {
+ val = *p;
+ switch (primary_tag(val)) {
+ case TAG_PRIMARY_BOXED:
+ case TAG_PRIMARY_LIST:
+ if (ErtsInArea(val, lit_start, lit_size)) {
+ sz = size_object(val);
+ val = copy_struct(val, sz, hpp, ohp);
+ *p = val;
+ }
+ break;
+ case TAG_PRIMARY_HEADER:
+ if (!header_is_transparent(val)) {
+ Eterm* new_p;
+ /* matchstate in message, not possible. */
+ if (header_is_bin_matchstate(val)) {
+ ErlBinMatchState *ms = (ErlBinMatchState*) p;
+ ErlBinMatchBuffer *mb = &(ms->mb);
+ if (ErtsInArea(mb->orig, lit_start, lit_size)) {
+ sz = size_object(mb->orig);
+ mb->orig = copy_struct(mb->orig, sz, hpp, ohp);
+ }
+ }
+ new_p = p + thing_arityval(val);
+ ASSERT(start <= new_p && new_p < end);
+ p = new_p;
+ }
+ }
+ }
+}
+
#undef in_area
#ifdef ERTS_SMP
@@ -1264,6 +1372,7 @@ delete_code(Module* modp)
modp->curr.code_length = 0;
modp->curr.catches = BEAM_CATCHES_NIL;
modp->curr.nif = NULL;
+
}
diff --git a/erts/emulator/beam/beam_bp.c b/erts/emulator/beam/beam_bp.c
index 5d471d168b..8489897d3a 100644
--- a/erts/emulator/beam/beam_bp.c
+++ b/erts/emulator/beam/beam_bp.c
@@ -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.
@@ -82,7 +82,7 @@ erts_smp_atomic32_t erts_staging_bp_index;
static ERTS_INLINE ErtsMonotonicTime
get_mtime(Process *c_p)
{
- return erts_get_monotonic_time(ERTS_PROC_GET_SCHDATA(c_p));
+ return erts_get_monotonic_time(erts_proc_sched_data(c_p));
}
/* *************************************************************************
@@ -92,15 +92,15 @@ get_mtime(Process *c_p)
/*
** Helpers
*/
-static Eterm do_call_trace(Process* c_p, BeamInstr* I, Eterm* reg,
- int local, Binary* ms, Eterm tracer_pid);
+static ErtsTracer do_call_trace(Process* c_p, BeamInstr* I, Eterm* reg,
+ int local, Binary* ms, ErtsTracer tracer);
static void set_break(BpFunctions* f, Binary *match_spec, Uint break_flags,
- enum erts_break_op count_op, Eterm tracer_pid);
+ enum erts_break_op count_op, ErtsTracer tracer);
static void set_function_break(BeamInstr *pc,
Binary *match_spec,
Uint break_flags,
enum erts_break_op count_op,
- Eterm tracer_pid);
+ ErtsTracer tracer);
static void clear_break(BpFunctions* f, Uint break_flags);
static int clear_function_break(BeamInstr *pc, Uint break_flags);
@@ -108,7 +108,7 @@ static int clear_function_break(BeamInstr *pc, Uint break_flags);
static BpDataTime* get_time_break(BeamInstr *pc);
static GenericBpData* check_break(BeamInstr *pc, Uint break_flags);
-static void bp_meta_unref(BpMetaPid* bmp);
+static void bp_meta_unref(BpMetaTracer* bmt);
static void bp_count_unref(BpCount* bcp);
static void bp_time_unref(BpDataTime* bdt);
static void consolidate_bp_data(Module* modp, BeamInstr* pc, int local);
@@ -248,7 +248,10 @@ erts_bp_match_export(BpFunctions* f, Eterm mfa[3], int specified)
void
erts_bp_free_matched_functions(BpFunctions* f)
{
- Free(f->matching);
+ if (f->matching) {
+ Free(f->matching);
+ }
+ else ASSERT(f->matched == 0);
}
void
@@ -302,7 +305,7 @@ consolidate_bp_data(Module* modp, BeamInstr* pc, int local)
MatchSetUnref(dst->local_ms);
}
if (flags & ERTS_BPF_META_TRACE) {
- bp_meta_unref(dst->meta_pid);
+ bp_meta_unref(dst->meta_tracer);
MatchSetUnref(dst->meta_ms);
}
if (flags & ERTS_BPF_COUNT) {
@@ -343,8 +346,8 @@ consolidate_bp_data(Module* modp, BeamInstr* pc, int local)
MatchSetRef(dst->local_ms);
}
if (flags & ERTS_BPF_META_TRACE) {
- dst->meta_pid = src->meta_pid;
- erts_refc_inc(&dst->meta_pid->refc, 1);
+ dst->meta_tracer = src->meta_tracer;
+ erts_refc_inc(&dst->meta_tracer->refc, 1);
dst->meta_ms = src->meta_ms;
MatchSetRef(dst->meta_ms);
}
@@ -436,13 +439,13 @@ uninstall_breakpoint(BeamInstr* pc)
void
erts_set_trace_break(BpFunctions* f, Binary *match_spec)
{
- set_break(f, match_spec, ERTS_BPF_LOCAL_TRACE, 0, am_true);
+ set_break(f, match_spec, ERTS_BPF_LOCAL_TRACE, 0, erts_tracer_true);
}
void
-erts_set_mtrace_break(BpFunctions* f, Binary *match_spec, Eterm tracer_pid)
+erts_set_mtrace_break(BpFunctions* f, Binary *match_spec, ErtsTracer tracer)
{
- set_break(f, match_spec, ERTS_BPF_META_TRACE, 0, tracer_pid);
+ set_break(f, match_spec, ERTS_BPF_META_TRACE, 0, tracer);
}
void
@@ -450,13 +453,13 @@ erts_set_call_trace_bif(BeamInstr *pc, Binary *match_spec, int local)
{
Uint flags = local ? ERTS_BPF_LOCAL_TRACE : ERTS_BPF_GLOBAL_TRACE;
- set_function_break(pc, match_spec, flags, 0, NIL);
+ set_function_break(pc, match_spec, flags, 0, erts_tracer_nil);
}
void
-erts_set_mtrace_bif(BeamInstr *pc, Binary *match_spec, Eterm tracer_pid)
+erts_set_mtrace_bif(BeamInstr *pc, Binary *match_spec, ErtsTracer tracer)
{
- set_function_break(pc, match_spec, ERTS_BPF_META_TRACE, 0, tracer_pid);
+ set_function_break(pc, match_spec, ERTS_BPF_META_TRACE, 0, tracer);
}
void
@@ -464,7 +467,7 @@ erts_set_time_trace_bif(BeamInstr *pc, enum erts_break_op count_op)
{
set_function_break(pc, NULL,
ERTS_BPF_TIME_TRACE|ERTS_BPF_TIME_TRACE_ACTIVE,
- count_op, NIL);
+ count_op, erts_tracer_nil);
}
void
@@ -474,21 +477,21 @@ erts_clear_time_trace_bif(BeamInstr *pc) {
void
erts_set_debug_break(BpFunctions* f) {
- set_break(f, NULL, ERTS_BPF_DEBUG, 0, NIL);
+ set_break(f, NULL, ERTS_BPF_DEBUG, 0, erts_tracer_nil);
}
void
erts_set_count_break(BpFunctions* f, enum erts_break_op count_op)
{
set_break(f, 0, ERTS_BPF_COUNT|ERTS_BPF_COUNT_ACTIVE,
- count_op, NIL);
+ count_op, erts_tracer_nil);
}
void
erts_set_time_break(BpFunctions* f, enum erts_break_op count_op)
{
set_break(f, 0, ERTS_BPF_TIME_TRACE|ERTS_BPF_TIME_TRACE_ACTIVE,
- count_op, NIL);
+ count_op, erts_tracer_nil);
}
void
@@ -625,19 +628,26 @@ erts_generic_breakpoint(Process* c_p, BeamInstr* I, Eterm* reg)
if (bp_flags & ERTS_BPF_LOCAL_TRACE) {
ASSERT((bp_flags & ERTS_BPF_GLOBAL_TRACE) == 0);
- (void) do_call_trace(c_p, I, reg, 1, bp->local_ms, am_true);
+ (void) do_call_trace(c_p, I, reg, 1, bp->local_ms, erts_tracer_true);
} else if (bp_flags & ERTS_BPF_GLOBAL_TRACE) {
- (void) do_call_trace(c_p, I, reg, 0, bp->local_ms, am_true);
+ (void) do_call_trace(c_p, I, reg, 0, bp->local_ms, erts_tracer_true);
}
if (bp_flags & ERTS_BPF_META_TRACE) {
- Eterm old_pid;
- Eterm new_pid;
-
- old_pid = (Eterm) erts_smp_atomic_read_nob(&bp->meta_pid->pid);
- new_pid = do_call_trace(c_p, I, reg, 1, bp->meta_ms, old_pid);
- if (new_pid != old_pid) {
- erts_smp_atomic_set_nob(&bp->meta_pid->pid, new_pid);
+ ErtsTracer old_tracer, new_tracer;
+
+ old_tracer = erts_smp_atomic_read_nob(&bp->meta_tracer->tracer);
+
+ new_tracer = do_call_trace(c_p, I, reg, 1, bp->meta_ms, old_tracer);
+ if (!ERTS_TRACER_COMPARE(new_tracer, old_tracer)) {
+ if (old_tracer == erts_smp_atomic_cmpxchg_acqb(
+ &bp->meta_tracer->tracer,
+ (erts_aint_t)new_tracer,
+ (erts_aint_t)old_tracer)) {
+ ERTS_TRACER_CLEAR(&old_tracer);
+ } else {
+ ERTS_TRACER_CLEAR(&new_tracer);
+ }
}
}
@@ -645,7 +655,7 @@ erts_generic_breakpoint(Process* c_p, BeamInstr* I, Eterm* reg)
erts_smp_atomic_inc_nob(&bp->count->acount);
}
- if (bp_flags & ERTS_BPF_TIME_TRACE_ACTIVE && erts_is_tracer_proc_valid(c_p)) {
+ if (bp_flags & ERTS_BPF_TIME_TRACE_ACTIVE) {
Eterm w;
erts_trace_time_call(c_p, I, bp->time);
w = (BeamInstr) *c_p->cp;
@@ -690,7 +700,7 @@ erts_bif_trace(int bif_index, Process* p, Eterm* args, BeamInstr* I)
Eterm (*func)(Process*, Eterm*, BeamInstr*);
Export* ep = bif_export[bif_index];
Uint32 flags = 0, flags_meta = 0;
- Eterm meta_tracer_pid = NIL;
+ ErtsTracer meta_tracer = erts_tracer_nil;
int applying = (I == &(ep->code[3])); /* Yup, the apply code for a bif
* is actually in the
* export entry */
@@ -718,23 +728,31 @@ erts_bif_trace(int bif_index, Process* p, Eterm* args, BeamInstr* I)
IS_TRACED_FL(p, F_TRACE_CALLS)) {
int local = !!(bp_flags & ERTS_BPF_LOCAL_TRACE);
flags = erts_call_trace(p, ep->code, bp->local_ms, args,
- local, &ERTS_TRACER_PROC(p));
+ local, &ERTS_TRACER(p));
}
if (bp_flags & ERTS_BPF_META_TRACE) {
- Eterm tpid1, tpid2;
+ ErtsTracer old_tracer;
- tpid1 = tpid2 =
- (Eterm) erts_smp_atomic_read_nob(&bp->meta_pid->pid);
+ meta_tracer = erts_smp_atomic_read_nob(&bp->meta_tracer->tracer);
+ old_tracer = meta_tracer;
flags_meta = erts_call_trace(p, ep->code, bp->meta_ms, args,
- 0, &tpid2);
- meta_tracer_pid = tpid2;
- if (tpid1 != tpid2) {
- erts_smp_atomic_set_nob(&bp->meta_pid->pid, tpid2);
+ 0, &meta_tracer);
+
+ if (!ERTS_TRACER_COMPARE(old_tracer, meta_tracer)) {
+ ErtsTracer new_tracer = erts_tracer_nil;
+ erts_tracer_update(&new_tracer, meta_tracer);
+ if (old_tracer == erts_smp_atomic_cmpxchg_acqb(
+ &bp->meta_tracer->tracer,
+ (erts_aint_t)new_tracer,
+ (erts_aint_t)old_tracer)) {
+ ERTS_TRACER_CLEAR(&old_tracer);
+ } else {
+ ERTS_TRACER_CLEAR(&new_tracer);
+ }
}
}
if (bp_flags & ERTS_BPF_TIME_TRACE_ACTIVE &&
- IS_TRACED_FL(p, F_TRACE_CALLS) &&
- erts_is_tracer_proc_valid(p)) {
+ IS_TRACED_FL(p, F_TRACE_CALLS)) {
BeamInstr *pc = (BeamInstr *)ep->code+3;
erts_trace_time_call(p, pc, bp->time);
}
@@ -778,8 +796,6 @@ erts_bif_trace(int bif_index, Process* p, Eterm* args, BeamInstr* I)
if (reason != TRAP) {
Eterm class;
Eterm value = p->fvalue;
- DeclareTmpHeapNoproc(nocatch,3);
- UseTmpHeapNoproc(3);
/* Expand error value like in handle_error() */
if (reason & EXF_ARGLIST) {
Eterm *tp;
@@ -788,7 +804,8 @@ erts_bif_trace(int bif_index, Process* p, Eterm* args, BeamInstr* I)
value = tp[1];
}
if ((reason & EXF_THROWN) && (p->catches <= 0)) {
- value = TUPLE2(nocatch, am_nocatch, value);
+ Eterm *hp = HAlloc(p, 3);
+ value = TUPLE2(hp, am_nocatch, value);
reason = EXC_ERROR;
}
/* Note: expand_error_value() could theoretically
@@ -801,11 +818,11 @@ erts_bif_trace(int bif_index, Process* p, Eterm* args, BeamInstr* I)
if (flags_meta & MATCH_SET_EXCEPTION_TRACE) {
erts_trace_exception(p, ep->code, class, value,
- &meta_tracer_pid);
+ &meta_tracer);
}
if (flags & MATCH_SET_EXCEPTION_TRACE) {
erts_trace_exception(p, ep->code, class, value,
- &ERTS_TRACER_PROC(p));
+ &ERTS_TRACER(p));
}
if ((flags & MATCH_SET_RETURN_TO_TRACE) && p->catches > 0) {
/* can only happen if(local)*/
@@ -827,7 +844,6 @@ erts_bif_trace(int bif_index, Process* p, Eterm* args, BeamInstr* I)
}
}
}
- UnUseTmpHeapNoproc(3);
if ((flags_meta|flags) & MATCH_SET_EXCEPTION_TRACE) {
erts_smp_proc_lock(p, ERTS_PROC_LOCKS_ALL_MINOR);
ERTS_TRACE_FLAGS(p) |= F_EXCEPTION_TRACE;
@@ -836,11 +852,11 @@ erts_bif_trace(int bif_index, Process* p, Eterm* args, BeamInstr* I)
}
} else {
if (flags_meta & MATCH_SET_RX_TRACE) {
- erts_trace_return(p, ep->code, result, &meta_tracer_pid);
+ erts_trace_return(p, ep->code, result, &meta_tracer);
}
/* MATCH_SET_RETURN_TO_TRACE cannot occur if(meta) */
if (flags & MATCH_SET_RX_TRACE) {
- erts_trace_return(p, ep->code, result, &ERTS_TRACER_PROC(p));
+ erts_trace_return(p, ep->code, result, &ERTS_TRACER(p));
}
if (flags & MATCH_SET_RETURN_TO_TRACE) {
/* can only happen if(local)*/
@@ -857,9 +873,9 @@ erts_bif_trace(int bif_index, Process* p, Eterm* args, BeamInstr* I)
return result;
}
-static Eterm
+static ErtsTracer
do_call_trace(Process* c_p, BeamInstr* I, Eterm* reg,
- int local, Binary* ms, Eterm tracer_pid)
+ int local, Binary* ms, ErtsTracer tracer)
{
Eterm* cpp;
int return_to_trace = 0;
@@ -899,7 +915,7 @@ do_call_trace(Process* c_p, BeamInstr* I, Eterm* reg,
ASSERT(is_CP(*cpp));
}
ERTS_SMP_UNREQ_PROC_MAIN_LOCK(c_p);
- flags = erts_call_trace(c_p, I-3, ms, reg, local, &tracer_pid);
+ flags = erts_call_trace(c_p, I-3, ms, reg, local, &tracer);
ERTS_SMP_REQ_PROC_MAIN_LOCK(c_p);
if (cpp) {
c_p->cp = cp_save;
@@ -910,7 +926,7 @@ do_call_trace(Process* c_p, BeamInstr* I, Eterm* reg,
need += 1;
}
if (flags & MATCH_SET_RX_TRACE) {
- need += 3;
+ need += 3 + size_object(tracer);
}
if (need) {
ASSERT(c_p->htop <= E && E <= c_p->hend);
@@ -926,14 +942,15 @@ do_call_trace(Process* c_p, BeamInstr* I, Eterm* reg,
E[0] = make_cp(c_p->cp);
c_p->cp = beam_return_to_trace;
}
- if (flags & MATCH_SET_RX_TRACE) {
+ if (flags & MATCH_SET_RX_TRACE)
+ {
E -= 3;
+ c_p->stop = E;
ASSERT(c_p->htop <= E && E <= c_p->hend);
ASSERT(is_CP((Eterm) (UWord) (I - 3)));
- ASSERT(am_true == tracer_pid ||
- is_internal_pid(tracer_pid) || is_internal_port(tracer_pid));
+ ASSERT(IS_TRACER_VALID(tracer));
E[2] = make_cp(c_p->cp);
- E[1] = tracer_pid;
+ E[1] = copy_object(tracer, c_p);
E[0] = make_cp(I - 3); /* We ARE at the beginning of an
instruction,
the funcinfo is above i. */
@@ -942,9 +959,9 @@ do_call_trace(Process* c_p, BeamInstr* I, Eterm* reg,
erts_smp_proc_lock(c_p, ERTS_PROC_LOCKS_ALL_MINOR);
ERTS_TRACE_FLAGS(c_p) |= F_EXCEPTION_TRACE;
erts_smp_proc_unlock(c_p, ERTS_PROC_LOCKS_ALL_MINOR);
- }
- c_p->stop = E;
- return tracer_pid;
+ } else
+ c_p->stop = E;
+ return tracer;
}
void
@@ -957,7 +974,8 @@ erts_trace_time_call(Process* c_p, BeamInstr* I, BpDataTime* bdt)
BpDataTime *pbdt = NULL;
ASSERT(c_p);
- ASSERT(erts_smp_atomic32_read_acqb(&c_p->state) & ERTS_PSFLG_RUNNING);
+ ASSERT(erts_smp_atomic32_read_acqb(&c_p->state) & (ERTS_PSFLG_RUNNING
+ | ERTS_PSFLG_DIRTY_RUNNING));
/* get previous timestamp and breakpoint
* from the process psd */
@@ -974,7 +992,7 @@ erts_trace_time_call(Process* c_p, BeamInstr* I, BpDataTime* bdt)
if (pbt == 0) {
/* First call of process to instrumented function */
pbt = Alloc(sizeof(process_breakpoint_time_t));
- (void) ERTS_PROC_SET_CALL_TIME(c_p, ERTS_PROC_LOCK_MAIN, pbt);
+ (void) ERTS_PROC_SET_CALL_TIME(c_p, pbt);
} else {
ASSERT(pbt->pc);
/* add time to previous code */
@@ -1034,7 +1052,8 @@ erts_trace_time_return(Process *p, BeamInstr *pc)
BpDataTime *pbdt = NULL;
ASSERT(p);
- ASSERT(erts_smp_atomic32_read_acqb(&p->state) & ERTS_PSFLG_RUNNING);
+ ASSERT(erts_smp_atomic32_read_acqb(&p->state) & (ERTS_PSFLG_RUNNING
+ | ERTS_PSFLG_DIRTY_RUNNING));
/* get previous timestamp and breakpoint
* from the process psd */
@@ -1098,9 +1117,9 @@ erts_is_trace_break(BeamInstr *pc, Binary **match_spec_ret, int local)
return 0;
}
-int
+int
erts_is_mtrace_break(BeamInstr *pc, Binary **match_spec_ret,
- Eterm *tracer_pid_ret)
+ ErtsTracer *tracer_ret)
{
GenericBpData* bp = check_break(pc, ERTS_BPF_META_TRACE);
@@ -1108,9 +1127,8 @@ erts_is_mtrace_break(BeamInstr *pc, Binary **match_spec_ret,
if (match_spec_ret) {
*match_spec_ret = bp->meta_ms;
}
- if (tracer_pid_ret) {
- *tracer_pid_ret =
- (Eterm) erts_smp_atomic_read_nob(&bp->meta_pid->pid);
+ if (tracer_ret) {
+ *tracer_ret = erts_smp_atomic_read_nob(&bp->meta_tracer->tracer);
}
return 1;
}
@@ -1391,7 +1409,7 @@ void erts_schedule_time_break(Process *p, Uint schedule) {
static void
set_break(BpFunctions* f, Binary *match_spec, Uint break_flags,
- enum erts_break_op count_op, Eterm tracer_pid)
+ enum erts_break_op count_op, ErtsTracer tracer)
{
Uint i;
Uint n;
@@ -1400,13 +1418,13 @@ set_break(BpFunctions* f, Binary *match_spec, Uint break_flags,
for (i = 0; i < n; i++) {
BeamInstr* pc = f->matching[i].pc;
set_function_break(pc, match_spec, break_flags,
- count_op, tracer_pid);
+ count_op, tracer);
}
}
static void
set_function_break(BeamInstr *pc, Binary *match_spec, Uint break_flags,
- enum erts_break_op count_op, Eterm tracer_pid)
+ enum erts_break_op count_op, ErtsTracer tracer)
{
GenericBp* g;
GenericBpData* bp;
@@ -1417,7 +1435,7 @@ set_function_break(BeamInstr *pc, Binary *match_spec, Uint break_flags,
g = (GenericBp *) pc[-4];
if (g == 0) {
int i;
- if (count_op == erts_break_reset || count_op == erts_break_stop) {
+ if (count_op == ERTS_BREAK_RESTART || count_op == ERTS_BREAK_PAUSE) {
/* Do not insert a new breakpoint */
return;
}
@@ -1439,9 +1457,9 @@ set_function_break(BeamInstr *pc, Binary *match_spec, Uint break_flags,
MatchSetUnref(bp->local_ms);
} else if (common & ERTS_BPF_META_TRACE) {
MatchSetUnref(bp->meta_ms);
- bp_meta_unref(bp->meta_pid);
+ bp_meta_unref(bp->meta_tracer);
} else if (common & ERTS_BPF_COUNT) {
- if (count_op == erts_break_stop) {
+ if (count_op == ERTS_BREAK_PAUSE) {
bp->flags &= ~ERTS_BPF_COUNT_ACTIVE;
} else {
bp->flags |= ERTS_BPF_COUNT_ACTIVE;
@@ -1453,7 +1471,7 @@ set_function_break(BeamInstr *pc, Binary *match_spec, Uint break_flags,
BpDataTime* bdt = bp->time;
Uint i = 0;
- if (count_op == erts_break_stop) {
+ if (count_op == ERTS_BREAK_PAUSE) {
bp->flags &= ~ERTS_BPF_TIME_TRACE_ACTIVE;
} else {
bp->flags |= ERTS_BPF_TIME_TRACE_ACTIVE;
@@ -1474,13 +1492,15 @@ set_function_break(BeamInstr *pc, Binary *match_spec, Uint break_flags,
MatchSetRef(match_spec);
bp->local_ms = match_spec;
} else if (break_flags & ERTS_BPF_META_TRACE) {
- BpMetaPid* bmp;
+ BpMetaTracer* bmt;
+ ErtsTracer meta_tracer = erts_tracer_nil;
MatchSetRef(match_spec);
bp->meta_ms = match_spec;
- bmp = Alloc(sizeof(BpMetaPid));
- erts_refc_init(&bmp->refc, 1);
- erts_smp_atomic_init_nob(&bmp->pid, tracer_pid);
- bp->meta_pid = bmp;
+ bmt = Alloc(sizeof(BpMetaTracer));
+ erts_refc_init(&bmt->refc, 1);
+ erts_tracer_update(&meta_tracer, tracer); /* copy tracer */
+ erts_smp_atomic_init_nob(&bmt->tracer, (erts_aint_t)meta_tracer);
+ bp->meta_tracer = bmt;
} else if (break_flags & ERTS_BPF_COUNT) {
BpCount* bcp;
@@ -1544,7 +1564,7 @@ clear_function_break(BeamInstr *pc, Uint break_flags)
}
if (common & ERTS_BPF_META_TRACE) {
MatchSetUnref(bp->meta_ms);
- bp_meta_unref(bp->meta_pid);
+ bp_meta_unref(bp->meta_tracer);
}
if (common & ERTS_BPF_COUNT) {
ASSERT((bp->flags & ERTS_BPF_COUNT_ACTIVE) == 0);
@@ -1560,10 +1580,12 @@ clear_function_break(BeamInstr *pc, Uint break_flags)
}
static void
-bp_meta_unref(BpMetaPid* bmp)
+bp_meta_unref(BpMetaTracer* bmt)
{
- if (erts_refc_dectest(&bmp->refc, 0) <= 0) {
- Free(bmp);
+ if (erts_refc_dectest(&bmt->refc, 0) <= 0) {
+ ErtsTracer trc = erts_smp_atomic_read_nob(&bmt->tracer);
+ ERTS_TRACER_CLEAR(&trc);
+ Free(bmt);
}
}
@@ -1598,9 +1620,7 @@ bp_time_unref(BpDataTime* bdt)
h_p = erts_pid2proc(NULL, 0, item->pid,
ERTS_PROC_LOCK_MAIN);
if (h_p) {
- pbt = ERTS_PROC_SET_CALL_TIME(h_p,
- ERTS_PROC_LOCK_MAIN,
- NULL);
+ pbt = ERTS_PROC_SET_CALL_TIME(h_p, NULL);
if (pbt) {
Free(pbt);
}
diff --git a/erts/emulator/beam/beam_bp.h b/erts/emulator/beam/beam_bp.h
index 2b89d6fc71..541af77211 100644
--- a/erts/emulator/beam/beam_bp.h
+++ b/erts/emulator/beam/beam_bp.h
@@ -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.
@@ -55,15 +55,15 @@ typedef struct {
} BpCount;
typedef struct {
- erts_smp_atomic_t pid;
+ erts_smp_atomic_t tracer;
erts_refc_t refc;
-} BpMetaPid;
+} BpMetaTracer;
typedef struct generic_bp_data {
Uint flags;
Binary* local_ms; /* Match spec for local call trace */
Binary* meta_ms; /* Match spec for meta trace */
- BpMetaPid* meta_pid; /* Meta trace pid */
+ BpMetaTracer* meta_tracer; /* Meta tracer */
BpCount* count; /* For call count */
BpDataTime* time; /* For time trace */
} GenericBpData;
@@ -80,16 +80,16 @@ typedef struct generic_bp {
#define ERTS_BP_CALL_TIME_SCHEDULE_EXITING (2)
#ifdef ERTS_SMP
-#define bp_sched2ix_proc(p) ((p)->scheduler_data->no - 1)
+#define bp_sched2ix_proc(p) (erts_proc_sched_data(p)->no - 1)
#else
#define bp_sched2ix_proc(p) (0)
#endif
enum erts_break_op{
- erts_break_nop = 0, /* Must be false */
- erts_break_set = !0, /* Must be true */
- erts_break_reset,
- erts_break_stop
+ ERTS_BREAK_NOP = 0, /* Must be false */
+ ERTS_BREAK_SET = !0, /* Must be true */
+ ERTS_BREAK_RESTART,
+ ERTS_BREAK_PAUSE
};
typedef Uint32 ErtsBpIndex;
@@ -132,10 +132,10 @@ void erts_set_call_trace_bif(BeamInstr *pc, Binary *match_spec, int local);
void erts_clear_call_trace_bif(BeamInstr *pc, int local);
void erts_set_mtrace_break(BpFunctions *f, Binary *match_spec,
- Eterm tracer_pid);
+ ErtsTracer tracer);
void erts_clear_mtrace_break(BpFunctions *f);
void erts_set_mtrace_bif(BeamInstr *pc, Binary *match_spec,
- Eterm tracer_pid);
+ ErtsTracer tracer);
void erts_clear_mtrace_bif(BeamInstr *pc);
void erts_set_debug_break(BpFunctions *f);
@@ -150,13 +150,13 @@ void erts_clear_export_break(Module *modp, BeamInstr* pc);
BeamInstr erts_generic_breakpoint(Process* c_p, BeamInstr* I, Eterm* reg);
BeamInstr erts_trace_break(Process *p, BeamInstr *pc, Eterm *args,
- Uint32 *ret_flags, Eterm *tracer_pid);
+ Uint32 *ret_flags, ErtsTracer *tracer);
int erts_is_trace_break(BeamInstr *pc, Binary **match_spec_ret, int local);
int erts_is_mtrace_break(BeamInstr *pc, Binary **match_spec_ret,
- Eterm *tracer_pid_rte);
+ ErtsTracer *tracer_ret);
int erts_is_mtrace_bif(BeamInstr *pc, Binary **match_spec_ret,
- Eterm *tracer_pid_ret);
+ ErtsTracer *tracer_ret);
int erts_is_native_break(BeamInstr *pc);
int erts_is_count_break(BeamInstr *pc, Uint *count_ret);
int erts_is_time_break(Process *p, BeamInstr *pc, Eterm *call_time);
@@ -173,19 +173,7 @@ void erts_clear_time_trace_bif(BeamInstr *pc);
BeamInstr *erts_find_local_func(Eterm mfa[3]);
-ERTS_GLB_INLINE Uint erts_bp_sched2ix(void);
-
#if ERTS_GLB_INLINE_INCL_FUNC_DEF
-ERTS_GLB_INLINE Uint erts_bp_sched2ix(void)
-{
-#ifdef ERTS_SMP
- ErtsSchedulerData *esdp;
- esdp = erts_get_scheduler_data();
- return esdp->no - 1;
-#else
- return 0;
-#endif
-}
extern erts_smp_atomic32_t erts_active_bp_index;
extern erts_smp_atomic32_t erts_staging_bp_index;
diff --git a/erts/emulator/beam/beam_catches.c b/erts/emulator/beam/beam_catches.c
index c1fd17c65d..cd592c7e5e 100644
--- a/erts/emulator/beam/beam_catches.c
+++ b/erts/emulator/beam/beam_catches.c
@@ -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.
@@ -143,7 +143,7 @@ BeamInstr *beam_catches_car(unsigned i)
struct bc_pool* p = &bccix[erts_active_code_ix()];
if (i >= p->tabsize ) {
- erl_exit(1, "beam_catches_delmod: index %#x is out of range\r\n", i);
+ erts_exit(ERTS_ERROR_EXIT, "beam_catches_delmod: index %#x is out of range\r\n", i);
}
return p->beam_catches[i].cp;
}
@@ -157,10 +157,10 @@ void beam_catches_delmod(unsigned head, BeamInstr *code, unsigned code_bytes,
ASSERT((code_ix == erts_active_code_ix()) != bccix[erts_staging_code_ix()].is_staging);
for(i = head; i != (unsigned)-1;) {
if (i >= p->tabsize) {
- erl_exit(1, "beam_catches_delmod: index %#x is out of range\r\n", i);
+ erts_exit(ERTS_ERROR_EXIT, "beam_catches_delmod: index %#x is out of range\r\n", i);
}
if( (char*)p->beam_catches[i].cp - (char*)code >= code_bytes ) {
- erl_exit(1,
+ erts_exit(ERTS_ERROR_EXIT,
"beam_catches_delmod: item %#x has cp %p which is not "
"in module's range [%p,%p[\r\n",
i, p->beam_catches[i].cp, code, ((char*)code + code_bytes));
diff --git a/erts/emulator/beam/beam_catches.h b/erts/emulator/beam/beam_catches.h
index 59ee64d033..8eb2165ac9 100644
--- a/erts/emulator/beam/beam_catches.h
+++ b/erts/emulator/beam/beam_catches.h
@@ -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/erts/emulator/beam/beam_debug.c b/erts/emulator/beam/beam_debug.c
index e37bd4d78c..a4ad3e7886 100644
--- a/erts/emulator/beam/beam_debug.c
+++ b/erts/emulator/beam/beam_debug.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.
@@ -431,7 +431,7 @@ print_op(int to, void *to_arg, int op, int size, BeamInstr* addr)
packed >>= 10;
break;
case '0': /* Tight shift */
- *ap++ = packed & (BEAM_TIGHT_MASK / sizeof(Eterm));
+ *ap++ = packed & BEAM_TIGHT_MASK;
packed >>= BEAM_TIGHT_SHIFT;
break;
case '6': /* Shift 16 steps */
diff --git a/erts/emulator/beam/beam_emu.c b/erts/emulator/beam/beam_emu.c
index 10f132abfc..f8f2e29c95 100644
--- a/erts/emulator/beam/beam_emu.c
+++ b/erts/emulator/beam/beam_emu.c
@@ -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.
@@ -64,18 +64,21 @@
# ifdef ERTS_SMP
# define PROCESS_MAIN_CHK_LOCKS(P) \
do { \
- if ((P)) { \
+ if ((P)) \
erts_proc_lc_chk_only_proc_main((P)); \
- } \
- else \
- erts_lc_check_exact(NULL, 0); \
- ERTS_SMP_LC_ASSERT(!erts_thr_progress_is_blocking()); \
+ ERTS_SMP_LC_ASSERT(!erts_thr_progress_is_blocking()); \
+} while (0)
+# define ERTS_SMP_REQ_PROC_MAIN_LOCK(P) \
+do { \
+ if ((P)) \
+ erts_proc_lc_require_lock((P), ERTS_PROC_LOCK_MAIN, \
+ __FILE__, __LINE__); \
+} while (0)
+# define ERTS_SMP_UNREQ_PROC_MAIN_LOCK(P) \
+do { \
+ if ((P)) \
+ erts_proc_lc_unrequire_lock((P), ERTS_PROC_LOCK_MAIN); \
} while (0)
-# define ERTS_SMP_REQ_PROC_MAIN_LOCK(P) \
- if ((P)) erts_proc_lc_require_lock((P), ERTS_PROC_LOCK_MAIN,\
- __FILE__, __LINE__)
-# define ERTS_SMP_UNREQ_PROC_MAIN_LOCK(P) \
- if ((P)) erts_proc_lc_unrequire_lock((P), ERTS_PROC_LOCK_MAIN)
# else
# define ERTS_SMP_REQ_PROC_MAIN_LOCK(P)
# define ERTS_SMP_UNREQ_PROC_MAIN_LOCK(P)
@@ -308,7 +311,8 @@ void** beam_ops;
if (E - HTOP < (needed + (HeapNeed))) { \
SWAPOUT; \
PROCESS_MAIN_CHK_LOCKS(c_p); \
- FCALLS -= erts_garbage_collect_nobump(c_p, needed + (HeapNeed), reg, (M)); \
+ FCALLS -= erts_garbage_collect_nobump(c_p, needed + (HeapNeed), \
+ reg, (M), FCALLS); \
ERTS_VERIFY_UNUSED_TEMP_ALLOC(c_p); \
PROCESS_MAIN_CHK_LOCKS(c_p); \
SWAPIN; \
@@ -360,7 +364,7 @@ void** beam_ops;
if ((E - HTOP < need) || (MSO(c_p).overhead + (VNh) >= BIN_VHEAP_SZ(c_p))) {\
SWAPOUT; \
PROCESS_MAIN_CHK_LOCKS(c_p); \
- FCALLS -= erts_garbage_collect_nobump(c_p, need, reg, (Live)); \
+ FCALLS -= erts_garbage_collect_nobump(c_p, need, reg, (Live), FCALLS); \
ERTS_VERIFY_UNUSED_TEMP_ALLOC(c_p); \
PROCESS_MAIN_CHK_LOCKS(c_p); \
SWAPIN; \
@@ -381,7 +385,7 @@ void** beam_ops;
if (E - HTOP < need) { \
SWAPOUT; \
PROCESS_MAIN_CHK_LOCKS(c_p); \
- FCALLS -= erts_garbage_collect_nobump(c_p, need, reg, (Live));\
+ FCALLS -= erts_garbage_collect_nobump(c_p, need, reg, (Live), FCALLS); \
ERTS_VERIFY_UNUSED_TEMP_ALLOC(c_p); \
PROCESS_MAIN_CHK_LOCKS(c_p); \
SWAPIN; \
@@ -402,7 +406,7 @@ void** beam_ops;
SWAPOUT; \
reg[Live] = Extra; \
PROCESS_MAIN_CHK_LOCKS(c_p); \
- FCALLS -= erts_garbage_collect_nobump(c_p, need, reg, (Live)+1); \
+ FCALLS -= erts_garbage_collect_nobump(c_p, need, reg, (Live)+1, FCALLS); \
ERTS_VERIFY_UNUSED_TEMP_ALLOC(c_p); \
PROCESS_MAIN_CHK_LOCKS(c_p); \
Extra = reg[Live]; \
@@ -702,6 +706,17 @@ void** beam_ops;
dst[1] = E2; \
} while (0)
+#define GetTupleElement2Y(Src, Element, D1, D2) \
+ do { \
+ Eterm* src; \
+ Eterm E1, E2; \
+ src = ADD_BYTE_OFFSET(tuple_val(Src), (Element)); \
+ E1 = src[0]; \
+ E2 = src[1]; \
+ D1 = E1; \
+ D2 = E2; \
+ } while (0)
+
#define GetTupleElement3(Src, Element, Dest) \
do { \
Eterm* src; \
@@ -1185,6 +1200,25 @@ init_emulator(void)
#define DTRACE_NIF_RETURN(p, m, f, a) do {} while (0)
#endif /* USE_VM_PROBES */
+#ifdef DEBUG
+#define ERTS_DBG_CHK_REDS(P, FC) \
+ do { \
+ if (ERTS_PROC_GET_SAVED_CALLS_BUF((P))) { \
+ ASSERT(FC <= 0); \
+ ASSERT(erts_proc_sched_data(c_p)->virtual_reds \
+ <= 0 - (FC)); \
+ } \
+ else { \
+ ASSERT(FC <= CONTEXT_REDS); \
+ ASSERT(erts_proc_sched_data(c_p)->virtual_reds \
+ <= CONTEXT_REDS - (FC)); \
+ } \
+} while (0)
+#else
+#define ERTS_DBG_CHK_REDS(P, FC)
+#endif
+
+
/*
* process_main() is called twice:
* The first call performs some initialisation, including exporting
@@ -1279,14 +1313,19 @@ void process_main(void)
goto do_schedule1;
do_schedule:
- reds_used = REDS_IN(c_p) - FCALLS;
+ ASSERT(c_p->debug_reds_in == REDS_IN(c_p));
+ if (!ERTS_PROC_GET_SAVED_CALLS_BUF(c_p))
+ reds_used = REDS_IN(c_p) - FCALLS;
+ else
+ reds_used = REDS_IN(c_p) - (CONTEXT_REDS + FCALLS);
+ ASSERT(reds_used >= 0);
do_schedule1:
if (start_time != 0) {
Sint64 diff = erts_timestamp_millis() - start_time;
if (diff > 0 && (Uint) diff > erts_system_monitor_long_schedule
-#ifdef ERTS_DIRTY_SCHEDULERS
- && !ERTS_SCHEDULER_IS_DIRTY(c_p->scheduler_data)
+#if defined(ERTS_SMP) && defined(ERTS_DIRTY_SCHEDULERS)
+ && !ERTS_SCHEDULER_IS_DIRTY(erts_proc_sched_data(c_p))
#endif
) {
BeamInstr *inptr = find_function_from_pc(start_time_i);
@@ -1299,6 +1338,7 @@ void process_main(void)
ERTS_SMP_UNREQ_PROC_MAIN_LOCK(c_p);
ERTS_VERIFY_UNUSED_TEMP_ALLOC(c_p);
c_p = schedule(c_p, reds_used);
+ ASSERT(!(c_p->flags & F_HIPE_MODE));
ERTS_VERIFY_UNUSED_TEMP_ALLOC(c_p);
start_time = 0;
#ifdef DEBUG
@@ -1314,8 +1354,8 @@ void process_main(void)
start_time_i = c_p->i;
}
- reg = ERTS_PROC_GET_SCHDATA(c_p)->x_reg_array;
- freg = ERTS_PROC_GET_SCHDATA(c_p)->f_reg_array;
+ reg = erts_proc_sched_data(c_p)->x_reg_array;
+ freg = erts_proc_sched_data(c_p)->f_reg_array;
ERL_BITS_RELOAD_STATEP(c_p);
{
int reds;
@@ -1337,16 +1377,21 @@ void process_main(void)
SET_I(c_p->i);
- reds = c_p->fcalls;
- if (ERTS_PROC_GET_SAVED_CALLS_BUF(c_p)
- && (ERTS_TRACE_FLAGS(c_p) & F_SENSITIVE) == 0) {
- neg_o_reds = -reds;
- FCALLS = REDS_IN(c_p) = 0;
+ REDS_IN(c_p) = reds = c_p->fcalls;
+#ifdef DEBUG
+ c_p->debug_reds_in = reds;
+#endif
+
+ if (ERTS_PROC_GET_SAVED_CALLS_BUF(c_p)) {
+ neg_o_reds = -CONTEXT_REDS;
+ FCALLS = neg_o_reds + reds;
} else {
neg_o_reds = 0;
- FCALLS = REDS_IN(c_p) = reds;
+ FCALLS = reds;
}
+ ERTS_DBG_CHK_REDS(c_p, FCALLS);
+
next = (BeamInstr *) *I;
SWAPIN;
ASSERT(VALID_INSTR(next));
@@ -1662,6 +1707,14 @@ void process_main(void)
BeamInstr *next;
Eterm result;
+ if (!(FCALLS > 0 || FCALLS > neg_o_reds)) {
+ /* If we have run out of reductions, we do a context
+ switch before calling the bif */
+ c_p->arity = 2;
+ c_p->current = NULL;
+ goto context_switch3;
+ }
+
PRE_BIF_SWAPOUT(c_p);
c_p->fcalls = FCALLS - 1;
result = erl_send(c_p, r(0), x(1));
@@ -1759,7 +1812,7 @@ void process_main(void)
if (E - HTOP < 3) {
SWAPOUT;
PROCESS_MAIN_CHK_LOCKS(c_p);
- FCALLS -= erts_garbage_collect_nobump(c_p, 3, reg+2, 1);
+ FCALLS -= erts_garbage_collect_nobump(c_p, 3, reg+2, 1, FCALLS);
ERTS_VERIFY_UNUSED_TEMP_ALLOC(c_p);
PROCESS_MAIN_CHK_LOCKS(c_p);
SWAPIN;
@@ -1854,6 +1907,7 @@ void process_main(void)
c_p->flags |= F_DELAY_GC;
loop_rec__:
+
PROCESS_MAIN_CHK_LOCKS(c_p);
msgp = PEEK_MESSAGE(c_p);
@@ -1996,6 +2050,8 @@ void process_main(void)
ERTS_VBUMP_LEAVE_REDS_INTERNAL(c_p, 5, FCALLS);
}
+ ERTS_DBG_CHK_REDS(c_p, FCALLS);
+
ERTS_VERIFY_UNUSED_TEMP_ALLOC(c_p);
PROCESS_MAIN_CHK_LOCKS(c_p);
NextPF(0, next);
@@ -2155,7 +2211,7 @@ void process_main(void)
PreFetch(0, next);
if (IS_TRACED_FL(c_p, F_TRACE_RECEIVE)) {
- trace_receive(c_p, am_timeout);
+ trace_receive(c_p, am_clock_service, am_timeout, NULL);
}
if (ERTS_PROC_GET_SAVED_CALLS_BUF(c_p)) {
save_calls(c_p, &exp_timeout);
@@ -2524,6 +2580,7 @@ do { \
GetArg1(2, tmp_reg[0]);
bf = (BifFunction) Arg(1);
+ ERTS_DBG_CHK_REDS(c_p, FCALLS);
c_p->fcalls = FCALLS;
PROCESS_MAIN_CHK_LOCKS(c_p);
ASSERT(!ERTS_PROC_IS_EXITING(c_p));
@@ -2533,6 +2590,7 @@ do { \
PROCESS_MAIN_CHK_LOCKS(c_p);
ERTS_HOLE_CHECK(c_p);
FCALLS = c_p->fcalls;
+ ERTS_DBG_CHK_REDS(c_p, FCALLS);
if (is_value(result)) {
StoreBifResult(3, result);
}
@@ -2553,6 +2611,7 @@ do { \
GetArg1(1, tmp_reg[0]);
bf = (BifFunction) Arg(0);
+ ERTS_DBG_CHK_REDS(c_p, FCALLS);
c_p->fcalls = FCALLS;
PROCESS_MAIN_CHK_LOCKS(c_p);
ASSERT(!ERTS_PROC_IS_EXITING(c_p));
@@ -2562,6 +2621,7 @@ do { \
PROCESS_MAIN_CHK_LOCKS(c_p);
ERTS_HOLE_CHECK(c_p);
FCALLS = c_p->fcalls;
+ ERTS_DBG_CHK_REDS(c_p, FCALLS);
if (is_value(result)) {
StoreBifResult(2, result);
}
@@ -2580,6 +2640,7 @@ do { \
GetArg1(2, x(live));
bf = (GcBifFunction) Arg(1);
+ ERTS_DBG_CHK_REDS(c_p, FCALLS);
c_p->fcalls = FCALLS;
SWAPOUT;
PROCESS_MAIN_CHK_LOCKS(c_p);
@@ -2591,6 +2652,7 @@ do { \
SWAPIN;
ERTS_HOLE_CHECK(c_p);
FCALLS = c_p->fcalls;
+ ERTS_DBG_CHK_REDS(c_p, FCALLS);
if (is_value(result)) {
StoreBifResult(4, result);
}
@@ -2619,6 +2681,7 @@ do { \
*/
live++;
bf = (GcBifFunction) Arg(1);
+ ERTS_DBG_CHK_REDS(c_p, FCALLS);
c_p->fcalls = FCALLS;
SWAPOUT;
PROCESS_MAIN_CHK_LOCKS(c_p);
@@ -2630,6 +2693,7 @@ do { \
SWAPIN;
ERTS_HOLE_CHECK(c_p);
FCALLS = c_p->fcalls;
+ ERTS_DBG_CHK_REDS(c_p, FCALLS);
if (is_value(result)) {
StoreBifResult(5, result);
}
@@ -2660,6 +2724,7 @@ do { \
*/
live += 2;
bf = (GcBifFunction) Arg(1);
+ ERTS_DBG_CHK_REDS(c_p, FCALLS);
c_p->fcalls = FCALLS;
SWAPOUT;
PROCESS_MAIN_CHK_LOCKS(c_p);
@@ -2671,6 +2736,7 @@ do { \
SWAPIN;
ERTS_HOLE_CHECK(c_p);
FCALLS = c_p->fcalls;
+ ERTS_DBG_CHK_REDS(c_p, FCALLS);
if (is_value(result)) {
StoreBifResult(5, result);
}
@@ -2697,6 +2763,7 @@ do { \
GetArg2(2, tmp_reg[0], tmp_reg[1]);
bf = (BifFunction) Arg(1);
+ ERTS_DBG_CHK_REDS(c_p, FCALLS);
c_p->fcalls = FCALLS;
PROCESS_MAIN_CHK_LOCKS(c_p);
ASSERT(!ERTS_PROC_IS_EXITING(c_p));
@@ -2706,6 +2773,7 @@ do { \
PROCESS_MAIN_CHK_LOCKS(c_p);
ERTS_HOLE_CHECK(c_p);
FCALLS = c_p->fcalls;
+ ERTS_DBG_CHK_REDS(c_p, FCALLS);
if (is_value(result)) {
StoreBifResult(4, result);
}
@@ -2753,6 +2821,15 @@ do { \
BeamInstr *next;
ErlHeapFragment *live_hf_end;
+
+ if (!((FCALLS - 1) > 0 || (FCALLS-1) > neg_o_reds)) {
+ /* If we have run out of reductions, we do a context
+ switch before calling the bif */
+ c_p->arity = ((Export *)Arg(0))->code[2];
+ c_p->current = ((Export *)Arg(0))->code;
+ goto context_switch3;
+ }
+
if (ERTS_MSACC_IS_ENABLED_CACHED_X()) {
if (GET_BIF_MODULE(Arg(0)) == am_ets) {
ERTS_MSACC_SET_STATE_CACHED_M_X(ERTS_MSACC_STATE_ETS);
@@ -2764,6 +2841,7 @@ do { \
bf = GET_BIF_ADDRESS(Arg(0));
PRE_BIF_SWAPOUT(c_p);
+ ERTS_DBG_CHK_REDS(c_p, FCALLS);
c_p->fcalls = FCALLS - 1;
if (FCALLS <= 0) {
save_calls(c_p, (Export *) Arg(0));
@@ -2785,6 +2863,7 @@ do { \
PROCESS_MAIN_CHK_LOCKS(c_p);
HTOP = HEAP_TOP(c_p);
FCALLS = c_p->fcalls;
+ ERTS_DBG_CHK_REDS(c_p, FCALLS);
/* We have to update the cache if we are enabled in order
to make sure no book keeping is done after we disabled
msacc. We don't always do this as it is quite expensive. */
@@ -3279,10 +3358,19 @@ do { \
context_switch2: /* Entry for fun calls. */
c_p->current = I-3; /* Pointer to Mod, Func, Arity */
+ context_switch3:
+
{
Eterm* argp;
int i;
+ if (erts_smp_atomic32_read_nob(&c_p->state) & ERTS_PSFLG_EXITING) {
+ c_p->i = beam_exit;
+ c_p->arity = 0;
+ c_p->current = NULL;
+ goto do_schedule;
+ }
+
/*
* Make sure that there is enough room for the argument registers to be saved.
*/
@@ -3313,8 +3401,13 @@ do { \
* (beacuse the code for the Dispatch() macro becomes shorter that way).
*/
- reds_used = REDS_IN(c_p) - FCALLS + 1;
-
+ ASSERT(c_p->debug_reds_in == REDS_IN(c_p));
+ if (!ERTS_PROC_GET_SAVED_CALLS_BUF(c_p))
+ reds_used = REDS_IN(c_p) - FCALLS;
+ else
+ reds_used = REDS_IN(c_p) - (CONTEXT_REDS + FCALLS);
+ ASSERT(reds_used >= 0);
+
/*
* Save the argument registers and everything else.
*/
@@ -3346,7 +3439,7 @@ do { \
OpCase(normal_exit): {
SWAPOUT;
c_p->freason = EXC_NORMAL;
- c_p->arity = 0; /* In case this process will ever be garbed again. */
+ c_p->arity = 0; /* In case this process will never be garbed again. */
ERTS_SMP_UNREQ_PROC_MAIN_LOCK(c_p);
erts_do_exit_process(c_p, am_normal);
ERTS_SMP_REQ_PROC_MAIN_LOCK(c_p);
@@ -3360,48 +3453,18 @@ do { \
goto do_schedule;
}
- OpCase(raise_ss): {
- /* This was not done very well in R10-0; then, we passed the tag in
- the first argument and hoped that the existing c_p->ftrace was
- still correct. But the ftrace-object already includes the tag
- (or rather, the freason). Now, we pass the original ftrace in
- the first argument. We also handle atom tags in the first
- argument for backwards compatibility.
- */
- Eterm raise_val1;
- Eterm raise_val2;
- GetArg2(0, raise_val1, raise_val2);
- c_p->fvalue = raise_val2;
- if (c_p->freason == EXC_NULL) {
- /* a safety check for the R10-0 case; should not happen */
- c_p->ftrace = NIL;
- c_p->freason = EXC_ERROR;
- }
- /* for R10-0 code, keep existing c_p->ftrace and hope it's correct */
- switch (raise_val1) {
- case am_throw:
- c_p->freason = EXC_THROWN & ~EXF_SAVETRACE;
- break;
- case am_error:
- c_p->freason = EXC_ERROR & ~EXF_SAVETRACE;
- break;
- case am_exit:
- c_p->freason = EXC_EXIT & ~EXF_SAVETRACE;
- break;
- default:
- {/* R10-1 and later
- XXX note: should do sanity check on given trace if it can be
- passed from a user! Currently only expecting generated calls.
- */
- struct StackTrace *s;
- c_p->ftrace = raise_val1;
- s = get_trace_from_exc(raise_val1);
- if (s == NULL) {
- c_p->freason = EXC_ERROR;
- } else {
- c_p->freason = PRIMARY_EXCEPTION(s->freason);
- }
- }
+ OpCase(i_raise): {
+ Eterm raise_trace = x(2);
+ Eterm raise_value = x(1);
+ struct StackTrace *s;
+
+ c_p->fvalue = raise_value;
+ c_p->ftrace = raise_trace;
+ s = get_trace_from_exc(raise_trace);
+ if (s == NULL) {
+ c_p->freason = EXC_ERROR;
+ } else {
+ c_p->freason = PRIMARY_EXCEPTION(s->freason);
}
goto find_func_info;
}
@@ -3475,6 +3538,12 @@ do { \
BifFunction vbf;
ErlHeapFragment *live_hf_end;
+ if (!((FCALLS - 1) > 0 || (FCALLS - 1) > neg_o_reds)) {
+ /* If we have run out of reductions, we do a context
+ switch before calling the nif */
+ goto context_switch;
+ }
+
ERTS_MSACC_SET_STATE_CACHED_M_X(ERTS_MSACC_STATE_NIF);
DTRACE_NIF_ENTRY(c_p, (Eterm)I[-3], (Eterm)I[-2], (Uint)I[-1]);
@@ -3490,18 +3559,27 @@ do { \
typedef Eterm NifF(struct enif_environment_t*, int argc, Eterm argv[]);
NifF* fp = vbf = (NifF*) I[1];
struct enif_environment_t env;
- erts_pre_nif(&env, c_p, (struct erl_module_nif*)I[2]);
- live_hf_end = c_p->mbuf;
+#ifdef ERTS_DIRTY_SCHEDULERS
+ if (!c_p->scheduler_data)
+ live_hf_end = ERTS_INVALID_HFRAG_PTR; /* On dirty scheduler */
+ else
+#endif
+ live_hf_end = c_p->mbuf;
+ erts_pre_nif(&env, c_p, (struct erl_module_nif*)I[2], NULL);
nif_bif_result = (*fp)(&env, bif_nif_arity, reg);
if (env.exception_thrown)
nif_bif_result = THE_NON_VALUE;
erts_post_nif(&env);
- }
- ASSERT(!ERTS_PROC_IS_EXITING(c_p) || is_non_value(nif_bif_result));
- PROCESS_MAIN_CHK_LOCKS(c_p);
- ERTS_VERIFY_UNUSED_TEMP_ALLOC(c_p);
- ERTS_MSACC_SET_STATE_CACHED_M_X(ERTS_MSACC_STATE_EMULATOR);
+ PROCESS_MAIN_CHK_LOCKS(c_p);
+ ERTS_VERIFY_UNUSED_TEMP_ALLOC(c_p);
+ ERTS_MSACC_SET_STATE_CACHED_M_X(ERTS_MSACC_STATE_EMULATOR);
+ if (env.exiting) {
+ ERTS_SMP_REQ_PROC_MAIN_LOCK(c_p);
+ goto do_schedule;
+ }
+ ASSERT(!ERTS_PROC_IS_EXITING(c_p));
+ }
DTRACE_NIF_RETURN(c_p, (Eterm)I[-3], (Eterm)I[-2], (Uint)I[-1]);
goto apply_bif_or_nif_epilogue;
@@ -3517,6 +3595,13 @@ do { \
* code[3]: &&apply_bif
* code[4]: Function pointer to BIF function
*/
+
+ if (!((FCALLS - 1) > 0 || (FCALLS - 1) > neg_o_reds)) {
+ /* If we have run out of reductions, we do a context
+ switch before calling the bif */
+ goto context_switch;
+ }
+
if (ERTS_MSACC_IS_ENABLED_CACHED_X()) {
if ((Eterm)I[-3] == am_ets) {
ERTS_MSACC_SET_STATE_CACHED_M_X(ERTS_MSACC_STATE_ETS);
@@ -3533,6 +3618,7 @@ do { \
DTRACE_BIF_ENTRY(c_p, (Eterm)I[-3], (Eterm)I[-2], (Uint)I[-1]);
SWAPOUT;
+ ERTS_DBG_CHK_REDS(c_p, FCALLS - 1);
c_p->fcalls = FCALLS - 1;
vbf = (BifFunction) Arg(0);
PROCESS_MAIN_CHK_LOCKS(c_p);
@@ -3568,6 +3654,7 @@ do { \
}
SWAPIN; /* There might have been a garbage collection. */
FCALLS = c_p->fcalls;
+ ERTS_DBG_CHK_REDS(c_p, FCALLS);
if (is_value(nif_bif_result)) {
r(0) = nif_bif_result;
CHECK_TERM(r(0));
@@ -4102,7 +4189,7 @@ do { \
StoreBifResult(1, result);
}
- OpCase(i_bs_put_utf16_jIs): {
+ OpCase(bs_put_utf16_jIs): {
Eterm arg;
GetArg1(2, arg);
@@ -4618,7 +4705,7 @@ do { \
SWAPOUT; /* Needed for shared heap */
ERTS_SMP_UNREQ_PROC_MAIN_LOCK(c_p);
- erts_trace_return(c_p, code, r(0), E+1/*Process tracer*/);
+ erts_trace_return(c_p, code, r(0), ERTS_TRACER_FROM_ETERM(E+1)/* tracer */);
ERTS_SMP_REQ_PROC_MAIN_LOCK(c_p);
SWAPIN;
c_p->cp = NULL;
@@ -4630,9 +4717,9 @@ do { \
OpCase(i_generic_breakpoint): {
BeamInstr real_I;
ASSERT(I[-5] == (BeamInstr) BeamOp(op_i_func_info_IaaI));
- SWAPOUT;
+ HEAVY_SWAPOUT;
real_I = erts_generic_breakpoint(c_p, I, reg);
- SWAPIN;
+ HEAVY_SWAPIN;
ASSERT(VALID_INSTR(real_I));
Goto(real_I);
}
@@ -4730,7 +4817,7 @@ do { \
#ifdef NO_FPE_SIGNALS
OpCase(fclearerror):
OpCase(i_fcheckerror):
- erl_exit(1, "fclearerror/i_fcheckerror without fpe signals (beam_emu)");
+ erts_exit(ERTS_ERROR_EXIT, "fclearerror/i_fcheckerror without fpe signals (beam_emu)");
# define ERTS_NO_FPE_CHECK_INIT ERTS_FP_CHECK_INIT
# define ERTS_NO_FPE_ERROR ERTS_FP_ERROR
#else
@@ -4809,6 +4896,7 @@ do { \
{
#define HIPE_MODE_SWITCH(Cmd) \
SWAPOUT; \
+ ERTS_DBG_CHK_REDS(c_p, FCALLS); \
c_p->fcalls = FCALLS; \
c_p->def_arg_reg[4] = -neg_o_reds; \
c_p = hipe_mode_switch(c_p, Cmd, reg); \
@@ -4847,13 +4935,17 @@ do { \
#undef HIPE_MODE_SWITCH
L_post_hipe_mode_switch:
- reg = ERTS_PROC_GET_SCHDATA(c_p)->x_reg_array;
- freg = ERTS_PROC_GET_SCHDATA(c_p)->f_reg_array;
+#ifdef DEBUG
+ pid = c_p->common.id; /* may have switched process... */
+#endif
+ reg = erts_proc_sched_data(c_p)->x_reg_array;
+ freg = erts_proc_sched_data(c_p)->f_reg_array;
ERL_BITS_RELOAD_STATEP(c_p);
/* XXX: this abuse of def_arg_reg[] is horrid! */
neg_o_reds = -c_p->def_arg_reg[4];
FCALLS = c_p->fcalls;
SWAPIN;
+ ERTS_DBG_CHK_REDS(c_p, FCALLS);
switch( c_p->def_arg_reg[3] ) {
case HIPE_MODE_SWITCH_RES_RETURN:
ASSERT(is_value(reg[0]));
@@ -4885,7 +4977,7 @@ do { \
I = handle_error(c_p, I, reg, NULL);
goto post_error_handling;
default:
- erl_exit(1, "hipe_mode_switch: result %u\n", c_p->def_arg_reg[3]);
+ erts_exit(ERTS_ERROR_EXIT, "hipe_mode_switch: result %u\n", c_p->def_arg_reg[3]);
}
}
OpCase(hipe_call_count): {
@@ -4997,7 +5089,7 @@ do { \
OpCase(label_L):
OpCase(on_load):
OpCase(line_I):
- erl_exit(1, "meta op\n");
+ erts_exit(ERTS_ERROR_EXIT, "meta op\n");
/*
* One-time initialization of Beam emulator.
@@ -5051,7 +5143,7 @@ do { \
}
#ifdef NO_JUMP_TABLE
default:
- erl_exit(1, "unexpected op code %d\n",Go);
+ erts_exit(ERTS_ERROR_EXIT, "unexpected op code %d\n",Go);
}
#endif
return; /* Never executed */
@@ -5096,7 +5188,7 @@ translate_gc_bif(void* gcf)
} else if (gcf == erts_gc_binary_part_3) {
return binary_part_3;
} else {
- erl_exit(1, "bad gc bif");
+ erts_exit(ERTS_ERROR_EXIT, "bad gc bif");
}
}
@@ -5161,7 +5253,7 @@ handle_error(Process* c_p, BeamInstr* pc, Eterm* reg, BifFunction bf)
Eterm* hp;
Eterm Value = c_p->fvalue;
Eterm Args = am_true;
- c_p->i = pc; /* In case we call erl_exit(). */
+ c_p->i = pc; /* In case we call erts_exit(). */
ASSERT(c_p->freason != TRAP); /* Should have been handled earlier. */
@@ -5225,7 +5317,7 @@ handle_error(Process* c_p, BeamInstr* pc, Eterm* reg, BifFunction bf)
c_p->cp = 0; /* To avoid keeping stale references. */
return new_pc;
}
- if (c_p->catches > 0) erl_exit(1, "Catch not found");
+ if (c_p->catches > 0) erts_exit(ERTS_ERROR_EXIT, "Catch not found");
}
ERTS_SMP_UNREQ_PROC_MAIN_LOCK(c_p);
terminate_proc(c_p, Value);
@@ -5258,7 +5350,8 @@ next_catch(Process* c_p, Eterm *reg) {
BeamInstr *cpp = c_p->cp;
if (cpp == beam_exception_trace) {
erts_trace_exception(c_p, cp_val(ptr[0]),
- reg[1], reg[2], ptr+1);
+ reg[1], reg[2],
+ ERTS_TRACER_FROM_ETERM(ptr+1));
/* Skip return_trace parameters */
ptr += 2;
} else if (cpp == beam_return_trace) {
@@ -5285,7 +5378,8 @@ next_catch(Process* c_p, Eterm *reg) {
}
if (cp_val(*prev) == beam_exception_trace) {
erts_trace_exception(c_p, cp_val(ptr[0]),
- reg[1], reg[2], ptr+1);
+ reg[1], reg[2],
+ ERTS_TRACER_FROM_ETERM(ptr+1));
}
/* Skip return_trace parameters */
ptr += 2;
@@ -6079,7 +6173,7 @@ erts_hibernate(Process* c_p, Eterm module, Eterm function, Eterm args, Eterm* re
return -1;
}
#else /* ERTS_SMP */
- ERTS_SMP_MSGQ_MV_INQ2PRIVQ(c_p);
+ ERTS_SMP_MSGQ_MV_INQ2PRIVQ(c_p);
if (!c_p->msg.len)
#endif
erts_smp_atomic32_read_band_relb(&c_p->state, ~ERTS_PSFLG_ACTIVE);
@@ -6856,7 +6950,7 @@ erts_current_reductions(Process *current, Process *p)
if (current != p) {
return 0;
} else if (current->fcalls < 0 && ERTS_PROC_GET_SAVED_CALLS_BUF(current)) {
- return -current->fcalls;
+ return current->fcalls + CONTEXT_REDS;
} else {
return REDS_IN(current) - current->fcalls;
}
diff --git a/erts/emulator/beam/beam_load.c b/erts/emulator/beam/beam_load.c
index f115df935f..0c2743beb2 100644
--- a/erts/emulator/beam/beam_load.c
+++ b/erts/emulator/beam/beam_load.c
@@ -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 @@
#include "bif.h"
#include "external.h"
#include "beam_load.h"
+#include "beam_bp.h"
#include "big.h"
#include "erl_bits.h"
#include "beam_catches.h"
@@ -479,9 +480,9 @@ static void free_loader_state(Binary* magic);
static ErlHeapFragment* new_literal_fragment(Uint size);
static void free_literal_fragment(ErlHeapFragment*);
static void loader_state_dtor(Binary* magic);
-static Eterm insert_new_code(Process *c_p, ErtsProcLocks c_p_locks,
- Eterm group_leader, Eterm module,
- BeamCodeHeader* code, Uint size);
+static Eterm stub_insert_new_code(Process *c_p, ErtsProcLocks c_p_locks,
+ Eterm group_leader, Eterm module,
+ BeamCodeHeader* code, Uint size);
static int init_iff_file(LoaderState* stp, byte* code, Uint size);
static int scan_iff_file(LoaderState* stp, Uint* chunk_types,
Uint num_types, Uint num_mandatory);
@@ -513,7 +514,7 @@ static GenOp* gen_get_map_element(LoaderState* stp, GenOpArg Fail, GenOpArg Src,
static int freeze_code(LoaderState* stp);
-static void final_touch(LoaderState* stp);
+static void final_touch(LoaderState* stp, struct erl_module_instance* inst_p);
static void short_file(int line, LoaderState* stp, unsigned needed);
static void load_printf(int line, LoaderState* context, char *fmt, ...);
static int transform_engine(LoaderState* st);
@@ -766,8 +767,11 @@ Eterm
erts_finish_loading(Binary* magic, Process* c_p,
ErtsProcLocks c_p_locks, Eterm* modp)
{
- Eterm retval;
+ Eterm retval = NIL;
LoaderState* stp = ERTS_MAGIC_BIN_DATA(magic);
+ Module* mod_tab_p;
+ struct erl_module_instance* inst_p;
+ Uint size;
/*
* No other process may run since we will update the export
@@ -776,27 +780,80 @@ erts_finish_loading(Binary* magic, Process* c_p,
ERTS_SMP_LC_ASSERT(erts_initialized == 0 || erts_has_code_write_permission() ||
erts_smp_thr_progress_is_blocking());
-
/*
* Make current code for the module old and insert the new code
* as current. This will fail if there already exists old code
* for the module.
*/
+ mod_tab_p = erts_put_module(stp->module);
CHKBLK(ERTS_ALC_T_CODE,stp->code);
- retval = insert_new_code(c_p, c_p_locks, stp->group_leader, stp->module,
- stp->hdr, stp->loaded_size);
- if (retval != NIL) {
- goto load_error;
+ if (!stp->on_load) {
+ /*
+ * Normal case -- no -on_load() function.
+ */
+ retval = beam_make_current_old(c_p, c_p_locks, stp->module);
+ ASSERT(retval == NIL);
+ } else {
+ ErtsCodeIndex code_ix = erts_staging_code_ix();
+ Eterm module = stp->module;
+ int i;
+
+ /*
+ * There is an -on_load() function. We will keep the current
+ * code, but we must turn off any tracing.
+ */
+
+ for (i = 0; i < export_list_size(code_ix); i++) {
+ Export *ep = export_list(i, code_ix);
+ if (ep == NULL || ep->code[0] != module) {
+ continue;
+ }
+ if (ep->addressv[code_ix] == ep->code+3) {
+ if (ep->code[3] == (BeamInstr) em_apply_bif) {
+ continue;
+ } else if (ep->code[3] ==
+ (BeamInstr) BeamOp(op_i_generic_breakpoint)) {
+ ERTS_SMP_LC_ASSERT(erts_smp_thr_progress_is_blocking());
+ ASSERT(mod_tab_p->curr.num_traced_exports > 0);
+ erts_clear_export_break(mod_tab_p, ep->code+3);
+ ep->addressv[code_ix] = (BeamInstr *) ep->code[4];
+ ep->code[4] = 0;
+ }
+ ASSERT(ep->code[4] == 0);
+ }
+ }
+ ASSERT(mod_tab_p->curr.num_breakpoints == 0);
+ ASSERT(mod_tab_p->curr.num_traced_exports == 0);
}
/*
+ * Update module table.
+ */
+
+ size = stp->loaded_size;
+ erts_total_code_size += size;
+ if (stp->on_load) {
+ inst_p = &mod_tab_p->old;
+ } else {
+ inst_p = &mod_tab_p->curr;
+ }
+ inst_p->code_hdr = stp->hdr;
+ inst_p->code_length = size;
+
+ /*
+ * Update ranges (used for finding a function from a PC value).
+ */
+
+ erts_update_ranges((BeamInstr*)inst_p->code_hdr, size);
+
+ /*
* Ready for the final touch: fixing the export table entries for
* exported and imported functions. This can't fail.
*/
CHKBLK(ERTS_ALC_T_CODE,stp->code);
- final_touch(stp);
+ final_touch(stp, inst_p);
/*
* Loading succeded.
@@ -820,7 +877,6 @@ erts_finish_loading(Binary* magic, Process* c_p,
retval = am_on_load;
}
- load_error:
free_loader_state(magic);
return retval;
}
@@ -1026,9 +1082,9 @@ loader_state_dtor(Binary* magic)
}
static Eterm
-insert_new_code(Process *c_p, ErtsProcLocks c_p_locks,
- Eterm group_leader, Eterm module, BeamCodeHeader* code_hdr,
- Uint size)
+stub_insert_new_code(Process *c_p, ErtsProcLocks c_p_locks,
+ Eterm group_leader, Eterm module,
+ BeamCodeHeader* code_hdr, Uint size)
{
Module* modp;
Eterm retval;
@@ -1548,7 +1604,7 @@ read_literal_table(LoaderState* stp)
erts_factory_heap_frag_init(&factory,
new_literal_fragment(heap_size));
factory.alloc_type = ERTS_ALC_T_PREPARED_CODE;
- val = erts_decode_ext(&factory, &p);
+ val = erts_decode_ext(&factory, &p, 0);
if (is_non_value(val)) {
LoadError1(stp, "literal %d: bad external format", i);
@@ -1559,7 +1615,7 @@ read_literal_table(LoaderState* stp)
}
else {
erts_factory_dummy_init(&factory);
- val = erts_decode_ext(&factory, &p);
+ val = erts_decode_ext(&factory, &p, 0);
if (is_non_value(val)) {
LoadError1(stp, "literal %d: bad external format", i);
}
@@ -2028,42 +2084,47 @@ load_code(LoaderState* stp)
ASSERT(arity == last_op->arity);
do_transform:
- if (stp->genop == NULL) {
- last_op_next = NULL;
- goto get_next_instr;
- }
-
+ ASSERT(stp->genop != NULL);
if (gen_opc[stp->genop->op].transform != -1) {
- int need;
- tmp_op = stp->genop;
-
- for (need = gen_opc[stp->genop->op].min_window-1; need > 0; need--) {
- if (tmp_op == NULL) {
- goto get_next_instr;
- }
- tmp_op = tmp_op->next;
+ if (stp->genop->next == NULL) {
+ /*
+ * Simple heuristic: Most transformations requires
+ * at least two instructions, so make sure that
+ * there are. That will reduce the number of
+ * TE_SHORT_WINDOWs.
+ */
+ goto get_next_instr;
}
switch (transform_engine(stp)) {
case TE_FAIL:
- last_op_next = NULL;
- last_op = NULL;
+ /*
+ * No transformation found. stp->genop != NULL and
+ * last_op_next is still valid. Go ahead and load
+ * the instruction.
+ */
break;
case TE_OK:
+ /*
+ * Some transformation was applied. last_op_next is
+ * no longer valid and stp->genop may be NULL.
+ * Try to transform again.
+ */
+ if (stp->genop == NULL) {
+ last_op_next = &stp->genop;
+ goto get_next_instr;
+ }
last_op_next = NULL;
- last_op = NULL;
goto do_transform;
case TE_SHORT_WINDOW:
- last_op_next = NULL;
- last_op = NULL;
+ /*
+ * No transformation applied. stp->genop != NULL and
+ * last_op_next is still valid. Fetch a new instruction
+ * before trying the transformation again.
+ */
goto get_next_instr;
}
}
- if (stp->genop == NULL) {
- last_op_next = NULL;
- goto get_next_instr;
- }
-
/*
* From the collected generic instruction, find the specific
* instruction.
@@ -2584,7 +2645,10 @@ load_code(LoaderState* stp)
{
GenOp* next = stp->genop->next;
FREE_GENOP(stp, stp->genop);
- stp->genop = next;
+ if ((stp->genop = next) == NULL) {
+ last_op_next = &stp->genop;
+ goto get_next_instr;
+ }
goto do_transform;
}
}
@@ -2728,10 +2792,10 @@ mixed_types(LoaderState* stp, GenOpArg Size, GenOpArg* Rest)
}
static int
-same_label(LoaderState* stp, GenOpArg Target, GenOpArg Label)
+is_killed_apply(LoaderState* stp, GenOpArg Reg, GenOpArg Live)
{
- return Target.type = TAG_f && Label.type == TAG_u &&
- Target.val == Label.val;
+ return Reg.type == TAG_x && Live.type == TAG_u &&
+ Live.val+2 <= Reg.val;
}
static int
@@ -4360,6 +4424,7 @@ gen_get_map_elements(LoaderState* stp, GenOpArg Fail, GenOpArg Src,
int good_hash;
#endif
+ ERTS_UNDEF(hx, 0);
ASSERT(Size.type == TAG_u);
NEW_GENOP(stp, op);
@@ -4692,14 +4757,13 @@ freeze_code(LoaderState* stp)
}
static void
-final_touch(LoaderState* stp)
+final_touch(LoaderState* stp, struct erl_module_instance* inst_p)
{
int i;
int on_load = stp->on_load;
unsigned catches;
Uint index;
BeamInstr* codev = stp->codev;
- Module* modp;
/*
* Allocate catch indices and fix up all catch_yf instructions.
@@ -4714,8 +4778,7 @@ final_touch(LoaderState* stp)
codev[index+2] = make_catch(catches);
index = next;
}
- modp = erts_put_module(stp->module);
- modp->curr.catches = catches;
+ inst_p->catches = catches;
/*
* Export functions.
@@ -4735,10 +4798,10 @@ final_touch(LoaderState* stp)
ep->addressv[erts_staging_code_ix()] = address;
} else {
/*
- * Don't make any of the exported functions
- * callable yet.
+ * on_load: Don't make any of the exported functions
+ * callable yet. Keep any function in the current
+ * code callable.
*/
- ep->addressv[erts_staging_code_ix()] = ep->code+3;
ep->code[4] = (BeamInstr) address;
}
}
@@ -4798,31 +4861,25 @@ transform_engine(LoaderState* st)
Uint op;
int ap; /* Current argument. */
Uint* restart; /* Where to restart if current match fails. */
- GenOpArg def_vars[TE_MAX_VARS]; /* Default buffer for variables. */
- GenOpArg* var = def_vars;
- int num_vars = 0;
+ GenOpArg var[TE_MAX_VARS]; /* Buffer for variables. */
+ GenOpArg* rest_args = NULL;
+ int num_rest_args = 0;
int i; /* General index. */
Uint mask;
GenOp* instr;
+ GenOp* first = st->genop;
+ GenOp* keep = NULL;
Uint* pc;
- int rval;
static Uint restart_fail[1] = {TOP_fail};
- ASSERT(gen_opc[st->genop->op].transform != -1);
- pc = op_transform + gen_opc[st->genop->op].transform;
- restart = pc;
+ ASSERT(gen_opc[first->op].transform != -1);
+ restart = op_transform + gen_opc[first->op].transform;
restart:
- if (var != def_vars) {
- erts_free(ERTS_ALC_T_LOADER_TMP, (void *) var);
- var = def_vars;
- }
ASSERT(restart != NULL);
pc = restart;
ASSERT(*pc < NUM_TOPS); /* Valid instruction? */
- instr = st->genop;
-
-#define RETURN(r) rval = (r); goto do_return;
+ instr = first;
#ifdef DEBUG
restart = NULL;
@@ -4840,7 +4897,7 @@ transform_engine(LoaderState* st)
* We'll need at least one more instruction to decide whether
* this combination matches or not.
*/
- RETURN(TE_SHORT_WINDOW);
+ return TE_SHORT_WINDOW;
}
if (*pc++ != instr->op)
goto restart;
@@ -5002,19 +5059,9 @@ transform_engine(LoaderState* st)
#if defined(TOP_rest_args)
case TOP_rest_args:
{
- int n = *pc++;
int formal_arity = gen_opc[instr->op].arity;
- int j = formal_arity;
-
- num_vars = n + (instr->arity - formal_arity);
- var = erts_alloc(ERTS_ALC_T_LOADER_TMP,
- num_vars * sizeof(GenOpArg));
- for (i = 0; i < n; i++) {
- var[i] = def_vars[i];
- }
- while (i < num_vars) {
- var[i++] = instr->a[j++];
- }
+ num_rest_args = instr->arity - formal_arity;
+ rest_args = instr->a + formal_arity;
}
break;
#endif
@@ -5023,21 +5070,22 @@ transform_engine(LoaderState* st)
break;
case TOP_commit:
instr = instr->next; /* The next_instr was optimized away. */
-
- /*
- * The left-hand side of this transformation matched.
- * Delete all matched instructions.
- */
- while (st->genop != instr) {
- GenOp* next = st->genop->next;
- FREE_GENOP(st, st->genop);
- st->genop = next;
- }
+ keep = instr;
+ st->genop = instr;
#ifdef DEBUG
instr = 0;
#endif
break;
-
+#if defined(TOP_keep)
+ case TOP_keep:
+ /* Keep the current instruction unchanged. */
+ keep = instr;
+ st->genop = instr;
+#ifdef DEBUG
+ instr = 0;
+#endif
+ break;
+#endif
#if defined(TOP_call_end)
case TOP_call_end:
{
@@ -5062,22 +5110,19 @@ transform_engine(LoaderState* st)
lastp = &((*lastp)->next);
}
- instr = instr->next; /* The next_instr was optimized away. */
-
- /*
- * The left-hand side of this transformation matched.
- * Delete all matched instructions.
- */
- while (st->genop != instr) {
- GenOp* next = st->genop->next;
- FREE_GENOP(st, st->genop);
- st->genop = next;
- }
- *lastp = st->genop;
+ keep = instr->next; /* The next_instr was optimized away. */
+ *lastp = keep;
st->genop = new_instr;
}
- RETURN(TE_OK);
+ /* FALLTHROUGH */
#endif
+ case TOP_end:
+ while (first != keep) {
+ GenOp* next = first->next;
+ FREE_GENOP(st, first);
+ first = next;
+ }
+ return TE_OK;
case TOP_new_instr:
/*
* Note that the instructions are generated in reverse order.
@@ -5089,6 +5134,12 @@ transform_engine(LoaderState* st)
instr->arity = gen_opc[op].arity;
ap = 0;
break;
+#ifdef TOP_rename
+ case TOP_rename:
+ instr->op = op = *pc++;
+ instr->arity = gen_opc[op].arity;
+ return TE_OK;
+#endif
case TOP_store_type:
i = *pc++;
instr->a[ap].type = i;
@@ -5108,14 +5159,10 @@ transform_engine(LoaderState* st)
#if defined(TOP_store_rest_args)
case TOP_store_rest_args:
{
- int n = *pc++;
- int num_extra = num_vars - n;
-
- ASSERT(n <= num_vars);
- GENOP_ARITY(instr, instr->arity+num_extra);
+ GENOP_ARITY(instr, instr->arity+num_rest_args);
memcpy(instr->a, instr->def_args, ap*sizeof(GenOpArg));
- memcpy(instr->a+ap, var+n, num_extra*sizeof(GenOpArg));
- ap += num_extra;
+ memcpy(instr->a+ap, rest_args, num_rest_args*sizeof(GenOpArg));
+ ap += num_rest_args;
}
break;
#endif
@@ -5127,21 +5174,12 @@ transform_engine(LoaderState* st)
case TOP_try_me_else_fail:
restart = restart_fail;
break;
- case TOP_end:
- RETURN(TE_OK);
case TOP_fail:
- RETURN(TE_FAIL);
+ return TE_FAIL;
default:
ASSERT(0);
}
}
-#undef RETURN
-
- do_return:
- if (var != def_vars) {
- erts_free(ERTS_ALC_T_LOADER_TMP, (void *) var);
- }
- return rval;
}
static void
@@ -5719,7 +5757,7 @@ attributes_for_module(Process* p, /* Process whose heap to use. */
if (ext != NULL) {
ErtsHeapFactory factory;
erts_factory_proc_prealloc_init(&factory, p, code_hdr->attr_size_on_heap);
- result = erts_decode_ext(&factory, &ext);
+ result = erts_decode_ext(&factory, &ext, 0);
if (is_value(result)) {
erts_factory_close(&factory);
}
@@ -5742,7 +5780,7 @@ compilation_info_for_module(Process* p, /* Process whose heap to use. */
if (ext != NULL) {
ErtsHeapFactory factory;
erts_factory_proc_prealloc_init(&factory, p, code_hdr->compile_size_on_heap);
- result = erts_decode_ext(&factory, &ext);
+ result = erts_decode_ext(&factory, &ext, 0);
if (is_value(result)) {
erts_factory_close(&factory);
}
@@ -6438,7 +6476,8 @@ erts_make_stub_module(Process* p, Eterm Mod, Eterm Beam, Eterm Info)
* Insert the module in the module table.
*/
- rval = insert_new_code(p, 0, p->group_leader, Mod, code_hdr, code_size);
+ rval = stub_insert_new_code(p, 0, p->group_leader, Mod,
+ code_hdr, code_size);
if (rval != NIL) {
goto error;
}
diff --git a/erts/emulator/beam/beam_load.h b/erts/emulator/beam/beam_load.h
index 22ab71c868..fd2dd97fee 100644
--- a/erts/emulator/beam/beam_load.h
+++ b/erts/emulator/beam/beam_load.h
@@ -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.
@@ -33,7 +33,6 @@ typedef struct gen_op_entry {
int specific;
int num_specific;
int transform;
- int min_window;
} GenOpEntry;
extern GenOpEntry gen_opc[];
diff --git a/erts/emulator/beam/beam_ranges.c b/erts/emulator/beam/beam_ranges.c
index 54c337ee72..55342a38c6 100644
--- a/erts/emulator/beam/beam_ranges.c
+++ b/erts/emulator/beam/beam_ranges.c
@@ -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/erts/emulator/beam/benchmark.c b/erts/emulator/beam/benchmark.c
index 44f5c760c2..c8409784ef 100644
--- a/erts/emulator/beam/benchmark.c
+++ b/erts/emulator/beam/benchmark.c
@@ -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/erts/emulator/beam/benchmark.h b/erts/emulator/beam/benchmark.h
index 0fb0b93f12..0272896f4f 100644
--- a/erts/emulator/beam/benchmark.h
+++ b/erts/emulator/beam/benchmark.h
@@ -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/erts/emulator/beam/bif.c b/erts/emulator/beam/bif.c
index 2654785ffc..2a3bd4afe5 100644
--- a/erts/emulator/beam/bif.c
+++ b/erts/emulator/beam/bif.c
@@ -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,6 +44,7 @@
#include "erl_ptab.h"
#include "erl_bits.h"
#include "erl_bif_unique.h"
+#include "erl_map.h"
#include "erl_msacc.h"
Export *erts_await_result;
@@ -123,15 +124,12 @@ static int insert_internal_link(Process* p, Eterm rpid)
erts_add_link(&ERTS_P_LINKS(p), LINK_PID, rp->common.id);
erts_add_link(&ERTS_P_LINKS(rp), LINK_PID, p->common.id);
- ASSERT(is_nil(ERTS_TRACER_PROC(p))
- || is_internal_pid(ERTS_TRACER_PROC(p))
- || is_internal_port(ERTS_TRACER_PROC(p)));
+ ASSERT(IS_TRACER_VALID(ERTS_TRACER(p)));
if (IS_TRACED(p)) {
if (ERTS_TRACE_FLAGS(p) & (F_TRACE_SOL|F_TRACE_SOL1)) {
ERTS_TRACE_FLAGS(rp) |= (ERTS_TRACE_FLAGS(p) & TRACEE_FLAGS);
- ERTS_TRACER_PROC(rp) = ERTS_TRACER_PROC(p); /* maybe steal */
-
+ erts_tracer_replace(&rp->common, ERTS_TRACER(p));
if (ERTS_TRACE_FLAGS(p) & F_TRACE_SOL1) { /* maybe override */
ERTS_TRACE_FLAGS(rp) &= ~(F_TRACE_SOL1 | F_TRACE_SOL);
ERTS_TRACE_FLAGS(p) &= ~(F_TRACE_SOL1 | F_TRACE_SOL);
@@ -140,7 +138,8 @@ static int insert_internal_link(Process* p, Eterm rpid)
}
}
if (IS_TRACED_FL(rp, F_TRACE_PROCS))
- trace_proc(p, rp, am_getting_linked, p->common.id);
+ trace_proc(p, p == rp ? rp_locks : ERTS_PROC_LOCK_MAIN|ERTS_PROC_LOCK_LINK,
+ rp, am_getting_linked, p->common.id);
if (p == rp)
erts_smp_proc_unlock(p, rp_locks & ~ERTS_PROC_LOCK_MAIN);
@@ -159,7 +158,7 @@ BIF_RETTYPE link_1(BIF_ALIST_1)
DistEntry *dep;
if (IS_TRACED_FL(BIF_P, F_TRACE_PROCS)) {
- trace_proc(BIF_P, BIF_P, am_link, BIF_ARG_1);
+ trace_proc(BIF_P, ERTS_PROC_LOCK_MAIN, BIF_P, am_link, BIF_ARG_1);
}
/* check that the pid or port which is our argument is OK */
@@ -613,7 +612,7 @@ erts_queue_monitor_message(Process *p,
ref_copy = copy_struct(ref, ref_size, &hp, ohp);
tup = TUPLE5(hp, am_DOWN, ref_copy, type, item_copy, reason_copy);
- erts_queue_message(p, p_locksp, msgp, tup, NIL);
+ erts_queue_message(p, *p_locksp, msgp, tup, am_system);
}
static BIF_RETTYPE
@@ -882,6 +881,8 @@ BIF_RETTYPE spawn_opt_1(BIF_ALIST_1)
so.flags = erts_default_spo_flags|SPO_USE_ARGS;
so.min_heap_size = H_MIN_SIZE;
so.min_vheap_size = BIN_VH_MIN_SIZE;
+ so.max_heap_size = H_MAX_SIZE;
+ so.max_heap_flags = H_MAX_FLAGS;
so.priority = PRIORITY_NORMAL;
so.max_gen_gcs = (Uint16) erts_smp_atomic32_read_nob(&erts_max_gen_gcs);
so.scheduler = 0;
@@ -939,6 +940,9 @@ BIF_RETTYPE spawn_opt_1(BIF_ALIST_1)
} else {
so.min_heap_size = erts_next_heap_size(min_heap_size, 0);
}
+ } else if (arg == am_max_heap_size) {
+ if (!erts_max_heap_size(val, &so.max_heap_size, &so.max_heap_flags))
+ goto error;
} else if (arg == am_min_bin_vheap_size && is_small(val)) {
Sint min_vheap_size = signed_val(val);
if (min_vheap_size < 0) {
@@ -972,6 +976,10 @@ BIF_RETTYPE spawn_opt_1(BIF_ALIST_1)
goto error;
}
+ if (so.max_heap_size != 0 && so.max_heap_size < so.min_heap_size) {
+ goto error;
+ }
+
/*
* Spawn the process.
*/
@@ -1001,6 +1009,7 @@ BIF_RETTYPE unlink_1(BIF_ALIST_1)
Process *rp;
DistEntry *dep;
ErtsLink *l = NULL, *rl = NULL;
+ ErtsProcLocks cp_locks = ERTS_PROC_LOCK_MAIN;
/*
* SMP specific note concerning incoming exit signals:
@@ -1015,7 +1024,7 @@ BIF_RETTYPE unlink_1(BIF_ALIST_1)
*/
if (IS_TRACED_FL(BIF_P, F_TRACE_PROCS)) {
- trace_proc(BIF_P, BIF_P, am_unlink, BIF_ARG_1);
+ trace_proc(BIF_P, cp_locks, BIF_P, am_unlink, BIF_ARG_1);
}
if (is_internal_port(BIF_ARG_1)) {
@@ -1120,10 +1129,10 @@ BIF_RETTYPE unlink_1(BIF_ALIST_1)
erts_smp_proc_lock(BIF_P, ERTS_PROC_LOCK_LINK|ERTS_PROC_LOCK_STATUS);
+ cp_locks |= ERTS_PROC_LOCK_LINK|ERTS_PROC_LOCK_STATUS;
+
/* get process struct */
- rp = erts_pid2proc_opt(BIF_P, (ERTS_PROC_LOCK_MAIN
- | ERTS_PROC_LOCK_LINK
- | ERTS_PROC_LOCK_STATUS),
+ rp = erts_pid2proc_opt(BIF_P, cp_locks,
BIF_ARG_1, ERTS_PROC_LOCK_LINK,
ERTS_P2P_FLG_ALLOW_OTHER_X);
@@ -1149,14 +1158,17 @@ BIF_RETTYPE unlink_1(BIF_ALIST_1)
erts_destroy_link(rl);
if (IS_TRACED_FL(rp, F_TRACE_PROCS) && rl != NULL) {
- trace_proc(BIF_P, rp, am_getting_unlinked, BIF_P->common.id);
+ erts_smp_proc_unlock(BIF_P, ERTS_PROC_LOCK_STATUS);
+ cp_locks &= ~ERTS_PROC_LOCK_STATUS;
+ trace_proc(BIF_P, (ERTS_PROC_LOCK_MAIN | ERTS_PROC_LOCK_LINK),
+ rp, am_getting_unlinked, BIF_P->common.id);
}
if (rp != BIF_P)
erts_smp_proc_unlock(rp, ERTS_PROC_LOCK_LINK);
}
- erts_smp_proc_unlock(BIF_P, ERTS_PROC_LOCK_LINK|ERTS_PROC_LOCK_STATUS);
+ erts_smp_proc_unlock(BIF_P, cp_locks & ~ERTS_PROC_LOCK_MAIN);
BIF_RET(am_true);
@@ -1567,7 +1579,32 @@ static BIF_RETTYPE process_flag_aux(Process *BIF_P,
scb->n = 0;
}
- scb = ERTS_PROC_SET_SAVED_CALLS_BUF(rp, ERTS_PROC_LOCK_MAIN, scb);
+#ifdef HIPE
+ if (rp->flags & F_HIPE_MODE) {
+ ASSERT(!ERTS_PROC_GET_SAVED_CALLS_BUF(rp));
+ scb = ERTS_PROC_SET_SUSPENDED_SAVED_CALLS_BUF(rp, scb);
+ }
+ else
+#endif
+ {
+#ifdef HIPE
+ ASSERT(!ERTS_PROC_GET_SUSPENDED_SAVED_CALLS_BUF(rp));
+#endif
+ scb = ERTS_PROC_SET_SAVED_CALLS_BUF(rp, scb);
+ if (rp == BIF_P && ((scb && i == 0) || (!scb && i != 0))) {
+ /* Adjust fcalls to match save calls setting... */
+ if (i == 0)
+ BIF_P->fcalls += CONTEXT_REDS; /* disabled it */
+ else
+ BIF_P->fcalls -= CONTEXT_REDS; /* enabled it */
+
+ /*
+ * Make sure we reschedule immediately so the
+ * change take effect at once.
+ */
+ ERTS_VBUMP_ALL_REDS(BIF_P);
+ }
+ }
if (!scb)
old_value = make_small(0);
@@ -1576,12 +1613,7 @@ static BIF_RETTYPE process_flag_aux(Process *BIF_P,
erts_free(ERTS_ALC_T_CALLS_BUF, (void *) scb);
}
- /* Make sure the process in question is rescheduled
- immediately, if it's us, so the call saving takes effect. */
- if (rp == BIF_P)
- BIF_RET2(old_value, CONTEXT_REDS);
- else
- BIF_RET(old_value);
+ BIF_RET(old_value);
}
error:
@@ -1595,9 +1627,7 @@ BIF_RETTYPE process_flag_2(BIF_ALIST_2)
if (is_not_atom(BIF_ARG_2)) {
goto error;
}
- old_value = erts_proc_set_error_handler(BIF_P,
- ERTS_PROC_LOCK_MAIN,
- BIF_ARG_2);
+ old_value = erts_proc_set_error_handler(BIF_P, BIF_ARG_2);
BIF_RET(old_value);
}
else if (BIF_ARG_1 == am_priority) {
@@ -1622,14 +1652,17 @@ BIF_RETTYPE process_flag_2(BIF_ALIST_2)
* true. For more info, see implementation of
* erts_send_exit_signal().
*/
+ erts_smp_proc_lock(BIF_P, ERTS_PROC_LOCKS_XSIG_SEND);
if (trap_exit)
state = erts_smp_atomic32_read_bor_mb(&BIF_P->state,
ERTS_PSFLG_TRAP_EXIT);
else
state = erts_smp_atomic32_read_band_mb(&BIF_P->state,
~ERTS_PSFLG_TRAP_EXIT);
+ erts_smp_proc_unlock(BIF_P, ERTS_PROC_LOCKS_XSIG_SEND);
+
#ifdef ERTS_SMP
- if (ERTS_PROC_PENDING_EXIT(BIF_P)) {
+ if (state & ERTS_PSFLG_PENDING_EXIT) {
erts_handle_pending_exit(BIF_P, ERTS_PROC_LOCK_MAIN);
ERTS_BIF_EXITED(BIF_P);
}
@@ -1663,7 +1696,7 @@ BIF_RETTYPE process_flag_2(BIF_ALIST_2)
ERTS_PSFLG_BOUND);
}
- curr = ERTS_GET_SCHEDULER_DATA_FROM_PROC(BIF_P)->run_queue;
+ curr = erts_proc_sched_data(BIF_P)->run_queue;
old = (ERTS_PSFLG_BOUND & state) ? curr : NULL;
ASSERT(!old || old == curr);
@@ -1708,6 +1741,23 @@ BIF_RETTYPE process_flag_2(BIF_ALIST_2)
}
BIF_RET(old_value);
}
+ else if (BIF_ARG_1 == am_max_heap_size) {
+ Eterm *hp;
+ Uint sz = 0, max_heap_size, max_heap_flags;
+
+ if (!erts_max_heap_size(BIF_ARG_2, &max_heap_size, &max_heap_flags))
+ goto error;
+
+ if ((max_heap_size < MIN_HEAP_SIZE(BIF_P) && max_heap_size != 0))
+ goto error;
+
+ erts_max_heap_size_map(MAX_HEAP_SIZE_GET(BIF_P), MAX_HEAP_SIZE_FLAGS_GET(BIF_P), NULL, &sz);
+ hp = HAlloc(BIF_P, sz);
+ old_value = erts_max_heap_size_map(MAX_HEAP_SIZE_GET(BIF_P), MAX_HEAP_SIZE_FLAGS_GET(BIF_P), &hp, NULL);
+ MAX_HEAP_SIZE_SET(BIF_P, max_heap_size);
+ MAX_HEAP_SIZE_FLAGS_SET(BIF_P, max_heap_flags);
+ BIF_RET(old_value);
+ }
else if (BIF_ARG_1 == am_message_queue_data) {
old_value = erts_change_message_queue_management(BIF_P, BIF_ARG_2);
if (is_non_value(old_value))
@@ -1733,7 +1783,9 @@ BIF_RETTYPE process_flag_2(BIF_ALIST_2)
ERTS_TRACE_FLAGS(BIF_P) &= ~F_SENSITIVE;
}
erts_smp_proc_unlock(BIF_P, ERTS_PROC_LOCKS_ALL_MINOR);
- BIF_RET(old_value);
+ /* make sure to bump all reds so that we get
+ rescheduled immediately so setting takes effect */
+ BIF_RET2(old_value, CONTEXT_REDS);
}
else if (BIF_ARG_1 == am_monitor_nodes) {
/*
@@ -1772,10 +1824,18 @@ BIF_RETTYPE process_flag_3(BIF_ALIST_3)
Process *rp;
Eterm res;
- if ((rp = erts_pid2proc(BIF_P, ERTS_PROC_LOCK_MAIN,
- BIF_ARG_1, ERTS_PROC_LOCK_MAIN)) == NULL) {
+#ifdef ERTS_SMP
+ rp = erts_pid2proc_not_running(BIF_P, ERTS_PROC_LOCK_MAIN,
+ BIF_ARG_1, ERTS_PROC_LOCK_MAIN);
+ if (rp == ERTS_PROC_LOCK_BUSY)
+ ERTS_BIF_YIELD3(bif_export[BIF_process_flag_3], BIF_P,
+ BIF_ARG_1, BIF_ARG_2, BIF_ARG_3);
+#else
+ rp = erts_proc_lookup(BIF_ARG_1);
+#endif
+
+ if (!rp)
BIF_ERROR(BIF_P, BADARG);
- }
res = process_flag_aux(BIF_P, rp, BIF_ARG_2, BIF_ARG_3);
@@ -1908,7 +1968,7 @@ static Sint remote_send(Process *p, DistEntry *dep,
}
if (res >= 0) {
- if (IS_TRACED(p))
+ if (IS_TRACED_FL(p, F_TRACE_SEND))
trace_send(p, full_to, msg);
if (ERTS_PROC_GET_SAVED_CALLS_BUF(p))
save_calls(p, &exp_send);
@@ -1927,7 +1987,7 @@ do_send(Process *p, Eterm to, Eterm msg, Eterm *refp, ErtsSendContext* ctx)
Eterm* tp;
if (is_internal_pid(to)) {
- if (IS_TRACED(p))
+ if (IS_TRACED_FL(p, F_TRACE_SEND))
trace_send(p, to, msg);
if (ERTS_PROC_GET_SAVED_CALLS_BUF(p))
save_calls(p, &exp_send);
@@ -1956,7 +2016,7 @@ do_send(Process *p, Eterm to, Eterm msg, Eterm *refp, ErtsSendContext* ctx)
rp = erts_proc_lookup_raw(id);
if (rp) {
- if (IS_TRACED(p))
+ if (IS_TRACED_FL(p, F_TRACE_SEND))
trace_send(p, to, msg);
if (ERTS_PROC_GET_SAVED_CALLS_BUF(p))
save_calls(p, &exp_send);
@@ -1972,7 +2032,7 @@ do_send(Process *p, Eterm to, Eterm msg, Eterm *refp, ErtsSendContext* ctx)
goto port_common;
}
- if (IS_TRACED(p))
+ if (IS_TRACED_FL(p, F_TRACE_SEND))
trace_send(p, to, msg);
if (ERTS_PROC_GET_SAVED_CALLS_BUF(p))
save_calls(p, &exp_send);
@@ -2003,11 +2063,20 @@ do_send(Process *p, Eterm to, Eterm msg, Eterm *refp, ErtsSendContext* ctx)
port_common:
ret_val = 0;
-
+
if (pt) {
int ps_flags = ctx->suspend ? 0 : ERTS_PORT_SIG_FLG_NOSUSPEND;
*refp = NIL;
+ if (IS_TRACED_FL(p, F_TRACE_SEND)) /* trace once only !! */
+ trace_send(p, portid, msg);
+
+ if (have_seqtrace(SEQ_TRACE_TOKEN(p))) {
+ seq_trace_update_send(p);
+ seq_trace_output(SEQ_TRACE_TOKEN(p), msg,
+ SEQ_TRACE_SEND, portid, p);
+ }
+
switch (erts_port_command(p, ps_flags, pt, msg, refp)) {
case ERTS_PORT_OP_CALLER_EXIT:
/* We are exiting... */
@@ -2040,18 +2109,10 @@ do_send(Process *p, Eterm to, Eterm msg, Eterm *refp, ErtsSendContext* ctx)
break;
}
}
-
- if (IS_TRACED(p)) /* trace once only !! */
- trace_send(p, portid, msg);
+
if (ERTS_PROC_GET_SAVED_CALLS_BUF(p))
save_calls(p, &exp_send);
-
- if (have_seqtrace(SEQ_TRACE_TOKEN(p))) {
- seq_trace_update_send(p);
- seq_trace_output(SEQ_TRACE_TOKEN(p), msg,
- SEQ_TRACE_SEND, portid, p);
- }
-
+
if (ERTS_PROC_IS_EXITING(p)) {
KILL_CATCHES(p); /* Must exit */
return SEND_USER_ERROR;
@@ -2074,7 +2135,7 @@ do_send(Process *p, Eterm to, Eterm msg, Eterm *refp, ErtsSendContext* ctx)
if (dep == erts_this_dist_entry) {
Eterm id;
erts_deref_dist_entry(dep);
- if (IS_TRACED(p))
+ if (IS_TRACED_FL(p, F_TRACE_SEND))
trace_send(p, to, msg);
if (ERTS_PROC_GET_SAVED_CALLS_BUF(p))
save_calls(p, &exp_send);
@@ -2105,7 +2166,7 @@ do_send(Process *p, Eterm to, Eterm msg, Eterm *refp, ErtsSendContext* ctx)
}
return ret;
} else {
- if (IS_TRACED(p)) /* XXX Is this really neccessary ??? */
+ if (IS_TRACED_FL(p, F_TRACE_SEND))
trace_send(p, to, msg);
if (ERTS_PROC_GET_SAVED_CALLS_BUF(p))
save_calls(p, &exp_send);
@@ -2242,7 +2303,7 @@ BIF_RETTYPE send_3(BIF_ALIST_3)
erts_dsend_export_trap_context(p, ctx));
break;
default:
- erl_exit(ERTS_ABORT_EXIT, "send_3 invalid result %d\n", (int)result);
+ erts_exit(ERTS_ABORT_EXIT, "send_3 invalid result %d\n", (int)result);
break;
}
@@ -2286,7 +2347,7 @@ static BIF_RETTYPE dsend_continue_trap_1(BIF_ALIST_1)
BIF_TRAP1(&dsend_continue_trap_export, BIF_P, BIF_ARG_1);
}
default:
- erl_exit(ERTS_ABORT_EXIT, "dsend_continue_trap invalid result %d\n", (int)result);
+ erts_exit(ERTS_ABORT_EXIT, "dsend_continue_trap invalid result %d\n", (int)result);
break;
}
ASSERT(! "Can not arrive here");
@@ -2360,7 +2421,7 @@ Eterm erl_send(Process *p, Eterm to, Eterm msg)
erts_dsend_export_trap_context(p, ctx));
break;
default:
- erl_exit(ERTS_ABORT_EXIT, "invalid send result %d\n", (int)result);
+ erts_exit(ERTS_ABORT_EXIT, "invalid send result %d\n", (int)result);
break;
}
@@ -3738,7 +3799,7 @@ BIF_RETTYPE erts_debug_display_1(BIF_ALIST_1)
erts_dsprintf_buf_t *dsbufp = erts_create_tmp_dsbuf(64);
pres = erts_dsprintf(dsbufp, "%.*T\n", INT_MAX, BIF_ARG_1);
if (pres < 0)
- erl_exit(1, "Failed to convert term to string: %d (%s)\n",
+ erts_exit(ERTS_ERROR_EXIT, "Failed to convert term to string: %d (%s)\n",
-pres, erl_errno_id(-pres));
hp = HAlloc(BIF_P, 2*dsbufp->str_len); /* we need length * 2 heap words */
res = buf_to_intlist(&hp, dsbufp->str, dsbufp->str_len, NIL);
@@ -3760,7 +3821,7 @@ BIF_RETTYPE display_string_1(BIF_ALIST_1)
}
str = (char *) erts_alloc(ERTS_ALC_T_TMP, sizeof(char)*(len + 1));
if (intlist_to_buf(string, str, len) != len)
- erl_exit(1, "%s:%d: Internal error\n", __FILE__, __LINE__);
+ erts_exit(ERTS_ERROR_EXIT, "%s:%d: Internal error\n", __FILE__, __LINE__);
str[len] = '\0';
erts_fprintf(stderr, "%s", str);
erts_free(ERTS_ALC_T_TMP, (void *) str);
@@ -3780,7 +3841,7 @@ BIF_RETTYPE display_nl_0(BIF_ALIST_0)
BIF_RETTYPE halt_0(BIF_ALIST_0)
{
VERBOSE(DEBUG_SYSTEM,("System halted by BIF halt()\n"));
- erl_halt(0);
+ erts_halt(0);
ERTS_BIF_YIELD1(bif_export[BIF_halt_1], BIF_P, am_undefined);
}
@@ -3793,17 +3854,18 @@ static char halt_msg[HALT_MSG_SIZE];
/* ARGSUSED */
BIF_RETTYPE halt_1(BIF_ALIST_1)
{
- Sint code;
+ Uint code;
- if (is_small(BIF_ARG_1) && (code = signed_val(BIF_ARG_1)) >= 0) {
+ if (term_to_Uint_mask(BIF_ARG_1, &code)) {
+ int pos_int_code = (int) (code & INT_MAX);
VERBOSE(DEBUG_SYSTEM,("System halted by BIF halt(%T)\n", BIF_ARG_1));
- erl_halt((int)(- code));
+ erts_halt(pos_int_code);
ERTS_BIF_YIELD1(bif_export[BIF_halt_1], BIF_P, am_undefined);
}
else if (ERTS_IS_ATOM_STR("abort", BIF_ARG_1)) {
VERBOSE(DEBUG_SYSTEM,("System halted by BIF halt(%T)\n", BIF_ARG_1));
erts_smp_proc_unlock(BIF_P, ERTS_PROC_LOCK_MAIN);
- erl_exit(ERTS_ABORT_EXIT, "");
+ erts_exit(ERTS_ABORT_EXIT, "");
}
else if (is_string(BIF_ARG_1) || BIF_ARG_1 == NIL) {
Sint i;
@@ -3814,11 +3876,11 @@ BIF_RETTYPE halt_1(BIF_ALIST_1)
halt_msg[i] = '\0';
VERBOSE(DEBUG_SYSTEM,("System halted by BIF halt(%T)\n", BIF_ARG_1));
erts_smp_proc_unlock(BIF_P, ERTS_PROC_LOCK_MAIN);
- erl_exit(ERTS_DUMP_EXIT, "%s\n", halt_msg);
+ erts_exit(ERTS_DUMP_EXIT, "%s\n", halt_msg);
}
else
goto error;
- return NIL; /* Pedantic (lint does not know about erl_exit) */
+ return NIL; /* Pedantic (lint does not know about erts_exit) */
error:
BIF_ERROR(BIF_P, BADARG);
}
@@ -3829,7 +3891,7 @@ BIF_RETTYPE halt_1(BIF_ALIST_1)
/* ARGSUSED */
BIF_RETTYPE halt_2(BIF_ALIST_2)
{
- Sint code;
+ Uint code;
Eterm optlist = BIF_ARG_2;
int flush = 1;
@@ -3856,23 +3918,24 @@ BIF_RETTYPE halt_2(BIF_ALIST_2)
if (is_not_nil(optlist))
goto error;
- if (is_small(BIF_ARG_1) && (code = signed_val(BIF_ARG_1)) >= 0) {
+ if (term_to_Uint_mask(BIF_ARG_1, &code)) {
+ int pos_int_code = (int) (code & INT_MAX);
VERBOSE(DEBUG_SYSTEM,
("System halted by BIF halt(%T, %T)\n", BIF_ARG_1, BIF_ARG_2));
if (flush) {
- erl_halt((int)(- code));
+ erts_halt(pos_int_code);
ERTS_BIF_YIELD1(bif_export[BIF_halt_1], BIF_P, am_undefined);
}
else {
erts_smp_proc_unlock(BIF_P, ERTS_PROC_LOCK_MAIN);
- erl_exit((int)(- code), "");
+ erts_exit(pos_int_code, "");
}
}
else if (ERTS_IS_ATOM_STR("abort", BIF_ARG_1)) {
VERBOSE(DEBUG_SYSTEM,
("System halted by BIF halt(%T, %T)\n", BIF_ARG_1, BIF_ARG_2));
erts_smp_proc_unlock(BIF_P, ERTS_PROC_LOCK_MAIN);
- erl_exit(ERTS_ABORT_EXIT, "");
+ erts_exit(ERTS_ABORT_EXIT, "");
}
else if (is_string(BIF_ARG_1) || BIF_ARG_1 == NIL) {
Sint i;
@@ -3884,11 +3947,11 @@ BIF_RETTYPE halt_2(BIF_ALIST_2)
VERBOSE(DEBUG_SYSTEM,
("System halted by BIF halt(%T, %T)\n", BIF_ARG_1, BIF_ARG_2));
erts_smp_proc_unlock(BIF_P, ERTS_PROC_LOCK_MAIN);
- erl_exit(ERTS_DUMP_EXIT, "%s\n", halt_msg);
+ erts_exit(ERTS_DUMP_EXIT, "%s\n", halt_msg);
}
else
goto error;
- return NIL; /* Pedantic (lint does not know about erl_exit) */
+ return NIL; /* Pedantic (lint does not know about erts_exit) */
error:
BIF_ERROR(BIF_P, BADARG);
}
@@ -3944,7 +4007,7 @@ term2list_dsprintf(Process *p, Eterm term)
erts_dsprintf_buf_t *dsbufp = erts_create_tmp_dsbuf(64);
pres = erts_dsprintf(dsbufp, "%T", term);
if (pres < 0)
- erl_exit(1, "Failed to convert term to list: %d (%s)\n",
+ erts_exit(ERTS_ERROR_EXIT, "Failed to convert term to list: %d (%s)\n",
-pres, erl_errno_id(-pres));
hp = HAlloc(p, 2*dsbufp->str_len); /* we need length * 2 heap words */
res = buf_to_intlist(&hp, dsbufp->str, dsbufp->str_len, NIL);
@@ -4162,8 +4225,28 @@ BIF_RETTYPE group_leader_2(BIF_ALIST_2)
else {
locks &= ~ERTS_PROC_LOCK_STATUS;
erts_smp_proc_unlock(new_member, ERTS_PROC_LOCK_STATUS);
- new_member->group_leader = STORE_NC_IN_PROC(new_member,
- BIF_ARG_1);
+ if (erts_smp_atomic32_read_nob(&new_member->state)
+ & !(ERTS_PSFLG_DIRTY_RUNNING|ERTS_PSFLG_DIRTY_RUNNING_SYS)) {
+ new_member->group_leader = STORE_NC_IN_PROC(new_member,
+ BIF_ARG_1);
+ }
+ else {
+ ErlHeapFragment *bp;
+ Eterm *hp;
+ /*
+ * Other process executing on a dirty scheduler,
+ * so we are not allowed to write to its heap.
+ * Store in heap fragment.
+ */
+
+ bp = new_message_buffer(NC_HEAP_SIZE(BIF_ARG_1));
+ hp = bp->mem;
+ new_member->group_leader = STORE_NC(&hp,
+ &new_member->off_heap,
+ BIF_ARG_1);
+ bp->next = new_member->mbuf;
+ new_member->mbuf = bp;
+ }
}
}
@@ -4195,22 +4278,33 @@ BIF_RETTYPE system_flag_2(BIF_ALIST_2)
Sint n;
if (BIF_ARG_1 == am_multi_scheduling) {
- if (BIF_ARG_2 == am_block || BIF_ARG_2 == am_unblock) {
+ if (BIF_ARG_2 == am_block || BIF_ARG_2 == am_unblock
+ || BIF_ARG_2 == am_block_normal || BIF_ARG_2 == am_unblock_normal) {
#ifndef ERTS_SMP
BIF_RET(am_disabled);
#else
+ int block = (BIF_ARG_2 == am_block
+ || BIF_ARG_2 == am_block_normal);
+ int normal = (BIF_ARG_2 == am_block_normal
+ || BIF_ARG_2 == am_unblock_normal);
if (erts_no_schedulers == 1)
BIF_RET(am_disabled);
else {
switch (erts_block_multi_scheduling(BIF_P,
ERTS_PROC_LOCK_MAIN,
- BIF_ARG_2 == am_block,
+ block,
+ normal,
0)) {
case ERTS_SCHDLR_SSPND_DONE_MSCHED_BLOCKED:
BIF_RET(am_blocked);
+ case ERTS_SCHDLR_SSPND_DONE_NMSCHED_BLOCKED:
+ BIF_RET(am_blocked_normal);
case ERTS_SCHDLR_SSPND_YIELD_DONE_MSCHED_BLOCKED:
ERTS_BIF_YIELD_RETURN_X(BIF_P, am_blocked,
am_multi_scheduling);
+ case ERTS_SCHDLR_SSPND_YIELD_DONE_NMSCHED_BLOCKED:
+ ERTS_BIF_YIELD_RETURN_X(BIF_P, am_blocked_normal,
+ am_multi_scheduling);
case ERTS_SCHDLR_SSPND_DONE:
BIF_RET(am_enabled);
case ERTS_SCHDLR_SSPND_YIELD_RESTART:
@@ -4243,11 +4337,7 @@ BIF_RETTYPE system_flag_2(BIF_ALIST_2)
switch (erts_set_schedulers_online(BIF_P,
ERTS_PROC_LOCK_MAIN,
signed_val(BIF_ARG_2),
- &old_no
-#ifdef ERTS_DIRTY_SCHEDULERS
- , 0
-#endif
- )) {
+ &old_no, 0)) {
case ERTS_SCHDLR_SSPND_DONE:
BIF_RET(make_small(old_no));
case ERTS_SCHDLR_SSPND_YIELD_RESTART:
@@ -4307,6 +4397,31 @@ BIF_RETTYPE system_flag_2(BIF_ALIST_2)
erts_smp_proc_lock(BIF_P, ERTS_PROC_LOCK_MAIN);
BIF_RET(make_small(oval));
+ } else if (BIF_ARG_1 == am_max_heap_size) {
+
+ Eterm *hp, old_value;
+ Uint sz = 0, max_heap_size, max_heap_flags;
+
+ if (!erts_max_heap_size(BIF_ARG_2, &max_heap_size, &max_heap_flags))
+ goto error;
+
+ if (max_heap_size < H_MIN_SIZE && max_heap_size != 0)
+ goto error;
+
+ erts_max_heap_size_map(H_MAX_SIZE, H_MAX_FLAGS, NULL, &sz);
+ hp = HAlloc(BIF_P, sz);
+ old_value = erts_max_heap_size_map(H_MAX_SIZE, H_MAX_FLAGS, &hp, NULL);
+
+ erts_smp_proc_unlock(BIF_P, ERTS_PROC_LOCK_MAIN);
+ erts_smp_thr_progress_block();
+
+ H_MAX_SIZE = max_heap_size;
+ H_MAX_FLAGS = max_heap_flags;
+
+ erts_smp_thr_progress_unblock();
+ erts_smp_proc_lock(BIF_P, ERTS_PROC_LOCK_MAIN);
+
+ BIF_RET(old_value);
} else if (BIF_ARG_1 == am_display_items) {
int oval = display_items;
if (!is_small(BIF_ARG_2) || (n = signed_val(BIF_ARG_2)) < 0) {
@@ -4327,12 +4442,34 @@ BIF_RETTYPE system_flag_2(BIF_ALIST_2)
} else if (BIF_ARG_1 == am_trace_control_word) {
BIF_RET(db_set_trace_control_word(BIF_P, BIF_ARG_2));
} else if (BIF_ARG_1 == am_sequential_tracer) {
- Eterm old_value = erts_set_system_seq_tracer(BIF_P,
- ERTS_PROC_LOCK_MAIN,
- BIF_ARG_2);
- if (old_value != THE_NON_VALUE) {
- BIF_RET(old_value);
- }
+ ErtsTracer new_seq_tracer, old_seq_tracer;
+ Eterm ret;
+
+ if (BIF_ARG_2 == am_false)
+ new_seq_tracer = erts_tracer_nil;
+ else
+ new_seq_tracer = erts_term_to_tracer(THE_NON_VALUE, BIF_ARG_2);
+
+ if (new_seq_tracer == THE_NON_VALUE)
+ goto error;
+
+ old_seq_tracer = erts_set_system_seq_tracer(BIF_P,
+ ERTS_PROC_LOCK_MAIN,
+ new_seq_tracer);
+
+ ERTS_TRACER_CLEAR(&new_seq_tracer);
+
+ if (old_seq_tracer == THE_NON_VALUE)
+ goto error;
+
+ if (ERTS_TRACER_IS_NIL(old_seq_tracer))
+ BIF_RET(am_false);
+
+ ret = erts_tracer_to_term(BIF_P, old_seq_tracer);
+
+ ERTS_TRACER_CLEAR(&old_seq_tracer);
+
+ BIF_RET(ret);
} else if (BIF_ARG_1 == make_small(1)) {
int i, max;
ErtsMessage* mp;
@@ -4617,29 +4754,27 @@ BIF_RETTYPE erts_internal_cmp_term_2(BIF_ALIST_2) {
/*
* Processes doing yield on return in a bif ends up in bif_return_trap().
*/
-static BIF_RETTYPE bif_return_trap(
-#ifdef DEBUG
- BIF_ALIST_2
-#else
- BIF_ALIST_1
-#endif
- )
+static BIF_RETTYPE bif_return_trap(BIF_ALIST_2)
{
-#ifdef DEBUG
+ Eterm res = BIF_ARG_1;
+
switch (BIF_ARG_2) {
- case am_multi_scheduling:
#ifdef ERTS_SMP
- erts_dbg_multi_scheduling_return_trap(BIF_P, BIF_ARG_1);
-#endif
- break;
- case am_schedulers_online:
+ case am_multi_scheduling: {
+ int msb = erts_is_multi_scheduling_blocked();
+ if (msb > 0)
+ res = am_blocked;
+ else if (msb < 0)
+ res = am_blocked_normal;
+ else
+ ERTS_INTERNAL_ERROR("Unexpected multi scheduling block state");
break;
+ }
+#endif
default:
break;
}
-#endif
-
- BIF_RET(BIF_ARG_1);
+ BIF_RET(res);
}
/*
@@ -4671,7 +4806,7 @@ skip_current_msgq(Process *c_p)
res = 0;
}
else {
- ERTS_SMP_MSGQ_MV_INQ2PRIVQ(c_p);
+ ERTS_SMP_MSGQ_MV_INQ2PRIVQ(c_p);
c_p->msg.save = c_p->msg.last;
res = 1;
}
@@ -4744,17 +4879,12 @@ void erts_init_bif(void)
erts_smp_atomic_init_nob(&erts_dead_ports_ptr, (erts_aint_t) NULL);
/*
- * bif_return_trap/1 is a hidden BIF that bifs that need to
- * yield the calling process traps to. The only thing it does:
- * return the value passed as argument.
+ * bif_return_trap/2 is a hidden BIF that bifs that need to
+ * yield the calling process traps to.
*/
- erts_init_trap_export(&bif_return_trap_export, am_erlang, am_bif_return_trap,
-#ifdef DEBUG
- 2
-#else
- 1
-#endif
- , &bif_return_trap);
+ erts_init_trap_export(&bif_return_trap_export,
+ am_erlang, am_bif_return_trap, 2,
+ &bif_return_trap);
erts_await_result = erts_export_put(am_erts_internal,
am_await_result,
diff --git a/erts/emulator/beam/bif.h b/erts/emulator/beam/bif.h
index a62eddf36b..2203182a0d 100644
--- a/erts/emulator/beam/bif.h
+++ b/erts/emulator/beam/bif.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.
@@ -52,18 +52,19 @@ extern Export *erts_convert_time_unit_trap;
(p)->fcalls = 0; \
else \
(p)->fcalls = -CONTEXT_REDS; \
+ ASSERT(ERTS_BIF_REDS_LEFT((p)) == 0); \
} while(0)
#define ERTS_VBUMP_ALL_REDS_INTERNAL(p, fcalls) \
do { \
if (!ERTS_PROC_GET_SAVED_CALLS_BUF((p))) { \
if ((fcalls) > 0) \
- ERTS_PROC_GET_SCHDATA((p))->virtual_reds += (fcalls); \
+ erts_proc_sched_data((p))->virtual_reds += (fcalls); \
(fcalls) = 0; \
} \
else { \
if ((fcalls) > -CONTEXT_REDS) \
- ERTS_PROC_GET_SCHDATA((p))->virtual_reds \
+ erts_proc_sched_data((p))->virtual_reds \
+= ((fcalls) - (-CONTEXT_REDS)); \
(fcalls) = -CONTEXT_REDS; \
} \
@@ -90,22 +91,22 @@ do { \
if (!ERTS_PROC_GET_SAVED_CALLS_BUF((p))) { \
if ((p)->fcalls >= reds) { \
(p)->fcalls -= reds; \
- ERTS_PROC_GET_SCHDATA((p))->virtual_reds += reds; \
+ erts_proc_sched_data((p))->virtual_reds += reds; \
} \
else { \
if ((p)->fcalls > 0) \
- ERTS_PROC_GET_SCHDATA((p))->virtual_reds += (p)->fcalls;\
+ erts_proc_sched_data((p))->virtual_reds += (p)->fcalls; \
(p)->fcalls = 0; \
} \
} \
else { \
if ((p)->fcalls >= reds - CONTEXT_REDS) { \
(p)->fcalls -= reds; \
- ERTS_PROC_GET_SCHDATA((p))->virtual_reds += reds; \
+ erts_proc_sched_data((p))->virtual_reds += reds; \
} \
else { \
if ((p)->fcalls > -CONTEXT_REDS) \
- ERTS_PROC_GET_SCHDATA((p))->virtual_reds \
+ erts_proc_sched_data((p))->virtual_reds \
+= (p)->fcalls - (-CONTEXT_REDS); \
(p)->fcalls = -CONTEXT_REDS; \
} \
@@ -117,14 +118,14 @@ do { \
if (ERTS_PROC_GET_SAVED_CALLS_BUF((P))) { \
int nreds__ = ((int)(Reds)) - CONTEXT_REDS; \
if ((FCalls) > nreds__) { \
- ERTS_PROC_GET_SCHDATA((P))->virtual_reds \
+ erts_proc_sched_data((P))->virtual_reds \
+= (FCalls) - nreds__; \
(FCalls) = nreds__; \
} \
} \
else { \
if ((FCalls) > (Reds)) { \
- ERTS_PROC_GET_SCHDATA((P))->virtual_reds \
+ erts_proc_sched_data((P))->virtual_reds \
+= (FCalls) - (Reds); \
(FCalls) = (Reds); \
} \
@@ -164,7 +165,7 @@ do { \
#define ERTS_BIF_ERROR_TRAPPED1(Proc, Reason, Bif, A0) \
do { \
- Eterm* reg = ERTS_PROC_GET_SCHDATA((Proc))->x_reg_array; \
+ Eterm* reg = erts_proc_sched_data((Proc))->x_reg_array; \
(Proc)->freason = (Reason); \
(Proc)->current = (Bif)->code; \
reg[0] = (Eterm) (A0); \
@@ -173,7 +174,7 @@ do { \
#define ERTS_BIF_ERROR_TRAPPED2(Proc, Reason, Bif, A0, A1) \
do { \
- Eterm* reg = ERTS_PROC_GET_SCHDATA((Proc))->x_reg_array; \
+ Eterm* reg = erts_proc_sched_data((Proc))->x_reg_array; \
(Proc)->freason = (Reason); \
(Proc)->current = (Bif)->code; \
reg[0] = (Eterm) (A0); \
@@ -183,7 +184,7 @@ do { \
#define ERTS_BIF_ERROR_TRAPPED3(Proc, Reason, Bif, A0, A1, A2) \
do { \
- Eterm* reg = ERTS_PROC_GET_SCHDATA((Proc))->x_reg_array; \
+ Eterm* reg = erts_proc_sched_data((Proc))->x_reg_array; \
(Proc)->freason = (Reason); \
(Proc)->current = (Bif)->code; \
reg[0] = (Eterm) (A0); \
@@ -207,7 +208,7 @@ do { \
#define ERTS_BIF_PREP_ERROR_TRAPPED1(Ret, Proc, Reason, Bif, A0) \
do { \
- Eterm* reg = ERTS_PROC_GET_SCHDATA((Proc))->x_reg_array; \
+ Eterm* reg = erts_proc_sched_data((Proc))->x_reg_array; \
(Proc)->freason = (Reason); \
(Proc)->current = (Bif)->code; \
reg[0] = (Eterm) (A0); \
@@ -216,7 +217,7 @@ do { \
#define ERTS_BIF_PREP_ERROR_TRAPPED2(Ret, Proc, Reason, Bif, A0, A1) \
do { \
- Eterm* reg = ERTS_PROC_GET_SCHDATA((Proc))->x_reg_array; \
+ Eterm* reg = erts_proc_sched_data((Proc))->x_reg_array; \
(Proc)->freason = (Reason); \
(Proc)->current = (Bif)->code; \
reg[0] = (Eterm) (A0); \
@@ -226,7 +227,7 @@ do { \
#define ERTS_BIF_PREP_ERROR_TRAPPED3(Ret, Proc, Reason, Bif, A0, A1, A2) \
do { \
- Eterm* reg = ERTS_PROC_GET_SCHDATA((Proc))->x_reg_array; \
+ Eterm* reg = erts_proc_sched_data((Proc))->x_reg_array; \
(Proc)->freason = (Reason); \
(Proc)->current = (Bif)->code; \
reg[0] = (Eterm) (A0); \
@@ -245,7 +246,7 @@ do { \
#define ERTS_BIF_PREP_TRAP1(Ret, Trap, Proc, A0) \
do { \
- Eterm* reg = ERTS_PROC_GET_SCHDATA((Proc))->x_reg_array; \
+ Eterm* reg = erts_proc_sched_data((Proc))->x_reg_array; \
(Proc)->arity = 1; \
reg[0] = (Eterm) (A0); \
(Proc)->i = (BeamInstr*) ((Trap)->addressv[erts_active_code_ix()]); \
@@ -255,7 +256,7 @@ do { \
#define ERTS_BIF_PREP_TRAP2(Ret, Trap, Proc, A0, A1) \
do { \
- Eterm* reg = ERTS_PROC_GET_SCHDATA((Proc))->x_reg_array; \
+ Eterm* reg = erts_proc_sched_data((Proc))->x_reg_array; \
(Proc)->arity = 2; \
reg[0] = (Eterm) (A0); \
reg[1] = (Eterm) (A1); \
@@ -266,7 +267,7 @@ do { \
#define ERTS_BIF_PREP_TRAP3(Ret, Trap, Proc, A0, A1, A2) \
do { \
- Eterm* reg = ERTS_PROC_GET_SCHDATA((Proc))->x_reg_array; \
+ Eterm* reg = erts_proc_sched_data((Proc))->x_reg_array; \
(Proc)->arity = 3; \
reg[0] = (Eterm) (A0); \
reg[1] = (Eterm) (A1); \
@@ -278,7 +279,7 @@ do { \
#define ERTS_BIF_PREP_TRAP3_NO_RET(Trap, Proc, A0, A1, A2)\
do { \
- Eterm* reg = ERTS_PROC_GET_SCHDATA((Proc))->x_reg_array; \
+ Eterm* reg = erts_proc_sched_data((Proc))->x_reg_array; \
(Proc)->arity = 3; \
reg[0] = (Eterm) (A0); \
reg[1] = (Eterm) (A1); \
@@ -295,7 +296,7 @@ do { \
} while(0)
#define BIF_TRAP1(Trap_, p, A0) do { \
- Eterm* reg = ERTS_PROC_GET_SCHDATA((p))->x_reg_array; \
+ Eterm* reg = erts_proc_sched_data((p))->x_reg_array; \
(p)->arity = 1; \
reg[0] = (A0); \
(p)->i = (BeamInstr*) ((Trap_)->addressv[erts_active_code_ix()]); \
@@ -304,7 +305,7 @@ do { \
} while(0)
#define BIF_TRAP2(Trap_, p, A0, A1) do { \
- Eterm* reg = ERTS_PROC_GET_SCHDATA((p))->x_reg_array; \
+ Eterm* reg = erts_proc_sched_data((p))->x_reg_array; \
(p)->arity = 2; \
reg[0] = (A0); \
reg[1] = (A1); \
@@ -314,7 +315,7 @@ do { \
} while(0)
#define BIF_TRAP3(Trap_, p, A0, A1, A2) do { \
- Eterm* reg = ERTS_PROC_GET_SCHDATA((p))->x_reg_array; \
+ Eterm* reg = erts_proc_sched_data((p))->x_reg_array; \
(p)->arity = 3; \
reg[0] = (A0); \
reg[1] = (A1); \
@@ -338,37 +339,20 @@ do { \
} while(0)
extern Export bif_return_trap_export;
-#ifdef DEBUG
-#define ERTS_BIF_PREP_YIELD_RETURN_X(RET, P, VAL, DEBUG_VAL) \
+#define ERTS_BIF_PREP_YIELD_RETURN_X(RET, P, VAL, OP) \
do { \
ERTS_VBUMP_ALL_REDS(P); \
- ERTS_BIF_PREP_TRAP2(RET, &bif_return_trap_export, (P), (VAL), \
- (DEBUG_VAL)); \
+ ERTS_BIF_PREP_TRAP2(RET, &bif_return_trap_export, (P), (VAL), (OP));\
} while (0)
-#else
-#define ERTS_BIF_PREP_YIELD_RETURN_X(RET, P, VAL, DEBUG_VAL) \
-do { \
- ERTS_VBUMP_ALL_REDS(P); \
- ERTS_BIF_PREP_TRAP1(RET, &bif_return_trap_export, (P), (VAL)); \
-} while (0)
-#endif
#define ERTS_BIF_PREP_YIELD_RETURN(RET, P, VAL) \
ERTS_BIF_PREP_YIELD_RETURN_X(RET, (P), (VAL), am_undefined)
-#ifdef DEBUG
-#define ERTS_BIF_YIELD_RETURN_X(P, VAL, DEBUG_VAL) \
+#define ERTS_BIF_YIELD_RETURN_X(P, VAL, OP) \
do { \
ERTS_VBUMP_ALL_REDS(P); \
- BIF_TRAP2(&bif_return_trap_export, (P), (VAL), (DEBUG_VAL)); \
+ BIF_TRAP2(&bif_return_trap_export, (P), (VAL), (OP)); \
} while (0)
-#else
-#define ERTS_BIF_YIELD_RETURN_X(P, VAL, DEBUG_VAL) \
-do { \
- ERTS_VBUMP_ALL_REDS(P); \
- BIF_TRAP1(&bif_return_trap_export, (P), (VAL)); \
-} while (0)
-#endif
#define ERTS_BIF_RETURN_YIELD(P) ERTS_VBUMP_ALL_REDS((P))
diff --git a/erts/emulator/beam/bif.tab b/erts/emulator/beam/bif.tab
index a6670c10e8..872f0f9b2a 100644
--- a/erts/emulator/beam/bif.tab
+++ b/erts/emulator/beam/bif.tab
@@ -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.
@@ -181,9 +181,8 @@ bif erlang:port_set_data/2
bif erlang:port_get_data/1
# Tracing & debugging.
-bif erlang:trace_pattern/2
-bif erlang:trace_pattern/3
-bif erlang:trace/3
+bif erts_internal:trace_pattern/3
+bif erts_internal:trace/3
bif erlang:trace_info/2
bif erlang:trace_delivered/1
bif erlang:seq_trace/2
@@ -653,6 +652,8 @@ bif erts_debug:size_shared/1
bif erts_debug:copy_shared/1
bif erlang:has_prepared_code_on_load/1
+bif maps:take/2
+
#
# Obsolete
#
diff --git a/erts/emulator/beam/big.c b/erts/emulator/beam/big.c
index 11838e24ef..4baee7900b 100644
--- a/erts/emulator/beam/big.c
+++ b/erts/emulator/beam/big.c
@@ -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.
@@ -2035,6 +2035,32 @@ term_to_Uint(Eterm term, Uint *up)
}
}
+/* same as term_to_Uint()
+ but also accept larger bignums by masking
+ */
+int
+term_to_Uint_mask(Eterm term, Uint *up)
+{
+ if (is_small(term)) {
+ Sint i = signed_val(term);
+ if (i < 0) {
+ *up = BADARG;
+ return 0;
+ }
+ *up = (Uint) i;
+ return 1;
+ } else if (is_big(term) && !big_sign(term)) {
+ ErtsDigit* xr = big_v(term);
+
+ ERTS_CT_ASSERT(sizeof(ErtsDigit) == sizeof(Uint));
+ *up = (Uint)*xr; /* just pick first word */
+ return 1;
+ } else {
+ *up = BADARG;
+ return 0;
+ }
+}
+
int
term_to_UWord(Eterm term, UWord *up)
{
diff --git a/erts/emulator/beam/big.h b/erts/emulator/beam/big.h
index 9c92de6b55..464acd67f6 100644
--- a/erts/emulator/beam/big.h
+++ b/erts/emulator/beam/big.h
@@ -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.
@@ -154,6 +154,7 @@ Eterm bytes_to_big(byte*, dsize_t, int, Eterm*);
byte* big_to_bytes(Eterm, byte*);
int term_to_Uint(Eterm, Uint*);
+int term_to_Uint_mask(Eterm, Uint*);
int term_to_UWord(Eterm, UWord*);
int term_to_Sint(Eterm, Sint*);
#if HAVE_INT64
diff --git a/erts/emulator/beam/binary.c b/erts/emulator/beam/binary.c
index d3e481c7f9..071a356260 100644
--- a/erts/emulator/beam/binary.c
+++ b/erts/emulator/beam/binary.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.
@@ -50,7 +50,7 @@ erts_init_binary(void)
if ((((UWord) &((Binary *) 0)->orig_bytes[0]) % ((UWord) 8)) != 0) {
/* I assume that any compiler should be able to optimize this
away. If not, this test is not very expensive... */
- erl_exit(ERTS_ABORT_EXIT,
+ erts_exit(ERTS_ABORT_EXIT,
"Internal error: Address of orig_bytes[0] of a Binary"
" is *not* 8-byte aligned\n");
}
@@ -117,7 +117,7 @@ new_binary(Process *p, byte *buf, Uint len)
* When heap binary is not desired...
*/
-Eterm erts_new_mso_binary(Process *p, byte *buf, int len)
+Eterm erts_new_mso_binary(Process *p, byte *buf, Uint len)
{
ProcBin* pb;
Binary* bptr;
diff --git a/erts/emulator/beam/break.c b/erts/emulator/beam/break.c
index 2c8ecf04be..3c19e82b66 100644
--- a/erts/emulator/beam/break.c
+++ b/erts/emulator/beam/break.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.
@@ -104,7 +104,7 @@ process_killer(void)
erts_printf("(k)ill (n)ext (r)eturn:\n");
while(1) {
if ((j = sys_get_key(0)) <= 0)
- erl_exit(0, "");
+ erts_exit(0, "");
switch(j) {
case 'k': {
ErtsProcLocks rp_locks = ERTS_PROC_LOCKS_XSIG_SEND;
@@ -118,7 +118,9 @@ process_killer(void)
| ERTS_PSFLG_ACTIVE_SYS
| ERTS_PSFLG_IN_RUNQ
| ERTS_PSFLG_RUNNING
- | ERTS_PSFLG_RUNNING_SYS)) {
+ | ERTS_PSFLG_RUNNING_SYS
+ | ERTS_PSFLG_DIRTY_RUNNING
+ | ERTS_PSFLG_DIRTY_RUNNING_SYS)) {
erts_printf("Can only kill WAITING processes this way\n");
}
else {
@@ -214,7 +216,8 @@ print_process_info(int to, void *to_arg, Process *p)
if (state & ERTS_PSFLG_GC) {
garbing = 1;
running = 1;
- } else if (state & ERTS_PSFLG_RUNNING)
+ } else if (state & (ERTS_PSFLG_RUNNING
+ | ERTS_PSFLG_DIRTY_RUNNING))
running = 1;
/*
@@ -347,8 +350,11 @@ print_process_info(int to, void *to_arg, Process *p)
static void
print_garb_info(int to, void *to_arg, Process* p)
{
+#ifdef ERTS_SMP
/* ERTS_SMP: A scheduler is probably concurrently doing gc... */
-#ifndef ERTS_SMP
+ if (!ERTS_IS_CRASH_DUMPING)
+ return;
+#endif
erts_print(to, to_arg, "New heap start: %bpX\n", p->heap);
erts_print(to, to_arg, "New heap top: %bpX\n", p->htop);
erts_print(to, to_arg, "Stack top: %bpX\n", p->stop);
@@ -356,7 +362,6 @@ print_garb_info(int to, void *to_arg, Process* p)
erts_print(to, to_arg, "Old heap start: %bpX\n", OLD_HEAP(p));
erts_print(to, to_arg, "Old heap top: %bpX\n", OLD_HTOP(p));
erts_print(to, to_arg, "Old heap end: %bpX\n", OLD_HEND(p));
-#endif
}
void
@@ -493,7 +498,7 @@ do_break(void)
halt immediately if break is called */
mode = erts_read_env("ERL_CONSOLE_MODE");
if (mode && strcmp(mode, "window") != 0)
- erl_exit(0, "");
+ erts_exit(0, "");
erts_free_read_env(mode);
#endif /* __WIN32__ */
@@ -503,7 +508,7 @@ do_break(void)
while (1) {
if ((i = sys_get_key(0)) <= 0)
- erl_exit(0, "");
+ erts_exit(0, "");
switch (i) {
case 'q':
case 'a':
@@ -513,9 +518,9 @@ do_break(void)
* The usual reason for a read error is Ctrl-C. Treat this as
* 'a' to avoid infinite loop.
*/
- erl_exit(0, "");
+ erts_exit(0, "");
case 'A': /* Halt generating crash dump */
- erl_exit(1, "Crash dump requested by user");
+ erts_exit(ERTS_ERROR_EXIT, "Crash dump requested by user");
case 'c':
return;
case 'p':
@@ -684,7 +689,7 @@ erl_crash_dump_v(char *file, int line, char* fmt, va_list args)
crash dump. */
erts_thr_progress_fatal_error_block(&tpd_buf);
-#ifdef ERTS_THR_HAVE_SIG_FUNCS
+#ifdef ERTS_SYS_SUSPEND_SIGNAL
/*
* We suspend all scheduler threads so that we can dump some
* data about the currently running processes and scheduler data.
@@ -785,7 +790,7 @@ erl_crash_dump_v(char *file, int line, char* fmt, va_list args)
erts_fdprintf(fd, "Atoms: %d\n", atom_table_size());
#ifdef USE_THREADS
- /* We want to note which thread it was that called erl_exit */
+ /* We want to note which thread it was that called erts_exit */
if (erts_get_scheduler_data()) {
erts_fdprintf(fd, "Calling Thread: scheduler:%d\n",
erts_get_scheduler_data()->no);
@@ -818,7 +823,7 @@ erl_crash_dump_v(char *file, int line, char* fmt, va_list args)
#ifdef ERTS_SMP
-#if defined(ERTS_THR_HAVE_SIG_FUNCS)
+#ifdef ERTS_SYS_SUSPEND_SIGNAL
/* We resume all schedulers so that we are in a known safe state
when we write the rest of the crash dump */
diff --git a/erts/emulator/beam/code_ix.c b/erts/emulator/beam/code_ix.c
index 1b0968c55c..ec6267711b 100644
--- a/erts/emulator/beam/code_ix.c
+++ b/erts/emulator/beam/code_ix.c
@@ -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.
@@ -94,6 +94,7 @@ void erts_commit_staging_code_ix(void)
ix = (ix + 1) % ERTS_NUM_CODE_IX;
erts_smp_atomic32_set_nob(&the_staging_code_index, ix);
export_staging_unlock();
+ erts_tracer_nif_clear();
CIX_TRACE("activate");
}
diff --git a/erts/emulator/beam/code_ix.h b/erts/emulator/beam/code_ix.h
index 7a66211a5b..584a605771 100644
--- a/erts/emulator/beam/code_ix.h
+++ b/erts/emulator/beam/code_ix.h
@@ -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/erts/emulator/beam/copy.c b/erts/emulator/beam/copy.c
index 67a96f6442..ccc4cbad43 100644
--- a/erts/emulator/beam/copy.c
+++ b/erts/emulator/beam/copy.c
@@ -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.
@@ -58,7 +58,7 @@ Eterm copy_object_x(Eterm obj, Process* to, Uint extra) {
res = copy_struct(obj, size, &hp, &to->off_heap);
#ifdef DEBUG
if (eq(obj, res) == 0) {
- erl_exit(ERTS_ABORT_EXIT, "copy not equal to source\n");
+ erts_exit(ERTS_ABORT_EXIT, "copy not equal to source\n");
}
#endif
return res;
@@ -174,7 +174,7 @@ Uint size_object(Eterm obj)
}
break;
default:
- erl_exit(ERTS_ABORT_EXIT, "size_object: bad hashmap type %d\n", MAP_HEADER_TYPE(hdr));
+ erts_exit(ERTS_ABORT_EXIT, "size_object: bad hashmap type %d\n", MAP_HEADER_TYPE(hdr));
}
break;
case SUB_BINARY_SUBTAG:
@@ -205,7 +205,7 @@ Uint size_object(Eterm obj)
}
break;
case BIN_MATCHSTATE_SUBTAG:
- erl_exit(ERTS_ABORT_EXIT,
+ erts_exit(ERTS_ABORT_EXIT,
"size_object: matchstate term not allowed");
default:
sum += thing_arityval(hdr) + 1;
@@ -223,7 +223,7 @@ Uint size_object(Eterm obj)
obj = ESTACK_POP(s);
break;
default:
- erl_exit(ERTS_ABORT_EXIT, "size_object: bad tag for %#x\n", obj);
+ erts_exit(ERTS_ABORT_EXIT, "size_object: bad tag for %#x\n", obj);
}
}
}
@@ -438,10 +438,10 @@ Uint size_shared(Eterm obj)
goto pop_next;
}
default:
- erl_exit(ERTS_ABORT_EXIT, "size_shared: bad hashmap type %d\n", MAP_HEADER_TYPE(hdr));
+ erts_exit(ERTS_ABORT_EXIT, "size_shared: bad hashmap type %d\n", MAP_HEADER_TYPE(hdr));
}
case BIN_MATCHSTATE_SUBTAG:
- erl_exit(ERTS_ABORT_EXIT,
+ erts_exit(ERTS_ABORT_EXIT,
"size_shared: matchstate term not allowed");
default:
sum += thing_arityval(hdr) + 1;
@@ -457,7 +457,7 @@ Uint size_shared(Eterm obj)
obj = EQUEUE_GET(s);
break;
default:
- erl_exit(ERTS_ABORT_EXIT, "size_shared: bad tag for %#x\n", obj);
+ erts_exit(ERTS_ABORT_EXIT, "size_shared: bad tag for %#x\n", obj);
}
}
@@ -569,7 +569,7 @@ cleanup:
goto cleanup_next;
}
default:
- erl_exit(ERTS_ABORT_EXIT, "size_shared: bad hashmap type %d\n", MAP_HEADER_TYPE(hdr));
+ erts_exit(ERTS_ABORT_EXIT, "size_shared: bad hashmap type %d\n", MAP_HEADER_TYPE(hdr));
}
default:
goto cleanup_next;
@@ -584,7 +584,7 @@ cleanup:
obj = EQUEUE_GET(s);
break;
default:
- erl_exit(ERTS_ABORT_EXIT, "size_shared: bad tag for %#x\n", obj);
+ erts_exit(ERTS_ABORT_EXIT, "size_shared: bad tag for %#x\n", obj);
}
}
@@ -643,7 +643,7 @@ Eterm copy_struct_x(Eterm obj, Uint sz, Eterm** hpp, ErlOffHeap* off_heap, Uint
goto L_copy_list;
case TAG_PRIMARY_BOXED: argp = &res; goto L_copy_boxed;
default:
- erl_exit(ERTS_ABORT_EXIT,
+ erts_exit(ERTS_ABORT_EXIT,
"%s, line %d: Internal error in copy_struct: 0x%08x\n",
__FILE__, __LINE__,obj);
}
@@ -691,7 +691,7 @@ Eterm copy_struct_x(Eterm obj, Uint sz, Eterm** hpp, ErlOffHeap* off_heap, Uint
case TAG_PRIMARY_IMMED1: *tailp = obj; goto L_copy;
case TAG_PRIMARY_BOXED: argp = tailp; goto L_copy_boxed;
default:
- erl_exit(ERTS_ABORT_EXIT,
+ erts_exit(ERTS_ABORT_EXIT,
"%s, line %d: Internal error in copy_struct: 0x%08x\n",
__FILE__, __LINE__,obj);
}
@@ -869,11 +869,11 @@ Eterm copy_struct_x(Eterm obj, Uint sz, Eterm** hpp, ErlOffHeap* off_heap, Uint
*argp = make_hashmap(tp);
break;
default:
- erl_exit(ERTS_ABORT_EXIT, "copy_struct: bad hashmap type %d\n", MAP_HEADER_TYPE(hdr));
+ erts_exit(ERTS_ABORT_EXIT, "copy_struct: bad hashmap type %d\n", MAP_HEADER_TYPE(hdr));
}
break;
case BIN_MATCHSTATE_SUBTAG:
- erl_exit(ERTS_ABORT_EXIT,
+ erts_exit(ERTS_ABORT_EXIT,
"copy_struct: matchstate term not allowed");
default:
i = thing_arityval(hdr)+1;
@@ -901,13 +901,13 @@ Eterm copy_struct_x(Eterm obj, Uint sz, Eterm** hpp, ErlOffHeap* off_heap, Uint
} else {
#ifdef DEBUG
if (htop != hbot)
- erl_exit(ERTS_ABORT_EXIT,
+ erts_exit(ERTS_ABORT_EXIT,
"Internal error in copy_struct() when copying %T:"
" htop=%p != hbot=%p (sz=%beu)\n",
org_obj, htop, hbot, org_sz);
#else
if (htop > hbot) {
- erl_exit(ERTS_ABORT_EXIT,
+ erts_exit(ERTS_ABORT_EXIT,
"Internal error in copy_struct(): htop, hbot overrun\n");
}
#endif
@@ -1246,10 +1246,10 @@ Uint copy_shared_calculate(Eterm obj, erts_shcopy_t *info)
goto pop_next;
}
default:
- erl_exit(ERTS_ABORT_EXIT, "copy_shared_calculate: bad hashmap type %d\n", MAP_HEADER_TYPE(hdr));
+ erts_exit(ERTS_ABORT_EXIT, "copy_shared_calculate: bad hashmap type %d\n", MAP_HEADER_TYPE(hdr));
}
case BIN_MATCHSTATE_SUBTAG:
- erl_exit(ERTS_ABORT_EXIT,
+ erts_exit(ERTS_ABORT_EXIT,
"size_shared: matchstate term not allowed");
default:
sum += thing_arityval(hdr) + 1;
@@ -1278,7 +1278,7 @@ Uint copy_shared_calculate(Eterm obj, erts_shcopy_t *info)
obj = EQUEUE_GET(s);
break;
default:
- erl_exit(ERTS_ABORT_EXIT, "[pid=%T] size_shared: bad tag for %#x\n", obj);
+ erts_exit(ERTS_ABORT_EXIT, "[pid=%T] size_shared: bad tag for %#x\n", obj);
}
}
}
@@ -1530,7 +1530,7 @@ Uint copy_shared_perform(Eterm obj, Uint size, erts_shcopy_t *info,
goto cleanup_next;
}
default:
- erl_exit(ERTS_ABORT_EXIT, "copy_shared_perform: bad hashmap type %d\n", MAP_HEADER_TYPE(hdr));
+ erts_exit(ERTS_ABORT_EXIT, "copy_shared_perform: bad hashmap type %d\n", MAP_HEADER_TYPE(hdr));
}
case REFC_BINARY_SUBTAG: {
ProcBin* pb = (ProcBin *) ptr;
@@ -1682,7 +1682,7 @@ Uint copy_shared_perform(Eterm obj, Uint size, erts_shcopy_t *info,
hscan += MAP_HEADER_ARITY(*hscan) + 1;
break;
default:
- erl_exit(ERTS_ABORT_EXIT,
+ erts_exit(ERTS_ABORT_EXIT,
"copy_shared_perform: bad hashmap type %d\n",
MAP_HEADER_TYPE(*hscan));
}
@@ -1711,7 +1711,7 @@ Uint copy_shared_perform(Eterm obj, Uint size, erts_shcopy_t *info,
ASSERT(resp < hp);
break;
default:
- erl_exit(ERTS_ABORT_EXIT, "size_shared: bad tag for %#x\n", obj);
+ erts_exit(ERTS_ABORT_EXIT, "size_shared: bad tag for %#x\n", obj);
}
}
@@ -1744,7 +1744,7 @@ all_clean:
if (eq(saved_obj, result) == 0) {
erts_fprintf(stderr, "original = %T\n", saved_obj);
erts_fprintf(stderr, "copy = %T\n", result);
- erl_exit(ERTS_ABORT_EXIT, "copy (shared) not equal to source\n");
+ erts_exit(ERTS_ABORT_EXIT, "copy (shared) not equal to source\n");
}
#endif
diff --git a/erts/emulator/beam/dist.c b/erts/emulator/beam/dist.c
index e31ef29562..09c83f1117 100644
--- a/erts/emulator/beam/dist.c
+++ b/erts/emulator/beam/dist.c
@@ -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.
@@ -337,7 +337,7 @@ static void doit_link_net_exits_sub(ErtsLink *sublnk, void *vlnecp)
erts_destroy_link(rlnk);
if (xres >= 0 && IS_TRACED_FL(rp, F_TRACE_PROCS)) {
/* We didn't exit the process and it is traced */
- trace_proc(NULL, rp, am_getting_unlinked, sublnk->pid);
+ trace_proc(NULL, 0, rp, am_getting_unlinked, sublnk->pid);
}
}
erts_smp_proc_unlock(rp, rp_locks);
@@ -397,7 +397,7 @@ static void doit_node_link_net_exits(ErtsLink *lnk, void *vnecp)
msgp = erts_alloc_message_heap(rp, &rp_locks,
3, &hp, &ohp);
tup = TUPLE2(hp, am_nodedown, name);
- erts_queue_message(rp, &rp_locks, msgp, tup, NIL);
+ erts_queue_message(rp, rp_locks, msgp, tup, am_system);
}
erts_smp_proc_unlock(rp, rp_locks);
}
@@ -906,9 +906,9 @@ erts_dsig_send_msg(Eterm remote, Eterm message, ErtsSendContext* ctx)
if (token != NIL)
ctl = TUPLE4(&ctx->ctl_heap[0],
- make_small(DOP_SEND_TT), am_Cookie, remote, token);
+ make_small(DOP_SEND_TT), am_Empty, remote, token);
else
- ctl = TUPLE3(&ctx->ctl_heap[0], make_small(DOP_SEND), am_Cookie, remote);
+ ctl = TUPLE3(&ctx->ctl_heap[0], make_small(DOP_SEND), am_Empty, remote);
DTRACE6(message_send, sender_name, receiver_name,
msize, tok_label, tok_lastcnt, tok_serial);
DTRACE7(message_send_remote, sender_name, node_name, receiver_name,
@@ -963,10 +963,10 @@ erts_dsig_send_reg_msg(Eterm remote_name, Eterm message,
if (token != NIL)
ctl = TUPLE5(&ctx->ctl_heap[0], make_small(DOP_REG_SEND_TT),
- sender->common.id, am_Cookie, remote_name, token);
+ sender->common.id, am_Empty, remote_name, token);
else
ctl = TUPLE4(&ctx->ctl_heap[0], make_small(DOP_REG_SEND),
- sender->common.id, am_Cookie, remote_name);
+ sender->common.id, am_Empty, remote_name);
DTRACE6(message_send, sender_name, receiver_name,
msize, tok_label, tok_lastcnt, tok_serial);
DTRACE7(message_send_remote, sender_name, node_name, receiver_name,
@@ -1275,7 +1275,7 @@ int erts_net_message(Port *prt,
erts_smp_de_links_unlock(dep);
if (IS_TRACED_FL(rp, F_TRACE_PROCS))
- trace_proc(NULL, rp, am_getting_linked, from);
+ trace_proc(NULL, 0, rp, am_getting_linked, from);
erts_smp_proc_unlock(rp, ERTS_PROC_LOCK_LINK);
break;
@@ -1300,7 +1300,7 @@ int erts_net_message(Port *prt,
lnk = erts_remove_link(&ERTS_P_LINKS(rp), from);
if (IS_TRACED_FL(rp, F_TRACE_PROCS) && lnk != NULL) {
- trace_proc(NULL, rp, am_getting_unlinked, from);
+ trace_proc(NULL, 0, rp, am_getting_unlinked, from);
}
erts_smp_proc_unlock(rp, ERTS_PROC_LOCK_LINK);
@@ -1456,7 +1456,7 @@ int erts_net_message(Port *prt,
token = copy_struct(token, token_size, &hp, ohp);
}
- erts_queue_dist_message(rp, &locks, ede_copy, token);
+ erts_queue_dist_message(rp, locks, ede_copy, token, from);
if (locks)
erts_smp_proc_unlock(rp, locks);
}
@@ -1505,7 +1505,7 @@ int erts_net_message(Port *prt,
token = copy_struct(token, token_size, &hp, ohp);
}
- erts_queue_dist_message(rp, &locks, ede_copy, token);
+ erts_queue_dist_message(rp, locks, ede_copy, token, tuple[2]);
if (locks)
erts_smp_proc_unlock(rp, locks);
}
@@ -1628,7 +1628,11 @@ int erts_net_message(Port *prt,
ERTS_XSIG_FLG_IGN_KILL);
if (xres >= 0 && IS_TRACED_FL(rp, F_TRACE_PROCS)) {
/* We didn't exit the process and it is traced */
- trace_proc(NULL, rp, am_getting_unlinked, from);
+ if (rp_locks & ERTS_PROC_LOCKS_XSIG_SEND) {
+ erts_smp_proc_unlock(rp, ERTS_PROC_LOCKS_XSIG_SEND);
+ rp_locks &= ~ERTS_PROC_LOCKS_XSIG_SEND;
+ }
+ trace_proc(NULL, 0, rp, am_getting_unlinked, from);
}
}
erts_smp_proc_unlock(rp, rp_locks);
@@ -1719,7 +1723,7 @@ decode_error:
}
data_error:
UnUseTmpHeapNoproc(DIST_CTL_DEFAULT_SIZE);
- erts_deliver_port_exit(prt, dep->cid, am_killed, 0);
+ erts_deliver_port_exit(prt, dep->cid, am_killed, 0, 1);
ERTS_SMP_CHK_NO_PROC_LOCKS;
return -1;
}
@@ -1942,7 +1946,7 @@ erts_dsig_send(ErtsDSigData *dsdp, struct erts_dsig_send_context* ctx)
goto done;
}
default:
- erl_exit(ERTS_ABORT_EXIT, "dsig_send invalid phase (%d)\n", (int)ctx->phase);
+ erts_exit(ERTS_ABORT_EXIT, "dsig_send invalid phase (%d)\n", (int)ctx->phase);
}
}
@@ -1963,7 +1967,7 @@ dist_port_command(Port *prt, ErtsDistOutputBuf *obuf)
ERTS_SMP_LC_ASSERT(erts_lc_is_port_locked(prt));
if (size > (Uint) INT_MAX)
- erl_exit(ERTS_ABORT_EXIT,
+ erts_exit(ERTS_DUMP_EXIT,
"Absurdly large distribution output data buffer "
"(%beu bytes) passed.\n",
size);
@@ -2003,7 +2007,7 @@ dist_port_commandv(Port *prt, ErtsDistOutputBuf *obuf)
ERTS_SMP_LC_ASSERT(erts_lc_is_port_locked(prt));
if (size > (Uint) INT_MAX)
- erl_exit(ERTS_ABORT_EXIT,
+ erts_exit(ERTS_DUMP_EXIT,
"Absurdly large distribution output data buffer "
"(%beu bytes) passed.\n",
size);
@@ -2089,7 +2093,7 @@ erts_dist_command(Port *prt, int reds_limit)
erts_smp_de_runlock(dep);
if (status & ERTS_DE_SFLG_EXITING) {
- erts_deliver_port_exit(prt, prt->common.id, am_killed, 0);
+ erts_deliver_port_exit(prt, prt->common.id, am_killed, 0, 1);
erts_deref_dist_entry(dep);
return reds + ERTS_PORT_REDS_DIST_CMD_EXIT;
}
@@ -3313,7 +3317,7 @@ send_nodes_mon_msg(Process *rp,
}
ASSERT(hend == hp);
- erts_queue_message(rp, rp_locksp, mp, msg, NIL);
+ erts_queue_message(rp, *rp_locksp, mp, msg, am_system);
}
static void
@@ -3370,7 +3374,7 @@ send_nodes_mon_msgs(Process *c_p, Eterm what, Eterm node, Eterm type, Eterm reas
continue;
break;
default:
- erl_exit(ERTS_ABORT_EXIT, "Bad node type found\n");
+ erts_exit(ERTS_ABORT_EXIT, "Bad node type found\n");
}
}
@@ -3679,7 +3683,7 @@ erts_processes_monitoring_nodes(Process *c_p)
case ERTS_NODES_MON_OPT_TYPES: type = am_all; break;
case ERTS_NODES_MON_OPT_TYPE_VISIBLE: type = am_visible; break;
case ERTS_NODES_MON_OPT_TYPE_HIDDEN: type = am_hidden; break;
- default: erl_exit(ERTS_ABORT_EXIT, "Bad node type found\n");
+ default: erts_exit(ERTS_ABORT_EXIT, "Bad node type found\n");
}
olist = erts_bld_cons(hpp, szp,
erts_bld_tuple(hpp, szp, 2,
diff --git a/erts/emulator/beam/dist.h b/erts/emulator/beam/dist.h
index fb777d9ac1..e82b416286 100644
--- a/erts/emulator/beam/dist.h
+++ b/erts/emulator/beam/dist.h
@@ -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,6 +43,7 @@
#define DFLAG_INTERNAL_TAGS 0x8000
#define DFLAG_UTF8_ATOMS 0x10000
#define DFLAG_MAP_TAG 0x20000
+#define DFLAG_BIG_CREATION 0x40000
/* All flags that should be enabled when term_to_binary/1 is used. */
#define TERM_TO_BINARY_DFLAGS (DFLAG_EXTENDED_REFERENCES \
@@ -51,7 +52,8 @@
| DFLAG_EXTENDED_PIDS_PORTS \
| DFLAG_EXPORT_PTR_TAG \
| DFLAG_BIT_BINARIES \
- | DFLAG_MAP_TAG)
+ | DFLAG_MAP_TAG \
+ | DFLAG_BIG_CREATION)
/* opcodes used in distribution messages */
#define DOP_LINK 1
diff --git a/erts/emulator/beam/dtrace-wrapper.h b/erts/emulator/beam/dtrace-wrapper.h
index d343dc5ab0..6f70d5961e 100644
--- a/erts/emulator/beam/dtrace-wrapper.h
+++ b/erts/emulator/beam/dtrace-wrapper.h
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Dustin Sallings, Michal Ptaszek, Scott Lystig Fritchie 2011-2012.
+ * Copyright Dustin Sallings, Michal Ptaszek, Scott Lystig Fritchie 2011-2016.
* All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
diff --git a/erts/emulator/beam/elib_memmove.c b/erts/emulator/beam/elib_memmove.c
index d4ca30158e..2f45f69026 100644
--- a/erts/emulator/beam/elib_memmove.c
+++ b/erts/emulator/beam/elib_memmove.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/erts/emulator/beam/erl_afit_alloc.c b/erts/emulator/beam/erl_afit_alloc.c
index 47dafa53c0..eda3ad870a 100644
--- a/erts/emulator/beam/erl_afit_alloc.c
+++ b/erts/emulator/beam/erl_afit_alloc.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.
@@ -241,7 +241,7 @@ info_options(Allctr_t *allctr,
if (hpp || szp) {
if (!atoms_initialized)
- erl_exit(1, "%s:%d: Internal error: Atoms not initialized",
+ erts_exit(ERTS_ERROR_EXIT, "%s:%d: Internal error: Atoms not initialized",
__FILE__, __LINE__);;
res = NIL;
diff --git a/erts/emulator/beam/erl_afit_alloc.h b/erts/emulator/beam/erl_afit_alloc.h
index ef050ff50e..74258e284a 100644
--- a/erts/emulator/beam/erl_afit_alloc.h
+++ b/erts/emulator/beam/erl_afit_alloc.h
@@ -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/erts/emulator/beam/erl_alloc.c b/erts/emulator/beam/erl_alloc.c
index 806f569c38..3c2c9def3b 100644
--- a/erts/emulator/beam/erl_alloc.c
+++ b/erts/emulator/beam/erl_alloc.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.
@@ -30,6 +30,7 @@
#endif
#define ERTS_ALLOC_C__
#define ERTS_ALC_INTERNAL__
+#define ERTS_WANT_MEM_MAPPERS
#include "sys.h"
#define ERL_THREADS_EMU_INTERNAL__
#include "erl_threads.h"
@@ -131,8 +132,19 @@ static ErtsAllocatorState_t ets_alloc_state;
static ErtsAllocatorState_t driver_alloc_state;
static ErtsAllocatorState_t fix_alloc_state;
static ErtsAllocatorState_t literal_alloc_state;
+#ifdef ERTS_ALC_A_EXEC
+static ErtsAllocatorState_t exec_alloc_state;
+#endif
static ErtsAllocatorState_t test_alloc_state;
+enum {
+ ERTS_ALC_INFO_A_ALLOC_UTIL = ERTS_ALC_A_MAX + 1,
+ ERTS_ALC_INFO_A_MSEG_ALLOC,
+ ERTS_ALC_INFO_A_ERTS_MMAP,
+ ERTS_ALC_INFO_A_DISABLED_EXEC, /* fake a disabled "exec_alloc" */
+ ERTS_ALC_INFO_A_END
+};
+
typedef struct {
erts_smp_atomic32_t refc;
int only_sz;
@@ -141,13 +153,9 @@ typedef struct {
Process *proc;
Eterm ref;
Eterm ref_heap[REF_THING_SIZE];
- int allocs[ERTS_ALC_A_MAX-ERTS_ALC_A_MIN+1+2];
+ int allocs[ERTS_ALC_INFO_A_END - ERTS_ALC_A_MIN + 1];
} ErtsAllocInfoReq;
-#define ERTS_ALC_INFO_A_ALLOC_UTIL (ERTS_ALC_A_MAX + 1)
-#define ERTS_ALC_INFO_A_MSEG_ALLOC (ERTS_ALC_A_MAX + 2)
-#define ERTS_ALC_INFO_A_MAX ERTS_ALC_INFO_A_MSEG_ALLOC
-
ERTS_SCHED_PREF_QUICK_ALLOC_IMPL(aireq,
ErtsAllocInfoReq,
5,
@@ -165,6 +173,8 @@ enum allctr_type {
struct au_init {
int enable;
int thr_spec;
+ int disable_allowed;
+ int thr_spec_allowed;
int carrier_migration_allowed;
enum allctr_type atype;
struct {
@@ -214,10 +224,11 @@ typedef struct {
struct au_init driver_alloc;
struct au_init fix_alloc;
struct au_init literal_alloc;
+ struct au_init exec_alloc;
struct au_init test_alloc;
} erts_alc_hndl_args_init_t;
-#define ERTS_AU_INIT__ {0, 0, 1, GOODFIT, DEFAULT_ALLCTR_INIT, {1,1,1,1}}
+#define ERTS_AU_INIT__ {0, 0, 1, 1, 1, GOODFIT, DEFAULT_ALLCTR_INIT, {1,1,1,1}}
#define SET_DEFAULT_ALLOC_OPTS(IP) \
do { \
@@ -294,6 +305,9 @@ set_default_literal_alloc_opts(struct au_init *ip)
SET_DEFAULT_ALLOC_OPTS(ip);
ip->enable = 1;
ip->thr_spec = 0;
+ ip->disable_allowed = 0;
+ ip->thr_spec_allowed = 0;
+ ip->carrier_migration_allowed = 0;
ip->atype = BESTFIT;
ip->init.bf.ao = 1;
ip->init.util.ramv = 0;
@@ -302,9 +316,9 @@ set_default_literal_alloc_opts(struct au_init *ip)
ip->init.util.name_prefix = "literal_";
ip->init.util.alloc_no = ERTS_ALC_A_LITERAL;
#ifndef SMALL_MEMORY
- ip->init.util.mmbcs = 2*1024*1024; /* Main carrier size */
+ ip->init.util.mmbcs = 1024*1024; /* Main carrier size */
#else
- ip->init.util.mmbcs = 1*1024*1024; /* Main carrier size */
+ ip->init.util.mmbcs = 256*1024; /* Main carrier size */
#endif
ip->init.util.ts = ERTS_ALC_MTA_LITERAL;
ip->init.util.asbcst = 0;
@@ -324,15 +338,48 @@ set_default_literal_alloc_opts(struct au_init *ip)
ip->init.util.sys_dealloc = &erts_alcu_literal_32_sys_dealloc;
#elif defined(ARCH_64)
# ifdef ERTS_HAVE_OS_PHYSICAL_MEMORY_RESERVATION
- ip->init.util.mseg_alloc = &erts_alcu_literal_64_mseg_alloc;
- ip->init.util.mseg_realloc = &erts_alcu_literal_64_mseg_realloc;
- ip->init.util.mseg_dealloc = &erts_alcu_literal_64_mseg_dealloc;
+ ip->init.util.mseg_alloc = &erts_alcu_mmapper_mseg_alloc;
+ ip->init.util.mseg_realloc = &erts_alcu_mmapper_mseg_realloc;
+ ip->init.util.mseg_dealloc = &erts_alcu_mmapper_mseg_dealloc;
+ ip->init.util.mseg_mmapper = &erts_literal_mmapper;
# endif
#else
# error Unknown architecture
#endif
}
+#ifdef ERTS_ALC_A_EXEC
+static void
+set_default_exec_alloc_opts(struct au_init *ip)
+{
+ SET_DEFAULT_ALLOC_OPTS(ip);
+ ip->enable = 1;
+ ip->thr_spec = 0;
+ ip->disable_allowed = 0;
+ ip->thr_spec_allowed = 0;
+ ip->carrier_migration_allowed = 0;
+ ip->atype = BESTFIT;
+ ip->init.bf.ao = 1;
+ ip->init.util.ramv = 0;
+ ip->init.util.mmsbc = 0;
+ ip->init.util.sbct = ~((UWord) 0);
+ ip->init.util.name_prefix = "exec_";
+ ip->init.util.alloc_no = ERTS_ALC_A_EXEC;
+ ip->init.util.mmbcs = 0; /* No main carrier */
+ ip->init.util.ts = ERTS_ALC_MTA_EXEC;
+ ip->init.util.asbcst = 0;
+ ip->init.util.rsbcst = 0;
+ ip->init.util.rsbcmt = 0;
+ ip->init.util.rmbcmt = 0;
+ ip->init.util.acul = 0;
+
+ ip->init.util.mseg_alloc = &erts_alcu_mmapper_mseg_alloc;
+ ip->init.util.mseg_realloc = &erts_alcu_mmapper_mseg_realloc;
+ ip->init.util.mseg_dealloc = &erts_alcu_mmapper_mseg_dealloc;
+ ip->init.util.mseg_mmapper = &erts_exec_mmapper;
+}
+#endif /* ERTS_ALC_A_EXEC */
+
static void
set_default_temp_alloc_opts(struct au_init *ip)
{
@@ -654,6 +701,9 @@ erts_alloc_init(int *argc, char **argv, ErtsAllocInitOpts *eaiop)
set_default_fix_alloc_opts(&init.fix_alloc,
fix_type_sizes);
set_default_literal_alloc_opts(&init.literal_alloc);
+#ifdef ERTS_ALC_A_EXEC
+ set_default_exec_alloc_opts(&init.exec_alloc);
+#endif
set_default_test_alloc_opts(&init.test_alloc);
if (argc && argv)
@@ -665,11 +715,11 @@ erts_alloc_init(int *argc, char **argv, ErtsAllocInitOpts *eaiop)
if (mlockall(MCL_CURRENT|MCL_FUTURE) != 0) {
int err = errno;
char *errstr = err ? strerror(err) : "unknown";
- erl_exit(-1, "Failed to lock physical memory: %s (%d)\n",
+ erts_exit(1, "Failed to lock physical memory: %s (%d)\n",
errstr, err);
}
#else
- erl_exit(-1, "Failed to lock physical memory: Not supported\n");
+ erts_exit(1, "Failed to lock physical memory: Not supported\n");
#endif
}
@@ -683,6 +733,9 @@ erts_alloc_init(int *argc, char **argv, ErtsAllocInitOpts *eaiop)
init.driver_alloc.thr_spec = 0;
init.fix_alloc.thr_spec = 0;
init.literal_alloc.thr_spec = 0;
+#ifdef ERTS_ALC_A_EXEC
+ init.exec_alloc.thr_spec = 0;
+#endif
#endif
/* Make adjustments for carrier migration support */
@@ -696,6 +749,9 @@ erts_alloc_init(int *argc, char **argv, ErtsAllocInitOpts *eaiop)
adjust_carrier_migration_support(&init.driver_alloc);
adjust_carrier_migration_support(&init.fix_alloc);
adjust_carrier_migration_support(&init.literal_alloc);
+#ifdef ERTS_ALC_A_EXEC
+ adjust_carrier_migration_support(&init.exec_alloc);
+#endif
if (init.erts_alloc_config) {
/* Adjust flags that erts_alloc_config won't like */
@@ -711,6 +767,9 @@ erts_alloc_init(int *argc, char **argv, ErtsAllocInitOpts *eaiop)
init.driver_alloc.thr_spec = 0;
init.fix_alloc.thr_spec = 0;
init.literal_alloc.thr_spec = 0;
+#ifdef ERTS_ALC_A_EXEC
+ init.exec_alloc.thr_spec = 0;
+#endif
/* No carrier migration */
init.temp_alloc.init.util.acul = 0;
@@ -723,6 +782,9 @@ erts_alloc_init(int *argc, char **argv, ErtsAllocInitOpts *eaiop)
init.driver_alloc.init.util.acul = 0;
init.fix_alloc.init.util.acul = 0;
init.literal_alloc.init.util.acul = 0;
+#ifdef ERTS_ALC_A_EXEC
+ init.exec_alloc.init.util.acul = 0;
+#endif
}
#ifdef ERTS_SMP
@@ -740,6 +802,9 @@ erts_alloc_init(int *argc, char **argv, ErtsAllocInitOpts *eaiop)
adjust_tpref(&init.driver_alloc, erts_no_schedulers);
adjust_tpref(&init.fix_alloc, erts_no_schedulers);
adjust_tpref(&init.literal_alloc, erts_no_schedulers);
+#ifdef ERTS_ALC_A_EXEC
+ adjust_tpref(&init.exec_alloc, erts_no_schedulers);
+#endif
#else
/* No thread specific if not smp */
@@ -759,6 +824,9 @@ erts_alloc_init(int *argc, char **argv, ErtsAllocInitOpts *eaiop)
refuse_af_strategy(&init.driver_alloc);
refuse_af_strategy(&init.fix_alloc);
refuse_af_strategy(&init.literal_alloc);
+#ifdef ERTS_ALC_A_EXEC
+ refuse_af_strategy(&init.exec_alloc);
+#endif
#ifdef ERTS_SMP
if (!init.temp_alloc.thr_spec)
@@ -769,9 +837,6 @@ erts_alloc_init(int *argc, char **argv, ErtsAllocInitOpts *eaiop)
#if HAVE_ERTS_MSEG
init.mseg.nos = erts_no_schedulers;
erts_mseg_init(&init.mseg);
-# if defined(ARCH_64) && defined(ERTS_HAVE_OS_PHYSICAL_MEMORY_RESERVATION)
- erts_mmap_init(&erts_literal_mmapper, &init.mseg.literal_mmap);
-# endif
#endif
erts_alcu_init(&init.alloc_util);
@@ -806,17 +871,20 @@ erts_alloc_init(int *argc, char **argv, ErtsAllocInitOpts *eaiop)
set_au_allocator(ERTS_ALC_A_DRIVER, &init.driver_alloc, ncpu);
set_au_allocator(ERTS_ALC_A_FIXED_SIZE, &init.fix_alloc, ncpu);
set_au_allocator(ERTS_ALC_A_LITERAL, &init.literal_alloc, ncpu);
+#ifdef ERTS_ALC_A_EXEC
+ set_au_allocator(ERTS_ALC_A_EXEC, &init.exec_alloc, ncpu);
+#endif
set_au_allocator(ERTS_ALC_A_TEST, &init.test_alloc, ncpu);
for (i = ERTS_ALC_A_MIN; i <= ERTS_ALC_A_MAX; i++) {
if (!erts_allctrs[i].alloc)
- erl_exit(ERTS_ABORT_EXIT,
+ erts_exit(ERTS_ABORT_EXIT,
"Missing alloc function for %s\n", ERTS_ALC_A2AD(i));
if (!erts_allctrs[i].realloc)
- erl_exit(ERTS_ABORT_EXIT,
+ erts_exit(ERTS_ABORT_EXIT,
"Missing realloc function for %s\n", ERTS_ALC_A2AD(i));
if (!erts_allctrs[i].free)
- erl_exit(ERTS_ABORT_EXIT,
+ erts_exit(ERTS_ABORT_EXIT,
"Missing free function for %s\n", ERTS_ALC_A2AD(i));
}
@@ -862,7 +930,11 @@ erts_alloc_init(int *argc, char **argv, ErtsAllocInitOpts *eaiop)
start_au_allocator(ERTS_ALC_A_LITERAL,
&init.literal_alloc,
&literal_alloc_state);
-
+#ifdef ERTS_ALC_A_EXEC
+ start_au_allocator(ERTS_ALC_A_EXEC,
+ &init.exec_alloc,
+ &exec_alloc_state);
+#endif
start_au_allocator(ERTS_ALC_A_TEST,
&init.test_alloc,
&test_alloc_state);
@@ -887,7 +959,7 @@ erts_alloc_late_init(void)
static void *
erts_realloc_fixed_size(ErtsAlcType_t type, void *extra, void *p, Uint size)
{
- erl_exit(ERTS_ABORT_EXIT,
+ erts_exit(ERTS_ABORT_EXIT,
"Attempt to reallocate a block of the fixed size type %s\n",
ERTS_ALC_T2TD(type));
}
@@ -969,7 +1041,7 @@ set_au_allocator(ErtsAlcType_t alctr_n, struct au_init *init, int ncpu)
#endif
{
#ifdef ERTS_SMP
- erl_exit(ERTS_ABORT_EXIT, "%salloc is not thread safe\n",
+ erts_exit(ERTS_ABORT_EXIT, "%salloc is not thread safe\n",
init->init.util.name_prefix);
#else
af->alloc = erts_alcu_alloc;
@@ -1014,7 +1086,7 @@ start_au_allocator(ErtsAlcType_t alctr_n,
* tspec->size)
+ ERTS_CACHE_LINE_SIZE - 1));
if (!states)
- erl_exit(ERTS_ABORT_EXIT,
+ erts_exit(ERTS_ABORT_EXIT,
"Failed to allocate allocator states for %salloc\n",
init->init.util.name_prefix);
tspec->allctr = (Allctr_t **) states;
@@ -1042,7 +1114,7 @@ start_au_allocator(ErtsAlcType_t alctr_n,
(tot_fix_list_size
+ ERTS_CACHE_LINE_SIZE - 1));
if (!fix_lists)
- erl_exit(ERTS_ABORT_EXIT,
+ erts_exit(ERTS_ABORT_EXIT,
"Failed to allocate fix lists for %salloc\n",
init->init.util.name_prefix);
@@ -1116,7 +1188,7 @@ start_au_allocator(ErtsAlcType_t alctr_n,
}
if (!as)
- erl_exit(ERTS_ABORT_EXIT,
+ erts_exit(ERTS_ABORT_EXIT,
"Failed to start %salloc\n", init->init.util.name_prefix);
ASSERT(as == (void *) as0);
@@ -1352,9 +1424,17 @@ handle_au_arg(struct au_init *auip,
else
goto bad_switch;
break;
- case 'e':
- auip->enable = get_bool_value(sub_param+1, argv, ip);
+ case 'e': {
+ int e = get_bool_value(sub_param + 1, argv, ip);
+ if (!auip->disable_allowed && !e) {
+ if (!u_switch)
+ bad_value(param, sub_param + 1, "false");
+ else
+ ASSERT(auip->enable); /* ignore */
+ }
+ else auip->enable = e;
break;
+ }
case 'l':
if (has_prefix("lmbcs", sub_param)) {
auip->default_.lmbcs = 0;
@@ -1423,7 +1503,14 @@ handle_au_arg(struct au_init *auip,
case 't': {
int res = get_bool_value(sub_param+1, argv, ip);
if (res > 0) {
- auip->thr_spec = 1;
+ if (!auip->thr_spec_allowed) {
+ if (!u_switch)
+ bad_value(param, sub_param + 1, "true");
+ else
+ ASSERT(!auip->thr_spec); /* ignore */
+ }
+ else
+ auip->thr_spec = 1;
break;
}
else if (res == 0) {
@@ -1472,6 +1559,26 @@ handle_args(int *argc, char **argv, erts_alc_hndl_args_init_t *init)
case 'B':
handle_au_arg(&init->binary_alloc, &argv[i][3], argv, &i, 0);
break;
+ case 'I':
+ if (has_prefix("scs", argv[i]+3)) {
+#if HAVE_ERTS_MSEG
+ init->mseg.literal_mmap.scs =
+#endif
+ get_mb_value(argv[i]+6, argv, &i);
+ }
+ else
+ handle_au_arg(&init->literal_alloc, &argv[i][3], argv, &i, 0);
+ break;
+ case 'X':
+ if (has_prefix("scs", argv[i]+3)) {
+#ifdef ERTS_ALC_A_EXEC
+ init->mseg.exec_mmap.scs =
+#endif
+ get_mb_value(argv[i]+6, argv, &i);
+ }
+ else
+ handle_au_arg(&init->exec_alloc, &argv[i][3], argv, &i, 0);
+ break;
case 'D':
handle_au_arg(&init->std_alloc, &argv[i][3], argv, &i, 0);
break;
@@ -1908,7 +2015,7 @@ erts_alc_fatal_error(int error, int func, ErtsAlcType_t n, ...)
case ERTS_ALC_O_FREE: op_str = "free"; break;
default: op_str = "UNKNOWN"; break;
}
- erl_exit(ERTS_ABORT_EXIT,
+ erts_exit(ERTS_ABORT_EXIT,
"%s: %s operation not supported (memory type: \"%s\")\n",
allctr_str, op_str, t_str);
break;
@@ -1922,18 +2029,18 @@ erts_alc_fatal_error(int error, int func, ErtsAlcType_t n, ...)
va_start(argp, n);
size = va_arg(argp, Uint);
va_end(argp);
- erl_exit(-1,
+ erts_exit(ERTS_DUMP_EXIT,
"%s: Cannot %s %lu bytes of memory (of type \"%s\").\n",
allctr_str, op, size, t_str);
break;
}
case ERTS_ALC_E_NOALLCTR:
- erl_exit(ERTS_ABORT_EXIT,
+ erts_exit(ERTS_ABORT_EXIT,
"erts_alloc: Unknown allocator type: %d\n",
ERTS_ALC_T2A(ERTS_ALC_N2T(n)));
break;
default:
- erl_exit(ERTS_ABORT_EXIT, "erts_alloc: Unknown error: %d\n", error);
+ erts_exit(ERTS_ABORT_EXIT, "erts_alloc: Unknown error: %d\n", error);
break;
}
}
@@ -2737,10 +2844,18 @@ erts_allocator_info(int to, void *arg)
int i;
for (i = 0; i <= max; i++) {
erts_print(to, arg, "=allocator:mseg_alloc[%d]\n", i);
- erts_mseg_info(i, &to, arg, 0, NULL, NULL);
+ erts_mseg_info(i, &to, arg, 0, 0, NULL, NULL);
}
- erts_print(to, arg, "=allocator:mseg_alloc.erts_mmap\n");
+ erts_print(to, arg, "=allocator:erts_mmap.default_mmap\n");
erts_mmap_info(&erts_dflt_mmapper, &to, arg, NULL, NULL, &emis);
+#if defined(ARCH_64) && defined(ERTS_HAVE_OS_PHYSICAL_MEMORY_RESERVATION)
+ erts_print(to, arg, "=allocator:erts_mmap.literal_mmap\n");
+ erts_mmap_info(&erts_literal_mmapper, &to, arg, NULL, NULL, &emis);
+#endif
+#ifdef ERTS_ALC_A_EXEC
+ erts_print(to, arg, "=allocator:erts_mmap.exec_mmap\n");
+ erts_mmap_info(&erts_exec_mmapper, &to, arg, NULL, NULL, &emis);
+#endif
}
#endif
@@ -2851,6 +2966,11 @@ erts_allocator_options(void *proc)
atoms[length] = am_atom_put("alloc_util", 10);
terms[length++] = erts_alcu_au_info_options(NULL, NULL, hpp, szp);
+#if HAVE_ERTS_MMAP
+ atoms[length] = ERTS_MAKE_AM("erts_mmap");
+ terms[length++] = erts_mmap_info_options(&erts_dflt_mmapper, NULL, NULL,
+ NULL, hpp, szp);
+#endif
{
Eterm o[3], v[3];
o[0] = am_atom_put("m", 1);
@@ -2887,7 +3007,12 @@ erts_allocator_options(void *proc)
#if ERTS_HAVE_ERTS_SYS_ALIGNED_ALLOC
terms[length++] = am_atom_put("sys_aligned_alloc", 17);
#endif
-
+#if defined(ARCH_64) && defined(ERTS_HAVE_OS_PHYSICAL_MEMORY_RESERVATION)
+ terms[length++] = ERTS_MAKE_AM("literal_mmap");
+#endif
+#ifdef ERTS_ALC_A_EXEC
+ terms[length++] = ERTS_MAKE_AM("exec_mmap");
+#endif
features = length ? erts_bld_list(hpp, szp, length, terms) : NIL;
#if defined(__GLIBC__)
@@ -2972,7 +3097,15 @@ reply_alloc_info(void *vair)
Uint sz, *szp;
ErlOffHeap *ohp = NULL;
ErtsMessage *mp = NULL;
- struct erts_mmap_info_struct emis;
+#if HAVE_ERTS_MMAP
+ struct erts_mmap_info_struct mmap_info_dflt;
+# if defined(ARCH_64) && defined(ERTS_HAVE_OS_PHYSICAL_MEMORY_RESERVATION)
+ struct erts_mmap_info_struct mmap_info_literal;
+# endif
+# ifdef ERTS_ALC_A_EXEC
+ struct erts_mmap_info_struct mmap_info_exec;
+# endif
+#endif
int i;
Eterm (*info_func)(Allctr_t *,
int,
@@ -3078,31 +3211,64 @@ reply_alloc_info(void *vair)
make_small(0),
ainfo);
break;
+ case ERTS_ALC_INFO_A_ERTS_MMAP:
+ alloc_atom = erts_bld_atom(hpp, szp, "erts_mmap");
+#if HAVE_ERTS_MMAP
+ ainfo = (air->only_sz ? NIL :
+ erts_mmap_info(&erts_dflt_mmapper, NULL, NULL,
+ hpp, szp, &mmap_info_dflt));
+ ainfo = erts_bld_tuple3(hpp, szp,
+ alloc_atom,
+ erts_bld_atom(hpp,szp,"default_mmap"),
+ ainfo);
+# if defined(ARCH_64) && defined(ERTS_HAVE_OS_PHYSICAL_MEMORY_RESERVATION)
+ ai_list = erts_bld_cons(hpp, szp,
+ ainfo, ai_list);
+ ainfo = (air->only_sz ? NIL :
+ erts_mmap_info(&erts_literal_mmapper, NULL, NULL,
+ hpp, szp, &mmap_info_literal));
+ ainfo = erts_bld_tuple3(hpp, szp,
+ alloc_atom,
+ erts_bld_atom(hpp,szp,"literal_mmap"),
+ ainfo);
+# endif
+# ifdef ERTS_ALC_A_EXEC
+ ai_list = erts_bld_cons(hpp, szp,
+ ainfo, ai_list);
+ ainfo = (air->only_sz ? NIL :
+ erts_mmap_info(&erts_exec_mmapper, NULL, NULL,
+ hpp, szp, &mmap_info_exec));
+ ainfo = erts_bld_tuple3(hpp, szp,
+ alloc_atom,
+ erts_bld_atom(hpp,szp,"exec_mmap"),
+ ainfo);
+# endif
+#else /* !HAVE_ERTS_MMAP */
+ ainfo = erts_bld_tuple2(hpp, szp, alloc_atom,
+ am_false);
+#endif
+ break;
case ERTS_ALC_INFO_A_MSEG_ALLOC:
alloc_atom = erts_bld_atom(hpp, szp, "mseg_alloc");
#if HAVE_ERTS_MSEG
- ainfo = (air->only_sz
- ? NIL
- : erts_mseg_info(0, NULL, NULL, hpp != NULL,
- hpp, szp));
+ ainfo = erts_mseg_info(0, NULL, NULL, hpp != NULL,
+ air->only_sz, hpp, szp);
ainfo = erts_bld_tuple3(hpp, szp,
alloc_atom,
make_small(0),
ainfo);
- ai_list = erts_bld_cons(hpp, szp,
- ainfo, ai_list);
- ainfo = (air->only_sz ? NIL :
- erts_mmap_info(&erts_dflt_mmapper, NULL, NULL, hpp, szp, &emis));
- ainfo = erts_bld_tuple3(hpp, szp,
- alloc_atom,
- erts_bld_atom(hpp,szp,"erts_mmap"),
- ainfo);
#else
ainfo = erts_bld_tuple2(hpp, szp, alloc_atom,
am_false);
#endif
break;
+#ifndef ERTS_ALC_A_EXEC
+ case ERTS_ALC_INFO_A_DISABLED_EXEC:
+ alloc_atom = erts_bld_atom(hpp, szp, "exec_alloc");
+ ainfo = erts_bld_tuple2(hpp, szp, alloc_atom, am_false);
+ break;
+#endif
default:
alloc_atom = erts_bld_atom(hpp, szp,
(char *) ERTS_ALC_A2AD(ai));
@@ -3120,7 +3286,7 @@ reply_alloc_info(void *vair)
make_small(0), ainfo);
}
else {
- erl_exit(ERTS_ABORT_EXIT, "%s:%d: internal error\n",
+ erts_exit(ERTS_ABORT_EXIT, "%s:%d: internal error\n",
__FILE__, __LINE__);
}
}
@@ -3129,15 +3295,15 @@ reply_alloc_info(void *vair)
}
switch (ai) {
case ERTS_ALC_A_SYSTEM:
- case ERTS_ALC_INFO_A_ALLOC_UTIL:
+ case ERTS_ALC_INFO_A_ALLOC_UTIL:
+ case ERTS_ALC_INFO_A_ERTS_MMAP:
+ case ERTS_ALC_INFO_A_DISABLED_EXEC:
break;
case ERTS_ALC_INFO_A_MSEG_ALLOC:
#if HAVE_ERTS_MSEG && defined(ERTS_SMP)
alloc_atom = erts_bld_atom(hpp, szp, "mseg_alloc");
- ainfo = (air->only_sz
- ? NIL
- : erts_mseg_info(sched_id, NULL, NULL,
- hpp != NULL, hpp, szp));
+ ainfo = erts_mseg_info(sched_id, NULL, NULL,
+ hpp != NULL, air->only_sz, hpp, szp);
ainfo = erts_bld_tuple(hpp, szp, 3,
alloc_atom,
make_small(sched_id),
@@ -3183,7 +3349,7 @@ reply_alloc_info(void *vair)
if (hp != hp_end)
erts_shrink_message_heap(&mp, rp, hp_start, hp, hp_end, &msg, 1);
- erts_queue_message(rp, &rp_locks, mp, msg, NIL);
+ erts_queue_message(rp, rp_locks, mp, msg, am_system);
if (air->req_sched == sched_id)
rp_locks &= ~ERTS_PROC_LOCK_MAIN;
@@ -3203,7 +3369,7 @@ erts_request_alloc_info(struct process *c_p,
int internal)
{
ErtsAllocInfoReq *air = aireq_alloc();
- Eterm req_ai[ERTS_ALC_A_MAX+1+2] = {0};
+ Eterm req_ai[ERTS_ALC_INFO_A_END] = {0};
Eterm alist;
Eterm *hp;
int airix = 0, ai;
@@ -3239,6 +3405,16 @@ erts_request_alloc_info(struct process *c_p,
ai = ERTS_ALC_INFO_A_MSEG_ALLOC;
goto save_alloc;
}
+ if (erts_is_atom_str("erts_mmap", alloc, 0)) {
+ ai = ERTS_ALC_INFO_A_ERTS_MMAP;
+ goto save_alloc;
+ }
+#ifndef ERTS_ALC_A_EXEC
+ if (erts_is_atom_str("exec_alloc", alloc, 0)) {
+ ai = ERTS_ALC_INFO_A_DISABLED_EXEC;
+ goto save_alloc;
+ }
+#endif
if (erts_is_atom_str("alloc_util", alloc, 0)) {
ai = ERTS_ALC_INFO_A_ALLOC_UTIL;
save_alloc:
@@ -3354,7 +3530,7 @@ void *safe_realloc(void *ptr, Uint sz)
* Keep alloc_SUITE_data/allocator_test.h updated if changes are made *
* to erts_alc_test() *
\* */
-#define ERTS_ALC_TEST_ABORT erl_exit(ERTS_ABORT_EXIT, "%s:%d: Internal error\n")
+#define ERTS_ALC_TEST_ABORT erts_exit(ERTS_ABORT_EXIT, "%s:%d: Internal error\n")
UWord erts_alc_test(UWord op, UWord a1, UWord a2, UWord a3)
{
@@ -3819,7 +3995,7 @@ check_memory_fence(void *ptr, Uint *size, ErtsAlcType_t n, int func)
found_type = GET_TYPE_OF_PATTERN(pre_pattern);
if (pre_pattern != MK_PATTERN(n)) {
if ((FIXED_FENCE_PATTERN_MASK & pre_pattern) != FIXED_FENCE_PATTERN)
- erl_exit(ERTS_ABORT_EXIT,
+ erts_exit(ERTS_ABORT_EXIT,
"ERROR: Fence at beginning of memory block (p=0x%u) "
"clobbered.\n",
(UWord) ptr);
@@ -3836,12 +4012,12 @@ check_memory_fence(void *ptr, Uint *size, ErtsAlcType_t n, int func)
char *op_str;
if ((FIXED_FENCE_PATTERN_MASK & post_pattern) != FIXED_FENCE_PATTERN)
- erl_exit(ERTS_ABORT_EXIT,
+ erts_exit(ERTS_ABORT_EXIT,
"ERROR: Fence at end of memory block (p=0x%u, sz=%u) "
"clobbered.\n",
(UWord) ptr, (UWord) sz);
if (found_type != GET_TYPE_OF_PATTERN(post_pattern))
- erl_exit(ERTS_ABORT_EXIT,
+ erts_exit(ERTS_ABORT_EXIT,
"ERROR: Fence around memory block (p=0x%u, sz=%u) "
"clobbered.\n",
(UWord) ptr, (UWord) sz);
@@ -3864,7 +4040,7 @@ check_memory_fence(void *ptr, Uint *size, ErtsAlcType_t n, int func)
default: op_str = "???"; break;
}
- erl_exit(ERTS_ABORT_EXIT,
+ erts_exit(ERTS_ABORT_EXIT,
"ERROR: Memory block (p=0x%u, sz=%u) allocated as type \"%s\","
" but %s as type \"%s\".\n",
(UWord) ptr, (UWord) sz, ftype, op_str, otype);
diff --git a/erts/emulator/beam/erl_alloc.h b/erts/emulator/beam/erl_alloc.h
index 71e4713624..925a081a02 100644
--- a/erts/emulator/beam/erl_alloc.h
+++ b/erts/emulator/beam/erl_alloc.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.
@@ -235,9 +235,9 @@ void *erts_alloc(ErtsAlcType_t type, Uint size)
void *res;
ERTS_MSACC_PUSH_AND_SET_STATE_X(ERTS_MSACC_STATE_ALLOC);
res = (*erts_allctrs[ERTS_ALC_T2A(type)].alloc)(
- ERTS_ALC_T2N(type),
- erts_allctrs[ERTS_ALC_T2A(type)].extra,
- size);
+ ERTS_ALC_T2N(type),
+ erts_allctrs[ERTS_ALC_T2A(type)].extra,
+ size);
if (!res)
erts_alloc_n_enomem(ERTS_ALC_T2N(type), size);
ERTS_MSACC_POP_STATE_X();
@@ -564,5 +564,3 @@ NAME##_free(TYPE *p) \
#undef ERTS_ALC_ATTRIBUTES
#endif /* #ifndef ERL_ALLOC_H__ */
-
-
diff --git a/erts/emulator/beam/erl_alloc.types b/erts/emulator/beam/erl_alloc.types
index 2932adca84..227fedfb69 100644
--- a/erts/emulator/beam/erl_alloc.types
+++ b/erts/emulator/beam/erl_alloc.types
@@ -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.
@@ -87,6 +87,9 @@ allocator EHEAP true eheap_alloc
allocator ETS true ets_alloc
allocator FIXED_SIZE true fix_alloc
allocator LITERAL true literal_alloc
++if exec_alloc
+allocator EXEC true exec_alloc
++endif
+else # Non smp build
@@ -98,6 +101,9 @@ allocator EHEAP false eheap_alloc
allocator ETS false ets_alloc
allocator FIXED_SIZE false fix_alloc
allocator LITERAL false literal_alloc
++if exec_alloc
+allocator EXEC false exec_alloc
++endif
+endif
@@ -258,7 +264,6 @@ type PRTSD STANDARD SYSTEM port_specific_data
type CPUDATA LONG_LIVED SYSTEM cpu_data
type TMP_CPU_IDS SHORT_LIVED SYSTEM tmp_cpu_ids
type EXT_TERM_DATA SHORT_LIVED PROCESSES external_term_data
-type ZLIB STANDARD SYSTEM zlib
type CPU_GRPS_MAP LONG_LIVED SYSTEM cpu_groups_map
type AUX_WORK_TMO LONG_LIVED SYSTEM aux_work_timeouts
type MISC_AUX_WORK_Q LONG_LIVED SYSTEM misc_aux_work_q
@@ -270,6 +275,10 @@ type PROC_SYS_TSK SHORT_LIVED PROCESSES proc_sys_task
type PROC_SYS_TSK_QS SHORT_LIVED PROCESSES proc_sys_task_queues
type NEW_TIME_OFFSET SHORT_LIVED SYSTEM new_time_offset
type IOB_REQ SHORT_LIVED SYSTEM io_bytes_request
+type TRACER_NIF LONG_LIVED SYSTEM tracer_nif
+type TRACE_MSG_QUEUE SHORT_LIVED SYSTEM trace_message_queue
+type SCHED_ASYNC_JOB SHORT_LIVED SYSTEM async_calls
+type DIRTY_START STANDARD PROCESSES dirty_start
+if threads_no_smp
# Need thread safe allocs, but std_alloc and fix_alloc are not;
@@ -288,8 +297,10 @@ type THR_Q_LL LONG_LIVED SYSTEM long_lived_thr_queue
+if smp
type ASYNC SHORT_LIVED SYSTEM async
+type ZLIB STANDARD SYSTEM zlib
+else
-# sl_alloc is not thread safe in non smp build; therefore, we use driver_alloc
+# sl/std_alloc is not thread safe in non smp build; therefore, we use driver_alloc
+type ZLIB DRIVER SYSTEM zlib
type ASYNC DRIVER SYSTEM async
+endif
@@ -335,14 +346,22 @@ type SL_MPATHS SHORT_LIVED SYSTEM sl_migration_paths
# Currently most hipe code use this type.
type HIPE SYSTEM SYSTEM hipe_data
++if exec_alloc
+type HIPE_EXEC EXEC CODE hipe_code
+endif
++endif
+
+
+
+if heap_frag_elim_test
type SSB SHORT_LIVED PROCESSES ssb
+endif
+type DEBUG SHORT_LIVED SYSTEM debugging
+
type DDLL_PROCESS STANDARD SYSTEM ddll_processes
type MONITOR_LH STANDARD PROCESSES monitor_lh
type NLINK_LH STANDARD PROCESSES nlink_lh
diff --git a/erts/emulator/beam/erl_alloc_util.c b/erts/emulator/beam/erl_alloc_util.c
index 3230b6ef34..2995f2f822 100644
--- a/erts/emulator/beam/erl_alloc_util.c
+++ b/erts/emulator/beam/erl_alloc_util.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.
@@ -52,6 +52,7 @@
#ifdef ERTS_ENABLE_LOCK_COUNT
#include "erl_lock_count.h"
#endif
+#include "lttng-wrapper.h"
#if defined(ERTS_ALLOC_UTIL_HARD_DEBUG) && defined(__GNUC__)
#warning "* * * * * * * * * *"
@@ -858,28 +859,36 @@ void*
erts_alcu_literal_32_mseg_alloc(Allctr_t *allctr, Uint *size_p, Uint flags)
{
void* res;
- ERTS_LC_ASSERT(allctr->alloc_no == ERTS_ALC_A_LITERAL
- && !allctr->t && allctr->thread_safe);
+ Uint sz = ERTS_SUPERALIGNED_CEILING(*size_p);
+ ERTS_LC_ASSERT(allctr->alloc_no == ERTS_ALC_A_LITERAL &&
+ allctr->t == 0);
+ ERTS_SMP_LC_ASSERT(allctr->thread_safe);
- res = erts_alcu_mseg_alloc(allctr, size_p, flags);
- if (res)
- set_literal_range(res, *size_p);
+ res = erts_alcu_mseg_alloc(allctr, &sz, flags);
+ if (res) {
+ set_literal_range(res, sz);
+ *size_p = sz;
+ }
return res;
}
void*
erts_alcu_literal_32_mseg_realloc(Allctr_t *allctr, void *seg,
- Uint old_size, Uint *new_size_p)
+ Uint old_size, Uint *new_size_p)
{
void* res;
- ERTS_LC_ASSERT(allctr->alloc_no == ERTS_ALC_A_LITERAL
- && !allctr->t && allctr->thread_safe);
+ Uint new_sz = ERTS_SUPERALIGNED_CEILING(*new_size_p);
+ ERTS_LC_ASSERT(allctr->alloc_no == ERTS_ALC_A_LITERAL &&
+ allctr->t == 0);
+ ERTS_SMP_LC_ASSERT(allctr->thread_safe);
if (seg && old_size)
clear_literal_range(seg, old_size);
- res = erts_alcu_mseg_realloc(allctr, seg, old_size, new_size_p);
- if (res)
- set_literal_range(res, *new_size_p);
+ res = erts_alcu_mseg_realloc(allctr, seg, old_size, &new_sz);
+ if (res) {
+ set_literal_range(res, new_sz);
+ *new_size_p = new_sz;
+ }
return res;
}
@@ -887,8 +896,9 @@ void
erts_alcu_literal_32_mseg_dealloc(Allctr_t *allctr, void *seg, Uint size,
Uint flags)
{
- ERTS_LC_ASSERT(allctr->alloc_no == ERTS_ALC_A_LITERAL
- && !allctr->t && allctr->thread_safe);
+ ERTS_LC_ASSERT(allctr->alloc_no == ERTS_ALC_A_LITERAL &&
+ allctr->t == 0);
+ ERTS_SMP_LC_ASSERT(allctr->thread_safe);
erts_alcu_mseg_dealloc(allctr, seg, size, flags);
@@ -897,8 +907,9 @@ erts_alcu_literal_32_mseg_dealloc(Allctr_t *allctr, void *seg, Uint size,
#elif defined(ARCH_64) && defined(ERTS_HAVE_OS_PHYSICAL_MEMORY_RESERVATION)
+/* Used by literal allocator that has its own mmapper (super carrier) */
void*
-erts_alcu_literal_64_mseg_alloc(Allctr_t *allctr, Uint *size_p, Uint flags)
+erts_alcu_mmapper_mseg_alloc(Allctr_t *allctr, Uint *size_p, Uint flags)
{
void* res;
UWord size = (UWord) *size_p;
@@ -906,33 +917,33 @@ erts_alcu_literal_64_mseg_alloc(Allctr_t *allctr, Uint *size_p, Uint flags)
if (flags & ERTS_MSEG_FLG_2POW)
mmap_flags |= ERTS_MMAPFLG_SUPERALIGNED;
- res = erts_mmap(&erts_literal_mmapper, mmap_flags, &size);
+ res = erts_mmap(allctr->mseg_mmapper, mmap_flags, &size);
*size_p = (Uint)size;
INC_CC(allctr->calls.mseg_alloc);
return res;
}
void*
-erts_alcu_literal_64_mseg_realloc(Allctr_t *allctr, void *seg,
+erts_alcu_mmapper_mseg_realloc(Allctr_t *allctr, void *seg,
Uint old_size, Uint *new_size_p)
{
void *res;
UWord new_size = (UWord) *new_size_p;
- res = erts_mremap(&erts_literal_mmapper, ERTS_MSEG_FLG_NONE, seg, old_size, &new_size);
+ res = erts_mremap(allctr->mseg_mmapper, ERTS_MSEG_FLG_NONE, seg, old_size, &new_size);
*new_size_p = (Uint) new_size;
INC_CC(allctr->calls.mseg_realloc);
return res;
}
void
-erts_alcu_literal_64_mseg_dealloc(Allctr_t *allctr, void *seg, Uint size,
+erts_alcu_mmapper_mseg_dealloc(Allctr_t *allctr, void *seg, Uint size,
Uint flags)
{
Uint32 mmap_flags = ERTS_MMAPFLG_SUPERCARRIER_ONLY;
if (flags & ERTS_MSEG_FLG_2POW)
mmap_flags |= ERTS_MMAPFLG_SUPERALIGNED;
- erts_munmap(&erts_literal_mmapper, mmap_flags, seg, (UWord)size);
+ erts_munmap(allctr->mseg_mmapper, mmap_flags, seg, (UWord)size);
INC_CC(allctr->calls.mseg_dealloc);
}
#endif /* ARCH_64 && ERTS_HAVE_OS_PHYSICAL_MEMORY_RESERVATION */
@@ -940,9 +951,10 @@ erts_alcu_literal_64_mseg_dealloc(Allctr_t *allctr, void *seg, Uint size,
#endif /* HAVE_ERTS_MSEG */
void*
-erts_alcu_sys_alloc(Allctr_t *allctr, Uint size, int superalign)
+erts_alcu_sys_alloc(Allctr_t *allctr, Uint* size_p, int superalign)
{
void *res;
+ const Uint size = *size_p;
#if ERTS_SA_MB_CARRIERS && ERTS_HAVE_ERTS_SYS_ALIGNED_ALLOC
if (superalign)
res = erts_sys_aligned_alloc(ERTS_SACRR_UNIT_SZ, size);
@@ -956,9 +968,10 @@ erts_alcu_sys_alloc(Allctr_t *allctr, Uint size, int superalign)
}
void*
-erts_alcu_sys_realloc(Allctr_t *allctr, void *ptr, Uint size, Uint old_size, int superalign)
+erts_alcu_sys_realloc(Allctr_t *allctr, void *ptr, Uint *size_p, Uint old_size, int superalign)
{
void *res;
+ const Uint size = *size_p;
#if ERTS_SA_MB_CARRIERS && ERTS_HAVE_ERTS_SYS_ALIGNED_ALLOC
if (superalign)
@@ -993,38 +1006,48 @@ erts_alcu_sys_dealloc(Allctr_t *allctr, void *ptr, Uint size, int superalign)
#ifdef ARCH_32
void*
-erts_alcu_literal_32_sys_alloc(Allctr_t *allctr, Uint size, int superalign)
+erts_alcu_literal_32_sys_alloc(Allctr_t *allctr, Uint* size_p, int superalign)
{
void* res;
- ERTS_LC_ASSERT(allctr->alloc_no == ERTS_ALC_A_LITERAL
- && !allctr->t && allctr->thread_safe);
+ Uint size = ERTS_SUPERALIGNED_CEILING(*size_p);
+ ERTS_LC_ASSERT(allctr->alloc_no == ERTS_ALC_A_LITERAL &&
+ allctr->t == 0);
+ ERTS_SMP_LC_ASSERT(allctr->thread_safe);
- res = erts_alcu_sys_alloc(allctr, size, 1);
- if (res)
+ res = erts_alcu_sys_alloc(allctr, &size, 1);
+ if (res) {
set_literal_range(res, size);
+ *size_p = size;
+ }
return res;
}
void*
-erts_alcu_literal_32_sys_realloc(Allctr_t *allctr, void *ptr, Uint size, Uint old_size, int superalign)
+erts_alcu_literal_32_sys_realloc(Allctr_t *allctr, void *ptr, Uint* size_p, Uint old_size, int superalign)
{
void* res;
- ERTS_LC_ASSERT(allctr->alloc_no == ERTS_ALC_A_LITERAL
- && !allctr->t && allctr->thread_safe);
+ Uint size = ERTS_SUPERALIGNED_CEILING(*size_p);
+
+ ERTS_LC_ASSERT(allctr->alloc_no == ERTS_ALC_A_LITERAL &&
+ allctr->t == 0);
+ ERTS_SMP_LC_ASSERT(allctr->thread_safe);
if (ptr && old_size)
clear_literal_range(ptr, old_size);
- res = erts_alcu_sys_realloc(allctr, ptr, size, old_size, 1);
- if (res)
+ res = erts_alcu_sys_realloc(allctr, ptr, &size, old_size, 1);
+ if (res) {
set_literal_range(res, size);
+ *size_p = size;
+ }
return res;
}
void
erts_alcu_literal_32_sys_dealloc(Allctr_t *allctr, void *ptr, Uint size, int superalign)
{
- ERTS_LC_ASSERT(allctr->alloc_no == ERTS_ALC_A_LITERAL
- && !allctr->t && allctr->thread_safe);
+ ERTS_LC_ASSERT(allctr->alloc_no == ERTS_ALC_A_LITERAL &&
+ allctr->t == 0);
+ ERTS_SMP_LC_ASSERT(allctr->thread_safe);
erts_alcu_sys_dealloc(allctr, ptr, size, 1);
@@ -3125,6 +3148,7 @@ cpool_insert(Allctr_t *allctr, Carrier_t *crr)
erts_smp_atomic_set_wb(&crr->allctr,
((erts_aint_t) allctr)|ERTS_CRR_ALCTR_FLG_IN_POOL);
+ LTTNG3(carrier_pool_put, ERTS_ALC_A2AD(allctr->alloc_no), allctr->ix, CARRIER_SZ(crr));
}
static void
@@ -3240,6 +3264,7 @@ cpool_fetch(Allctr_t *allctr, UWord size)
first_old_traitor = allctr->cpool.traitor_list.next;
cpool_entrance = NULL;
+ LTTNG3(carrier_pool_get, ERTS_ALC_A2AD(allctr->alloc_no), allctr->ix, (unsigned long)size);
/*
* Search my own pooled_list,
* i.e my abandoned carriers that were in the pool last time I checked.
@@ -3861,12 +3886,12 @@ create_carrier(Allctr_t *allctr, Uint umem_sz, UWord flags)
? UNIT_CEILING(bcrr_sz)
: SYS_ALLOC_CARRIER_CEILING(bcrr_sz));
- crr = (Carrier_t *) allctr->sys_alloc(allctr, crr_sz, flags & CFLG_MBC);
+ crr = (Carrier_t *) allctr->sys_alloc(allctr, &crr_sz, flags & CFLG_MBC);
if (!crr) {
if (crr_sz > UNIT_CEILING(bcrr_sz)) {
crr_sz = UNIT_CEILING(bcrr_sz);
- crr = (Carrier_t *) allctr->sys_alloc(allctr, crr_sz, flags & CFLG_MBC);
+ crr = (Carrier_t *) allctr->sys_alloc(allctr, &crr_sz, flags & CFLG_MBC);
}
if (!crr) {
#if HAVE_ERTS_MSEG
@@ -3925,6 +3950,21 @@ create_carrier(Allctr_t *allctr, Uint umem_sz, UWord flags)
}
+#ifdef USE_LTTNG_VM_TRACEPOINTS
+ if (LTTNG_ENABLED(carrier_create)) {
+ lttng_decl_carrier_stats(mbc_stats);
+ lttng_decl_carrier_stats(sbc_stats);
+ LTTNG_CARRIER_STATS_TO_LTTNG_STATS(&(allctr->mbcs), mbc_stats);
+ LTTNG_CARRIER_STATS_TO_LTTNG_STATS(&(allctr->sbcs), sbc_stats);
+ LTTNG5(carrier_create,
+ ERTS_ALC_A2AD(allctr->alloc_no),
+ allctr->ix,
+ crr_sz,
+ mbc_stats,
+ sbc_stats);
+ }
+#endif
+
DEBUG_SAVE_ALIGNMENT(crr);
return blk;
}
@@ -4009,7 +4049,7 @@ resize_carrier(Allctr_t *allctr, Block_t *old_blk, Uint umem_sz, UWord flags)
new_crr = (Carrier_t *) allctr->sys_realloc(allctr,
(void *) old_crr,
- new_crr_sz,
+ &new_crr_sz,
old_crr_sz,
0);
if (new_crr) {
@@ -4030,7 +4070,7 @@ resize_carrier(Allctr_t *allctr, Block_t *old_blk, Uint umem_sz, UWord flags)
new_crr_sz = UNIT_CEILING(new_crr_sz);
new_crr = (Carrier_t *) allctr->sys_realloc(allctr,
(void *) old_crr,
- new_crr_sz,
+ &new_crr_sz,
old_crr_sz,
0);
if (new_crr)
@@ -4148,6 +4188,21 @@ destroy_carrier(Allctr_t *allctr, Block_t *blk, Carrier_t **busy_pcrr_pp)
allctr->remove_mbc(allctr, crr);
}
+#ifdef USE_LTTNG_VM_TRACEPOINTS
+ if (LTTNG_ENABLED(carrier_destroy)) {
+ lttng_decl_carrier_stats(mbc_stats);
+ lttng_decl_carrier_stats(sbc_stats);
+ LTTNG_CARRIER_STATS_TO_LTTNG_STATS(&(allctr->mbcs), mbc_stats);
+ LTTNG_CARRIER_STATS_TO_LTTNG_STATS(&(allctr->sbcs), sbc_stats);
+ LTTNG5(carrier_destroy,
+ ERTS_ALC_A2AD(allctr->alloc_no),
+ allctr->ix,
+ crr_sz,
+ mbc_stats,
+ sbc_stats);
+ }
+#endif
+
#ifdef ERTS_SMP
schedule_dealloc_carrier(allctr, crr);
#else
@@ -4718,7 +4773,7 @@ make_name_atoms(Allctr_t *allctr)
size_t prefix_len = strlen(allctr->name_prefix);
if (prefix_len > MAX_ATOM_CHARACTERS + sizeof(realloc) - 1)
- erl_exit(1,"Too long allocator name: %salloc\n",allctr->name_prefix);
+ erts_exit(ERTS_ERROR_EXIT,"Too long allocator name: %salloc\n",allctr->name_prefix);
memcpy((void *) buf, (void *) allctr->name_prefix, prefix_len);
@@ -5912,7 +5967,7 @@ erts_alcu_start(Allctr_t *allctr, AllctrInit_t *init)
/* erts_alcu_start assumes that allctr has been zeroed */
if (((UWord)allctr & ERTS_CRR_ALCTR_FLG_MASK) != 0) {
- erl_exit(ERTS_ABORT_EXIT, "%s:%d:erts_alcu_start: Alignment error\n",
+ erts_exit(ERTS_ABORT_EXIT, "%s:%d:erts_alcu_start: Alignment error\n",
__FILE__, __LINE__);
}
@@ -6094,6 +6149,7 @@ erts_alcu_start(Allctr_t *allctr, AllctrInit_t *init)
allctr->mseg_alloc = init->mseg_alloc;
allctr->mseg_realloc = init->mseg_realloc;
allctr->mseg_dealloc = init->mseg_dealloc;
+ allctr->mseg_mmapper = init->mseg_mmapper;
}
else {
ASSERT(!init->mseg_realloc && !init->mseg_dealloc);
@@ -6128,7 +6184,7 @@ erts_alcu_start(Allctr_t *allctr, AllctrInit_t *init)
if (allctr->thread_safe)
erts_mtx_destroy(&allctr->mutex);
#endif
- erl_exit(ERTS_ABORT_EXIT,
+ erts_exit(ERTS_ABORT_EXIT,
"Failed to create main carrier for %salloc\n",
init->name_prefix);
}
@@ -6273,7 +6329,7 @@ erts_alcu_test(UWord op, UWord a1, UWord a2)
case 0x019: return (UWord) PREV_BLK((Block_t *) a1);
case 0x01a: return (UWord) IS_MBC_FIRST_BLK((Allctr_t*)a1, (Block_t *) a2);
case 0x01b: return (UWord) sizeof(Unit_t);
- case 0x01c: return (unsigned long) BLK_TO_MBC((Block_t*) a1);
+ case 0x01c: return (UWord) BLK_TO_MBC((Block_t*) a1);
case 0x01d: ((Allctr_t*) a1)->add_mbc((Allctr_t*)a1, (Carrier_t*)a2); break;
case 0x01e: ((Allctr_t*) a1)->remove_mbc((Allctr_t*)a1, (Carrier_t*)a2); break;
#ifdef ERTS_SMP
@@ -6344,7 +6400,7 @@ erts_alcu_verify_unused(Allctr_t *allctr)
if (no) {
UWord sz = allctr->sbcs.blocks.curr.size;
sz += allctr->mbcs.blocks.curr.size;
- erl_exit(ERTS_ABORT_EXIT,
+ erts_exit(ERTS_ABORT_EXIT,
"%salloc() used when expected to be unused!\n"
"Total amount of blocks allocated: %bpu\n"
"Total amount of bytes allocated: %bpu\n",
diff --git a/erts/emulator/beam/erl_alloc_util.h b/erts/emulator/beam/erl_alloc_util.h
index b7d717ed23..f50f09907a 100644
--- a/erts/emulator/beam/erl_alloc_util.h
+++ b/erts/emulator/beam/erl_alloc_util.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.
@@ -30,6 +30,7 @@
#endif
#include "erl_mseg.h"
+#include "lttng-wrapper.h"
#define ERTS_AU_PREF_ALLOC_BITS 11
#define ERTS_AU_MAX_PREF_ALLOC_INSTANCES (1 << ERTS_AU_PREF_ALLOC_BITS)
@@ -71,9 +72,10 @@ typedef struct {
void* (*mseg_alloc)(Allctr_t*, Uint *size_p, Uint flags);
void* (*mseg_realloc)(Allctr_t*, void *seg, Uint old_size, Uint *new_size_p);
void (*mseg_dealloc)(Allctr_t*, void *seg, Uint size, Uint flags);
+ ErtsMemMapper *mseg_mmapper;
#endif
- void* (*sys_alloc)(Allctr_t *allctr, Uint size, int superalign);
- void* (*sys_realloc)(Allctr_t *allctr, void *ptr, Uint size, Uint old_size, int superalign);
+ void* (*sys_alloc)(Allctr_t *allctr, Uint *size_p, int superalign);
+ void* (*sys_realloc)(Allctr_t *allctr, void *ptr, Uint *size_p, Uint old_size, int superalign);
void (*sys_dealloc)(Allctr_t *allctr, void *ptr, Uint size, int superalign);
} AllctrInit_t;
@@ -204,18 +206,18 @@ void* erts_alcu_literal_32_mseg_realloc(Allctr_t*, void *seg, Uint old_size, Uin
void erts_alcu_literal_32_mseg_dealloc(Allctr_t*, void *seg, Uint size, Uint flags);
# elif defined(ARCH_64) && defined(ERTS_HAVE_OS_PHYSICAL_MEMORY_RESERVATION)
-void* erts_alcu_literal_64_mseg_alloc(Allctr_t*, Uint *size_p, Uint flags);
-void* erts_alcu_literal_64_mseg_realloc(Allctr_t*, void *seg, Uint old_size, Uint *new_size_p);
-void erts_alcu_literal_64_mseg_dealloc(Allctr_t*, void *seg, Uint size, Uint flags);
+void* erts_alcu_mmapper_mseg_alloc(Allctr_t*, Uint *size_p, Uint flags);
+void* erts_alcu_mmapper_mseg_realloc(Allctr_t*, void *seg, Uint old_size, Uint *new_size_p);
+void erts_alcu_mmapper_mseg_dealloc(Allctr_t*, void *seg, Uint size, Uint flags);
# endif
#endif /* HAVE_ERTS_MSEG */
-void* erts_alcu_sys_alloc(Allctr_t*, Uint size, int superalign);
-void* erts_alcu_sys_realloc(Allctr_t*, void *ptr, Uint size, Uint old_size, int superalign);
+void* erts_alcu_sys_alloc(Allctr_t*, Uint *size_p, int superalign);
+void* erts_alcu_sys_realloc(Allctr_t*, void *ptr, Uint *size_p, Uint old_size, int superalign);
void erts_alcu_sys_dealloc(Allctr_t*, void *ptr, Uint size, int superalign);
#ifdef ARCH_32
-void* erts_alcu_literal_32_sys_alloc(Allctr_t*, Uint size, int superalign);
-void* erts_alcu_literal_32_sys_realloc(Allctr_t*, void *ptr, Uint size, Uint old_size, int superalign);
+void* erts_alcu_literal_32_sys_alloc(Allctr_t*, Uint *size_p, int superalign);
+void* erts_alcu_literal_32_sys_realloc(Allctr_t*, void *ptr, Uint *size_p, Uint old_size, int superalign);
void erts_alcu_literal_32_sys_dealloc(Allctr_t*, void *ptr, Uint size, int superalign);
#endif
@@ -417,6 +419,18 @@ typedef struct {
} blocks;
} CarriersStats_t;
+#ifdef USE_LTTNG_VM_TRACEPOINTS
+#define LTTNG_CARRIER_STATS_TO_LTTNG_STATS(CSP, LSP) \
+ do { \
+ (LSP)->carriers.size = (CSP)->curr.norm.mseg.size \
+ + (CSP)->curr.norm.sys_alloc.size; \
+ (LSP)->carriers.no = (CSP)->curr.norm.mseg.no \
+ + (CSP)->curr.norm.sys_alloc.no; \
+ (LSP)->blocks.size = (CSP)->blocks.curr.size; \
+ (LSP)->blocks.no = (CSP)->blocks.curr.no; \
+ } while (0)
+#endif
+
#ifdef ERTS_SMP
typedef union ErtsAllctrDDBlock_t_ ErtsAllctrDDBlock_t;
@@ -588,9 +602,10 @@ struct Allctr_t_ {
void* (*mseg_alloc)(Allctr_t*, Uint *size_p, Uint flags);
void* (*mseg_realloc)(Allctr_t*, void *seg, Uint old_size, Uint *new_size_p);
void (*mseg_dealloc)(Allctr_t*, void *seg, Uint size, Uint flags);
+ ErtsMemMapper *mseg_mmapper;
#endif
- void* (*sys_alloc)(Allctr_t *allctr, Uint size, int superalign);
- void* (*sys_realloc)(Allctr_t *allctr, void *ptr, Uint size, Uint old_size, int superalign);
+ void* (*sys_alloc)(Allctr_t *allctr, Uint *size_p, int superalign);
+ void* (*sys_realloc)(Allctr_t *allctr, void *ptr, Uint *size_p, Uint old_size, int superalign);
void (*sys_dealloc)(Allctr_t *allctr, void *ptr, Uint size, int superalign);
void (*init_atoms) (void);
diff --git a/erts/emulator/beam/erl_ao_firstfit_alloc.c b/erts/emulator/beam/erl_ao_firstfit_alloc.c
index 19420af8ab..fbe4724047 100644
--- a/erts/emulator/beam/erl_ao_firstfit_alloc.c
+++ b/erts/emulator/beam/erl_ao_firstfit_alloc.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.
@@ -1035,7 +1035,7 @@ info_options(Allctr_t *allctr,
if (hpp || szp) {
if (!atoms_initialized)
- erl_exit(1, "%s:%d: Internal error: Atoms not initialized",
+ erts_exit(ERTS_ERROR_EXIT, "%s:%d: Internal error: Atoms not initialized",
__FILE__, __LINE__);;
res = NIL;
diff --git a/erts/emulator/beam/erl_ao_firstfit_alloc.h b/erts/emulator/beam/erl_ao_firstfit_alloc.h
index 4200f20622..7349c6ab19 100644
--- a/erts/emulator/beam/erl_ao_firstfit_alloc.h
+++ b/erts/emulator/beam/erl_ao_firstfit_alloc.h
@@ -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/erts/emulator/beam/erl_arith.c b/erts/emulator/beam/erl_arith.c
index 3671025d22..861532f241 100644
--- a/erts/emulator/beam/erl_arith.c
+++ b/erts/emulator/beam/erl_arith.c
@@ -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/erts/emulator/beam/erl_async.c b/erts/emulator/beam/erl_async.c
index cdeeb5281b..84254af0c2 100644
--- a/erts/emulator/beam/erl_async.c
+++ b/erts/emulator/beam/erl_async.c
@@ -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.
@@ -28,6 +28,7 @@
#include "erl_thr_queue.h"
#include "erl_async.h"
#include "dtrace-wrapper.h"
+#include "lttng-wrapper.h"
#define ERTS_MAX_ASYNC_READY_CALLS_IN_SEQ 20
@@ -281,6 +282,13 @@ static ERTS_INLINE void async_add(ErtsAsync *a, ErtsAsyncQ* q)
#endif
erts_thr_q_enqueue(&q->thr_q, a);
+#ifdef USE_LTTNG_VM_TRACEPOINTS
+ if (LTTNG_ENABLED(aio_pool_put)) {
+ lttng_decl_portbuf(port_str);
+ lttng_portid_to_str(a->port, port_str);
+ LTTNG2(aio_pool_put, port_str, -1);
+ }
+#endif
#ifdef USE_VM_PROBES
if (DTRACE_ENABLED(aio_pool_add)) {
DTRACE_CHARBUF(port_str, 16);
@@ -317,6 +325,14 @@ static ERTS_INLINE ErtsAsync *async_get(ErtsThrQ_t *q,
if (saved_fin_deq)
erts_thr_q_append_finalize_dequeue_data(&a->q.fin_deq, &fin_deq);
#endif
+#ifdef USE_LTTNG_VM_TRACEPOINTS
+ if (LTTNG_ENABLED(aio_pool_get)) {
+ lttng_decl_portbuf(port_str);
+ int length = erts_thr_q_length_dirty(q);
+ lttng_portid_to_str(a->port, port_str);
+ LTTNG2(aio_pool_get, port_str, length);
+ }
+#endif
#ifdef USE_VM_PROBES
if (DTRACE_ENABLED(aio_pool_get)) {
DTRACE_CHARBUF(port_str, 16);
diff --git a/erts/emulator/beam/erl_async.h b/erts/emulator/beam/erl_async.h
index 65538bcef0..473c7686e5 100644
--- a/erts/emulator/beam/erl_async.h
+++ b/erts/emulator/beam/erl_async.h
@@ -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/erts/emulator/beam/erl_bestfit_alloc.c b/erts/emulator/beam/erl_bestfit_alloc.c
index fb853b65ab..379cee39a1 100644
--- a/erts/emulator/beam/erl_bestfit_alloc.c
+++ b/erts/emulator/beam/erl_bestfit_alloc.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.
@@ -940,7 +940,7 @@ info_options(Allctr_t *allctr,
if (hpp || szp) {
if (!atoms_initialized)
- erl_exit(1, "%s:%d: Internal error: Atoms not initialized",
+ erts_exit(ERTS_ERROR_EXIT, "%s:%d: Internal error: Atoms not initialized",
__FILE__, __LINE__);;
res = NIL;
diff --git a/erts/emulator/beam/erl_bestfit_alloc.h b/erts/emulator/beam/erl_bestfit_alloc.h
index b315518b88..3a5f51f5dc 100644
--- a/erts/emulator/beam/erl_bestfit_alloc.h
+++ b/erts/emulator/beam/erl_bestfit_alloc.h
@@ -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/erts/emulator/beam/erl_bif_binary.c b/erts/emulator/beam/erl_bif_binary.c
index aec72bd61a..6e10980b6b 100644
--- a/erts/emulator/beam/erl_bif_binary.c
+++ b/erts/emulator/beam/erl_bif_binary.c
@@ -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/erts/emulator/beam/erl_bif_chksum.c b/erts/emulator/beam/erl_bif_chksum.c
index e3074d6309..9417803e14 100644
--- a/erts/emulator/beam/erl_bif_chksum.c
+++ b/erts/emulator/beam/erl_bif_chksum.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/erts/emulator/beam/erl_bif_ddll.c b/erts/emulator/beam/erl_bif_ddll.c
index 2b1d875bfe..ef77201544 100644
--- a/erts/emulator/beam/erl_bif_ddll.c
+++ b/erts/emulator/beam/erl_bif_ddll.c
@@ -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.
@@ -48,6 +48,7 @@
#include "erl_version.h"
#include "erl_bif_unique.h"
#include "dtrace-wrapper.h"
+#include "lttng-wrapper.h"
#ifdef ERTS_SMP
#define DDLL_SMP 1
@@ -1309,7 +1310,7 @@ static Eterm notify_when_loaded(Process *p, Eterm name_term, char *name, ErtsPro
case ERL_DE_FORCE_RELOAD:
break;
default:
- erl_exit(1,"Internal error, unknown state %u in dynamic driver.", drv->handle->status);
+ erts_exit(ERTS_ERROR_EXIT,"Internal error, unknown state %u in dynamic driver.", drv->handle->status);
}
p->flags |= F_USING_DDLL;
r = add_monitor(p, drv->handle, ERL_DE_PROC_AWAIT_LOAD);
@@ -1619,6 +1620,7 @@ static int do_unload_driver_entry(DE_Handle *dh, Eterm *save_name)
if (q->finish) {
int fpe_was_unmasked = erts_block_fpe();
DTRACE1(driver_finish, q->name);
+ LTTNG1(driver_finish, q->name);
(*(q->finish))();
erts_unblock_fpe(fpe_was_unmasked);
}
@@ -1735,7 +1737,7 @@ static void notify_proc(Process *proc, Eterm ref, Eterm driver_name, Eterm type,
hp += REF_THING_SIZE;
mess = TUPLE5(hp,type,r,am_driver,driver_name,tag);
}
- erts_queue_message(proc, &rp_locks, mp, mess, am_undefined);
+ erts_queue_message(proc, rp_locks, mp, mess, am_system);
erts_smp_proc_unlock(proc, rp_locks);
ERTS_SMP_CHK_NO_PROC_LOCKS;
}
diff --git a/erts/emulator/beam/erl_bif_guard.c b/erts/emulator/beam/erl_bif_guard.c
index 4a9a6a5fcd..b42d2dc28b 100644
--- a/erts/emulator/beam/erl_bif_guard.c
+++ b/erts/emulator/beam/erl_bif_guard.c
@@ -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/erts/emulator/beam/erl_bif_info.c b/erts/emulator/beam/erl_bif_info.c
index e4baff87f4..2e195db0ee 100644
--- a/erts/emulator/beam/erl_bif_info.c
+++ b/erts/emulator/beam/erl_bif_info.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.
@@ -22,6 +22,7 @@
# include "config.h"
#endif
+#define ERTS_WANT_MEM_MAPPERS
#include "sys.h"
#include "erl_vm.h"
#include "global.h"
@@ -44,6 +45,7 @@
#include "erl_async.h"
#include "erl_thr_progress.h"
#include "erl_bif_unique.h"
+#include "erl_map.h"
#define ERTS_PTAB_WANT_DEBUG_FUNCS__
#include "erl_ptab.h"
#ifdef HIPE
@@ -126,6 +128,9 @@ static char erts_system_version[] = ("Erlang/OTP " ERLANG_OTP_RELEASE
#ifdef ERTS_FRMPTR
" [frame-pointer]"
#endif
+#ifdef USE_LTTNG
+ " [lttng]"
+#endif
#ifdef USE_DTRACE
" [dtrace]"
#endif
@@ -320,13 +325,11 @@ erts_print_system_version(int to, void *arg, Process *c_p)
char *ov = otp_version;
#ifdef ERTS_SMP
Uint total, online, active;
-#ifdef ERTS_DIRTY_SCHEDULERS
Uint dirty_cpu, dirty_cpu_onln, dirty_io;
- (void) erts_schedulers_state(&total, &online, &active, &dirty_cpu, &dirty_cpu_onln, &dirty_io, 0);
-#else
- (void) erts_schedulers_state(&total, &online, &active, NULL, NULL, NULL, 0);
-#endif
+ erts_schedulers_state(&total, &online, &active,
+ &dirty_cpu, &dirty_cpu_onln, NULL,
+ &dirty_io, NULL);
#endif
for (i = 0; i < sizeof(otp_version)-4; i++) {
if (ov[i] == '-' && ov[i+1] == 'r' && ov[i+2] == 'c')
@@ -592,6 +595,7 @@ static Eterm pi_args[] = {
am_suspending,
am_min_heap_size,
am_min_bin_vheap_size,
+ am_max_heap_size,
am_current_location,
am_current_stacktrace,
am_message_queue_data,
@@ -641,10 +645,11 @@ pi_arg2ix(Eterm arg)
case am_suspending: return 26;
case am_min_heap_size: return 27;
case am_min_bin_vheap_size: return 28;
- case am_current_location: return 29;
- case am_current_stacktrace: return 30;
- case am_message_queue_data: return 31;
- case am_garbage_collection_info: return 32;
+ case am_max_heap_size: return 29;
+ case am_current_location: return 30;
+ case am_current_stacktrace: return 31;
+ case am_message_queue_data: return 32;
+ case am_garbage_collection_info: return 33;
default: return -1;
}
}
@@ -845,6 +850,7 @@ process_info_list(Process *c_p, Eterm pid, Eterm list, int always_wrap,
if (unlock_locks)
erts_smp_proc_unlock(rp, unlock_locks);
+
}
/*
@@ -932,7 +938,7 @@ BIF_RETTYPE process_info_1(BIF_ALIST_1)
case ERTS_PI_FAIL_TYPE_AWAIT_EXIT:
ERTS_BIF_AWAIT_X_DATA_TRAP(BIF_P, BIF_ARG_1, am_undefined);
default:
- erl_exit(ERTS_ABORT_EXIT, "%s:%d: Internal error", __FILE__, __LINE__);
+ erts_exit(ERTS_ABORT_EXIT, "%s:%d: Internal error", __FILE__, __LINE__);
}
}
@@ -972,7 +978,7 @@ BIF_RETTYPE process_info_2(BIF_ALIST_2)
case ERTS_PI_FAIL_TYPE_AWAIT_EXIT:
ERTS_BIF_AWAIT_X_DATA_TRAP(BIF_P, BIF_ARG_1, am_undefined);
default:
- erl_exit(ERTS_ABORT_EXIT, "%s:%d: Internal error",
+ erts_exit(ERTS_ABORT_EXIT, "%s:%d: Internal error",
__FILE__, __LINE__);
}
}
@@ -1104,7 +1110,7 @@ process_info_aux(Process *BIF_P,
break;
case am_status:
- res = erts_process_status(BIF_P, ERTS_PROC_LOCK_MAIN, rp, rpid);
+ res = erts_process_status(rp, rpid);
ASSERT(res != am_undefined);
hp = HAlloc(BIF_P, 3);
break;
@@ -1345,6 +1351,18 @@ process_info_aux(Process *BIF_P,
break;
}
+ case am_max_heap_size: {
+ Uint hsz = 3;
+ (void) erts_max_heap_size_map(MAX_HEAP_SIZE_GET(rp),
+ MAX_HEAP_SIZE_FLAGS_GET(rp),
+ NULL, &hsz);
+ hp = HAlloc(BIF_P, hsz);
+ res = erts_max_heap_size_map(MAX_HEAP_SIZE_GET(rp),
+ MAX_HEAP_SIZE_FLAGS_GET(rp),
+ &hp, NULL);
+ break;
+ }
+
case am_total_heap_size: {
ErtsMessage *mp;
Uint total_heap_size;
@@ -1356,9 +1374,10 @@ process_info_aux(Process *BIF_P,
total_heap_size += rp->mbuf_sz;
- for (mp = rp->msg.first; mp; mp = mp->next)
- if (mp->data.attached)
- total_heap_size += erts_msg_attached_data_size(mp);
+ if (rp->flags & F_ON_HEAP_MSGQ)
+ for (mp = rp->msg.first; mp; mp = mp->next)
+ if (mp->data.attached)
+ total_heap_size += erts_msg_attached_data_size(mp);
(void) erts_bld_uint(NULL, &hsz, total_heap_size);
hp = HAlloc(BIF_P, hsz);
@@ -1387,8 +1406,12 @@ process_info_aux(Process *BIF_P,
case am_garbage_collection: {
DECL_AM(minor_gcs);
Eterm t;
+ Uint map_sz = 0;
- hp = HAlloc(BIF_P, 3+2 + 3+2 + 3+2 + 3+2 + 3); /* last "3" is for outside tuple */
+ erts_max_heap_size_map(MAX_HEAP_SIZE_GET(rp), MAX_HEAP_SIZE_FLAGS_GET(rp), NULL, &map_sz);
+
+ hp = HAlloc(BIF_P, 3+2 + 3+2 + 3+2 + 3+2 + 3+2 + map_sz + 3);
+ /* last "3" is for outside tuple */
t = TUPLE2(hp, AM_minor_gcs, make_small(GEN_GCS(rp))); hp += 3;
res = CONS(hp, t, NIL); hp += 2;
@@ -1399,6 +1422,11 @@ process_info_aux(Process *BIF_P,
res = CONS(hp, t, res); hp += 2;
t = TUPLE2(hp, am_min_bin_vheap_size, make_small(MIN_VHEAP_SIZE(rp))); hp += 3;
res = CONS(hp, t, res); hp += 2;
+
+ t = erts_max_heap_size_map(MAX_HEAP_SIZE_GET(rp), MAX_HEAP_SIZE_FLAGS_GET(rp), &hp, NULL);
+
+ t = TUPLE2(hp, am_max_heap_size, t); hp += 3;
+ res = CONS(hp, t, res); hp += 2;
break;
}
@@ -1408,12 +1436,12 @@ process_info_aux(Process *BIF_P,
if (rp == BIF_P) {
sz += ERTS_PROCESS_GC_INFO_MAX_SIZE;
} else {
- erts_process_gc_info(rp, &sz, NULL);
+ erts_process_gc_info(rp, &sz, NULL, 0, 0);
sz += 3;
}
hp = HAlloc(BIF_P, sz);
- res = erts_process_gc_info(rp, &actual_sz, &hp);
+ res = erts_process_gc_info(rp, &actual_sz, &hp, 0, 0);
/* We may have some extra space, fill with 0 tuples */
if (actual_sz <= sz - 3) {
@@ -1482,7 +1510,7 @@ process_info_aux(Process *BIF_P,
}
case am_last_calls: {
- struct saved_calls *scb = ERTS_PROC_GET_SAVED_CALLS_BUF(BIF_P);
+ struct saved_calls *scb = ERTS_PROC_GET_SAVED_CALLS_BUF(rp);
if (!scb) {
hp = HAlloc(BIF_P, 3);
res = am_false;
@@ -1727,7 +1755,7 @@ info_1_tuple(Process* BIF_P, /* Pointer to current process. */
return res;
buf = (char *) erts_alloc(ERTS_ALC_T_TMP, len+1);
if (intlist_to_buf(*tp, buf, len) != len)
- erl_exit(1, "%s:%d: Internal error\n", __FILE__, __LINE__);
+ erts_exit(ERTS_ERROR_EXIT, "%s:%d: Internal error\n", __FILE__, __LINE__);
buf[len] = '\0';
res = erts_instr_dump_memory_map(buf) ? am_true : am_false;
erts_free(ERTS_ALC_T_TMP, (void *) buf);
@@ -1746,7 +1774,7 @@ info_1_tuple(Process* BIF_P, /* Pointer to current process. */
return res;
buf = (char *) erts_alloc(ERTS_ALC_T_TMP, len+1);
if (intlist_to_buf(tp[1], buf, len) != len)
- erl_exit(1, "%s:%d: Internal error\n", __FILE__, __LINE__);
+ erts_exit(ERTS_ERROR_EXIT, "%s:%d: Internal error\n", __FILE__, __LINE__);
buf[len] = '\0';
res = erts_instr_dump_stat(buf, 1) ? am_true : am_false;
erts_free(ERTS_ALC_T_TMP, (void *) buf);
@@ -2031,12 +2059,8 @@ BIF_RETTYPE system_info_1(BIF_ALIST_1)
Uint arity = *tp++;
return info_1_tuple(BIF_P, tp, arityval(arity));
} else if (BIF_ARG_1 == am_scheduler_id) {
-#ifdef ERTS_SMP
- ASSERT(BIF_P->scheduler_data);
- BIF_RET(make_small(BIF_P->scheduler_data->no));
-#else
- BIF_RET(make_small(1));
-#endif
+ ErtsSchedulerData *esdp = erts_proc_sched_data(BIF_P);
+ BIF_RET(make_small(esdp->no));
} else if (BIF_ARG_1 == am_compat_rel) {
ASSERT(erts_compat_rel > 0);
BIF_RET(make_small(erts_compat_rel));
@@ -2044,12 +2068,18 @@ BIF_RETTYPE system_info_1(BIF_ALIST_1)
#ifndef ERTS_SMP
BIF_RET(am_disabled);
#else
+#ifndef ERTS_DIRTY_SCHEDULERS
if (erts_no_schedulers == 1)
BIF_RET(am_disabled);
- else {
- BIF_RET(erts_is_multi_scheduling_blocked()
- ? am_blocked
- : am_enabled);
+ else
+#endif
+ {
+ int msb = erts_is_multi_scheduling_blocked();
+ BIF_RET(!msb
+ ? am_enabled
+ : (msb > 0
+ ? am_blocked
+ : am_blocked_normal));
}
#endif
} else if (BIF_ARG_1 == am_build_type) {
@@ -2155,15 +2185,15 @@ BIF_RETTYPE system_info_1(BIF_ALIST_1)
res = build_snifs_term(&hp, NULL, NIL);
BIF_RET(res);
} else if (BIF_ARG_1 == am_sequential_tracer) {
- val = erts_get_system_seq_tracer();
- ASSERT(is_internal_pid(val) || is_internal_port(val) || val==am_false);
+ ErtsTracer seq_tracer = erts_get_system_seq_tracer();
+ val = erts_tracer_to_term(BIF_P, seq_tracer);
hp = HAlloc(BIF_P, 3);
res = TUPLE2(hp, am_sequential_tracer, val);
BIF_RET(res);
} else if (BIF_ARG_1 == am_garbage_collection){
Uint val = (Uint) erts_smp_atomic32_read_nob(&erts_max_gen_gcs);
Eterm tup;
- hp = HAlloc(BIF_P, 3+2 + 3+2 + 3+2);
+ hp = HAlloc(BIF_P, 3+2 + 3+2 + 3+2 + 3+2);
tup = TUPLE2(hp, am_fullsweep_after, make_small(val)); hp += 3;
res = CONS(hp, tup, NIL); hp += 2;
@@ -2174,6 +2204,9 @@ BIF_RETTYPE system_info_1(BIF_ALIST_1)
tup = TUPLE2(hp, am_min_bin_vheap_size, make_small(BIN_VH_MIN_SIZE)); hp += 3;
res = CONS(hp, tup, res); hp += 2;
+ tup = TUPLE2(hp, am_max_heap_size, make_small(H_MAX_SIZE)); hp += 3;
+ res = CONS(hp, tup, res); hp += 2;
+
BIF_RET(res);
} else if (BIF_ARG_1 == am_fullsweep_after){
Uint val = (Uint) erts_smp_atomic32_read_nob(&erts_max_gen_gcs);
@@ -2184,6 +2217,12 @@ BIF_RETTYPE system_info_1(BIF_ALIST_1)
hp = HAlloc(BIF_P, 3);
res = TUPLE2(hp, am_min_heap_size,make_small(H_MIN_SIZE));
BIF_RET(res);
+ } else if (BIF_ARG_1 == am_max_heap_size) {
+ Uint sz = 0;
+ erts_max_heap_size_map(H_MAX_SIZE, H_MAX_FLAGS, NULL, &sz);
+ hp = HAlloc(BIF_P, sz);
+ res = erts_max_heap_size_map(H_MAX_SIZE, H_MAX_FLAGS, &hp, NULL);
+ BIF_RET(res);
} else if (BIF_ARG_1 == am_min_bin_vheap_size) {
hp = HAlloc(BIF_P, 3);
res = TUPLE2(hp, am_min_bin_vheap_size,make_small(BIN_VH_MIN_SIZE));
@@ -2518,77 +2557,120 @@ BIF_RETTYPE system_info_1(BIF_ALIST_1)
res = TUPLE3(hp, make_small(1), make_small(1), make_small(1));
BIF_RET(res);
#else
+ Eterm *hp;
Uint total, online, active;
- switch (erts_schedulers_state(&total,
- &online,
- &active,
- NULL,
- NULL,
- NULL,
- 1)) {
- case ERTS_SCHDLR_SSPND_DONE: {
- Eterm *hp = HAlloc(BIF_P, 4);
- res = TUPLE3(hp,
- make_small(total),
- make_small(online),
- make_small(active));
- BIF_RET(res);
+ erts_schedulers_state(&total, &online, &active,
+ NULL, NULL, NULL, NULL, NULL);
+ hp = HAlloc(BIF_P, 4);
+ res = TUPLE3(hp,
+ make_small(total),
+ make_small(online),
+ make_small(active));
+ BIF_RET(res);
+#endif
+ } else if (ERTS_IS_ATOM_STR("schedulers_state", BIF_ARG_1)) {
+#ifndef ERTS_SMP
+ Eterm *hp = HAlloc(BIF_P, 4);
+ res = TUPLE3(hp, make_small(1), make_small(1), make_small(1));
+ BIF_RET(res);
+#else
+ Eterm *hp;
+ Uint total, online, active;
+ erts_schedulers_state(&total, &online, &active,
+ NULL, NULL, NULL, NULL, NULL);
+ hp = HAlloc(BIF_P, 4);
+ res = TUPLE3(hp,
+ make_small(total),
+ make_small(online),
+ make_small(active));
+ BIF_RET(res);
+#endif
+ } else if (ERTS_IS_ATOM_STR("all_schedulers_state", BIF_ARG_1)) {
+#ifndef ERTS_SMP
+ Eterm *hp = HAlloc(BIF_P, 2+5);
+ res = CONS(hp+5,
+ TUPLE4(hp,
+ am_normal,
+ make_small(1),
+ make_small(1),
+ make_small(1)),
+ NIL);
+ BIF_RET(res);
+#else
+ Eterm *hp, tpl;
+ Uint sz, total, online, active,
+ dirty_cpu_total, dirty_cpu_online, dirty_cpu_active,
+ dirty_io_total, dirty_io_active;
+ erts_schedulers_state(&total, &online, &active,
+ &dirty_cpu_total, &dirty_cpu_online, &dirty_cpu_active,
+ &dirty_io_total, &dirty_io_active);
+
+ sz = 2+5;
+ if (dirty_cpu_total)
+ sz += 2+5;
+ if (dirty_io_total)
+ sz += 2+5;
+
+ hp = HAlloc(BIF_P, sz);
+
+ res = NIL;
+ if (dirty_io_total) {
+ tpl = TUPLE4(hp,
+ am_dirty_io,
+ make_small(dirty_io_total),
+ make_small(dirty_io_total),
+ make_small(dirty_io_active));
+ hp += 5;
+ res = CONS(hp, tpl, res);
+ hp += 2;
}
- case ERTS_SCHDLR_SSPND_YIELD_RESTART:
- ERTS_VBUMP_ALL_REDS(BIF_P);
- BIF_TRAP1(bif_export[BIF_system_info_1],
- BIF_P, BIF_ARG_1);
- default:
- ASSERT(0);
- BIF_ERROR(BIF_P, EXC_INTERNAL_ERROR);
+ if (dirty_cpu_total) {
+ tpl = TUPLE4(hp,
+ am_dirty_cpu,
+ make_small(dirty_cpu_total),
+ make_small(dirty_cpu_online),
+ make_small(dirty_cpu_active));
+ hp += 5;
+ res = CONS(hp, tpl, res);
+ hp += 2;
}
+ tpl = TUPLE4(hp,
+ am_normal,
+ make_small(total),
+ make_small(online),
+ make_small(active));
+ hp += 5;
+ res = CONS(hp, tpl, res);
+ BIF_RET(res);
#endif
} else if (ERTS_IS_ATOM_STR("schedulers_online", BIF_ARG_1)) {
#ifndef ERTS_SMP
BIF_RET(make_small(1));
#else
- Uint total, online, active;
- switch (erts_schedulers_state(&total, &online, &active, NULL, NULL, NULL, 1)) {
- case ERTS_SCHDLR_SSPND_DONE:
- BIF_RET(make_small(online));
- case ERTS_SCHDLR_SSPND_YIELD_RESTART:
- ERTS_VBUMP_ALL_REDS(BIF_P);
- BIF_TRAP1(bif_export[BIF_system_info_1],
- BIF_P, BIF_ARG_1);
- default:
- ASSERT(0);
- BIF_ERROR(BIF_P, EXC_INTERNAL_ERROR);
- }
+ Uint online;
+ erts_schedulers_state(NULL, &online, NULL, NULL, NULL, NULL, NULL, NULL);
+ BIF_RET(make_small(online));
#endif
} else if (ERTS_IS_ATOM_STR("schedulers_active", BIF_ARG_1)) {
#ifndef ERTS_SMP
BIF_RET(make_small(1));
#else
- Uint total, online, active;
- switch (erts_schedulers_state(&total, &online, &active, NULL, NULL, NULL, 1)) {
- case ERTS_SCHDLR_SSPND_DONE:
- BIF_RET(make_small(active));
- case ERTS_SCHDLR_SSPND_YIELD_RESTART:
- ERTS_VBUMP_ALL_REDS(BIF_P);
- BIF_TRAP1(bif_export[BIF_system_info_1],
- BIF_P, BIF_ARG_1);
- default:
- ASSERT(0);
- BIF_ERROR(BIF_P, EXC_INTERNAL_ERROR);
- }
+ Uint active;
+ erts_schedulers_state(NULL, NULL, &active, NULL, NULL, NULL, NULL, NULL);
+ BIF_RET(make_small(active));
#endif
#if defined(ERTS_SMP) && defined(ERTS_DIRTY_SCHEDULERS)
} else if (ERTS_IS_ATOM_STR("dirty_cpu_schedulers", BIF_ARG_1)) {
Uint dirty_cpu;
- erts_schedulers_state(NULL, NULL, NULL, &dirty_cpu, NULL, NULL, 1);
+ erts_schedulers_state(NULL, NULL, NULL, &dirty_cpu, NULL, NULL, NULL, NULL);
BIF_RET(make_small(dirty_cpu));
} else if (ERTS_IS_ATOM_STR("dirty_cpu_schedulers_online", BIF_ARG_1)) {
Uint dirty_cpu_onln;
- erts_schedulers_state(NULL, NULL, NULL, NULL, &dirty_cpu_onln, NULL, 1);
+ erts_schedulers_state(NULL, NULL, NULL, NULL, &dirty_cpu_onln, NULL, NULL, NULL);
BIF_RET(make_small(dirty_cpu_onln));
} else if (ERTS_IS_ATOM_STR("dirty_io_schedulers", BIF_ARG_1)) {
Uint dirty_io;
- erts_schedulers_state(NULL, NULL, NULL, NULL, NULL, &dirty_io, 1);
+ erts_schedulers_state(NULL, NULL, NULL, NULL, NULL, NULL, &dirty_io, NULL);
BIF_RET(make_small(dirty_io));
#endif
} else if (ERTS_IS_ATOM_STR("run_queues", BIF_ARG_1)) {
@@ -2642,7 +2724,16 @@ BIF_RETTYPE system_info_1(BIF_ALIST_1)
if (erts_no_schedulers == 1)
BIF_RET(NIL);
else
- BIF_RET(erts_multi_scheduling_blockers(BIF_P));
+ BIF_RET(erts_multi_scheduling_blockers(BIF_P, 0));
+#endif
+ } else if (ERTS_IS_ATOM_STR("normal_multi_scheduling_blockers", BIF_ARG_1)) {
+#ifndef ERTS_SMP
+ BIF_RET(NIL);
+#else
+ if (erts_no_schedulers == 1)
+ BIF_RET(NIL);
+ else
+ BIF_RET(erts_multi_scheduling_blockers(BIF_P, 1));
#endif
} else if (ERTS_IS_ATOM_STR("modified_timing_level", BIF_ARG_1)) {
BIF_RET(ERTS_USE_MODIFIED_TIMING()
@@ -2692,6 +2783,9 @@ BIF_RETTYPE system_info_1(BIF_ALIST_1)
#elif defined(USE_SYSTEMTAP)
DECL_AM(systemtap);
BIF_RET(AM_systemtap);
+#elif defined(USE_LTTNG)
+ DECL_AM(lttng);
+ BIF_RET(AM_lttng);
#else
BIF_RET(am_none);
#endif
@@ -3490,7 +3584,7 @@ BIF_RETTYPE erts_debug_get_internal_state_1(BIF_ALIST_1)
BIF_RET(res);
}
else if (ERTS_IS_ATOM_STR("mmap", BIF_ARG_1)) {
- BIF_RET(erts_mmap_debug_info(&erts_dflt_mmapper, BIF_P));
+ BIF_RET(erts_mmap_debug_info(BIF_P));
}
else if (ERTS_IS_ATOM_STR("unique_monotonic_integer_state", BIF_ARG_1)) {
BIF_RET(erts_debug_get_unique_monotonic_integer_state(BIF_P));
@@ -3524,10 +3618,7 @@ BIF_RETTYPE erts_debug_get_internal_state_1(BIF_ALIST_1)
/* Used by timer process_SUITE, timer_bif_SUITE, and
node_container_SUITE (emulator) */
if (is_internal_pid(tp[2])) {
- BIF_RET(erts_process_status(BIF_P,
- ERTS_PROC_LOCK_MAIN,
- NULL,
- tp[2]));
+ BIF_RET(erts_process_status(NULL, tp[2]));
}
}
else if (ERTS_IS_ATOM_STR("link_list", tp[1])) {
@@ -3813,7 +3904,7 @@ static void broken_halt_test(Eterm bif_arg_2)
#if defined(ERTS_HAVE_TRY_CATCH)
erts_get_scheduler_data()->run_queue = NULL;
#endif
- erl_exit(ERTS_DUMP_EXIT, "%T", bif_arg_2);
+ erts_exit(ERTS_DUMP_EXIT, "%T", bif_arg_2);
}
@@ -4058,7 +4149,7 @@ BIF_RETTYPE erts_debug_set_internal_state_2(BIF_ALIST_2)
BIF_RET(am_true);
}
else if (ERTS_IS_ATOM_STR("abort", BIF_ARG_1)) {
- erl_exit(ERTS_ABORT_EXIT, "%T\n", BIF_ARG_2);
+ erts_exit(ERTS_ABORT_EXIT, "%T\n", BIF_ARG_2);
}
else if (ERTS_IS_ATOM_STR("kill_dist_connection", BIF_ARG_1)) {
DistEntry *dep = erts_sysname_to_connected_dist_entry(BIF_ARG_2);
diff --git a/erts/emulator/beam/erl_bif_lists.c b/erts/emulator/beam/erl_bif_lists.c
index fe64e76575..73d327da3e 100644
--- a/erts/emulator/beam/erl_bif_lists.c
+++ b/erts/emulator/beam/erl_bif_lists.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.
@@ -40,32 +40,93 @@ static BIF_RETTYPE append(Process* p, Eterm A, Eterm B)
Eterm list;
Eterm copy;
Eterm last;
- size_t need;
- Eterm* hp;
+ Eterm* hp = NULL;
Sint i;
- if ((i = erts_list_length(A)) < 0) {
- BIF_ERROR(p, BADARG);
+ list = A;
+
+ if (is_nil(list)) {
+ BIF_RET(B);
}
- if (i == 0) {
- BIF_RET(B);
- } else if (is_nil(B)) {
- BIF_RET(A);
+
+ if (is_not_list(list)) {
+ BIF_ERROR(p, BADARG);
}
- need = 2*i;
- hp = HAlloc(p, need);
- list = A;
+ /* optimistic append on heap first */
+
+ if ((i = HeapWordsLeft(p) / 2) < 4) {
+ goto list_tail;
+ }
+
+ hp = HEAP_TOP(p);
copy = last = CONS(hp, CAR(list_val(list)), make_list(hp+2));
list = CDR(list_val(list));
- hp += 2;
+ hp += 2;
+ i -= 2; /* don't use the last 2 words (extra i--;) */
+
+ while(i-- && is_list(list)) {
+ Eterm* listp = list_val(list);
+ last = CONS(hp, CAR(listp), make_list(hp+2));
+ list = CDR(listp);
+ hp += 2;
+ }
+
+ /* A is proper and B is NIL return A as-is, don't update HTOP */
+
+ if (is_nil(list) && is_nil(B)) {
+ BIF_RET(A);
+ }
+
+ if (is_nil(list)) {
+ HEAP_TOP(p) = hp;
+ CDR(list_val(last)) = B;
+ BIF_RET(copy);
+ }
+
+list_tail:
+
+ if ((i = erts_list_length(list)) < 0) {
+ BIF_ERROR(p, BADARG);
+ }
+
+ /* remaining list was proper and B is NIL */
+ if (is_nil(B)) {
+ BIF_RET(A);
+ }
+
+ if (hp) {
+ /* Note: fall through case, already written
+ * on the heap.
+ * The last 2 words of the heap is not written yet
+ */
+ Eterm *hp_save = hp;
+ ASSERT(i != 0);
+ HEAP_TOP(p) = hp + 2;
+ if (i == 1) {
+ hp[0] = CAR(list_val(list));
+ hp[1] = B;
+ BIF_RET(copy);
+ }
+ hp = HAlloc(p, 2*(i - 1));
+ last = CONS(hp_save, CAR(list_val(list)), make_list(hp));
+ } else {
+ hp = HAlloc(p, 2*i);
+ copy = last = CONS(hp, CAR(list_val(list)), make_list(hp+2));
+ hp += 2;
+ }
+
+ list = CDR(list_val(list));
i--;
+
+ ASSERT(i > -1);
while(i--) {
- Eterm* listp = list_val(list);
- last = CONS(hp, CAR(listp), make_list(hp+2));
- list = CDR(listp);
- hp += 2;
+ Eterm* listp = list_val(list);
+ last = CONS(hp, CAR(listp), make_list(hp+2));
+ list = CDR(listp);
+ hp += 2;
}
+
CDR(list_val(last)) = B;
BIF_RET(copy);
}
diff --git a/erts/emulator/beam/erl_bif_op.c b/erts/emulator/beam/erl_bif_op.c
index 0f20ded1d6..aecb8bf0c1 100644
--- a/erts/emulator/beam/erl_bif_op.c
+++ b/erts/emulator/beam/erl_bif_op.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/erts/emulator/beam/erl_bif_os.c b/erts/emulator/beam/erl_bif_os.c
index 2333ca0851..46777d3aa5 100644
--- a/erts/emulator/beam/erl_bif_os.c
+++ b/erts/emulator/beam/erl_bif_os.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.
diff --git a/erts/emulator/beam/erl_bif_port.c b/erts/emulator/beam/erl_bif_port.c
index 3acc1d7bbd..37f4e1de49 100644
--- a/erts/emulator/beam/erl_bif_port.c
+++ b/erts/emulator/beam/erl_bif_port.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.
@@ -79,6 +79,7 @@ BIF_RETTYPE erts_internal_open_port_2(BIF_ALIST_2)
}
if (port->drv_ptr->flags & ERL_DRV_FLAG_USE_INIT_ACK) {
+
/* Copied from erl_port_task.c */
port->async_open_port = erts_alloc(ERTS_ALC_T_PRTSD,
sizeof(*port->async_open_port));
@@ -109,6 +110,10 @@ BIF_RETTYPE erts_internal_open_port_2(BIF_ALIST_2)
erts_add_link(&ERTS_P_LINKS(port), LINK_PID, BIF_P->common.id);
erts_add_link(&ERTS_P_LINKS(BIF_P), LINK_PID, port->common.id);
+ if (IS_TRACED_FL(BIF_P, F_TRACE_PROCS))
+ trace_proc(BIF_P, ERTS_PROC_LOCK_MAIN|ERTS_PROC_LOCK_LINK, BIF_P,
+ am_link, port->common.id);
+
erts_smp_proc_unlock(BIF_P, ERTS_PROC_LOCK_LINK);
erts_port_release(port);
@@ -339,8 +344,7 @@ BIF_RETTYPE erts_internal_port_close_1(BIF_ALIST_1)
if (!prt)
BIF_RET(am_badarg);
-
- switch (erts_port_exit(BIF_P, 0, prt, prt->common.id, am_normal, &ref)) {
+ switch (erts_port_exit(BIF_P, 0, prt, BIF_P->common.id, am_normal, &ref)) {
case ERTS_PORT_OP_CALLER_EXIT:
case ERTS_PORT_OP_BADARG:
case ERTS_PORT_OP_DROPPED:
@@ -373,7 +377,7 @@ BIF_RETTYPE erts_internal_port_connect_2(BIF_ALIST_2)
ref = NIL;
#endif
- switch (erts_port_connect(BIF_P, 0, prt, prt->common.id, BIF_ARG_2, &ref)) {
+ switch (erts_port_connect(BIF_P, 0, prt, BIF_P->common.id, BIF_ARG_2, &ref)) {
case ERTS_PORT_OP_CALLER_EXIT:
case ERTS_PORT_OP_BADARG:
case ERTS_PORT_OP_DROPPED:
@@ -823,7 +827,7 @@ open_port(Process* p, Eterm name, Eterm settings, int *err_typep, int *err_nump)
} else {
name_buf = (char *) erts_alloc(ERTS_ALC_T_TMP, i + 1);
if (intlist_to_buf(name, name_buf, i) != i)
- erl_exit(1, "%s:%d: Internal error\n", __FILE__, __LINE__);
+ erts_exit(ERTS_ERROR_EXIT, "%s:%d: Internal error\n", __FILE__, __LINE__);
name_buf[i] = '\0';
}
driver = &vanilla_driver;
@@ -911,7 +915,7 @@ open_port(Process* p, Eterm name, Eterm settings, int *err_typep, int *err_nump)
}
if (IS_TRACED_FL(p, F_TRACE_SCHED_PROCS)) {
- trace_virtual_sched(p, am_out);
+ trace_sched(p, ERTS_PROC_LOCK_MAIN, am_out);
}
@@ -928,21 +932,22 @@ open_port(Process* p, Eterm name, Eterm settings, int *err_typep, int *err_nump)
DTRACE3(port_open, process_str, name_buf, port_str);
}
#endif
+
+ if (port && IS_TRACED_FL(port, F_TRACE_PORTS))
+ trace_port(port, am_getting_linked, p->common.id);
+
erts_smp_proc_lock(p, ERTS_PROC_LOCK_MAIN);
+ if (IS_TRACED_FL(p, F_TRACE_SCHED_PROCS)) {
+ trace_sched(p, ERTS_PROC_LOCK_MAIN, am_in);
+ }
+
if (!port) {
DEBUGF(("open_driver returned (%d:%d)\n",
err_typep ? *err_typep : 4711,
err_nump ? *err_nump : 4711));
- if (IS_TRACED_FL(p, F_TRACE_SCHED_PROCS)) {
- trace_virtual_sched(p, am_in);
- }
goto do_return;
}
-
- if (IS_TRACED_FL(p, F_TRACE_SCHED_PROCS)) {
- trace_virtual_sched(p, am_in);
- }
if (linebuf && port->linebuf == NULL){
port->linebuf = allocate_linebuf(linebuf);
@@ -985,6 +990,8 @@ static char **convert_args(Eterm l)
}
n = erts_list_length(l);
+ if (n < 0)
+ return NULL;
/* We require at least one element in argv[0] + NULL at end */
pp = erts_alloc(ERTS_ALC_T_TMP, (n + 2) * sizeof(char **));
pp[i++] = erts_default_arg0;
@@ -1201,7 +1208,7 @@ static Eterm http_bld_uri(struct packet_callback_args* pca,
return erts_bld_tuple(hpp, szp, 3, am_scheme, s1, s2);
default:
- erl_exit(1, "%s, line %d: type=%u\n", __FILE__, __LINE__, uri->type);
+ erts_exit(ERTS_ERROR_EXIT, "%s, line %d: type=%u\n", __FILE__, __LINE__, uri->type);
}
}
diff --git a/erts/emulator/beam/erl_bif_re.c b/erts/emulator/beam/erl_bif_re.c
index 7f7cd376ac..ff7746ce1d 100644
--- a/erts/emulator/beam/erl_bif_re.c
+++ b/erts/emulator/beam/erl_bif_re.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.
@@ -630,9 +630,15 @@ static Eterm build_exec_return(Process *p, int rc, RestartContext *restartp, Ete
}
} else {
ReturnInfo *ri;
- ReturnInfo defri = {RetIndex,0,{0}};
+ ReturnInfo defri;
if (restartp->ret_info == NULL) {
+ /* OpenBSD 5.8 gcc compiler for some reason creates
+ bad code if the above initialization is done
+ inline with the struct. So don't do that. */
+ defri.type = RetIndex;
+ defri.num_spec = 0;
+ defri.v[0] = 0;
ri = &defri;
} else {
ri = restartp->ret_info;
diff --git a/erts/emulator/beam/erl_bif_trace.c b/erts/emulator/beam/erl_bif_trace.c
index 71a7079b09..66e5146da0 100644
--- a/erts/emulator/beam/erl_bif_trace.c
+++ b/erts/emulator/beam/erl_bif_trace.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.
@@ -52,7 +52,7 @@ static int erts_default_trace_pattern_is_on;
static Binary *erts_default_match_spec;
static Binary *erts_default_meta_match_spec;
static struct trace_pattern_flags erts_default_trace_pattern_flags;
-static Eterm erts_default_meta_tracer_pid;
+static ErtsTracer erts_default_meta_tracer;
static struct { /* Protected by code write permission */
int current;
@@ -68,6 +68,9 @@ static struct { /* Protected by code write permission */
static Eterm
trace_pattern(Process* p, Eterm MFA, Eterm Pattern, Eterm flaglist);
+static int
+erts_set_tracing_event_pattern(Eterm event, Binary*, int on);
+
#ifdef ERTS_SMP
static void smp_bp_finisher(void* arg);
#endif
@@ -75,11 +78,11 @@ static BIF_RETTYPE
system_monitor(Process *p, Eterm monitor_pid, Eterm list);
static void new_seq_trace_token(Process* p); /* help func for seq_trace_2*/
-static int already_traced(Process *p, Process *tracee_p, Eterm tracer);
-static int port_already_traced(Process *p, Port *tracee_port, Eterm tracer);
static Eterm trace_info_pid(Process* p, Eterm pid_spec, Eterm key);
static Eterm trace_info_func(Process* p, Eterm pid_spec, Eterm key);
static Eterm trace_info_on_load(Process* p, Eterm key);
+static Eterm trace_info_event(Process* p, Eterm event, Eterm key);
+
static void reset_bif_trace(void);
static void setup_bif_trace(void);
@@ -87,28 +90,34 @@ static void install_exp_breakpoints(BpFunctions* f);
static void uninstall_exp_breakpoints(BpFunctions* f);
static void clean_export_entries(BpFunctions* f);
+ErtsTracingEvent erts_send_tracing[ERTS_NUM_BP_IX];
+ErtsTracingEvent erts_receive_tracing[ERTS_NUM_BP_IX];
+
void
erts_bif_trace_init(void)
{
+ int i;
+
erts_default_trace_pattern_is_on = 0;
erts_default_match_spec = NULL;
erts_default_meta_match_spec = NULL;
erts_default_trace_pattern_flags = erts_trace_pattern_flags_off;
- erts_default_meta_tracer_pid = NIL;
+ erts_default_meta_tracer = erts_tracer_nil;
+
+ for (i=0; i<ERTS_NUM_BP_IX; i++) {
+ erts_send_tracing[i].on = 1;
+ erts_send_tracing[i].match_spec = NULL;
+ erts_receive_tracing[i].on = 1;
+ erts_receive_tracing[i].match_spec = NULL;
+ }
}
/*
* Turn on/off call tracing for the given function(s).
*/
-
-Eterm
-trace_pattern_2(BIF_ALIST_2)
-{
- return trace_pattern(BIF_P, BIF_ARG_1, BIF_ARG_2, NIL);
-}
Eterm
-trace_pattern_3(BIF_ALIST_3)
+erts_internal_trace_pattern_3(BIF_ALIST_3)
{
return trace_pattern(BIF_P, BIF_ARG_1, BIF_ARG_2, BIF_ARG_3);
}
@@ -125,11 +134,10 @@ trace_pattern(Process* p, Eterm MFA, Eterm Pattern, Eterm flaglist)
Eterm l;
struct trace_pattern_flags flags = erts_trace_pattern_flags_off;
int is_global;
- Process *meta_tracer_proc = p;
- Eterm meta_tracer_pid = p->common.id;
+ ErtsTracer meta_tracer = erts_tracer_nil;
if (!erts_try_seize_code_write_permission(p)) {
- ERTS_BIF_YIELD3(bif_export[BIF_trace_pattern_3], p, MFA, Pattern, flaglist);
+ ERTS_BIF_YIELD3(bif_export[BIF_erts_internal_trace_pattern_3], p, MFA, Pattern, flaglist);
}
finish_bp.current = -1;
@@ -146,45 +154,28 @@ trace_pattern(Process* p, Eterm MFA, Eterm Pattern, Eterm flaglist)
on = 1;
} else if (Pattern == am_restart) {
match_prog_set = NULL;
- on = erts_break_reset;
+ on = ERTS_BREAK_RESTART;
} else if (Pattern == am_pause) {
match_prog_set = NULL;
- on = erts_break_stop;
- } else if ((match_prog_set = erts_match_set_compile(p, Pattern)) != NULL) {
- MatchSetRef(match_prog_set);
- on = 1;
- } else{
- goto error;
+ on = ERTS_BREAK_PAUSE;
+ } else {
+ match_prog_set = erts_match_set_compile(p, Pattern, MFA);
+ if (match_prog_set) {
+ MatchSetRef(match_prog_set);
+ on = 1;
+ } else{
+ goto error;
+ }
}
is_global = 0;
for(l = flaglist; is_list(l); l = CDR(list_val(l))) {
if (is_tuple(CAR(list_val(l)))) {
- Eterm *tp = tuple_val(CAR(list_val(l)));
-
- if (arityval(tp[0]) != 2 || tp[1] != am_meta) {
- goto error;
- }
- meta_tracer_pid = tp[2];
- if (is_internal_pid(meta_tracer_pid)) {
- meta_tracer_proc = erts_pid2proc(NULL, 0, meta_tracer_pid, 0);
- if (!meta_tracer_proc) {
- goto error;
- }
- } else if (is_internal_port(meta_tracer_pid)) {
- Port *meta_tracer_port;
- meta_tracer_proc = NULL;
- meta_tracer_port = (erts_port_lookup(
- meta_tracer_pid,
- ERTS_PORT_SFLGS_INVALID_TRACER_LOOKUP));
- if (!meta_tracer_port)
- goto error;
- } else {
- goto error;
- }
- if (is_global) {
- goto error;
- }
+ meta_tracer = erts_term_to_tracer(am_meta, CAR(list_val(l)));
+ if (meta_tracer == THE_NON_VALUE) {
+ meta_tracer = erts_tracer_nil;
+ goto error;
+ }
flags.breakpoint = 1;
flags.meta = 1;
} else {
@@ -202,6 +193,8 @@ trace_pattern(Process* p, Eterm MFA, Eterm Pattern, Eterm flaglist)
}
flags.breakpoint = 1;
flags.meta = 1;
+ if (ERTS_TRACER_IS_NIL(meta_tracer))
+ meta_tracer = erts_term_to_tracer(THE_NON_VALUE, p->common.id);
break;
case am_global:
if (flags.breakpoint) {
@@ -252,14 +245,11 @@ trace_pattern(Process* p, Eterm MFA, Eterm Pattern, Eterm flaglist)
MatchSetUnref(erts_default_meta_match_spec);
erts_default_meta_match_spec = match_prog_set;
MatchSetRef(erts_default_meta_match_spec);
- erts_default_meta_tracer_pid = meta_tracer_pid;
- if (meta_tracer_proc) {
- ERTS_TRACE_FLAGS(meta_tracer_proc) |= F_TRACER;
- }
+ erts_tracer_update(&erts_default_meta_tracer, meta_tracer);
} else if (! flags.breakpoint) {
MatchSetUnref(erts_default_meta_match_spec);
erts_default_meta_match_spec = NULL;
- erts_default_meta_tracer_pid = NIL;
+ ERTS_TRACER_CLEAR(&erts_default_meta_tracer);
}
if (erts_default_trace_pattern_flags.breakpoint &&
flags.breakpoint) {
@@ -340,20 +330,23 @@ trace_pattern(Process* p, Eterm MFA, Eterm Pattern, Eterm flaglist)
if (is_small(mfa[2])) {
mfa[2] = signed_val(mfa[2]);
}
-
- if (meta_tracer_proc) {
- ERTS_TRACE_FLAGS(meta_tracer_proc) |= F_TRACER;
- }
matches = erts_set_trace_pattern(p, mfa, specified,
match_prog_set, match_prog_set,
- on, flags, meta_tracer_pid, 0);
+ on, flags, meta_tracer, 0);
+ } else if (is_atom(MFA)) {
+ if (is_global || flags.breakpoint || on > ERTS_BREAK_SET) {
+ goto error;
+ }
+ matches = erts_set_tracing_event_pattern(MFA, match_prog_set, on);
}
error:
MatchSetUnref(match_prog_set);
UnUseTmpHeap(3,p);
+ ERTS_TRACER_CLEAR(&meta_tracer);
+
#ifdef ERTS_SMP
if (finish_bp.current >= 0) {
ASSERT(matches >= 0);
@@ -404,7 +397,7 @@ erts_get_default_trace_pattern(int *trace_pattern_is_on,
Binary **match_spec,
Binary **meta_match_spec,
struct trace_pattern_flags *trace_pattern_flags,
- Eterm *meta_tracer_pid)
+ ErtsTracer *meta_tracer)
{
ERTS_SMP_LC_ASSERT(erts_has_code_write_permission() ||
erts_smp_thr_progress_is_blocking());
@@ -416,8 +409,8 @@ erts_get_default_trace_pattern(int *trace_pattern_is_on,
*meta_match_spec = erts_default_meta_match_spec;
if (trace_pattern_flags)
*trace_pattern_flags = erts_default_trace_pattern_flags;
- if (meta_tracer_pid)
- *meta_tracer_pid = erts_default_meta_tracer_pid;
+ if (meta_tracer)
+ *meta_tracer = erts_default_meta_tracer;
}
int erts_is_default_trace_enabled(void)
@@ -465,12 +458,12 @@ erts_trace_flag2bit(Eterm flag)
** occurred in the argument list.
*/
int
-erts_trace_flags(Eterm List,
- Uint *pMask, Eterm *pTracer, int *pCpuTimestamp)
+erts_trace_flags(Eterm List,
+ Uint *pMask, ErtsTracer *pTracer, int *pCpuTimestamp)
{
Eterm list = List;
Uint mask = 0;
- Eterm tracer = NIL;
+ ErtsTracer tracer = erts_tracer_nil;
int cpu_timestamp = 0;
while (is_list(list)) {
@@ -483,33 +476,72 @@ erts_trace_flags(Eterm List,
cpu_timestamp = !0;
#endif
} else if (is_tuple(item)) {
- Eterm* tp = tuple_val(item);
-
- if (arityval(tp[0]) != 2 || tp[1] != am_tracer) goto error;
- if (is_internal_pid(tp[2]) || is_internal_port(tp[2])) {
- tracer = tp[2];
- } else goto error;
+ tracer = erts_term_to_tracer(am_tracer, item);
+ if (tracer == THE_NON_VALUE)
+ goto error;
} else goto error;
list = CDR(list_val(list));
}
if (is_not_nil(list)) goto error;
- if (pMask && mask) *pMask = mask;
- if (pTracer && tracer != NIL) *pTracer = tracer;
- if (pCpuTimestamp && cpu_timestamp) *pCpuTimestamp = cpu_timestamp;
+ if (pMask && mask) *pMask = mask;
+ if (pTracer && !ERTS_TRACER_IS_NIL(tracer)) *pTracer = tracer;
+ if (pCpuTimestamp && cpu_timestamp) *pCpuTimestamp = cpu_timestamp;
return !0;
error:
return 0;
}
-Eterm trace_3(BIF_ALIST_3)
+static ERTS_INLINE int
+start_trace(Process *c_p, ErtsTracer tracer,
+ ErtsPTabElementCommon *common,
+ int on, int mask)
+{
+ /* We can use the common part of both port+proc without checking what it is
+ In the code below port is used for both proc and port */
+ Port *port = (Port*)common;
+
+ /*
+ * SMP build assumes that either system is blocked or:
+ * * main lock is held on c_p
+ * * all locks are held on port common
+ */
+
+ if (!ERTS_TRACER_IS_NIL(tracer)) {
+ if ((ERTS_TRACE_FLAGS(port) & TRACEE_FLAGS)
+ && !ERTS_TRACER_COMPARE(ERTS_TRACER(port), tracer)) {
+ /* This tracee is already being traced, and not by the
+ * tracer to be */
+ if (erts_is_tracer_enabled(tracer, common)) {
+ /* The tracer is still in use */
+ return 1;
+ }
+ /* Current tracer now invalid */
+ }
+ }
+
+ if (on)
+ ERTS_TRACE_FLAGS(port) |= mask;
+ else
+ ERTS_TRACE_FLAGS(port) &= ~mask;
+
+ if ((ERTS_TRACE_FLAGS(port) & TRACEE_FLAGS) == 0) {
+ tracer = erts_tracer_nil;
+ erts_tracer_replace(common, erts_tracer_nil);
+ } else if (!ERTS_TRACER_IS_NIL(tracer))
+ erts_tracer_replace(common, tracer);
+
+ return 0;
+}
+
+Eterm erts_internal_trace_3(BIF_ALIST_3)
{
Process* p = BIF_P;
Eterm pid_spec = BIF_ARG_1;
Eterm how = BIF_ARG_2;
Eterm list = BIF_ARG_3;
int on;
- Eterm tracer = NIL;
+ ErtsTracer tracer = erts_tracer_nil;
int matches = 0;
Uint mask = 0;
int cpu_ts = 0;
@@ -522,41 +554,24 @@ Eterm trace_3(BIF_ALIST_3)
}
if (!erts_try_seize_code_write_permission(BIF_P)) {
- ERTS_BIF_YIELD3(bif_export[BIF_trace_3], BIF_P, BIF_ARG_1, BIF_ARG_2, BIF_ARG_3);
+ ERTS_BIF_YIELD3(bif_export[BIF_erts_internal_trace_3],
+ BIF_P, BIF_ARG_1, BIF_ARG_2, BIF_ARG_3);
}
- if (is_nil(tracer) || is_internal_pid(tracer)) {
- Process *tracer_proc = erts_pid2proc(p,
- ERTS_PROC_LOCK_MAIN,
- is_nil(tracer) ? p->common.id : tracer,
- ERTS_PROC_LOCKS_ALL);
- if (!tracer_proc)
- goto error;
- ERTS_TRACE_FLAGS(tracer_proc) |= F_TRACER;
- erts_smp_proc_unlock(tracer_proc,
- (tracer_proc == p
- ? ERTS_PROC_LOCKS_ALL_MINOR
- : ERTS_PROC_LOCKS_ALL));
- } else if (is_internal_port(tracer)) {
- Port *tracer_port = erts_id2port_sflgs(tracer,
- p,
- ERTS_PROC_LOCK_MAIN,
- ERTS_PORT_SFLGS_INVALID_TRACER_LOOKUP);
- if (!tracer_port)
- goto error;
- ERTS_TRACE_FLAGS(tracer_port) |= F_TRACER;
- erts_port_release(tracer_port);
- } else
- goto error;
-
switch (how) {
case am_false:
on = 0;
break;
case am_true:
on = 1;
- if (is_nil(tracer))
- tracer = p->common.id;
+ if (ERTS_TRACER_IS_NIL(tracer))
+ tracer = erts_term_to_tracer(am_tracer, p->common.id);
+
+ if (tracer == THE_NON_VALUE) {
+ tracer = erts_tracer_nil;
+ goto error;
+ }
+
break;
default:
goto error;
@@ -575,34 +590,20 @@ Eterm trace_3(BIF_ALIST_3)
}
#endif
- if (pid_spec == tracer)
- goto error;
-
tracee_port = erts_id2port_sflgs(pid_spec,
p,
ERTS_PROC_LOCK_MAIN,
ERTS_PORT_SFLGS_INVALID_LOOKUP);
+
if (!tracee_port)
goto error;
-
- if (tracer != NIL && port_already_traced(p, tracee_port, tracer)) {
+
+ if (start_trace(p, tracer, &tracee_port->common, on, mask)) {
erts_port_release(tracee_port);
goto already_traced;
- }
-
- if (on)
- ERTS_TRACE_FLAGS(tracee_port) |= mask;
- else
- ERTS_TRACE_FLAGS(tracee_port) &= ~mask;
-
- if (!ERTS_TRACE_FLAGS(tracee_port))
- ERTS_TRACER_PROC(tracee_port) = NIL;
- else if (tracer != NIL)
- ERTS_TRACER_PROC(tracee_port) = tracer;
-
- erts_port_release(tracee_port);
-
- matches = 1;
+ }
+ erts_port_release(tracee_port);
+ matches = 1;
} else if (is_pid(pid_spec)) {
Process *tracee_p;
@@ -615,33 +616,19 @@ Eterm trace_3(BIF_ALIST_3)
* and not about to be tracing.
*/
- if (pid_spec == tracer)
- goto error;
-
tracee_p = erts_pid2proc(p, ERTS_PROC_LOCK_MAIN,
pid_spec, ERTS_PROC_LOCKS_ALL);
if (!tracee_p)
goto error;
- if (tracer != NIL && already_traced(p, tracee_p, tracer)) {
+ if (start_trace(tracee_p, tracer, &tracee_p->common, on, mask)) {
erts_smp_proc_unlock(tracee_p,
(tracee_p == p
? ERTS_PROC_LOCKS_ALL_MINOR
: ERTS_PROC_LOCKS_ALL));
goto already_traced;
- }
-
- if (on)
- ERTS_TRACE_FLAGS(tracee_p) |= mask;
- else
- ERTS_TRACE_FLAGS(tracee_p) &= ~mask;
-
- if ((ERTS_TRACE_FLAGS(tracee_p) & TRACEE_FLAGS) == 0)
- ERTS_TRACER_PROC(tracee_p) = NIL;
- else if (tracer != NIL)
- ERTS_TRACER_PROC(tracee_p) = tracer;
-
- erts_smp_proc_unlock(tracee_p,
+ }
+ erts_smp_proc_unlock(tracee_p,
(tracee_p == p
? ERTS_PROC_LOCKS_ALL_MINOR
: ERTS_PROC_LOCKS_ALL));
@@ -692,18 +679,27 @@ Eterm trace_3(BIF_ALIST_3)
}
#endif
- if (pid_spec == am_all || pid_spec == am_existing) {
+ if (pid_spec == am_all || pid_spec == am_existing ||
+ pid_spec == am_ports || pid_spec == am_processes ||
+ pid_spec == am_existing_ports || pid_spec == am_existing_processes
+ ) {
int i;
int procs = 0;
int ports = 0;
int mods = 0;
if (mask & (ERTS_PROC_TRACEE_FLAGS & ~ERTS_TRACEE_MODIFIER_FLAGS))
- procs = 1;
+ procs = pid_spec != am_ports && pid_spec != am_existing_ports;
if (mask & (ERTS_PORT_TRACEE_FLAGS & ~ERTS_TRACEE_MODIFIER_FLAGS))
- ports = 1;
- if (mask & ERTS_TRACEE_MODIFIER_FLAGS)
- mods = 1;
+ ports = pid_spec != am_processes && pid_spec != am_existing_processes;
+ if (mask & ERTS_TRACEE_MODIFIER_FLAGS) {
+ if (pid_spec == am_ports || pid_spec == am_existing_ports)
+ ports = 1;
+ else if (pid_spec == am_processes || pid_spec == am_existing_processes)
+ procs = 1;
+ else
+ mods = 1;
+ }
#ifdef ERTS_SMP
erts_smp_proc_unlock(p, ERTS_PROC_LOCK_MAIN);
@@ -719,22 +715,7 @@ Eterm trace_3(BIF_ALIST_3)
Process* tracee_p = erts_pix2proc(i);
if (! tracee_p)
continue;
- if (tracer != NIL) {
- if (tracee_p->common.id == tracer)
- continue;
- if (already_traced(NULL, tracee_p, tracer))
- continue;
- }
- if (on) {
- ERTS_TRACE_FLAGS(tracee_p) |= mask;
- } else {
- ERTS_TRACE_FLAGS(tracee_p) &= ~mask;
- }
- if(!(ERTS_TRACE_FLAGS(tracee_p) & TRACEE_FLAGS)) {
- ERTS_TRACER_PROC(tracee_p) = NIL;
- } else if (tracer != NIL) {
- ERTS_TRACER_PROC(tracee_p) = tracer;
- }
+ start_trace(p, tracer, &tracee_p->common, on, mask);
matches++;
}
}
@@ -749,33 +730,26 @@ Eterm trace_3(BIF_ALIST_3)
state = erts_atomic32_read_nob(&tracee_port->state);
if (state & ERTS_PORT_SFLGS_DEAD)
continue;
- if (tracer != NIL) {
- if (tracee_port->common.id == tracer)
- continue;
- if (port_already_traced(NULL, tracee_port, tracer))
- continue;
- }
-
- if (on) ERTS_TRACE_FLAGS(tracee_port) |= mask;
- else ERTS_TRACE_FLAGS(tracee_port) &= ~mask;
-
- if (!(ERTS_TRACE_FLAGS(tracee_port) & TRACEE_FLAGS)) {
- ERTS_TRACER_PROC(tracee_port) = NIL;
- } else if (tracer != NIL) {
- ERTS_TRACER_PROC(tracee_port) = tracer;
- }
- /* matches are not counted for ports since it would violate compatibility */
- /* This could be a reason to modify this function or make a new one. */
+ start_trace(p, tracer, &tracee_port->common, on, mask);
+ matches++;
}
}
}
- if (pid_spec == am_all || pid_spec == am_new) {
- Uint def_flags = mask;
- Eterm def_tracer = tracer;
+ if (pid_spec == am_all || pid_spec == am_new
+ || pid_spec == am_ports || pid_spec == am_processes
+ || pid_spec == am_new_ports || pid_spec == am_new_processes
+ ) {
ok = 1;
- erts_change_default_tracing(on, &def_flags, &def_tracer);
+ if (mask & ERTS_PROC_TRACEE_FLAGS &&
+ pid_spec != am_ports && pid_spec != am_new_ports)
+ erts_change_default_proc_tracing(
+ on, mask & ERTS_PROC_TRACEE_FLAGS, tracer);
+ if (mask & ERTS_PORT_TRACEE_FLAGS &&
+ pid_spec != am_processes && pid_spec != am_new_processes)
+ erts_change_default_port_tracing(
+ on, mask & ERTS_PORT_TRACEE_FLAGS, tracer);
#ifdef HAVE_ERTS_NOW_CPU
if (cpu_ts && !on) {
@@ -801,6 +775,7 @@ Eterm trace_3(BIF_ALIST_3)
}
#endif
erts_release_code_write_permission();
+ ERTS_TRACER_CLEAR(&tracer);
BIF_RET(make_small(matches));
@@ -810,6 +785,8 @@ Eterm trace_3(BIF_ALIST_3)
error:
+ ERTS_TRACER_CLEAR(&tracer);
+
#ifdef ERTS_SMP
if (system_blocked) {
erts_smp_thr_progress_unblock();
@@ -821,88 +798,6 @@ Eterm trace_3(BIF_ALIST_3)
BIF_ERROR(p, BADARG);
}
-/* Check that the process to be traced is not already traced
- * by a valid other tracer than the tracer to be.
- */
-static int port_already_traced(Process *c_p, Port *tracee_port, Eterm tracer)
-{
- /*
- * SMP build assumes that either system is blocked or:
- * * main lock is held on c_p
- * * all locks are held on port tracee_p
- */
- if ((ERTS_TRACE_FLAGS(tracee_port) & TRACEE_FLAGS)
- && ERTS_TRACER_PROC(tracee_port) != tracer) {
- /* This tracee is already being traced, and not by the
- * tracer to be */
- if (is_internal_port(ERTS_TRACER_PROC(tracee_port))) {
- if (!erts_is_valid_tracer_port(ERTS_TRACER_PROC(tracee_port))) {
- /* Current trace port now invalid
- * - discard it and approve the new. */
- goto remove_tracer;
- } else
- return 1;
- }
- else if(is_internal_pid(ERTS_TRACER_PROC(tracee_port))) {
- Process *tracer_p = erts_proc_lookup(ERTS_TRACER_PROC(tracee_port));
- if (!tracer_p) {
- /* Current trace process now invalid
- * - discard it and approve the new. */
- goto remove_tracer;
- } else
- return 1;
- }
- else {
- remove_tracer:
- ERTS_TRACE_FLAGS(tracee_port) &= ~TRACEE_FLAGS;
- ERTS_TRACER_PROC(tracee_port) = NIL;
- }
- }
- return 0;
-}
-
-/* Check that the process to be traced is not already traced
- * by a valid other tracer than the tracer to be.
- */
-static int already_traced(Process *c_p, Process *tracee_p, Eterm tracer)
-{
- /*
- * SMP build assumes that either system is blocked or:
- * * main lock is held on c_p
- * * all locks multiple are held on tracee_p
- */
- if ((ERTS_TRACE_FLAGS(tracee_p) & TRACEE_FLAGS)
- && ERTS_TRACER_PROC(tracee_p) != tracer) {
- /* This tracee is already being traced, and not by the
- * tracer to be */
- if (is_internal_port(ERTS_TRACER_PROC(tracee_p))) {
- if (!erts_is_valid_tracer_port(ERTS_TRACER_PROC(tracee_p))) {
- /* Current trace port now invalid
- * - discard it and approve the new. */
- goto remove_tracer;
- } else
- return 1;
- }
- else if(is_internal_pid(ERTS_TRACER_PROC(tracee_p))) {
- Process *tracer_p;
-
- tracer_p = erts_proc_lookup(ERTS_TRACER_PROC(tracee_p));
- if (!tracer_p) {
- /* Current trace process now invalid
- * - discard it and approve the new. */
- goto remove_tracer;
- } else
- return 1;
- }
- else {
- remove_tracer:
- ERTS_TRACE_FLAGS(tracee_p) &= ~TRACEE_FLAGS;
- ERTS_TRACER_PROC(tracee_p) = NIL;
- }
- }
- return 0;
-}
-
/*
* Return information about a process or an external function being traced.
*/
@@ -920,7 +815,9 @@ Eterm trace_info_2(BIF_ALIST_2)
if (What == am_on_load) {
res = trace_info_on_load(p, Key);
- } else if (is_atom(What) || is_pid(What)) {
+ } else if (What == am_send || What == am_receive) {
+ res = trace_info_event(p, What, Key);
+ } else if (is_atom(What) || is_pid(What) || is_port(What)) {
res = trace_info_pid(p, What, Key);
} else if (is_tuple(What)) {
res = trace_info_func(p, What, Key);
@@ -936,41 +833,54 @@ static Eterm
trace_info_pid(Process* p, Eterm pid_spec, Eterm key)
{
Eterm tracer;
- Uint trace_flags;
+ Uint trace_flags = am_false;
Eterm* hp;
- if (pid_spec == am_new) {
- erts_get_default_tracing(&trace_flags, &tracer);
+ if (pid_spec == am_new || pid_spec == am_new_processes) {
+ ErtsTracer def_tracer;
+ erts_get_default_proc_tracing(&trace_flags, &def_tracer);
+ tracer = erts_tracer_to_term(p, def_tracer);
+ ERTS_TRACER_CLEAR(&def_tracer);
+ } else if (pid_spec == am_new_ports) {
+ ErtsTracer def_tracer;
+ erts_get_default_port_tracing(&trace_flags, &def_tracer);
+ tracer = erts_tracer_to_term(p, def_tracer);
+ ERTS_TRACER_CLEAR(&def_tracer);
+ } else if (is_internal_port(pid_spec)) {
+ Port *tracee;
+ tracee = erts_id2port_sflgs(pid_spec, p, ERTS_PROC_LOCK_MAIN,
+ ERTS_PORT_SFLGS_INVALID_LOOKUP);
+
+ if (!tracee)
+ return am_undefined;
+
+ if (!ERTS_TRACER_IS_NIL(ERTS_TRACER(tracee)))
+ erts_is_tracer_proc_enabled(NULL, 0, &tracee->common);
+
+ tracer = erts_tracer_to_term(p, ERTS_TRACER(tracee));
+ trace_flags = ERTS_TRACE_FLAGS(tracee);
+
+ erts_port_release(tracee);
+
} else if (is_internal_pid(pid_spec)) {
- Process *tracee;
- tracee = erts_pid2proc(p, ERTS_PROC_LOCK_MAIN,
- pid_spec, ERTS_PROC_LOCKS_ALL);
+ Process *tracee = erts_pid2proc_not_running(p, ERTS_PROC_LOCK_MAIN,
+ pid_spec, ERTS_PROC_LOCK_MAIN);
+
+ if (tracee == ERTS_PROC_LOCK_BUSY)
+ ERTS_BIF_YIELD2(bif_export[BIF_trace_info_2], p, pid_spec, key);
- if (!tracee) {
+ if (!tracee)
return am_undefined;
- } else {
- tracer = ERTS_TRACER_PROC(tracee);
- trace_flags = ERTS_TRACE_FLAGS(tracee);
- }
- if (is_internal_pid(tracer)) {
- if (!erts_proc_lookup(tracer)) {
- reset_tracer:
- ERTS_TRACE_FLAGS(tracee) &= ~TRACEE_FLAGS;
- trace_flags = ERTS_TRACE_FLAGS(tracee);
- tracer = ERTS_TRACER_PROC(tracee) = NIL;
- }
- }
- else if (is_internal_port(tracer)) {
- if (!erts_is_valid_tracer_port(tracer))
- goto reset_tracer;
- }
-#ifdef ERTS_SMP
- erts_smp_proc_unlock(tracee,
- (tracee == p
- ? ERTS_PROC_LOCKS_ALL_MINOR
- : ERTS_PROC_LOCKS_ALL));
-#endif
+ if (!ERTS_TRACER_IS_NIL(ERTS_TRACER(tracee)))
+ erts_is_tracer_proc_enabled(tracee, ERTS_PROC_LOCK_MAIN,
+ &tracee->common);
+
+ tracer = erts_tracer_to_term(p, ERTS_TRACER(tracee));
+ trace_flags = ERTS_TRACE_FLAGS(tracee);
+
+ if (tracee != p)
+ erts_smp_proc_unlock(tracee, ERTS_PROC_LOCK_MAIN);
} else if (is_external_pid(pid_spec)
&& external_pid_dist_entry(pid_spec) == erts_this_dist_entry) {
return am_undefined;
@@ -1024,8 +934,10 @@ trace_info_pid(Process* p, Eterm pid_spec, Eterm key)
HRelease(p,limit,hp+3);
return TUPLE2(hp, key, flag_list);
} else if (key == am_tracer) {
- hp = HAlloc(p, 3);
- return TUPLE2(hp, key, tracer); /* Local pid or port */
+ if (tracer == am_false)
+ tracer = NIL;
+ hp = HAlloc(p, 3);
+ return TUPLE2(hp, key, tracer);
} else {
goto error;
}
@@ -1054,11 +966,11 @@ trace_info_pid(Process* p, Eterm pid_spec, Eterm key)
*/
static int function_is_traced(Process *p,
Eterm mfa[3],
- Binary **ms, /* out */
- Binary **ms_meta, /* out */
- Eterm *tracer_pid_meta, /* out */
- Uint *count, /* out */
- Eterm *call_time) /* out */
+ Binary **ms, /* out */
+ Binary **ms_meta, /* out */
+ ErtsTracer *tracer_pid_meta, /* out */
+ Uint *count, /* out */
+ Eterm *call_time) /* out */
{
Export e;
Export* ep;
@@ -1123,7 +1035,7 @@ trace_info_func(Process* p, Eterm func_spec, Eterm key)
Eterm traced = am_false;
Eterm match_spec = am_false;
Eterm retval = am_false;
- Eterm meta = am_false;
+ ErtsTracer meta = erts_tracer_nil;
Eterm call_time = NIL;
int r;
@@ -1193,7 +1105,10 @@ trace_info_func(Process* p, Eterm func_spec, Eterm key)
retval = match_spec;
break;
case am_meta:
- retval = meta;
+ retval = erts_tracer_to_term(p, meta);
+ if (retval == am_false)
+ /* backwards compatibility */
+ retval = NIL;
break;
case am_meta_match_spec:
if (r & FUNC_TRACE_META_TRACE) {
@@ -1216,7 +1131,8 @@ trace_info_func(Process* p, Eterm func_spec, Eterm key)
}
break;
case am_all: {
- Eterm match_spec_meta = am_false, c = am_false, t, ct = am_false;
+ Eterm match_spec_meta = am_false, c = am_false, t, ct = am_false,
+ m = am_false;
if (ms) {
match_spec = MatchSetGetSource(ms);
@@ -1235,6 +1151,9 @@ trace_info_func(Process* p, Eterm func_spec, Eterm key)
if (r & FUNC_TRACE_TIME_TRACE) {
ct = call_time;
}
+
+ m = erts_tracer_to_term(p, meta);
+
hp = HAlloc(p, (3+2)*6);
retval = NIL;
t = TUPLE2(hp, am_call_count, c); hp += 3;
@@ -1243,7 +1162,7 @@ trace_info_func(Process* p, Eterm func_spec, Eterm key)
retval = CONS(hp, t, retval); hp += 2;
t = TUPLE2(hp, am_meta_match_spec, match_spec_meta); hp += 3;
retval = CONS(hp, t, retval); hp += 2;
- t = TUPLE2(hp, am_meta, meta); hp += 3;
+ t = TUPLE2(hp, am_meta, m); hp += 3;
retval = CONS(hp, t, retval); hp += 2;
t = TUPLE2(hp, am_match_spec, match_spec); hp += 3;
retval = CONS(hp, t, retval); hp += 2;
@@ -1306,7 +1225,8 @@ trace_info_on_load(Process* p, Eterm key)
case am_meta:
hp = HAlloc(p, 3);
if (erts_default_trace_pattern_flags.meta) {
- return TUPLE2(hp, key, erts_default_meta_tracer_pid);
+ ASSERT(!ERTS_TRACER_IS_NIL(erts_default_meta_tracer));
+ return TUPLE2(hp, key, erts_tracer_to_term(p, erts_default_meta_tracer));
} else {
return TUPLE2(hp, key, am_false);
}
@@ -1345,7 +1265,7 @@ trace_info_on_load(Process* p, Eterm key)
}
case am_all:
{
- Eterm match_spec = am_false, meta_match_spec = am_false, r = NIL, t;
+ Eterm match_spec = am_false, meta_match_spec = am_false, r = NIL, t, m;
if (erts_default_trace_pattern_flags.local ||
(! erts_default_trace_pattern_flags.breakpoint)) {
@@ -1363,6 +1283,8 @@ trace_info_on_load(Process* p, Eterm key)
MatchSetGetSource(erts_default_meta_match_spec);
meta_match_spec = copy_object(meta_match_spec, p);
}
+ m = (erts_default_trace_pattern_flags.meta
+ ? erts_tracer_to_term(p, erts_default_meta_tracer) : am_false);
hp = HAlloc(p, (3+2)*5 + 3);
t = TUPLE2(hp, am_call_count,
(erts_default_trace_pattern_flags.call_count
@@ -1370,9 +1292,7 @@ trace_info_on_load(Process* p, Eterm key)
r = CONS(hp, t, r); hp += 2;
t = TUPLE2(hp, am_meta_match_spec, meta_match_spec); hp += 3;
r = CONS(hp, t, r); hp += 2;
- t = TUPLE2(hp, am_meta,
- (erts_default_trace_pattern_flags.meta
- ? erts_default_meta_tracer_pid : am_false)); hp += 3;
+ t = TUPLE2(hp, am_meta, m); hp += 3;
r = CONS(hp, t, r); hp += 2;
t = TUPLE2(hp, am_match_spec, match_spec); hp += 3;
r = CONS(hp, t, r); hp += 2;
@@ -1388,6 +1308,42 @@ trace_info_on_load(Process* p, Eterm key)
}
}
+static Eterm
+trace_info_event(Process* p, Eterm event, Eterm key)
+{
+ ErtsTracingEvent* te;
+ Eterm retval;
+ Eterm* hp;
+
+ switch (event) {
+ case am_send: te = erts_send_tracing; break;
+ case am_receive: te = erts_receive_tracing; break;
+ default:
+ goto error;
+ }
+
+ if (key != am_match_spec)
+ goto error;
+
+ te = &te[erts_active_bp_ix()];
+
+ if (te->on) {
+ if (!te->match_spec)
+ retval = am_true;
+ else
+ retval = copy_object(MatchSetGetSource(te->match_spec), p);
+ }
+ else
+ retval = am_false;
+
+ hp = HAlloc(p, 3);
+ return TUPLE2(hp, key, retval);
+
+ error:
+ BIF_ERROR(p, BADARG);
+}
+
+
#undef FUNC_TRACE_NOEXIST
#undef FUNC_TRACE_UNTRACED
#undef FUNC_TRACE_GLOBAL_TRACE
@@ -1397,7 +1353,7 @@ int
erts_set_trace_pattern(Process*p, Eterm* mfa, int specified,
Binary* match_prog_set, Binary *meta_match_prog_set,
int on, struct trace_pattern_flags flags,
- Eterm meta_tracer_pid, int is_blocking)
+ ErtsTracer meta_tracer, int is_blocking)
{
const ErtsCodeIndex code_ix = erts_active_code_ix();
int matches = 0;
@@ -1415,7 +1371,7 @@ erts_set_trace_pattern(Process*p, Eterm* mfa, int specified,
for (i = 0; i < n; i++) {
BeamInstr* pc = fp[i].pc;
- Export* ep = (Export *)(((char *)(pc-3)) - offsetof(Export, code));
+ Export* ep = ErtsContainerStruct(pc, Export, code[3]);
if (on && !flags.breakpoint) {
/* Turn on global call tracing */
@@ -1487,7 +1443,7 @@ erts_set_trace_pattern(Process*p, Eterm* mfa, int specified,
}
if (flags.meta) {
erts_set_mtrace_bif(pc, meta_match_prog_set,
- meta_tracer_pid);
+ meta_tracer);
m = 1;
}
if (flags.call_time) {
@@ -1527,7 +1483,7 @@ erts_set_trace_pattern(Process*p, Eterm* mfa, int specified,
}
if (flags.meta) {
erts_set_mtrace_break(&finish_bp.f, meta_match_prog_set,
- meta_tracer_pid);
+ meta_tracer);
}
if (flags.call_count) {
erts_set_count_break(&finish_bp.f, on);
@@ -1576,12 +1532,57 @@ erts_set_trace_pattern(Process*p, Eterm* mfa, int specified,
}
int
+erts_set_tracing_event_pattern(Eterm event, Binary* match_spec, int on)
+{
+ ErtsBpIndex ix = erts_staging_bp_ix();
+ ErtsTracingEvent* st;
+
+ switch (event) {
+ case am_send: st = &erts_send_tracing[ix]; break;
+ case am_receive: st = &erts_receive_tracing[ix]; break;
+ default: return -1;
+ }
+
+ MatchSetUnref(st->match_spec);
+
+ st->on = on;
+ st->match_spec = match_spec;
+ MatchSetRef(match_spec);
+
+ finish_bp.current = 1; /* prepare phase not needed for event trace */
+ finish_bp.install = on;
+ finish_bp.e.matched = 0;
+ finish_bp.e.matching = NULL;
+ finish_bp.f.matched = 0;
+ finish_bp.f.matching = NULL;
+
+#ifndef ERTS_SMP
+ while (erts_finish_breakpointing()) {
+ /* Empty loop body */
+ }
+#endif
+ return 1;
+}
+
+static void
+consolidate_event_tracing(ErtsTracingEvent te[])
+{
+ ErtsTracingEvent* src = &te[erts_active_bp_ix()];
+ ErtsTracingEvent* dst = &te[erts_staging_bp_ix()];
+
+ MatchSetUnref(dst->match_spec);
+ dst->on = src->on;
+ dst->match_spec = src->match_spec;
+ MatchSetRef(dst->match_spec);
+}
+
+int
erts_finish_breakpointing(void)
{
ERTS_SMP_LC_ASSERT(erts_has_code_write_permission());
/*
- * Memory barriers will be issued for all processes *before*
+ * Memory barriers will be issued for all schedulers *before*
* each of the stages below. (Unless the other schedulers
* are blocked, in which case memory barriers will be issued
* when they are awaken.)
@@ -1650,6 +1651,8 @@ erts_finish_breakpointing(void)
erts_consolidate_bp_data(&finish_bp.f, 1);
erts_bp_free_matched_functions(&finish_bp.e);
erts_bp_free_matched_functions(&finish_bp.f);
+ consolidate_event_tracing(erts_send_tracing);
+ consolidate_event_tracing(erts_receive_tracing);
return 0;
default:
ASSERT(0);
@@ -1664,11 +1667,10 @@ install_exp_breakpoints(BpFunctions* f)
BpFunction* fp = f->matching;
Uint ne = f->matched;
Uint i;
- Uint offset = offsetof(Export, code) + 3*sizeof(BeamInstr);
for (i = 0; i < ne; i++) {
BeamInstr* pc = fp[i].pc;
- Export* ep = (Export *) (((char *)pc)-offset);
+ Export* ep = ErtsContainerStruct(pc, Export, code[3]);
ep->addressv[code_ix] = pc;
}
@@ -1681,11 +1683,10 @@ uninstall_exp_breakpoints(BpFunctions* f)
BpFunction* fp = f->matching;
Uint ne = f->matched;
Uint i;
- Uint offset = offsetof(Export, code) + 3*sizeof(BeamInstr);
for (i = 0; i < ne; i++) {
BeamInstr* pc = fp[i].pc;
- Export* ep = (Export *) (((char *)pc)-offset);
+ Export* ep = ErtsContainerStruct(pc, Export, code[3]);
if (ep->addressv[code_ix] != pc) {
continue;
@@ -1702,11 +1703,10 @@ clean_export_entries(BpFunctions* f)
BpFunction* fp = f->matching;
Uint ne = f->matched;
Uint i;
- Uint offset = offsetof(Export, code) + 3*sizeof(BeamInstr);
for (i = 0; i < ne; i++) {
BeamInstr* pc = fp[i].pc;
- Export* ep = (Export *) (((char *)pc)-offset);
+ Export* ep = ErtsContainerStruct(pc, Export, code[3]);
if (ep->addressv[code_ix] == pc) {
continue;
@@ -2336,50 +2336,86 @@ BIF_RETTYPE system_profile_2(BIF_ALIST_2)
}
/* End: Trace for System Profiling */
-BIF_RETTYPE
-trace_delivered_1(BIF_ALIST_1)
+/* Trace delivered send an aux work message to all schedulers
+ and when all schedulers have acknowledged that they have seen
+ the message the message is sent to the requesting process.
+
+ IMPORTANT: We have to make sure that the all messages sent
+ using enif_send have been delivered before we send the message
+ to the caller.
+
+ There used to be a separate implementation for when only a pid
+ is passed in, but since this is not performance critical code
+ we now use the same approach for both.
+*/
+
+typedef struct {
+ Process *proc;
+ Eterm ref;
+ Eterm ref_heap[REF_THING_SIZE];
+ Eterm target;
+ erts_smp_atomic32_t refc;
+} ErtsTraceDeliveredAll;
+
+static void
+reply_trace_delivered_all(void *vtdarp)
{
- DECL_AM(trace_delivered);
-#ifdef ERTS_SMP
- ErlHeapFragment *bp;
-#else
- ErtsProcLocks locks = 0;
-#endif
- Eterm *hp;
- Eterm msg, ref, msg_ref;
- Process *p;
- if (BIF_ARG_1 == am_all) {
- p = NULL;
- } else if (! (p = erts_pid2proc(BIF_P, ERTS_PROC_LOCK_MAIN,
- BIF_ARG_1, ERTS_PROC_LOCKS_ALL))) {
- if (is_not_internal_pid(BIF_ARG_1)) {
- BIF_ERROR(BIF_P, BADARG);
- }
- }
-
- ref = erts_make_ref(BIF_P);
+ ErtsTraceDeliveredAll *tdarp = (ErtsTraceDeliveredAll *) vtdarp;
+ if (erts_smp_atomic32_dec_read_nob(&tdarp->refc) == 0) {
+ Eterm ref_copy, msg;
+ Process *rp = tdarp->proc;
+ Eterm *hp = NULL;
+ ErlOffHeap *ohp;
#ifdef ERTS_SMP
- bp = new_message_buffer(REF_THING_SIZE + 4);
- hp = &bp->mem[0];
- msg_ref = STORE_NC(&hp, &bp->off_heap, ref);
+ ErlHeapFragment *bp;
+ bp = new_message_buffer(4 + NC_HEAP_SIZE(tdarp->ref));
+ hp = &bp->mem[0];
+ ohp = &bp->off_heap;
#else
- hp = HAlloc(BIF_P, 4);
- msg_ref = ref;
+ ErtsProcLocks rp_locks = 0;
+ ErtsMessage *mp;
+ mp = erts_alloc_message_heap(
+ rp, &rp_locks, 4 + NC_HEAP_SIZE(tdarp->ref), &hp, &ohp);
#endif
- msg = TUPLE3(hp, AM_trace_delivered, BIF_ARG_1, msg_ref);
+ ref_copy = STORE_NC(&hp, ohp, tdarp->ref);
+ msg = TUPLE3(hp, am_trace_delivered, tdarp->target, ref_copy);
#ifdef ERTS_SMP
- erts_send_sys_msg_proc(BIF_P->common.id, BIF_P->common.id, msg, bp);
- if (p)
- erts_smp_proc_unlock(p,
- (BIF_P == p
- ? ERTS_PROC_LOCKS_ALL_MINOR
- : ERTS_PROC_LOCKS_ALL));
+ erts_send_sys_msg_proc(rp->common.id, rp->common.id, msg, bp);
#else
- erts_send_message(BIF_P, BIF_P, &locks, msg, ERTS_SND_FLG_NO_SEQ_TRACE);
+ erts_queue_message(rp, rp_locks, mp, msg, am_system);
#endif
- BIF_RET(ref);
+ erts_free(ERTS_ALC_T_MISC_AUX_WORK, vtdarp);
+ erts_proc_dec_refc(rp);
+ }
+}
+
+BIF_RETTYPE
+trace_delivered_1(BIF_ALIST_1)
+{
+
+ if (BIF_ARG_1 == am_all || is_internal_pid(BIF_ARG_1)) {
+ Eterm *hp, ref;
+ ErtsTraceDeliveredAll *tdarp =
+ erts_alloc(ERTS_ALC_T_MISC_AUX_WORK, sizeof(ErtsTraceDeliveredAll));
+
+ tdarp->proc = BIF_P;
+ ref = erts_make_ref(BIF_P);
+ hp = &tdarp->ref_heap[0];
+ tdarp->ref = STORE_NC(&hp, NULL, ref);
+ tdarp->target = BIF_ARG_1;
+ erts_smp_atomic32_init_nob(&tdarp->refc,
+ (erts_aint32_t) erts_no_schedulers);
+ erts_proc_add_refc(BIF_P, 1);
+ erts_schedule_multi_misc_aux_work(0,
+ erts_no_schedulers,
+ reply_trace_delivered_all,
+ (void *) tdarp);
+ BIF_RET(ref);
+ } else {
+ BIF_ERROR(BIF_P, BADARG);
+ }
}
diff --git a/erts/emulator/beam/erl_bif_unique.c b/erts/emulator/beam/erl_bif_unique.c
index c4a39b8897..7c70217d8d 100644
--- a/erts/emulator/beam/erl_bif_unique.c
+++ b/erts/emulator/beam/erl_bif_unique.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.
@@ -257,7 +257,7 @@ static ERTS_INLINE Eterm unique_integer_bif(Process *c_p, int positive)
Uint hsz;
Eterm *hp;
- esdp = ERTS_PROC_GET_SCHDATA(c_p);
+ esdp = erts_proc_sched_data(c_p);
thr_id = (Uint64) esdp->thr_id;
unique = esdp->unique++;
bld_unique_integer_term(NULL, &hsz, thr_id, unique, positive);
@@ -266,17 +266,19 @@ static ERTS_INLINE Eterm unique_integer_bif(Process *c_p, int positive)
}
Uint
-erts_raw_unique_integer_heap_size(Uint64 val[ERTS_UNIQUE_INT_RAW_VALUES])
+erts_raw_unique_integer_heap_size(Uint64 val[ERTS_UNIQUE_INT_RAW_VALUES],
+ int positive)
{
Uint sz;
- bld_unique_integer_term(NULL, &sz, val[0], val[1], 0);
+ bld_unique_integer_term(NULL, &sz, val[0], val[1], positive);
return sz;
}
Eterm
-erts_raw_make_unique_integer(Eterm **hpp, Uint64 val[ERTS_UNIQUE_INT_RAW_VALUES])
+erts_raw_make_unique_integer(Eterm **hpp, Uint64 val[ERTS_UNIQUE_INT_RAW_VALUES],
+ int positive)
{
- return bld_unique_integer_term(hpp, NULL, val[0], val[1], 0);
+ return bld_unique_integer_term(hpp, NULL, val[0], val[1], positive);
}
void
@@ -426,16 +428,16 @@ erts_raw_get_unique_monotonic_integer(void)
}
Uint
-erts_raw_unique_monotonic_integer_heap_size(Sint64 raw)
+erts_raw_unique_monotonic_integer_heap_size(Sint64 raw, int positive)
{
- return get_unique_monotonic_integer_heap_size(raw, 0);
+ return get_unique_monotonic_integer_heap_size(raw, positive);
}
Eterm
-erts_raw_make_unique_monotonic_integer_value(Eterm **hpp, Sint64 raw)
+erts_raw_make_unique_monotonic_integer_value(Eterm **hpp, Sint64 raw, int positive)
{
- Uint hsz = get_unique_monotonic_integer_heap_size(raw, 0);
- Eterm res = make_unique_monotonic_integer_value(*hpp, hsz, raw, 0);
+ Uint hsz = get_unique_monotonic_integer_heap_size(raw, positive);
+ Eterm res = make_unique_monotonic_integer_value(*hpp, hsz, raw, positive);
*hpp += hsz;
return res;
}
@@ -513,7 +515,7 @@ BIF_RETTYPE make_ref_0(BIF_ALIST_0)
hp = HAlloc(BIF_P, REF_THING_SIZE);
- res = erts_sched_make_ref_in_buffer(ERTS_PROC_GET_SCHDATA(BIF_P), hp);
+ res = erts_sched_make_ref_in_buffer(erts_proc_sched_data(BIF_P), hp);
BIF_RET(res);
}
diff --git a/erts/emulator/beam/erl_bif_unique.h b/erts/emulator/beam/erl_bif_unique.h
index 37d5d91c39..c6481864d0 100644
--- a/erts/emulator/beam/erl_bif_unique.h
+++ b/erts/emulator/beam/erl_bif_unique.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.
@@ -41,8 +41,9 @@ void erts_make_ref_in_array(Uint32 ref[ERTS_MAX_REF_NUMBERS]);
* not necessarily correspond to the end result.
*/
Sint64 erts_raw_get_unique_monotonic_integer(void);
-Uint erts_raw_unique_monotonic_integer_heap_size(Sint64 raw);
-Eterm erts_raw_make_unique_monotonic_integer_value(Eterm **hpp, Sint64 raw);
+Uint erts_raw_unique_monotonic_integer_heap_size(Sint64 raw, int positive);
+Eterm erts_raw_make_unique_monotonic_integer_value(Eterm **hpp, Sint64 raw,
+ int positive);
Sint64 erts_get_min_unique_monotonic_integer(void);
@@ -53,8 +54,11 @@ Eterm erts_debug_get_unique_monotonic_integer_state(Process *c_p);
#define ERTS_UNIQUE_INT_RAW_VALUES 2
#define ERTS_MAX_UNIQUE_INT_HEAP_SIZE ERTS_UINT64_ARRAY_TO_BIG_MAX_HEAP_SZ(2)
-Uint erts_raw_unique_integer_heap_size(Uint64 val[ERTS_UNIQUE_INT_RAW_VALUES]);
-Eterm erts_raw_make_unique_integer(Eterm **hpp, Uint64 val[ERTS_UNIQUE_INT_RAW_VALUES]);
+Uint erts_raw_unique_integer_heap_size(Uint64 val[ERTS_UNIQUE_INT_RAW_VALUES],
+ int positive);
+Eterm erts_raw_make_unique_integer(Eterm **hpp,
+ Uint64 val[ERTS_UNIQUE_INT_RAW_VALUES],
+ int postive);
void erts_raw_get_unique_integer(Uint64 val[ERTS_UNIQUE_INT_RAW_VALUES]);
Sint64 erts_get_min_unique_integer(void);
diff --git a/erts/emulator/beam/erl_binary.h b/erts/emulator/beam/erl_binary.h
index e181b5555d..fdc5efea98 100644
--- a/erts/emulator/beam/erl_binary.h
+++ b/erts/emulator/beam/erl_binary.h
@@ -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/erts/emulator/beam/erl_bits.c b/erts/emulator/beam/erl_bits.c
index 11d83686a3..6bf52fb303 100644
--- a/erts/emulator/beam/erl_bits.c
+++ b/erts/emulator/beam/erl_bits.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/erts/emulator/beam/erl_bits.h b/erts/emulator/beam/erl_bits.h
index 8b7807fbd9..4bd5b24157 100644
--- a/erts/emulator/beam/erl_bits.h
+++ b/erts/emulator/beam/erl_bits.h
@@ -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.
@@ -83,8 +83,8 @@ typedef struct erl_bin_match_struct{
#ifdef ERTS_SMP
/* the state resides in the current process' scheduler data */
#define ERL_BITS_DECLARE_STATEP struct erl_bits_state *EBS
-#define ERL_BITS_RELOAD_STATEP(P) do{EBS = &(P)->scheduler_data->erl_bits_state;}while(0)
-#define ERL_BITS_DEFINE_STATEP(P) struct erl_bits_state *EBS = &(P)->scheduler_data->erl_bits_state
+#define ERL_BITS_RELOAD_STATEP(P) do{EBS = &erts_proc_sched_data((P))->erl_bits_state;}while(0)
+#define ERL_BITS_DEFINE_STATEP(P) struct erl_bits_state *EBS = &erts_proc_sched_data((P))->erl_bits_state
#else
/* reentrant API but with a hidden single global state, for testing only */
extern struct erl_bits_state ErlBitsState_;
diff --git a/erts/emulator/beam/erl_cpu_topology.c b/erts/emulator/beam/erl_cpu_topology.c
index 8395f6ecc6..28aaeeb479 100644
--- a/erts/emulator/beam/erl_cpu_topology.c
+++ b/erts/emulator/beam/erl_cpu_topology.c
@@ -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.
@@ -402,7 +402,7 @@ cpu_bind_order_sort(erts_cpu_topology_t *cpudata,
break;
default:
cmp_func = NULL;
- erl_exit(ERTS_ABORT_EXIT,
+ erts_exit(ERTS_ABORT_EXIT,
"Bad cpu bind type: %d\n",
(int) cpu_bind_order);
break;
@@ -1590,7 +1590,7 @@ get_cpu_topology_term(Process *c_p, int type)
}
break;
default:
- erl_exit(ERTS_ABORT_EXIT, "Bad cpu topology type: %d\n", type);
+ erts_exit(ERTS_ABORT_EXIT, "Bad cpu topology type: %d\n", type);
break;
}
@@ -1967,7 +1967,7 @@ cpu_group_insert(erts_cpu_groups_map_t *map,
ix = 0;
} while (ix != start);
- erl_exit(ERTS_ABORT_EXIT, "Reader groups map full\n");
+ erts_exit(ERTS_ABORT_EXIT, "Reader groups map full\n");
}
@@ -2290,7 +2290,7 @@ remove_cpu_groups(erts_cpu_groups_callback_t callback, void *arg)
prev_cgm = cgm;
}
- erl_exit(ERTS_ABORT_EXIT, "Cpu groups not found\n");
+ erts_exit(ERTS_ABORT_EXIT, "Cpu groups not found\n");
}
static int
@@ -2320,7 +2320,7 @@ cpu_groups_lookup(erts_cpu_groups_map_t *map,
ix = 0;
} while (ix != start);
- erl_exit(ERTS_ABORT_EXIT, "Logical cpu id %d not found\n", logical);
+ erts_exit(ERTS_ABORT_EXIT, "Logical cpu id %d not found\n", logical);
}
static void
diff --git a/erts/emulator/beam/erl_cpu_topology.h b/erts/emulator/beam/erl_cpu_topology.h
index f3fbfc6da0..45324ac4a0 100644
--- a/erts/emulator/beam/erl_cpu_topology.h
+++ b/erts/emulator/beam/erl_cpu_topology.h
@@ -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/erts/emulator/beam/erl_db.c b/erts/emulator/beam/erl_db.c
index 55b8789e29..bad34211a5 100644
--- a/erts/emulator/beam/erl_db.c
+++ b/erts/emulator/beam/erl_db.c
@@ -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.
@@ -1295,7 +1295,7 @@ BIF_RETTYPE ets_rename_2(BIF_ALIST_2)
goto badarg;
if (!remove_named_tab(tb, 1))
- erl_exit(1,"Could not find named tab %s", tb->common.id);
+ erts_exit(ERTS_ERROR_EXIT,"Could not find named tab %s", tb->common.id);
tb->common.id = tb->common.the_name = BIF_ARG_2;
@@ -1580,7 +1580,7 @@ BIF_RETTYPE ets_new_2(BIF_ALIST_2)
BIF_P->common.id,
make_small(slot)),
0) != DB_ERROR_NONE) {
- erl_exit(1,"Could not update ets metadata.");
+ erts_exit(ERTS_ERROR_EXIT,"Could not update ets metadata.");
}
db_meta_unlock(meta_pid_to_tab, LCK_WRITE_REC);
@@ -2833,7 +2833,8 @@ BIF_RETTYPE ets_match_spec_run_r_3(BIF_ALIST_3)
BIF_TRAP3(bif_export[BIF_ets_match_spec_run_r_3],
BIF_P,lst,BIF_ARG_2,ret);
}
- res = db_prog_match(BIF_P, mp, CAR(list_val(lst)), NULL, 0,
+ res = db_prog_match(BIF_P, BIF_P,
+ mp, CAR(list_val(lst)), NULL, 0,
ERTS_PAM_COPY_RESULT, &dummy);
if (is_value(res)) {
hp = HAlloc(BIF_P, 2);
@@ -2933,7 +2934,7 @@ void init_db(ErtsDbSpinCount db_spin_count)
bits = erts_fit_in_bits_int32(db_max_tabs-1);
if (bits > SMALL_BITS) {
- erl_exit(1,"Max limit for ets tabled too high %u (max %u).",
+ erts_exit(ERTS_ERROR_EXIT,"Max limit for ets tabled too high %u (max %u).",
db_max_tabs, ((Uint)1)<<SMALL_BITS);
}
meta_main_tab_slot_mask = (((Uint)1)<<bits) - 1;
@@ -2994,7 +2995,7 @@ void init_db(ErtsDbSpinCount db_spin_count)
db_init_lock(meta_pid_to_tab, "meta_pid_to_tab", "meta_pid_to_tab_FIX");*/
if (db_create_hash(NULL, meta_pid_to_tab) != DB_ERROR_NONE) {
- erl_exit(1,"Unable to create ets metadata tables.");
+ erts_exit(ERTS_ERROR_EXIT,"Unable to create ets metadata tables.");
}
erts_smp_atomic_set_nob(&init_tb.common.memory_size, 0);
@@ -3025,7 +3026,7 @@ void init_db(ErtsDbSpinCount db_spin_count)
db_init_lock(meta_pid_to_fixed_tab, "meta_pid_to_fixed_tab", "meta_pid_to_fixed_tab_FIX");*/
if (db_create_hash(NULL, meta_pid_to_fixed_tab) != DB_ERROR_NONE) {
- erl_exit(1,"Unable to create ets metadata tables.");
+ erts_exit(ERTS_ERROR_EXIT,"Unable to create ets metadata tables.");
}
/* Non visual BIF to trap to. */
@@ -3222,7 +3223,7 @@ retry:
* yielding.
*/
#define ERTS_DB_INTERNAL_ERROR(LSTR) \
- erl_exit(ERTS_ABORT_EXIT, "%s:%d:erts_db_process_exiting(): " LSTR "\n", \
+ erts_exit(ERTS_ABORT_EXIT, "%s:%d:erts_db_process_exiting(): " LSTR "\n", \
__FILE__, __LINE__)
int
@@ -3461,7 +3462,7 @@ static void fix_table_locked(Process* p, DbTable* tb)
fix = tb->common.fixations;
if (fix == NULL) {
tb->common.time.monotonic
- = erts_get_monotonic_time(ERTS_PROC_GET_SCHDATA(p));
+ = erts_get_monotonic_time(erts_proc_sched_data(p));
tb->common.time.offset = erts_get_time_offset();
}
else {
@@ -3494,7 +3495,7 @@ static void fix_table_locked(Process* p, DbTable* tb)
make_small(tb->common.slot)),
0) != DB_ERROR_NONE) {
UnUseTmpHeap(3,p);
- erl_exit(1,"Could not insert ets metadata in safe_fixtable.");
+ erts_exit(ERTS_ERROR_EXIT,"Could not insert ets metadata in safe_fixtable.");
}
UnUseTmpHeap(3,p);
db_meta_unlock(meta_pid_to_fixed_tab, LCK_WRITE_REC);
diff --git a/erts/emulator/beam/erl_db.h b/erts/emulator/beam/erl_db.h
index a589af784c..1d26c49652 100644
--- a/erts/emulator/beam/erl_db.h
+++ b/erts/emulator/beam/erl_db.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.
diff --git a/erts/emulator/beam/erl_db_hash.c b/erts/emulator/beam/erl_db_hash.c
index cff65f244d..74979f984a 100644
--- a/erts/emulator/beam/erl_db_hash.c
+++ b/erts/emulator/beam/erl_db_hash.c
@@ -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.
@@ -3022,7 +3022,7 @@ void db_check_table_hash(DbTable *tbl)
if ((list = BUCKET(tb,j)) != 0) {
while (list != 0) {
if (!is_tuple(make_tuple(list->dbterm.tpl))) {
- erl_exit(1, "Bad term in slot %d of ets table", j);
+ erts_exit(ERTS_ERROR_EXIT, "Bad term in slot %d of ets table", j);
}
list = list->next;
}
diff --git a/erts/emulator/beam/erl_db_hash.h b/erts/emulator/beam/erl_db_hash.h
index 66d8ec71d9..e654363cd5 100644
--- a/erts/emulator/beam/erl_db_hash.h
+++ b/erts/emulator/beam/erl_db_hash.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.
diff --git a/erts/emulator/beam/erl_db_tree.c b/erts/emulator/beam/erl_db_tree.c
index 311b69d114..02d211a4bb 100644
--- a/erts/emulator/beam/erl_db_tree.c
+++ b/erts/emulator/beam/erl_db_tree.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.
@@ -1204,7 +1204,7 @@ static int db_select_count_continue_tree(Process *p,
tptr = tuple_val(continuation);
if (arityval(*tptr) != 5)
- erl_exit(1,"Internal error in ets:select_count/1");
+ erts_exit(ERTS_ERROR_EXIT,"Internal error in ets:select_count/1");
lastkey = tptr[2];
end_condition = tptr[3];
diff --git a/erts/emulator/beam/erl_db_tree.h b/erts/emulator/beam/erl_db_tree.h
index 6098387f5d..72749ead1e 100644
--- a/erts/emulator/beam/erl_db_tree.h
+++ b/erts/emulator/beam/erl_db_tree.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/erts/emulator/beam/erl_db_util.c b/erts/emulator/beam/erl_db_util.c
index 399be6058c..6732b708a8 100644
--- a/erts/emulator/beam/erl_db_util.c
+++ b/erts/emulator/beam/erl_db_util.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.
@@ -123,6 +123,9 @@ do { \
#define TermWords(t) (((t) / (sizeof(UWord)/sizeof(Eterm))) + !!((t) % (sizeof(UWord)/sizeof(Eterm))))
+#define add_dmc_err(EINFO, STR, VAR, TERM, SEV) \
+ vadd_dmc_err(EINFO, SEV, VAR, STR, TERM)
+
static ERTS_INLINE Process *
get_proc(Process *cp, Uint32 cp_locks, Eterm id, Uint32 id_locks)
@@ -135,21 +138,22 @@ get_proc(Process *cp, Uint32 cp_locks, Eterm id, Uint32 id_locks)
static Eterm
-set_tracee_flags(Process *tracee_p, Eterm tracer, Uint d_flags, Uint e_flags) {
+set_tracee_flags(Process *tracee_p, ErtsTracer tracer,
+ Uint d_flags, Uint e_flags) {
Eterm ret;
Uint flags;
- if (tracer == NIL) {
+ if (ERTS_TRACER_IS_NIL(tracer)) {
flags = ERTS_TRACE_FLAGS(tracee_p) & ~TRACEE_FLAGS;
} else {
flags = ((ERTS_TRACE_FLAGS(tracee_p) & ~d_flags) | e_flags);
- if (! flags) tracer = NIL;
+ if (! flags) tracer = erts_tracer_nil;
}
- ret = ((ERTS_TRACER_PROC(tracee_p) != tracer
+ ret = ((!ERTS_TRACER_COMPARE(ERTS_TRACER(tracee_p),tracer)
|| ERTS_TRACE_FLAGS(tracee_p) != flags)
? am_true
: am_false);
- ERTS_TRACER_PROC(tracee_p) = tracer;
+ erts_tracer_replace(&tracee_p->common, tracer);
ERTS_TRACE_FLAGS(tracee_p) = flags;
return ret;
}
@@ -163,40 +167,17 @@ set_tracee_flags(Process *tracee_p, Eterm tracer, Uint d_flags, Uint e_flags) {
** returns fail_term on failure. Fails if tracer pid or port is invalid.
*/
static Eterm
-set_match_trace(Process *tracee_p, Eterm fail_term, Eterm tracer,
+set_match_trace(Process *tracee_p, Eterm fail_term, ErtsTracer tracer,
Uint d_flags, Uint e_flags) {
- Eterm ret = fail_term;
- Process *tracer_p;
-
- ERTS_SMP_LC_ASSERT(ERTS_PROC_LOCKS_ALL ==
- erts_proc_lc_my_proc_locks(tracee_p));
-
- if (is_internal_pid(tracer)
- && (tracer_p =
- erts_pid2proc(tracee_p, ERTS_PROC_LOCKS_ALL,
- tracer, ERTS_PROC_LOCKS_ALL))) {
- if (tracee_p != tracer_p) {
- ret = set_tracee_flags(tracee_p, tracer, d_flags, e_flags);
- ERTS_TRACE_FLAGS(tracer_p) |= (ERTS_TRACE_FLAGS(tracee_p)
- ? F_TRACER
- : 0);
- erts_smp_proc_unlock(tracer_p, ERTS_PROC_LOCKS_ALL);
- }
- } else if (is_internal_port(tracer)) {
- Port *tracer_port =
- erts_id2port_sflgs(tracer,
- tracee_p,
- ERTS_PROC_LOCKS_ALL,
- ERTS_PORT_SFLGS_INVALID_TRACER_LOOKUP);
- if (tracer_port) {
- ret = set_tracee_flags(tracee_p, tracer, d_flags, e_flags);
- erts_port_release(tracer_port);
- }
- } else {
- ASSERT(is_nil(tracer));
- ret = set_tracee_flags(tracee_p, tracer, d_flags, e_flags);
- }
- return ret;
+
+ ERTS_SMP_LC_ASSERT(
+ ERTS_PROC_LOCKS_ALL == erts_proc_lc_my_proc_locks(tracee_p)
+ || erts_thr_progress_is_blocking());
+
+ if (ERTS_TRACER_IS_NIL(tracer)
+ || erts_is_tracer_enabled(tracer, &tracee_p->common))
+ return set_tracee_flags(tracee_p, tracer, d_flags, e_flags);
+ return fail_term;
}
/*
@@ -434,17 +415,27 @@ get_match_pseudo_process(Process *c_p, Uint heap_size)
{
ErtsMatchPseudoProcess *mpsp;
#ifdef ERTS_SMP
- mpsp = (ErtsMatchPseudoProcess *) c_p->scheduler_data->match_pseudo_process;
- if (mpsp)
+ ErtsSchedulerData *esdp;
+
+ esdp = c_p ? c_p->scheduler_data : erts_get_scheduler_data();
+
+ mpsp = esdp ? esdp->match_pseudo_process :
+ (ErtsMatchPseudoProcess*) erts_smp_tsd_get(match_pseudo_process_key);
+
+ if (mpsp) {
+ ASSERT(mpsp == erts_smp_tsd_get(match_pseudo_process_key));
+ ASSERT(mpsp->process.scheduler_data == esdp);
cleanup_match_pseudo_process(mpsp, 0);
+ }
else {
ASSERT(erts_smp_tsd_get(match_pseudo_process_key) == NULL);
mpsp = create_match_pseudo_process();
- c_p->scheduler_data->match_pseudo_process = (void *) mpsp;
+ if (esdp) {
+ esdp->match_pseudo_process = (void *) mpsp;
+ }
+ mpsp->process.scheduler_data = esdp;
erts_smp_tsd_set(match_pseudo_process_key, (void *) mpsp);
}
- ASSERT(mpsp == erts_smp_tsd_get(match_pseudo_process_key));
- mpsp->process.scheduler_data = c_p->scheduler_data;
#else
mpsp = match_pseudo_process;
cleanup_match_pseudo_process(mpsp, 0);
@@ -912,11 +903,7 @@ void db_match_dis(Binary *prog);
#define TRACE /* Nothing */
#define FENCE_PATTERN_SIZE 0
#endif
-static void add_dmc_err(DMCErrInfo *err_info,
- char *str,
- int variable,
- Eterm term,
- DMCErrorSeverity severity);
+static void vadd_dmc_err(DMCErrInfo*, DMCErrorSeverity, int var, const char *str, ...);
static Eterm dpm_array_to_list(Process *psp, Eterm *arr, int arity);
@@ -1012,12 +999,20 @@ Eterm erts_match_set_get_source(Binary *mpsp)
}
/* This one is for the tracing */
-Binary *erts_match_set_compile(Process *p, Eterm matchexpr) {
+Binary *erts_match_set_compile(Process *p, Eterm matchexpr, Eterm MFA) {
Binary *bin;
Uint sz;
Eterm *hp;
+ Uint flags;
+
+ switch (MFA) {
+ case am_receive: flags = DCOMP_TRACE; break;
+ case am_send: flags = DCOMP_TRACE | DCOMP_ALLOW_TRACE_OPS; break;
+ default:
+ flags = DCOMP_TRACE | DCOMP_CALL_TRACE | DCOMP_ALLOW_TRACE_OPS;
+ }
- bin = db_match_set_compile(p, matchexpr, DCOMP_TRACE);
+ bin = db_match_set_compile(p, matchexpr, flags);
if (bin != NULL) {
MatchProg *prog = Binary2MatchProg(bin);
sz = size_object(matchexpr);
@@ -1147,8 +1142,8 @@ Eterm db_match_set_lint(Process *p, Eterm matchexpr, Uint flags)
int i;
if (!is_list(matchexpr)) {
- add_dmc_err(err_info, "Match programs are not in a list.",
- -1, 0UL, dmcError);
+ add_dmc_err(err_info, "Match programs are not in a list.",
+ -1, 0UL, dmcError);
goto done;
}
num_heads = 0;
@@ -1156,9 +1151,8 @@ Eterm db_match_set_lint(Process *p, Eterm matchexpr, Uint flags)
++num_heads;
if (l != NIL) { /* proper list... */
- add_dmc_err(err_info, "Match programs are not in a proper "
- "list.",
- -1, 0UL, dmcError);
+ add_dmc_err(err_info, "Match programs are not in a proper list.",
+ -1, 0UL, dmcError);
goto done;
}
@@ -1225,30 +1219,37 @@ done:
return ret;
}
-Eterm erts_match_set_run(Process *p, Binary *mpsp,
- Eterm *args, int num_args,
- enum erts_pam_run_flags in_flags,
- Uint32 *return_flags)
+/* Returns
+ * am_false if no match or
+ * if {message,false} has been called,
+ * am_true if {message,_} has NOT been called or
+ * if {message,true} has been called,
+ * Msg if {message,Msg} has been called.
+ *
+ * If return value is_not_immed
+ * then erts_match_set_release_result_trace() must be called to release it.
+ */
+Eterm erts_match_set_run_trace(Process *c_p,
+ Process *self,
+ Binary *mpsp,
+ Eterm *args, int num_args,
+ enum erts_pam_run_flags in_flags,
+ Uint32 *return_flags)
{
Eterm ret;
- ret = db_prog_match(p, mpsp, NIL, args, num_args,
+ ret = db_prog_match(c_p, self, mpsp, NIL, args, num_args,
in_flags, return_flags);
-#if defined(HARDDEBUG)
- if (is_non_value(ret)) {
- erts_fprintf(stderr, "Failed\n");
- } else {
- erts_fprintf(stderr, "Returning : %T\n", ret);
+
+ ASSERT(!(is_non_value(ret) && *return_flags));
+
+ if (is_non_value(ret) || ret == am_false) {
+ erts_match_set_release_result(c_p);
+ return am_false;
}
-#endif
+ if (is_immed(ret))
+ erts_match_set_release_result(c_p);
return ret;
- /* Returns
- * THE_NON_VALUE if no match
- * am_false if {message,false} has been called,
- * am_true if {message,_} has not been called or
- * if {message,true} has been called,
- * Msg if {message,Msg} has been called.
- */
}
static Eterm erts_match_set_run_ets(Process *p, Binary *mpsp,
@@ -1257,7 +1258,8 @@ static Eterm erts_match_set_run_ets(Process *p, Binary *mpsp,
{
Eterm ret;
- ret = db_prog_match(p, mpsp, args, NULL, num_args,
+ ret = db_prog_match(p, p,
+ mpsp, args, NULL, num_args,
ERTS_PAM_COPY_RESULT,
return_flags);
#if defined(HARDDEBUG)
@@ -1753,7 +1755,9 @@ static Eterm dpm_array_to_list(Process *psp, Eterm *arr, int arity)
** the parameter 'arity' is only used if 'term' is actually an array,
** i.e. 'DCOMP_TRACE' was specified
*/
-Eterm db_prog_match(Process *c_p, Binary *bprog,
+Eterm db_prog_match(Process *c_p,
+ Process *self,
+ Binary *bprog,
Eterm term,
Eterm *termp,
int arity,
@@ -1766,10 +1770,10 @@ Eterm db_prog_match(Process *c_p, Binary *bprog,
Eterm *esp;
MatchVariable* variables;
BeamInstr *cp;
- UWord *pc = prog->text;
+ const UWord *pc = prog->text;
Eterm *ehp;
Eterm ret;
- Uint n = 0; /* To avoid warning. */
+ Uint n;
int i;
unsigned do_catch;
ErtsMatchPseudoProcess *mpsp;
@@ -1781,46 +1785,28 @@ Eterm db_prog_match(Process *c_p, Binary *bprog,
Eterm (*bif)(Process*, ...);
Eterm bif_args[3];
int fail_label;
- int atomic_trace;
#ifdef DMC_DEBUG
Uint *heap_fence;
Uint *stack_fence;
Uint save_op;
#endif /* DMC_DEBUG */
+ ERTS_UNDEF(n,0);
+ ERTS_UNDEF(current_scheduled,NULL);
+
+ ASSERT(c_p || !(in_flags & ERTS_PAM_COPY_RESULT));
+
mpsp = get_match_pseudo_process(c_p, prog->heap_size);
psp = &mpsp->process;
/* We need to lure the scheduler into believing in the pseudo process,
because of floating point exceptions. Do *after* mpsp is set!!! */
- esdp = ERTS_GET_SCHEDULER_DATA_FROM_PROC(c_p);
- ASSERT(esdp != NULL);
- current_scheduled = esdp->current_process;
+ esdp = erts_get_scheduler_data();
+ if (esdp)
+ current_scheduled = esdp->current_process;
/* SMP: psp->scheduler_data is set by get_match_pseudo_process */
- atomic_trace = 0;
-#define BEGIN_ATOMIC_TRACE(p) \
- do { \
- if (! atomic_trace) { \
- erts_refc_inc(&bprog->refc, 2); \
- erts_smp_proc_unlock((p), ERTS_PROC_LOCK_MAIN); \
- erts_smp_thr_progress_block(); \
- atomic_trace = !0; \
- } \
- } while (0)
-#define END_ATOMIC_TRACE(p) \
- do { \
- if (atomic_trace) { \
- erts_smp_thr_progress_unblock(); \
- erts_smp_proc_lock((p), ERTS_PROC_LOCK_MAIN); \
- if (erts_refc_dectest(&bprog->refc, 0) == 0) {\
- erts_bin_free(bprog); \
- } \
- atomic_trace = 0; \
- } \
- } while (0)
-
#ifdef DMC_DEBUG
save_op = 0;
heap_fence = (Eterm*)((char*) mpsp->u.heap + prog->stack_offset) - 1;
@@ -1862,11 +1848,11 @@ restart:
#ifdef DMC_DEBUG
if (*heap_fence != FENCE_PATTERN) {
- erl_exit(1, "Heap fence overwritten in db_prog_match after op "
+ erts_exit(ERTS_ERROR_EXIT, "Heap fence overwritten in db_prog_match after op "
"0x%08x, overwritten with 0x%08x.", save_op, *heap_fence);
}
if (*stack_fence != FENCE_PATTERN) {
- erl_exit(1, "Stack fence overwritten in db_prog_match after op "
+ erts_exit(ERTS_ERROR_EXIT, "Stack fence overwritten in db_prog_match after op "
"0x%08x, overwritten with 0x%08x.", save_op,
*stack_fence);
}
@@ -2279,7 +2265,7 @@ restart:
pc += n;
break;
case matchSelf:
- *esp++ = c_p->common.id;
+ *esp++ = self->common.id;
break;
case matchWaste:
--esp;
@@ -2289,6 +2275,7 @@ restart:
break;
case matchProcessDump: {
erts_dsprintf_buf_t *dsbufp = erts_create_tmp_dsbuf(0);
+ ASSERT(c_p == self);
print_process_info(ERTS_PRINT_DSBUF, (void *) dsbufp, c_p);
*esp++ = new_binary(build_proc, (byte *)dsbufp->str,
dsbufp->str_len);
@@ -2307,14 +2294,16 @@ restart:
*return_flags |= MATCH_SET_EXCEPTION_TRACE;
*esp++ = am_true;
break;
- case matchIsSeqTrace:
+ case matchIsSeqTrace:
+ ASSERT(c_p == self);
if (have_seqtrace(SEQ_TRACE_TOKEN(c_p)))
*esp++ = am_true;
else
*esp++ = am_false;
break;
case matchSetSeqToken:
- t = erts_seq_trace(c_p, esp[-1], esp[-2], 0);
+ ASSERT(c_p == self);
+ t = erts_seq_trace(c_p, esp[-1], esp[-2], 0);
if (is_non_value(t)) {
esp[-2] = FAIL_TERM;
} else {
@@ -2322,7 +2311,8 @@ restart:
}
--esp;
break;
- case matchSetSeqTokenFake:
+ case matchSetSeqTokenFake:
+ ASSERT(c_p == self);
t = seq_trace_fake(c_p, esp[-1]);
if (is_non_value(t)) {
esp[-2] = FAIL_TERM;
@@ -2331,7 +2321,8 @@ restart:
}
--esp;
break;
- case matchGetSeqToken:
+ case matchGetSeqToken:
+ ASSERT(c_p == self);
if (have_no_seqtrace(SEQ_TRACE_TOKEN(c_p)))
*esp++ = NIL;
else {
@@ -2355,49 +2346,62 @@ restart:
ASSERT(is_immed(ehp[5]));
}
break;
- case matchEnableTrace:
+ case matchEnableTrace:
+ ASSERT(c_p == self);
if ( (n = erts_trace_flag2bit(esp[-1]))) {
- BEGIN_ATOMIC_TRACE(c_p);
- set_tracee_flags(c_p, ERTS_TRACER_PROC(c_p), 0, n);
+ erts_smp_proc_lock(c_p, ERTS_PROC_LOCKS_ALL_MINOR);
+ set_tracee_flags(c_p, ERTS_TRACER(c_p), 0, n);
+ erts_smp_proc_unlock(c_p, ERTS_PROC_LOCKS_ALL_MINOR);
esp[-1] = am_true;
} else {
esp[-1] = FAIL_TERM;
}
break;
- case matchEnableTrace2:
+ case matchEnableTrace2:
+ ASSERT(c_p == self);
n = erts_trace_flag2bit((--esp)[-1]);
esp[-1] = FAIL_TERM;
if (n) {
- BEGIN_ATOMIC_TRACE(c_p);
- if ( (tmpp = get_proc(c_p, 0, esp[0], 0))) {
+ if ( (tmpp = get_proc(c_p, ERTS_PROC_LOCK_MAIN, esp[0], ERTS_PROC_LOCKS_ALL))) {
/* Always take over the tracer of the current process */
- set_tracee_flags(tmpp, ERTS_TRACER_PROC(c_p), 0, n);
- esp[-1] = am_true;
+ set_tracee_flags(tmpp, ERTS_TRACER(c_p), 0, n);
+ if (tmpp == c_p)
+ erts_smp_proc_unlock(tmpp, ERTS_PROC_LOCKS_ALL_MINOR);
+ else
+ erts_smp_proc_unlock(tmpp, ERTS_PROC_LOCKS_ALL);
+ esp[-1] = am_true;
}
}
break;
- case matchDisableTrace:
+ case matchDisableTrace:
+ ASSERT(c_p == self);
if ( (n = erts_trace_flag2bit(esp[-1]))) {
- BEGIN_ATOMIC_TRACE(c_p);
- set_tracee_flags(c_p, ERTS_TRACER_PROC(c_p), n, 0);
+ erts_smp_proc_lock(c_p, ERTS_PROC_LOCKS_ALL_MINOR);
+ set_tracee_flags(c_p, ERTS_TRACER(c_p), n, 0);
+ erts_smp_proc_unlock(c_p, ERTS_PROC_LOCKS_ALL_MINOR);
esp[-1] = am_true;
} else {
esp[-1] = FAIL_TERM;
}
break;
- case matchDisableTrace2:
+ case matchDisableTrace2:
+ ASSERT(c_p == self);
n = erts_trace_flag2bit((--esp)[-1]);
esp[-1] = FAIL_TERM;
if (n) {
- BEGIN_ATOMIC_TRACE(c_p);
- if ( (tmpp = get_proc(c_p, 0, esp[0], 0))) {
+ if ( (tmpp = get_proc(c_p, ERTS_PROC_LOCK_MAIN, esp[0], ERTS_PROC_LOCKS_ALL))) {
/* Always take over the tracer of the current process */
- set_tracee_flags(tmpp, ERTS_TRACER_PROC(c_p), n, 0);
- esp[-1] = am_true;
+ set_tracee_flags(tmpp, ERTS_TRACER(c_p), n, 0);
+ if (tmpp == c_p)
+ erts_smp_proc_unlock(tmpp, ERTS_PROC_LOCKS_ALL_MINOR);
+ else
+ erts_smp_proc_unlock(tmpp, ERTS_PROC_LOCKS_ALL);
+ esp[-1] = am_true;
}
}
break;
- case matchCaller:
+ case matchCaller:
+ ASSERT(c_p == self);
if (!(c_p->cp) || !(cp = find_function_from_pc(c_p->cp))) {
*esp++ = am_undefined;
} else {
@@ -2409,7 +2413,8 @@ restart:
ehp[3] = make_small((Uint) cp[2]);
}
break;
- case matchSilent:
+ case matchSilent:
+ ASSERT(c_p == self);
--esp;
if (in_flags & ERTS_PAM_IGNORE_TRACE_SILENT)
break;
@@ -2424,11 +2429,12 @@ restart:
erts_smp_proc_unlock(c_p, ERTS_PROC_LOCKS_ALL_MINOR);
}
break;
- case matchTrace2:
+ case matchTrace2:
+ ASSERT(c_p == self);
{
/* disable enable */
Uint d_flags = 0, e_flags = 0; /* process trace flags */
- Eterm tracer = ERTS_TRACER_PROC(c_p);
+ ErtsTracer tracer = erts_tracer_nil;
/* XXX Atomicity note: Not fully atomic. Default tracer
* is sampled from current process but applied to
* tracee and tracer later after releasing main
@@ -2440,29 +2446,35 @@ restart:
* {trace,[],[{{tracer,Tracer}}]} is much, much older.
*/
int cputs = 0;
+ erts_tracer_update(&tracer, ERTS_TRACER(c_p));
if (! erts_trace_flags(esp[-1], &d_flags, &tracer, &cputs) ||
! erts_trace_flags(esp[-2], &e_flags, &tracer, &cputs) ||
cputs ) {
(--esp)[-1] = FAIL_TERM;
+ ERTS_TRACER_CLEAR(&tracer);
break;
}
erts_smp_proc_lock(c_p, ERTS_PROC_LOCKS_ALL_MINOR);
(--esp)[-1] = set_match_trace(c_p, FAIL_TERM, tracer,
d_flags, e_flags);
erts_smp_proc_unlock(c_p, ERTS_PROC_LOCKS_ALL_MINOR);
+ ERTS_TRACER_CLEAR(&tracer);
}
break;
- case matchTrace3:
+ case matchTrace3:
+ ASSERT(c_p == self);
{
/* disable enable */
Uint d_flags = 0, e_flags = 0; /* process trace flags */
- Eterm tracer = ERTS_TRACER_PROC(c_p);
+ ErtsTracer tracer = erts_tracer_nil;
/* XXX Atomicity note. Not fully atomic. See above.
* Above it could possibly be solved, but not here.
*/
int cputs = 0;
Eterm tracee = (--esp)[0];
+
+ erts_tracer_update(&tracer, ERTS_TRACER(c_p));
if (! erts_trace_flags(esp[-1], &d_flags, &tracer, &cputs) ||
! erts_trace_flags(esp[-2], &e_flags, &tracer, &cputs) ||
@@ -2470,6 +2482,7 @@ restart:
! (tmpp = get_proc(c_p, ERTS_PROC_LOCK_MAIN,
tracee, ERTS_PROC_LOCKS_ALL))) {
(--esp)[-1] = FAIL_TERM;
+ ERTS_TRACER_CLEAR(&tracer);
break;
}
if (tmpp == c_p) {
@@ -2483,6 +2496,7 @@ restart:
erts_smp_proc_unlock(tmpp, ERTS_PROC_LOCKS_ALL);
erts_smp_proc_lock(c_p, ERTS_PROC_LOCK_MAIN);
}
+ ERTS_TRACER_CLEAR(&tracer);
}
break;
case matchCatch: /* Match success, now build result */
@@ -2495,7 +2509,7 @@ restart:
case matchHalt:
goto success;
default:
- erl_exit(1, "Internal error: unexpected opcode in match program.");
+ erts_exit(ERTS_ERROR_EXIT, "Internal error: unexpected opcode in match program.");
}
}
fail:
@@ -2512,25 +2526,22 @@ success:
#ifdef DMC_DEBUG
if (*heap_fence != FENCE_PATTERN) {
- erl_exit(1, "Heap fence overwritten in db_prog_match after op "
+ erts_exit(ERTS_ERROR_EXIT, "Heap fence overwritten in db_prog_match after op "
"0x%08x, overwritten with 0x%08x.", save_op, *heap_fence);
}
if (*stack_fence != FENCE_PATTERN) {
- erl_exit(1, "Stack fence overwritten in db_prog_match after op "
+ erts_exit(ERTS_ERROR_EXIT, "Stack fence overwritten in db_prog_match after op "
"0x%08x, overwritten with 0x%08x.", save_op,
*stack_fence);
}
#endif
- esdp->current_process = current_scheduled;
-
- END_ATOMIC_TRACE(c_p);
+ if (esdp)
+ esdp->current_process = current_scheduled;
return ret;
#undef FAIL
#undef FAIL_TERM
-#undef BEGIN_ATOMIC_TRACE
-#undef END_ATOMIC_TRACE
}
@@ -3275,20 +3286,20 @@ int erts_db_is_compiled_ms(Eterm term)
** Utility to add an error
*/
-static void add_dmc_err(DMCErrInfo *err_info,
- char *str,
- int variable,
- Eterm term,
- DMCErrorSeverity severity)
+static void vadd_dmc_err(DMCErrInfo *err_info,
+ DMCErrorSeverity severity,
+ int variable,
+ const char *str,
+ ...)
{
+ DMCError *e;
+ va_list args;
+ va_start(args, str);
+
+
/* Linked in in reverse order, to ease the formatting */
- DMCError *e = erts_alloc(ERTS_ALC_T_DB_DMC_ERROR, sizeof(DMCError));
- if (term != 0UL) {
- erts_snprintf(e->error_string, DMC_ERR_STR_LEN, str, term);
- } else {
- strncpy(e->error_string, str, DMC_ERR_STR_LEN);
- e->error_string[DMC_ERR_STR_LEN] ='\0';
- }
+ e = erts_alloc(ERTS_ALC_T_DB_DMC_ERROR, sizeof(DMCError));
+ erts_vsnprintf(e->error_string, DMC_ERR_STR_LEN, str, args);
e->variable = variable;
e->severity = severity;
e->next = err_info->first;
@@ -3298,8 +3309,11 @@ static void add_dmc_err(DMCErrInfo *err_info,
err_info->first = e;
if (severity >= dmcError)
err_info->error_added = 1;
+
+ va_end(args);
}
+
/*
** Handle one term in the match expression (not the guard)
*/
@@ -3448,7 +3462,7 @@ static DMCRet dmc_one_term(DMCContext *context,
break;
}
default:
- erl_exit(1, "db_match_compile: "
+ erts_exit(ERTS_ERROR_EXIT, "db_match_compile: "
"Bad object on heap: 0x%bex\n", c);
}
return retOk;
@@ -3498,24 +3512,21 @@ static void do_emit_constant(DMCContext *context, DMC_STACK_TYPE(UWord) *text,
context->stack_need = context->stack_used;
}
-#define RETURN_ERROR_X(String, X, Y, ContextP, ConstantF) \
-do { \
-if ((ContextP)->err_info != NULL) { \
- (ConstantF) = 0; \
- add_dmc_err((ContextP)->err_info, String, X, Y, dmcError); \
- return retOk; \
-} else \
- return retFail; \
-} while(0)
+#define RETURN_ERROR_X(VAR, ContextP, ConstantF, String, ARG) \
+ (((ContextP)->err_info != NULL) \
+ ? ((ConstantF) = 0, \
+ vadd_dmc_err((ContextP)->err_info, dmcError, VAR, String, ARG), \
+ retOk) \
+ : retFail)
#define RETURN_ERROR(String, ContextP, ConstantF) \
- RETURN_ERROR_X(String, -1, 0UL, ContextP, ConstantF)
+ return RETURN_ERROR_X(-1, ContextP, ConstantF, String, 0)
#define RETURN_VAR_ERROR(String, N, ContextP, ConstantF) \
- RETURN_ERROR_X(String, N, 0UL, ContextP, ConstantF)
+ return RETURN_ERROR_X(N, ContextP, ConstantF, String, 0)
#define RETURN_TERM_ERROR(String, T, ContextP, ConstantF) \
- RETURN_ERROR_X(String, -1, T, ContextP, ConstantF)
+ return RETURN_ERROR_X(-1, ContextP, ConstantF, String, T)
#define WARNING(String, ContextP) \
add_dmc_err((ContextP)->err_info, String, -1, 0UL, dmcWarning)
@@ -3781,7 +3792,7 @@ static DMCRet dmc_variable(DMCContext *context,
Uint n = db_is_variable(t);
if (n >= heap->vars_used || !heap->vars[n].is_bound) {
- RETURN_VAR_ERROR("Variable $%d is unbound.", n, context, *constant);
+ RETURN_VAR_ERROR("Variable $%%d is unbound.", n, context, *constant);
}
dmc_add_pushv_variant(context, heap, text, n);
@@ -4113,7 +4124,30 @@ static DMCRet dmc_exception_trace(DMCContext *context,
return retOk;
}
-
+static int check_trace(const char* op,
+ DMCContext *context,
+ int *constant,
+ int need_cflags,
+ int allow_in_guard,
+ DMCRet* retp)
+{
+ if (!(context->cflags & DCOMP_TRACE)) {
+ *retp = RETURN_ERROR_X(-1, context, *constant, "Special form '%s' "
+ "used in wrong dialect.", op);
+ return 0;
+ }
+ if ((context->cflags & need_cflags) != need_cflags) {
+ *retp = RETURN_ERROR_X(-1, context, *constant, "Special form '%s' "
+ "not allow for this trace event.", op);
+ return 0;
+ }
+ if (context->is_guard && !allow_in_guard) {
+ *retp = RETURN_ERROR_X(-1, context, *constant, "Special form '%s' "
+ "called in guard context.", op);
+ return 0;
+ }
+ return 1;
+}
static DMCRet dmc_is_seq_trace(DMCContext *context,
DMCHeap *heap,
@@ -4123,12 +4157,11 @@ static DMCRet dmc_is_seq_trace(DMCContext *context,
{
Eterm *p = tuple_val(t);
Uint a = arityval(*p);
+ DMCRet ret;
- if (!(context->cflags & DCOMP_TRACE)) {
- RETURN_ERROR("Special form 'is_seq_trace' used in wrong dialect.",
- context,
- *constant);
- }
+ if (!check_trace("is_seq_trace", context, constant, DCOMP_ALLOW_TRACE_OPS, 1, &ret))
+ return ret;
+
if (a != 1) {
RETURN_TERM_ERROR("Special form 'is_seq_trace' called with "
"arguments in %T.", t, context, *constant);
@@ -4152,16 +4185,8 @@ static DMCRet dmc_set_seq_token(DMCContext *context,
DMCRet ret;
int c;
-
- if (!(context->cflags & DCOMP_TRACE)) {
- RETURN_ERROR("Special form 'set_seq_token' used in wrong dialect.",
- context,
- *constant);
- }
- if (context->is_guard) {
- RETURN_ERROR("Special form 'set_seq_token' called in "
- "guard context.", context, *constant);
- }
+ if (!check_trace("set_seq_trace", context, constant, DCOMP_ALLOW_TRACE_OPS, 0, &ret))
+ return ret;
if (a != 3) {
RETURN_TERM_ERROR("Special form 'set_seq_token' called with wrong "
@@ -4198,16 +4223,11 @@ static DMCRet dmc_get_seq_token(DMCContext *context,
{
Eterm *p = tuple_val(t);
Uint a = arityval(*p);
+ DMCRet ret;
+
+ if (!check_trace("get_seq_token", context, constant, DCOMP_ALLOW_TRACE_OPS, 0, &ret))
+ return ret;
- if (!(context->cflags & DCOMP_TRACE)) {
- RETURN_ERROR("Special form 'get_seq_token' used in wrong dialect.",
- context,
- *constant);
- }
- if (context->is_guard) {
- RETURN_ERROR("Special form 'get_seq_token' called in "
- "guard context.", context, *constant);
- }
if (a != 1) {
RETURN_TERM_ERROR("Special form 'get_seq_token' called with "
"arguments in %T.", t, context,
@@ -4271,16 +4291,10 @@ static DMCRet dmc_process_dump(DMCContext *context,
{
Eterm *p = tuple_val(t);
Uint a = arityval(*p);
-
- if (!(context->cflags & DCOMP_TRACE)) {
- RETURN_ERROR("Special form 'process_dump' used in wrong dialect.",
- context,
- *constant);
- }
- if (context->is_guard) {
- RETURN_ERROR("Special form 'process_dump' called in "
- "guard context.", context, *constant);
- }
+ DMCRet ret;
+
+ if (!check_trace("process_dump", context, constant, DCOMP_ALLOW_TRACE_OPS, 0, &ret))
+ return ret;
if (a != 1) {
RETURN_TERM_ERROR("Special form 'process_dump' called with "
@@ -4304,17 +4318,8 @@ static DMCRet dmc_enable_trace(DMCContext *context,
DMCRet ret;
int c;
-
- if (!(context->cflags & DCOMP_TRACE)) {
- RETURN_ERROR("Special form 'enable_trace' used in wrong dialect.",
- context,
- *constant);
- }
- if (context->is_guard) {
- RETURN_ERROR("Special form 'enable_trace' called in guard context.",
- context,
- *constant);
- }
+ if (!check_trace("enable_trace", context, constant, DCOMP_ALLOW_TRACE_OPS, 0, &ret))
+ return ret;
switch (a) {
case 2:
@@ -4363,18 +4368,9 @@ static DMCRet dmc_disable_trace(DMCContext *context,
Uint a = arityval(*p);
DMCRet ret;
int c;
-
- if (!(context->cflags & DCOMP_TRACE)) {
- RETURN_ERROR("Special form 'disable_trace' used in wrong dialect.",
- context,
- *constant);
- }
- if (context->is_guard) {
- RETURN_ERROR("Special form 'disable_trace' called in guard context.",
- context,
- *constant);
- }
+ if (!check_trace("disable_trace", context, constant, DCOMP_ALLOW_TRACE_OPS, 0, &ret))
+ return ret;
switch (a) {
case 2:
@@ -4424,17 +4420,8 @@ static DMCRet dmc_trace(DMCContext *context,
DMCRet ret;
int c;
-
- if (!(context->cflags & DCOMP_TRACE)) {
- RETURN_ERROR("Special form 'trace' used in wrong dialect.",
- context,
- *constant);
- }
- if (context->is_guard) {
- RETURN_ERROR("Special form 'trace' called in guard context.",
- context,
- *constant);
- }
+ if (!check_trace("trace", context, constant, DCOMP_ALLOW_TRACE_OPS, 0, &ret))
+ return ret;
switch (a) {
case 3:
@@ -4495,16 +4482,11 @@ static DMCRet dmc_caller(DMCContext *context,
{
Eterm *p = tuple_val(t);
Uint a = arityval(*p);
+ DMCRet ret;
- if (!(context->cflags & DCOMP_TRACE)) {
- RETURN_ERROR("Special form 'caller' used in wrong dialect.",
- context,
- *constant);
- }
- if (context->is_guard) {
- RETURN_ERROR("Special form 'caller' called in "
- "guard context.", context, *constant);
- }
+ if (!check_trace("caller", context, constant,
+ (DCOMP_CALL_TRACE|DCOMP_ALLOW_TRACE_OPS), 0, &ret))
+ return ret;
if (a != 1) {
RETURN_TERM_ERROR("Special form 'caller' called with "
@@ -4530,15 +4512,8 @@ static DMCRet dmc_silent(DMCContext *context,
DMCRet ret;
int c;
- if (!(context->cflags & DCOMP_TRACE)) {
- RETURN_ERROR("Special form 'silent' used in wrong dialect.",
- context,
- *constant);
- }
- if (context->is_guard) {
- RETURN_ERROR("Special form 'silent' called in "
- "guard context.", context, *constant);
- }
+ if (!check_trace("silent", context, constant, DCOMP_ALLOW_TRACE_OPS, 0, &ret))
+ return ret;
if (a != 2) {
RETURN_TERM_ERROR("Special form 'silent' called with wrong "
@@ -4679,7 +4654,7 @@ static DMCRet dmc_fun(DMCContext *context,
DMC_PUSH(*text, matchCall3);
break;
default:
- erl_exit(1,"ets:match() internal error, "
+ erts_exit(ERTS_ERROR_EXIT,"ets:match() internal error, "
"guard with more than 3 arguments.");
}
DMC_PUSH(*text, (UWord) b->biff);
@@ -4959,7 +4934,7 @@ static Uint my_size_object(Eterm t)
tmp == am_const) {
sum += size_object(tuple_val(t)[2]);
} else {
- erl_exit(1,"Internal error, sizing unrecognized object in "
+ erts_exit(ERTS_ERROR_EXIT,"Internal error, sizing unrecognized object in "
"(d)ets:match compilation.");
}
break;
@@ -5004,7 +4979,7 @@ static Eterm my_copy_struct(Eterm t, Eterm **hp, ErlOffHeap* off_heap)
sz = size_object(b);
ret = copy_struct(b,sz,hp,off_heap);
} else {
- erl_exit(1, "Trying to constant-copy non constant expression "
+ erts_exit(ERTS_ERROR_EXIT, "Trying to constant-copy non constant expression "
"0x%bex in (d)ets:match compilation.", t);
}
} else {
@@ -5078,13 +5053,16 @@ static Eterm match_spec_test(Process *p, Eterm against, Eterm spec, int trace)
return THE_NON_VALUE;
}
if (trace) {
- lint_res = db_match_set_lint(p, spec, DCOMP_TRACE | DCOMP_FAKE_DESTRUCTIVE);
- mps = db_match_set_compile(p, spec, DCOMP_TRACE | DCOMP_FAKE_DESTRUCTIVE);
+ const Uint cflags = (DCOMP_TRACE | DCOMP_FAKE_DESTRUCTIVE |
+ DCOMP_CALL_TRACE | DCOMP_ALLOW_TRACE_OPS);
+ lint_res = db_match_set_lint(p, spec, cflags);
+ mps = db_match_set_compile(p, spec, cflags);
} else {
- lint_res = db_match_set_lint(p, spec, DCOMP_TABLE | DCOMP_FAKE_DESTRUCTIVE);
- mps = db_match_set_compile(p, spec, DCOMP_TABLE | DCOMP_FAKE_DESTRUCTIVE);
+ const Uint cflags = (DCOMP_TABLE | DCOMP_FAKE_DESTRUCTIVE);
+ lint_res = db_match_set_lint(p, spec, cflags);
+ mps = db_match_set_compile(p, spec, cflags);
}
-
+
if (mps == NULL) {
hp = HAlloc(p,3);
ret = TUPLE2(hp, am_error, lint_res);
@@ -5115,7 +5093,8 @@ static Eterm match_spec_test(Process *p, Eterm against, Eterm spec, int trace)
}
save_cp = p->cp;
p->cp = NULL;
- res = erts_match_set_run(p, mps, arr, n,
+ res = erts_match_set_run_trace(p, p,
+ mps, arr, n,
ERTS_PAM_COPY_RESULT|ERTS_PAM_IGNORE_TRACE_SILENT,
&ret_flags);
p->cp = save_cp;
@@ -5198,7 +5177,8 @@ Eterm db_match_dbterm(DbTableCommon* tb, Process* c_p, Binary* bprog,
obj = db_alloc_tmp_uncompressed(tb, obj);
}
- res = db_prog_match(c_p, bprog, make_tuple(obj->tpl), NULL, 0,
+ res = db_prog_match(c_p, c_p,
+ bprog, make_tuple(obj->tpl), NULL, 0,
ERTS_PAM_COPY_RESULT|ERTS_PAM_CONTIGUOUS_TUPLE, &dummy);
if (is_value(res) && hpp!=NULL) {
diff --git a/erts/emulator/beam/erl_db_util.h b/erts/emulator/beam/erl_db_util.h
index 911ed37aef..60f7067d70 100644
--- a/erts/emulator/beam/erl_db_util.h
+++ b/erts/emulator/beam/erl_db_util.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.
@@ -425,6 +425,11 @@ typedef struct dmc_err_info {
#define DCOMP_FAKE_DESTRUCTIVE ((Uint) 8) /* When this is active, no setting of
trace control words or seq_trace tokens will be done. */
+/* Allow lock seizing operations on the tracee and 3rd party processes */
+#define DCOMP_ALLOW_TRACE_OPS ((Uint) 0x10)
+
+/* This is call trace */
+#define DCOMP_CALL_TRACE ((Uint) 0x20)
Binary *db_match_compile(Eterm *matchexpr, Eterm *guards,
Eterm *body, int num_matches,
@@ -435,7 +440,8 @@ Binary *db_match_compile(Eterm *matchexpr, Eterm *guards,
Eterm db_match_dbterm(DbTableCommon* tb, Process* c_p, Binary* bprog,
int all, DbTerm* obj, Eterm** hpp, Uint extra);
-Eterm db_prog_match(Process *p, Binary *prog, Eterm term,
+Eterm db_prog_match(Process *p, Process *self,
+ Binary *prog, Eterm term,
Eterm *termp, int arity,
enum erts_pam_run_flags in_flags,
Uint32 *return_flags /* Zeroed on enter */);
diff --git a/erts/emulator/beam/erl_debug.c b/erts/emulator/beam/erl_debug.c
index 7b13cf2c83..3e3bfa03a2 100644
--- a/erts/emulator/beam/erl_debug.c
+++ b/erts/emulator/beam/erl_debug.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.
@@ -255,14 +255,14 @@ void erts_check_stack(Process *p)
Eterm *stack_end = p->htop;
if (p->stop > stack_start)
- erl_exit(1,
+ erts_exit(ERTS_ERROR_EXIT,
"<%lu.%lu.%lu>: Stack underflow\n",
internal_pid_channel_no(p->common.id),
internal_pid_number(p->common.id),
internal_pid_serial(p->common.id));
if (p->stop < stack_end)
- erl_exit(1,
+ erts_exit(ERTS_ERROR_EXIT,
"<%lu.%lu.%lu>: Stack overflow\n",
internal_pid_channel_no(p->common.id),
internal_pid_number(p->common.id),
@@ -287,7 +287,7 @@ void erts_check_stack(Process *p)
if (in_mbuf)
continue;
- erl_exit(1,
+ erts_exit(ERTS_ERROR_EXIT,
"<%lu.%lu.%lu>: Wild stack pointer\n",
internal_pid_channel_no(p->common.id),
internal_pid_number(p->common.id),
@@ -374,7 +374,7 @@ void erts_check_memory(Process *p, Eterm *start, Eterm *end)
#ifdef DEBUG
if (hval == DEBUG_BAD_WORD) {
print_untagged_memory(start, end);
- erl_exit(1, "Uninitialized HAlloc'ed memory found @ 0x%0*lx!\n",
+ erts_exit(ERTS_ERROR_EXIT, "Uninitialized HAlloc'ed memory found @ 0x%0*lx!\n",
PTR_SIZE,(unsigned long)(pos - 1));
}
#endif
@@ -387,7 +387,7 @@ void erts_check_memory(Process *p, Eterm *start, Eterm *end)
if (verify_eterm(p,hval))
continue;
- erl_exit(1, "Wild pointer found @ 0x%0*lx!\n",
+ erts_exit(ERTS_ERROR_EXIT, "Wild pointer found @ 0x%0*lx!\n",
PTR_SIZE,(unsigned long)(pos - 1));
}
}
@@ -397,11 +397,11 @@ void verify_process(Process *p)
#define VERIFY_AREA(name,ptr,sz) { \
int n = (sz); \
while (n--) if(!verify_eterm(p,*(ptr+n))) \
- erl_exit(1,"Wild pointer found in " name " of %T!\n",p->common.id); }
+ erts_exit(ERTS_ERROR_EXIT,"Wild pointer found in " name " of %T!\n",p->common.id); }
#define VERIFY_ETERM(name,eterm) { \
if(!verify_eterm(p,eterm)) \
- erl_exit(1,"Wild pointer found in " name " of %T!\n",p->common.id); }
+ erts_exit(ERTS_ERROR_EXIT,"Wild pointer found in " name " of %T!\n",p->common.id); }
ErtsMessage* mp = p->msg.first;
diff --git a/erts/emulator/beam/erl_driver.h b/erts/emulator/beam/erl_driver.h
index 0234b9b0e4..97a69140c3 100644
--- a/erts/emulator/beam/erl_driver.h
+++ b/erts/emulator/beam/erl_driver.h
@@ -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/erts/emulator/beam/erl_drv_nif.h b/erts/emulator/beam/erl_drv_nif.h
index f6b946ae82..6ec5fbb895 100644
--- a/erts/emulator/beam/erl_drv_nif.h
+++ b/erts/emulator/beam/erl_drv_nif.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.
@@ -43,12 +43,11 @@ typedef struct {
int suggested_stack_size;
} ErlDrvThreadOpts;
-#if defined(ERL_DRV_DIRTY_SCHEDULER_SUPPORT) || defined(ERL_NIF_DIRTY_SCHEDULER_SUPPORT)
+
typedef enum {
- ERL_DRV_DIRTY_JOB_CPU_BOUND = 1,
- ERL_DRV_DIRTY_JOB_IO_BOUND = 2
-} ErlDrvDirtyJobFlags;
-#endif
+ ERL_DIRTY_JOB_CPU_BOUND = 1,
+ ERL_DIRTY_JOB_IO_BOUND = 2
+} ErlDirtyJobFlags;
#ifdef SIZEOF_CHAR
# define SIZEOF_CHAR_SAVED__ SIZEOF_CHAR
diff --git a/erts/emulator/beam/erl_drv_thread.c b/erts/emulator/beam/erl_drv_thread.c
index e0404eb5c9..92edce5176 100644
--- a/erts/emulator/beam/erl_drv_thread.c
+++ b/erts/emulator/beam/erl_drv_thread.c
@@ -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.
@@ -43,7 +43,7 @@ fatal_error(int err, char *func)
else
estr = "Unknown error";
}
- erl_exit(ERTS_ABORT_EXIT, "Fatal error in %s: %s [%d]\n", func, estr, err);
+ erts_exit(ERTS_ABORT_EXIT, "Fatal error in %s: %s [%d]\n", func, estr, err);
}
#define ERL_DRV_TSD_KEYS_INC 10
diff --git a/erts/emulator/beam/erl_fun.c b/erts/emulator/beam/erl_fun.c
index cff476694c..6ce1376c81 100644
--- a/erts/emulator/beam/erl_fun.c
+++ b/erts/emulator/beam/erl_fun.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.
@@ -188,7 +188,7 @@ erts_erase_fun_entry(ErlFunEntry* fe)
#endif
{
if (fe->address != unloaded_fun)
- erl_exit(1,
+ erts_exit(ERTS_ERROR_EXIT,
"Internal error: "
"Invalid reference count found on #Fun<%T.%d.%d>: "
" About to erase fun still referred by code.\n",
diff --git a/erts/emulator/beam/erl_fun.h b/erts/emulator/beam/erl_fun.h
index 0024b1ff71..8c4deea7a0 100644
--- a/erts/emulator/beam/erl_fun.h
+++ b/erts/emulator/beam/erl_fun.h
@@ -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/erts/emulator/beam/erl_gc.c b/erts/emulator/beam/erl_gc.c
index 21b03ae8bd..374da9407c 100644
--- a/erts/emulator/beam/erl_gc.c
+++ b/erts/emulator/beam/erl_gc.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.
@@ -41,6 +41,7 @@
#endif
#include "dtrace-wrapper.h"
#include "erl_bif_unique.h"
+#include "dist.h"
#define ERTS_INACT_WR_PB_LEAVE_MUCH_LIMIT 1
#define ERTS_INACT_WR_PB_LEAVE_MUCH_PERCENTAGE 20
@@ -70,7 +71,7 @@
erts_fprintf(stderr, "stop=%p\n", (p)->stop); \
erts_fprintf(stderr, "htop=%p\n", (p)->htop); \
erts_fprintf(stderr, "heap=%p\n", (p)->heap); \
- erl_exit(ERTS_ABORT_EXIT, "%s, line %d: %T: Overrun stack and heap\n", \
+ erts_exit(ERTS_ABORT_EXIT, "%s, line %d: %T: Overrun stack and heap\n", \
__FILE__,__LINE__,(P)->common.id); \
}
@@ -116,7 +117,7 @@ static Eterm *full_sweep_heaps(Process *p,
char *oh, Uint oh_size,
Eterm *objv, int nobj);
static int garbage_collect(Process* p, ErlHeapFragment *live_hf_end,
- int need, Eterm* objv, int nobj);
+ int need, Eterm* objv, int nobj, int fcalls);
static int major_collection(Process* p, ErlHeapFragment *live_hf_end,
int need, Eterm* objv, int nobj, Uint *recl);
static int minor_collection(Process* p, ErlHeapFragment *live_hf_end,
@@ -146,7 +147,8 @@ static void offset_rootset(Process *p, Sint offs, char* area, Uint area_size,
static void offset_off_heap(Process* p, Sint offs, char* area, Uint area_size);
static void offset_mqueue(Process *p, Sint offs, char* area, Uint area_size);
static void move_msgq_to_heap(Process *p);
-
+static int reached_max_heap_size(Process *p, Uint total_heap_size,
+ Uint extra_heap_size, Uint extra_old_heap_size);
static void init_gc_info(ErtsGCInfo *gcip);
#ifdef HARDDEBUG
@@ -289,7 +291,7 @@ erts_next_heap_size(Uint size, Uint offset)
low = mid + 1;
}
}
- erl_exit(1, "no next heap size found: %beu, offset %beu\n", size, offset);
+ erts_exit(ERTS_ERROR_EXIT, "no next heap size found: %beu, offset %beu\n", size, offset);
}
return 0;
}
@@ -389,21 +391,22 @@ erts_gc_after_bif_call_lhf(Process* p, ErlHeapFragment *live_hf_end,
if (p->freason == TRAP) {
#if HIPE
if (regs == NULL) {
- regs = ERTS_PROC_GET_SCHDATA(p)->x_reg_array;
+ regs = erts_proc_sched_data(p)->x_reg_array;
}
#endif
- cost = garbage_collect(p, live_hf_end, 0, regs, p->arity);
+ cost = garbage_collect(p, live_hf_end, 0, regs, p->arity, p->fcalls);
} else {
- cost = garbage_collect(p, live_hf_end, 0, regs, arity);
+ cost = garbage_collect(p, live_hf_end, 0, regs, arity, p->fcalls);
}
} else {
Eterm val[1];
val[0] = result;
- cost = garbage_collect(p, live_hf_end, 0, val, 1);
+ cost = garbage_collect(p, live_hf_end, 0, val, 1, p->fcalls);
result = val[0];
}
BUMP_REDS(p, cost);
+
return result;
}
@@ -431,7 +434,7 @@ static ERTS_INLINE void reset_active_writer(Process *p)
#define ERTS_ABANDON_HEAP_COST 10
static int
-delay_garbage_collection(Process *p, ErlHeapFragment *live_hf_end, int need)
+delay_garbage_collection(Process *p, ErlHeapFragment *live_hf_end, int need, int fcalls)
{
ErlHeapFragment *hfrag;
Eterm *orig_heap, *orig_hend, *orig_htop, *orig_stop;
@@ -506,12 +509,16 @@ delay_garbage_collection(Process *p, ErlHeapFragment *live_hf_end, int need)
/* Make sure that we do a proper GC as soon as possible... */
p->flags |= F_FORCE_GC;
- reds_left = ERTS_BIF_REDS_LEFT(p);
+ reds_left = ERTS_REDS_LEFT(p, fcalls);
+ ASSERT(CONTEXT_REDS - reds_left >= erts_proc_sched_data(p)->virtual_reds);
+
if (reds_left > ERTS_ABANDON_HEAP_COST) {
int vreds = reds_left - ERTS_ABANDON_HEAP_COST;
- ERTS_VBUMP_REDS(p, vreds);
+ erts_proc_sched_data((p))->virtual_reds += vreds;
}
- return ERTS_ABANDON_HEAP_COST;
+
+ ASSERT(CONTEXT_REDS >= erts_proc_sched_data(p)->virtual_reds);
+ return reds_left;
}
static ERTS_FORCE_INLINE Uint
@@ -570,19 +577,26 @@ young_gen_usage(Process *p)
*/
static int
garbage_collect(Process* p, ErlHeapFragment *live_hf_end,
- int need, Eterm* objv, int nobj)
+ int need, Eterm* objv, int nobj, int fcalls)
{
Uint reclaimed_now = 0;
+ Eterm gc_trace_end_tag;
int reds;
ErtsMonotonicTime start_time = 0; /* Shut up faulty warning... */
ErtsSchedulerData *esdp;
+ erts_aint32_t state;
ERTS_MSACC_PUSH_STATE_M();
#ifdef USE_VM_PROBES
DTRACE_CHARBUF(pidbuf, DTRACE_TERM_BUF_SIZE);
#endif
- if (p->flags & (F_DISABLE_GC|F_DELAY_GC))
- return delay_garbage_collection(p, live_hf_end, need);
+ ASSERT(CONTEXT_REDS - ERTS_REDS_LEFT(p, fcalls)
+ >= erts_proc_sched_data(p)->virtual_reds);
+
+ state = erts_smp_atomic32_read_nob(&p->state);
+
+ if (p->flags & (F_DISABLE_GC|F_DELAY_GC) || state & ERTS_PSFLG_EXITING)
+ return delay_garbage_collection(p, live_hf_end, need, fcalls);
if (p->abandoned_heap)
live_hf_end = ERTS_INVALID_HFRAG_PTR;
@@ -593,10 +607,6 @@ garbage_collect(Process* p, ErlHeapFragment *live_hf_end,
esdp = erts_get_scheduler_data();
- if (IS_TRACED_FL(p, F_TRACE_GC)) {
- trace_gc(p, am_gc_start);
- }
-
erts_smp_atomic32_read_bor_nob(&p->state, ERTS_PSFLG_GC);
if (erts_system_monitor_long_gc != 0)
start_time = erts_get_monotonic_time(esdp);
@@ -619,18 +629,29 @@ garbage_collect(Process* p, ErlHeapFragment *live_hf_end,
*/
if (GEN_GCS(p) < MAX_GEN_GCS(p) && !(FLAGS(p) & F_NEED_FULLSWEEP)) {
- DTRACE2(gc_minor_start, pidbuf, need);
- reds = minor_collection(p, live_hf_end, need, objv, nobj, &reclaimed_now);
- DTRACE2(gc_minor_end, pidbuf, reclaimed_now);
- if (reds < 0)
- goto do_major_collection;
- }
- else {
- do_major_collection:
+ if (IS_TRACED_FL(p, F_TRACE_GC)) {
+ trace_gc(p, am_gc_minor_start, need, THE_NON_VALUE);
+ }
+ DTRACE2(gc_minor_start, pidbuf, need);
+ reds = minor_collection(p, live_hf_end, need, objv, nobj, &reclaimed_now);
+ DTRACE2(gc_minor_end, pidbuf, reclaimed_now);
+ if (reds == -1) {
+ if (IS_TRACED_FL(p, F_TRACE_GC)) {
+ trace_gc(p, am_gc_minor_end, reclaimed_now, THE_NON_VALUE);
+ }
+ goto do_major_collection;
+ }
+ gc_trace_end_tag = am_gc_minor_end;
+ } else {
+do_major_collection:
ERTS_MSACC_SET_STATE_CACHED_M_X(ERTS_MSACC_STATE_GC_FULL);
- DTRACE2(gc_major_start, pidbuf, need);
- reds = major_collection(p, live_hf_end, need, objv, nobj, &reclaimed_now);
- DTRACE2(gc_major_end, pidbuf, reclaimed_now);
+ if (IS_TRACED_FL(p, F_TRACE_GC)) {
+ trace_gc(p, am_gc_major_start, need, THE_NON_VALUE);
+ }
+ DTRACE2(gc_major_start, pidbuf, need);
+ reds = major_collection(p, live_hf_end, need, objv, nobj, &reclaimed_now);
+ DTRACE2(gc_major_end, pidbuf, reclaimed_now);
+ gc_trace_end_tag = am_gc_major_end;
ERTS_MSACC_SET_STATE_CACHED_M_X(ERTS_MSACC_STATE_GC);
}
@@ -644,10 +665,31 @@ garbage_collect(Process* p, ErlHeapFragment *live_hf_end,
ErtsGcQuickSanityCheck(p);
+ /* Max heap size has been reached and the process was configured
+ to be killed, so we kill it and set it in a delayed garbage
+ collecting state. There should be no gc_end trace or
+ long_gc/large_gc triggers when this happens as process was
+ killed before a GC could be done. */
+ if (reds == -2) {
+ ErtsProcLocks locks = ERTS_PROC_LOCKS_ALL;
+
+ erts_smp_proc_lock(p, ERTS_PROC_LOCKS_ALL_MINOR);
+ erts_send_exit_signal(p, p->common.id, p, &locks,
+ am_kill, NIL, NULL, 0);
+ erts_smp_proc_unlock(p, locks & ERTS_PROC_LOCKS_ALL_MINOR);
+
+ /* erts_send_exit_signal looks for ERTS_PSFLG_GC, so
+ we have to remove it after the signal is sent */
+ erts_smp_atomic32_read_band_nob(&p->state, ~ERTS_PSFLG_GC);
+
+ /* We have to make sure that we have space for need on the heap */
+ return delay_garbage_collection(p, live_hf_end, need, fcalls);
+ }
+
erts_smp_atomic32_read_band_nob(&p->state, ~ERTS_PSFLG_GC);
if (IS_TRACED_FL(p, F_TRACE_GC)) {
- trace_gc(p, am_gc_end);
+ trace_gc(p, gc_trace_end_tag, reclaimed_now, THE_NON_VALUE);
}
if (erts_system_monitor_long_gc != 0) {
@@ -700,16 +742,23 @@ garbage_collect(Process* p, ErlHeapFragment *live_hf_end,
}
int
-erts_garbage_collect_nobump(Process* p, int need, Eterm* objv, int nobj)
+erts_garbage_collect_nobump(Process* p, int need, Eterm* objv, int nobj, int fcalls)
{
- return garbage_collect(p, ERTS_INVALID_HFRAG_PTR, need, objv, nobj);
+ int reds = garbage_collect(p, ERTS_INVALID_HFRAG_PTR, need, objv, nobj, fcalls);
+ int reds_left = ERTS_REDS_LEFT(p, fcalls);
+ if (reds > reds_left)
+ reds = reds_left;
+ ASSERT(CONTEXT_REDS - (reds_left - reds) >= erts_proc_sched_data(p)->virtual_reds);
+ return reds;
}
void
erts_garbage_collect(Process* p, int need, Eterm* objv, int nobj)
{
- int reds = garbage_collect(p, ERTS_INVALID_HFRAG_PTR, need, objv, nobj);
+ int reds = garbage_collect(p, ERTS_INVALID_HFRAG_PTR, need, objv, nobj, p->fcalls);
BUMP_REDS(p, reds);
+ ASSERT(CONTEXT_REDS - ERTS_BIF_REDS_LEFT(p)
+ >= erts_proc_sched_data(p)->virtual_reds);
}
/*
@@ -744,6 +793,7 @@ erts_garbage_collect_hibernate(Process* p)
heap_size = p->heap_sz + (p->old_htop - p->old_heap) + p->mbuf_sz;
+
heap = (Eterm*) ERTS_HEAP_ALLOC(ERTS_ALC_T_TMP_HEAP,
sizeof(Eterm)*heap_size);
htop = heap;
@@ -1014,6 +1064,34 @@ minor_collection(Process* p, ErlHeapFragment *live_hf_end,
Uint size_before = young_gen_usage(p);
/*
+ * Check if we have gone past the max heap size limit
+ */
+
+ if (MAX_HEAP_SIZE_GET(p)) {
+ Uint heap_size = size_before,
+ /* Note that we also count the un-allocated area
+ in between the stack and heap */
+ stack_size = HEAP_END(p) - HEAP_TOP(p),
+ extra_heap_size,
+ extra_old_heap_size = 0;
+
+ /* Add potential old heap size */
+ if (OLD_HEAP(p) == NULL && mature_size != 0) {
+ extra_old_heap_size = erts_next_heap_size(size_before, 1);
+ heap_size += extra_old_heap_size;
+ } else if (OLD_HEAP(p))
+ heap_size += OLD_HEND(p) - OLD_HEAP(p);
+
+ /* Add potential new young heap size */
+ extra_heap_size = next_heap_size(p, stack_size + size_before, 0);
+ heap_size += extra_heap_size;
+
+ if (heap_size > MAX_HEAP_SIZE_GET(p))
+ if (reached_max_heap_size(p, heap_size, extra_heap_size, extra_old_heap_size))
+ return -2;
+ }
+
+ /*
* Allocate an old heap if we don't have one and if we'll need one.
*/
@@ -1122,6 +1200,16 @@ minor_collection(Process* p, ErlHeapFragment *live_hf_end,
ASSERT(HEAP_SIZE(p) == next_heap_size(p, HEAP_SIZE(p), 0));
ASSERT(MBUF(p) == NULL);
+ /* The heap usage during GC should be larger than what we end up
+ after a GC, even if we grow it. If this assertion is not true
+ we have to check size in grow_new_heap and potentially kill the
+ process from there */
+ ASSERT(!MAX_HEAP_SIZE_GET(p) ||
+ !(MAX_HEAP_SIZE_FLAGS_GET(p) & MAX_HEAP_SIZE_KILL) ||
+ MAX_HEAP_SIZE_GET(p) > (young_gen_usage(p) +
+ (OLD_HEND(p) - OLD_HEAP(p)) +
+ (HEAP_END(p) - HEAP_TOP(p))));
+
return gc_cost(size_after, adjust_size);
}
@@ -1440,6 +1528,25 @@ major_collection(Process* p, ErlHeapFragment *live_hf_end,
if (new_sz == HEAP_SIZE(p) && FLAGS(p) & F_HEAP_GROW) {
new_sz = next_heap_size(p, HEAP_SIZE(p), 1);
}
+
+
+ if (MAX_HEAP_SIZE_GET(p)) {
+ Uint heap_size = size_before;
+
+ /* Add unused space in old heap */
+ heap_size += OLD_HEND(p) - OLD_HTOP(p);
+
+ /* Add stack + unused space in young heap */
+ heap_size += HEAP_END(p) - HEAP_TOP(p);
+
+ /* Add size of new young heap */
+ heap_size += new_sz;
+
+ if (MAX_HEAP_SIZE_GET(p) < heap_size)
+ if (reached_max_heap_size(p, heap_size, new_sz, 0))
+ return -2;
+ }
+
FLAGS(p) &= ~(F_HEAP_GROW|F_NEED_FULLSWEEP);
n_htop = n_heap = (Eterm *) ERTS_HEAP_ALLOC(ERTS_ALC_T_HEAP,
sizeof(Eterm)*new_sz);
@@ -2053,8 +2160,26 @@ copy_one_frag(Eterm** hpp, ErlOffHeap* off_heap,
*hp++ = val;
break;
case TAG_PRIMARY_LIST:
+#ifdef SHCOPY_SEND
+ if (erts_is_literal(val,list_val(val))) {
+ *hp++ = val;
+ } else {
+ *hp++ = offset_ptr(val, offs);
+ }
+#else
+ *hp++ = offset_ptr(val, offs);
+#endif
+ break;
case TAG_PRIMARY_BOXED:
- *hp++ = offset_ptr(val, offs);
+#ifdef SHCOPY_SEND
+ if (erts_is_literal(val,boxed_val(val))) {
+ *hp++ = val;
+ } else {
+ *hp++ = offset_ptr(val, offs);
+ }
+#else
+ *hp++ = offset_ptr(val, offs);
+#endif
break;
case TAG_PRIMARY_HEADER:
*hp++ = val;
@@ -2154,10 +2279,7 @@ move_msgq_to_heap(Process *p)
}
else {
- if (mp->data.attached == ERTS_MSG_COMBINED_HFRAG)
- bp = &mp->hfrag;
- else
- bp = mp->data.heap_frag;
+ bp = erts_message_to_heap_frag(mp);
if (bp->next)
erts_move_multi_frags(&factory.hp, factory.off_heap, bp,
@@ -2233,9 +2355,7 @@ setup_rootset(Process *p, Eterm *objv, int nobj, Rootset *rootset)
n++;
}
#endif
- ASSERT(is_nil(ERTS_TRACER_PROC(p)) ||
- is_internal_pid(ERTS_TRACER_PROC(p)) ||
- is_internal_port(ERTS_TRACER_PROC(p)));
+ ASSERT(IS_TRACER_VALID(ERTS_TRACER(p)));
ASSERT(is_pid(follow_moved(p->group_leader, (Eterm) 0)));
if (is_not_immed(p->group_leader)) {
@@ -2905,7 +3025,7 @@ reply_gc_info(void *vgcirp)
hpp = &hp;
}
- erts_queue_message(rp, &rp_locks, mp, msg, NIL);
+ erts_queue_message(rp, rp_locks, mp, msg, am_system);
if (gcirp->req_sched == esdp->no)
rp_locks &= ~ERTS_PROC_LOCK_MAIN;
@@ -2922,7 +3042,7 @@ reply_gc_info(void *vgcirp)
Eterm
erts_gc_info_request(Process *c_p)
{
- ErtsSchedulerData *esdp = ERTS_PROC_GET_SCHDATA(c_p);
+ ErtsSchedulerData *esdp = erts_proc_sched_data(c_p);
Eterm ref;
ErtsGCInfoReq *gcirp;
Eterm *hp;
@@ -2953,7 +3073,9 @@ erts_gc_info_request(Process *c_p)
}
Eterm
-erts_process_gc_info(Process *p, Uint *sizep, Eterm **hpp)
+erts_process_gc_info(Process *p, Uint *sizep, Eterm **hpp,
+ Uint extra_heap_block,
+ Uint extra_old_heap_block_size)
{
ERTS_DECL_AM(bin_vheap_size);
ERTS_DECL_AM(bin_vheap_block_size);
@@ -2976,8 +3098,9 @@ erts_process_gc_info(Process *p, Uint *sizep, Eterm **hpp)
AM_bin_old_vheap_block_size
};
UWord values[] = {
- OLD_HEAP(p) ? OLD_HEND(p) - OLD_HEAP(p) : 0,
- HEAP_SIZE(p),
+ OLD_HEAP(p) ? OLD_HEND(p) - OLD_HEAP(p) + extra_old_heap_block_size
+ : extra_old_heap_block_size,
+ HEAP_SIZE(p) + extra_heap_block,
MBUF_SIZE(p),
HIGH_WATER(p) - HEAP_START(p),
STACK_START(p) - p->stop,
@@ -2990,10 +3113,30 @@ erts_process_gc_info(Process *p, Uint *sizep, Eterm **hpp)
};
Eterm res = THE_NON_VALUE;
+ ErtsMessage *mp;
ERTS_CT_ASSERT(sizeof(values)/sizeof(*values) == sizeof(tags)/sizeof(*tags));
ERTS_CT_ASSERT(sizeof(values)/sizeof(*values) == ERTS_PROCESS_GC_INFO_MAX_TERMS);
+ if (p->abandoned_heap) {
+ Eterm *htop, *heap;
+ ERTS_GET_ORIG_HEAP(p, heap, htop);
+ values[3] = HIGH_WATER(p) - heap;
+ values[6] = htop - heap;
+ }
+
+ if (p->flags & F_ON_HEAP_MSGQ) {
+ /* If on heap messages in the internal queue are counted
+ as being part of the heap, so we have to add them to the
+ am_mbuf_size value. process_info(total_heap_size) should
+ be the same as adding old_heap_block_size + heap_block_size
+ + mbuf_size.
+ */
+ for (mp = p->msg.first; mp; mp = mp->next)
+ if (mp->data.attached)
+ values[2] += erts_msg_attached_data_size(mp);
+ }
+
res = erts_bld_atom_uword_2tup_list(hpp,
sizep,
sizeof(values)/sizeof(*values),
@@ -3003,6 +3146,130 @@ erts_process_gc_info(Process *p, Uint *sizep, Eterm **hpp)
return res;
}
+static int
+reached_max_heap_size(Process *p, Uint total_heap_size,
+ Uint extra_heap_size, Uint extra_old_heap_size)
+{
+ Uint max_heap_flags = MAX_HEAP_SIZE_FLAGS_GET(p);
+ if (IS_TRACED_FL(p, F_TRACE_GC) ||
+ max_heap_flags & MAX_HEAP_SIZE_LOG) {
+ Eterm msg;
+ Uint size = 0;
+ Eterm *o_hp , *hp;
+ erts_process_gc_info(p, &size, NULL, extra_heap_size,
+ extra_old_heap_size);
+ o_hp = hp = erts_alloc(ERTS_ALC_T_TMP, size * sizeof(Eterm));
+ msg = erts_process_gc_info(p, NULL, &hp, extra_heap_size,
+ extra_old_heap_size);
+
+ if (max_heap_flags & MAX_HEAP_SIZE_LOG) {
+ int alive = erts_is_alive;
+ erts_dsprintf_buf_t *dsbufp = erts_create_logger_dsbuf();
+ Eterm *o_hp, *hp, args = NIL;
+
+ /* Build the format message */
+ erts_dsprintf(dsbufp, " Process: ~p ");
+ if (alive)
+ erts_dsprintf(dsbufp, "on node ~p");
+ erts_dsprintf(dsbufp, "~n Context: maximum heap size reached~n");
+ erts_dsprintf(dsbufp, " Max Heap Size: ~p~n");
+ erts_dsprintf(dsbufp, " Total Heap Size: ~p~n");
+ erts_dsprintf(dsbufp, " Kill: ~p~n");
+ erts_dsprintf(dsbufp, " Error Logger: ~p~n");
+ erts_dsprintf(dsbufp, " GC Info: ~p~n");
+
+ /* Build the args in reverse order */
+ o_hp = hp = erts_alloc(ERTS_ALC_T_TMP, 2*(alive ? 7 : 6) * sizeof(Eterm));
+ args = CONS(hp, msg, args); hp += 2;
+ args = CONS(hp, am_true, args); hp += 2;
+ args = CONS(hp, (max_heap_flags & MAX_HEAP_SIZE_KILL ? am_true : am_false), args); hp += 2;
+ args = CONS(hp, make_small(total_heap_size), args); hp += 2;
+ args = CONS(hp, make_small(MAX_HEAP_SIZE_GET(p)), args); hp += 2;
+ if (alive) {
+ args = CONS(hp, erts_this_node->sysname, args); hp += 2;
+ }
+ args = CONS(hp, p->common.id, args); hp += 2;
+
+ erts_send_error_term_to_logger(p->group_leader, dsbufp, args);
+ erts_free(ERTS_ALC_T_TMP, o_hp);
+ }
+
+ if (IS_TRACED_FL(p, F_TRACE_GC))
+ trace_gc(p, am_gc_max_heap_size, 0, msg);
+
+ erts_free(ERTS_ALC_T_TMP, o_hp);
+ }
+ /* returns true if we should kill the process */
+ return max_heap_flags & MAX_HEAP_SIZE_KILL;
+}
+
+Eterm
+erts_max_heap_size_map(Sint max_heap_size, Uint max_heap_flags,
+ Eterm **hpp, Uint *sz)
+{
+ if (!hpp) {
+ *sz += (2*3 + 1 + MAP_HEADER_FLATMAP_SZ);
+ return THE_NON_VALUE;
+ } else {
+ Eterm *hp = *hpp;
+ Eterm keys = TUPLE3(hp, am_error_logger, am_kill, am_size);
+ flatmap_t *mp;
+ hp += 4;
+ mp = (flatmap_t*) hp;
+ mp->thing_word = MAP_HEADER_FLATMAP;
+ mp->size = 3;
+ mp->keys = keys;
+ hp += MAP_HEADER_FLATMAP_SZ;
+ *hp++ = max_heap_flags & MAX_HEAP_SIZE_LOG ? am_true : am_false;
+ *hp++ = max_heap_flags & MAX_HEAP_SIZE_KILL ? am_true : am_false;
+ *hp++ = make_small(max_heap_size);
+ *hpp = hp;
+ return make_flatmap(mp);
+ }
+}
+
+int
+erts_max_heap_size(Eterm arg, Uint *max_heap_size, Uint *max_heap_flags)
+{
+ Sint sz;
+ *max_heap_flags = H_MAX_FLAGS;
+ if (is_small(arg)) {
+ sz = signed_val(arg);
+ *max_heap_flags = H_MAX_FLAGS;
+ } else if (is_map(arg)) {
+ const Eterm *size = erts_maps_get(am_size, arg);
+ const Eterm *kill = erts_maps_get(am_kill, arg);
+ const Eterm *log = erts_maps_get(am_error_logger, arg);
+ if (size && is_small(*size)) {
+ sz = signed_val(*size);
+ } else {
+ /* size is mandatory */
+ return 0;
+ }
+ if (kill) {
+ if (*kill == am_true)
+ *max_heap_flags |= MAX_HEAP_SIZE_KILL;
+ else if (*kill == am_false)
+ *max_heap_flags &= ~MAX_HEAP_SIZE_KILL;
+ else
+ return 0;
+ }
+ if (log) {
+ if (*log == am_true)
+ *max_heap_flags |= MAX_HEAP_SIZE_LOG;
+ else if (*log == am_false)
+ *max_heap_flags &= ~MAX_HEAP_SIZE_LOG;
+ else
+ return 0;
+ }
+ } else
+ return 0;
+ if (sz < 0)
+ return 0;
+ *max_heap_size = sz;
+ return 1;
+}
+
#if defined(DEBUG) || defined(ERTS_OFFHEAP_DEBUG)
static int
@@ -3034,11 +3301,7 @@ within2(Eterm *ptr, Process *p, Eterm *real_htop)
while (mp) {
- if (mp->data.attached == ERTS_MSG_COMBINED_HFRAG)
- bp = &mp->hfrag;
- else
- bp = mp->data.heap_frag;
-
+ bp = erts_message_to_heap_frag(mp);
mp = mp->next;
search_heap_frags:
@@ -3067,7 +3330,7 @@ within(Eterm *ptr, Process *p)
#define ERTS_CHK_OFFHEAP_ASSERT(EXP) \
do { \
if (!(EXP)) \
- erl_exit(ERTS_ABORT_EXIT, \
+ erts_exit(ERTS_ABORT_EXIT, \
"%s:%d: Assertion failed: %s\n", \
__FILE__, __LINE__, #EXP); \
} while (0)
diff --git a/erts/emulator/beam/erl_gc.h b/erts/emulator/beam/erl_gc.h
index 2cedd9361f..54ea9ca3c0 100644
--- a/erts/emulator/beam/erl_gc.h
+++ b/erts/emulator/beam/erl_gc.h
@@ -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.
@@ -135,11 +135,11 @@ typedef struct {
#define ERTS_PROCESS_GC_INFO_MAX_TERMS (11) /* number of elements in process_gc_info*/
#define ERTS_PROCESS_GC_INFO_MAX_SIZE \
(ERTS_PROCESS_GC_INFO_MAX_TERMS * (2/*cons*/ + 3/*2-tuple*/ + BIG_UINT_HEAP_SIZE))
-Eterm erts_process_gc_info(struct process*, Uint *, Eterm **);
+Eterm erts_process_gc_info(struct process*, Uint *, Eterm **, Uint, Uint);
void erts_gc_info(ErtsGCInfo *gcip);
void erts_init_gc(void);
-int erts_garbage_collect_nobump(struct process*, int, Eterm*, int);
+int erts_garbage_collect_nobump(struct process*, int, Eterm*, int, int);
void erts_garbage_collect(struct process*, int, Eterm*, int);
void erts_garbage_collect_hibernate(struct process* p);
Eterm erts_gc_after_bif_call_lhf(struct process* p, ErlHeapFragment *live_hf_end,
@@ -155,5 +155,7 @@ void erts_offset_off_heap(struct erl_off_heap*, Sint, Eterm*, Eterm*);
void erts_offset_heap_ptr(Eterm*, Uint, Sint, Eterm*, Eterm*);
void erts_offset_heap(Eterm*, Uint, Sint, Eterm*, Eterm*);
void erts_free_heap_frags(struct process* p);
+Eterm erts_max_heap_size_map(Sint, Uint, Eterm **, Uint *);
+int erts_max_heap_size(Eterm, Uint *, Uint *);
#endif /* __ERL_GC_H__ */
diff --git a/erts/emulator/beam/erl_goodfit_alloc.c b/erts/emulator/beam/erl_goodfit_alloc.c
index f89f8723d9..223ba193da 100644
--- a/erts/emulator/beam/erl_goodfit_alloc.c
+++ b/erts/emulator/beam/erl_goodfit_alloc.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.
@@ -571,8 +571,8 @@ info_options(Allctr_t *allctr,
if (hpp || szp) {
if (!atoms_initialized)
- erl_exit(1, "%s:%d: Internal error: Atoms not initialized",
- __FILE__, __LINE__);;
+ erts_exit(ERTS_ERROR_EXIT, "%s:%d: Internal error: Atoms not initialized",
+ __FILE__, __LINE__);
res = NIL;
add_2tup(hpp, szp, &res, am.as, am.gf);
diff --git a/erts/emulator/beam/erl_goodfit_alloc.h b/erts/emulator/beam/erl_goodfit_alloc.h
index ababdbd0a1..76dd558234 100644
--- a/erts/emulator/beam/erl_goodfit_alloc.h
+++ b/erts/emulator/beam/erl_goodfit_alloc.h
@@ -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/erts/emulator/beam/erl_hl_timer.c b/erts/emulator/beam/erl_hl_timer.c
index 491d2f8c84..ebeff51aac 100644
--- a/erts/emulator/beam/erl_hl_timer.c
+++ b/erts/emulator/beam/erl_hl_timer.c
@@ -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.
@@ -1247,8 +1247,8 @@ hlt_bif_timer_timeout(ErtsHLTimer *tmr, Uint32 roflgs)
if (!ERTS_PROC_IS_EXITING(proc)) {
ErtsMessage *mp = erts_alloc_message(0, NULL);
mp->data.heap_frag = tmr->btm.bp;
- erts_queue_message(proc, &proc_locks, mp,
- tmr->btm.message, NIL);
+ erts_queue_message(proc, proc_locks, mp,
+ tmr->btm.message, am_clock_service);
erts_smp_proc_unlock(proc, ERTS_PROC_LOCKS_MSG_SEND);
queued_message = 1;
proc_locks &= ~ERTS_PROC_LOCKS_MSG_SEND;
@@ -1766,7 +1766,7 @@ setup_bif_timer(Process *c_p, ErtsMonotonicTime timeout_pos,
if (is_not_internal_pid(rcvr) && is_not_atom(rcvr))
goto badarg;
- esdp = ERTS_PROC_GET_SCHDATA(c_p);
+ esdp = erts_proc_sched_data(c_p);
hp = HAlloc(c_p, REF_THING_SIZE);
ref = erts_sched_make_ref_in_buffer(esdp, hp);
@@ -1871,7 +1871,7 @@ access_sched_local_btm(Process *c_p, Eterm pid,
if (!c_p)
esdp = erts_get_scheduler_data();
else {
- esdp = ERTS_PROC_GET_SCHDATA(c_p);
+ esdp = erts_proc_sched_data(c_p);
ERTS_HLT_ASSERT(esdp == erts_get_scheduler_data());
}
@@ -1980,7 +1980,7 @@ access_sched_local_btm(Process *c_p, Eterm pid,
ERTS_HLT_ASSERT(hp + (async ? 4 : 3) == hp_end);
- erts_queue_message(proc, &proc_locks, mp, msg, NIL);
+ erts_queue_message(proc, proc_locks, mp, msg, am_clock_service);
if (c_p)
proc_locks &= ~ERTS_PROC_LOCK_MAIN;
@@ -2111,7 +2111,7 @@ try_access_sched_remote_btm(ErtsSchedulerData *esdp,
msg = TUPLE3(hp, tag, tref, res);
- erts_queue_message(c_p, &proc_locks, mp, msg, NIL);
+ erts_queue_message(c_p, proc_locks, mp, msg, am_clock_service);
proc_locks &= ~ERTS_PROC_LOCK_MAIN;
if (proc_locks)
@@ -2138,7 +2138,7 @@ access_bif_timer(Process *c_p, Eterm tref, int cancel, int async, int info)
goto no_timer;
}
- esdp = ERTS_PROC_GET_SCHDATA(c_p);
+ esdp = erts_proc_sched_data(c_p);
trefn = internal_ref_numbers(tref);
sid = erts_get_ref_numbers_thr_id(trefn);
@@ -2363,7 +2363,7 @@ typedef struct {
int erts_cancel_bif_timers(Process *p, ErtsBifTimers *btm, void **vyspp)
{
- ErtsSchedulerData *esdp = ERTS_PROC_GET_SCHDATA(p);
+ ErtsSchedulerData *esdp = erts_proc_sched_data(p);
ErtsBifTimerYieldState ys = {btm, {ERTS_RBT_YIELD_STAT_INITER}};
ErtsBifTimerYieldState *ysp;
int res;
@@ -2409,7 +2409,7 @@ detach_bif_timer(ErtsHLTimer *tmr, void *vesdp)
int erts_detach_accessor_bif_timers(Process *p, ErtsBifTimers *btm, void **vyspp)
{
- ErtsSchedulerData *esdp = ERTS_PROC_GET_SCHDATA(p);
+ ErtsSchedulerData *esdp = erts_proc_sched_data(p);
ErtsBifTimerYieldState ys = {btm, {ERTS_RBT_YIELD_STAT_INITER}};
ErtsBifTimerYieldState *ysp;
int res;
@@ -2516,7 +2516,7 @@ BIF_RETTYPE send_after_3(BIF_ALIST_3)
ErtsMonotonicTime timeout_pos;
int short_time, tres;
- tres = parse_timeout_pos(ERTS_PROC_GET_SCHDATA(BIF_P), BIF_ARG_1, NULL,
+ tres = parse_timeout_pos(erts_proc_sched_data(BIF_P), BIF_ARG_1, NULL,
0, &timeout_pos, &short_time);
if (tres != 0)
BIF_ERROR(BIF_P, BADARG);
@@ -2534,7 +2534,7 @@ BIF_RETTYPE send_after_4(BIF_ALIST_4)
if (!parse_bif_timer_options(BIF_ARG_4, NULL, NULL, &abs, &accessor))
BIF_ERROR(BIF_P, BADARG);
- tres = parse_timeout_pos(ERTS_PROC_GET_SCHDATA(BIF_P), BIF_ARG_1, NULL,
+ tres = parse_timeout_pos(erts_proc_sched_data(BIF_P), BIF_ARG_1, NULL,
abs, &timeout_pos, &short_time);
if (tres != 0)
BIF_ERROR(BIF_P, BADARG);
@@ -2548,7 +2548,7 @@ BIF_RETTYPE start_timer_3(BIF_ALIST_3)
ErtsMonotonicTime timeout_pos;
int short_time, tres;
- tres = parse_timeout_pos(ERTS_PROC_GET_SCHDATA(BIF_P), BIF_ARG_1, NULL,
+ tres = parse_timeout_pos(erts_proc_sched_data(BIF_P), BIF_ARG_1, NULL,
0, &timeout_pos, &short_time);
if (tres != 0)
BIF_ERROR(BIF_P, BADARG);
@@ -2566,7 +2566,7 @@ BIF_RETTYPE start_timer_4(BIF_ALIST_4)
if (!parse_bif_timer_options(BIF_ARG_4, NULL, NULL, &abs, &accessor))
BIF_ERROR(BIF_P, BADARG);
- tres = parse_timeout_pos(ERTS_PROC_GET_SCHDATA(BIF_P), BIF_ARG_1, NULL,
+ tres = parse_timeout_pos(erts_proc_sched_data(BIF_P), BIF_ARG_1, NULL,
abs, &timeout_pos, &short_time);
if (tres != 0)
BIF_ERROR(BIF_P, BADARG);
@@ -2720,7 +2720,7 @@ set_proc_timer_common(Process *c_p, ErtsSchedulerData *esdp, Sint64 tmo,
int
erts_set_proc_timer_term(Process *c_p, Eterm etmo)
{
- ErtsSchedulerData *esdp = ERTS_PROC_GET_SCHDATA(c_p);
+ ErtsSchedulerData *esdp = erts_proc_sched_data(c_p);
ErtsMonotonicTime tmo, timeout_pos;
int short_time, tres;
@@ -2742,7 +2742,7 @@ erts_set_proc_timer_term(Process *c_p, Eterm etmo)
void
erts_set_proc_timer_uword(Process *c_p, UWord tmo)
{
- ErtsSchedulerData *esdp = ERTS_PROC_GET_SCHDATA(c_p);
+ ErtsSchedulerData *esdp = erts_proc_sched_data(c_p);
ERTS_HLT_ASSERT(erts_smp_atomic_read_nob(&c_p->common.timer)
== ERTS_PTMR_NONE);
@@ -2776,7 +2776,7 @@ erts_cancel_proc_timer(Process *c_p)
erts_smp_atomic_set_nob(&c_p->common.timer, ERTS_PTMR_NONE);
return;
}
- continue_cancel_ptimer(ERTS_PROC_GET_SCHDATA(c_p),
+ continue_cancel_ptimer(erts_proc_sched_data(c_p),
(ErtsTimer *) tval);
}
diff --git a/erts/emulator/beam/erl_init.c b/erts/emulator/beam/erl_init.c
index 67089df863..0649fb68de 100644
--- a/erts/emulator/beam/erl_init.c
+++ b/erts/emulator/beam/erl_init.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.
@@ -164,6 +164,8 @@ int erts_use_sender_punish;
Uint display_items; /* no of items to display in traces etc */
int H_MIN_SIZE; /* The minimum heap grain */
int BIN_VH_MIN_SIZE; /* The minimum binary virtual*/
+int H_MAX_SIZE; /* The maximum heap size */
+int H_MAX_FLAGS; /* The maximum heap flags */
Uint32 erts_debug_flags; /* Debug flags. */
int erts_backtrace_depth; /* How many functions to show in a backtrace
@@ -206,15 +208,15 @@ int erts_no_line_info = 0; /* -L: Don't load line information */
ErtsModifiedTimings erts_modified_timings[] = {
/* 0 */ {make_small(0), CONTEXT_REDS, INPUT_REDUCTIONS},
- /* 1 */ {make_small(0), 2*CONTEXT_REDS, 2*INPUT_REDUCTIONS},
+ /* 1 */ {make_small(0), (3*CONTEXT_REDS)/4, 2*INPUT_REDUCTIONS},
/* 2 */ {make_small(0), CONTEXT_REDS/2, INPUT_REDUCTIONS/2},
- /* 3 */ {make_small(0), 3*CONTEXT_REDS, 3*INPUT_REDUCTIONS},
+ /* 3 */ {make_small(0), (7*CONTEXT_REDS)/8, 3*INPUT_REDUCTIONS},
/* 4 */ {make_small(0), CONTEXT_REDS/3, 3*INPUT_REDUCTIONS},
- /* 5 */ {make_small(0), 4*CONTEXT_REDS, INPUT_REDUCTIONS/2},
+ /* 5 */ {make_small(0), (10*CONTEXT_REDS)/11, INPUT_REDUCTIONS/2},
/* 6 */ {make_small(1), CONTEXT_REDS/4, 2*INPUT_REDUCTIONS},
- /* 7 */ {make_small(1), 5*CONTEXT_REDS, INPUT_REDUCTIONS/3},
+ /* 7 */ {make_small(1), (5*CONTEXT_REDS)/7, INPUT_REDUCTIONS/3},
/* 8 */ {make_small(10), CONTEXT_REDS/5, 3*INPUT_REDUCTIONS},
- /* 9 */ {make_small(10), 6*CONTEXT_REDS, INPUT_REDUCTIONS/4}
+ /* 9 */ {make_small(10), (6*CONTEXT_REDS)/7, INPUT_REDUCTIONS/4}
};
#define ERTS_MODIFIED_TIMING_LEVELS \
@@ -264,7 +266,7 @@ this_rel_num(void)
i++;
this_rel = atoi(&this_rel_str[i]);
if (this_rel < 1)
- erl_exit(-1, "Unexpected ERLANG_OTP_RELEASE format\n");
+ erts_exit(1, "Unexpected ERLANG_OTP_RELEASE format\n");
}
return this_rel;
}
@@ -412,7 +414,7 @@ erl_first_process_otp(char* modname, void* code, unsigned size, int argc, char**
start_mod = erts_atom_put((byte *) modname, sys_strlen(modname), ERTS_ATOM_ENC_LATIN1, 1);
if (erts_find_function(start_mod, am_start, 2,
erts_active_code_ix()) == NULL) {
- erl_exit(5, "No function %s:start/2\n", modname);
+ erts_exit(ERTS_ERROR_EXIT, "No function %s:start/2\n", modname);
}
/*
@@ -451,7 +453,7 @@ erl_system_process_otp(Eterm parent_pid, char* modname)
start_mod = erts_atom_put((byte *) modname, sys_strlen(modname), ERTS_ATOM_ENC_LATIN1, 1);
if (erts_find_function(start_mod, am_start, 0,
erts_active_code_ix()) == NULL) {
- erl_exit(5, "No function %s:start/0\n", modname);
+ erts_exit(ERTS_ERROR_EXIT, "No function %s:start/0\n", modname);
}
parent = erts_pid2proc(NULL, 0, parent_pid, ERTS_PROC_LOCK_MAIN);
@@ -532,12 +534,12 @@ load_preloaded(void)
length = preload_p[i].size;
module_name = erts_atom_put((byte *) name, sys_strlen(name), ERTS_ATOM_ENC_LATIN1, 1);
if ((code = sys_preload_begin(&preload_p[i])) == 0)
- erl_exit(1, "Failed to find preloaded code for module %s\n",
+ erts_exit(ERTS_ERROR_EXIT, "Failed to find preloaded code for module %s\n",
name);
res = erts_preload_module(NULL, 0, NIL, &module_name, code, length);
sys_preload_end(&preload_p[i]);
if (res != NIL)
- erl_exit(1,"Failed loading preloaded module %s (%T)\n",
+ erts_exit(ERTS_ERROR_EXIT,"Failed loading preloaded module %s (%T)\n",
name, res);
i++;
}
@@ -576,8 +578,14 @@ void erts_usage(void)
H_DEFAULT_SIZE);
erts_fprintf(stderr, "-hmbs size set minimum binary virtual heap size in words (default %d)\n",
VH_DEFAULT_SIZE);
+ erts_fprintf(stderr, "-hmax size set maximum heap size in words (default %d)\n",
+ H_DEFAULT_MAX_SIZE);
+ erts_fprintf(stderr, "-hmaxk bool enable or disable kill at max heap size (default true)\n");
+ erts_fprintf(stderr, "-hmaxel bool enable or disable error_logger report at max heap size (default true)\n");
erts_fprintf(stderr, "-hpds size initial process dictionary size (default %d)\n",
erts_pd_initial_size);
+ erts_fprintf(stderr, "-hmqd val set default message queue data flag for processes,\n");
+ erts_fprintf(stderr, " valid values are: off_heap | on_heap | mixed\n");
/* erts_fprintf(stderr, "-i module set the boot module (default init)\n"); */
@@ -655,8 +663,6 @@ void erts_usage(void)
erts_fprintf(stderr, "-W<i|w|e> set error logger warnings mapping,\n");
erts_fprintf(stderr, " see error_logger documentation for details\n");
- erts_fprintf(stderr, "-xmqd val set default message queue data flag for processes,\n");
- erts_fprintf(stderr, " valid values are: off_heap | on_heap | mixed\n");
erts_fprintf(stderr, "-zdbbl size set the distribution buffer busy limit in kilobytes\n");
erts_fprintf(stderr, " valid range is [1-%d]\n", INT_MAX/1024);
erts_fprintf(stderr, "-zdntgc time set delayed node table gc in seconds\n");
@@ -670,7 +676,7 @@ void erts_usage(void)
erts_fprintf(stderr, "Note that if the emulator is started with erlexec (typically\n");
erts_fprintf(stderr, "from the erl script), these flags should be specified with +.\n");
erts_fprintf(stderr, "\n\n");
- erl_exit(-1, "");
+ erts_exit(1, "");
}
#ifdef USE_THREADS
@@ -759,6 +765,8 @@ early_init(int *argc, char **argv) /*
erts_async_thread_suggested_stack_size = ERTS_ASYNC_THREAD_MIN_STACK_SIZE;
H_MIN_SIZE = H_DEFAULT_SIZE;
BIN_VH_MIN_SIZE = VH_DEFAULT_SIZE;
+ H_MAX_SIZE = H_DEFAULT_MAX_SIZE;
+ H_MAX_FLAGS = MAX_HEAP_SIZE_KILL|MAX_HEAP_SIZE_LOG;
erts_initialized = 0;
@@ -1472,7 +1480,7 @@ erl_start(int argc, char **argv)
}
erts_fprintf(stderr, "(" EMULATOR ") emulator version "
ERLANG_VERSION "\n");
- erl_exit(0, "");
+ erts_exit(0, "");
}
break;
@@ -1484,9 +1492,13 @@ erl_start(int argc, char **argv)
char *sub_param = argv[i]+2;
/* set default heap size
*
- * h|ms - min_heap_size
- * h|mbs - min_bin_vheap_size
- * h|pds - erts_pd_initial_size
+ * h|ms - min_heap_size
+ * h|mbs - min_bin_vheap_size
+ * h|pds - erts_pd_initial_size
+ * h|mqd - message_queue_data
+ * h|max - max_heap_size
+ * h|maxk - max_heap_kill
+ * h|maxel - max_heap_error_logger
*
*/
if (has_prefix("mbs", sub_param)) {
@@ -1512,6 +1524,58 @@ erl_start(int argc, char **argv)
}
VERBOSE(DEBUG_SYSTEM, ("using initial process dictionary size %d\n",
erts_pd_initial_size));
+ } else if (has_prefix("mqd", sub_param)) {
+ arg = get_arg(sub_param+3, argv[i+1], &i);
+ if (sys_strcmp(arg, "mixed") == 0)
+ erts_default_spo_flags &= ~(SPO_ON_HEAP_MSGQ|SPO_OFF_HEAP_MSGQ);
+ else if (sys_strcmp(arg, "on_heap") == 0) {
+ erts_default_spo_flags &= ~SPO_OFF_HEAP_MSGQ;
+ erts_default_spo_flags |= SPO_ON_HEAP_MSGQ;
+ }
+ else if (sys_strcmp(arg, "off_heap") == 0) {
+ erts_default_spo_flags &= ~SPO_ON_HEAP_MSGQ;
+ erts_default_spo_flags |= SPO_OFF_HEAP_MSGQ;
+ }
+ else {
+ erts_fprintf(stderr,
+ "Invalid message_queue_data flag: %s\n", arg);
+ erts_usage();
+ }
+ } else if (has_prefix("maxk", sub_param)) {
+ arg = get_arg(sub_param+4, argv[i+1], &i);
+ if (strcmp(arg,"true") == 0) {
+ H_MAX_FLAGS |= MAX_HEAP_SIZE_KILL;
+ } else if (strcmp(arg,"false") == 0) {
+ H_MAX_FLAGS &= ~MAX_HEAP_SIZE_KILL;
+ } else {
+ erts_fprintf(stderr, "bad max heap kill %s\n", arg);
+ erts_usage();
+ }
+ VERBOSE(DEBUG_SYSTEM, ("using max heap kill %d\n", H_MAX_FLAGS));
+ } else if (has_prefix("maxel", sub_param)) {
+ arg = get_arg(sub_param+5, argv[i+1], &i);
+ if (strcmp(arg,"true") == 0) {
+ H_MAX_FLAGS |= MAX_HEAP_SIZE_LOG;
+ } else if (strcmp(arg,"false") == 0) {
+ H_MAX_FLAGS &= ~MAX_HEAP_SIZE_LOG;
+ } else {
+ erts_fprintf(stderr, "bad max heap error logger %s\n", arg);
+ erts_usage();
+ }
+ VERBOSE(DEBUG_SYSTEM, ("using max heap log %d\n", H_MAX_FLAGS));
+ } else if (has_prefix("max", sub_param)) {
+ arg = get_arg(sub_param+3, argv[i+1], &i);
+ if ((H_MAX_SIZE = atoi(arg)) < 0) {
+ erts_fprintf(stderr, "bad max heap size %s\n", arg);
+ erts_usage();
+ }
+ if (H_MAX_SIZE < H_MIN_SIZE && H_MAX_SIZE) {
+ erts_fprintf(stderr, "max heap size (%s) is not allowed to be "
+ "smaller than min heap size (%d)\n",
+ arg, H_MIN_SIZE);
+ erts_usage();
+ }
+ VERBOSE(DEBUG_SYSTEM, ("using max heap size %d\n", H_MAX_SIZE));
} else {
/* backward compatibility */
arg = get_arg(argv[i]+2, argv[i+1], &i);
@@ -2047,32 +2111,6 @@ erl_start(int argc, char **argv)
}
break;
- case 'x': {
- char *sub_param = argv[i]+2;
- if (has_prefix("mqd", sub_param)) {
- arg = get_arg(sub_param+3, argv[i+1], &i);
- if (sys_strcmp(arg, "mixed") == 0)
- erts_default_spo_flags &= ~(SPO_ON_HEAP_MSGQ|SPO_OFF_HEAP_MSGQ);
- else if (sys_strcmp(arg, "on_heap") == 0) {
- erts_default_spo_flags &= ~SPO_OFF_HEAP_MSGQ;
- erts_default_spo_flags |= SPO_ON_HEAP_MSGQ;
- }
- else if (sys_strcmp(arg, "off_heap") == 0) {
- erts_default_spo_flags &= ~SPO_ON_HEAP_MSGQ;
- erts_default_spo_flags |= SPO_OFF_HEAP_MSGQ;
- }
- else {
- erts_fprintf(stderr,
- "Invalid message_queue_data flag: %s\n", arg);
- erts_usage();
- }
- } else {
- erts_fprintf(stderr, "bad -x option %s\n", argv[i]);
- erts_usage();
- }
- break;
- }
-
case 'z': {
char *sub_param = argv[i]+2;
@@ -2188,6 +2226,7 @@ erl_start(int argc, char **argv)
init_break_handler();
if (replace_intr)
erts_replace_intr();
+ sys_init_suspend_handler();
#endif
boot_argc = argc - i; /* Number of arguments to init */
@@ -2304,23 +2343,17 @@ system_cleanup(int flush_async)
}
static __decl_noreturn void __noreturn
-erl_exit_vv(int n, int flush_async, char *fmt, va_list args1, va_list args2)
+erts_exit_vv(int n, int flush_async, char *fmt, va_list args1, va_list args2)
{
- unsigned int an;
-
system_cleanup(flush_async);
save_statistics();
- if (n < 0)
- an = -(unsigned int)n;
- else
- an = n;
if (erts_mtrace_enabled)
- erts_mtrace_exit((Uint32) an);
+ erts_mtrace_exit((Uint32) n);
/* Produce an Erlang core dump if error */
- if (((n > 0 && erts_no_crash_dump == 0) || n == ERTS_DUMP_EXIT)
+ if (((n == ERTS_ERROR_EXIT && erts_no_crash_dump == 0) || n == ERTS_DUMP_EXIT)
&& erts_initialized) {
erl_crash_dump_v((char*) NULL, 0, fmt, args1);
}
@@ -2333,29 +2366,29 @@ erl_exit_vv(int n, int flush_async, char *fmt, va_list args1, va_list args2)
exit(0);
else if (n == ERTS_DUMP_EXIT)
ERTS_EXIT_AFTER_DUMP(1);
- else if (n > 0 || n == ERTS_ABORT_EXIT)
+ else if (n == ERTS_ERROR_EXIT || n == ERTS_ABORT_EXIT)
abort();
- exit(an);
+ exit(n);
}
/* Exit without flushing async threads */
-__decl_noreturn void __noreturn erl_exit(int n, char *fmt, ...)
+__decl_noreturn void __noreturn erts_exit(int n, char *fmt, ...)
{
va_list args1, args2;
va_start(args1, fmt);
va_start(args2, fmt);
- erl_exit_vv(n, 0, fmt, args1, args2);
+ erts_exit_vv(n, 0, fmt, args1, args2);
va_end(args2);
va_end(args1);
}
/* Exit after flushing async threads */
-__decl_noreturn void __noreturn erl_exit_flush_async(int n, char *fmt, ...)
+__decl_noreturn void __noreturn erts_flush_async_exit(int n, char *fmt, ...)
{
va_list args1, args2;
va_start(args1, fmt);
va_start(args2, fmt);
- erl_exit_vv(n, 1, fmt, args1, args2);
+ erts_exit_vv(n, 1, fmt, args1, args2);
va_end(args2);
va_end(args1);
}
diff --git a/erts/emulator/beam/erl_instrument.c b/erts/emulator/beam/erl_instrument.c
index 12a72ad839..f84c63e7a4 100644
--- a/erts/emulator/beam/erl_instrument.c
+++ b/erts/emulator/beam/erl_instrument.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/erts/emulator/beam/erl_instrument.h b/erts/emulator/beam/erl_instrument.h
index cb3b1920d3..1f04c91d5e 100644
--- a/erts/emulator/beam/erl_instrument.h
+++ b/erts/emulator/beam/erl_instrument.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/erts/emulator/beam/erl_lock_check.c b/erts/emulator/beam/erl_lock_check.c
index 598bf84c0b..39c0617143 100644
--- a/erts/emulator/beam/erl_lock_check.c
+++ b/erts/emulator/beam/erl_lock_check.c
@@ -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.
@@ -97,6 +97,7 @@ static erts_lc_lock_order_t erts_lock_order[] = {
{ "dist_entry_links", "address" },
{ "code_write_permission", NULL },
{ "proc_status", "pid" },
+ { "proc_trace", "pid" },
{ "ports_snapshot", NULL },
{ "meta_name_tab", "address" },
{ "meta_main_tab_slot", "address" },
@@ -148,6 +149,7 @@ static erts_lc_lock_order_t erts_lock_order[] = {
{ "dist_entry_out_queue", "address" },
{ "port_sched_lock", "port_id" },
{ "sys_msg_q", NULL },
+ { "tracer_mtx", NULL },
{ "port_table", NULL },
#endif
{ "mtrace_op", NULL },
@@ -160,9 +162,6 @@ static erts_lc_lock_order_t erts_lock_order[] = {
{ "proclist_pre_alloc_lock", "address" },
{ "xports_list_pre_alloc_lock", "address" },
{ "inet_buffer_stack_lock", NULL },
- { "gc_info", NULL },
- { "io_wake", NULL },
- { "timer_wheel", NULL },
{ "system_block", NULL },
{ "timeofday", NULL },
{ "get_time", NULL },
diff --git a/erts/emulator/beam/erl_lock_check.h b/erts/emulator/beam/erl_lock_check.h
index 66251ef4e8..18296d1fec 100644
--- a/erts/emulator/beam/erl_lock_check.h
+++ b/erts/emulator/beam/erl_lock_check.h
@@ -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/erts/emulator/beam/erl_lock_count.c b/erts/emulator/beam/erl_lock_count.c
index bd00480ba2..a00e0f0fff 100644
--- a/erts/emulator/beam/erl_lock_count.c
+++ b/erts/emulator/beam/erl_lock_count.c
@@ -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/erts/emulator/beam/erl_lock_count.h b/erts/emulator/beam/erl_lock_count.h
index 4cc6a5c695..3e8dcefe69 100644
--- a/erts/emulator/beam/erl_lock_count.h
+++ b/erts/emulator/beam/erl_lock_count.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/erts/emulator/beam/erl_map.c b/erts/emulator/beam/erl_map.c
index d0ffb11e79..8efc983f04 100644
--- a/erts/emulator/beam/erl_map.c
+++ b/erts/emulator/beam/erl_map.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.
@@ -54,6 +54,7 @@
* - maps:new/0
* - maps:put/3
* - maps:remove/2
+ * - maps:take/2
* - maps:to_list/1
* - maps:update/3
* - maps:values/1
@@ -93,7 +94,7 @@ static Uint hashmap_subtree_size(Eterm node);
static Eterm hashmap_to_list(Process *p, Eterm map);
static Eterm hashmap_keys(Process *p, Eterm map);
static Eterm hashmap_values(Process *p, Eterm map);
-static Eterm hashmap_delete(Process *p, Uint32 hx, Eterm key, Eterm node);
+static Eterm hashmap_delete(Process *p, Uint32 hx, Eterm key, Eterm node, Eterm *value);
static Eterm flatmap_from_validated_list(Process *p, Eterm list, Uint size);
static Eterm hashmap_from_validated_list(Process *p, Eterm list, Uint size);
static Eterm hashmap_from_unsorted_array(ErtsHeapFactory*, hxnode_t *hxns, Uint n, int reject_dupkeys);
@@ -196,13 +197,13 @@ erts_maps_get(Eterm key, Eterm map)
return &vs[i];
}
}
- }
-
- for (i = 0; i < n; i++) {
- if (EQ(ks[i], key)) {
- return &vs[i];
- }
- }
+ } else {
+ for (i = 0; i < n; i++) {
+ if (EQ(ks[i], key)) {
+ return &vs[i];
+ }
+ }
+ }
return NULL;
}
ASSERT(is_hashmap(map));
@@ -1270,7 +1271,7 @@ recurse:
break;
}
default:
- erl_exit(ERTS_ABORT_EXIT, "bad header %ld\r\n", hdrA);
+ erts_exit(ERTS_ABORT_EXIT, "bad header %ld\r\n", hdrA);
}
}
@@ -1297,7 +1298,7 @@ recurse:
break;
}
default:
- erl_exit(ERTS_ABORT_EXIT, "bad header %ld\r\n", hdrB);
+ erts_exit(ERTS_ABORT_EXIT, "bad header %ld\r\n", hdrB);
}
}
}
@@ -1387,7 +1388,7 @@ resume_from_trap:
res = make_boxed(nhp);
break;
default:
- erl_exit(ERTS_ABORT_EXIT, "strange mix %d\r\n", sp->mix);
+ erts_exit(ERTS_ABORT_EXIT, "strange mix %d\r\n", sp->mix);
}
}
@@ -1521,10 +1522,45 @@ BIF_RETTYPE maps_put_3(BIF_ALIST_3) {
BIF_ERROR(BIF_P, BADMAP);
}
-/* maps:remove/3 */
+/* maps:take/2 */
-int erts_maps_remove(Process *p, Eterm key, Eterm map, Eterm *res) {
+BIF_RETTYPE maps_take_2(BIF_ALIST_2) {
+ if (is_map(BIF_ARG_2)) {
+ Eterm res, map, val;
+ if (erts_maps_take(BIF_P, BIF_ARG_1, BIF_ARG_2, &map, &val)) {
+ Eterm *hp = HAlloc(BIF_P, 3);
+ res = make_tuple(hp);
+ *hp++ = make_arityval(2);
+ *hp++ = val;
+ *hp++ = map;
+ BIF_RET(res);
+ }
+ BIF_RET(am_error);
+ }
+ BIF_P->fvalue = BIF_ARG_2;
+ BIF_ERROR(BIF_P, BADMAP);
+}
+
+/* maps:remove/2 */
+
+BIF_RETTYPE maps_remove_2(BIF_ALIST_2) {
+ if (is_map(BIF_ARG_2)) {
+ Eterm res;
+ (void) erts_maps_take(BIF_P, BIF_ARG_1, BIF_ARG_2, &res, NULL);
+ BIF_RET(res);
+ }
+ BIF_P->fvalue = BIF_ARG_2;
+ BIF_ERROR(BIF_P, BADMAP);
+}
+
+/* erts_maps_take
+ * return 1 if key is found, otherwise 0
+ * If the key is not found res (output map) will be map (input map)
+ */
+int erts_maps_take(Process *p, Eterm key, Eterm map,
+ Eterm *res, Eterm *value) {
Uint32 hx;
+ Eterm ret;
if (is_flatmap(map)) {
Sint n;
Uint need;
@@ -1537,7 +1573,7 @@ int erts_maps_remove(Process *p, Eterm key, Eterm map, Eterm *res) {
if (n == 0) {
*res = map;
- return 1;
+ return 0;
}
ks = flatmap_get_keys(mp);
@@ -1564,6 +1600,7 @@ int erts_maps_remove(Process *p, Eterm key, Eterm map, Eterm *res) {
if (is_immed(key)) {
while (1) {
if (*ks == key) {
+ if (value) *value = *vs;
goto found_key;
} else if (--n) {
*mhp++ = *vs++;
@@ -1574,6 +1611,7 @@ int erts_maps_remove(Process *p, Eterm key, Eterm map, Eterm *res) {
} else {
while(1) {
if (EQ(*ks, key)) {
+ if (value) *value = *vs;
goto found_key;
} else if (--n) {
*mhp++ = *vs++;
@@ -1589,7 +1627,7 @@ int erts_maps_remove(Process *p, Eterm key, Eterm map, Eterm *res) {
HRelease(p, hp_start + need, hp_start);
*res = map;
- return 1;
+ return 0;
found_key:
/* Copy rest of keys and values */
@@ -1601,19 +1639,13 @@ found_key:
}
ASSERT(is_hashmap(map));
hx = hashmap_make_hash(key);
- *res = hashmap_delete(p, hx, key, map);
- return 1;
-}
-
-BIF_RETTYPE maps_remove_2(BIF_ALIST_2) {
- if (is_map(BIF_ARG_2)) {
- Eterm res;
- if (erts_maps_remove(BIF_P, BIF_ARG_1, BIF_ARG_2, &res)) {
- BIF_RET(res);
- }
+ ret = hashmap_delete(p, hx, key, map, value);
+ if (is_value(ret)) {
+ *res = ret;
+ return 1;
}
- BIF_P->fvalue = BIF_ARG_2;
- BIF_ERROR(BIF_P, BADMAP);
+ *res = map;
+ return 0;
}
int erts_maps_update(Process *p, Eterm key, Eterm value, Eterm map, Eterm *res) {
@@ -1882,7 +1914,7 @@ void hashmap_iterator_init(ErtsWStack* s, Eterm node, int reverse) {
sz = hashmap_bitcount(MAP_HEADER_VAL(hdr));
break;
default:
- erl_exit(ERTS_ABORT_EXIT, "bad header");
+ erts_exit(ERTS_ABORT_EXIT, "bad header");
}
WSTACK_PUSH3((*s), (UWord)THE_NON_VALUE, /* end marker */
@@ -1919,7 +1951,7 @@ Eterm* hashmap_iterator_next(ErtsWStack* s) {
ASSERT(sz < 17);
break;
default:
- erl_exit(ERTS_ABORT_EXIT, "bad header");
+ erts_exit(ERTS_ABORT_EXIT, "bad header");
}
idx++;
@@ -1969,7 +2001,7 @@ Eterm* hashmap_iterator_prev(ErtsWStack* s) {
ASSERT(sz < 17);
break;
default:
- erl_exit(1, "bad header");
+ erts_exit(ERTS_ERROR_EXIT, "bad header");
}
if (idx > sz)
@@ -2153,12 +2185,12 @@ int erts_hashmap_insert_down(Uint32 hx, Eterm key, Eterm node, Uint *sz,
size += HAMT_HEAD_BITMAP_SZ(n+1);
goto unroll;
default:
- erl_exit(1, "bad header tag %ld\r\n", hdr & _HEADER_MAP_SUBTAG_MASK);
+ erts_exit(ERTS_ERROR_EXIT, "bad header tag %ld\r\n", hdr & _HEADER_MAP_SUBTAG_MASK);
break;
}
break;
default:
- erl_exit(1, "bad primary tag %p\r\n", node);
+ erts_exit(ERTS_ERROR_EXIT, "bad primary tag %p\r\n", node);
break;
}
}
@@ -2273,12 +2305,12 @@ Eterm erts_hashmap_insert_up(Eterm *hp, Eterm key, Eterm value,
res = make_hashmap(nhp);
break;
default:
- erl_exit(1, "bad header tag %x\r\n", hdr & _HEADER_MAP_SUBTAG_MASK);
+ erts_exit(ERTS_ERROR_EXIT, "bad header tag %x\r\n", hdr & _HEADER_MAP_SUBTAG_MASK);
break;
}
break;
default:
- erl_exit(1, "bad primary tag %x\r\n", primary_tag(node));
+ erts_exit(ERTS_ERROR_EXIT, "bad primary tag %x\r\n", primary_tag(node));
break;
}
@@ -2322,7 +2354,8 @@ static Eterm hashmap_values(Process* p, Eterm node) {
return res;
}
-static Eterm hashmap_delete(Process *p, Uint32 hx, Eterm key, Eterm map) {
+static Eterm hashmap_delete(Process *p, Uint32 hx, Eterm key,
+ Eterm map, Eterm *value) {
Eterm *hp = NULL, *nhp = NULL, *hp_end = NULL;
Eterm *ptr;
Eterm hdr, res = map, node = map;
@@ -2337,8 +2370,12 @@ static Eterm hashmap_delete(Process *p, Uint32 hx, Eterm key, Eterm map) {
switch(primary_tag(node)) {
case TAG_PRIMARY_LIST:
if (EQ(CAR(list_val(node)), key)) {
+ if (value) {
+ *value = CDR(list_val(node));
+ }
goto unroll;
}
+ res = THE_NON_VALUE;
goto not_found;
case TAG_PRIMARY_BOXED:
ptr = boxed_val(node);
@@ -2365,6 +2402,7 @@ static Eterm hashmap_delete(Process *p, Uint32 hx, Eterm key, Eterm map) {
n = hashmap_bitcount(hval);
} else {
/* not occupied */
+ res = THE_NON_VALUE;
goto not_found;
}
@@ -2394,14 +2432,15 @@ static Eterm hashmap_delete(Process *p, Uint32 hx, Eterm key, Eterm map) {
break;
}
/* not occupied */
+ res = THE_NON_VALUE;
goto not_found;
default:
- erl_exit(1, "bad header tag %ld\r\n", hdr & _HEADER_MAP_SUBTAG_MASK);
+ erts_exit(ERTS_ERROR_EXIT, "bad header tag %ld\r\n", hdr & _HEADER_MAP_SUBTAG_MASK);
break;
}
break;
default:
- erl_exit(1, "bad primary tag %p\r\n", node);
+ erts_exit(ERTS_ERROR_EXIT, "bad primary tag %p\r\n", node);
break;
}
}
@@ -2578,7 +2617,7 @@ unroll:
res = make_hashmap(nhp);
break;
default:
- erl_exit(1, "bad header tag %x\r\n", hdr & _HEADER_MAP_SUBTAG_MASK);
+ erts_exit(ERTS_ERROR_EXIT, "bad header tag %x\r\n", hdr & _HEADER_MAP_SUBTAG_MASK);
break;
}
} while(!ESTACK_ISEMPTY(stack));
@@ -2728,7 +2767,7 @@ BIF_RETTYPE erts_internal_term_type_1(BIF_ALIST_1) {
case MAP_HEADER_TAG_HAMT_NODE_BITMAP :
BIF_RET(ERTS_MAKE_AM("hashmap_node"));
default:
- erl_exit(ERTS_ABORT_EXIT, "term_type: bad map header type %d\n", MAP_HEADER_TYPE(hdr));
+ erts_exit(ERTS_ABORT_EXIT, "term_type: bad map header type %d\n", MAP_HEADER_TYPE(hdr));
}
case REFC_BINARY_SUBTAG:
BIF_RET(ERTS_MAKE_AM("refc_binary"));
@@ -2752,7 +2791,7 @@ BIF_RETTYPE erts_internal_term_type_1(BIF_ALIST_1) {
case FLOAT_SUBTAG:
BIF_RET(ERTS_MAKE_AM("hfloat"));
default:
- erl_exit(ERTS_ABORT_EXIT, "term_type: Invalid tag (0x%X)\n", hdr);
+ erts_exit(ERTS_ABORT_EXIT, "term_type: Invalid tag (0x%X)\n", hdr);
}
}
case TAG_PRIMARY_IMMED1:
@@ -2772,13 +2811,13 @@ BIF_RETTYPE erts_internal_term_type_1(BIF_ALIST_1) {
case _TAG_IMMED2_NIL:
BIF_RET(ERTS_MAKE_AM("nil"));
default:
- erl_exit(ERTS_ABORT_EXIT, "term_type: Invalid tag (0x%X)\n", obj);
+ erts_exit(ERTS_ABORT_EXIT, "term_type: Invalid tag (0x%X)\n", obj);
}
default:
- erl_exit(ERTS_ABORT_EXIT, "term_type: Invalid tag (0x%X)\n", obj);
+ erts_exit(ERTS_ABORT_EXIT, "term_type: Invalid tag (0x%X)\n", obj);
}
default:
- erl_exit(ERTS_ABORT_EXIT, "term_type: Invalid tag (0x%X)\n", obj);
+ erts_exit(ERTS_ABORT_EXIT, "term_type: Invalid tag (0x%X)\n", obj);
}
}
@@ -2811,7 +2850,7 @@ BIF_RETTYPE erts_internal_map_hashmap_children_1(BIF_ALIST_1) {
ptr += 2;
break;
default:
- erl_exit(1, "bad header\r\n");
+ erts_exit(ERTS_ERROR_EXIT, "bad header\r\n");
break;
}
ASSERT(sz < 17);
@@ -2889,7 +2928,7 @@ static Eterm hashmap_info(Process *p, Eterm node) {
}
break;
default:
- erl_exit(1, "bad header\r\n");
+ erts_exit(ERTS_ERROR_EXIT, "bad header\r\n");
break;
}
}
diff --git a/erts/emulator/beam/erl_map.h b/erts/emulator/beam/erl_map.h
index 052fa99f03..8b5c9582ba 100644
--- a/erts/emulator/beam/erl_map.h
+++ b/erts/emulator/beam/erl_map.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.
@@ -66,7 +66,7 @@ typedef struct flatmap_s {
/* erl_term.h stuff */
-#define flatmap_get_values(x) (((Eterm *)(x)) + 3)
+#define flatmap_get_values(x) (((Eterm *)(x)) + sizeof(flatmap_t)/sizeof(Eterm))
#define flatmap_get_keys(x) (((Eterm *)tuple_val(((flatmap_t *)(x))->keys)) + 1)
#define flatmap_get_size(x) (((flatmap_t*)(x))->size)
@@ -82,6 +82,7 @@ struct ErtsEStack_;
Eterm erts_maps_put(Process *p, Eterm key, Eterm value, Eterm map);
int erts_maps_update(Process *p, Eterm key, Eterm value, Eterm map, Eterm *res);
int erts_maps_remove(Process *p, Eterm key, Eterm map, Eterm *res);
+int erts_maps_take(Process *p, Eterm key, Eterm map, Eterm *res, Eterm *value);
Eterm erts_hashmap_insert(Process *p, Uint32 hx, Eterm key, Eterm value,
Eterm node, int is_update);
diff --git a/erts/emulator/beam/erl_math.c b/erts/emulator/beam/erl_math.c
index b46cc37495..fc0aaed18a 100644
--- a/erts/emulator/beam/erl_math.c
+++ b/erts/emulator/beam/erl_math.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/erts/emulator/beam/erl_message.c b/erts/emulator/beam/erl_message.c
index 88efb2c59f..579f6e427d 100644
--- a/erts/emulator/beam/erl_message.c
+++ b/erts/emulator/beam/erl_message.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.
@@ -32,6 +32,7 @@
#include "erl_process.h"
#include "erl_binary.h"
#include "dtrace-wrapper.h"
+#include "beam_bp.h"
ERTS_SCHED_PREF_QUICK_ALLOC_IMPL(message_ref,
ErtsMessageRef,
@@ -251,9 +252,10 @@ erts_realloc_shrink_message(ErtsMessage *mp, Uint sz, Eterm *brefs, Uint brefs_s
void
erts_queue_dist_message(Process *rcvr,
- ErtsProcLocks *rcvr_locks,
+ ErtsProcLocks rcvr_locks,
ErtsDistExternal *dist_ext,
- Eterm token)
+ Eterm token,
+ Eterm from)
{
ErtsMessage* mp;
#ifdef USE_VM_PROBES
@@ -265,7 +267,7 @@ erts_queue_dist_message(Process *rcvr,
erts_aint_t state;
#endif
- ERTS_SMP_LC_ASSERT(*rcvr_locks == erts_proc_lc_my_proc_locks(rcvr));
+ ERTS_SMP_LC_ASSERT(rcvr_locks == erts_proc_lc_my_proc_locks(rcvr));
mp = erts_alloc_message(0, NULL);
mp->data.dist_ext = dist_ext;
@@ -280,10 +282,10 @@ erts_queue_dist_message(Process *rcvr,
ERL_MESSAGE_TOKEN(mp) = token;
#ifdef ERTS_SMP
- if (!(*rcvr_locks & ERTS_PROC_LOCK_MSGQ)) {
+ if (!(rcvr_locks & ERTS_PROC_LOCK_MSGQ)) {
if (erts_smp_proc_trylock(rcvr, ERTS_PROC_LOCK_MSGQ) == EBUSY) {
ErtsProcLocks need_locks = ERTS_PROC_LOCK_MSGQ;
- if (*rcvr_locks & ERTS_PROC_LOCK_STATUS) {
+ if (rcvr_locks & ERTS_PROC_LOCK_STATUS) {
erts_smp_proc_unlock(rcvr, ERTS_PROC_LOCK_STATUS);
need_locks |= ERTS_PROC_LOCK_STATUS;
}
@@ -293,7 +295,7 @@ erts_queue_dist_message(Process *rcvr,
state = erts_smp_atomic32_read_acqb(&rcvr->state);
if (state & (ERTS_PSFLG_PENDING_EXIT|ERTS_PSFLG_EXITING)) {
- if (!(*rcvr_locks & ERTS_PROC_LOCK_MSGQ))
+ if (!(rcvr_locks & ERTS_PROC_LOCK_MSGQ))
erts_smp_proc_unlock(rcvr, ERTS_PROC_LOCK_MSGQ);
/* Drop message if receiver is exiting or has a pending exit ... */
erts_cleanup_messages(mp);
@@ -301,10 +303,13 @@ erts_queue_dist_message(Process *rcvr,
else
#endif
if (IS_TRACED_FL(rcvr, F_TRACE_RECEIVE)) {
+ if (from == am_Empty)
+ from = dist_ext->dep->sysname;
+
/* Ahh... need to decode it in order to trace it... */
- if (!(*rcvr_locks & ERTS_PROC_LOCK_MSGQ))
+ if (!(rcvr_locks & ERTS_PROC_LOCK_MSGQ))
erts_smp_proc_unlock(rcvr, ERTS_PROC_LOCK_MSGQ);
- if (!erts_decode_dist_message(rcvr, *rcvr_locks, mp, 0))
+ if (!erts_decode_dist_message(rcvr, rcvr_locks, mp, 0))
erts_free_message(mp);
else {
Eterm msg = ERL_MESSAGE_TERM(mp);
@@ -324,7 +329,7 @@ erts_queue_dist_message(Process *rcvr,
tok_label, tok_lastcnt, tok_serial);
}
#endif
- erts_queue_message(rcvr, rcvr_locks, mp, msg, token);
+ erts_queue_message(rcvr, rcvr_locks, mp, msg, from);
}
}
else {
@@ -349,14 +354,14 @@ erts_queue_dist_message(Process *rcvr,
}
#endif
- LINK_MESSAGE(rcvr, mp);
+ LINK_MESSAGE(rcvr, mp, &mp->next, 1);
- if (!(*rcvr_locks & ERTS_PROC_LOCK_MSGQ))
+ if (!(rcvr_locks & ERTS_PROC_LOCK_MSGQ))
erts_smp_proc_unlock(rcvr, ERTS_PROC_LOCK_MSGQ);
erts_proc_notify_new_message(rcvr,
#ifdef ERTS_SMP
- *rcvr_locks
+ rcvr_locks
#else
0
#endif
@@ -364,31 +369,35 @@ erts_queue_dist_message(Process *rcvr,
}
}
-/* Add a message last in message queue */
+/* Add messages last in message queue */
static Sint
-queue_message(Process *c_p,
- Process* receiver,
- erts_aint32_t *receiver_state,
- ErtsProcLocks *receiver_locks,
- ErtsMessage* mp,
- Eterm message,
- Eterm seq_trace_token
-#ifdef USE_VM_PROBES
- , Eterm dt_utag
-#endif
- )
+queue_messages(Process* receiver,
+ erts_aint32_t *receiver_state,
+ ErtsProcLocks receiver_locks,
+ ErtsMessage* first,
+ ErtsMessage** last,
+ Uint len,
+ Eterm from)
{
+ ErtsTracingEvent* te;
Sint res;
int locked_msgq = 0;
erts_aint32_t state;
- ERTS_SMP_LC_ASSERT(*receiver_locks == erts_proc_lc_my_proc_locks(receiver));
+ ASSERT(is_value(ERL_MESSAGE_TERM(first)));
+ ASSERT(ERL_MESSAGE_TOKEN(first) == am_undefined ||
+ ERL_MESSAGE_TOKEN(first) == NIL ||
+ is_tuple(ERL_MESSAGE_TOKEN(first)));
#ifdef ERTS_SMP
+#ifdef ERTS_ENABLE_LOCK_CHECK
+ ERTS_SMP_LC_ASSERT(erts_proc_lc_my_proc_locks(receiver) < ERTS_PROC_LOCK_MSGQ ||
+ receiver_locks == erts_proc_lc_my_proc_locks(receiver));
+#endif
- if (!(*receiver_locks & ERTS_PROC_LOCK_MSGQ)) {
+ if (!(receiver_locks & ERTS_PROC_LOCK_MSGQ)) {
if (erts_smp_proc_trylock(receiver, ERTS_PROC_LOCK_MSGQ) == EBUSY) {
- ErtsProcLocks need_locks = ERTS_PROC_LOCK_MSGQ;
+ ErtsProcLocks need_locks;
if (receiver_state)
state = *receiver_state;
@@ -397,10 +406,11 @@ queue_message(Process *c_p,
if (state & (ERTS_PSFLG_EXITING|ERTS_PSFLG_PENDING_EXIT))
goto exiting;
- if (*receiver_locks & ERTS_PROC_LOCK_STATUS) {
- erts_smp_proc_unlock(receiver, ERTS_PROC_LOCK_STATUS);
- need_locks |= ERTS_PROC_LOCK_STATUS;
+ need_locks = receiver_locks & (ERTS_PROC_LOCK_STATUS|ERTS_PROC_LOCK_TRACE);
+ if (need_locks) {
+ erts_smp_proc_unlock(receiver, need_locks);
}
+ need_locks |= ERTS_PROC_LOCK_MSGQ;
erts_smp_proc_lock(receiver, need_locks);
}
locked_msgq = 1;
@@ -417,19 +427,13 @@ queue_message(Process *c_p,
/* Drop message if receiver is exiting or has a pending exit... */
if (locked_msgq)
erts_smp_proc_unlock(receiver, ERTS_PROC_LOCK_MSGQ);
- erts_cleanup_messages(mp);
+ erts_cleanup_messages(first);
return 0;
}
- ERL_MESSAGE_TERM(mp) = message;
- ERL_MESSAGE_TOKEN(mp) = seq_trace_token;
-#ifdef USE_VM_PROBES
- ERL_MESSAGE_DT_UTAG(mp) = dt_utag;
-#endif
-
res = receiver->msg.len;
#ifdef ERTS_SMP
- if (*receiver_locks & ERTS_PROC_LOCK_MAIN) {
+ if (receiver_locks & ERTS_PROC_LOCK_MAIN) {
/*
* We move 'in queue' to 'private queue' and place
* message at the end of 'private queue' in order
@@ -440,75 +444,84 @@ queue_message(Process *c_p,
*/
res += receiver->msg_inq.len;
ERTS_SMP_MSGQ_MV_INQ2PRIVQ(receiver);
- LINK_MESSAGE_PRIVQ(receiver, mp);
+ LINK_MESSAGE_PRIVQ(receiver, first, last, len);
}
else
#endif
{
- LINK_MESSAGE(receiver, mp);
+ LINK_MESSAGE(receiver, first, last, len);
}
+ if (IS_TRACED_FL(receiver, F_TRACE_RECEIVE)
+ && (te = &erts_receive_tracing[erts_active_bp_ix()],
+ te->on)) {
+
+ ErtsMessage *msg = first;
+
#ifdef USE_VM_PROBES
- if (DTRACE_ENABLED(message_queued)) {
- DTRACE_CHARBUF(receiver_name, DTRACE_TERM_BUF_SIZE);
- Sint tok_label = 0;
- Sint tok_lastcnt = 0;
- Sint tok_serial = 0;
-
- dtrace_proc_str(receiver, receiver_name);
- if (seq_trace_token != NIL && is_tuple(seq_trace_token)) {
- tok_label = signed_val(SEQ_TRACE_T_LABEL(seq_trace_token));
- tok_lastcnt = signed_val(SEQ_TRACE_T_LASTCNT(seq_trace_token));
- tok_serial = signed_val(SEQ_TRACE_T_SERIAL(seq_trace_token));
+ if (DTRACE_ENABLED(message_queued)) {
+ DTRACE_CHARBUF(receiver_name, DTRACE_TERM_BUF_SIZE);
+ Sint tok_label = 0;
+ Sint tok_lastcnt = 0;
+ Sint tok_serial = 0;
+ Eterm seq_trace_token = ERL_MESSAGE_TOKEN(msg);
+
+ dtrace_proc_str(receiver, receiver_name);
+ if (seq_trace_token != NIL && is_tuple(seq_trace_token)) {
+ tok_label = signed_val(SEQ_TRACE_T_LABEL(seq_trace_token));
+ tok_lastcnt = signed_val(SEQ_TRACE_T_LASTCNT(seq_trace_token));
+ tok_serial = signed_val(SEQ_TRACE_T_SERIAL(seq_trace_token));
+ }
+ DTRACE6(message_queued,
+ receiver_name, size_object(ERL_MESSAGE_TERM(msg)),
+ receiver->msg.len,
+ tok_label, tok_lastcnt, tok_serial);
}
- DTRACE6(message_queued,
- receiver_name, size_object(message), receiver->msg.len,
- tok_label, tok_lastcnt, tok_serial);
- }
#endif
+ while (msg) {
+ trace_receive(receiver, from, ERL_MESSAGE_TERM(msg), te);
+ msg = msg->next;
+ }
- if (IS_TRACED_FL(receiver, F_TRACE_RECEIVE))
- trace_receive(receiver, message);
-
- if (locked_msgq)
+ }
+ if (locked_msgq) {
erts_smp_proc_unlock(receiver, ERTS_PROC_LOCK_MSGQ);
+ }
- erts_proc_notify_new_message(receiver,
#ifdef ERTS_SMP
- *receiver_locks
+ erts_proc_notify_new_message(receiver, receiver_locks);
#else
- 0
-#endif
- );
-
-#ifndef ERTS_SMP
- ERTS_HOLE_CHECK(receiver);
+ erts_proc_notify_new_message(receiver, 0);
#endif
return res;
}
-void
-#ifdef USE_VM_PROBES
-erts_queue_message_probe(Process* receiver, ErtsProcLocks *receiver_locks,
- ErtsMessage* mp,
- Eterm message, Eterm seq_trace_token, Eterm dt_utag)
-#else
-erts_queue_message(Process* receiver, ErtsProcLocks *receiver_locks,
- ErtsMessage* mp,
- Eterm message, Eterm seq_trace_token)
-#endif
+static Sint
+queue_message(Process* receiver,
+ erts_aint32_t *receiver_state,
+ ErtsProcLocks receiver_locks,
+ ErtsMessage* mp, Eterm msg, Eterm from)
{
- queue_message(NULL,
- receiver,
- NULL,
- receiver_locks,
- mp,
- message,
- seq_trace_token
-#ifdef USE_VM_PROBES
- , dt_utag
-#endif
- );
+ ERL_MESSAGE_TERM(mp) = msg;
+ return queue_messages(receiver, receiver_state, receiver_locks,
+ mp, &mp->next, 1, from);
+}
+
+Sint
+erts_queue_message(Process* receiver, ErtsProcLocks receiver_locks,
+ ErtsMessage* mp, Eterm msg, Eterm from)
+{
+ return queue_message(receiver, NULL, receiver_locks, mp, msg, from);
+}
+
+
+Sint
+erts_queue_messages(Process* receiver, ErtsProcLocks receiver_locks,
+ ErtsMessage* first, ErtsMessage** last, Uint len,
+ Eterm from)
+{
+ return queue_messages(receiver, NULL, receiver_locks,
+ first, last, len, from);
}
void
@@ -587,17 +600,19 @@ erts_try_alloc_message_on_heap(Process *pp,
ASSERT(!(*psp & ERTS_PSFLG_OFF_HEAP_MSGQ));
- if (
+ if ((*psp) & ERTS_PSFLGS_VOLATILE_HEAP)
+ goto in_message_fragment;
+ else if (
#if defined(ERTS_SMP)
*plp & ERTS_PROC_LOCK_MAIN
#else
- 1
+ pp
#endif
) {
#ifdef ERTS_SMP
try_on_heap:
#endif
- if ((*psp & (ERTS_PSFLG_EXITING|ERTS_PSFLG_PENDING_EXIT))
+ if (((*psp) & ERTS_PSFLGS_VOLATILE_HEAP)
|| (pp->flags & F_DISABLE_GC)
|| HEAP_LIMIT(pp) - HEAP_TOP(pp) <= sz) {
/*
@@ -621,7 +636,7 @@ erts_try_alloc_message_on_heap(Process *pp,
*on_heap_p = !0;
}
#ifdef ERTS_SMP
- else if (erts_smp_proc_trylock(pp, ERTS_PROC_LOCK_MAIN) == 0) {
+ else if (pp && erts_smp_proc_trylock(pp, ERTS_PROC_LOCK_MAIN) == 0) {
locked_main = 1;
*psp = erts_smp_atomic32_read_nob(&pp->state);
*plp |= ERTS_PROC_LOCK_MAIN;
@@ -766,17 +781,7 @@ erts_send_message(Process* sender,
utag = DT_UTAG(sender);
else
utag = copy_struct(DT_UTAG(sender), dt_utag_size, &hp, ohp);
-#ifdef DTRACE_TAG_HARDDEBUG
- erts_fprintf(stderr,
- "Dtrace -> (%T) Spreading tag (%T) with "
- "message %T!\r\n",sender->common.id, utag, message);
-#endif
}
-#endif
- BM_MESSAGE_COPIED(msize);
- BM_SWAP_TIMER(copy,send);
-
-#ifdef USE_VM_PROBES
if (DTRACE_ENABLED(message_send)) {
if (have_seqtrace(stoken)) {
tok_label = signed_val(SEQ_TRACE_T_LABEL(stoken));
@@ -787,6 +792,9 @@ erts_send_message(Process* sender,
msize, tok_label, tok_lastcnt, tok_serial);
}
#endif
+ BM_MESSAGE_COPIED(msize);
+ BM_SWAP_TIMER(copy,send);
+
} else {
Eterm *hp;
@@ -822,21 +830,21 @@ erts_send_message(Process* sender,
BM_MESSAGE_COPIED(msz);
BM_SWAP_TIMER(copy,send);
}
+#ifdef USE_VM_PROBES
DTRACE6(message_send, sender_name, receiver_name,
msize, tok_label, tok_lastcnt, tok_serial);
+#endif
}
- res = queue_message(sender,
- receiver,
- &receiver_state,
- receiver_locks,
- mp,
- message,
- token
+ ERL_MESSAGE_TOKEN(mp) = token;
#ifdef USE_VM_PROBES
- , utag
+ ERL_MESSAGE_DT_UTAG(mp) = utag;
#endif
- );
+ res = queue_message(receiver,
+ &receiver_state,
+ *receiver_locks,
+ mp, message,
+ sender->common.id);
BM_SWAP_TIMER(send,system);
@@ -892,7 +900,8 @@ erts_deliver_exit_message(Eterm from, Process *to, ErtsProcLocks *to_locksp,
/* the trace token must in this case be updated by the caller */
seq_trace_output(token, save, SEQ_TRACE_SEND, to->common.id, NULL);
temptoken = copy_struct(token, sz_token, &hp, ohp);
- erts_queue_message(to, to_locksp, mp, save, temptoken);
+ ERL_MESSAGE_TOKEN(mp) = temptoken;
+ erts_queue_message(to, *to_locksp, mp, save, am_system);
} else {
sz_from = IS_CONST(from) ? 0 : size_object(from);
#ifdef SHCOPY_SEND
@@ -914,7 +923,7 @@ erts_deliver_exit_message(Eterm from, Process *to, ErtsProcLocks *to_locksp,
? from
: copy_struct(from, sz_from, &hp, ohp));
save = TUPLE3(hp, am_EXIT, from_copy, mess);
- erts_queue_message(to, to_locksp, mp, save, NIL);
+ erts_queue_message(to, *to_locksp, mp, save, am_system);
}
}
@@ -1489,7 +1498,7 @@ erts_factory_message_create(ErtsHeapFactory* factory,
int on_heap;
erts_aint32_t state;
- state = erts_smp_atomic32_read_nob(&proc->state);
+ state = proc ? erts_smp_atomic32_read_nob(&proc->state) : 0;
if (state & ERTS_PSFLG_OFF_HEAP_MSGQ) {
msgp = erts_alloc_message(sz, &hp);
diff --git a/erts/emulator/beam/erl_message.h b/erts/emulator/beam/erl_message.h
index 60035d15ae..46063ea0c2 100644
--- a/erts/emulator/beam/erl_message.h
+++ b/erts/emulator/beam/erl_message.h
@@ -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.
@@ -112,8 +112,8 @@ typedef struct erl_heap_fragment ErlHeapFragment;
struct erl_heap_fragment {
ErlHeapFragment* next; /* Next heap fragment */
ErlOffHeap off_heap; /* Offset heap data. */
- unsigned alloc_size; /* Size in (half)words of mem */
- unsigned used_size; /* With terms to be moved to heap by GC */
+ Uint alloc_size; /* Size in (half)words of mem */
+ Uint used_size; /* With terms to be moved to heap by GC */
Eterm mem[1]; /* Data */
};
@@ -182,48 +182,64 @@ typedef struct {
Sint len; /* queue length */
} ErlMessageInQueue;
+typedef struct erl_trace_message_queue__ {
+ struct erl_trace_message_queue__ *next; /* point to the next receiver */
+ Eterm receiver;
+ ErtsMessage* first;
+ ErtsMessage** last; /* point to the last next pointer */
+ Sint len; /* queue length */
+} ErlTraceMessageQueue;
+
#endif
/* Get "current" message */
#define PEEK_MESSAGE(p) (*(p)->msg.save)
+#ifdef USE_VM_PROBES
+#define LINK_MESSAGE_DTAG(mp, dt) ERL_MESSAGE_DT_UTAG(mp) = dt
+#else
+#define LINK_MESSAGE_DTAG(mp, dt)
+#endif
-/* Add message last in private message queue */
-#define LINK_MESSAGE_PRIVQ(p, mp) do { \
- *(p)->msg.last = (mp); \
- (p)->msg.last = &(mp)->next; \
- (p)->msg.len++; \
-} while (0)
-
+#define LINK_MESSAGE_IMPL(p, first_msg, last_msg, num_msgs, where) do { \
+ *(p)->where.last = (first_msg); \
+ (p)->where.last = (last_msg); \
+ (p)->where.len += (num_msgs); \
+ } while(0)
#ifdef ERTS_SMP
-/* Move in message queue to end of private message queue */
-#define ERTS_SMP_MSGQ_MV_INQ2PRIVQ(P) \
-do { \
- if ((P)->msg_inq.first) { \
- *(P)->msg.last = (P)->msg_inq.first; \
- (P)->msg.last = (P)->msg_inq.last; \
- (P)->msg.len += (P)->msg_inq.len; \
- (P)->msg_inq.first = NULL; \
- (P)->msg_inq.last = &(P)->msg_inq.first; \
- (P)->msg_inq.len = 0; \
- } \
-} while (0)
-
-/* Add message last in message queue */
-#define LINK_MESSAGE(p, mp) do { \
- *(p)->msg_inq.last = (mp); \
- (p)->msg_inq.last = &(mp)->next; \
- (p)->msg_inq.len++; \
-} while(0)
+/* Add message last in private message queue */
+#define LINK_MESSAGE_PRIVQ(p, first_msg, last_msg, len) \
+ do { \
+ LINK_MESSAGE_IMPL(p, first_msg, last_msg, len, msg); \
+ } while (0)
+
+/* Add message last_msg in message queue */
+#define LINK_MESSAGE(p, first_msg, last_msg, len) \
+ LINK_MESSAGE_IMPL(p, first_msg, last_msg, len, msg_inq)
+
+#define ERTS_SMP_MSGQ_MV_INQ2PRIVQ(p) \
+ do { \
+ if (p->msg_inq.first) { \
+ *p->msg.last = p->msg_inq.first; \
+ p->msg.last = p->msg_inq.last; \
+ p->msg.len += p->msg_inq.len; \
+ p->msg_inq.first = NULL; \
+ p->msg_inq.last = &p->msg_inq.first; \
+ p->msg_inq.len = 0; \
+ } \
+ } while (0)
#else
-#define ERTS_SMP_MSGQ_MV_INQ2PRIVQ(P)
+#define ERTS_SMP_MSGQ_MV_INQ2PRIVQ(p)
-/* Add message last in message queue */
-#define LINK_MESSAGE(p, mp) LINK_MESSAGE_PRIVQ((p), (mp))
+/* Add message last_msg in message queue */
+#define LINK_MESSAGE(p, first_msg, last_msg, len) \
+ do { \
+ LINK_MESSAGE_IMPL(p, first_msg, last_msg, len, msg); \
+ } while(0)
#endif
@@ -259,23 +275,30 @@ do { \
(HEAP_FRAG_P)->off_heap.overhead = 0; \
} while (0)
+#ifdef USE_VM_PROBES
+#define ERL_MESSAGE_DT_UTAG_INIT(MP) ERL_MESSAGE_DT_UTAG(MP) = NIL
+#else
+#define ERL_MESSAGE_DT_UTAG_INIT(MP) do{ } while (0)
+#endif
+
+#define ERTS_INIT_MESSAGE(MP) \
+ do { \
+ (MP)->next = NULL; \
+ ERL_MESSAGE_TERM(MP) = THE_NON_VALUE; \
+ ERL_MESSAGE_TOKEN(MP) = NIL; \
+ ERL_MESSAGE_DT_UTAG_INIT(MP); \
+ MP->data.attached = NULL; \
+ } while (0)
+
void init_message(void);
ErlHeapFragment* new_message_buffer(Uint);
ErlHeapFragment* erts_resize_message_buffer(ErlHeapFragment *, Uint,
Eterm *, Uint);
void free_message_buffer(ErlHeapFragment *);
-void erts_queue_dist_message(Process*, ErtsProcLocks*, ErtsDistExternal *, Eterm);
-#ifdef USE_VM_PROBES
-void erts_queue_message_probe(Process*, ErtsProcLocks*, ErtsMessage*,
- Eterm message, Eterm seq_trace_token, Eterm dt_utag);
-#define erts_queue_message(RP,RL,BP,Msg,SEQ) \
- erts_queue_message_probe((RP),(RL),(BP),(Msg),(SEQ),NIL)
-#else
-void erts_queue_message(Process*, ErtsProcLocks*, ErtsMessage*,
- Eterm message, Eterm seq_trace_token);
-#define erts_queue_message_probe(RP,RL,BP,Msg,SEQ,TAG) \
- erts_queue_message((RP),(RL),(BP),(Msg),(SEQ))
-#endif
+void erts_queue_dist_message(Process*, ErtsProcLocks, ErtsDistExternal *, Eterm, Eterm);
+Sint erts_queue_message(Process*, ErtsProcLocks,ErtsMessage*, Eterm, Eterm);
+Sint erts_queue_messages(Process*, ErtsProcLocks,
+ ErtsMessage*, ErtsMessage**, Uint, Eterm);
void erts_deliver_exit_message(Eterm, Process*, ErtsProcLocks *, Eterm, Eterm);
Sint erts_send_message(Process*, Process*, ErtsProcLocks*, Eterm, unsigned);
void erts_link_mbuf_to_proc(Process *proc, ErlHeapFragment *bp);
@@ -346,6 +369,10 @@ ERTS_GLB_INLINE Uint erts_msg_attached_data_size(ErtsMessage *msg);
#define ERTS_MSG_COMBINED_HFRAG ((void *) 0x1)
+#define erts_message_to_heap_frag(MP) \
+ (((MP)->data.attached == ERTS_MSG_COMBINED_HFRAG) ? \
+ &(MP)->hfrag : (MP)->data.heap_frag)
+
#if ERTS_GLB_INLINE_INCL_FUNC_DEF
ERTS_GLB_FORCE_INLINE ErtsMessage *erts_alloc_message(Uint sz, Eterm **hpp)
@@ -354,9 +381,7 @@ ERTS_GLB_FORCE_INLINE ErtsMessage *erts_alloc_message(Uint sz, Eterm **hpp)
if (sz == 0) {
mp = erts_alloc_message_ref();
- mp->next = NULL;
- ERL_MESSAGE_TERM(mp) = NIL;
- mp->data.attached = NULL;
+ ERTS_INIT_MESSAGE(mp);
if (hpp)
*hpp = NULL;
return mp;
@@ -365,8 +390,7 @@ ERTS_GLB_FORCE_INLINE ErtsMessage *erts_alloc_message(Uint sz, Eterm **hpp)
mp = erts_alloc(ERTS_ALC_T_MSG,
sizeof(ErtsMessage) + (sz - 1)*sizeof(Eterm));
- mp->next = NULL;
- ERL_MESSAGE_TERM(mp) = NIL;
+ ERTS_INIT_MESSAGE(mp);
mp->data.attached = ERTS_MSG_COMBINED_HFRAG;
ERTS_INIT_HEAP_FRAG(&mp->hfrag, sz, sz);
@@ -429,10 +453,7 @@ ERTS_GLB_INLINE Uint erts_msg_attached_data_size(ErtsMessage *msg)
ASSERT(msg->data.attached);
if (is_value(ERL_MESSAGE_TERM(msg))) {
ErlHeapFragment *bp;
- if (msg->data.attached == ERTS_MSG_COMBINED_HFRAG)
- bp = &msg->hfrag;
- else
- bp = msg->data.heap_frag;
+ bp = erts_message_to_heap_frag(msg);
return erts_used_frag_sz(bp);
}
else if (msg->data.dist_ext->heap_size < 0)
diff --git a/erts/emulator/beam/erl_monitors.c b/erts/emulator/beam/erl_monitors.c
index 7dfa01c8ac..910598690d 100644
--- a/erts/emulator/beam/erl_monitors.c
+++ b/erts/emulator/beam/erl_monitors.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.
@@ -356,7 +356,7 @@ void erts_add_monitor(ErtsMonitor **root, Uint type, Eterm ref, Eterm pid,
tstack[tpos++] = this;
this = &((*this)->right);
} else { /* Equal key is an error for monitors */
- erl_exit(1,"Insertion of already present monitor!");
+ erts_exit(ERTS_ERROR_EXIT,"Insertion of already present monitor!");
break;
}
}
diff --git a/erts/emulator/beam/erl_monitors.h b/erts/emulator/beam/erl_monitors.h
index 901ed8940b..9e2beedea3 100644
--- a/erts/emulator/beam/erl_monitors.h
+++ b/erts/emulator/beam/erl_monitors.h
@@ -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/erts/emulator/beam/erl_msacc.c b/erts/emulator/beam/erl_msacc.c
index 71e3fd8b6e..544bc8b983 100644
--- a/erts/emulator/beam/erl_msacc.c
+++ b/erts/emulator/beam/erl_msacc.c
@@ -257,7 +257,7 @@ static void send_reply(ErtsMsAcc *msacc, ErtsMSAccReq *msaccrp) {
if (msacc->unmanaged) erts_mtx_unlock(&msacc->mtx);
- erts_queue_message(rp, &rp_locks, msgp, msg, NIL);
+ erts_queue_message(rp, rp_locks, msgp, msg, am_system);
if (esdp && msaccrp->req_sched == esdp->no)
rp_locks &= ~ERTS_PROC_LOCK_MAIN;
@@ -338,7 +338,7 @@ erts_msacc_request(Process *c_p, int action, Eterm *threads)
{
#ifdef ERTS_ENABLE_MSACC
ErtsMsAcc *msacc = ERTS_MSACC_TSD_GET();
- ErtsSchedulerData *esdp = ERTS_PROC_GET_SCHDATA(c_p);
+ ErtsSchedulerData *esdp = erts_proc_sched_data(c_p);
Eterm ref;
ErtsMSAccReq *msaccrp;
Eterm *hp;
diff --git a/erts/emulator/beam/erl_mtrace.c b/erts/emulator/beam/erl_mtrace.c
index fdaf02f37a..e275867928 100644
--- a/erts/emulator/beam/erl_mtrace.c
+++ b/erts/emulator/beam/erl_mtrace.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/erts/emulator/beam/erl_mtrace.h b/erts/emulator/beam/erl_mtrace.h
index b34eab3c4a..776c70a819 100644
--- a/erts/emulator/beam/erl_mtrace.h
+++ b/erts/emulator/beam/erl_mtrace.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/erts/emulator/beam/erl_nif.c b/erts/emulator/beam/erl_nif.c
index 2204231748..606b73c7b5 100644
--- a/erts/emulator/beam/erl_nif.c
+++ b/erts/emulator/beam/erl_nif.c
@@ -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.
@@ -20,6 +20,23 @@
/* Erlang Native InterFace
*/
+/*
+ * Environment contains a pointer to currently executing process.
+ * In the dirty case this pointer do however not point to the
+ * actual process structure of the executing process, but instead
+ * a "shadow process structure". This in order to be able to handle
+ * heap allocation without the need to acquire the main lock on
+ * the process.
+ *
+ * The dirty process is allowed to allocate on the heap without
+ * the main lock, i.e., incrementing htop, but is not allowed to
+ * modify mbuf, offheap, etc without the main lock. The dirty
+ * process moves mbuf list and offheap list of the shadow process
+ * structure into the real structure when the dirty nif call
+ * completes.
+ */
+
+
#ifdef HAVE_CONFIG_H
# include "config.h"
#endif
@@ -79,9 +96,46 @@ void dtrace_nifenv_str(ErlNifEnv *, char *);
#endif
#define MIN_HEAP_FRAG_SZ 200
-static Eterm* alloc_heap_heavy(ErlNifEnv* env, unsigned need, Eterm* hp);
+static Eterm* alloc_heap_heavy(ErlNifEnv* env, size_t need, Eterm* hp);
+
+static ERTS_INLINE int
+is_scheduler(void)
+{
+ ErtsSchedulerData *esdp = erts_get_scheduler_data();
+ if (!esdp)
+ return 0;
+ if (ERTS_SCHEDULER_IS_DIRTY(esdp))
+ return -1;
+ return 1;
+}
-static ERTS_INLINE Eterm* alloc_heap(ErlNifEnv* env, unsigned need)
+static ERTS_INLINE void
+execution_state(ErlNifEnv *env, Process **c_pp, int *schedp)
+{
+ if (schedp)
+ *schedp = is_scheduler();
+ if (c_pp) {
+ if (!env || env->proc->common.id == ERTS_INVALID_PID)
+ *c_pp = NULL;
+ else {
+ Process *c_p = env->proc;
+
+ if (!(c_p->static_flags & ERTS_STC_FLG_SHADOW_PROC))
+ ASSERT(is_scheduler() > 0);
+ else {
+ c_p = env->proc->next;
+ ASSERT(is_scheduler() < 0);
+ ASSERT(c_p && env->proc->common.id == c_p->common.id);
+ }
+
+ *c_pp = c_p;
+
+ ASSERT(!(c_p->static_flags & ERTS_STC_FLG_SHADOW_PROC));
+ }
+ }
+}
+
+static ERTS_INLINE Eterm* alloc_heap(ErlNifEnv* env, size_t need)
{
Eterm* hp = env->hp;
env->hp += need;
@@ -91,12 +145,13 @@ static ERTS_INLINE Eterm* alloc_heap(ErlNifEnv* env, unsigned need)
return alloc_heap_heavy(env, need, hp);
}
-static Eterm* alloc_heap_heavy(ErlNifEnv* env, unsigned need, Eterm* hp)
-{
+static Eterm* alloc_heap_heavy(ErlNifEnv* env, size_t need, Eterm* hp)
+{
env->hp = hp;
- if (env->heap_frag == NULL) {
+ if (env->heap_frag == NULL) {
ASSERT(HEAP_LIMIT(env->proc) == env->hp_end);
- HEAP_TOP(env->proc) = env->hp;
+ ASSERT(env->hp + need > env->hp_end);
+ HEAP_TOP(env->proc) = env->hp;
}
else {
env->heap_frag->used_size = hp - env->heap_frag->mem;
@@ -111,7 +166,7 @@ static Eterm* alloc_heap_heavy(ErlNifEnv* env, unsigned need, Eterm* hp)
}
#if SIZEOF_LONG != ERTS_SIZEOF_ETERM
-static ERTS_INLINE void ensure_heap(ErlNifEnv* env, unsigned may_need)
+static ERTS_INLINE void ensure_heap(ErlNifEnv* env, size_t may_need)
{
if (env->hp + may_need > env->hp_end) {
alloc_heap_heavy(env, may_need, env->hp);
@@ -120,8 +175,12 @@ static ERTS_INLINE void ensure_heap(ErlNifEnv* env, unsigned may_need)
}
#endif
-void erts_pre_nif(ErlNifEnv* env, Process* p, struct erl_module_nif* mod_nif)
+void erts_pre_nif(ErlNifEnv* env, Process* p, struct erl_module_nif* mod_nif,
+ Process* tracee)
{
+#ifdef ERTS_DIRTY_SCHEDULERS
+ ErtsSchedulerData *esdp;
+#endif
env->mod_nif = mod_nif;
env->proc = p;
env->hp = HEAP_TOP(p);
@@ -130,17 +189,62 @@ void erts_pre_nif(ErlNifEnv* env, Process* p, struct erl_module_nif* mod_nif)
env->fpe_was_unmasked = erts_block_fpe();
env->tmp_obj_list = NULL;
env->exception_thrown = 0;
-}
+ env->tracee = tracee;
-static void pre_nif_noproc(ErlNifEnv* env, struct erl_module_nif* mod_nif)
-{
- env->mod_nif = mod_nif;
- env->proc = NULL;
- env->hp = NULL;
- env->hp_end = NULL;
- env->heap_frag = NULL;
- env->fpe_was_unmasked = erts_block_fpe();
- env->tmp_obj_list = NULL;
+ ASSERT(p->common.id != ERTS_INVALID_PID);
+
+#ifdef ERTS_DIRTY_SCHEDULERS
+ esdp = erts_get_scheduler_data();
+ ASSERT(esdp);
+
+ if (!ERTS_SCHEDULER_IS_DIRTY(esdp)) {
+#ifdef DEBUG
+ erts_aint32_t state = erts_smp_atomic32_read_nob(&p->state);
+
+ ASSERT(p->scheduler_data == esdp);
+ ASSERT((state & (ERTS_PSFLG_RUNNING
+ | ERTS_PSFLG_RUNNING_SYS))
+ && !(state & (ERTS_PSFLG_DIRTY_RUNNING
+ | ERTS_PSFLG_DIRTY_RUNNING_SYS)));
+#endif
+
+ }
+ else {
+ Process *sproc;
+#ifdef DEBUG
+ erts_aint32_t state = erts_smp_atomic32_read_nob(&p->state);
+
+ ASSERT(!p->scheduler_data);
+ ASSERT((state & ERTS_PSFLG_DIRTY_RUNNING)
+ && !(state & (ERTS_PSFLG_RUNNING|ERTS_PSFLG_RUNNING_SYS)));
+#endif
+
+ sproc = esdp->dirty_shadow_process;
+ ASSERT(sproc);
+ ASSERT(sproc->static_flags & ERTS_STC_FLG_SHADOW_PROC);
+ ASSERT(erts_smp_atomic32_read_nob(&sproc->state)
+ == (ERTS_PSFLG_ACTIVE
+ | ERTS_PSFLG_DIRTY_RUNNING
+ | ERTS_PSFLG_PROXY));
+
+ sproc->next = p;
+ sproc->common.id = p->common.id;
+ sproc->htop = p->htop;
+ sproc->stop = p->stop;
+ sproc->hend = p->hend;
+ sproc->heap = p->heap;
+ sproc->abandoned_heap = p->abandoned_heap;
+ sproc->heap_sz = p->heap_sz;
+ sproc->high_water = p->high_water;
+ sproc->old_hend = p->old_hend;
+ sproc->old_htop = p->old_htop;
+ sproc->old_heap = p->old_heap;
+ sproc->mbuf = NULL;
+ sproc->mbuf_sz = 0;
+ ERTS_INIT_OFF_HEAP(&sproc->off_heap);
+ env->proc = sproc;
+ }
+#endif
}
/* Temporary object header, auto-deallocated when NIF returns
@@ -165,28 +269,78 @@ static ERTS_INLINE void free_tmp_objs(ErlNifEnv* env)
void erts_post_nif(ErlNifEnv* env)
{
erts_unblock_fpe(env->fpe_was_unmasked);
- if (env->heap_frag == NULL) {
- ASSERT(env->hp_end == HEAP_LIMIT(env->proc));
- ASSERT(env->hp >= HEAP_TOP(env->proc));
- ASSERT(env->hp <= HEAP_LIMIT(env->proc));
- HEAP_TOP(env->proc) = env->hp;
- }
- else {
- ASSERT(env->hp_end != HEAP_LIMIT(env->proc));
- ASSERT(env->hp_end - env->hp <= env->heap_frag->alloc_size);
- env->heap_frag->used_size = env->hp - env->heap_frag->mem;
- ASSERT(env->heap_frag->used_size <= env->heap_frag->alloc_size);
+
+#ifdef ERTS_DIRTY_SCHEDULERS
+ if (!(env->proc->static_flags & ERTS_STC_FLG_SHADOW_PROC))
+#endif
+ {
+ ASSERT(is_scheduler() > 0);
+ if (env->heap_frag == NULL) {
+ ASSERT(env->hp_end == HEAP_LIMIT(env->proc));
+ ASSERT(env->hp >= HEAP_TOP(env->proc));
+ ASSERT(env->hp <= HEAP_LIMIT(env->proc));
+ HEAP_TOP(env->proc) = env->hp;
+ }
+ else {
+ ASSERT(env->hp_end != HEAP_LIMIT(env->proc));
+ ASSERT(env->hp_end - env->hp <= env->heap_frag->alloc_size);
+ env->heap_frag->used_size = env->hp - env->heap_frag->mem;
+ ASSERT(env->heap_frag->used_size <= env->heap_frag->alloc_size);
+ }
+ env->exiting = ERTS_PROC_IS_EXITING(env->proc);
}
- free_tmp_objs(env);
-}
+#ifdef ERTS_DIRTY_SCHEDULERS
+ else { /* Dirty nif call using shadow process struct */
+ Process *c_p = env->proc->next;
-static void post_nif_noproc(ErlNifEnv* env)
-{
- erts_unblock_fpe(env->fpe_was_unmasked);
+ ASSERT(is_scheduler() < 0);
+ ASSERT(env->proc->common.id == c_p->common.id);
+
+ if (!env->heap_frag) {
+ ASSERT(env->hp_end == HEAP_LIMIT(c_p));
+ ASSERT(env->hp >= HEAP_TOP(c_p));
+ ASSERT(env->hp <= HEAP_LIMIT(c_p));
+ HEAP_TOP(c_p) = env->hp;
+ }
+ else {
+ ASSERT(env->hp_end != HEAP_LIMIT(c_p));
+ ASSERT(env->hp_end - env->hp <= env->heap_frag->alloc_size);
+
+ HEAP_TOP(c_p) = HEAP_TOP(env->proc);
+ env->heap_frag->used_size = env->hp - env->heap_frag->mem;
+
+ ASSERT(env->heap_frag->used_size <= env->heap_frag->alloc_size);
+
+ if (c_p->mbuf) {
+ ErlHeapFragment *bp;
+ for (bp = env->proc->mbuf; bp->next; bp = bp->next)
+ ;
+ bp->next = c_p->mbuf;
+ }
+
+ c_p->mbuf = env->proc->mbuf;
+ c_p->mbuf_sz += env->proc->mbuf_sz;
+
+ }
+
+ if (!c_p->off_heap.first)
+ c_p->off_heap.first = env->proc->off_heap.first;
+ else if (env->proc->off_heap.first) {
+ struct erl_off_heap_header *ohhp;
+ for (ohhp = env->proc->off_heap.first; ohhp->next; ohhp = ohhp->next)
+ ;
+ ohhp->next = c_p->off_heap.first;
+ c_p->off_heap.first = env->proc->off_heap.first;
+ }
+ c_p->off_heap.overhead += env->proc->off_heap.overhead;
+
+ env->exiting = ERTS_PROC_IS_EXITING(c_p);
+ BUMP_ALL_REDS(c_p);
+ }
+#endif
free_tmp_objs(env);
}
-
/* Flush out our cached heap pointers to allow an ordinary HAlloc
*/
static void flush_env(ErlNifEnv* env)
@@ -209,6 +363,7 @@ static void flush_env(ErlNifEnv* env)
*/
static void cache_env(ErlNifEnv* env)
{
+ env->heap_frag = MBUF(env->proc);
if (env->heap_frag == NULL) {
ASSERT(env->hp_end == HEAP_LIMIT(env->proc));
ASSERT(env->hp <= HEAP_TOP(env->proc));
@@ -216,10 +371,6 @@ static void cache_env(ErlNifEnv* env)
env->hp = HEAP_TOP(env->proc);
}
else {
- ASSERT(env->hp_end != HEAP_LIMIT(env->proc));
- ASSERT(env->hp_end - env->hp <= env->heap_frag->alloc_size);
- env->heap_frag = MBUF(env->proc);
- ASSERT(env->heap_frag != NULL);
env->hp = env->heap_frag->mem + env->heap_frag->used_size;
env->hp_end = env->heap_frag->mem + env->heap_frag->alloc_size;
}
@@ -250,18 +401,20 @@ struct enif_msg_environment_t
Process phony_proc;
};
-ErlNifEnv* enif_alloc_env(void)
+static ERTS_INLINE void
+setup_nif_env(struct enif_msg_environment_t* msg_env,
+ struct erl_module_nif* mod,
+ Process* tracee)
{
- struct enif_msg_environment_t* msg_env =
- erts_alloc_fnf(ERTS_ALC_T_NIF, sizeof(struct enif_msg_environment_t));
Eterm* phony_heap = (Eterm*) msg_env; /* dummy non-NULL ptr */
-
- msg_env->env.hp = phony_heap;
+
+ msg_env->env.hp = phony_heap;
msg_env->env.hp_end = phony_heap;
msg_env->env.heap_frag = NULL;
- msg_env->env.mod_nif = NULL;
+ msg_env->env.mod_nif = mod;
msg_env->env.tmp_obj_list = NULL;
msg_env->env.proc = &msg_env->phony_proc;
+ msg_env->env.exception_thrown = 0;
memset(&msg_env->phony_proc, 0, sizeof(Process));
HEAP_START(&msg_env->phony_proc) = phony_heap;
HEAP_TOP(&msg_env->phony_proc) = phony_heap;
@@ -273,6 +426,14 @@ ErlNifEnv* enif_alloc_env(void)
msg_env->phony_proc.space_verified = 0;
msg_env->phony_proc.space_verified_from = NULL;
#endif
+ msg_env->env.tracee = tracee;
+}
+
+ErlNifEnv* enif_alloc_env(void)
+{
+ struct enif_msg_environment_t* msg_env =
+ erts_alloc_fnf(ERTS_ALC_T_NIF, sizeof(struct enif_msg_environment_t));
+ setup_nif_env(msg_env, NULL, NULL);
return &msg_env->env;
}
void enif_free_env(ErlNifEnv* env)
@@ -281,6 +442,20 @@ void enif_free_env(ErlNifEnv* env)
erts_free(ERTS_ALC_T_NIF, env);
}
+static ERTS_INLINE void pre_nif_noproc(struct enif_msg_environment_t* msg_env,
+ struct erl_module_nif* mod,
+ Process* tracee)
+{
+ setup_nif_env(msg_env, mod, tracee);
+ msg_env->env.fpe_was_unmasked = erts_block_fpe();
+}
+
+static ERTS_INLINE void post_nif_noproc(struct enif_msg_environment_t* msg_env)
+{
+ erts_unblock_fpe(msg_env->env.fpe_was_unmasked);
+ enif_clear_env(&msg_env->env);
+}
+
static ERTS_INLINE void clear_offheap(ErlOffHeap* oh)
{
oh->first = NULL;
@@ -307,74 +482,300 @@ void enif_clear_env(ErlNifEnv* env)
ASSERT(!is_offheap(&MSO(p)));
free_tmp_objs(env);
}
+
+#ifdef ERTS_SMP
+#ifdef DEBUG
+static int enif_send_delay = 0;
+#define ERTS_FORCE_ENIF_SEND_DELAY() (enif_send_delay++ % 2 == 0)
+#else
+#ifdef ERTS_PROC_LOCK_OWN_IMPL
+#define ERTS_FORCE_ENIF_SEND_DELAY() 0
+#else
+/*
+ * We always schedule messages if we do not use our own
+ * process lock implementation, as if we try to do a trylock on
+ * a lock that might already be locked by the same thread.
+ * And what happens then with different mutex implementations
+ * is not always guaranteed.
+ */
+#define ERTS_FORCE_ENIF_SEND_DELAY() 1
+#endif
+#endif
+
+int erts_flush_trace_messages(Process *c_p, ErtsProcLocks c_p_locks)
+{
+ ErlTraceMessageQueue *msgq, **last_msgq;
+ int reds = 0;
+
+ erts_smp_proc_lock(c_p, ERTS_PROC_LOCK_TRACE);
+
+ msgq = c_p->trace_msg_q;
+
+ if (!msgq)
+ goto error;
+
+ do {
+ Process* rp;
+ ErtsProcLocks rp_locks;
+ ErtsMessage *first, **last;
+ Uint len;
+
+ first = msgq->first;
+ last = msgq->last;
+ len = msgq->len;
+ msgq->first = NULL;
+ msgq->last = &msgq->first;
+ msgq->len = 0;
+ erts_smp_proc_unlock(c_p, ERTS_PROC_LOCK_TRACE);
+
+ ASSERT(len != 0);
+
+ rp = erts_proc_lookup(msgq->receiver);
+ if (rp) {
+ rp_locks = 0;
+ if (rp->common.id == c_p->common.id)
+ rp_locks = c_p_locks;
+ erts_queue_messages(rp, rp_locks, first, last, len, c_p->common.id);
+ if (rp->common.id == c_p->common.id)
+ rp_locks &= ~c_p_locks;
+ if (rp_locks)
+ erts_smp_proc_unlock(rp, rp_locks);
+ reds += len;
+ } else {
+ erts_cleanup_messages(first);
+ }
+ reds += 1;
+ erts_smp_proc_lock(c_p, ERTS_PROC_LOCK_TRACE);
+ msgq = msgq->next;
+ } while (msgq);
+
+ last_msgq = &c_p->trace_msg_q;
+
+ while (*last_msgq) {
+ msgq = *last_msgq;
+ if (msgq->len == 0) {
+ *last_msgq = msgq->next;
+ erts_free(ERTS_ALC_T_TRACE_MSG_QUEUE, msgq);
+ } else {
+ last_msgq = &msgq->next;
+ }
+ }
+
+error:
+ erts_smp_proc_unlock(c_p, ERTS_PROC_LOCK_TRACE);
+
+ return reds;
+}
+
+#endif
+
int enif_send(ErlNifEnv* env, const ErlNifPid* to_pid,
ErlNifEnv* msg_env, ERL_NIF_TERM msg)
{
struct enif_msg_environment_t* menv = (struct enif_msg_environment_t*)msg_env;
ErtsProcLocks rp_locks = 0;
+#ifdef ERTS_SMP
+ ErtsProcLocks lc_locks = 0;
+#endif
Process* rp;
Process* c_p;
ErtsMessage *mp;
- ErlHeapFragment* frags;
Eterm receiver = to_pid->pid;
- int flush_me = 0;
- int scheduler = erts_get_scheduler_id() != 0;
+ int scheduler;
- if (env != NULL) {
- c_p = env->proc;
- if (receiver == c_p->common.id) {
+ execution_state(env, &c_p, &scheduler);
+
+#ifndef ERTS_SMP
+ if (!scheduler) {
+ erts_exit(ERTS_ABORT_EXIT,
+ "enif_send: called from non-scheduler thread on non-SMP VM");
+ return 0;
+ }
+#endif
+
+ if (scheduler > 0) { /* Normal scheduler */
+ rp = erts_proc_lookup(receiver);
+ if (c_p == rp)
rp_locks = ERTS_PROC_LOCK_MAIN;
- flush_me = 1;
- }
}
else {
+ if (c_p && ERTS_PROC_IS_EXITING(c_p))
+ return 0;
+ rp = erts_pid2proc_opt(c_p, 0, receiver, rp_locks,
+ ERTS_P2P_FLG_INC_REFC);
+ }
+ if (rp == NULL)
+ return 0;
+
+ if (menv) {
+ flush_env(msg_env);
+ mp = erts_alloc_message(0, NULL);
+ mp->data.heap_frag = menv->env.heap_frag;
+ ASSERT(mp->data.heap_frag == MBUF(&menv->phony_proc));
+ if (mp->data.heap_frag != NULL) {
+ /* Move all offheap's from phony proc to the first fragment.
+ Quick and dirty... */
+ ASSERT(!is_offheap(&mp->data.heap_frag->off_heap));
+ mp->data.heap_frag->off_heap = MSO(&menv->phony_proc);
+ clear_offheap(&MSO(&menv->phony_proc));
+ menv->env.heap_frag = NULL;
+ MBUF(&menv->phony_proc) = NULL;
+ }
+ } else {
+ Uint sz = size_object(msg);
+ Eterm *hp;
+ mp = erts_alloc_message(sz, &hp);
+ msg = copy_struct(msg, sz, &hp, &mp->hfrag.off_heap);
+ ASSERT(hp == mp->hfrag.mem+mp->hfrag.used_size);
+ }
+
+ ERL_MESSAGE_TERM(mp) = msg;
+
+ if (!env || !env->tracee) {
+
+ if (c_p && IS_TRACED_FL(c_p, F_TRACE_SEND))
+ trace_send(c_p, receiver, msg);
+ }
+#ifdef ERTS_SMP
+ else {
+ /* This clause is taken when the nif is called in the context
+ of a traced process. We do not know which locks we have
+ so we have to do a try lock and if that fails we enqueue
+ the message in a special trace message output queue of the
+ tracee */
+ ErlTraceMessageQueue *msgq;
+ Process *t_p = env->tracee;
+
+
+ erts_smp_proc_lock(t_p, ERTS_PROC_LOCK_TRACE);
+
+ msgq = t_p->trace_msg_q;
+
+ while (msgq != NULL) {
+ if (msgq->receiver == receiver) {
+ break;
+ }
+ msgq = msgq->next;
+ }
+
+#ifdef ERTS_ENABLE_LOCK_CHECK
+ lc_locks = erts_proc_lc_my_proc_locks(rp);
+ rp_locks |= lc_locks;
+#endif
+ if (ERTS_FORCE_ENIF_SEND_DELAY() || msgq ||
+ rp_locks & ERTS_PROC_LOCK_MSGQ ||
+ erts_smp_proc_trylock(rp, ERTS_PROC_LOCK_MSGQ) == EBUSY) {
+
+ if (!msgq) {
#ifdef ERTS_SMP
- c_p = NULL;
-#else
- erl_exit(ERTS_ABORT_EXIT,"enif_send: env==NULL on non-SMP VM");
+ ErtsThrPrgrDelayHandle dhndl;
#endif
- }
-
- rp = (scheduler
- ? erts_proc_lookup(receiver)
- : erts_pid2proc_opt(c_p, ERTS_PROC_LOCK_MAIN,
- receiver, rp_locks, ERTS_P2P_FLG_INC_REFC));
- if (rp == NULL) {
- ASSERT(env == NULL || receiver != c_p->common.id);
- return 0;
+
+ msgq = erts_alloc(ERTS_ALC_T_TRACE_MSG_QUEUE,
+ sizeof(ErlTraceMessageQueue));
+ msgq->receiver = receiver;
+ msgq->first = mp;
+ msgq->last = &mp->next;
+ msgq->len = 1;
+
+ /* Insert in linked list */
+ msgq->next = t_p->trace_msg_q;
+ t_p->trace_msg_q = msgq;
+
+ erts_smp_proc_unlock(t_p, ERTS_PROC_LOCK_TRACE);
+
+#ifdef ERTS_SMP
+ if (!scheduler)
+ dhndl = erts_thr_progress_unmanaged_delay();
+#endif
+ erts_schedule_flush_trace_messages(t_p->common.id);
+#ifdef ERTS_SMP
+ if (!scheduler)
+ erts_thr_progress_unmanaged_continue(dhndl);
+#endif
+ } else {
+ msgq->len++;
+ *msgq->last = mp;
+ msgq->last = &mp->next;
+ erts_smp_proc_unlock(t_p, ERTS_PROC_LOCK_TRACE);
+ }
+ goto done;
+ } else {
+ erts_smp_proc_unlock(t_p, ERTS_PROC_LOCK_TRACE);
+ rp_locks &= ~ERTS_PROC_LOCK_TRACE;
+ rp_locks |= ERTS_PROC_LOCK_MSGQ;
+ }
}
- flush_env(msg_env);
- frags = menv->env.heap_frag;
- ASSERT(frags == MBUF(&menv->phony_proc));
- if (frags != NULL) {
- /* Move all offheap's from phony proc to the first fragment.
- Quick and dirty... */
- ASSERT(!is_offheap(&frags->off_heap));
- frags->off_heap = MSO(&menv->phony_proc);
- clear_offheap(&MSO(&menv->phony_proc));
- menv->env.heap_frag = NULL;
- MBUF(&menv->phony_proc) = NULL;
- }
- ASSERT(!is_offheap(&MSO(&menv->phony_proc)));
-
- if (flush_me) {
- flush_env(env); /* Needed for ERTS_HOLE_CHECK */
- }
- mp = erts_alloc_message(0, NULL);
- mp->data.heap_frag = frags;
- erts_queue_message(rp, &rp_locks, mp, msg, am_undefined);
+#endif /* ERTS_SMP */
+
+ erts_queue_message(rp, rp_locks, mp, msg,
+ c_p ? c_p->common.id : am_undefined);
+
+#ifdef ERTS_SMP
+done:
if (c_p == rp)
rp_locks &= ~ERTS_PROC_LOCK_MAIN;
- if (rp_locks)
- erts_smp_proc_unlock(rp, rp_locks);
- if (!scheduler)
+ if (rp_locks & ~lc_locks)
+ erts_smp_proc_unlock(rp, rp_locks & ~lc_locks);
+#endif
+ if (scheduler <= 0)
erts_proc_dec_refc(rp);
- if (flush_me) {
- cache_env(env);
- }
+
return 1;
}
+int
+enif_port_command(ErlNifEnv *env, const ErlNifPort* to_port,
+ ErlNifEnv *msg_env, ERL_NIF_TERM msg)
+{
+ int iflags = (erts_port_synchronous_ops
+ ? ERTS_PORT_SFLGS_INVALID_DRIVER_LOOKUP
+ : ERTS_PORT_SFLGS_INVALID_LOOKUP);
+ int scheduler;
+ Process *c_p;
+ Port *prt;
+ int res;
+
+ if (!env)
+ erts_exit(ERTS_ABORT_EXIT, "enif_port_command: env == NULL");
+
+ execution_state(env, &c_p, &scheduler);
+
+ if (!c_p)
+ c_p = env->proc;
+
+ if (scheduler > 0)
+ prt = erts_port_lookup(to_port->port_id, iflags);
+#ifdef ERTS_DIRTY_SCHEDULERS
+ else if (scheduler < 0) {
+ if (ERTS_PROC_IS_EXITING(c_p))
+ return 0;
+ prt = erts_thr_port_lookup(to_port->port_id, iflags);
+ }
+#endif
+ else {
+ erts_exit(ERTS_ABORT_EXIT, "enif_port_command: "
+ "called from non-scheduler thread");
+ }
+
+ if (!prt)
+ res = 0;
+ else {
+
+ if (IS_TRACED_FL(prt, F_TRACE_RECEIVE))
+ trace_port_receive(prt, c_p->common.id, am_command, msg);
+
+ res = erts_port_output_async(prt, c_p->common.id, msg);
+ }
+
+#ifdef ERTS_DIRTY_SCHEDULERS
+ if (scheduler < 0)
+ erts_port_dec_refc(prt);
+#endif
+
+ return res;
+}
+
ERL_NIF_TERM enif_make_copy(ErlNifEnv* dst_env, ERL_NIF_TERM src_term)
{
Uint sz;
@@ -404,12 +805,28 @@ static int is_offheap(const ErlOffHeap* oh)
ErlNifPid* enif_self(ErlNifEnv* caller_env, ErlNifPid* pid)
{
+ if (caller_env->proc->common.id == ERTS_INVALID_PID)
+ return NULL;
pid->pid = caller_env->proc->common.id;
return pid;
}
+
int enif_get_local_pid(ErlNifEnv* env, ERL_NIF_TERM term, ErlNifPid* pid)
{
- return is_internal_pid(term) ? (pid->pid=term, 1) : 0;
+ if (is_internal_pid(term)) {
+ pid->pid=term;
+ return 1;
+ }
+ return 0;
+}
+
+int enif_get_local_port(ErlNifEnv* env, ERL_NIF_TERM term, ErlNifPort* port)
+{
+ if (is_internal_port(term)) {
+ port->port_id=term;
+ return 1;
+ }
+ return 0;
}
int enif_is_atom(ErlNifEnv* env, ERL_NIF_TERM term)
@@ -622,6 +1039,68 @@ unsigned char* enif_make_new_binary(ErlNifEnv* env, size_t size,
return binary_bytes(*termp);
}
+int enif_term_to_binary(ErlNifEnv *dst_env, ERL_NIF_TERM term,
+ ErlNifBinary *bin)
+{
+ Sint size;
+ byte *bp;
+ Binary* refbin;
+
+ size = erts_encode_ext_size(term);
+ if (!enif_alloc_binary(size, bin))
+ return 0;
+
+ refbin = bin->ref_bin;
+
+ bp = bin->data;
+
+ erts_encode_ext(term, &bp);
+
+ bin->size = bp - bin->data;
+ refbin->orig_size = bin->size;
+
+ ASSERT(bin->data + bin->size == bp);
+
+ return 1;
+}
+
+size_t enif_binary_to_term(ErlNifEnv *dst_env,
+ const unsigned char* data,
+ size_t data_sz,
+ ERL_NIF_TERM *term,
+ ErlNifBinaryToTerm opts)
+{
+ Sint size;
+ ErtsHeapFactory factory;
+ byte *bp = (byte*) data;
+
+ ERTS_CT_ASSERT(ERL_NIF_BIN2TERM_SAFE == ERTS_DIST_EXT_BTT_SAFE);
+
+ if (opts & ~ERL_NIF_BIN2TERM_SAFE) {
+ return 0;
+ }
+ if ((size = erts_decode_ext_size(bp, data_sz)) < 0)
+ return 0;
+
+ if (size > 0) {
+ flush_env(dst_env);
+ erts_factory_proc_prealloc_init(&factory, dst_env->proc, size);
+ } else {
+ erts_factory_dummy_init(&factory);
+ }
+
+ *term = erts_decode_ext(&factory, &bp, (Uint32)opts);
+
+ if (is_non_value(*term)) {
+ return 0;
+ }
+ erts_factory_close(&factory);
+ cache_env(dst_env);
+
+ ASSERT(bp > data);
+ return bp - data;
+}
+
int enif_is_identical(Eterm lhs, Eterm rhs)
{
return EQ(lhs,rhs);
@@ -728,7 +1207,7 @@ Eterm enif_make_sub_binary(ErlNifEnv* env, ERL_NIF_TERM bin_term,
Eterm orig;
Uint offset, bit_offset, bit_size;
#ifdef DEBUG
- unsigned src_size;
+ size_t src_size;
ASSERT(is_binary(bin_term));
src_size = binary_size(bin_term);
@@ -756,15 +1235,21 @@ Eterm enif_make_badarg(ErlNifEnv* env)
Eterm enif_raise_exception(ErlNifEnv* env, ERL_NIF_TERM reason)
{
+ Process *c_p;
+
+ execution_state(env, &c_p, NULL);
+
env->exception_thrown = 1;
- env->proc->fvalue = reason;
- BIF_ERROR(env->proc, EXC_ERROR);
+ c_p->fvalue = reason;
+ BIF_ERROR(c_p, EXC_ERROR);
}
int enif_has_pending_exception(ErlNifEnv* env, ERL_NIF_TERM* reason)
{
if (env->exception_thrown && reason != NULL) {
- *reason = env->proc->fvalue;
+ Process *c_p;
+ execution_state(env, &c_p, NULL);
+ *reason = c_p->fvalue;
}
return env->exception_thrown;
}
@@ -1158,6 +1643,120 @@ int enif_make_reverse_list(ErlNifEnv* env, ERL_NIF_TERM term, ERL_NIF_TERM *list
return 1;
}
+int enif_is_current_process_alive(ErlNifEnv* env)
+{
+ Process *c_p;
+ int scheduler;
+
+ execution_state(env, &c_p, &scheduler);
+
+ if (!c_p)
+ erts_exit(ERTS_ABORT_EXIT,
+ "enif_is_current_process_alive: "
+ "Invalid environment");
+
+ if (!scheduler)
+ erts_exit(ERTS_ABORT_EXIT, "enif_is_current_process_alive: "
+ "called from non-scheduler thread");
+
+ return !ERTS_PROC_IS_EXITING(c_p);
+}
+
+int enif_is_process_alive(ErlNifEnv* env, ErlNifPid *proc)
+{
+ int scheduler;
+
+ execution_state(env, NULL, &scheduler);
+
+ if (scheduler > 0)
+ return !!erts_proc_lookup(proc->pid);
+ else {
+#ifdef ERTS_SMP
+ Process* rp = erts_pid2proc_opt(NULL, 0, proc->pid, 0,
+ ERTS_P2P_FLG_INC_REFC);
+ if (rp)
+ erts_proc_dec_refc(rp);
+ return !!rp;
+#else
+ erts_exit(ERTS_ABORT_EXIT, "enif_is_process_alive: "
+ "called from non-scheduler thread "
+ "in non-smp emulator");
+ return 0;
+#endif
+ }
+}
+
+int enif_is_port_alive(ErlNifEnv *env, ErlNifPort *port)
+{
+ int scheduler;
+ Uint32 iflags = (erts_port_synchronous_ops
+ ? ERTS_PORT_SFLGS_INVALID_DRIVER_LOOKUP
+ : ERTS_PORT_SFLGS_INVALID_LOOKUP);
+
+ execution_state(env, NULL, &scheduler);
+
+ if (scheduler > 0)
+ return !!erts_port_lookup(port->port_id, iflags);
+ else {
+#ifdef ERTS_SMP
+ Port *prt = erts_thr_port_lookup(port->port_id, iflags);
+ if (prt)
+ erts_port_dec_refc(prt);
+ return !!prt;
+#else
+ erts_exit(ERTS_ABORT_EXIT, "enif_is_port_alive: "
+ "called from non-scheduler thread "
+ "in non-smp emulator");
+ return 0;
+#endif
+ }
+}
+
+ERL_NIF_TERM
+enif_now_time(ErlNifEnv *env)
+{
+ Uint mega, sec, micro;
+ Eterm *hp;
+ get_now(&mega, &sec, &micro);
+ hp = alloc_heap(env, 4);
+ return TUPLE3(hp, make_small(mega), make_small(sec), make_small(micro));
+}
+
+ERL_NIF_TERM
+enif_cpu_time(ErlNifEnv *env)
+{
+#ifdef HAVE_ERTS_NOW_CPU
+ Uint mega, sec, micro;
+ Eterm *hp;
+ erts_get_now_cpu(&mega, &sec, &micro);
+ hp = alloc_heap(env, 4);
+ return TUPLE3(hp, make_small(mega), make_small(sec), make_small(micro));
+#else
+ return enif_make_badarg(env);
+#endif
+}
+
+ERL_NIF_TERM
+enif_make_unique_integer(ErlNifEnv *env, ErlNifUniqueInteger properties)
+{
+ int monotonic = properties & ERL_NIF_UNIQUE_MONOTONIC;
+ int positive = properties & ERL_NIF_UNIQUE_POSITIVE;
+ Eterm *hp;
+ Uint hsz;
+
+ if (monotonic) {
+ Sint64 raw_unique = erts_raw_get_unique_monotonic_integer();
+ hsz = erts_raw_unique_monotonic_integer_heap_size(raw_unique, positive);
+ hp = alloc_heap(env, hsz);
+ return erts_raw_make_unique_monotonic_integer_value(&hp, raw_unique, positive);
+ } else {
+ Uint64 raw_unique[ERTS_UNIQUE_INT_RAW_VALUES];
+ erts_raw_get_unique_integer(raw_unique);
+ hsz = erts_raw_unique_integer_heap_size(raw_unique, positive);
+ hp = alloc_heap(env, hsz);
+ return erts_raw_make_unique_integer(&hp, raw_unique, positive);
+ }
+}
ErlNifMutex* enif_mutex_create(char *name) { return erl_drv_mutex_create(name); }
void enif_mutex_destroy(ErlNifMutex *mtx) { erl_drv_mutex_destroy(mtx); }
@@ -1223,6 +1822,16 @@ int enif_fprintf(void* filep, const char* format, ...)
return ret;
}
+int enif_snprintf(char *buffer, size_t size, const char* format, ...)
+{
+ int ret;
+ va_list arglist;
+ va_start(arglist, format);
+ ret = erts_vsnprintf(buffer, size, format, arglist);
+ va_end(arglist);
+ return ret;
+}
+
/***********************************************************
** Memory managed (GC'ed) "resource" objects **
***********************************************************/
@@ -1284,10 +1893,10 @@ static void close_lib(struct erl_module_nif* lib)
ASSERT(erts_refc_read(&lib->rt_dtor_cnt,0) == 0);
if (lib->entry != NULL && lib->entry->unload != NULL) {
- ErlNifEnv env;
- pre_nif_noproc(&env, lib);
- lib->entry->unload(&env, lib->priv_data);
- post_nif_noproc(&env);
+ struct enif_msg_environment_t msg_env;
+ pre_nif_noproc(&msg_env, lib, NULL);
+ lib->entry->unload(&msg_env.env, lib->priv_data);
+ post_nif_noproc(&msg_env);
}
if (!erts_is_static_nif(lib->handle))
erts_sys_ddll_close(lib->handle);
@@ -1433,10 +2042,10 @@ static void nif_resource_dtor(Binary* bin)
ASSERT(ERTS_MAGIC_BIN_DESTRUCTOR(bin) == &nif_resource_dtor);
if (type->dtor != NULL) {
- ErlNifEnv env;
- pre_nif_noproc(&env, type->owner);
- type->dtor(&env,resource->data);
- post_nif_noproc(&env);
+ struct enif_msg_environment_t msg_env;
+ pre_nif_noproc(&msg_env, type->owner, NULL);
+ type->dtor(&msg_env.env, resource->data);
+ post_nif_noproc(&msg_env);
}
if (erts_refc_dectest(&type->refc, 0) == 0) {
ASSERT(type->next == NULL);
@@ -1577,16 +2186,19 @@ void* enif_dlsym(void* handle, const char* symbol,
int enif_consume_timeslice(ErlNifEnv* env, int percent)
{
+ Process *proc;
Sint reds;
+ execution_state(env, &proc, NULL);
+
ASSERT(is_proc_bound(env) && percent >= 1 && percent <= 100);
if (percent < 1) percent = 1;
else if (percent > 100) percent = 100;
reds = ((CONTEXT_REDS+99) / 100) * percent;
ASSERT(reds > 0 && reds <= CONTEXT_REDS);
- BUMP_REDS(env->proc, reds);
- return ERTS_BIF_REDS_LEFT(env->proc) == 0;
+ BUMP_REDS(proc, reds);
+ return ERTS_BIF_REDS_LEFT(proc) == 0;
}
/*
@@ -1653,7 +2265,7 @@ allocate_nif_sched_data(Process* proc, int argc)
ep->exp.addressv[i] = &ep->exp.code[3];
}
ep->exp.code[3] = (BeamInstr) em_call_nif;
- (void) ERTS_PROC_SET_NIF_TRAP_EXPORT(proc, ERTS_PROC_LOCK_MAIN, ep);
+ (void) ERTS_PROC_SET_NIF_TRAP_EXPORT(proc, ep);
return ep;
}
@@ -1681,10 +2293,19 @@ static ERL_NIF_TERM
init_nif_sched_data(ErlNifEnv* env, NativeFunPtr direct_fp, NativeFunPtr indirect_fp,
int need_save, int argc, const ERL_NIF_TERM argv[])
{
- Process* proc = env->proc;
- Eterm* reg = ERTS_PROC_GET_SCHDATA(proc)->x_reg_array;
+ Process* proc;
+ Eterm* reg;
NifExport* ep;
- int i;
+ int i, scheduler;
+
+ execution_state(env, &proc, &scheduler);
+
+ ASSERT(scheduler);
+
+ ERTS_SMP_LC_ASSERT(erts_proc_lc_my_proc_locks(proc)
+ & ERTS_PROC_LOCK_MAIN);
+
+ reg = erts_proc_sched_data(proc)->x_reg_array;
ep = (NifExport*) ERTS_PROC_GET_NIF_TRAP_EXPORT(proc);
if (!ep)
@@ -1696,12 +2317,13 @@ init_nif_sched_data(ErlNifEnv* env, NativeFunPtr direct_fp, NativeFunPtr indirec
}
if (env->exception_thrown) {
ep->exception_thrown = 1;
- ep->rootset[0] = env->proc->fvalue;
+ ep->rootset[0] = proc->fvalue;
} else {
ep->exception_thrown = 0;
ep->rootset[0] = NIL;
}
- ERTS_VBUMP_ALL_REDS(proc);
+ if (scheduler > 0)
+ ERTS_VBUMP_ALL_REDS(proc);
for (i = 0; i < argc; i++) {
if (need_save)
ep->rootset[i+1] = reg[i];
@@ -1733,7 +2355,12 @@ static void
restore_nif_mfa(Process* proc, NifExport* ep, int exception)
{
int i;
- Eterm* reg = ERTS_PROC_GET_SCHDATA(proc)->x_reg_array;
+ Eterm* reg = erts_proc_sched_data(proc)->x_reg_array;
+
+ ERTS_SMP_LC_ASSERT(!(proc->static_flags
+ & ERTS_STC_FLG_SHADOW_PROC));
+ ERTS_SMP_LC_ASSERT(erts_proc_lc_my_proc_locks(proc)
+ & ERTS_PROC_LOCK_MAIN);
proc->current[0] = ep->saved_mfa[0];
proc->current[1] = ep->saved_mfa[1];
@@ -1758,11 +2385,13 @@ restore_nif_mfa(Process* proc, NifExport* ep, int exception)
static ERL_NIF_TERM
dirty_nif_finalizer(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
{
- Process* proc = env->proc;
+ Process* proc;
NifExport* ep;
+ execution_state(env, &proc, NULL);
+
ASSERT(argc == 1);
- ASSERT(!ERTS_SCHEDULER_IS_DIRTY(env->proc->scheduler_data));
+ ASSERT(!ERTS_SCHEDULER_IS_DIRTY(erts_proc_sched_data(proc)));
ep = (NifExport*) ERTS_PROC_GET_NIF_TRAP_EXPORT(proc);
ASSERT(ep);
ASSERT(!ep->exception_thrown);
@@ -1777,10 +2406,12 @@ dirty_nif_finalizer(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
static ERL_NIF_TERM
dirty_nif_exception(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
{
- Process* proc = env->proc;
+ Process* proc;
NifExport* ep;
- ASSERT(!ERTS_SCHEDULER_IS_DIRTY(env->proc->scheduler_data));
+ execution_state(env, &proc, NULL);
+
+ ASSERT(!ERTS_SCHEDULER_IS_DIRTY(erts_proc_sched_data(proc)));
ep = (NifExport*) ERTS_PROC_GET_NIF_TRAP_EXPORT(proc);
ASSERT(ep);
ASSERT(ep->exception_thrown);
@@ -1797,23 +2428,32 @@ dirty_nif_exception(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
static ERL_NIF_TERM
execute_dirty_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
{
- Process* proc = env->proc;
- NativeFunPtr fp = (NativeFunPtr) proc->current[6];
+ Process* proc;
+ NativeFunPtr fp;
NifExport* ep;
ERL_NIF_TERM result;
- ASSERT(ERTS_SCHEDULER_IS_DIRTY(env->proc->scheduler_data));
+ execution_state(env, &proc, NULL);
+
+ fp = (NativeFunPtr) proc->current[6];
+
+ ASSERT(ERTS_SCHEDULER_IS_DIRTY(erts_proc_sched_data(proc)));
/*
* Set ep->fp to NULL before the native call so we know later whether it scheduled another NIF for execution
*/
ep = (NifExport*) ERTS_PROC_GET_NIF_TRAP_EXPORT(proc);
- ASSERT(ep);
+ ASSERT(ep && fp);
ep->fp = NULL;
erts_smp_atomic32_read_band_mb(&proc->state, ~(ERTS_PSFLG_DIRTY_CPU_PROC
| ERTS_PSFLG_DIRTY_IO_PROC));
+
+ erts_smp_proc_unlock(proc, ERTS_PROC_LOCK_MAIN);
+
result = (*fp)(env, argc, argv);
+ erts_smp_proc_lock(proc, ERTS_PROC_LOCK_MAIN);
+
if (erts_refc_dectest(&env->mod_nif->rt_dtor_cnt, 0) == 0 && env->mod_nif->mod == NULL)
close_lib(env->mod_nif);
/*
@@ -1850,29 +2490,49 @@ execute_dirty_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
static ERTS_INLINE ERL_NIF_TERM
schedule_dirty_nif(ErlNifEnv* env, int flags, int argc, const ERL_NIF_TERM argv[])
{
- erts_aint32_t state, n, a;
- Process* proc = env->proc;
- NativeFunPtr fp = (NativeFunPtr) proc->current[6];
+ ERL_NIF_TERM result;
+ erts_aint32_t act, dirty_flag;
+ Process* proc;
+ NativeFunPtr fp;
NifExport* ep;
- int need_save;
+ int need_save, scheduler;
+
+ execution_state(env, &proc, &scheduler);
+ if (scheduler <= 0) {
+ ASSERT(scheduler < 0);
+ erts_smp_proc_lock(proc, ERTS_PROC_LOCK_MAIN);
+ }
+
+ fp = (NativeFunPtr) proc->current[6];
+
+ ASSERT(fp);
ASSERT(flags==ERL_NIF_DIRTY_JOB_IO_BOUND || flags==ERL_NIF_DIRTY_JOB_CPU_BOUND);
- a = erts_smp_atomic32_read_acqb(&proc->state);
- while (1) {
- n = state = a;
+ if (flags == ERL_NIF_DIRTY_JOB_CPU_BOUND)
+ dirty_flag = ERTS_PSFLG_DIRTY_CPU_PROC;
+ else
+ dirty_flag = ERTS_PSFLG_DIRTY_IO_PROC;
+
+ act = erts_smp_atomic32_read_bor_nob(&proc->state, dirty_flag);
+ if (!(act & (ERTS_PSFLG_DIRTY_CPU_PROC|ERTS_PSFLG_DIRTY_IO_PROC)))
+ erts_refc_inc(&env->mod_nif->rt_dtor_cnt, 1);
+ else if ((act & (ERTS_PSFLG_DIRTY_CPU_PROC
+ | ERTS_PSFLG_DIRTY_IO_PROC)) & ~dirty_flag) {
+ /* clear other flag... */
if (flags == ERL_NIF_DIRTY_JOB_CPU_BOUND)
- n |= ERTS_PSFLG_DIRTY_CPU_PROC;
+ dirty_flag = ERTS_PSFLG_DIRTY_IO_PROC;
else
- n |= ERTS_PSFLG_DIRTY_IO_PROC;
- a = erts_smp_atomic32_cmpxchg_mb(&proc->state, n, state);
- if (a == state)
- break;
+ dirty_flag = ERTS_PSFLG_DIRTY_CPU_PROC;
+ erts_smp_atomic32_read_band_nob(&proc->state, ~dirty_flag);
}
- erts_refc_inc(&env->mod_nif->rt_dtor_cnt, 1);
+
ep = (NifExport*) ERTS_PROC_GET_NIF_TRAP_EXPORT(proc);
need_save = (ep == NULL || is_non_value(ep->saved_mfa[0]));
- return init_nif_sched_data(env, execute_dirty_nif, fp, need_save, argc, argv);
+ result = init_nif_sched_data(env, execute_dirty_nif, fp, need_save, argc, argv);
+ if (scheduler <= 0)
+ erts_smp_proc_unlock(proc, ERTS_PROC_LOCK_MAIN);
+ return result;
}
static ERL_NIF_TERM
@@ -1897,11 +2557,14 @@ schedule_dirty_cpu_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
static ERL_NIF_TERM
execute_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
{
- Process* proc = env->proc;
- NativeFunPtr fp = (NativeFunPtr) proc->current[6];
+ Process* proc;
+ NativeFunPtr fp;
NifExport* ep;
ERL_NIF_TERM result;
+ execution_state(env, &proc, NULL);
+ fp = (NativeFunPtr) proc->current[6];
+
ASSERT(!env->exception_thrown);
ep = (NifExport*) ERTS_PROC_GET_NIF_TRAP_EXPORT(proc);
ASSERT(ep);
@@ -1924,10 +2587,10 @@ enif_schedule_nif(ErlNifEnv* env, const char* fun_name, int flags,
ERL_NIF_TERM (*fp)(ErlNifEnv*, int, const ERL_NIF_TERM[]),
int argc, const ERL_NIF_TERM argv[])
{
- Process* proc = env->proc;
+ Process* proc;
NifExport* ep;
ERL_NIF_TERM fun_name_atom, result;
- int need_save;
+ int need_save, scheduler;
if (argc > MAX_ARG)
return enif_make_badarg(env);
@@ -1935,6 +2598,13 @@ enif_schedule_nif(ErlNifEnv* env, const char* fun_name, int flags,
if (enif_is_exception(env, fun_name_atom))
return fun_name_atom;
+ execution_state(env, &proc, &scheduler);
+ if (scheduler <= 0) {
+ if (scheduler == 0)
+ enif_make_badarg(env);
+ erts_smp_proc_lock(proc, ERTS_PROC_LOCK_MAIN);
+ }
+
ep = (NifExport*) ERTS_PROC_GET_NIF_TRAP_EXPORT(proc);
need_save = (ep == NULL || is_non_value(ep->saved_mfa[0]));
@@ -1946,12 +2616,15 @@ enif_schedule_nif(ErlNifEnv* env, const char* fun_name, int flags,
sched_fun = schedule_dirty_io_nif;
else if (chkflgs == ERL_NIF_DIRTY_JOB_CPU_BOUND)
sched_fun = schedule_dirty_cpu_nif;
- else
- return enif_make_badarg(env);
+ else {
+ result = enif_make_badarg(env);
+ goto done;
+ }
result = init_nif_sched_data(env, sched_fun, fp, need_save, argc, argv);
#else
- return enif_make_badarg(env);
+ result = enif_make_badarg(env);
#endif
+ goto done;
}
else
result = init_nif_sched_data(env, execute_nif, fp, need_save, argc, argv);
@@ -1959,18 +2632,28 @@ enif_schedule_nif(ErlNifEnv* env, const char* fun_name, int flags,
ep = (NifExport*) ERTS_PROC_GET_NIF_TRAP_EXPORT(proc);
ASSERT(ep);
ep->exp.code[1] = (BeamInstr) fun_name_atom;
+
+done:
+ if (scheduler < 0)
+ erts_smp_proc_unlock(proc, ERTS_PROC_LOCK_MAIN);
+
return result;
}
-#ifdef ERL_NIF_DIRTY_SCHEDULER_SUPPORT
-
int
enif_is_on_dirty_scheduler(ErlNifEnv* env)
{
- return ERTS_SCHEDULER_IS_DIRTY(env->proc->scheduler_data);
-}
+ int scheduler;
+ Process *c_p;
+
+ execution_state(env, &c_p, &scheduler);
+
+ if (!c_p || !scheduler)
+ erts_exit(ERTS_ABORT_EXIT, "enif_is_on_dirty_scheduler: "
+ "Invalid env");
-#endif /* ERL_NIF_DIRTY_SCHEDULER_SUPPORT */
+ return scheduler < 0;
+}
/* Maps */
@@ -2064,14 +2747,13 @@ int enif_make_map_remove(ErlNifEnv* env,
Eterm key,
Eterm *map_out)
{
- int res;
if (!is_map(map_in)) {
return 0;
}
flush_env(env);
- res = erts_maps_remove(env->proc, key, map_in, map_out);
+ (void) erts_maps_take(env->proc, key, map_in, map_out, NULL);
cache_env(env);
- return res;
+ return 1;
}
int enif_map_iterator_create(ErlNifEnv *env,
@@ -2402,7 +3084,7 @@ BIF_RETTYPE load_nif_2(BIF_ALIST_2)
ErlNifEntry* entry = NULL;
ErlNifEnv env;
int i, err, encoding;
- Module* mod;
+ Module* module_p;
Eterm mod_atom;
const Atom* mod_atomp;
Eterm f_atom;
@@ -2412,6 +3094,8 @@ BIF_RETTYPE load_nif_2(BIF_ALIST_2)
int veto;
struct erl_module_nif* lib = NULL;
int reload_warning = 0;
+ struct erl_module_instance* this_mi;
+ struct erl_module_instance* prev_mi;
encoding = erts_get_native_filename_encoding();
if (encoding == ERL_FILENAME_WIN_WCHAR) {
@@ -2445,21 +3129,29 @@ BIF_RETTYPE load_nif_2(BIF_ALIST_2)
ASSERT(caller != NULL);
mod_atom = caller[0];
ASSERT(is_atom(mod_atom));
- mod=erts_get_module(mod_atom, erts_active_code_ix());
- ASSERT(mod != NULL);
+ module_p = erts_get_module(mod_atom, erts_active_code_ix());
+ ASSERT(module_p != NULL);
mod_atomp = atom_tab(atom_val(mod_atom));
init_func = erts_static_nif_get_nif_init((char*)mod_atomp->name, mod_atomp->len);
if (init_func != NULL)
handle = init_func;
- if (!in_area(caller, mod->curr.code_hdr, mod->curr.code_length)) {
- ASSERT(in_area(caller, mod->old.code_hdr, mod->old.code_length));
+ if (in_area(caller, module_p->old.code_hdr, module_p->old.code_length)) {
+ if (module_p->old.code_hdr->on_load_function_ptr) {
+ this_mi = &module_p->old;
+ prev_mi = &module_p->curr;
+ } else {
+ ret = load_nif_error(BIF_P, "old_code", "Calling load_nif from old "
+ "module '%T' not allowed", mod_atom);
+ goto error;
+ }
+ } else {
+ this_mi = &module_p->curr;
+ prev_mi = &module_p->old;
+ }
- ret = load_nif_error(BIF_P, "old_code", "Calling load_nif from old "
- "module '%T' not allowed", mod_atom);
- }
- else if (init_func == NULL &&
+ if (init_func == NULL &&
(err=erts_sys_ddll_open(lib_name, &handle, &errdesc)) != ERL_DE_NO_ERROR) {
const char slogan[] = "Failed to load NIF library";
if (strstr(errdesc.str, lib_name) != NULL) {
@@ -2508,7 +3200,7 @@ BIF_RETTYPE load_nif_2(BIF_ALIST_2)
for (i=0; i < entry->num_of_funcs && ret==am_ok; i++) {
BeamInstr** code_pp;
if (!erts_atom_get(f->name, sys_strlen(f->name), &f_atom, ERTS_ATOM_ENC_LATIN1)
- || (code_pp = get_func_pp(mod->curr.code_hdr, f_atom, f->arity))==NULL) {
+ || (code_pp = get_func_pp(this_mi->code_hdr, f_atom, f->arity))==NULL) {
ret = load_nif_error(BIF_P,bad_lib,"Function not found %T:%s/%u",
mod_atom, f->name, f->arity);
}
@@ -2559,9 +3251,9 @@ BIF_RETTYPE load_nif_2(BIF_ALIST_2)
erts_refc_init(&lib->rt_cnt, 0);
erts_refc_init(&lib->rt_dtor_cnt, 0);
ASSERT(opened_rt_list == NULL);
- lib->mod = mod;
+ lib->mod = module_p;
env.mod_nif = lib;
- if (mod->curr.nif != NULL) { /*************** Reload ******************/
+ if (this_mi->nif != NULL) { /*************** Reload ******************/
/*
* Repeated load_nif calls from same Erlang module instance ("reload")
* is deprecated and was only ment as a development feature not to
@@ -2569,16 +3261,16 @@ BIF_RETTYPE load_nif_2(BIF_ALIST_2)
*/
int k, old_incr = 0;
ErlNifFunc* old_func;
- lib->priv_data = mod->curr.nif->priv_data;
+ lib->priv_data = this_mi->nif->priv_data;
- ASSERT(mod->curr.nif->entry != NULL);
+ ASSERT(this_mi->nif->entry != NULL);
if (entry->reload == NULL) {
ret = load_nif_error(BIF_P,reload,"Reload not supported by this NIF library.");
goto error;
}
/* Check that no NIF is removed */
- old_func = mod->curr.nif->entry->funcs;
- for (k=0; k < mod->curr.nif->entry->num_of_funcs; k++) {
+ old_func = this_mi->nif->entry->funcs;
+ for (k=0; k < this_mi->nif->entry->num_of_funcs; k++) {
int incr = 0;
ErlNifFunc* f = entry->funcs;
for (i=0; i < entry->num_of_funcs; i++) {
@@ -2594,9 +3286,9 @@ BIF_RETTYPE load_nif_2(BIF_ALIST_2)
old_func->name, old_func->arity);
goto error;
}
- old_func = next_func(mod->curr.nif->entry, &old_incr, old_func);
+ old_func = next_func(this_mi->nif->entry, &old_incr, old_func);
}
- erts_pre_nif(&env, BIF_P, lib);
+ erts_pre_nif(&env, BIF_P, lib, NULL);
veto = entry->reload(&env, &lib->priv_data, BIF_ARG_2);
erts_post_nif(&env);
if (veto) {
@@ -2604,31 +3296,31 @@ BIF_RETTYPE load_nif_2(BIF_ALIST_2)
}
else {
commit_opened_resource_types(lib);
- mod->curr.nif->entry = NULL; /* to prevent 'unload' callback */
- erts_unload_nif(mod->curr.nif);
+ this_mi->nif->entry = NULL; /* to prevent 'unload' callback */
+ erts_unload_nif(this_mi->nif);
reload_warning = 1;
}
}
else {
lib->priv_data = NULL;
- if (mod->old.nif != NULL) { /**************** Upgrade ***************/
- void* prev_old_data = mod->old.nif->priv_data;
+ if (prev_mi->nif != NULL) { /**************** Upgrade ***************/
+ void* prev_old_data = prev_mi->nif->priv_data;
if (entry->upgrade == NULL) {
ret = load_nif_error(BIF_P, upgrade, "Upgrade not supported by this NIF library.");
goto error;
}
- erts_pre_nif(&env, BIF_P, lib);
- veto = entry->upgrade(&env, &lib->priv_data, &mod->old.nif->priv_data, BIF_ARG_2);
+ erts_pre_nif(&env, BIF_P, lib, NULL);
+ veto = entry->upgrade(&env, &lib->priv_data, &prev_mi->nif->priv_data, BIF_ARG_2);
erts_post_nif(&env);
if (veto) {
- mod->old.nif->priv_data = prev_old_data;
+ prev_mi->nif->priv_data = prev_old_data;
ret = load_nif_error(BIF_P, upgrade, "Library upgrade-call unsuccessful.");
}
else
commit_opened_resource_types(lib);
}
else if (entry->load != NULL) { /********* Initial load ***********/
- erts_pre_nif(&env, BIF_P, lib);
+ erts_pre_nif(&env, BIF_P, lib, NULL);
veto = entry->load(&env, &lib->priv_data, BIF_ARG_2);
erts_post_nif(&env);
if (veto) {
@@ -2646,12 +3338,12 @@ BIF_RETTYPE load_nif_2(BIF_ALIST_2)
int incr = 0;
ErlNifFunc* f = entry->funcs;
- mod->curr.nif = lib;
+ this_mi->nif = lib;
for (i=0; i < entry->num_of_funcs; i++)
{
BeamInstr* code_ptr;
erts_atom_get(f->name, sys_strlen(f->name), &f_atom, ERTS_ATOM_ENC_LATIN1);
- code_ptr = *get_func_pp(mod->curr.code_hdr, f_atom, f->arity);
+ code_ptr = *get_func_pp(this_mi->code_hdr, f_atom, f->arity);
if (code_ptr[1] == 0) {
code_ptr[5+0] = (BeamInstr) BeamOp(op_call_nif);
@@ -2662,16 +3354,16 @@ BIF_RETTYPE load_nif_2(BIF_ALIST_2)
(BeamInstr) BeamOp(op_i_generic_breakpoint));
g->orig_instr = (BeamInstr) BeamOp(op_call_nif);
}
+#ifdef ERTS_DIRTY_SCHEDULERS
if ((entry->major > 2 || (entry->major == 2 && entry->minor >= 7))
&& (entry->options & ERL_NIF_DIRTY_NIF_OPTION) && f->flags) {
-#ifdef ERL_NIF_DIRTY_SCHEDULER_SUPPORT
code_ptr[5+3] = (BeamInstr) f->fptr;
code_ptr[5+1] = (f->flags == ERL_NIF_DIRTY_JOB_IO_BOUND) ?
(BeamInstr) schedule_dirty_io_nif :
(BeamInstr) schedule_dirty_cpu_nif;
-#endif
}
else
+#endif
code_ptr[5+1] = (BeamInstr) f->fptr;
code_ptr[5+2] = (BeamInstr) lib;
f = next_func(entry, &incr, f);
@@ -2715,6 +3407,9 @@ erts_unload_nif(struct erl_module_nif* lib)
ASSERT(erts_smp_thr_progress_is_blocking());
ASSERT(lib != NULL);
ASSERT(lib->mod != NULL);
+
+ erts_tracer_nif_clear();
+
for (rt = resource_type_list.next;
rt != &resource_type_list;
rt = next) {
@@ -2757,6 +3452,76 @@ void erl_nif_init()
resource_type_list.owner = NULL;
resource_type_list.module = THE_NON_VALUE;
resource_type_list.name = THE_NON_VALUE;
+
+}
+
+int erts_nif_get_funcs(struct erl_module_nif* mod,
+ ErlNifFunc **funcs)
+{
+ *funcs = mod->entry->funcs;
+ return mod->entry->num_of_funcs;
+}
+
+Eterm erts_nif_call_function(Process *p, Process *tracee,
+ struct erl_module_nif* mod,
+ ErlNifFunc *fun, int argc, Eterm *argv)
+{
+ Eterm nif_result;
+#ifdef DEBUG
+ /* Verify that function is part of this module */
+ int i;
+ for (i = 0; i < mod->entry->num_of_funcs; i++)
+ if (fun == &(mod->entry->funcs[i]))
+ break;
+ ASSERT(i < mod->entry->num_of_funcs);
+ if (p)
+ ERTS_SMP_LC_ASSERT(erts_proc_lc_my_proc_locks(p) & ERTS_PROC_LOCK_MAIN
+ || erts_smp_thr_progress_is_blocking());
+#endif
+ if (p) {
+ /* This is almost a normal nif call like in beam_emu,
+ except that any heap fragment created in the nif will be
+ discarded without checking if anything in it is live.
+ This is because we cannot do a GC here as we don't know
+ the number of live registers that have to be preserved.
+ This means that any heap part of the returned term may
+ not be used outside this function. */
+ struct enif_environment_t env;
+ ErlHeapFragment *orig_hf = MBUF(p);
+ ErlOffHeap orig_oh = MSO(p);
+ ASSERT(is_internal_pid(p->common.id));
+ MBUF(p) = NULL;
+ clear_offheap(&MSO(p));
+
+ erts_pre_nif(&env, p, mod, tracee);
+ nif_result = (*fun->fptr)(&env, argc, argv);
+ if (env.exception_thrown)
+ nif_result = THE_NON_VALUE;
+ erts_post_nif(&env);
+
+ /* Free any offheap and heap fragments created in nif */
+ if (MSO(p).first) {
+ erts_cleanup_offheap(&MSO(p));
+ clear_offheap(&MSO(p));
+ }
+ if (MBUF(p))
+ free_message_buffer(MBUF(p));
+
+ /* restore original heap fragment list */
+ MBUF(p) = orig_hf;
+ MSO(p) = orig_oh;
+ } else {
+ /* Nif call was done without a process context,
+ so we create a phony one. */
+ struct enif_msg_environment_t msg_env;
+ pre_nif_noproc(&msg_env, mod, tracee);
+ nif_result = (*fun->fptr)(&msg_env.env, argc, argv);
+ if (msg_env.env.exception_thrown)
+ nif_result = THE_NON_VALUE;
+ post_nif_noproc(&msg_env);
+ }
+
+ return nif_result;
}
#ifdef USE_VM_PROBES
diff --git a/erts/emulator/beam/erl_nif.h b/erts/emulator/beam/erl_nif.h
index c9c8b1d0af..da7a754757 100644
--- a/erts/emulator/beam/erl_nif.h
+++ b/erts/emulator/beam/erl_nif.h
@@ -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.
@@ -28,7 +28,6 @@
# include "config.h"
#endif
-#include "erl_native_features_config.h"
#include "erl_drv_nif.h"
/* Version history:
@@ -50,9 +49,10 @@
** 2.8: 18.0 add enif_has_pending_exception
** 2.9: 18.2 enif_getenv
** 2.10: Time API
+** 2.11: 19.0 enif_snprintf
*/
#define ERL_NIF_MAJOR_VERSION 2
-#define ERL_NIF_MINOR_VERSION 10
+#define ERL_NIF_MINOR_VERSION 11
/*
* The emulator will refuse to load a nif-lib with a major version
@@ -87,16 +87,16 @@ typedef ErlNifSInt64 ErlNifTime;
#define ERL_NIF_TIME_ERROR ((ErlNifSInt64) ERTS_NAPI_TIME_ERROR__)
typedef enum {
- ERL_NIF_SEC = ERTS_NAPI_SEC__,
- ERL_NIF_MSEC = ERTS_NAPI_MSEC__,
- ERL_NIF_USEC = ERTS_NAPI_USEC__,
- ERL_NIF_NSEC = ERTS_NAPI_NSEC__
+ ERL_NIF_SEC = ERTS_NAPI_SEC__,
+ ERL_NIF_MSEC = ERTS_NAPI_MSEC__,
+ ERL_NIF_USEC = ERTS_NAPI_USEC__,
+ ERL_NIF_NSEC = ERTS_NAPI_NSEC__
} ErlNifTimeUnit;
struct enif_environment_t;
typedef struct enif_environment_t ErlNifEnv;
-typedef struct
+typedef struct enif_func_t
{
const char* name;
unsigned arity;
@@ -150,7 +150,12 @@ typedef enum
typedef struct
{
ERL_NIF_TERM pid; /* internal, may change */
-}ErlNifPid;
+} ErlNifPid;
+
+typedef struct
+{
+ ERL_NIF_TERM port_id; /* internal, may change */
+}ErlNifPort;
typedef ErlDrvSysInfo ErlNifSysInfo;
@@ -162,13 +167,11 @@ typedef int ErlNifTSDKey;
typedef ErlDrvThreadOpts ErlNifThreadOpts;
-#ifdef ERL_NIF_DIRTY_SCHEDULER_SUPPORT
typedef enum
{
- ERL_NIF_DIRTY_JOB_CPU_BOUND = ERL_DRV_DIRTY_JOB_CPU_BOUND,
- ERL_NIF_DIRTY_JOB_IO_BOUND = ERL_DRV_DIRTY_JOB_IO_BOUND
+ ERL_NIF_DIRTY_JOB_CPU_BOUND = ERL_DIRTY_JOB_CPU_BOUND,
+ ERL_NIF_DIRTY_JOB_IO_BOUND = ERL_DIRTY_JOB_IO_BOUND
}ErlNifDirtyTaskFlags;
-#endif
typedef struct /* All fields all internal and may change */
{
@@ -197,6 +200,15 @@ typedef enum {
ERL_NIF_MAP_ITERATOR_TAIL = ERL_NIF_MAP_ITERATOR_LAST
} ErlNifMapIteratorEntry;
+typedef enum {
+ ERL_NIF_UNIQUE_POSITIVE = (1 << 0),
+ ERL_NIF_UNIQUE_MONOTONIC = (1 << 1)
+} ErlNifUniqueInteger;
+
+typedef enum {
+ ERL_NIF_BIN2TERM_SAFE = 0x20000000
+} ErlNifBinaryToTerm;
+
#if (defined(__WIN32__) || defined(_WIN32) || defined(_WIN32_))
# define ERL_NIF_API_FUNC_DECL(RET_TYPE, NAME, ARGS) RET_TYPE (*NAME) ARGS
typedef struct {
@@ -243,11 +255,7 @@ extern TWinDynNifCallbacks WinDynNifCallbacks;
# define ERL_NIF_INIT_DECL(MODNAME) ERL_NIF_INIT_EXPORT ErlNifEntry* nif_init(ERL_NIF_INIT_ARGS)
#endif
-#ifdef ERL_NIF_DIRTY_SCHEDULER_SUPPORT
-# define ERL_NIF_ENTRY_OPTIONS ERL_NIF_DIRTY_NIF_OPTION
-#else
-# define ERL_NIF_ENTRY_OPTIONS 0
-#endif
+#define ERL_NIF_ENTRY_OPTIONS ERL_NIF_DIRTY_NIF_OPTION
#ifdef __cplusplus
}
diff --git a/erts/emulator/beam/erl_nif_api_funcs.h b/erts/emulator/beam/erl_nif_api_funcs.h
index 1448a508a2..b211ab4b16 100644
--- a/erts/emulator/beam/erl_nif_api_funcs.h
+++ b/erts/emulator/beam/erl_nif_api_funcs.h
@@ -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.
@@ -163,20 +163,22 @@ ERL_NIF_API_FUNC_DECL(int,enif_getenv,(const char* key, char* value, size_t* val
ERL_NIF_API_FUNC_DECL(ErlNifTime, enif_monotonic_time, (ErlNifTimeUnit));
ERL_NIF_API_FUNC_DECL(ErlNifTime, enif_time_offset, (ErlNifTimeUnit));
ERL_NIF_API_FUNC_DECL(ErlNifTime, enif_convert_time_unit, (ErlNifTime, ErlNifTimeUnit, ErlNifTimeUnit));
+ERL_NIF_API_FUNC_DECL(ERL_NIF_TERM, enif_now_time, (ErlNifEnv *env));
+ERL_NIF_API_FUNC_DECL(ERL_NIF_TERM, enif_cpu_time, (ErlNifEnv *env));
+ERL_NIF_API_FUNC_DECL(ERL_NIF_TERM, enif_make_unique_integer, (ErlNifEnv *env, ErlNifUniqueInteger properties));
+ERL_NIF_API_FUNC_DECL(int, enif_is_current_process_alive, (ErlNifEnv *env));
+ERL_NIF_API_FUNC_DECL(int, enif_is_process_alive, (ErlNifEnv *env, ErlNifPid *pid));
+ERL_NIF_API_FUNC_DECL(int, enif_is_port_alive, (ErlNifEnv *env, ErlNifPort *port_id));
+ERL_NIF_API_FUNC_DECL(int, enif_get_local_port, (ErlNifEnv* env, ERL_NIF_TERM, ErlNifPort* port_id));
+ERL_NIF_API_FUNC_DECL(int, enif_term_to_binary, (ErlNifEnv *env, ERL_NIF_TERM term, ErlNifBinary *bin));
+ERL_NIF_API_FUNC_DECL(size_t, enif_binary_to_term, (ErlNifEnv *env, const unsigned char* data, size_t sz, ERL_NIF_TERM *term, unsigned int opts));
+ERL_NIF_API_FUNC_DECL(int, enif_port_command, (ErlNifEnv *env, const ErlNifPort* to_port, ErlNifEnv *msg_env, ERL_NIF_TERM msg));
+ERL_NIF_API_FUNC_DECL(int,enif_is_on_dirty_scheduler,(ErlNifEnv*));
+ERL_NIF_API_FUNC_DECL(int,enif_snprintf,(char * buffer, size_t size, const char *format, ...));
/*
** ADD NEW ENTRIES HERE (before this comment) !!!
*/
-
-
-/*
- * Conditional EXPERIMENTAL stuff always last.
- * Must be moved up and made unconditional to support binary backward
- * compatibility on Windows.
- */
-#ifdef ERL_NIF_DIRTY_SCHEDULER_SUPPORT
-ERL_NIF_API_FUNC_DECL(int,enif_is_on_dirty_scheduler,(ErlNifEnv*));
-#endif
#endif /* ERL_NIF_API_FUNC_DECL */
/*
@@ -318,6 +320,18 @@ ERL_NIF_API_FUNC_DECL(int,enif_is_on_dirty_scheduler,(ErlNifEnv*));
# define enif_monotonic_time ERL_NIF_API_FUNC_MACRO(enif_monotonic_time)
# define enif_time_offset ERL_NIF_API_FUNC_MACRO(enif_time_offset)
# define enif_convert_time_unit ERL_NIF_API_FUNC_MACRO(enif_convert_time_unit)
+# define enif_now_time ERL_NIF_API_FUNC_MACRO(enif_now_time)
+# define enif_cpu_time ERL_NIF_API_FUNC_MACRO(enif_cpu_time)
+# define enif_make_unique_integer ERL_NIF_API_FUNC_MACRO(enif_make_unique_integer)
+# define enif_is_current_process_alive ERL_NIF_API_FUNC_MACRO(enif_is_current_process_alive)
+# define enif_is_process_alive ERL_NIF_API_FUNC_MACRO(enif_is_process_alive)
+# define enif_is_port_alive ERL_NIF_API_FUNC_MACRO(enif_is_port_alive)
+# define enif_get_local_port ERL_NIF_API_FUNC_MACRO(enif_get_local_port)
+# define enif_term_to_binary ERL_NIF_API_FUNC_MACRO(enif_term_to_binary)
+# define enif_binary_to_term ERL_NIF_API_FUNC_MACRO(enif_binary_to_term)
+# define enif_port_command ERL_NIF_API_FUNC_MACRO(enif_port_command)
+# define enif_is_on_dirty_scheduler ERL_NIF_API_FUNC_MACRO(enif_is_on_dirty_scheduler)
+# define enif_snprintf ERL_NIF_API_FUNC_MACRO(enif_snprintf)
/*
** ADD NEW ENTRIES HERE (before this comment)
@@ -328,9 +342,6 @@ ERL_NIF_API_FUNC_DECL(int,enif_is_on_dirty_scheduler,(ErlNifEnv*));
* Must be moved up and made unconditional to support binary backward
* compatibility on Windows.
*/
-#ifdef ERL_NIF_DIRTY_SCHEDULER_SUPPORT
-# define enif_is_on_dirty_scheduler ERL_NIF_API_FUNC_MACRO(enif_is_on_dirty_scheduler)
-#endif
#endif /* ERL_NIF_API_FUNC_MACRO */
diff --git a/erts/emulator/beam/erl_node_container_utils.h b/erts/emulator/beam/erl_node_container_utils.h
index b6a3531e28..0c76c6fe7d 100644
--- a/erts/emulator/beam/erl_node_container_utils.h
+++ b/erts/emulator/beam/erl_node_container_utils.h
@@ -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/erts/emulator/beam/erl_node_tables.c b/erts/emulator/beam/erl_node_tables.c
index 13f14adbab..646f786651 100644
--- a/erts/emulator/beam/erl_node_tables.c
+++ b/erts/emulator/beam/erl_node_tables.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.
@@ -497,31 +497,7 @@ node_table_hash(void *venp)
Uint32 cre = ((ErlNode *) venp)->creation;
HashValue h = atom_tab(atom_val(((ErlNode *) venp)->sysname))->slot.bucket.hvalue;
- h *= PRIME0;
- h += cre & 0xff;
-
-#if MAX_CREATION >= (1 << 8)
- h *= PRIME1;
- h += (cre >> 8) & 0xff;
-#endif
-
-#if MAX_CREATION >= (1 << 16)
- h *= PRIME2;
- h += (cre >> 16) & 0xff;
-#endif
-
-#if MAX_CREATION >= (1 << 24)
- h *= PRIME3;
- h += (cre >> 24) & 0xff;
-#endif
-
-#if 0
-/* XXX Problems in older versions of GCC */
- #if MAX_CREATION >= (1UL << 32)
- #error "MAX_CREATION larger than size of expected creation storage (Uint32)"
- #endif
-#endif
- return h;
+ return (h + cre) * PRIME0;
}
static int
@@ -599,7 +575,7 @@ erts_node_table_info(int to, void *to_arg)
}
-ErlNode *erts_find_or_insert_node(Eterm sysname, Uint creation)
+ErlNode *erts_find_or_insert_node(Eterm sysname, Uint32 creation)
{
ErlNode *res;
ErlNode ne;
@@ -1053,7 +1029,7 @@ insert_dist_entry(DistEntry *dist, int type, Eterm id, Uint creation)
}
if(!rdp)
- erl_exit(1,
+ erts_exit(ERTS_ERROR_EXIT,
"Reference to non-existing distribution table entry found!\n");
insert_dist_referrer(rdp, type, id, creation);
@@ -1114,7 +1090,7 @@ insert_node(ErlNode *node, int type, Eterm id)
}
if (!rnp)
- erl_exit(1, "Reference to non-existing node table entry found!\n");
+ erts_exit(ERTS_ERROR_EXIT, "Reference to non-existing node table entry found!\n");
insert_node_referrer(rnp, type, id);
}
diff --git a/erts/emulator/beam/erl_node_tables.h b/erts/emulator/beam/erl_node_tables.h
index fb2f2a5407..7a4434acbf 100644
--- a/erts/emulator/beam/erl_node_tables.h
+++ b/erts/emulator/beam/erl_node_tables.h
@@ -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.
@@ -182,7 +182,7 @@ Uint erts_dist_table_size(void);
void erts_dist_table_info(int, void *);
void erts_set_dist_entry_not_connected(DistEntry *);
void erts_set_dist_entry_connected(DistEntry *, Eterm, Uint);
-ErlNode *erts_find_or_insert_node(Eterm, Uint);
+ErlNode *erts_find_or_insert_node(Eterm, Uint32);
void erts_schedule_delete_node(ErlNode *);
void erts_set_this_node(Eterm, Uint);
Uint erts_node_table_size(void);
diff --git a/erts/emulator/beam/erl_port.h b/erts/emulator/beam/erl_port.h
index fa97707a87..f0075ca2b9 100644
--- a/erts/emulator/beam/erl_port.h
+++ b/erts/emulator/beam/erl_port.h
@@ -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.
@@ -185,7 +185,7 @@ struct _erl_drv_port {
int control_flags; /* Flags for port_control() */
ErlDrvPDL port_data_lock;
- ErtsPrtSD *psd; /* Port specific data */
+ erts_smp_atomic_t psd; /* Port specific data */
int reds; /* Only used while executing driver callbacks */
struct {
@@ -252,22 +252,51 @@ ERTS_GLB_INLINE void *erts_prtsd_set(Port *p, int ix, void *new);
ERTS_GLB_INLINE void *
erts_prtsd_get(Port *prt, int ix)
{
- return prt->psd ? prt->psd->data[ix] : NULL;
+ ErtsPrtSD *psd = (ErtsPrtSD *) erts_smp_atomic_read_nob(&prt->psd);
+ if (!psd)
+ return NULL;
+ ERTS_SMP_DATA_DEPENDENCY_READ_MEMORY_BARRIER;
+ return psd->data[ix];
}
ERTS_GLB_INLINE void *
erts_prtsd_set(Port *prt, int ix, void *data)
{
- if (prt->psd) {
- void *old = prt->psd->data[ix];
- prt->psd->data[ix] = data;
+ ErtsPrtSD *psd, *new_psd;
+ void *old;
+ int i;
+
+ psd = (ErtsPrtSD *) erts_smp_atomic_read_nob(&prt->psd);
+
+ if (psd) {
+#ifdef ERTS_SMP
+#ifdef ETHR_ORDERED_READ_DEPEND
+ ETHR_MEMBAR(ETHR_LoadStore|ETHR_StoreStore);
+#else
+ ETHR_MEMBAR(ETHR_LoadLoad|ETHR_LoadStore|ETHR_StoreStore);
+#endif
+#endif
+ old = psd->data[ix];
+ psd->data[ix] = data;
return old;
}
- else {
- prt->psd = erts_alloc(ERTS_ALC_T_PRTSD, sizeof(ErtsPrtSD));
- prt->psd->data[ix] = data;
+
+ if (!data)
return NULL;
- }
+
+ new_psd = erts_alloc(ERTS_ALC_T_PRTSD, sizeof(ErtsPrtSD));
+ for (i = 0; i < ERTS_PRTSD_SIZE; i++)
+ new_psd->data[i] = NULL;
+ psd = (ErtsPrtSD *) erts_smp_atomic_cmpxchg_mb(&prt->psd,
+ (erts_aint_t) new_psd,
+ (erts_aint_t) NULL);
+ if (psd)
+ erts_free(ERTS_ALC_T_PRTSD, new_psd);
+ else
+ psd = new_psd;
+ old = psd->data[ix];
+ psd->data[ix] = data;
+ return old;
}
#endif
@@ -458,6 +487,7 @@ ERTS_GLB_INLINE Port*erts_id2port(Eterm id);
ERTS_GLB_INLINE Port *erts_id2port_sflgs(Eterm, Process *, ErtsProcLocks, Uint32);
ERTS_GLB_INLINE void erts_port_release(Port *);
#ifdef ERTS_SMP
+ERTS_GLB_INLINE Port *erts_thr_port_lookup(Eterm id, Uint32 invalid_sflgs);
ERTS_GLB_INLINE Port *erts_thr_id2port_sflgs(Eterm id, Uint32 invalid_sflgs);
ERTS_GLB_INLINE void erts_thr_port_release(Port *prt);
#endif
@@ -597,6 +627,44 @@ erts_port_release(Port *prt)
}
#ifdef ERTS_SMP
+/*
+ * erts_thr_id2port_sflgs() and erts_port_dec_refc(prt) can
+ * be used by unmanaged threads in the SMP case.
+ */
+ERTS_GLB_INLINE Port *
+erts_thr_port_lookup(Eterm id, Uint32 invalid_sflgs)
+{
+ Port *prt;
+ ErtsThrPrgrDelayHandle dhndl;
+
+ if (is_not_internal_port(id))
+ return NULL;
+
+ dhndl = erts_thr_progress_unmanaged_delay();
+
+ prt = (Port *) erts_ptab_pix2intptr_ddrb(&erts_port,
+ internal_port_index(id));
+
+ if (!prt || prt->common.id != id) {
+ erts_thr_progress_unmanaged_continue(dhndl);
+ return NULL;
+ }
+ else {
+ erts_aint32_t state;
+ erts_port_inc_refc(prt);
+
+ if (dhndl != ERTS_THR_PRGR_DHANDLE_MANAGED)
+ erts_thr_progress_unmanaged_continue(dhndl);
+
+ state = erts_atomic32_read_acqb(&prt->state);
+ if (state & invalid_sflgs) {
+ erts_port_dec_refc(prt);
+ return NULL;
+ }
+
+ return prt;
+ }
+}
/*
* erts_thr_id2port_sflgs() and erts_thr_port_release() can
@@ -915,7 +983,7 @@ erts_schedule_proc2port_signal(Process *,
ErtsPortTaskHandle *,
ErtsProc2PortSigCallback);
-int erts_deliver_port_exit(Port *, Eterm, Eterm, int);
+int erts_deliver_port_exit(Port *, Eterm, Eterm, int, int);
/*
* Port signal flags
@@ -949,6 +1017,8 @@ ErtsPortOpResult erts_port_control(Process *, Port *, unsigned int, Eterm, Eterm
ErtsPortOpResult erts_port_call(Process *, Port *, unsigned int, Eterm, Eterm *);
ErtsPortOpResult erts_port_info(Process *, Port *, Eterm, Eterm *);
+int erts_port_output_async(Port *, Eterm, Eterm);
+
/*
* Signals from ports to ports. Used by sys drivers.
*/
diff --git a/erts/emulator/beam/erl_port_task.c b/erts/emulator/beam/erl_port_task.c
index 197b328fe2..3102e44c11 100644
--- a/erts/emulator/beam/erl_port_task.c
+++ b/erts/emulator/beam/erl_port_task.c
@@ -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.
@@ -35,6 +35,7 @@
#include "dist.h"
#include "erl_check_io.h"
#include "dtrace-wrapper.h"
+#include "lttng-wrapper.h"
#include <stdarg.h>
/*
@@ -69,6 +70,18 @@ static void chk_task_queues(Port *pp, ErtsPortTask *execq, int processing_busy_q
#else
#define DTRACE_DRIVER(PROBE_NAME, PP) do {} while(0)
#endif
+#ifdef USE_LTTNG_VM_TRACEPOINTS
+#define LTTNG_DRIVER(TRACEPOINT, PP) \
+ if (LTTNG_ENABLED(TRACEPOINT)) { \
+ lttng_decl_portbuf(port_str); \
+ lttng_decl_procbuf(proc_str); \
+ lttng_pid_to_str(ERTS_PORT_GET_CONNECTED(PP), proc_str); \
+ lttng_port_to_str((PP), port_str); \
+ LTTNG3(TRACEPOINT, proc_str, port_str, (PP)->name); \
+ }
+#else
+#define LTTNG_DRIVER(TRACEPOINT, PP) do {} while(0)
+#endif
#define ERTS_SMP_LC_VERIFY_RQ(RQ, PP) \
do { \
@@ -180,10 +193,9 @@ p2p_sig_data_to_task(ErtsProc2PortSigData *sigdp)
return ptp;
}
-ErtsProc2PortSigData *
-erts_port_task_alloc_p2p_sig_data(void)
+static ERTS_INLINE ErtsProc2PortSigData *
+p2p_sig_data_init(ErtsPortTask *ptp)
{
- ErtsPortTask *ptp = port_task_alloc();
ptp->type = ERTS_PORT_TASK_PROC_SIG;
ptp->u.alive.flags = ERTS_PT_FLG_SIG_DEP;
@@ -194,6 +206,31 @@ erts_port_task_alloc_p2p_sig_data(void)
return &ptp->u.alive.td.psig.data;
}
+ErtsProc2PortSigData *
+erts_port_task_alloc_p2p_sig_data(void)
+{
+ ErtsPortTask *ptp = port_task_alloc();
+
+ return p2p_sig_data_init(ptp);
+}
+
+ErtsProc2PortSigData *
+erts_port_task_alloc_p2p_sig_data_extra(size_t extra, void **extra_ptr)
+{
+ ErtsPortTask *ptp = erts_alloc(ERTS_ALC_T_PORT_TASK,
+ sizeof(ErtsPortTask) + extra);
+
+ *extra_ptr = ptp+1;
+
+ return p2p_sig_data_init(ptp);
+}
+
+void
+erts_port_task_free_p2p_sig_data(ErtsProc2PortSigData *sigdp)
+{
+ schedule_port_task_free(p2p_sig_data_to_task(sigdp));
+}
+
static ERTS_INLINE Eterm
task_caller(ErtsPortTask *ptp)
{
@@ -1728,6 +1765,9 @@ erts_port_task_execute(ErtsRunQueue *runq, Port **curr_port_pp)
reds = ERTS_PORT_REDS_TIMEOUT;
if (!(state & ERTS_PORT_SFLGS_DEAD)) {
DTRACE_DRIVER(driver_timeout, pp);
+ LTTNG_DRIVER(driver_timeout, pp);
+ if (IS_TRACED_FL(pp, F_TRACE_RECEIVE))
+ trace_port(pp, am_receive, am_timeout);
(*pp->drv_ptr->timeout)((ErlDrvData) pp->drv_data);
}
}
@@ -1736,6 +1776,7 @@ erts_port_task_execute(ErtsRunQueue *runq, Port **curr_port_pp)
reds = ERTS_PORT_REDS_INPUT;
ASSERT((state & ERTS_PORT_SFLGS_DEAD) == 0);
DTRACE_DRIVER(driver_ready_input, pp);
+ LTTNG_DRIVER(driver_ready_input, pp);
/* NOTE some windows drivers use ->ready_input
for input and output */
(*pp->drv_ptr->ready_input)((ErlDrvData) pp->drv_data,
@@ -1747,6 +1788,7 @@ erts_port_task_execute(ErtsRunQueue *runq, Port **curr_port_pp)
reds = ERTS_PORT_REDS_OUTPUT;
ASSERT((state & ERTS_PORT_SFLGS_DEAD) == 0);
DTRACE_DRIVER(driver_ready_output, pp);
+ LTTNG_DRIVER(driver_ready_output, pp);
(*pp->drv_ptr->ready_output)((ErlDrvData) pp->drv_data,
ptp->u.alive.td.io.event);
reset_executed_io_task_handle(ptp);
@@ -1756,6 +1798,7 @@ erts_port_task_execute(ErtsRunQueue *runq, Port **curr_port_pp)
reds = ERTS_PORT_REDS_EVENT;
ASSERT((state & ERTS_PORT_SFLGS_DEAD) == 0);
DTRACE_DRIVER(driver_event, pp);
+ LTTNG_DRIVER(driver_event, pp);
(*pp->drv_ptr->event)((ErlDrvData) pp->drv_data,
ptp->u.alive.td.io.event,
ptp->u.alive.td.io.event_data);
@@ -1786,7 +1829,7 @@ erts_port_task_execute(ErtsRunQueue *runq, Port **curr_port_pp)
reds = erts_dist_command(pp, CONTEXT_REDS - pp->reds);
break;
default:
- erl_exit(ERTS_ABORT_EXIT,
+ erts_exit(ERTS_ABORT_EXIT,
"Invalid port task type: %d\n",
(int) ptp->type);
break;
@@ -2051,7 +2094,7 @@ begin_port_cleanup(Port *pp, ErtsPortTask **execqp, int *processing_busy_q_p)
break;
}
default:
- erl_exit(ERTS_ABORT_EXIT,
+ erts_exit(ERTS_ABORT_EXIT,
"Invalid port task type: %d\n",
(int) ptp->type);
}
diff --git a/erts/emulator/beam/erl_port_task.h b/erts/emulator/beam/erl_port_task.h
index 335f7a77d5..2a6bd165a3 100644
--- a/erts/emulator/beam/erl_port_task.h
+++ b/erts/emulator/beam/erl_port_task.h
@@ -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.
@@ -269,6 +269,8 @@ int erts_port_task_schedule(Eterm,
void erts_port_task_free_port(Port *);
int erts_port_is_scheduled(Port *);
ErtsProc2PortSigData *erts_port_task_alloc_p2p_sig_data(void);
+ErtsProc2PortSigData *erts_port_task_alloc_p2p_sig_data_extra(size_t extra, void **extra_ptr);
+void erts_port_task_free_p2p_sig_data(ErtsProc2PortSigData *sigdp);
#ifdef ERTS_SMP
void erts_enqueue_port(ErtsRunQueue *rq, Port *pp);
diff --git a/erts/emulator/beam/erl_printf_term.c b/erts/emulator/beam/erl_printf_term.c
index 45ba4371dc..1a579704a8 100644
--- a/erts/emulator/beam/erl_printf_term.c
+++ b/erts/emulator/beam/erl_printf_term.c
@@ -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/erts/emulator/beam/erl_printf_term.h b/erts/emulator/beam/erl_printf_term.h
index 4618457f27..8a30286fd8 100644
--- a/erts/emulator/beam/erl_printf_term.h
+++ b/erts/emulator/beam/erl_printf_term.h
@@ -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/erts/emulator/beam/erl_process.c b/erts/emulator/beam/erl_process.c
index e4584e7cc2..a853ec585b 100644
--- a/erts/emulator/beam/erl_process.c
+++ b/erts/emulator/beam/erl_process.c
@@ -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,6 +43,7 @@
#include "erl_thr_queue.h"
#include "erl_async.h"
#include "dtrace-wrapper.h"
+#include "lttng-wrapper.h"
#include "erl_ptab.h"
#include "erl_bif_unique.h"
#define ERTS_WANT_TIMER_WHEEL_API
@@ -153,10 +154,8 @@ int ERTS_WRITE_UNLIKELY(erts_eager_check_io) = 1;
int ERTS_WRITE_UNLIKELY(erts_sched_compact_load);
int ERTS_WRITE_UNLIKELY(erts_sched_balance_util) = 0;
Uint ERTS_WRITE_UNLIKELY(erts_no_schedulers);
-#ifdef ERTS_DIRTY_SCHEDULERS
-Uint ERTS_WRITE_UNLIKELY(erts_no_dirty_cpu_schedulers);
-Uint ERTS_WRITE_UNLIKELY(erts_no_dirty_io_schedulers);
-#endif
+Uint ERTS_WRITE_UNLIKELY(erts_no_dirty_cpu_schedulers) = 0;
+Uint ERTS_WRITE_UNLIKELY(erts_no_dirty_io_schedulers) = 0;
static char *erts_aux_work_flag_descr[ERTS_SSI_AUX_WORK_NO_FLAGS] = {0};
int erts_aux_work_no_flags = ERTS_SSI_AUX_WORK_NO_FLAGS;
@@ -188,84 +187,176 @@ int erts_disable_proc_not_running_opt;
static ErtsAuxWorkData *aux_thread_aux_work_data;
-#define ERTS_SCHDLR_SSPND_CHNG_WAITER (((erts_aint32_t) 1) << 0)
+#define ERTS_SCHDLR_SSPND_CHNG_NMSB (((erts_aint32_t) 1) << 0)
#define ERTS_SCHDLR_SSPND_CHNG_MSB (((erts_aint32_t) 1) << 1)
#define ERTS_SCHDLR_SSPND_CHNG_ONLN (((erts_aint32_t) 1) << 2)
+#define ERTS_SCHDLR_SSPND_CHNG_DCPU_ONLN (((erts_aint32_t) 1) << 3)
-#ifndef DEBUG
+typedef enum {
+ ERTS_SCHED_NORMAL,
+ ERTS_SCHED_DIRTY_CPU,
+ ERTS_SCHED_DIRTY_IO
+} ErtsSchedType;
-#define ERTS_SCHDLR_SSPND_CHNG_SET(VAL, OLD_VAL) \
- erts_smp_atomic32_set_nob(&schdlr_sspnd.changing, (VAL))
+typedef struct {
+ int ongoing;
+ ErtsProcList *blckrs;
+ ErtsProcList *chngq;
+} ErtsMultiSchedulingBlock;
-#ifdef ERTS_DIRTY_SCHEDULERS
-#define ERTS_SCHDLR_SSPND_DIRTY_CPU_CHNG_SET(VAL, OLD_VAL) \
- erts_smp_atomic32_set_nob(&schdlr_sspnd.dirty_cpu_changing, (VAL))
-#define ERTS_SCHDLR_SSPND_DIRTY_IO_CHNG_SET(VAL, OLD_VAL) \
- erts_smp_atomic32_set_nob(&schdlr_sspnd.dirty_io_changing, (VAL))
-#endif
+static struct {
+ erts_smp_mtx_t mtx;
+ Uint32 online;
+ Uint32 curr_online;
+ Uint32 active;
+ erts_smp_atomic32_t changing;
+ ErtsProcList *chngq;
+ Eterm changer;
+ ErtsMultiSchedulingBlock nmsb; /* Normal multi Scheduling Block */
+ ErtsMultiSchedulingBlock msb; /* Multi Scheduling Block */
+} schdlr_sspnd;
-#else
+#define ERTS_SCHDLR_SSPND_S_BITS 10
+#define ERTS_SCHDLR_SSPND_DCS_BITS 11
+#define ERTS_SCHDLR_SSPND_DIS_BITS 11
-#define ERTS_SCHDLR_SSPND_CHNG_SET(VAL, OLD_VAL) \
-do { \
- erts_aint32_t old_val__; \
- old_val__ = erts_smp_atomic32_xchg_nob(&schdlr_sspnd.changing, \
- (VAL)); \
- ASSERT(old_val__ == (OLD_VAL)); \
-} while (0)
+#define ERTS_SCHDLR_SSPND_S_MASK ((1 << ERTS_SCHDLR_SSPND_S_BITS)-1)
+#define ERTS_SCHDLR_SSPND_DCS_MASK ((1 << ERTS_SCHDLR_SSPND_DCS_BITS)-1)
+#define ERTS_SCHDLR_SSPND_DIS_MASK ((1 << ERTS_SCHDLR_SSPND_DIS_BITS)-1)
-#ifdef ERTS_DIRTY_SCHEDULERS
-#define ERTS_SCHDLR_SSPND_DIRTY_CPU_CHNG_SET(VAL, OLD_VAL) \
-do { \
- erts_aint32_t old_val__; \
- old_val__ = erts_smp_atomic32_xchg_nob(&schdlr_sspnd.dirty_cpu_changing, \
- (VAL)); \
- ASSERT(old_val__ == (OLD_VAL)); \
-} while (0)
-#define ERTS_SCHDLR_SSPND_DIRTY_IO_CHNG_SET(VAL, OLD_VAL) \
-do { \
- erts_aint32_t old_val__; \
- old_val__ = erts_smp_atomic32_xchg_nob(&schdlr_sspnd.dirty_io_changing, \
- (VAL)); \
- ASSERT(old_val__ == (OLD_VAL)); \
-} while (0)
-#endif
+#define ERTS_SCHDLR_SSPND_S_SHIFT 0
+#define ERTS_SCHDLR_SSPND_DCS_SHIFT (ERTS_SCHDLR_SSPND_S_SHIFT \
+ + ERTS_SCHDLR_SSPND_S_BITS)
+#define ERTS_SCHDLR_SSPND_DIS_SHIFT (ERTS_SCHDLR_SSPND_DCS_SHIFT \
+ + ERTS_SCHDLR_SSPND_DCS_BITS)
+#if (ERTS_SCHDLR_SSPND_S_BITS \
+ + ERTS_SCHDLR_SSPND_DCS_BITS \
+ + ERTS_SCHDLR_SSPND_DIS_BITS) > 32
+# error Wont fit in Uint32
#endif
-
-static struct {
- erts_smp_mtx_t mtx;
- erts_smp_cnd_t cnd;
- int online;
- int curr_online;
- int wait_curr_online;
-#ifdef ERTS_DIRTY_SCHEDULERS
- int dirty_cpu_online;
- int dirty_cpu_curr_online;
- int dirty_cpu_wait_curr_online;
- int dirty_io_online;
- int dirty_io_curr_online;
- int dirty_io_wait_curr_online;
+#if (ERTS_MAX_NO_OF_SCHEDULERS-1) > ERTS_SCHDLR_SSPND_S_MASK
+# error Max no schedulers wont fit in its bit-field
#endif
- erts_smp_atomic32_t changing;
- erts_smp_atomic32_t active;
-#ifdef ERTS_DIRTY_SCHEDULERS
- erts_smp_atomic32_t dirty_cpu_changing;
- erts_smp_atomic32_t dirty_cpu_active;
- erts_smp_atomic32_t dirty_io_changing;
- erts_smp_atomic32_t dirty_io_active;
+#if ERTS_MAX_NO_OF_DIRTY_CPU_SCHEDULERS > ERTS_SCHDLR_SSPND_DCS_MASK
+# error Max no dirty cpu schedulers wont fit in its bit-field
#endif
- struct {
- int ongoing;
- long wait_active;
-#ifdef ERTS_DIRTY_SCHEDULERS
- long dirty_cpu_wait_active;
- long dirty_io_wait_active;
+#if ERTS_MAX_NO_OF_DIRTY_IO_SCHEDULERS > ERTS_SCHDLR_SSPND_DIS_MASK
+# error Max no dirty io schedulers wont fit in its bit-field
#endif
- ErtsProcList *procs;
- } msb; /* Multi Scheduling Block */
-} schdlr_sspnd;
+
+#define ERTS_SCHDLR_SSPND_MAKE_NSCHEDS_VAL(S, DCS, DIS) \
+ ((((Uint32) (((S) & ERTS_SCHDLR_SSPND_S_MASK))-1) \
+ << ERTS_SCHDLR_SSPND_S_SHIFT) \
+ | ((((Uint32) ((DCS) & ERTS_SCHDLR_SSPND_DCS_MASK)) \
+ << ERTS_SCHDLR_SSPND_DCS_SHIFT)) \
+ | ((((Uint32) ((DIS) & ERTS_SCHDLR_SSPND_DIS_MASK)) \
+ << ERTS_SCHDLR_SSPND_DIS_SHIFT)))
+
+static void init_scheduler_suspend(void);
+
+static ERTS_INLINE Uint32
+schdlr_sspnd_get_nscheds(Uint32 *valp, ErtsSchedType type)
+{
+ Uint32 res = (Uint32) (*valp);
+ switch (type) {
+ case ERTS_SCHED_NORMAL:
+ res >>= ERTS_SCHDLR_SSPND_S_SHIFT;
+ res &= (Uint32) ERTS_SCHDLR_SSPND_S_MASK;
+ res++;
+ break;
+ case ERTS_SCHED_DIRTY_CPU:
+ res >>= ERTS_SCHDLR_SSPND_DCS_SHIFT;
+ res &= (Uint32) ERTS_SCHDLR_SSPND_DCS_MASK;
+ break;
+ case ERTS_SCHED_DIRTY_IO:
+ res >>= ERTS_SCHDLR_SSPND_DIS_SHIFT;
+ res &= (Uint32) ERTS_SCHDLR_SSPND_DIS_MASK;
+ break;
+ default:
+ ERTS_INTERNAL_ERROR("Invalid scheduler type");
+ return 0;
+ }
+
+ return res;
+}
+
+static ERTS_INLINE void
+schdlr_sspnd_dec_nscheds(Uint32 *valp, ErtsSchedType type)
+{
+ ASSERT(schdlr_sspnd_get_nscheds(valp, type) > 0);
+
+ switch (type) {
+ case ERTS_SCHED_NORMAL:
+ *valp -= ((Uint32) 1) << ERTS_SCHDLR_SSPND_S_SHIFT;
+ break;
+ case ERTS_SCHED_DIRTY_CPU:
+ *valp -= ((Uint32) 1) << ERTS_SCHDLR_SSPND_DCS_SHIFT;
+ break;
+ case ERTS_SCHED_DIRTY_IO:
+ *valp -= ((Uint32) 1) << ERTS_SCHDLR_SSPND_DIS_SHIFT;
+ break;
+ default:
+ ERTS_INTERNAL_ERROR("Invalid scheduler type");
+ }
+}
+
+static ERTS_INLINE void
+schdlr_sspnd_inc_nscheds(Uint32 *valp, ErtsSchedType type)
+{
+ switch (type) {
+ case ERTS_SCHED_NORMAL:
+ ASSERT(schdlr_sspnd_get_nscheds(valp, type)
+ < ERTS_MAX_NO_OF_SCHEDULERS-1);
+ *valp += ((Uint32) 1) << ERTS_SCHDLR_SSPND_S_SHIFT;
+ break;
+ case ERTS_SCHED_DIRTY_CPU:
+ ASSERT(schdlr_sspnd_get_nscheds(valp, type)
+ < ERTS_MAX_NO_OF_DIRTY_CPU_SCHEDULERS);
+ *valp += ((Uint32) 1) << ERTS_SCHDLR_SSPND_DCS_SHIFT;
+ break;
+ case ERTS_SCHED_DIRTY_IO:
+ ASSERT(schdlr_sspnd_get_nscheds(valp, type)
+ < ERTS_MAX_NO_OF_DIRTY_IO_SCHEDULERS);
+ *valp += ((Uint32) 1) << ERTS_SCHDLR_SSPND_DIS_SHIFT;
+ break;
+ default:
+ ERTS_INTERNAL_ERROR("Invalid scheduler type");
+ }
+}
+
+static ERTS_INLINE void
+schdlr_sspnd_set_nscheds(Uint32 *valp, ErtsSchedType type, Uint32 no)
+{
+ Uint32 val = *valp;
+
+ switch (type) {
+ case ERTS_SCHED_NORMAL:
+ ASSERT(no > 0);
+ val &= ~(((Uint32) ERTS_SCHDLR_SSPND_S_MASK)
+ << ERTS_SCHDLR_SSPND_S_SHIFT);
+ val |= (((no-1) & ((Uint32) ERTS_SCHDLR_SSPND_S_MASK))
+ << ERTS_SCHDLR_SSPND_S_SHIFT);
+ break;
+ case ERTS_SCHED_DIRTY_CPU:
+ val &= ~(((Uint32) ERTS_SCHDLR_SSPND_DCS_MASK)
+ << ERTS_SCHDLR_SSPND_DCS_SHIFT);
+ val |= ((no & ((Uint32) ERTS_SCHDLR_SSPND_DCS_MASK))
+ << ERTS_SCHDLR_SSPND_DCS_SHIFT);
+ break;
+ case ERTS_SCHED_DIRTY_IO:
+ val &= ~(((Uint32) ERTS_SCHDLR_SSPND_DIS_MASK)
+ << ERTS_SCHDLR_SSPND_DIS_SHIFT);
+ val |= ((no & ((Uint32) ERTS_SCHDLR_SSPND_DIS_MASK))
+ << ERTS_SCHDLR_SSPND_DIS_SHIFT);
+ break;
+ default:
+ ERTS_INTERNAL_ERROR("Invalid scheduler type");
+ }
+
+ *valp = val;
+}
static struct {
erts_smp_mtx_t update_mtx;
@@ -318,6 +409,10 @@ ErtsAlignedSchedulerData *erts_aligned_scheduler_data;
#ifdef ERTS_DIRTY_SCHEDULERS
ErtsAlignedSchedulerData *erts_aligned_dirty_cpu_scheduler_data;
ErtsAlignedSchedulerData *erts_aligned_dirty_io_scheduler_data;
+typedef union {
+ Process dsp;
+ char align[ERTS_ALC_CACHE_LINE_ALIGN_SIZE(sizeof(Process))];
+} ErtsAlignedDirtyShadowProcess;
#endif
typedef union {
@@ -353,7 +448,8 @@ int erts_system_profile_ts_type = ERTS_TRACE_FLG_NOW_TIMESTAMP;
typedef enum {
ERTS_PSTT_GC, /* Garbage Collect */
ERTS_PSTT_CPC, /* Check Process Code */
- ERTS_PSTT_COHMQ /* Change off heap message queue */
+ ERTS_PSTT_COHMQ, /* Change off heap message queue */
+ ERTS_PSTT_FTMQ /* Flush trace msg queue */
} ErtsProcSysTaskType;
#define ERTS_MAX_PROC_SYS_TASK_ARGS 2
@@ -426,8 +522,10 @@ do { \
do { \
ErtsRunQueue *RQVAR; \
int ix__; \
+ int online__ = (int) schdlr_sspnd_get_nscheds(&schdlr_sspnd.online, \
+ ERTS_SCHED_NORMAL); \
ERTS_SMP_LC_ASSERT(erts_smp_lc_mtx_is_locked(&schdlr_sspnd.mtx)); \
- for (ix__ = 0; ix__ < schdlr_sspnd.online; ix__++) { \
+ for (ix__ = 0; ix__ < online__; ix__++) { \
RQVAR = ERTS_RUNQ_IX(ix__); \
erts_smp_runq_lock(RQVAR); \
{ DO; } \
@@ -495,6 +593,7 @@ dbg_chk_aux_work_val(erts_aint32_t value)
valid |= ERTS_SSI_AUX_WORK_CNCLD_TMRS;
valid |= ERTS_SSI_AUX_WORK_CNCLD_TMRS_THR_PRGR;
valid |= ERTS_SSI_AUX_WORK_THR_PRGR_LATER_OP;
+ valid |= ERTS_SSI_AUX_WORK_PENDING_EXITERS;
#endif
#if HAVE_ERTS_MSEG
valid |= ERTS_SSI_AUX_WORK_MSEG_CACHE_CHECK;
@@ -505,7 +604,7 @@ dbg_chk_aux_work_val(erts_aint32_t value)
valid |= ERTS_SSI_AUX_WORK_DEBUG_WAIT_COMPLETED;
if (~valid & value)
- erl_exit(ERTS_ABORT_EXIT,
+ erts_exit(ERTS_ABORT_EXIT,
"Invalid aux_work value found: 0x%x\n",
~valid & value);
}
@@ -517,7 +616,7 @@ dbg_chk_aux_work_val(erts_aint32_t value)
#endif
#ifdef ERTS_SMP
-static void handle_pending_exiters(ErtsProcList *);
+static void do_handle_pending_exiters(ErtsProcList *);
static void wake_scheduler(ErtsRunQueue *rq);
#endif
@@ -585,6 +684,8 @@ erts_pre_init_process(void)
= "MISC_THR_PRGR";
erts_aux_work_flag_descr[ERTS_SSI_AUX_WORK_MISC_IX]
= "MISC";
+ erts_aux_work_flag_descr[ERTS_SSI_AUX_WORK_PENDING_EXITERS_IX]
+ = "PENDING_EXITERS";
erts_aux_work_flag_descr[ERTS_SSI_AUX_WORK_SET_TMO_IX]
= "SET_TMO";
erts_aux_work_flag_descr[ERTS_SSI_AUX_WORK_MSEG_CACHE_CHECK_IX]
@@ -595,45 +696,36 @@ erts_pre_init_process(void)
= "DEBUG_WAIT_COMPLETED";
#ifdef ERTS_ENABLE_LOCK_CHECK
- {
- int ix;
- erts_psd_required_locks[ERTS_PSD_ERROR_HANDLER].get_locks
- = ERTS_PSD_ERROR_HANDLER_BUF_GET_LOCKS;
- erts_psd_required_locks[ERTS_PSD_ERROR_HANDLER].set_locks
- = ERTS_PSD_ERROR_HANDLER_BUF_SET_LOCKS;
+ erts_psd_required_locks[ERTS_PSD_ERROR_HANDLER].get_locks
+ = ERTS_PSD_ERROR_HANDLER_BUF_GET_LOCKS;
+ erts_psd_required_locks[ERTS_PSD_ERROR_HANDLER].set_locks
+ = ERTS_PSD_ERROR_HANDLER_BUF_SET_LOCKS;
- erts_psd_required_locks[ERTS_PSD_SAVED_CALLS_BUF].get_locks
- = ERTS_PSD_SAVED_CALLS_BUF_GET_LOCKS;
- erts_psd_required_locks[ERTS_PSD_SAVED_CALLS_BUF].set_locks
- = ERTS_PSD_SAVED_CALLS_BUF_SET_LOCKS;
+ erts_psd_required_locks[ERTS_PSD_SAVED_CALLS_BUF].get_locks
+ = ERTS_PSD_SAVED_CALLS_BUF_GET_LOCKS;
+ erts_psd_required_locks[ERTS_PSD_SAVED_CALLS_BUF].set_locks
+ = ERTS_PSD_SAVED_CALLS_BUF_SET_LOCKS;
- erts_psd_required_locks[ERTS_PSD_SCHED_ID].get_locks
- = ERTS_PSD_SCHED_ID_GET_LOCKS;
- erts_psd_required_locks[ERTS_PSD_SCHED_ID].set_locks
- = ERTS_PSD_SCHED_ID_SET_LOCKS;
+ erts_psd_required_locks[ERTS_PSD_SCHED_ID].get_locks
+ = ERTS_PSD_SCHED_ID_GET_LOCKS;
+ erts_psd_required_locks[ERTS_PSD_SCHED_ID].set_locks
+ = ERTS_PSD_SCHED_ID_SET_LOCKS;
- erts_psd_required_locks[ERTS_PSD_CALL_TIME_BP].get_locks
- = ERTS_PSD_CALL_TIME_BP_GET_LOCKS;
- erts_psd_required_locks[ERTS_PSD_CALL_TIME_BP].set_locks
- = ERTS_PSD_CALL_TIME_BP_SET_LOCKS;
+ erts_psd_required_locks[ERTS_PSD_CALL_TIME_BP].get_locks
+ = ERTS_PSD_CALL_TIME_BP_GET_LOCKS;
+ erts_psd_required_locks[ERTS_PSD_CALL_TIME_BP].set_locks
+ = ERTS_PSD_CALL_TIME_BP_SET_LOCKS;
- erts_psd_required_locks[ERTS_PSD_DELAYED_GC_TASK_QS].get_locks
- = ERTS_PSD_DELAYED_GC_TASK_QS_GET_LOCKS;
- erts_psd_required_locks[ERTS_PSD_DELAYED_GC_TASK_QS].set_locks
- = ERTS_PSD_DELAYED_GC_TASK_QS_SET_LOCKS;
+ erts_psd_required_locks[ERTS_PSD_DELAYED_GC_TASK_QS].get_locks
+ = ERTS_PSD_DELAYED_GC_TASK_QS_GET_LOCKS;
+ erts_psd_required_locks[ERTS_PSD_DELAYED_GC_TASK_QS].set_locks
+ = ERTS_PSD_DELAYED_GC_TASK_QS_SET_LOCKS;
- erts_psd_required_locks[ERTS_PSD_NIF_TRAP_EXPORT].get_locks
- = ERTS_PSD_NIF_TRAP_EXPORT_GET_LOCKS;
- erts_psd_required_locks[ERTS_PSD_NIF_TRAP_EXPORT].set_locks
- = ERTS_PSD_NIF_TRAP_EXPORT_SET_LOCKS;
-
- /* Check that we have locks for all entries */
- for (ix = 0; ix < ERTS_PSD_SIZE; ix++) {
- ERTS_SMP_LC_ASSERT(erts_psd_required_locks[ix].get_locks);
- ERTS_SMP_LC_ASSERT(erts_psd_required_locks[ix].set_locks);
- }
- }
+ erts_psd_required_locks[ERTS_PSD_NIF_TRAP_EXPORT].get_locks
+ = ERTS_PSD_NIF_TRAP_EXPORT_GET_LOCKS;
+ erts_psd_required_locks[ERTS_PSD_NIF_TRAP_EXPORT].set_locks
+ = ERTS_PSD_NIF_TRAP_EXPORT_SET_LOCKS;
#endif
}
@@ -1054,7 +1146,7 @@ reply_sched_wall_time(void *vswtrp)
hpp = &hp;
}
- erts_queue_message(rp, &rp_locks, mp, msg, NIL);
+ erts_queue_message(rp, rp_locks, mp, msg, am_system);
if (swtrp->req_sched == esdp->no)
rp_locks &= ~ERTS_PROC_LOCK_MAIN;
@@ -1071,7 +1163,7 @@ reply_sched_wall_time(void *vswtrp)
Eterm
erts_sched_wall_time_request(Process *c_p, int set, int enable)
{
- ErtsSchedulerData *esdp = ERTS_PROC_GET_SCHDATA(c_p);
+ ErtsSchedulerData *esdp = erts_proc_sched_data(c_p);
Eterm ref;
ErtsSchedWallTimeReq *swtrp;
Eterm *hp;
@@ -1133,7 +1225,7 @@ reply_system_check(void *vscrp)
hpp = &hp;
msg = STORE_NC(hpp, ohp, scrp->ref);
- erts_queue_message(rp, &rp_locks, mp, msg, NIL);
+ erts_queue_message(rp, rp_locks, mp, msg, am_system);
if (scrp->req_sched == esdp->no)
rp_locks &= ~ERTS_PROC_LOCK_MAIN;
@@ -1149,7 +1241,7 @@ reply_system_check(void *vscrp)
Eterm erts_system_check_request(Process *c_p) {
- ErtsSchedulerData *esdp = ERTS_PROC_GET_SCHDATA(c_p);
+ ErtsSchedulerData *esdp = erts_proc_sched_data(c_p);
Eterm ref;
ErtsSystemCheckReq *scrp;
Eterm *hp;
@@ -1188,6 +1280,15 @@ proclist_create(Process *p)
return plp;
}
+static ERTS_INLINE ErtsProcList *
+proclist_copy(ErtsProcList *plp0)
+{
+ ErtsProcList *plp1 = proclist_alloc();
+ plp1->pid = plp0->pid;
+ plp1->started_interval = plp0->started_interval;
+ return plp1;
+}
+
static ERTS_INLINE void
proclist_destroy(ErtsProcList *plp)
{
@@ -1195,6 +1296,12 @@ proclist_destroy(ErtsProcList *plp)
}
ErtsProcList *
+erts_proclist_copy(ErtsProcList *plp)
+{
+ return proclist_copy(plp);
+}
+
+ErtsProcList *
erts_proclist_create(Process *p)
{
return proclist_create(p);
@@ -1207,46 +1314,25 @@ erts_proclist_destroy(ErtsProcList *plp)
}
void *
-erts_psd_set_init(Process *p, ErtsProcLocks plocks, int ix, void *data)
+erts_psd_set_init(Process *p, int ix, void *data)
{
void *old;
- ErtsProcLocks xplocks;
- int refc = 0;
- ErtsPSD *psd = erts_alloc(ERTS_ALC_T_PSD, sizeof(ErtsPSD));
+ ErtsPSD *psd, *new_psd;
int i;
- for (i = 0; i < ERTS_PSD_SIZE; i++)
- psd->data[i] = NULL;
- ERTS_SMP_LC_ASSERT(plocks);
- ERTS_SMP_LC_ASSERT(plocks == erts_proc_lc_my_proc_locks(p));
+ new_psd = erts_alloc(ERTS_ALC_T_PSD, sizeof(ErtsPSD));
+ for (i = 0; i < ERTS_PSD_SIZE; i++)
+ new_psd->data[i] = NULL;
- xplocks = ERTS_PROC_LOCKS_ALL;
- xplocks &= ~plocks;
- if (xplocks && erts_smp_proc_trylock(p, xplocks) == EBUSY) {
- if (xplocks & ERTS_PROC_LOCK_MAIN) {
- erts_proc_inc_refc(p);
- erts_smp_proc_unlock(p, plocks);
- erts_smp_proc_lock(p, ERTS_PROC_LOCKS_ALL);
- refc = 1;
- }
- else {
- if (plocks & ERTS_PROC_LOCKS_ALL_MINOR)
- erts_smp_proc_unlock(p, plocks & ERTS_PROC_LOCKS_ALL_MINOR);
- erts_smp_proc_lock(p, ERTS_PROC_LOCKS_ALL_MINOR);
- }
- }
- if (!p->psd)
- p->psd = psd;
- if (xplocks)
- erts_smp_proc_unlock(p, xplocks);
- if (refc)
- erts_proc_dec_refc(p);
- ASSERT(p->psd);
- if (p->psd != psd)
- erts_free(ERTS_ALC_T_PSD, psd);
- old = p->psd->data[ix];
- p->psd->data[ix] = data;
- ERTS_SMP_LC_ASSERT(plocks == erts_proc_lc_my_proc_locks(p));
+ psd = (ErtsPSD *) erts_smp_atomic_cmpxchg_mb(&p->psd,
+ (erts_aint_t) new_psd,
+ (erts_aint_t) NULL);
+ if (psd)
+ erts_free(ERTS_ALC_T_PSD, new_psd);
+ else
+ psd = new_psd;
+ old = psd->data[ix];
+ psd->data[ix] = data;
return old;
}
@@ -1272,7 +1358,7 @@ erts_sched_finish_poke(ErtsSchedulerSleepInfo *ssi, erts_aint32_t flags)
case 0:
break;
default:
- erl_exit(ERTS_ABORT_EXIT, "%s:%d: Internal error\n",
+ erts_exit(ERTS_ABORT_EXIT, "%s:%d: Internal error\n",
__FILE__, __LINE__);
break;
}
@@ -2104,8 +2190,7 @@ setup_thr_debug_wait_completed(void *vproc)
if (debug_wait_completed_flags & ERTS_DEBUG_WAIT_COMPLETED_DEALLOCATIONS) {
erts_alloc_fix_alloc_shrink(awdp->sched_id, 0);
wait_flags |= (ERTS_SSI_AUX_WORK_DD
- | ERTS_SSI_AUX_WORK_DD_THR_PRGR
- | ERTS_SSI_AUX_WORK_THR_PRGR_LATER_OP);
+ | ERTS_SSI_AUX_WORK_DD_THR_PRGR);
#ifdef ERTS_SMP
aux_work_flags |= ERTS_SSI_AUX_WORK_DD;
#endif
@@ -2113,8 +2198,7 @@ setup_thr_debug_wait_completed(void *vproc)
if (debug_wait_completed_flags & ERTS_DEBUG_WAIT_COMPLETED_TIMER_CANCELLATIONS) {
wait_flags |= (ERTS_SSI_AUX_WORK_CNCLD_TMRS
- | ERTS_SSI_AUX_WORK_CNCLD_TMRS_THR_PRGR
- | ERTS_SSI_AUX_WORK_THR_PRGR_LATER_OP);
+ | ERTS_SSI_AUX_WORK_CNCLD_TMRS_THR_PRGR);
#ifdef ERTS_SMP
if (awdp->esdp && !ERTS_SCHEDULER_IS_DIRTY(awdp->esdp))
aux_work_flags |= ERTS_SSI_AUX_WORK_CNCLD_TMRS;
@@ -2128,26 +2212,42 @@ setup_thr_debug_wait_completed(void *vproc)
awdp->debug.wait_completed.arg = vproc;
}
-static void
-prep_setup_thr_debug_wait_completed(void *vproc)
+struct debug_lop {
+ ErtsThrPrgrLaterOp lop;
+ Process *proc;
+};
+
+static void later_thr_debug_wait_completed(void *vlop)
{
+ struct debug_lop *lop = vlop;
erts_aint32_t count = (erts_aint32_t) erts_no_schedulers;
#ifdef ERTS_SMP
count += 1; /* aux thread */
#endif
if (erts_atomic32_dec_read_mb(&debug_wait_completed_count) == count) {
- /* scheduler threads */
- erts_schedule_multi_misc_aux_work(0,
- erts_no_schedulers,
- setup_thr_debug_wait_completed,
- vproc);
+ /* scheduler threads */
+ erts_schedule_multi_misc_aux_work(0,
+ erts_no_schedulers,
+ setup_thr_debug_wait_completed,
+ lop->proc);
#ifdef ERTS_SMP
- /* aux_thread */
- erts_schedule_misc_aux_work(0,
- setup_thr_debug_wait_completed,
- vproc);
+ /* aux_thread */
+ erts_schedule_misc_aux_work(0,
+ setup_thr_debug_wait_completed,
+ lop->proc);
#endif
}
+ erts_free(ERTS_ALC_T_DEBUG, lop);
+}
+
+
+static void
+init_thr_debug_wait_completed(void *vproc)
+{
+ struct debug_lop* lop = erts_alloc(ERTS_ALC_T_DEBUG,
+ sizeof(struct debug_lop));
+ lop->proc = vproc;
+ erts_schedule_thr_prgr_later_op(later_thr_debug_wait_completed, lop, &lop->lop);
}
@@ -2157,7 +2257,7 @@ erts_debug_wait_completed(Process *c_p, int flags)
/* Only one process at a time can do this */
erts_aint32_t count = (erts_aint32_t) (2*erts_no_schedulers);
#ifdef ERTS_SMP
- count += 2; /* aux thread */
+ count += 1; /* aux thread */
#endif
if (0 == erts_atomic32_cmpxchg_mb(&debug_wait_completed_count,
count,
@@ -2165,17 +2265,12 @@ erts_debug_wait_completed(Process *c_p, int flags)
debug_wait_completed_flags = flags;
erts_suspend(c_p, ERTS_PROC_LOCK_MAIN, NULL);
erts_proc_inc_refc(c_p);
- /* scheduler threads */
+
+ /* First flush later-ops on all scheduler threads */
erts_schedule_multi_misc_aux_work(0,
erts_no_schedulers,
- prep_setup_thr_debug_wait_completed,
+ init_thr_debug_wait_completed,
(void *) c_p);
-#ifdef ERTS_SMP
- /* aux_thread */
- erts_schedule_misc_aux_work(0,
- prep_setup_thr_debug_wait_completed,
- (void *) c_p);
-#endif
return 1;
}
return 0;
@@ -2224,13 +2319,13 @@ handle_reap_ports(ErtsAuxWorkData *awdp, erts_aint32_t aux_work, int waiting)
ERTS_PORT_SFLG_HALT);
erts_smp_atomic32_inc_nob(&erts_halt_progress);
if (!(state & (ERTS_PORT_SFLG_EXITING|ERTS_PORT_SFLG_CLOSING)))
- erts_deliver_port_exit(prt, prt->common.id, am_killed, 0);
+ erts_deliver_port_exit(prt, prt->common.id, am_killed, 0, 1);
}
erts_port_release(prt);
}
if (erts_smp_atomic32_dec_read_nob(&erts_halt_progress) == 0) {
- erl_exit_flush_async(erts_halt_code, "");
+ erts_flush_async_exit(erts_halt_code, "");
}
}
return aux_work & ~ERTS_SSI_AUX_WORK_REAP_PORTS;
@@ -2248,6 +2343,30 @@ handle_mseg_cache_check(ErtsAuxWorkData *awdp, erts_aint32_t aux_work, int waiti
#endif
+#ifdef ERTS_SMP
+
+static ERTS_INLINE erts_aint32_t
+handle_pending_exiters(ErtsAuxWorkData *awdp, erts_aint32_t aux_work, int waiting)
+{
+ ErtsProcList *pnd_xtrs;
+ ErtsRunQueue *rq;
+
+ rq = awdp->esdp->run_queue;
+ unset_aux_work_flags(awdp->ssi, ERTS_SSI_AUX_WORK_PENDING_EXITERS);
+
+ erts_smp_runq_lock(rq);
+ pnd_xtrs = rq->procs.pending_exiters;
+ rq->procs.pending_exiters = NULL;
+ erts_smp_runq_unlock(rq);
+
+ if (erts_proclist_fetch(&pnd_xtrs, NULL))
+ do_handle_pending_exiters(pnd_xtrs);
+
+ return aux_work & ~ERTS_SSI_AUX_WORK_PENDING_EXITERS;
+}
+
+#endif
+
static ERTS_INLINE erts_aint32_t
handle_setup_aux_work_timer(ErtsAuxWorkData *awdp, erts_aint32_t aux_work, int waiting)
{
@@ -2339,6 +2458,10 @@ handle_aux_work(ErtsAuxWorkData *awdp, erts_aint32_t orig_aux_work, int waiting)
HANDLE_AUX_WORK(ERTS_SSI_AUX_WORK_MISC,
handle_misc_aux_work);
+#ifdef ERTS_SMP
+ HANDLE_AUX_WORK(ERTS_SSI_AUX_WORK_PENDING_EXITERS,
+ handle_pending_exiters);
+#endif
HANDLE_AUX_WORK(ERTS_SSI_AUX_WORK_SET_TMO,
handle_setup_aux_work_timer);
@@ -2632,13 +2755,6 @@ sched_active(Uint no, ErtsRunQueue *rq)
profile_scheduler(make_small(no), am_active);
}
-static int ERTS_INLINE
-ongoing_multi_scheduling_block(void)
-{
- ERTS_SMP_LC_ASSERT(erts_lc_mtx_is_locked(&schdlr_sspnd.mtx));
- return schdlr_sspnd.msb.ongoing;
-}
-
static ERTS_INLINE void
empty_runq_aux(ErtsRunQueue *rq, Uint32 old_flags)
{
@@ -3025,8 +3141,10 @@ scheduler_wait(int *fcalls, ErtsSchedulerData *esdp, ErtsRunQueue *rq)
timeout_time = erts_check_next_timeout_time(esdp);
current_time = erts_get_monotonic_time(esdp);
do_timeout = (current_time >= timeout_time);
- } else
+ } else {
+ current_time = 0;
timeout_time = ERTS_MONOTONIC_TIME_MAX;
+ }
if (do_timeout) {
if (!thr_prgr_active) {
erts_thr_progress_active(esdp, thr_prgr_active = 1);
@@ -3136,6 +3254,7 @@ scheduler_wait(int *fcalls, ErtsSchedulerData *esdp, ErtsRunQueue *rq)
ERTS_MSACC_SET_STATE_CACHED_M(ERTS_MSACC_STATE_CHECK_IO);
ASSERT(!erts_port_task_have_outstanding_io_tasks());
+ LTTNG2(scheduler_poll, esdp->no, 1);
erl_sys_schedule(1); /* Might give us something to do */
ERTS_MSACC_POP_STATE_M();
@@ -3259,6 +3378,7 @@ scheduler_wait(int *fcalls, ErtsSchedulerData *esdp, ErtsRunQueue *rq)
ASSERT(!erts_port_task_have_outstanding_io_tasks());
ERTS_MSACC_SET_STATE_CACHED_M(ERTS_MSACC_STATE_CHECK_IO);
+ LTTNG2(scheduler_poll, esdp->no, 0);
erl_sys_schedule(0);
@@ -3333,7 +3453,8 @@ wake_scheduler(ErtsRunQueue *rq)
* so all code *should* handle this without having
* the lock on the run queue.
*/
- ERTS_SMP_LC_ASSERT(!erts_smp_lc_runq_is_locked(rq));
+ ERTS_SMP_LC_ASSERT(!erts_smp_lc_runq_is_locked(rq)
+ || ERTS_RUNQ_IX_IS_DIRTY(rq->ix));
ssi = rq->scheduler->ssi;
@@ -3747,7 +3868,7 @@ immigrate(ErtsRunQueue *c_rq, ErtsMigrationPath *mp)
prio = ERTS_PORT_PRIO_LEVEL;
break;
default:
- erl_exit(ERTS_ABORT_EXIT,
+ erts_exit(ERTS_ABORT_EXIT,
"%s:%d:%s(): Invalid immigrate queue mask",
__FILE__, __LINE__, __func__);
prio = 0;
@@ -3771,7 +3892,7 @@ immigrate(ErtsRunQueue *c_rq, ErtsMigrationPath *mp)
rq = erts_port_runq(prt);
if (rq) {
if (rq != c_rq)
- erl_exit(ERTS_ABORT_EXIT,
+ erts_exit(ERTS_ABORT_EXIT,
"%s:%d:%s(): Internal error",
__FILE__, __LINE__, __func__);
erts_enqueue_port(c_rq, prt);
@@ -3836,24 +3957,33 @@ static ERTS_INLINE void
resume_run_queue(ErtsRunQueue *rq)
{
int pix;
+ Uint32 oflgs;
erts_smp_runq_lock(rq);
- (void) ERTS_RUNQ_FLGS_READ_BSET(rq,
- (ERTS_RUNQ_FLG_OUT_OF_WORK
- | ERTS_RUNQ_FLG_HALFTIME_OUT_OF_WORK
- | ERTS_RUNQ_FLG_SUSPENDED),
- (ERTS_RUNQ_FLG_OUT_OF_WORK
- | ERTS_RUNQ_FLG_HALFTIME_OUT_OF_WORK));
+ oflgs = ERTS_RUNQ_FLGS_READ_BSET(rq,
+ (ERTS_RUNQ_FLG_OUT_OF_WORK
+ | ERTS_RUNQ_FLG_HALFTIME_OUT_OF_WORK
+ | ERTS_RUNQ_FLG_SUSPENDED),
+ (ERTS_RUNQ_FLG_OUT_OF_WORK
+ | ERTS_RUNQ_FLG_HALFTIME_OUT_OF_WORK));
+
+ if (oflgs & ERTS_RUNQ_FLG_SUSPENDED) {
+ erts_aint32_t len;
+
+ rq->check_balance_reds = ERTS_RUNQ_CALL_CHECK_BALANCE_REDS;
+ for (pix = 0; pix < ERTS_NO_PROC_PRIO_LEVELS; pix++) {
+ len = erts_smp_atomic32_read_dirty(&rq->procs.prio_info[pix].len);
+ rq->procs.prio_info[pix].max_len = len;
+ rq->procs.prio_info[pix].reds = 0;
+ }
+ len = erts_smp_atomic32_read_dirty(&rq->ports.info.len);
+ rq->ports.info.max_len = len;
+ rq->ports.info.reds = 0;
+ len = erts_smp_atomic32_read_dirty(&rq->len);
+ rq->max_len = len;
- rq->check_balance_reds = ERTS_RUNQ_CALL_CHECK_BALANCE_REDS;
- for (pix = 0; pix < ERTS_NO_PROC_PRIO_LEVELS; pix++) {
- rq->procs.prio_info[pix].max_len = 0;
- rq->procs.prio_info[pix].reds = 0;
}
- rq->ports.info.max_len = 0;
- rq->ports.info.reds = 0;
- rq->max_len = 0;
erts_smp_runq_unlock(rq);
@@ -3884,6 +4014,33 @@ schedule_bound_processes(ErtsRunQueue *rq,
}
}
+#ifdef ERTS_DIRTY_SCHEDULERS
+
+static ERTS_INLINE void
+clear_proc_dirty_queue_bit(Process *p, ErtsRunQueue *rq, int prio_bit)
+{
+#ifdef DEBUG
+ erts_aint32_t old;
+#endif
+ erts_aint32_t qb = prio_bit;
+ if (rq == ERTS_DIRTY_CPU_RUNQ)
+ qb <<= ERTS_PDSFLGS_IN_CPU_PRQ_MASK_OFFSET;
+ else {
+ ASSERT(rq == ERTS_DIRTY_IO_RUNQ);
+ qb <<= ERTS_PDSFLGS_IN_IO_PRQ_MASK_OFFSET;
+ }
+#ifdef DEBUG
+ old = (int)
+#else
+ (void)
+#endif
+ erts_smp_atomic32_read_band_mb(&p->dirty_state, ~qb);
+ ASSERT(old & qb);
+}
+
+#endif /* ERTS_DIRTY_SCHEDULERS */
+
+
static void
evacuate_run_queue(ErtsRunQueue *rq,
ErtsStuckBoundProcesses *sbpp)
@@ -3962,7 +4119,7 @@ evacuate_run_queue(ErtsRunQueue *rq,
prt_rq = erts_port_runq(prt);
if (prt_rq) {
if (prt_rq != to_rq)
- erl_exit(ERTS_ABORT_EXIT,
+ erts_exit(ERTS_ABORT_EXIT,
"%s:%d:%s() internal error\n",
__FILE__, __LINE__, __func__);
erts_enqueue_port(to_rq, prt);
@@ -4046,29 +4203,8 @@ evacuate_run_queue(ErtsRunQueue *rq,
}
#ifdef ERTS_DIRTY_SCHEDULERS
-
- if (ERTS_RUNQ_IX_IS_DIRTY(rq->ix)) {
- erts_aint32_t dqbit = qbit;
-#ifdef DEBUG
- erts_aint32_t old_dqbit;
-#endif
-
- if (rq == ERTS_DIRTY_CPU_RUNQ)
- dqbit <<= ERTS_PDSFLGS_IN_CPU_PRQ_MASK_OFFSET;
- else {
- ASSERT(rq == ERTS_DIRTY_IO_RUNQ);
- dqbit <<= ERTS_PDSFLGS_IN_IO_PRQ_MASK_OFFSET;
- }
-
-#ifdef DEBUG
- old_dqbit = (int)
-#else
- (void)
-#endif
- erts_smp_atomic32_read_band_mb(&real_proc->dirty_state,
- ~dqbit);
- ASSERT(old_dqbit & dqbit);
- }
+ if (ERTS_RUNQ_IX_IS_DIRTY(rq->ix))
+ clear_proc_dirty_queue_bit(real_proc, rq, qbit);
#endif
if (ERTS_PSFLG_BOUND & real_state) {
@@ -4207,7 +4343,7 @@ no_procs:
return 0;
else {
if (prt_rq != rq)
- erl_exit(ERTS_ABORT_EXIT,
+ erts_exit(ERTS_ABORT_EXIT,
"%s:%d:%s() internal error\n",
__FILE__, __LINE__, __func__);
*rq_lockedp = 1;
@@ -5558,7 +5694,8 @@ static void
init_scheduler_data(ErtsSchedulerData* esdp, int num,
ErtsSchedulerSleepInfo* ssi,
ErtsRunQueue* runq,
- char** daww_ptr, size_t daww_sz)
+ char** daww_ptr, size_t daww_sz,
+ Process *shadow_proc)
{
esdp->timer_wheel = NULL;
#ifdef ERTS_SMP
@@ -5582,6 +5719,15 @@ init_scheduler_data(ErtsSchedulerData* esdp, int num,
esdp->no = (Uint) num;
ERTS_DIRTY_SCHEDULER_NO(esdp) = 0;
}
+ esdp->dirty_shadow_process = shadow_proc;
+ if (shadow_proc) {
+ erts_init_empty_process(shadow_proc);
+ erts_smp_atomic32_init_nob(&shadow_proc->state,
+ (ERTS_PSFLG_ACTIVE
+ | ERTS_PSFLG_DIRTY_RUNNING
+ | ERTS_PSFLG_PROXY));
+ shadow_proc->static_flags = ERTS_STC_FLG_SHADOW_PROC;
+ }
#else
esdp->no = (Uint) num;
#endif
@@ -5632,6 +5778,9 @@ erts_init_scheduling(int no_schedulers, int no_schedulers_online
char *daww_ptr;
size_t daww_sz;
size_t size_runqs;
+#ifdef ERTS_SMP
+ erts_aint32_t set_schdlr_sspnd_change_flags;
+#endif
init_misc_op_list_alloc();
init_proc_sys_task_queues_alloc();
@@ -5830,31 +5979,41 @@ erts_init_scheduling(int no_schedulers, int no_schedulers_online
for (ix = 0; ix < n; ix++) {
ErtsSchedulerData *esdp = ERTS_SCHEDULER_IX(ix);
init_scheduler_data(esdp, ix+1, ERTS_SCHED_SLEEP_INFO_IX(ix),
- ERTS_RUNQ_IX(ix), &daww_ptr, daww_sz);
+ ERTS_RUNQ_IX(ix), &daww_ptr, daww_sz,
+ NULL);
}
#ifdef ERTS_DIRTY_SCHEDULERS
-#ifdef ERTS_SMP
- erts_aligned_dirty_cpu_scheduler_data =
- erts_alloc_permanent_cache_aligned(
- ERTS_ALC_T_SCHDLR_DATA,
- no_dirty_cpu_schedulers*sizeof(ErtsAlignedSchedulerData));
- for (ix = 0; ix < no_dirty_cpu_schedulers; ix++) {
- ErtsSchedulerData *esdp = ERTS_DIRTY_CPU_SCHEDULER_IX(ix);
- init_scheduler_data(esdp, ix+1, ERTS_DIRTY_CPU_SCHED_SLEEP_INFO_IX(ix),
- ERTS_DIRTY_CPU_RUNQ, NULL, 0);
- }
- erts_aligned_dirty_io_scheduler_data =
- erts_alloc_permanent_cache_aligned(
- ERTS_ALC_T_SCHDLR_DATA,
- no_dirty_io_schedulers*sizeof(ErtsAlignedSchedulerData));
- for (ix = 0; ix < no_dirty_io_schedulers; ix++) {
- ErtsSchedulerData *esdp = ERTS_DIRTY_IO_SCHEDULER_IX(ix);
- init_scheduler_data(esdp, ix+1, ERTS_DIRTY_IO_SCHED_SLEEP_INFO_IX(ix),
- ERTS_DIRTY_IO_RUNQ, NULL, 0);
+ {
+ int dirty_scheds = no_dirty_cpu_schedulers + no_dirty_io_schedulers;
+ int adspix = 0;
+ ErtsAlignedDirtyShadowProcess *adsp =
+ erts_alloc_permanent_cache_aligned(
+ ERTS_ALC_T_SCHDLR_DATA,
+ dirty_scheds * sizeof(ErtsAlignedDirtyShadowProcess));
+
+ erts_aligned_dirty_cpu_scheduler_data =
+ erts_alloc_permanent_cache_aligned(
+ ERTS_ALC_T_SCHDLR_DATA,
+ dirty_scheds * sizeof(ErtsAlignedSchedulerData));
+
+ erts_aligned_dirty_io_scheduler_data =
+ &erts_aligned_dirty_cpu_scheduler_data[no_dirty_cpu_schedulers];
+
+ for (ix = 0; ix < no_dirty_cpu_schedulers; ix++) {
+ ErtsSchedulerData *esdp = ERTS_DIRTY_CPU_SCHEDULER_IX(ix);
+ init_scheduler_data(esdp, ix+1, ERTS_DIRTY_CPU_SCHED_SLEEP_INFO_IX(ix),
+ ERTS_DIRTY_CPU_RUNQ, NULL, 0,
+ &adsp[adspix++].dsp);
+ }
+ for (ix = 0; ix < no_dirty_io_schedulers; ix++) {
+ ErtsSchedulerData *esdp = ERTS_DIRTY_IO_SCHEDULER_IX(ix);
+ init_scheduler_data(esdp, ix+1, ERTS_DIRTY_IO_SCHED_SLEEP_INFO_IX(ix),
+ ERTS_DIRTY_IO_RUNQ, NULL, 0,
+ &adsp[adspix++].dsp);
+ }
}
#endif
-#endif
init_misc_aux_work();
init_swtreq_alloc();
@@ -5869,25 +6028,6 @@ erts_init_scheduling(int no_schedulers, int no_schedulers_online
erts_alloc_permanent_cache_aligned(ERTS_ALC_T_SCHDLR_DATA,
sizeof(ErtsAuxWorkData));
- erts_smp_mtx_init(&schdlr_sspnd.mtx, "schdlr_sspnd");
- erts_smp_cnd_init(&schdlr_sspnd.cnd);
-
- erts_smp_atomic32_init_nob(&schdlr_sspnd.changing, 0);
- schdlr_sspnd.online = no_schedulers_online;
- schdlr_sspnd.curr_online = no_schedulers;
- schdlr_sspnd.msb.ongoing = 0;
- erts_smp_atomic32_init_nob(&schdlr_sspnd.active, no_schedulers);
-#ifdef ERTS_DIRTY_SCHEDULERS
- erts_smp_atomic32_init_nob(&schdlr_sspnd.dirty_cpu_changing, 0);
- schdlr_sspnd.dirty_cpu_online = no_dirty_cpu_schedulers_online;
- schdlr_sspnd.dirty_cpu_curr_online = no_dirty_cpu_schedulers;
- erts_smp_atomic32_init_nob(&schdlr_sspnd.dirty_cpu_active, no_dirty_cpu_schedulers);
- erts_smp_atomic32_init_nob(&schdlr_sspnd.dirty_io_changing, 0);
- schdlr_sspnd.dirty_io_online = no_dirty_io_schedulers;
- schdlr_sspnd.dirty_io_curr_online = no_dirty_io_schedulers;
- erts_smp_atomic32_init_nob(&schdlr_sspnd.dirty_io_active, no_dirty_io_schedulers);
-#endif
- schdlr_sspnd.msb.procs = NULL;
init_no_runqs(no_schedulers_online, no_schedulers_online);
balance_info.last_active_runqs = no_schedulers;
erts_smp_mtx_init(&balance_info.update_mtx, "migration_info_update");
@@ -5902,32 +6042,66 @@ erts_init_scheduling(int no_schedulers, int no_schedulers_online
init_migration_paths();
- if (no_schedulers_online < no_schedulers) {
+ init_scheduler_suspend();
+
+ set_schdlr_sspnd_change_flags = 0;
+
+ schdlr_sspnd_set_nscheds(&schdlr_sspnd.online,
+ ERTS_SCHED_NORMAL,
+ no_schedulers_online);
+ schdlr_sspnd_set_nscheds(&schdlr_sspnd.curr_online,
+ ERTS_SCHED_NORMAL,
+ no_schedulers);
+ schdlr_sspnd_set_nscheds(&schdlr_sspnd.active,
+ ERTS_SCHED_NORMAL,
+ no_schedulers);
+
+ if (no_schedulers_online != no_schedulers) {
+ ASSERT(no_schedulers_online < no_schedulers);
+ set_schdlr_sspnd_change_flags |= ERTS_SCHDLR_SSPND_CHNG_ONLN;
+ schdlr_sspnd.changer = am_init;
change_no_used_runqs(no_schedulers_online);
for (ix = no_schedulers_online; ix < erts_no_run_queues; ix++)
suspend_run_queue(ERTS_RUNQ_IX(ix));
}
- schdlr_sspnd.wait_curr_online = no_schedulers_online;
- schdlr_sspnd.curr_online *= 2; /* Boot strapping... */
- ERTS_SCHDLR_SSPND_CHNG_SET((ERTS_SCHDLR_SSPND_CHNG_ONLN
- | ERTS_SCHDLR_SSPND_CHNG_WAITER), 0);
#ifdef ERTS_DIRTY_SCHEDULERS
- schdlr_sspnd.dirty_cpu_wait_curr_online = no_dirty_cpu_schedulers_online;
- schdlr_sspnd.dirty_cpu_curr_online *= 2;
- ERTS_SCHDLR_SSPND_DIRTY_CPU_CHNG_SET((ERTS_SCHDLR_SSPND_CHNG_ONLN
- | ERTS_SCHDLR_SSPND_CHNG_WAITER), 0);
- for (ix = no_dirty_cpu_schedulers_online; ix < no_dirty_cpu_schedulers; ix++) {
- ErtsSchedulerData* esdp = ERTS_DIRTY_CPU_SCHEDULER_IX(ix);
- erts_smp_atomic32_read_bor_nob(&esdp->ssi->flags, ERTS_SSI_FLG_SUSPENDED);
+
+ schdlr_sspnd_set_nscheds(&schdlr_sspnd.online,
+ ERTS_SCHED_DIRTY_CPU,
+ no_dirty_cpu_schedulers_online);
+ schdlr_sspnd_set_nscheds(&schdlr_sspnd.curr_online,
+ ERTS_SCHED_DIRTY_CPU,
+ no_dirty_cpu_schedulers);
+ schdlr_sspnd_set_nscheds(&schdlr_sspnd.active,
+ ERTS_SCHED_DIRTY_CPU,
+ no_dirty_cpu_schedulers);
+
+ if (no_dirty_cpu_schedulers_online != no_dirty_cpu_schedulers) {
+ ASSERT(no_dirty_cpu_schedulers_online < no_dirty_cpu_schedulers);
+ set_schdlr_sspnd_change_flags |= ERTS_SCHDLR_SSPND_CHNG_DCPU_ONLN;
+ for (ix = no_dirty_cpu_schedulers_online; ix < no_dirty_cpu_schedulers; ix++) {
+ ErtsSchedulerData* esdp = ERTS_DIRTY_CPU_SCHEDULER_IX(ix);
+ erts_smp_atomic32_read_bor_nob(&esdp->ssi->flags, ERTS_SSI_FLG_SUSPENDED);
+ }
}
- schdlr_sspnd.dirty_io_wait_curr_online = no_dirty_io_schedulers;
- schdlr_sspnd.dirty_io_curr_online *= 2;
- ERTS_SCHDLR_SSPND_DIRTY_IO_CHNG_SET((ERTS_SCHDLR_SSPND_CHNG_ONLN
- | ERTS_SCHDLR_SSPND_CHNG_WAITER), 0);
+ schdlr_sspnd_set_nscheds(&schdlr_sspnd.online,
+ ERTS_SCHED_DIRTY_IO,
+ no_dirty_io_schedulers);
+ schdlr_sspnd_set_nscheds(&schdlr_sspnd.curr_online,
+ ERTS_SCHED_DIRTY_IO,
+ no_dirty_io_schedulers);
+ schdlr_sspnd_set_nscheds(&schdlr_sspnd.active,
+ ERTS_SCHED_DIRTY_IO,
+ no_dirty_io_schedulers);
+
#endif
+ if (set_schdlr_sspnd_change_flags)
+ erts_smp_atomic32_set_nob(&schdlr_sspnd.changing,
+ set_schdlr_sspnd_change_flags);
+
erts_smp_atomic32_init_nob(&doing_sys_schedule, 0);
init_misc_aux_work();
@@ -5942,11 +6116,9 @@ erts_init_scheduling(int no_schedulers, int no_schedulers_online
#endif
}
erts_no_schedulers = 1;
-#ifdef ERTS_DIRTY_SCHEDULERS
erts_no_dirty_cpu_schedulers = 0;
erts_no_dirty_io_schedulers = 0;
#endif
-#endif
erts_smp_atomic32_init_nob(&function_calls, 0);
@@ -6056,7 +6228,7 @@ check_dirty_enqueue_in_prio_queue(Process *c_p,
erts_aint32_t dact, max_qbit;
/* Termination should be done on an ordinary scheduler */
- if (actual & ERTS_PSFLG_EXITING) {
+ if ((*newp) & ERTS_PSFLG_EXITING) {
*newp &= ~ERTS_PSFLGS_DIRTY_WORK;
return ERTS_ENQUEUE_NORMAL_QUEUE;
}
@@ -6065,7 +6237,7 @@ check_dirty_enqueue_in_prio_queue(Process *c_p,
* If we have system tasks, we enqueue on ordinary run-queue
* and take care of those system tasks first.
*/
- if (actual & ERTS_PSFLG_ACTIVE_SYS)
+ if ((*newp) & ERTS_PSFLG_ACTIVE_SYS)
return ERTS_ENQUEUE_NORMAL_QUEUE;
dact = erts_smp_atomic32_read_mb(&c_p->dirty_state);
@@ -6245,23 +6417,29 @@ select_enqueue_run_queue(int enqueue, int enq_prio, Process *p, erts_aint32_t st
* schedule_out_process() return with c_rq locked.
*/
static ERTS_INLINE int
-schedule_out_process(ErtsRunQueue *c_rq, erts_aint32_t state, Process *p, Process *proxy)
+schedule_out_process(ErtsRunQueue *c_rq, erts_aint32_t state, Process *p,
+ Process *proxy, int is_normal_sched)
{
- erts_aint32_t a, e, n, enq_prio = -1;
+ erts_aint32_t a, e, n, enq_prio = -1, running_flgs;
int enqueue; /* < 0 -> use proxy */
ErtsRunQueue* runq;
+ if (is_normal_sched)
+ running_flgs = ERTS_PSFLG_RUNNING|ERTS_PSFLG_RUNNING_SYS;
+ else
+ running_flgs = ERTS_PSFLG_DIRTY_RUNNING|ERTS_PSFLG_DIRTY_RUNNING_SYS;
+
a = state;
while (1) {
n = e = a;
- ASSERT(a & (ERTS_PSFLG_RUNNING|ERTS_PSFLG_RUNNING_SYS));
+ ASSERT(a & running_flgs);
enqueue = ERTS_ENQUEUE_NOT;
- n &= ~(ERTS_PSFLG_RUNNING|ERTS_PSFLG_RUNNING_SYS);
- if (a & (ERTS_PSFLG_ACTIVE_SYS|ERTS_PSFLG_DIRTY_ACTIVE_SYS)
+ n &= ~running_flgs;
+ if ((a & (ERTS_PSFLG_ACTIVE_SYS|ERTS_PSFLG_DIRTY_ACTIVE_SYS))
|| (a & (ERTS_PSFLG_ACTIVE|ERTS_PSFLG_SUSPENDED)) == ERTS_PSFLG_ACTIVE) {
enqueue = check_enqueue_in_prio_queue(p, &enq_prio, &n, a);
}
@@ -6374,8 +6552,9 @@ change_proc_schedule_state(Process *p,
ErtsProcLocks locks)
{
/*
- * NOTE: ERTS_PSFLG_RUNNING, ERTS_PSFLG_RUNNING_SYS and
- * ERTS_PSFLG_ACTIVE_SYS are not allowed to be
+ * NOTE: ERTS_PSFLG_RUNNING, ERTS_PSFLG_RUNNING_SYS,
+ * ERTS_PSFLG_DIRTY_RUNNING, ERTS_PSFLG_DIRTY_RUNNING_SYS
+ * and ERTS_PSFLG_ACTIVE_SYS are not allowed to be
* altered by this function!
*/
erts_aint32_t a = *statep, n;
@@ -6389,9 +6568,13 @@ change_proc_schedule_state(Process *p,
ASSERT(!(a & ERTS_PSFLG_PROXY));
ASSERT((clear_state_flags & (ERTS_PSFLG_RUNNING
| ERTS_PSFLG_RUNNING_SYS
+ | ERTS_PSFLG_DIRTY_RUNNING
+ | ERTS_PSFLG_DIRTY_RUNNING_SYS
| ERTS_PSFLG_ACTIVE_SYS)) == 0);
ASSERT((set_state_flags & (ERTS_PSFLG_RUNNING
| ERTS_PSFLG_RUNNING_SYS
+ | ERTS_PSFLG_DIRTY_RUNNING
+ | ERTS_PSFLG_DIRTY_RUNNING_SYS
| ERTS_PSFLG_ACTIVE_SYS)) == 0);
if (lock_status)
@@ -6415,8 +6598,16 @@ change_proc_schedule_state(Process *p,
if ((n & (ERTS_PSFLG_SUSPENDED
| ERTS_PSFLG_RUNNING
| ERTS_PSFLG_RUNNING_SYS
+ | ERTS_PSFLG_DIRTY_RUNNING
+ | ERTS_PSFLG_DIRTY_RUNNING_SYS
| ERTS_PSFLG_IN_RUNQ
- | ERTS_PSFLG_ACTIVE)) == ERTS_PSFLG_ACTIVE) {
+ | ERTS_PSFLG_ACTIVE)) == ERTS_PSFLG_ACTIVE
+#ifdef ERTS_DIRTY_SCHEDULERS
+ || (n & (ERTS_PSFLG_RUNNING
+ | ERTS_PSFLG_RUNNING_SYS
+ | ERTS_PSFLG_EXITING)) == ERTS_PSFLG_EXITING
+#endif
+ ) {
/*
* Active and seemingly need to be enqueued, but
* process may be in a run queue via proxy, need
@@ -6440,7 +6631,9 @@ change_proc_schedule_state(Process *p,
| ERTS_PSFLG_ACTIVE)) == ERTS_PSFLG_ACTIVE)
&& (!(a & (ERTS_PSFLG_ACTIVE_SYS
| ERTS_PSFLG_RUNNING
- | ERTS_PSFLG_RUNNING_SYS)
+ | ERTS_PSFLG_RUNNING_SYS
+ | ERTS_PSFLG_DIRTY_RUNNING
+ | ERTS_PSFLG_DIRTY_RUNNING_SYS)
&& (!(a & ERTS_PSFLG_ACTIVE)
|| (a & ERTS_PSFLG_SUSPENDED))))) {
/* We activated a prevously inactive process */
@@ -6577,14 +6770,15 @@ schedule_process_sys_task(Process *p, erts_aint32_t prio, ErtsProcSysTask *st)
erts_aint32_t e;
n = e = a;
- if (a & ERTS_PSFLG_FREE) {
- res = 0;
+ if (a & ERTS_PSFLG_FREE)
goto cleanup; /* We don't want to schedule free processes... */
- }
enqueue = ERTS_ENQUEUE_NOT;
n |= ERTS_PSFLG_ACTIVE_SYS;
- if (!(a & (ERTS_PSFLG_RUNNING|ERTS_PSFLG_RUNNING_SYS)))
+ if (!(a & (ERTS_PSFLG_RUNNING
+ | ERTS_PSFLG_RUNNING_SYS
+ | ERTS_PSFLG_DIRTY_RUNNING
+ | ERTS_PSFLG_DIRTY_RUNNING_SYS)))
enqueue = check_enqueue_in_prio_queue(p, &enq_prio, &n, a);
a = erts_smp_atomic32_cmpxchg_mb(&p->state, n, e);
if (a == e)
@@ -6597,7 +6791,9 @@ schedule_process_sys_task(Process *p, erts_aint32_t prio, ErtsProcSysTask *st)
if (!(a & (ERTS_PSFLG_ACTIVE_SYS
| ERTS_PSFLG_RUNNING
- | ERTS_PSFLG_RUNNING_SYS))
+ | ERTS_PSFLG_RUNNING_SYS
+ | ERTS_PSFLG_DIRTY_RUNNING
+ | ERTS_PSFLG_DIRTY_RUNNING_SYS))
&& (!(a & ERTS_PSFLG_ACTIVE) || (a & ERTS_PSFLG_SUSPENDED))) {
/* We activated a prevously inactive process */
profile_runnable_proc(p, am_active);
@@ -6637,11 +6833,16 @@ suspend_process(Process *c_p, Process *p)
if (c_p == p) {
state = erts_smp_atomic32_read_bor_relb(&p->state,
ERTS_PSFLG_SUSPENDED);
- ASSERT(state & (ERTS_PSFLG_RUNNING|ERTS_PSFLG_RUNNING_SYS));
+ ASSERT(state & (ERTS_PSFLG_RUNNING
+ | ERTS_PSFLG_RUNNING_SYS
+ | ERTS_PSFLG_DIRTY_RUNNING
+ | ERTS_PSFLG_DIRTY_RUNNING_SYS));
suspended = (state & ERTS_PSFLG_SUSPENDED) ? -1: 1;
}
else {
- while (!(state & (ERTS_PSFLG_RUNNING|ERTS_PSFLG_EXITING))) {
+ while (!(state & (ERTS_PSFLG_RUNNING
+ | ERTS_PSFLG_DIRTY_RUNNING
+ | ERTS_PSFLG_EXITING))) {
erts_aint32_t n, e;
n = e = state;
@@ -6667,8 +6868,11 @@ suspend_process(Process *c_p, Process *p)
if ((state & (ERTS_PSFLG_ACTIVE
| ERTS_PSFLG_ACTIVE_SYS
+ | ERTS_PSFLG_DIRTY_ACTIVE_SYS
| ERTS_PSFLG_RUNNING
| ERTS_PSFLG_RUNNING_SYS
+ | ERTS_PSFLG_DIRTY_RUNNING
+ | ERTS_PSFLG_DIRTY_RUNNING_SYS
| ERTS_PSFLG_SUSPENDED)) == ERTS_PSFLG_ACTIVE) {
/* We made process inactive */
profile_runnable_proc(p, am_inactive);
@@ -6705,19 +6909,6 @@ resume_process(Process *p, ErtsProcLocks locks)
add2runq(enqueue, enq_prio, p, state, NULL);
}
-int
-erts_get_max_no_executing_schedulers(void)
-{
-#ifdef ERTS_SMP
- if (erts_smp_atomic32_read_nob(&schdlr_sspnd.changing))
- return (int) erts_no_schedulers;
- ERTS_THR_MEMORY_BARRIER;
- return (int) erts_smp_atomic32_read_nob(&schdlr_sspnd.active);
-#else
- return 1;
-#endif
-}
-
#ifdef ERTS_SMP
static void
@@ -6820,42 +7011,82 @@ sched_set_suspended_sleeptype(ErtsSchedulerSleepInfo *ssi)
}
}
-#ifdef ERTS_DIRTY_SCHEDULERS
+static void
+init_scheduler_suspend(void)
+{
+ erts_smp_mtx_init(&schdlr_sspnd.mtx, "schdlr_sspnd");
+ schdlr_sspnd.online = ERTS_SCHDLR_SSPND_MAKE_NSCHEDS_VAL(1, 0, 0);
+ schdlr_sspnd.curr_online = ERTS_SCHDLR_SSPND_MAKE_NSCHEDS_VAL(1, 0, 0);
+ schdlr_sspnd.active = ERTS_SCHDLR_SSPND_MAKE_NSCHEDS_VAL(1, 0, 0);
+ erts_smp_atomic32_init_nob(&schdlr_sspnd.changing, 0);
+ schdlr_sspnd.chngq = NULL;
+ schdlr_sspnd.changer = am_false;
+ schdlr_sspnd.nmsb.ongoing = 0;
+ schdlr_sspnd.nmsb.blckrs = NULL;
+ schdlr_sspnd.nmsb.chngq = NULL;
+ schdlr_sspnd.msb.ongoing = 0;
+ schdlr_sspnd.msb.blckrs = NULL;
+ schdlr_sspnd.msb.chngq = NULL;
+}
+
+typedef struct {
+ struct {
+ Eterm chngr;
+ Eterm nxt;
+ } onln;
+ struct {
+ ErtsProcList *chngrs;
+ } msb;
+} ErtsSchdlrSspndResume;
+
+static void
+schdlr_sspnd_resume_proc(Eterm pid)
+{
+ Process *p = erts_pid2proc(NULL, 0, pid, ERTS_PROC_LOCK_STATUS);
+ if (p) {
+ resume_process(p, ERTS_PROC_LOCK_STATUS);
+ erts_smp_proc_unlock(p, ERTS_PROC_LOCK_STATUS);
+ }
+}
+
+static ERTS_INLINE void
+schdlr_sspnd_resume_procs(ErtsSchedType sched_type,
+ ErtsSchdlrSspndResume *resume)
+{
+ if (is_internal_pid(resume->onln.chngr)) {
+ schdlr_sspnd_resume_proc(resume->onln.chngr);
+ resume->onln.chngr = NIL;
+ }
+ if (is_internal_pid(resume->onln.nxt)) {
+ schdlr_sspnd_resume_proc(resume->onln.nxt);
+ resume->onln.nxt = NIL;
+ }
+ while (resume->msb.chngrs) {
+ ErtsProcList *plp = resume->msb.chngrs;
+ resume->msb.chngrs = plp->next;
+ schdlr_sspnd_resume_proc(plp->pid);
+ proclist_destroy(plp);
+ }
+}
static void
suspend_scheduler(ErtsSchedulerData *esdp)
{
erts_aint32_t flgs;
erts_aint32_t changing;
-#ifdef ERTS_DIRTY_SCHEDULERS
- long no = (long) (ERTS_SCHEDULER_IS_DIRTY(esdp)
- ? ERTS_DIRTY_SCHEDULER_NO(esdp)
- : esdp->no);
-#else
- long no = (long) esdp->no;
-#endif
+ long no;
ErtsSchedulerSleepInfo *ssi = esdp->ssi;
- long active_schedulers;
int curr_online = 1;
- int wake = 0;
+ ErtsSchdlrSspndResume resume = {{NIL, NIL}, {NULL}};
erts_aint32_t aux_work;
int thr_prgr_active = 1;
ErtsStuckBoundProcesses sbp = {NULL, NULL};
- int* ss_onlinep;
- int* ss_curr_onlinep;
- int* ss_wait_curr_onlinep;
- long* ss_wait_activep;
- long ss_wait_active_target;
- erts_smp_atomic32_t* ss_changingp;
- erts_smp_atomic32_t* ss_activep;
+ ErtsSchedType sched_type;
+ erts_aint32_t online_flag;
/*
* Schedulers may be suspended in two different ways:
* - A scheduler may be suspended since it is not online.
- * All schedulers with scheduler ids greater than
- * schdlr_sspnd.online are suspended; same for dirty
- * schedulers and schdlr_sspnd.dirty_cpu_online and
- * schdlr_sspnd.dirty_io_online.
* - Multi scheduling is blocked. All schedulers except the
* scheduler with scheduler id 1 are suspended, and all
* dirty CPU and dirty I/O schedulers are suspended.
@@ -6863,27 +7094,43 @@ suspend_scheduler(ErtsSchedulerData *esdp)
* Regardless of why a scheduler is suspended, it ends up here.
*/
- ASSERT(ERTS_SCHEDULER_IS_DIRTY(esdp) || no != 1);
-
#ifdef ERTS_DIRTY_SCHEDULERS
if (ERTS_SCHEDULER_IS_DIRTY(esdp)) {
+ no = ERTS_DIRTY_SCHEDULER_NO(esdp);
+ if (ERTS_RUNQ_IS_DIRTY_CPU_RUNQ(esdp->run_queue)) {
+ online_flag = ERTS_SCHDLR_SSPND_CHNG_DCPU_ONLN;
+ sched_type = ERTS_SCHED_DIRTY_CPU;
+ }
+ else {
+ online_flag = 0;
+ sched_type = ERTS_SCHED_DIRTY_IO;
+ }
+ }
+ else
+#endif
+ {
+ online_flag = ERTS_SCHDLR_SSPND_CHNG_ONLN;
+ no = esdp->no;
+ sched_type = ERTS_SCHED_NORMAL;
+ }
+
+ ASSERT(sched_type != ERTS_SCHED_NORMAL || no != 1);
+
+ if (sched_type != ERTS_SCHED_NORMAL) {
if (erts_smp_mtx_trylock(&schdlr_sspnd.mtx) == EBUSY) {
erts_smp_runq_unlock(esdp->run_queue);
erts_smp_mtx_lock(&schdlr_sspnd.mtx);
erts_smp_runq_lock(esdp->run_queue);
}
- if (ongoing_multi_scheduling_block())
+ if (schdlr_sspnd.msb.ongoing)
evacuate_run_queue(esdp->run_queue, &sbp);
- } else
-#endif
+ erts_smp_runq_unlock(esdp->run_queue);
+ }
+ else {
evacuate_run_queue(esdp->run_queue, &sbp);
- erts_smp_runq_unlock(esdp->run_queue);
+ erts_smp_runq_unlock(esdp->run_queue);
-#ifdef ERTS_DIRTY_SCHEDULERS
- if (!ERTS_SCHEDULER_IS_DIRTY(esdp))
-#endif
- {
erts_sched_check_cpu_bind_prep_suspend(esdp);
if (erts_system_profile_flags.scheduler)
@@ -6897,318 +7144,115 @@ suspend_scheduler(ErtsSchedulerData *esdp)
flgs = sched_prep_spin_suspended(ssi, ERTS_SSI_FLG_SUSPENDED);
if (flgs & ERTS_SSI_FLG_SUSPENDED) {
-#ifdef ERTS_DIRTY_SCHEDULERS
- if (ERTS_SCHEDULER_IS_DIRTY(esdp)) {
- if (ERTS_RUNQ_IS_DIRTY_CPU_RUNQ(esdp->run_queue)) {
- active_schedulers = erts_smp_atomic32_dec_read_nob(&schdlr_sspnd.dirty_cpu_active);
- ASSERT(active_schedulers >= 0);
- changing = erts_smp_atomic32_read_nob(&schdlr_sspnd.dirty_cpu_changing);
- ss_onlinep = &schdlr_sspnd.dirty_cpu_online;
- ss_curr_onlinep = &schdlr_sspnd.dirty_cpu_curr_online;
- ss_wait_curr_onlinep = &schdlr_sspnd.dirty_cpu_wait_curr_online;
- ss_changingp = &schdlr_sspnd.dirty_cpu_changing;
- ss_wait_activep = &schdlr_sspnd.msb.dirty_cpu_wait_active;
- ss_activep = &schdlr_sspnd.dirty_cpu_active;
- } else {
- active_schedulers = erts_smp_atomic32_dec_read_nob(&schdlr_sspnd.dirty_io_active);
- ASSERT(active_schedulers >= 0);
- changing = erts_smp_atomic32_read_nob(&schdlr_sspnd.dirty_io_changing);
- ss_onlinep = &schdlr_sspnd.dirty_io_online;
- ss_curr_onlinep = &schdlr_sspnd.dirty_io_curr_online;
- ss_wait_curr_onlinep = &schdlr_sspnd.dirty_io_wait_curr_online;
- ss_changingp = &schdlr_sspnd.dirty_io_changing;
- ss_wait_activep = &schdlr_sspnd.msb.dirty_io_wait_active;
- ss_activep = &schdlr_sspnd.dirty_io_active;
- }
- ss_wait_active_target = 0;
- }
- else
-#endif
- {
- active_schedulers = erts_smp_atomic32_dec_read_nob(&schdlr_sspnd.active);
- ASSERT(active_schedulers >= 1);
- changing = erts_smp_atomic32_read_nob(&schdlr_sspnd.changing);
- ss_onlinep = &schdlr_sspnd.online;
- ss_curr_onlinep = &schdlr_sspnd.curr_online;
- ss_wait_curr_onlinep = &schdlr_sspnd.wait_curr_online;
- ss_changingp = &schdlr_sspnd.changing;
- ss_wait_activep = &schdlr_sspnd.msb.wait_active;
- ss_activep = &schdlr_sspnd.active;
- ss_wait_active_target = 1;
- }
- if (changing & ERTS_SCHDLR_SSPND_CHNG_MSB) {
- if (active_schedulers == *ss_wait_activep)
- wake = 1;
- if (active_schedulers == ss_wait_active_target) {
- changing = erts_smp_atomic32_read_band_nob(ss_changingp,
- ~ERTS_SCHDLR_SSPND_CHNG_MSB);
- changing &= ~ERTS_SCHDLR_SSPND_CHNG_MSB;
- }
- }
+ schdlr_sspnd_dec_nscheds(&schdlr_sspnd.active, sched_type);
- while (1) {
- if (changing & ERTS_SCHDLR_SSPND_CHNG_ONLN) {
- int changed = 0;
- if (no > *ss_onlinep && curr_online) {
- (*ss_curr_onlinep)--;
- curr_online = 0;
- changed = 1;
- }
- else if (no <= *ss_onlinep && !curr_online) {
- (*ss_curr_onlinep)++;
- curr_online = 1;
- changed = 1;
- }
- if (changed
- && *ss_curr_onlinep == *ss_wait_curr_onlinep)
- wake = 1;
- if (*ss_onlinep == *ss_curr_onlinep) {
- changing = erts_smp_atomic32_read_band_nob(ss_changingp,
- ~ERTS_SCHDLR_SSPND_CHNG_ONLN);
- changing &= ~ERTS_SCHDLR_SSPND_CHNG_ONLN;
- }
- }
-
- if (wake) {
- erts_smp_cnd_signal(&schdlr_sspnd.cnd);
- wake = 0;
- }
-
- if (curr_online && !ongoing_multi_scheduling_block()) {
- flgs = erts_smp_atomic32_read_acqb(&ssi->flags);
- if (!(flgs & ERTS_SSI_FLG_SUSPENDED))
- break;
- }
- erts_smp_mtx_unlock(&schdlr_sspnd.mtx);
+ ASSERT(schdlr_sspnd_get_nscheds(&schdlr_sspnd.active,
+ ERTS_SCHED_NORMAL) >= 1);
- while (1) {
- erts_aint32_t qmask;
- erts_aint32_t flgs;
+ changing = erts_smp_atomic32_read_nob(&schdlr_sspnd.changing);
- qmask = (ERTS_RUNQ_FLGS_GET(esdp->run_queue)
- & ERTS_RUNQ_FLGS_QMASK);
- aux_work = erts_atomic32_read_acqb(&ssi->aux_work);
- if (aux_work|qmask) {
- if (!ERTS_SCHEDULER_IS_DIRTY(esdp)) {
- if (!thr_prgr_active) {
- erts_thr_progress_active(esdp, thr_prgr_active = 1);
- sched_wall_time_change(esdp, 1);
- }
- if (aux_work)
- aux_work = handle_aux_work(&esdp->aux_work_data,
- aux_work,
- 1);
+ while (1) {
- if (aux_work && erts_thr_progress_update(esdp))
- erts_thr_progress_leader_update(esdp);
+ if (changing & (ERTS_SCHDLR_SSPND_CHNG_NMSB
+ | ERTS_SCHDLR_SSPND_CHNG_MSB)) {
+ int i = 0;
+ ErtsMultiSchedulingBlock *msb[3] = {0};
+ if (changing & ERTS_SCHDLR_SSPND_CHNG_NMSB)
+ msb[i++] = &schdlr_sspnd.nmsb;
+ if (changing & ERTS_SCHDLR_SSPND_CHNG_MSB)
+ msb[i++] = &schdlr_sspnd.msb;
+
+ for (i = 0; msb[i]; i++) {
+ erts_aint32_t clr_flg = 0;
+
+ if (msb[i] == &schdlr_sspnd.nmsb
+ && schdlr_sspnd_get_nscheds(&schdlr_sspnd.active,
+ ERTS_SCHED_NORMAL) == 1) {
+ clr_flg = ERTS_SCHDLR_SSPND_CHNG_NMSB;
}
- if (qmask) {
-#ifdef ERTS_DIRTY_SCHEDULERS
- if (ERTS_SCHEDULER_IS_DIRTY(esdp)) {
- erts_smp_mtx_lock(&schdlr_sspnd.mtx);
- erts_smp_runq_lock(esdp->run_queue);
- if (ongoing_multi_scheduling_block())
- evacuate_run_queue(esdp->run_queue, &sbp);
- erts_smp_runq_unlock(esdp->run_queue);
- erts_smp_mtx_unlock(&schdlr_sspnd.mtx);
- } else
-#endif
- {
- erts_smp_runq_lock(esdp->run_queue);
- evacuate_run_queue(esdp->run_queue, &sbp);
- erts_smp_runq_unlock(esdp->run_queue);
- }
- }
- }
-
- if (!aux_work) {
-#ifdef ERTS_DIRTY_SCHEDULERS
- if (!ERTS_SCHEDULER_IS_DIRTY(esdp))
-#endif
- {
- if (thr_prgr_active) {
- erts_thr_progress_active(esdp, thr_prgr_active = 0);
- sched_wall_time_change(esdp, 0);
- }
- erts_thr_progress_prepare_wait(esdp);
+ else if (schdlr_sspnd.active
+ == ERTS_SCHDLR_SSPND_MAKE_NSCHEDS_VAL(1, 0, 0)) {
+ clr_flg = ERTS_SCHDLR_SSPND_CHNG_MSB;
}
- flgs = sched_spin_suspended(ssi,
- ERTS_SCHED_SUSPEND_SLEEP_SPINCOUNT);
- if (flgs == (ERTS_SSI_FLG_SLEEPING
- | ERTS_SSI_FLG_WAITING
- | ERTS_SSI_FLG_SUSPENDED)) {
- flgs = sched_set_suspended_sleeptype(ssi);
- if (flgs == (ERTS_SSI_FLG_SLEEPING
- | ERTS_SSI_FLG_TSE_SLEEPING
- | ERTS_SSI_FLG_WAITING
- | ERTS_SSI_FLG_SUSPENDED)) {
- int res;
- do {
- res = erts_tse_twait(ssi->event, -1);
- } while (res == EINTR);
+ if (clr_flg) {
+ ErtsProcList *plp, *end_plp;
+ changing = erts_smp_atomic32_read_band_nob(&schdlr_sspnd.changing,
+ ~clr_flg);
+ changing &= ~clr_flg;
+ (void) erts_proclist_fetch(&msb[i]->chngq, &end_plp);
+ /* resume processes that initiated the multi scheduling block... */
+ plp = msb[i]->chngq;
+ while (plp) {
+ erts_proclist_store_last(&msb[i]->blckrs,
+ proclist_copy(plp));
+ plp = plp->next;
}
+ if (end_plp)
+ end_plp->next = resume.msb.chngrs;
+ resume.msb.chngrs = msb[i]->chngq;
+ msb[i]->chngq = NULL;
}
-#ifdef ERTS_DIRTY_SCHEDULERS
- if (!ERTS_SCHEDULER_IS_DIRTY(esdp))
-#endif
- erts_thr_progress_finalize_wait(esdp);
}
-
- flgs = sched_prep_spin_suspended(ssi, (ERTS_SSI_FLG_WAITING
- | ERTS_SSI_FLG_SUSPENDED));
- if (!(flgs & ERTS_SSI_FLG_SUSPENDED))
- break;
- changing = erts_smp_atomic32_read_nob(ss_changingp);
- if (changing & ~ERTS_SCHDLR_SSPND_CHNG_WAITER)
- break;
}
- erts_smp_mtx_lock(&schdlr_sspnd.mtx);
- changing = erts_smp_atomic32_read_nob(ss_changingp);
- }
-
- active_schedulers = erts_smp_atomic32_inc_read_nob(ss_activep);
- changing = erts_smp_atomic32_read_nob(ss_changingp);
- if ((changing & ERTS_SCHDLR_SSPND_CHNG_MSB)
- && *ss_onlinep == active_schedulers) {
- erts_smp_atomic32_read_band_nob(ss_changingp,
- ~ERTS_SCHDLR_SSPND_CHNG_MSB);
- }
-
-#ifdef ERTS_DIRTY_SCHEDULERS
- if (!ERTS_SCHEDULER_IS_DIRTY(esdp))
-#endif
- ASSERT(no <= *ss_onlinep);
- ASSERT(!ongoing_multi_scheduling_block());
-
- }
-
- erts_smp_mtx_unlock(&schdlr_sspnd.mtx);
-
- ASSERT(curr_online);
-
-#ifdef ERTS_DIRTY_SCHEDULERS
- if (!ERTS_SCHEDULER_IS_DIRTY(esdp))
-#endif
- {
- if (erts_system_profile_flags.scheduler)
- profile_scheduler(make_small(esdp->no), am_active);
-
- if (!thr_prgr_active) {
- erts_thr_progress_active(esdp, thr_prgr_active = 1);
- sched_wall_time_change(esdp, 1);
- }
- }
-
- if (!ERTS_SCHEDULER_IS_DIRTY(esdp))
- (void) erts_get_monotonic_time(esdp);
- erts_smp_runq_lock(esdp->run_queue);
- non_empty_runq(esdp->run_queue);
-
-#ifdef ERTS_DIRTY_SCHEDULERS
- if (!ERTS_SCHEDULER_IS_DIRTY(esdp))
-#endif
- {
- schedule_bound_processes(esdp->run_queue, &sbp);
-
- erts_sched_check_cpu_bind_post_suspend(esdp);
- }
-}
-
-#else /* !ERTS_DIRTY_SCHEDULERS */
-
-static void
-suspend_scheduler(ErtsSchedulerData *esdp)
-{
- erts_aint32_t flgs;
- erts_aint32_t changing;
- long no = (long) esdp->no;
- ErtsSchedulerSleepInfo *ssi = esdp->ssi;
- long active_schedulers;
- int curr_online = 1;
- int wake = 0;
- erts_aint32_t aux_work;
- int thr_prgr_active = 1;
- ErtsStuckBoundProcesses sbp = {NULL, NULL};
-
- /*
- * Schedulers may be suspended in two different ways:
- * - A scheduler may be suspended since it is not online.
- * All schedulers with scheduler ids greater than
- * schdlr_sspnd.online are suspended.
- * - Multi scheduling is blocked. All schedulers except the
- * scheduler with scheduler id 1 are suspended.
- *
- * Regardless of why a scheduler is suspended, it ends up here.
- */
-
- ASSERT(no != 1);
-
- evacuate_run_queue(esdp->run_queue, &sbp);
-
- erts_smp_runq_unlock(esdp->run_queue);
-
- erts_sched_check_cpu_bind_prep_suspend(esdp);
-
- if (erts_system_profile_flags.scheduler)
- profile_scheduler(make_small(esdp->no), am_inactive);
-
- sched_wall_time_change(esdp, 0);
-
- erts_smp_mtx_lock(&schdlr_sspnd.mtx);
-
- flgs = sched_prep_spin_suspended(ssi, ERTS_SSI_FLG_SUSPENDED);
- if (flgs & ERTS_SSI_FLG_SUSPENDED) {
-
- active_schedulers = erts_smp_atomic32_dec_read_nob(&schdlr_sspnd.active);
- ASSERT(active_schedulers >= 1);
- changing = erts_smp_atomic32_read_nob(&schdlr_sspnd.changing);
- if (changing & ERTS_SCHDLR_SSPND_CHNG_MSB) {
- if (active_schedulers == schdlr_sspnd.msb.wait_active)
- wake = 1;
- if (active_schedulers == 1) {
- changing = erts_smp_atomic32_read_band_nob(&schdlr_sspnd.changing,
- ~ERTS_SCHDLR_SSPND_CHNG_MSB);
- changing &= ~ERTS_SCHDLR_SSPND_CHNG_MSB;
- }
- }
-
- while (1) {
- if (changing & ERTS_SCHDLR_SSPND_CHNG_ONLN) {
+ if (changing & online_flag) {
int changed = 0;
- if (no > schdlr_sspnd.online && curr_online) {
- schdlr_sspnd.curr_online--;
+ Uint32 st_online;
+
+ st_online = schdlr_sspnd_get_nscheds(&schdlr_sspnd.online,
+ sched_type);
+ if (no > st_online && curr_online) {
+ schdlr_sspnd_dec_nscheds(&schdlr_sspnd.curr_online,
+ sched_type);
curr_online = 0;
changed = 1;
}
- else if (no <= schdlr_sspnd.online && !curr_online) {
- schdlr_sspnd.curr_online++;
+ else if (no <= st_online && !curr_online) {
+ schdlr_sspnd_inc_nscheds(&schdlr_sspnd.curr_online,
+ sched_type);
curr_online = 1;
changed = 1;
}
if (changed
- && schdlr_sspnd.curr_online == schdlr_sspnd.wait_curr_online)
- wake = 1;
- if (schdlr_sspnd.online == schdlr_sspnd.curr_online) {
+ && (schdlr_sspnd_get_nscheds(&schdlr_sspnd.online,
+ sched_type)
+ == schdlr_sspnd_get_nscheds(&schdlr_sspnd.curr_online,
+ sched_type))) {
+ ErtsProcList *plp;
changing = erts_smp_atomic32_read_band_nob(&schdlr_sspnd.changing,
- ~ERTS_SCHDLR_SSPND_CHNG_ONLN);
- changing &= ~ERTS_SCHDLR_SSPND_CHNG_ONLN;
+ ~online_flag);
+ changing &= ~online_flag;
+ if (sched_type == ERTS_SCHED_NORMAL) {
+ ASSERT(is_internal_pid(schdlr_sspnd.changer)
+ || schdlr_sspnd.changer == am_init);
+ /* resume process that initiated this change... */
+ resume.onln.chngr = schdlr_sspnd.changer;
+ plp = erts_proclist_peek_first(schdlr_sspnd.chngq);
+ if (!plp)
+ schdlr_sspnd.changer = am_false;
+ else {
+ schdlr_sspnd.changer = am_true; /* change right in transit */
+ /* resume process that is queued for next change... */
+ resume.onln.nxt = plp->pid;
+ ASSERT(is_internal_pid(resume.onln.nxt));
+ }
+ }
}
}
- if (wake) {
- erts_smp_cnd_signal(&schdlr_sspnd.cnd);
- wake = 0;
- }
-
- if (curr_online && !ongoing_multi_scheduling_block()) {
+ if (curr_online
+ && (sched_type == ERTS_SCHED_NORMAL
+ ? !(schdlr_sspnd.msb.ongoing|schdlr_sspnd.nmsb.ongoing)
+ : !schdlr_sspnd.msb.ongoing)) {
flgs = erts_smp_atomic32_read_acqb(&ssi->flags);
if (!(flgs & ERTS_SSI_FLG_SUSPENDED))
break;
}
erts_smp_mtx_unlock(&schdlr_sspnd.mtx);
+ schdlr_sspnd_resume_procs(sched_type, &resume);
+
while (1) {
ErtsMonotonicTime current_time;
erts_aint32_t qmask;
@@ -7216,9 +7260,23 @@ suspend_scheduler(ErtsSchedulerData *esdp)
qmask = (ERTS_RUNQ_FLGS_GET(esdp->run_queue)
& ERTS_RUNQ_FLGS_QMASK);
- aux_work = erts_atomic32_read_acqb(&ssi->aux_work);
- if (aux_work|qmask) {
- if (!ERTS_SCHEDULER_IS_DIRTY(esdp)) {
+
+ if (sched_type != ERTS_SCHED_NORMAL) {
+ if (qmask) {
+ erts_smp_mtx_lock(&schdlr_sspnd.mtx);
+ erts_smp_runq_lock(esdp->run_queue);
+ if (schdlr_sspnd.msb.ongoing)
+ evacuate_run_queue(esdp->run_queue, &sbp);
+ erts_smp_runq_unlock(esdp->run_queue);
+ erts_smp_mtx_unlock(&schdlr_sspnd.mtx);
+ }
+ aux_work = 0;
+ }
+ else {
+
+ aux_work = erts_atomic32_read_acqb(&ssi->aux_work);
+
+ if (aux_work|qmask) {
if (!thr_prgr_active) {
erts_thr_progress_active(esdp, thr_prgr_active = 1);
sched_wall_time_change(esdp, 1);
@@ -7227,45 +7285,53 @@ suspend_scheduler(ErtsSchedulerData *esdp)
aux_work = handle_aux_work(&esdp->aux_work_data,
aux_work,
1);
+
if (aux_work && erts_thr_progress_update(esdp))
erts_thr_progress_leader_update(esdp);
+ if (qmask) {
+ erts_smp_runq_lock(esdp->run_queue);
+ evacuate_run_queue(esdp->run_queue, &sbp);
+ erts_smp_runq_unlock(esdp->run_queue);
+ }
}
- if (qmask) {
- erts_smp_runq_lock(esdp->run_queue);
- evacuate_run_queue(esdp->run_queue, &sbp);
- erts_smp_runq_unlock(esdp->run_queue);
- }
+
}
if (aux_work) {
- if (!ERTS_SCHEDULER_IS_DIRTY(esdp)) {
- current_time = erts_get_monotonic_time(esdp);
- if (current_time >= erts_next_timeout_time(esdp->next_tmo_ref)) {
- if (!thr_prgr_active) {
- erts_thr_progress_active(esdp, thr_prgr_active = 1);
- sched_wall_time_change(esdp, 1);
- }
- erts_bump_timers(esdp->timer_wheel, current_time);
+ ASSERT(sched_type == ERTS_SCHED_NORMAL);
+ current_time = erts_get_monotonic_time(esdp);
+ if (current_time >= erts_next_timeout_time(esdp->next_tmo_ref)) {
+ if (!thr_prgr_active) {
+ erts_thr_progress_active(esdp, thr_prgr_active = 1);
+ sched_wall_time_change(esdp, 1);
}
+ erts_bump_timers(esdp->timer_wheel, current_time);
}
}
else {
ErtsMonotonicTime timeout_time;
- int do_timeout = 0;
- if (!ERTS_SCHEDULER_IS_DIRTY(esdp)) {
+ int do_timeout;
+
+ if (sched_type == ERTS_SCHED_NORMAL) {
timeout_time = erts_check_next_timeout_time(esdp);
current_time = erts_get_monotonic_time(esdp);
do_timeout = (current_time >= timeout_time);
- } else
+ }
+ else {
timeout_time = ERTS_MONOTONIC_TIME_MAX;
+ current_time = 0;
+ do_timeout = 0;
+ }
+
if (do_timeout) {
+ ASSERT(sched_type == ERTS_SCHED_NORMAL);
if (!thr_prgr_active) {
erts_thr_progress_active(esdp, thr_prgr_active = 1);
sched_wall_time_change(esdp, 1);
}
}
else {
- if (!ERTS_SCHEDULER_IS_DIRTY(esdp)) {
+ if (sched_type == ERTS_SCHED_NORMAL) {
if (thr_prgr_active) {
erts_thr_progress_active(esdp, thr_prgr_active = 0);
sched_wall_time_change(esdp, 0);
@@ -7284,30 +7350,39 @@ suspend_scheduler(ErtsSchedulerData *esdp)
| ERTS_SSI_FLG_SUSPENDED)) {
int res;
- current_time = ERTS_SCHEDULER_IS_DIRTY(esdp) ? 0 :
- erts_get_monotonic_time(esdp);
+ if (sched_type == ERTS_SCHED_NORMAL)
+ current_time = erts_get_monotonic_time(esdp);
+ else
+ current_time = 0;
+
do {
Sint64 timeout;
if (current_time >= timeout_time)
break;
- if (!ERTS_SCHEDULER_IS_DIRTY(esdp)) {
+ if (sched_type != ERTS_SCHED_NORMAL)
+ timeout = -1;
+ else
timeout = ERTS_MONOTONIC_TO_NSEC(timeout_time
- current_time
- 1) + 1;
- } else
- timeout = -1;
res = erts_tse_twait(ssi->event, timeout);
- current_time = ERTS_SCHEDULER_IS_DIRTY(esdp) ? 0 :
- erts_get_monotonic_time(esdp);
+
+ if (sched_type == ERTS_SCHED_NORMAL)
+ current_time = erts_get_monotonic_time(esdp);
+ else
+ current_time = 0;
+
} while (res == EINTR);
}
}
- if (!ERTS_SCHEDULER_IS_DIRTY(esdp))
+ if (sched_type == ERTS_SCHED_NORMAL)
erts_thr_progress_finalize_wait(esdp);
}
- if (!ERTS_SCHEDULER_IS_DIRTY(esdp) && current_time >= timeout_time)
+ if (current_time >= timeout_time) {
+ ASSERT(sched_type == ERTS_SCHED_NORMAL);
erts_bump_timers(esdp->timer_wheel, current_time);
+ }
}
flgs = sched_prep_spin_suspended(ssi, (ERTS_SSI_FLG_WAITING
@@ -7315,7 +7390,7 @@ suspend_scheduler(ErtsSchedulerData *esdp)
if (!(flgs & ERTS_SSI_FLG_SUSPENDED))
break;
changing = erts_smp_atomic32_read_nob(&schdlr_sspnd.changing);
- if (changing & ~ERTS_SCHDLR_SSPND_CHNG_WAITER)
+ if (changing)
break;
}
@@ -7323,612 +7398,496 @@ suspend_scheduler(ErtsSchedulerData *esdp)
changing = erts_smp_atomic32_read_nob(&schdlr_sspnd.changing);
}
- active_schedulers = erts_smp_atomic32_inc_read_nob(&schdlr_sspnd.active);
+ schdlr_sspnd_inc_nscheds(&schdlr_sspnd.active, sched_type);
changing = erts_smp_atomic32_read_nob(&schdlr_sspnd.changing);
if ((changing & ERTS_SCHDLR_SSPND_CHNG_MSB)
- && schdlr_sspnd.online == active_schedulers) {
+ && schdlr_sspnd.online == schdlr_sspnd.active) {
erts_smp_atomic32_read_band_nob(&schdlr_sspnd.changing,
~ERTS_SCHDLR_SSPND_CHNG_MSB);
}
- ASSERT(no <= schdlr_sspnd.online);
- ASSERT(!ongoing_multi_scheduling_block());
-
+ ASSERT(no <= schdlr_sspnd_get_nscheds(&schdlr_sspnd.online, sched_type));
+ ASSERT((sched_type == ERTS_SCHED_NORMAL
+ ? !(schdlr_sspnd.msb.ongoing|schdlr_sspnd.nmsb.ongoing)
+ : !schdlr_sspnd.msb.ongoing));
}
erts_smp_mtx_unlock(&schdlr_sspnd.mtx);
+ ASSERT(!resume.msb.chngrs);
+ schdlr_sspnd_resume_procs(sched_type, &resume);
+
ASSERT(curr_online);
- if (erts_system_profile_flags.scheduler)
- profile_scheduler(make_small(esdp->no), am_active);
+ if (!ERTS_SCHEDULER_IS_DIRTY(esdp)) {
+ if (erts_system_profile_flags.scheduler)
+ profile_scheduler(make_small(esdp->no), am_active);
- if (!thr_prgr_active) {
- erts_thr_progress_active(esdp, thr_prgr_active = 1);
- sched_wall_time_change(esdp, 1);
+ if (!thr_prgr_active) {
+ erts_thr_progress_active(esdp, thr_prgr_active = 1);
+ sched_wall_time_change(esdp, 1);
+ }
}
+ if (sched_type == ERTS_SCHED_NORMAL)
+ (void) erts_get_monotonic_time(esdp);
erts_smp_runq_lock(esdp->run_queue);
non_empty_runq(esdp->run_queue);
- schedule_bound_processes(esdp->run_queue, &sbp);
+ if (sched_type == ERTS_SCHED_NORMAL) {
+ schedule_bound_processes(esdp->run_queue, &sbp);
- erts_sched_check_cpu_bind_post_suspend(esdp);
+ erts_sched_check_cpu_bind_post_suspend(esdp);
+ }
}
-#endif
-
-ErtsSchedSuspendResult
+void
erts_schedulers_state(Uint *total,
Uint *online,
Uint *active,
Uint *dirty_cpu,
Uint *dirty_cpu_online,
+ Uint *dirty_cpu_active,
Uint *dirty_io,
- int yield_allowed)
+ Uint *dirty_io_active)
{
- int res = ERTS_SCHDLR_SSPND_EINVAL;
- erts_aint32_t changing;
- erts_smp_mtx_lock(&schdlr_sspnd.mtx);
- changing = erts_smp_atomic32_read_nob(&schdlr_sspnd.changing);
-#ifdef ERTS_DIRTY_SCHEDULERS
- changing |= (erts_smp_atomic32_read_nob(&schdlr_sspnd.dirty_cpu_changing)
- | erts_smp_atomic32_read_nob(&schdlr_sspnd.dirty_io_changing));
-#endif
- if (yield_allowed && (changing & ~ERTS_SCHDLR_SSPND_CHNG_WAITER))
- res = ERTS_SCHDLR_SSPND_YIELD_RESTART;
- else {
+ if (active || online || dirty_cpu_online
+ || dirty_cpu_active || dirty_io_active) {
+ erts_smp_mtx_lock(&schdlr_sspnd.mtx);
if (active)
- *active = schdlr_sspnd.online;
+ *active = schdlr_sspnd_get_nscheds(&schdlr_sspnd.active,
+ ERTS_SCHED_NORMAL);
if (online)
- *online = schdlr_sspnd.online;
- if (ongoing_multi_scheduling_block() && active)
- *active = 1;
-#ifdef ERTS_DIRTY_SCHEDULERS
+ *online = schdlr_sspnd_get_nscheds(&schdlr_sspnd.curr_online,
+ ERTS_SCHED_NORMAL);
+ if (dirty_cpu_active)
+ *dirty_cpu_active = schdlr_sspnd_get_nscheds(&schdlr_sspnd.active,
+ ERTS_SCHED_DIRTY_CPU);
if (dirty_cpu_online)
- *dirty_cpu_online = schdlr_sspnd.dirty_cpu_online;
-#endif
- res = ERTS_SCHDLR_SSPND_DONE;
+ *dirty_cpu_online = schdlr_sspnd_get_nscheds(&schdlr_sspnd.curr_online,
+ ERTS_SCHED_DIRTY_CPU);
+ if (dirty_io_active)
+ *dirty_io_active = schdlr_sspnd_get_nscheds(&schdlr_sspnd.active,
+ ERTS_SCHED_DIRTY_IO);
+ erts_smp_mtx_unlock(&schdlr_sspnd.mtx);
}
- erts_smp_mtx_unlock(&schdlr_sspnd.mtx);
+
if (total)
*total = erts_no_schedulers;
-#ifdef ERTS_DIRTY_SCHEDULERS
if (dirty_cpu)
*dirty_cpu = erts_no_dirty_cpu_schedulers;
if (dirty_io)
*dirty_io = erts_no_dirty_io_schedulers;
-#endif
- return res;
}
-#ifdef ERTS_DIRTY_SCHEDULERS
+static void
+abort_sched_onln_chng_waitq(Process *p)
+{
+ Eterm resume = NIL;
+
+ erts_smp_mtx_lock(&schdlr_sspnd.mtx);
+
+#ifdef DEBUG
+ {
+ int found_it = 0;
+ ErtsProcList *plp = erts_proclist_peek_first(schdlr_sspnd.chngq);
+ while (plp) {
+ if (erts_proclist_same(plp, p))
+ found_it++;
+ plp = erts_proclist_peek_next(schdlr_sspnd.chngq, plp);
+ }
+ ASSERT(found_it == !!(p->flags & F_SCHDLR_ONLN_WAITQ));
+ }
+#endif
+
+ if (p->flags & F_SCHDLR_ONLN_WAITQ) {
+ ErtsProcList *plp = NULL;
+
+ plp = erts_proclist_peek_first(schdlr_sspnd.chngq);
+ if (plp) {
+ if (erts_proclist_same(plp, p)
+ && schdlr_sspnd.changer == am_true) {
+ p->flags &= ~F_SCHDLR_ONLN_WAITQ;
+ /*
+ * Change right was in transit to us;
+ * transfer it to the next process by
+ * resuming it...
+ */
+ erts_proclist_remove(&schdlr_sspnd.chngq, plp);
+ proclist_destroy(plp);
+ plp = erts_proclist_peek_first(schdlr_sspnd.chngq);
+ if (plp)
+ resume = plp->pid;
+ else
+ schdlr_sspnd.changer = am_false;
+ }
+ else {
+ do {
+ if (erts_proclist_same(plp, p)) {
+ p->flags &= ~F_SCHDLR_ONLN_WAITQ;
+ erts_proclist_remove(&schdlr_sspnd.chngq, plp);
+ proclist_destroy(plp);
+ break;
+ }
+ plp = erts_proclist_peek_next(schdlr_sspnd.chngq, plp);
+ } while (plp);
+ }
+ }
+ }
+
+ erts_smp_mtx_unlock(&schdlr_sspnd.mtx);
+
+ if (is_internal_pid(resume))
+ schdlr_sspnd_resume_proc(resume);
+}
ErtsSchedSuspendResult
erts_set_schedulers_online(Process *p,
ErtsProcLocks plocks,
Sint new_no,
- Sint *old_no
-#ifdef ERTS_DIRTY_SCHEDULERS
- , int dirty_only
-#endif
- )
+ Sint *old_no,
+ int dirty_only)
{
- ErtsSchedulerData *esdp;
- int ix, res = -1, no, have_unlocked_plocks, end_wait;
- erts_aint32_t changing = 0;
+ int resume_proc, ix, res = -1, no, have_unlocked_plocks;
+ erts_aint32_t changing = 0, change_flags;
+ int online, increase;
+ ErtsProcList *plp;
#ifdef ERTS_DIRTY_SCHEDULERS
- ErtsSchedulerSleepInfo* ssi;
- int dirty_no, change_dirty;
+ int dirty_no, change_dirty, dirty_online;
+#else
+ ASSERT(!dirty_only);
#endif
if (new_no < 1)
return ERTS_SCHDLR_SSPND_EINVAL;
-#ifdef ERTS_DIRTY_SCHEDULERS
else if (dirty_only && erts_no_dirty_cpu_schedulers < new_no)
return ERTS_SCHDLR_SSPND_EINVAL;
-#endif
else if (erts_no_schedulers < new_no)
return ERTS_SCHDLR_SSPND_EINVAL;
- esdp = ERTS_PROC_GET_SCHDATA(p);
- end_wait = 0;
+#ifdef ERTS_DIRTY_SCHEDULERS
+ if (dirty_only)
+ resume_proc = 0;
+ else
+#endif
+ {
+ resume_proc = 1;
+ /*
+ * If we suspend current process we need to suspend before
+ * requesting the change; otherwise, we got a resume/suspend
+ * race...
+ */
+ if (!(plocks & ERTS_PROC_LOCK_STATUS))
+ erts_smp_proc_lock(p, ERTS_PROC_LOCK_STATUS);
+ suspend_process(p, p);
+ if (!(plocks & ERTS_PROC_LOCK_STATUS))
+ erts_smp_proc_unlock(p, ERTS_PROC_LOCK_STATUS);
+ }
erts_smp_mtx_lock(&schdlr_sspnd.mtx);
+ change_flags = 0;
have_unlocked_plocks = 0;
no = (int) new_no;
#ifdef ERTS_DIRTY_SCHEDULERS
- ASSERT(schdlr_sspnd.dirty_cpu_online <= erts_no_dirty_cpu_schedulers);
+ if (!dirty_only)
+#endif
+ {
+ changing = erts_smp_atomic32_read_nob(&schdlr_sspnd.changing);
+ if (changing & ERTS_SCHDLR_SSPND_CHNG_ONLN) {
+ enqueue_wait:
+ p->flags |= F_SCHDLR_ONLN_WAITQ;
+ plp = proclist_create(p);
+ erts_proclist_store_last(&schdlr_sspnd.chngq, plp);
+ resume_proc = 0;
+ res = ERTS_SCHDLR_SSPND_YIELD_RESTART;
+ goto done;
+ }
+ plp = erts_proclist_peek_first(schdlr_sspnd.chngq);
+ if (!plp) {
+ ASSERT(schdlr_sspnd.changer == am_false);
+ }
+ else {
+ ASSERT(schdlr_sspnd.changer == am_true);
+ if (!erts_proclist_same(plp, p))
+ goto enqueue_wait;
+ p->flags &= ~F_SCHDLR_ONLN_WAITQ;
+ erts_proclist_remove(&schdlr_sspnd.chngq, plp);
+ proclist_destroy(plp);
+ }
+ }
+
+ *old_no = online = schdlr_sspnd_get_nscheds(&schdlr_sspnd.online,
+ ERTS_SCHED_NORMAL);
+#ifndef ERTS_DIRTY_SCHEDULERS
+ if (no == online) {
+ res = ERTS_SCHDLR_SSPND_DONE;
+ goto done;
+ }
+#else /* ERTS_DIRTY_SCHEDULERS */
+ dirty_online = schdlr_sspnd_get_nscheds(&schdlr_sspnd.online,
+ ERTS_SCHED_DIRTY_CPU);
+ if (dirty_only)
+ *old_no = dirty_online;
+
+ ASSERT(dirty_online <= erts_no_dirty_cpu_schedulers);
+
if (dirty_only) {
- if (no > schdlr_sspnd.online) {
- erts_smp_mtx_unlock(&schdlr_sspnd.mtx);
- return ERTS_SCHDLR_SSPND_EINVAL;
+ if (no > online) {
+ res = ERTS_SCHDLR_SSPND_EINVAL;
+ goto done;
}
dirty_no = no;
+ if (dirty_no == dirty_online) {
+ res = ERTS_SCHDLR_SSPND_DONE;
+ goto done;
+ }
+ change_dirty = 1;
} else {
/*
* Adjust the number of dirty CPU schedulers online relative to the
* adjustment made to the number of normal schedulers online.
*/
int total_pct = erts_no_dirty_cpu_schedulers*100/erts_no_schedulers;
- int onln_pct = no*total_pct/schdlr_sspnd.online;
- dirty_no = schdlr_sspnd.dirty_cpu_online*onln_pct/100;
+ int onln_pct = no*total_pct/online;
+ dirty_no = dirty_online*onln_pct/100;
if (dirty_no == 0)
dirty_no = 1;
ASSERT(dirty_no <= erts_no_dirty_cpu_schedulers);
- }
-#endif
- changing = erts_smp_atomic32_read_nob(&schdlr_sspnd.changing);
-#ifdef ERTS_DIRTY_SCHEDULERS
- changing |= erts_smp_atomic32_read_nob(&schdlr_sspnd.dirty_cpu_changing);
-#endif
- if (changing) {
- res = ERTS_SCHDLR_SSPND_YIELD_RESTART;
- }
- else {
- int online = *old_no = schdlr_sspnd.online;
-#ifdef ERTS_DIRTY_SCHEDULERS
- int dirty_online = schdlr_sspnd.dirty_cpu_online;
- if (dirty_only) {
- *old_no = schdlr_sspnd.dirty_cpu_online;
- if (dirty_no == schdlr_sspnd.dirty_cpu_online) {
+ if (no != online)
+ change_dirty = (dirty_no != dirty_online);
+ else {
+ dirty_only = 1;
+ if (dirty_no == dirty_online) {
res = ERTS_SCHDLR_SSPND_DONE;
+ goto done;
}
change_dirty = 1;
- } else {
-#endif
- if (no == schdlr_sspnd.online) {
-#ifdef ERTS_DIRTY_SCHEDULERS
- dirty_only = 1;
- if (dirty_no == schdlr_sspnd.dirty_cpu_online)
-#endif
- res = ERTS_SCHDLR_SSPND_DONE;
-#ifdef ERTS_DIRTY_SCHEDULERS
- else
- change_dirty = 1;
-#endif
- }
-#ifdef ERTS_DIRTY_SCHEDULERS
- else
- change_dirty = (dirty_no != schdlr_sspnd.dirty_cpu_online);
}
-#endif
- if (res == -1)
- {
- int increase = (no > online);
-#ifdef ERTS_DIRTY_SCHEDULERS
- if (!dirty_only) {
-#endif
- ERTS_SCHDLR_SSPND_CHNG_SET((ERTS_SCHDLR_SSPND_CHNG_ONLN
- | ERTS_SCHDLR_SSPND_CHNG_WAITER), 0);
- schdlr_sspnd.online = no;
-#ifdef ERTS_DIRTY_SCHEDULERS
- } else
- increase = (dirty_no > dirty_online);
- if (change_dirty) {
- ERTS_SCHDLR_SSPND_DIRTY_CPU_CHNG_SET((ERTS_SCHDLR_SSPND_CHNG_ONLN
- | ERTS_SCHDLR_SSPND_CHNG_WAITER), 0);
- schdlr_sspnd.dirty_cpu_online = dirty_no;
- }
-#endif
- if (increase) {
- int ix;
-#ifdef ERTS_DIRTY_SCHEDULERS
- if (!dirty_only) {
-#endif
- schdlr_sspnd.wait_curr_online = no;
- if (ongoing_multi_scheduling_block()) {
- for (ix = online; ix < no; ix++)
- erts_sched_poke(ERTS_SCHED_SLEEP_INFO_IX(ix));
- }
- else {
- if (plocks) {
- have_unlocked_plocks = 1;
- erts_smp_proc_unlock(p, plocks);
- }
- change_no_used_runqs(no);
+ }
+ if (change_dirty) {
+ change_flags |= ERTS_SCHDLR_SSPND_CHNG_DCPU_ONLN;
+ schdlr_sspnd_set_nscheds(&schdlr_sspnd.online,
+ ERTS_SCHED_DIRTY_CPU,
+ dirty_no);
+ }
- for (ix = online; ix < no; ix++)
- resume_run_queue(ERTS_RUNQ_IX(ix));
+ if (dirty_only)
+ increase = (dirty_no > dirty_online);
+ else
+#endif /* ERTS_DIRTY_SCHEDULERS */
+ {
+ change_flags |= ERTS_SCHDLR_SSPND_CHNG_ONLN;
+ schdlr_sspnd_set_nscheds(&schdlr_sspnd.online,
+ ERTS_SCHED_NORMAL,
+ no);
+ increase = (no > online);
+ }
- for (ix = no; ix < erts_no_run_queues; ix++)
- suspend_run_queue(ERTS_RUNQ_IX(ix));
- }
+ erts_smp_atomic32_read_bor_nob(&schdlr_sspnd.changing, change_flags);
+
+ res = ERTS_SCHDLR_SSPND_DONE;
+ if (increase) {
+ int ix;
#ifdef ERTS_DIRTY_SCHEDULERS
+ if (change_dirty) {
+ ErtsSchedulerSleepInfo* ssi;
+ if (schdlr_sspnd.msb.ongoing) {
+ for (ix = dirty_online; ix < dirty_no; ix++) {
+ ssi = ERTS_DIRTY_CPU_SCHED_SLEEP_INFO_IX(ix);
+ erts_sched_poke(ssi);
}
- if (change_dirty) {
- schdlr_sspnd.dirty_cpu_wait_curr_online = dirty_no;
- ASSERT(schdlr_sspnd.dirty_cpu_curr_online !=
- schdlr_sspnd.dirty_cpu_wait_curr_online);
- if (ongoing_multi_scheduling_block()) {
- for (ix = dirty_online; ix < dirty_no; ix++) {
- ssi = ERTS_DIRTY_CPU_SCHED_SLEEP_INFO_IX(ix);
- erts_sched_poke(ssi);
- }
- } else {
- for (ix = dirty_online; ix < dirty_no; ix++) {
- ssi = ERTS_DIRTY_CPU_SCHED_SLEEP_INFO_IX(ix);
- scheduler_ssi_resume_wake(ssi);
- erts_smp_atomic32_read_band_nob(&ssi->flags,
- ~ERTS_SSI_FLG_SUSPENDED);
- }
- wake_dirty_schedulers(ERTS_DIRTY_CPU_RUNQ, 0);
- }
+ } else {
+ for (ix = dirty_online; ix < dirty_no; ix++) {
+ ssi = ERTS_DIRTY_CPU_SCHED_SLEEP_INFO_IX(ix);
+ scheduler_ssi_resume_wake(ssi);
}
-#endif
- res = ERTS_SCHDLR_SSPND_DONE;
}
- else /* if (no < online) */ {
-#ifdef ERTS_DIRTY_SCHEDULERS
- if (change_dirty) {
- schdlr_sspnd.dirty_cpu_wait_curr_online = dirty_no;
- ASSERT(schdlr_sspnd.dirty_cpu_curr_online !=
- schdlr_sspnd.dirty_cpu_wait_curr_online);
- if (ongoing_multi_scheduling_block()) {
- for (ix = dirty_no; ix < dirty_online; ix++) {
- ssi = ERTS_DIRTY_CPU_SCHED_SLEEP_INFO_IX(ix);
- erts_sched_poke(ssi);
- }
- } else {
- for (ix = dirty_no; ix < dirty_online; ix++) {
- ssi = ERTS_DIRTY_CPU_SCHED_SLEEP_INFO_IX(ix);
- erts_smp_atomic32_read_bor_nob(&ssi->flags,
- ERTS_SSI_FLG_SUSPENDED);
- }
- wake_dirty_schedulers(ERTS_DIRTY_CPU_RUNQ, 0);
- }
- }
- if (dirty_only) {
- res = ERTS_SCHDLR_SSPND_DONE;
- }
- else
+ }
+ if (!dirty_only)
#endif
- {
- if (p->scheduler_data->no <= no) {
- res = ERTS_SCHDLR_SSPND_DONE;
- schdlr_sspnd.wait_curr_online = no;
- }
- else {
- /*
- * Yield! Current process needs to migrate
- * before bif returns.
- */
- res = ERTS_SCHDLR_SSPND_YIELD_DONE;
- schdlr_sspnd.wait_curr_online = no+1;
- }
-
- if (ongoing_multi_scheduling_block()) {
- for (ix = no; ix < online; ix++)
- erts_sched_poke(ERTS_SCHED_SLEEP_INFO_IX(ix));
- }
- else {
- if (plocks) {
- have_unlocked_plocks = 1;
- erts_smp_proc_unlock(p, plocks);
- }
-
- change_no_used_runqs(no);
- for (ix = no; ix < erts_no_run_queues; ix++)
- suspend_run_queue(ERTS_RUNQ_IX(ix));
-
- for (ix = no; ix < online; ix++) {
- ErtsRunQueue *rq = ERTS_RUNQ_IX(ix);
- wake_scheduler(rq);
- }
- }
- }
+ {
+ if (schdlr_sspnd.msb.ongoing|schdlr_sspnd.nmsb.ongoing) {
+ for (ix = online; ix < no; ix++)
+ erts_sched_poke(ERTS_SCHED_SLEEP_INFO_IX(ix));
}
-
-#ifdef ERTS_DIRTY_SCHEDULERS
- if (change_dirty) {
- while (schdlr_sspnd.dirty_cpu_curr_online != schdlr_sspnd.dirty_cpu_wait_curr_online)
- erts_smp_cnd_wait(&schdlr_sspnd.cnd, &schdlr_sspnd.mtx);
- ERTS_SCHDLR_SSPND_DIRTY_CPU_CHNG_SET(0, ERTS_SCHDLR_SSPND_CHNG_WAITER);
- erts_smp_atomic32_read_band_nob(&schdlr_sspnd.dirty_cpu_changing,
- ~ERTS_SCHDLR_SSPND_CHNG_WAITER);
- }
- if (!dirty_only)
-#endif
- {
- if (schdlr_sspnd.curr_online != schdlr_sspnd.wait_curr_online) {
- erts_smp_mtx_unlock(&schdlr_sspnd.mtx);
- if (plocks && !have_unlocked_plocks) {
- have_unlocked_plocks = 1;
- erts_smp_proc_unlock(p, plocks);
- }
- erts_thr_progress_active(esdp, 0);
- erts_thr_progress_prepare_wait(esdp);
- end_wait = 1;
- erts_smp_mtx_lock(&schdlr_sspnd.mtx);
+ else {
+ if (plocks) {
+ have_unlocked_plocks = 1;
+ erts_smp_proc_unlock(p, plocks);
}
+ change_no_used_runqs(no);
- while (schdlr_sspnd.curr_online != schdlr_sspnd.wait_curr_online)
- erts_smp_cnd_wait(&schdlr_sspnd.cnd, &schdlr_sspnd.mtx);
+ for (ix = online; ix < no; ix++)
+ resume_run_queue(ERTS_RUNQ_IX(ix));
- ASSERT(res != ERTS_SCHDLR_SSPND_DONE
- ? (ERTS_SCHDLR_SSPND_CHNG_WAITER
- & erts_smp_atomic32_read_nob(&schdlr_sspnd.changing))
- : (ERTS_SCHDLR_SSPND_CHNG_WAITER
- == erts_smp_atomic32_read_nob(&schdlr_sspnd.changing)));
- erts_smp_atomic32_read_band_nob(&schdlr_sspnd.changing,
- ~ERTS_SCHDLR_SSPND_CHNG_WAITER);
+ for (ix = no; ix < erts_no_run_queues; ix++)
+ suspend_run_queue(ERTS_RUNQ_IX(ix));
}
}
}
-
- erts_smp_mtx_unlock(&schdlr_sspnd.mtx);
+ else /* if decrease */ {
#ifdef ERTS_DIRTY_SCHEDULERS
- ASSERT(schdlr_sspnd.dirty_cpu_online <= schdlr_sspnd.online);
- if (!dirty_only)
-#endif
- {
- if (end_wait) {
- erts_thr_progress_finalize_wait(esdp);
- erts_thr_progress_active(esdp, 1);
- }
- if (have_unlocked_plocks)
- erts_smp_proc_lock(p, plocks);
- }
-
- return res;
-}
-
-#else /* !ERTS_DIRTY_SCHEDULERS */
-
-ErtsSchedSuspendResult
-erts_set_schedulers_online(Process *p,
- ErtsProcLocks plocks,
- Sint new_no,
- Sint *old_no)
-{
- ErtsSchedulerData *esdp;
- int ix, res, no, have_unlocked_plocks, end_wait;
- erts_aint32_t changing;
-
- if (new_no < 1 || erts_no_schedulers < new_no)
- return ERTS_SCHDLR_SSPND_EINVAL;
-
- esdp = ERTS_PROC_GET_SCHDATA(p);
- end_wait = 0;
-
- erts_smp_mtx_lock(&schdlr_sspnd.mtx);
-
- have_unlocked_plocks = 0;
- no = (int) new_no;
-
- changing = erts_smp_atomic32_read_nob(&schdlr_sspnd.changing);
- if (changing) {
- res = ERTS_SCHDLR_SSPND_YIELD_RESTART;
- }
- else {
- int online = *old_no = schdlr_sspnd.online;
- if (no == schdlr_sspnd.online) {
- res = ERTS_SCHDLR_SSPND_DONE;
- }
- else {
- ERTS_SCHDLR_SSPND_CHNG_SET((ERTS_SCHDLR_SSPND_CHNG_ONLN
- | ERTS_SCHDLR_SSPND_CHNG_WAITER), 0);
- schdlr_sspnd.online = no;
- if (no > online) {
- int ix;
- schdlr_sspnd.wait_curr_online = no;
- if (ongoing_multi_scheduling_block()) {
- for (ix = online; ix < no; ix++)
- erts_sched_poke(ERTS_SCHED_SLEEP_INFO_IX(ix));
+ if (change_dirty) {
+ ErtsSchedulerSleepInfo* ssi;
+ if (schdlr_sspnd.msb.ongoing) {
+ for (ix = dirty_no; ix < dirty_online; ix++) {
+ ssi = ERTS_DIRTY_CPU_SCHED_SLEEP_INFO_IX(ix);
+ erts_sched_poke(ssi);
}
- else {
- if (plocks) {
- have_unlocked_plocks = 1;
- erts_smp_proc_unlock(p, plocks);
- }
- change_no_used_runqs(no);
-
- for (ix = online; ix < no; ix++)
- resume_run_queue(ERTS_RUNQ_IX(ix));
-
- for (ix = no; ix < erts_no_run_queues; ix++)
- suspend_run_queue(ERTS_RUNQ_IX(ix));
+ } else {
+ for (ix = dirty_no; ix < dirty_online; ix++) {
+ ssi = ERTS_DIRTY_CPU_SCHED_SLEEP_INFO_IX(ix);
+ erts_smp_atomic32_read_bor_nob(&ssi->flags,
+ ERTS_SSI_FLG_SUSPENDED);
}
- res = ERTS_SCHDLR_SSPND_DONE;
+ wake_dirty_schedulers(ERTS_DIRTY_CPU_RUNQ, 0);
}
- else /* if (no < online) */ {
- if (p->scheduler_data->no <= no) {
- res = ERTS_SCHDLR_SSPND_DONE;
- schdlr_sspnd.wait_curr_online = no;
- }
- else {
- /*
- * Yield! Current process needs to migrate
- * before bif returns.
- */
- res = ERTS_SCHDLR_SSPND_YIELD_DONE;
- schdlr_sspnd.wait_curr_online = no+1;
- }
-
- if (ongoing_multi_scheduling_block()) {
- for (ix = no; ix < online; ix++)
- erts_sched_poke(ERTS_SCHED_SLEEP_INFO_IX(ix));
- }
- else {
- if (plocks) {
- have_unlocked_plocks = 1;
- erts_smp_proc_unlock(p, plocks);
- }
-
- change_no_used_runqs(no);
- for (ix = no; ix < erts_no_run_queues; ix++)
- suspend_run_queue(ERTS_RUNQ_IX(ix));
-
- for (ix = no; ix < online; ix++) {
- ErtsRunQueue *rq = ERTS_RUNQ_IX(ix);
- wake_scheduler(rq);
- }
- }
+ }
+ if (!dirty_only)
+#endif
+ {
+ if (schdlr_sspnd.msb.ongoing|schdlr_sspnd.nmsb.ongoing) {
+ for (ix = no; ix < online; ix++)
+ erts_sched_poke(ERTS_SCHED_SLEEP_INFO_IX(ix));
}
-
- if (schdlr_sspnd.curr_online != schdlr_sspnd.wait_curr_online) {
- erts_smp_mtx_unlock(&schdlr_sspnd.mtx);
- if (plocks && !have_unlocked_plocks) {
+ else {
+ if (plocks) {
have_unlocked_plocks = 1;
erts_smp_proc_unlock(p, plocks);
}
- erts_thr_progress_active(esdp, 0);
- erts_thr_progress_prepare_wait(esdp);
- end_wait = 1;
- erts_smp_mtx_lock(&schdlr_sspnd.mtx);
- }
- while (schdlr_sspnd.curr_online != schdlr_sspnd.wait_curr_online)
- erts_smp_cnd_wait(&schdlr_sspnd.cnd, &schdlr_sspnd.mtx);
-
- ASSERT(res != ERTS_SCHDLR_SSPND_DONE
- ? (ERTS_SCHDLR_SSPND_CHNG_WAITER
- & erts_smp_atomic32_read_nob(&schdlr_sspnd.changing))
- : (ERTS_SCHDLR_SSPND_CHNG_WAITER
- == erts_smp_atomic32_read_nob(&schdlr_sspnd.changing)));
- erts_smp_atomic32_read_band_nob(&schdlr_sspnd.changing,
- ~ERTS_SCHDLR_SSPND_CHNG_WAITER);
+ change_no_used_runqs(no);
+ for (ix = no; ix < erts_no_run_queues; ix++)
+ suspend_run_queue(ERTS_RUNQ_IX(ix));
+ for (ix = no; ix < online; ix++) {
+ ErtsRunQueue *rq = ERTS_RUNQ_IX(ix);
+ wake_scheduler(rq);
+ }
+ }
}
}
- erts_smp_mtx_unlock(&schdlr_sspnd.mtx);
- if (end_wait) {
- erts_thr_progress_finalize_wait(esdp);
- erts_thr_progress_active(esdp, 1);
+ if (change_flags & ERTS_SCHDLR_SSPND_CHNG_ONLN) {
+ /* Suspend and wait for requested change to complete... */
+ schdlr_sspnd.changer = p->common.id;
+ resume_proc = 0;
+ res = ERTS_SCHDLR_SSPND_YIELD_DONE;
}
+
+done:
+
+ ASSERT(schdlr_sspnd_get_nscheds(&schdlr_sspnd.online,
+ ERTS_SCHED_DIRTY_CPU)
+ <= schdlr_sspnd_get_nscheds(&schdlr_sspnd.online,
+ ERTS_SCHED_NORMAL));
+
+ erts_smp_mtx_unlock(&schdlr_sspnd.mtx);
+
if (have_unlocked_plocks)
erts_smp_proc_lock(p, plocks);
+ if (resume_proc) {
+ if (!(plocks & ERTS_PROC_LOCK_STATUS))
+ erts_smp_proc_lock(p, ERTS_PROC_LOCK_STATUS);
+ resume_process(p, plocks|ERTS_PROC_LOCK_STATUS);
+ if (!(plocks & ERTS_PROC_LOCK_STATUS))
+ erts_smp_proc_unlock(p, ERTS_PROC_LOCK_STATUS);
+ }
+
return res;
}
-#endif
-
ErtsSchedSuspendResult
-erts_block_multi_scheduling(Process *p, ErtsProcLocks plocks, int on, int all)
+erts_block_multi_scheduling(Process *p, ErtsProcLocks plocks, int on, int normal, int all)
{
- int ix, res, have_unlocked_plocks = 0, online;
- erts_aint32_t changing;
+ int resume_proc, ix, res, have_unlocked_plocks = 0;
ErtsProcList *plp;
#ifdef ERTS_DIRTY_SCHEDULERS
ErtsSchedulerSleepInfo* ssi;
#endif
+ ErtsMultiSchedulingBlock *msbp;
+ erts_aint32_t chng_flg;
+ int have_blckd_flg;
- erts_smp_mtx_lock(&schdlr_sspnd.mtx);
- changing = erts_smp_atomic32_read_nob(&schdlr_sspnd.changing);
-#ifdef ERTS_DIRTY_SCHEDULERS
- changing |= (erts_smp_atomic32_read_nob(&schdlr_sspnd.dirty_cpu_changing)
- | erts_smp_atomic32_read_nob(&schdlr_sspnd.dirty_io_changing));
-#endif
- if (changing) {
- res = ERTS_SCHDLR_SSPND_YIELD_RESTART; /* Yield */
+ if (normal) {
+ chng_flg = ERTS_SCHDLR_SSPND_CHNG_NMSB;
+ have_blckd_flg = F_HAVE_BLCKD_NMSCHED;
+ msbp = &schdlr_sspnd.nmsb;
}
- else if (on) { /* ------ BLOCK ------ */
- if (schdlr_sspnd.msb.procs) {
+ else {
+ chng_flg = ERTS_SCHDLR_SSPND_CHNG_MSB;
+ have_blckd_flg = F_HAVE_BLCKD_MSCHED;
+ msbp = &schdlr_sspnd.msb;
+ }
+
+ /*
+ * If we suspend current process we need to suspend before
+ * requesting the change; otherwise, we got a resume/suspend
+ * race...
+ */
+ if (!on) {
+ /* We never suspend current process when unblocking... */
+ resume_proc = 0;
+ }
+ else {
+ resume_proc = 1;
+ if (!(plocks & ERTS_PROC_LOCK_STATUS))
+ erts_smp_proc_lock(p, ERTS_PROC_LOCK_STATUS);
+ suspend_process(p, p);
+ if (!(plocks & ERTS_PROC_LOCK_STATUS))
+ erts_smp_proc_unlock(p, ERTS_PROC_LOCK_STATUS);
+ }
+
+ erts_smp_mtx_lock(&schdlr_sspnd.mtx);
+ if (on) { /* ------ BLOCK ------ */
+ if (msbp->chngq) {
+ ASSERT(msbp->ongoing);
+ p->flags |= have_blckd_flg;
+ goto wait_until_msb;
+ }
+ else if (msbp->blckrs) {
+ ASSERT(msbp->ongoing);
plp = proclist_create(p);
- erts_proclist_store_last(&schdlr_sspnd.msb.procs, plp);
- p->flags |= F_HAVE_BLCKD_MSCHED;
- ASSERT(erts_smp_atomic32_read_nob(&schdlr_sspnd.active) == 1);
-#ifdef ERTS_DIRTY_SCHEDULERS
- ASSERT(erts_smp_atomic32_read_nob(&schdlr_sspnd.dirty_cpu_active) == 0);
- ASSERT(erts_smp_atomic32_read_nob(&schdlr_sspnd.dirty_io_active) == 0);
-#endif
- ASSERT(p->scheduler_data->no == 1);
- res = ERTS_SCHDLR_SSPND_DONE_MSCHED_BLOCKED;
- } else {
- int online = schdlr_sspnd.online;
- p->flags |= F_HAVE_BLCKD_MSCHED;
+ erts_proclist_store_last(&msbp->blckrs, plp);
+ p->flags |= have_blckd_flg;
+ ASSERT(normal
+ ? 1 == schdlr_sspnd_get_nscheds(&schdlr_sspnd.active, ERTS_SCHED_NORMAL)
+ : schdlr_sspnd.active == ERTS_SCHDLR_SSPND_MAKE_NSCHEDS_VAL(1, 0, 0));
+ ASSERT(erts_proc_sched_data(p)->no == 1);
+ if (schdlr_sspnd.msb.ongoing)
+ res = ERTS_SCHDLR_SSPND_DONE_MSCHED_BLOCKED;
+ else
+ res = ERTS_SCHDLR_SSPND_DONE_NMSCHED_BLOCKED;
+ }
+ else {
+ int online = (int) schdlr_sspnd_get_nscheds(&schdlr_sspnd.online,
+ ERTS_SCHED_NORMAL);
+ ASSERT(!msbp->ongoing);
+ p->flags |= have_blckd_flg;
if (plocks) {
have_unlocked_plocks = 1;
erts_smp_proc_unlock(p, plocks);
}
- ASSERT(!ongoing_multi_scheduling_block());
- schdlr_sspnd.msb.ongoing = 1;
- if (online == 1) {
- res = ERTS_SCHDLR_SSPND_DONE_MSCHED_BLOCKED;
- ASSERT(erts_smp_atomic32_read_nob(&schdlr_sspnd.active) == 1);
-#ifdef ERTS_DIRTY_SCHEDULERS
- ASSERT(erts_smp_atomic32_read_nob(&schdlr_sspnd.dirty_cpu_active) == 1);
- ASSERT(!(erts_smp_atomic32_read_nob(&ERTS_DIRTY_CPU_SCHED_SLEEP_INFO_IX(0)->flags)
- & ERTS_SSI_FLG_SUSPENDED));
- schdlr_sspnd.msb.dirty_cpu_wait_active = 0;
- ERTS_SCHDLR_SSPND_DIRTY_CPU_CHNG_SET((ERTS_SCHDLR_SSPND_CHNG_MSB
- | ERTS_SCHDLR_SSPND_CHNG_WAITER), 0);
- ssi = ERTS_DIRTY_CPU_SCHED_SLEEP_INFO_IX(0);
- erts_smp_atomic32_read_bor_nob(&ssi->flags, ERTS_SSI_FLG_SUSPENDED);
- wake_dirty_schedulers(ERTS_DIRTY_CPU_RUNQ, 0);
- while (erts_smp_atomic32_read_nob(&schdlr_sspnd.dirty_cpu_active)
- != schdlr_sspnd.msb.dirty_cpu_wait_active)
- erts_smp_cnd_wait(&schdlr_sspnd.cnd, &schdlr_sspnd.mtx);
- ERTS_SCHDLR_SSPND_DIRTY_CPU_CHNG_SET(0, ERTS_SCHDLR_SSPND_CHNG_WAITER);
-
- schdlr_sspnd.msb.dirty_io_wait_active = 0;
- ERTS_SCHDLR_SSPND_DIRTY_IO_CHNG_SET((ERTS_SCHDLR_SSPND_CHNG_MSB
- | ERTS_SCHDLR_SSPND_CHNG_WAITER), 0);
- for (ix = 0; ix < erts_no_dirty_io_schedulers; ix++) {
- ssi = ERTS_DIRTY_IO_SCHED_SLEEP_INFO_IX(ix);
- erts_smp_atomic32_read_bor_nob(&ssi->flags,
- ERTS_SSI_FLG_SUSPENDED);
- }
- wake_dirty_schedulers(ERTS_DIRTY_IO_RUNQ, 0);
- while (erts_smp_atomic32_read_nob(&schdlr_sspnd.dirty_io_active)
- != schdlr_sspnd.msb.dirty_io_wait_active)
- erts_smp_cnd_wait(&schdlr_sspnd.cnd, &schdlr_sspnd.mtx);
- ERTS_SCHDLR_SSPND_DIRTY_IO_CHNG_SET(0, ERTS_SCHDLR_SSPND_CHNG_WAITER);
-#endif
- ASSERT(p->scheduler_data->no == 1);
+ ASSERT(!msbp->ongoing);
+ msbp->ongoing = 1;
+ if (schdlr_sspnd.active == ERTS_SCHDLR_SSPND_MAKE_NSCHEDS_VAL(1, 0, 0)
+ || (normal && schdlr_sspnd_get_nscheds(&schdlr_sspnd.active,
+ ERTS_SCHED_NORMAL) == 1)) {
+ ASSERT(erts_proc_sched_data(p)->no == 1);
+ plp = proclist_create(p);
+ erts_proclist_store_last(&msbp->blckrs, plp);
+ if (schdlr_sspnd.msb.ongoing)
+ res = ERTS_SCHDLR_SSPND_DONE_MSCHED_BLOCKED;
+ else
+ res = ERTS_SCHDLR_SSPND_DONE_NMSCHED_BLOCKED;
}
else {
- ERTS_SCHDLR_SSPND_CHNG_SET((ERTS_SCHDLR_SSPND_CHNG_MSB
- | ERTS_SCHDLR_SSPND_CHNG_WAITER), 0);
- if (p->scheduler_data->no == 1) {
- res = ERTS_SCHDLR_SSPND_DONE_MSCHED_BLOCKED;
- schdlr_sspnd.msb.wait_active = 1;
- }
- else {
- /*
- * Yield! Current process needs to migrate
- * before bif returns.
- */
- res = ERTS_SCHDLR_SSPND_YIELD_DONE_MSCHED_BLOCKED;
- schdlr_sspnd.msb.wait_active = 2;
- }
-
-#ifdef ERTS_DIRTY_SCHEDULERS
- schdlr_sspnd.msb.dirty_cpu_wait_active = 0;
- ERTS_SCHDLR_SSPND_DIRTY_CPU_CHNG_SET((ERTS_SCHDLR_SSPND_CHNG_MSB
- | ERTS_SCHDLR_SSPND_CHNG_WAITER), 0);
- for (ix = 0; ix < erts_no_dirty_cpu_schedulers; ix++) {
- ssi = ERTS_DIRTY_CPU_SCHED_SLEEP_INFO_IX(ix);
- erts_smp_atomic32_read_bor_nob(&ssi->flags,
- ERTS_SSI_FLG_SUSPENDED);
- }
- wake_dirty_schedulers(ERTS_DIRTY_CPU_RUNQ, 0);
- while (erts_smp_atomic32_read_nob(&schdlr_sspnd.dirty_cpu_active)
- != schdlr_sspnd.msb.dirty_cpu_wait_active)
- erts_smp_cnd_wait(&schdlr_sspnd.cnd, &schdlr_sspnd.mtx);
- ERTS_SCHDLR_SSPND_DIRTY_CPU_CHNG_SET(0, ERTS_SCHDLR_SSPND_CHNG_WAITER);
- ASSERT(schdlr_sspnd.dirty_cpu_curr_online == schdlr_sspnd.dirty_cpu_online);
-
- schdlr_sspnd.msb.dirty_io_wait_active = 0;
- ERTS_SCHDLR_SSPND_DIRTY_IO_CHNG_SET((ERTS_SCHDLR_SSPND_CHNG_MSB
- | ERTS_SCHDLR_SSPND_CHNG_WAITER), 0);
- for (ix = 0; ix < erts_no_dirty_io_schedulers; ix++) {
- ssi = ERTS_DIRTY_IO_SCHED_SLEEP_INFO_IX(ix);
- erts_smp_atomic32_read_bor_nob(&ssi->flags,
- ERTS_SSI_FLG_SUSPENDED);
- }
- wake_dirty_schedulers(ERTS_DIRTY_IO_RUNQ, 0);
- while (erts_smp_atomic32_read_nob(&schdlr_sspnd.dirty_io_active)
- != schdlr_sspnd.msb.dirty_io_wait_active)
- erts_smp_cnd_wait(&schdlr_sspnd.cnd, &schdlr_sspnd.mtx);
- ERTS_SCHDLR_SSPND_DIRTY_IO_CHNG_SET(0, ERTS_SCHDLR_SSPND_CHNG_WAITER);
- ASSERT(schdlr_sspnd.dirty_io_curr_online == schdlr_sspnd.dirty_io_online);
-#endif
+ erts_smp_atomic32_read_bor_nob(&schdlr_sspnd.changing,
+ chng_flg);
change_no_used_runqs(1);
for (ix = 1; ix < erts_no_run_queues; ix++)
suspend_run_queue(ERTS_RUNQ_IX(ix));
@@ -7938,84 +7897,84 @@ erts_block_multi_scheduling(Process *p, ErtsProcLocks plocks, int on, int all)
wake_scheduler(rq);
}
- if (erts_smp_atomic32_read_nob(&schdlr_sspnd.active)
- != schdlr_sspnd.msb.wait_active) {
- ErtsSchedulerData *esdp;
-
- erts_smp_mtx_unlock(&schdlr_sspnd.mtx);
-
- if (plocks && !have_unlocked_plocks) {
- have_unlocked_plocks = 1;
- erts_smp_proc_unlock(p, plocks);
+#ifdef ERTS_DIRTY_SCHEDULERS
+ if (!normal) {
+ for (ix = 0; ix < erts_no_dirty_cpu_schedulers; ix++) {
+ ssi = ERTS_DIRTY_CPU_SCHED_SLEEP_INFO_IX(ix);
+ erts_smp_atomic32_read_bor_nob(&ssi->flags,
+ ERTS_SSI_FLG_SUSPENDED);
}
+ wake_dirty_schedulers(ERTS_DIRTY_CPU_RUNQ, 0);
- esdp = ERTS_PROC_GET_SCHDATA(p);
-
- erts_thr_progress_active(esdp, 0);
- erts_thr_progress_prepare_wait(esdp);
-
- erts_smp_mtx_lock(&schdlr_sspnd.mtx);
-
- while (erts_smp_atomic32_read_nob(&schdlr_sspnd.active)
- != schdlr_sspnd.msb.wait_active)
- erts_smp_cnd_wait(&schdlr_sspnd.cnd,
- &schdlr_sspnd.mtx);
-
- erts_smp_mtx_unlock(&schdlr_sspnd.mtx);
-
- erts_thr_progress_active(esdp, 1);
- erts_thr_progress_finalize_wait(esdp);
+ for (ix = 0; ix < erts_no_dirty_io_schedulers; ix++) {
+ ssi = ERTS_DIRTY_IO_SCHED_SLEEP_INFO_IX(ix);
+ erts_smp_atomic32_read_bor_nob(&ssi->flags,
+ ERTS_SSI_FLG_SUSPENDED);
+ }
+ wake_dirty_schedulers(ERTS_DIRTY_IO_RUNQ, 0);
+ }
+#endif
- erts_smp_mtx_lock(&schdlr_sspnd.mtx);
+ wait_until_msb:
- }
+ ASSERT(chng_flg & erts_smp_atomic32_read_nob(&schdlr_sspnd.changing));
- ASSERT(res != ERTS_SCHDLR_SSPND_DONE_MSCHED_BLOCKED
- ? (ERTS_SCHDLR_SSPND_CHNG_WAITER
- & erts_smp_atomic32_read_nob(&schdlr_sspnd.changing))
- : (ERTS_SCHDLR_SSPND_CHNG_WAITER
- == erts_smp_atomic32_read_nob(&schdlr_sspnd.changing)));
- erts_smp_atomic32_read_band_nob(&schdlr_sspnd.changing,
- ~ERTS_SCHDLR_SSPND_CHNG_WAITER);
+ plp = proclist_create(p);
+ erts_proclist_store_last(&msbp->chngq, plp);
+ resume_proc = 0;
+ if (schdlr_sspnd.msb.ongoing)
+ res = ERTS_SCHDLR_SSPND_YIELD_DONE_MSCHED_BLOCKED;
+ else
+ res = ERTS_SCHDLR_SSPND_YIELD_DONE_NMSCHED_BLOCKED;
}
- plp = proclist_create(p);
- erts_proclist_store_last(&schdlr_sspnd.msb.procs, plp);
- ASSERT(p->scheduler_data);
+ ASSERT(erts_proc_sched_data(p));
}
}
- else if (!ongoing_multi_scheduling_block()) {
- /* unblock not ongoing */
- ASSERT(!schdlr_sspnd.msb.procs);
- res = ERTS_SCHDLR_SSPND_DONE;
+ else if (!msbp->ongoing) {
+ ASSERT(!msbp->blckrs);
+ goto unblock_res;
}
else { /* ------ UNBLOCK ------ */
- if (p->flags & F_HAVE_BLCKD_MSCHED) {
- ErtsProcList *plp = erts_proclist_peek_first(schdlr_sspnd.msb.procs);
-
- while (plp) {
- ErtsProcList *tmp_plp = plp;
- plp = erts_proclist_peek_next(schdlr_sspnd.msb.procs, plp);
- if (erts_proclist_same(tmp_plp, p)) {
- erts_proclist_remove(&schdlr_sspnd.msb.procs, tmp_plp);
- proclist_destroy(tmp_plp);
- if (!all)
- break;
+ if (p->flags & have_blckd_flg) {
+ ErtsProcList *plps[2];
+ ErtsProcList *plp;
+ int limit = 0;
+
+ plps[limit++] = erts_proclist_peek_first(msbp->blckrs);
+ if (all)
+ plps[limit++] = erts_proclist_peek_first(msbp->chngq);
+
+ for (ix = 0; ix < limit; ix++) {
+ plp = plps[ix];
+ while (plp) {
+ ErtsProcList *tmp_plp = plp;
+ plp = erts_proclist_peek_next(msbp->blckrs, plp);
+ if (erts_proclist_same(tmp_plp, p)) {
+ erts_proclist_remove(&msbp->blckrs, tmp_plp);
+ proclist_destroy(tmp_plp);
+ if (!all)
+ break;
+ }
}
}
}
- if (schdlr_sspnd.msb.procs)
- res = ERTS_SCHDLR_SSPND_DONE_MSCHED_BLOCKED;
- else {
- ERTS_SCHDLR_SSPND_CHNG_SET(ERTS_SCHDLR_SSPND_CHNG_MSB, 0);
- p->flags &= ~F_HAVE_BLCKD_MSCHED;
- schdlr_sspnd.msb.ongoing = 0;
- if (schdlr_sspnd.online == 1) {
+ if (!msbp->blckrs && !msbp->chngq) {
+ int online = (int) schdlr_sspnd_get_nscheds(&schdlr_sspnd.online,
+ ERTS_SCHED_NORMAL);
+ erts_smp_atomic32_read_bor_nob(&schdlr_sspnd.changing,
+ chng_flg);
+ p->flags &= ~have_blckd_flg;
+ msbp->ongoing = 0;
+ if (online == 1) {
/* No normal schedulers to resume */
- ASSERT(erts_smp_atomic32_read_nob(&schdlr_sspnd.active) == 1);
- ERTS_SCHDLR_SSPND_CHNG_SET(0, ERTS_SCHDLR_SSPND_CHNG_MSB);
+ ASSERT(schdlr_sspnd_get_nscheds(&schdlr_sspnd.active,
+ ERTS_SCHED_NORMAL) == 1);
+#ifndef ERTS_DIRTY_SCHEDULERS
+ erts_smp_atomic32_read_band_nob(&schdlr_sspnd.changing,
+ ~chng_flg);
+#endif
}
- else {
- online = schdlr_sspnd.online;
+ else if (!(schdlr_sspnd.msb.ongoing|schdlr_sspnd.nmsb.ongoing)) {
if (plocks) {
have_unlocked_plocks = 1;
erts_smp_proc_unlock(p, plocks);
@@ -8031,83 +7990,91 @@ erts_block_multi_scheduling(Process *p, ErtsProcLocks plocks, int on, int all)
suspend_run_queue(ERTS_RUNQ_IX(ix));
}
#ifdef ERTS_DIRTY_SCHEDULERS
- ERTS_SCHDLR_SSPND_DIRTY_CPU_CHNG_SET(ERTS_SCHDLR_SSPND_CHNG_MSB, 0);
- schdlr_sspnd.msb.dirty_cpu_wait_active = schdlr_sspnd.dirty_cpu_online;
- for (ix = 0; ix < schdlr_sspnd.dirty_cpu_online; ix++) {
- ssi = ERTS_DIRTY_CPU_SCHED_SLEEP_INFO_IX(ix);
- scheduler_ssi_resume_wake(ssi);
- erts_smp_atomic32_read_band_nob(&ssi->flags,
- ~ERTS_SSI_FLG_SUSPENDED);
- }
- wake_dirty_schedulers(ERTS_DIRTY_CPU_RUNQ, 0);
-
- ERTS_SCHDLR_SSPND_DIRTY_IO_CHNG_SET(ERTS_SCHDLR_SSPND_CHNG_MSB, 0);
- schdlr_sspnd.msb.dirty_io_wait_active = erts_no_dirty_io_schedulers;
- for (ix = 0; ix < erts_no_dirty_io_schedulers; ix++) {
- ssi = ERTS_DIRTY_IO_SCHED_SLEEP_INFO_IX(ix);
- scheduler_ssi_resume_wake(ssi);
- erts_smp_atomic32_read_band_nob(&ssi->flags,
- ~ERTS_SSI_FLG_SUSPENDED);
- }
- wake_dirty_schedulers(ERTS_DIRTY_IO_RUNQ, 0);
+ if (!normal) {
+ ASSERT(!schdlr_sspnd.msb.ongoing);
+ online = (int) schdlr_sspnd_get_nscheds(&schdlr_sspnd.online,
+ ERTS_SCHED_DIRTY_CPU);
+ for (ix = 0; ix < online; ix++) {
+ ssi = ERTS_DIRTY_CPU_SCHED_SLEEP_INFO_IX(ix);
+ scheduler_ssi_resume_wake(ssi);
+ }
+
+ for (ix = 0; ix < erts_no_dirty_io_schedulers; ix++) {
+ ssi = ERTS_DIRTY_IO_SCHED_SLEEP_INFO_IX(ix);
+ scheduler_ssi_resume_wake(ssi);
+ }
+ }
#endif
- res = ERTS_SCHDLR_SSPND_DONE;
}
+
+ unblock_res:
+ if (schdlr_sspnd.msb.ongoing)
+ res = ERTS_SCHDLR_SSPND_DONE_MSCHED_BLOCKED;
+ else if (schdlr_sspnd.nmsb.ongoing)
+ res = ERTS_SCHDLR_SSPND_DONE_NMSCHED_BLOCKED;
+ else
+ res = ERTS_SCHDLR_SSPND_DONE;
}
erts_smp_mtx_unlock(&schdlr_sspnd.mtx);
+
if (have_unlocked_plocks)
erts_smp_proc_lock(p, plocks);
- return res;
-}
-#ifdef DEBUG
-void
-erts_dbg_multi_scheduling_return_trap(Process *p, Eterm return_value)
-{
- if (return_value == am_blocked) {
- erts_aint32_t active = erts_smp_atomic32_read_nob(&schdlr_sspnd.active);
- ASSERT(1 <= active && active <= 2);
- ASSERT(ERTS_PROC_GET_SCHDATA(p)->no == 1);
+ if (resume_proc) {
+ if (!(plocks & ERTS_PROC_LOCK_STATUS))
+ erts_smp_proc_lock(p, ERTS_PROC_LOCK_STATUS);
+ resume_process(p, plocks|ERTS_PROC_LOCK_STATUS);
+ if (!(plocks & ERTS_PROC_LOCK_STATUS))
+ erts_smp_proc_unlock(p, ERTS_PROC_LOCK_STATUS);
}
+
+ return res;
}
-#endif
int
erts_is_multi_scheduling_blocked(void)
{
int res;
erts_smp_mtx_lock(&schdlr_sspnd.mtx);
- res = schdlr_sspnd.msb.procs != NULL;
+ if (schdlr_sspnd.msb.blckrs)
+ res = 1;
+ else if (schdlr_sspnd.nmsb.blckrs)
+ res = -1;
+ else
+ res = 0;
erts_smp_mtx_unlock(&schdlr_sspnd.mtx);
return res;
}
Eterm
-erts_multi_scheduling_blockers(Process *p)
+erts_multi_scheduling_blockers(Process *p, int normal)
{
Eterm res = NIL;
+ ErtsMultiSchedulingBlock *msbp;
+
+ msbp = normal ? &schdlr_sspnd.nmsb : &schdlr_sspnd.msb;
erts_smp_mtx_lock(&schdlr_sspnd.mtx);
- if (!erts_proclist_is_empty(schdlr_sspnd.msb.procs)) {
+ if (!erts_proclist_is_empty(msbp->blckrs)) {
Eterm *hp, *hp_end;
ErtsProcList *plp1, *plp2;
Uint max_size = 0;
- for (plp1 = erts_proclist_peek_first(schdlr_sspnd.msb.procs);
+ for (plp1 = erts_proclist_peek_first(msbp->blckrs);
plp1;
- plp1 = erts_proclist_peek_next(schdlr_sspnd.msb.procs, plp1)) {
+ plp1 = erts_proclist_peek_next(msbp->blckrs, plp1)) {
max_size += 2;
}
ASSERT(max_size);
hp = HAlloc(p, max_size);
hp_end = hp + max_size;
- for (plp1 = erts_proclist_peek_first(schdlr_sspnd.msb.procs);
+ for (plp1 = erts_proclist_peek_first(msbp->blckrs);
plp1;
- plp1 = erts_proclist_peek_next(schdlr_sspnd.msb.procs, plp1)) {
- for (plp2 = erts_proclist_peek_first(schdlr_sspnd.msb.procs);
+ plp1 = erts_proclist_peek_next(msbp->blckrs, plp1)) {
+ for (plp2 = erts_proclist_peek_first(msbp->blckrs);
plp2->pid != plp1->pid;
- plp2 = erts_proclist_peek_next(schdlr_sspnd.msb.procs, plp2));
+ plp2 = erts_proclist_peek_next(msbp->blckrs, plp2));
if (plp2 == plp1) {
res = CONS(hp, plp1->pid, res);
hp += 2;
@@ -8176,39 +8143,6 @@ sched_thread_func(void *vesdp)
#endif
erts_thread_init_float();
- if (no == 1) {
- erts_thr_progress_active(esdp, 0);
- erts_thr_progress_prepare_wait(esdp);
- }
-
- erts_smp_mtx_lock(&schdlr_sspnd.mtx);
-
- ASSERT(erts_smp_atomic32_read_nob(&schdlr_sspnd.changing)
- & ERTS_SCHDLR_SSPND_CHNG_ONLN);
-
- if (--schdlr_sspnd.curr_online == schdlr_sspnd.wait_curr_online) {
- erts_smp_atomic32_read_band_nob(&schdlr_sspnd.changing,
- ~ERTS_SCHDLR_SSPND_CHNG_ONLN);
- if (no != 1)
-#ifdef ERTS_DIRTY_SCHEDULERS
- erts_smp_cnd_broadcast(&schdlr_sspnd.cnd);
-#else
- erts_smp_cnd_signal(&schdlr_sspnd.cnd);
-#endif
- }
-
- if (no == 1) {
- while (schdlr_sspnd.curr_online != schdlr_sspnd.wait_curr_online)
- erts_smp_cnd_wait(&schdlr_sspnd.cnd, &schdlr_sspnd.mtx);
- ERTS_SCHDLR_SSPND_CHNG_SET(0, ERTS_SCHDLR_SSPND_CHNG_WAITER);
- }
- erts_smp_mtx_unlock(&schdlr_sspnd.mtx);
-
- if (no == 1) {
- erts_thr_progress_finalize_wait(esdp);
- erts_thr_progress_active(esdp, 1);
- }
-
#ifdef ERTS_DO_VERIFY_UNUSED_TEMP_ALLOC
esdp->verify_unused_temp_alloc
= erts_alloc_get_verify_unused_temp_alloc(
@@ -8218,7 +8152,7 @@ sched_thread_func(void *vesdp)
process_main();
/* No schedulers should *ever* terminate */
- erl_exit(ERTS_ABORT_EXIT,
+ erts_exit(ERTS_ABORT_EXIT,
"Scheduler thread number %beu terminated\n",
no);
return NULL;
@@ -8263,27 +8197,9 @@ sched_dirty_cpu_thread_func(void *vesdp)
#endif
erts_thread_init_float();
- erts_smp_mtx_lock(&schdlr_sspnd.mtx);
- ASSERT(erts_smp_atomic32_read_nob(&schdlr_sspnd.dirty_cpu_changing)
- & ERTS_SCHDLR_SSPND_CHNG_ONLN);
-
- if (--schdlr_sspnd.dirty_cpu_curr_online == schdlr_sspnd.dirty_cpu_wait_curr_online) {
- erts_smp_atomic32_read_band_nob(&schdlr_sspnd.dirty_cpu_changing,
- ~ERTS_SCHDLR_SSPND_CHNG_ONLN);
- if (no != 1)
- erts_smp_cnd_broadcast(&schdlr_sspnd.cnd);
- }
-
- if (no == 1) {
- while (schdlr_sspnd.dirty_cpu_curr_online != schdlr_sspnd.dirty_cpu_wait_curr_online)
- erts_smp_cnd_wait(&schdlr_sspnd.cnd, &schdlr_sspnd.mtx);
- ERTS_SCHDLR_SSPND_DIRTY_CPU_CHNG_SET(0, ERTS_SCHDLR_SSPND_CHNG_WAITER);
- }
- erts_smp_mtx_unlock(&schdlr_sspnd.mtx);
-
process_main();
/* No schedulers should *ever* terminate */
- erl_exit(ERTS_ABORT_EXIT,
+ erts_exit(ERTS_ABORT_EXIT,
"Dirty CPU scheduler thread number %beu terminated\n",
no);
return NULL;
@@ -8326,27 +8242,9 @@ sched_dirty_io_thread_func(void *vesdp)
#endif
erts_thread_init_float();
- erts_smp_mtx_lock(&schdlr_sspnd.mtx);
- ASSERT(erts_smp_atomic32_read_nob(&schdlr_sspnd.dirty_io_changing)
- & ERTS_SCHDLR_SSPND_CHNG_ONLN);
-
- if (--schdlr_sspnd.dirty_io_curr_online == schdlr_sspnd.dirty_io_wait_curr_online) {
- erts_smp_atomic32_read_band_nob(&schdlr_sspnd.dirty_io_changing,
- ~ERTS_SCHDLR_SSPND_CHNG_ONLN);
- if (no != 1)
- erts_smp_cnd_broadcast(&schdlr_sspnd.cnd);
- }
-
- if (no == 1) {
- while (schdlr_sspnd.dirty_io_curr_online != schdlr_sspnd.dirty_io_wait_curr_online)
- erts_smp_cnd_wait(&schdlr_sspnd.cnd, &schdlr_sspnd.mtx);
- ERTS_SCHDLR_SSPND_DIRTY_IO_CHNG_SET(0, ERTS_SCHDLR_SSPND_CHNG_WAITER);
- }
- erts_smp_mtx_unlock(&schdlr_sspnd.mtx);
-
process_main();
/* No schedulers should *ever* terminate */
- erl_exit(ERTS_ABORT_EXIT,
+ erts_exit(ERTS_ABORT_EXIT,
"Dirty I/O scheduler thread number %beu terminated\n",
no);
return NULL;
@@ -8376,12 +8274,12 @@ erts_start_schedulers(void)
erts_snprintf(opts.name, 16, "runq_supervisor");
erts_atomic_init_nob(&runq_supervisor_sleeping, 0);
if (0 != ethr_event_init(&runq_supervision_event))
- erl_exit(1, "Failed to create run-queue supervision event\n");
+ erts_exit(ERTS_ERROR_EXIT, "Failed to create run-queue supervision event\n");
if (0 != ethr_thr_create(&runq_supervisor_tid,
runq_supervisor,
NULL,
&opts))
- erl_exit(1, "Failed to create run-queue supervision thread\n");
+ erts_exit(ERTS_ERROR_EXIT, "Failed to create run-queue supervision thread\n");
}
#endif
@@ -8419,14 +8317,14 @@ erts_start_schedulers(void)
erts_snprintf(opts.name, 16, "%d_dirty_cpu_scheduler", ix + 1);
res = ethr_thr_create(&esdp->tid,sched_dirty_cpu_thread_func,(void*)esdp,&opts);
if (res != 0)
- erl_exit(1, "Failed to create dirty cpu scheduler thread %d\n", ix);
+ erts_exit(ERTS_ERROR_EXIT, "Failed to create dirty cpu scheduler thread %d\n", ix);
}
for (ix = 0; ix < erts_no_dirty_io_schedulers; ix++) {
ErtsSchedulerData *esdp = ERTS_DIRTY_IO_SCHEDULER_IX(ix);
erts_snprintf(opts.name, 16, "%d_dirty_io_scheduler", ix + 1);
res = ethr_thr_create(&esdp->tid,sched_dirty_io_thread_func,(void*)esdp,&opts);
if (res != 0)
- erl_exit(1, "Failed to create dirty io scheduler thread %d\n", ix);
+ erts_exit(ERTS_ERROR_EXIT, "Failed to create dirty io scheduler thread %d\n", ix);
}
}
#endif
@@ -8438,10 +8336,10 @@ erts_start_schedulers(void)
res = ethr_thr_create(&aux_tid, aux_thread, NULL, &opts);
if (res != 0)
- erl_exit(1, "Failed to create aux thread\n");
+ erts_exit(ERTS_ERROR_EXIT, "Failed to create aux thread\n");
if (actual < 1)
- erl_exit(1,
+ erts_exit(ERTS_ERROR_EXIT,
"Failed to create any scheduler-threads: %s (%d)\n",
erl_errno_id(res),
res);
@@ -8619,9 +8517,23 @@ pid2proc_not_running(Process *c_p, ErtsProcLocks c_p_locks,
if (!suspend_process(c_p, rp)) {
/* Other process running */
- ASSERT(ERTS_PSFLG_RUNNING
+ ASSERT((ERTS_PSFLG_RUNNING | ERTS_PSFLG_DIRTY_RUNNING)
& erts_smp_atomic32_read_nob(&rp->state));
+#ifdef ERTS_DIRTY_SCHEDULERS
+ if (!suspend
+ && (erts_smp_atomic32_read_nob(&rp->state)
+ & ERTS_PSFLG_DIRTY_RUNNING)) {
+ ErtsProcLocks need_locks = pid_locks & ~ERTS_PROC_LOCK_STATUS;
+ if (need_locks && erts_smp_proc_trylock(rp, need_locks) == EBUSY) {
+ erts_smp_proc_unlock(rp, ERTS_PROC_LOCK_STATUS);
+ rp = erts_pid2proc(c_p, c_p_locks|ERTS_PROC_LOCK_STATUS,
+ pid, pid_locks|ERTS_PROC_LOCK_STATUS);
+ }
+ goto done;
+ }
+#endif
+
running:
/*
@@ -8646,7 +8558,7 @@ pid2proc_not_running(Process *c_p, ErtsProcLocks c_p_locks,
else {
ErtsProcLocks need_locks = pid_locks & ~ERTS_PROC_LOCK_STATUS;
if (need_locks && erts_smp_proc_trylock(rp, need_locks) == EBUSY) {
- if (ERTS_PSFLG_RUNNING_SYS
+ if ((ERTS_PSFLG_RUNNING_SYS|ERTS_PSFLG_DIRTY_RUNNING_SYS)
& erts_smp_atomic32_read_nob(&rp->state)) {
/* Executing system task... */
resume_process(rp, ERTS_PROC_LOCK_STATUS);
@@ -8673,7 +8585,7 @@ pid2proc_not_running(Process *c_p, ErtsProcLocks c_p_locks,
* from being selected for normal execution regardless
* of locks held or not held on it...
*/
- ASSERT(!(ERTS_PSFLG_RUNNING
+ ASSERT(!((ERTS_PSFLG_RUNNING|ERTS_PSFLG_DIRTY_RUNNING_SYS)
& erts_smp_atomic32_read_nob(&rp->state)));
if (!suspend)
@@ -9214,28 +9126,43 @@ erts_run_queues_len(Uint *qlen, int atomic_queues_read, int incl_active_sched)
}
Eterm
-erts_process_status(Process *c_p, ErtsProcLocks c_p_locks,
- Process *rp, Eterm rpid)
+erts_process_state2status(erts_aint32_t state)
+{
+ if (state & ERTS_PSFLG_FREE)
+ return am_free;
+
+ if (state & ERTS_PSFLG_EXITING)
+ return am_exiting;
+
+ if (state & ERTS_PSFLG_GC)
+ return am_garbage_collecting;
+
+ if (state & ERTS_PSFLG_SUSPENDED)
+ return am_suspended;
+
+ if (state & (ERTS_PSFLG_RUNNING
+ | ERTS_PSFLG_RUNNING_SYS
+ | ERTS_PSFLG_DIRTY_RUNNING
+ | ERTS_PSFLG_DIRTY_RUNNING_SYS))
+ return am_running;
+
+ if (state & (ERTS_PSFLG_ACTIVE
+ | ERTS_PSFLG_ACTIVE_SYS
+ | ERTS_PSFLG_DIRTY_ACTIVE_SYS))
+ return am_runnable;
+
+ return am_waiting;
+}
+
+Eterm
+erts_process_status(Process *rp, Eterm rpid)
{
Eterm res = am_undefined;
Process *p = rp ? rp : erts_proc_lookup_raw(rpid);
if (p) {
erts_aint32_t state = erts_smp_atomic32_read_acqb(&p->state);
- if (state & ERTS_PSFLG_FREE)
- res = am_free;
- else if (state & ERTS_PSFLG_EXITING)
- res = am_exiting;
- else if (state & ERTS_PSFLG_GC)
- res = am_garbage_collecting;
- else if (state & ERTS_PSFLG_SUSPENDED)
- res = am_suspended;
- else if (state & ERTS_PSFLG_RUNNING)
- res = am_running;
- else if (state & ERTS_PSFLG_ACTIVE)
- res = am_runnable;
- else
- res = am_waiting;
+ res = erts_process_state2status(state);
}
#ifdef ERTS_SMP
else {
@@ -9437,6 +9364,90 @@ erts_set_process_priority(Process *p, Eterm value)
}
}
+static int
+scheduler_gc_proc(Process *c_p, int reds_left)
+{
+ int fcalls, reds;
+ if (!ERTS_PROC_GET_SAVED_CALLS_BUF(c_p))
+ fcalls = reds_left;
+ else
+ fcalls = reds_left - CONTEXT_REDS;
+ reds = erts_garbage_collect_nobump(c_p, 0, c_p->arg_reg, c_p->arity, fcalls);
+ ASSERT(reds_left >= reds);
+ return reds;
+}
+
+static ERTS_INLINE void
+clean_dirty_start(Process *p)
+{
+#if defined(ERTS_DIRTY_SCHEDULERS) && !defined(ARCH_64)
+ void *ptr = ERTS_PROC_SET_DIRTY_CPU_START(p, NULL);
+ if (ptr)
+ erts_free(ERTS_ALC_T_DIRTY_START, ptr);
+#endif
+}
+
+static ERTS_INLINE void
+save_dirty_start(ErtsSchedulerData *esdp, Process *c_p)
+{
+#ifdef ERTS_DIRTY_SCHEDULERS
+ if (ERTS_RUNQ_IS_DIRTY_CPU_RUNQ(esdp->run_queue)) {
+ ErtsMonotonicTime time = erts_get_monotonic_time(esdp);
+#ifdef ARCH_64
+ ERTS_PROC_SET_DIRTY_CPU_START(c_p, (void *) time);
+#else
+ ErtsMonotonicTime *stimep;
+
+ stimep = (ErtsMonotonicTime *) ERTS_PROC_GET_DIRTY_CPU_START(c_p);
+ if (!stimep) {
+ stimep = erts_alloc(ERTS_ALC_T_DIRTY_START,
+ sizeof(ErtsMonotonicTime));
+ ERTS_PROC_SET_DIRTY_CPU_START(c_p, (void *) stimep);
+ }
+ *stimep = time;
+#endif
+ }
+#endif
+}
+
+static ERTS_INLINE int
+get_dirty_reds(ErtsSchedulerData *esdp, Process *c_p)
+{
+
+#ifndef ERTS_DIRTY_SCHEDULERS
+ return -1;
+#else
+ ErtsMonotonicTime stime, time;
+
+ if (!ERTS_RUNQ_IS_DIRTY_CPU_RUNQ(esdp->run_queue))
+ return 1;
+
+#ifdef ARCH_64
+ stime = (ErtsMonotonicTime) ERTS_PROC_GET_DIRTY_CPU_START(c_p);
+#else
+ {
+ ErtsMonotonicTime *stimep;
+ stimep = (ErtsMonotonicTime *) ERTS_PROC_GET_DIRTY_CPU_START(c_p);
+ ASSERT(stimep);
+ stime = *stimep;
+ }
+#endif
+
+ time = erts_get_monotonic_time(esdp);
+
+ ASSERT(stime && stime < time);
+
+ time -= stime;
+ time = ERTS_MONOTONIC_TO_USEC(time);
+ time *= 2;
+
+ if (time > INT_MAX)
+ return INT_MAX;
+ return (int) time;
+#endif
+
+}
+
/*
* schedule() is called from BEAM (process_main()) or HiPE
* (hipe_mode_switch()) when the current process is to be
@@ -9467,6 +9478,7 @@ Process *schedule(Process *p, int calls)
int reds;
Uint32 flags;
erts_aint32_t state = 0; /* Supress warning... */
+ int is_normal_sched;
ERTS_MSACC_DECLARE_CACHE();
@@ -9496,26 +9508,45 @@ Process *schedule(Process *p, int calls)
*/
if (!p) { /* NULL in the very first schedule() call */
esdp = erts_get_scheduler_data();
+ is_normal_sched = !ERTS_SCHEDULER_IS_DIRTY(esdp);
rq = erts_get_runq_current(esdp);
ASSERT(esdp);
fcalls = (int) erts_smp_atomic32_read_acqb(&function_calls);
actual_reds = reds = 0;
erts_smp_runq_lock(rq);
} else {
- sched_out_proc:
-
- ASSERT(!(p->flags & F_DELAY_GC));
-
#ifdef ERTS_SMP
- ERTS_SMP_CHK_HAVE_ONLY_MAIN_PROC_LOCK(p);
+#ifdef ERTS_DIRTY_SCHEDULERS
+ esdp = p->scheduler_data;
+ is_normal_sched = esdp != NULL;
+ if (is_normal_sched)
+ ASSERT(!ERTS_SCHEDULER_IS_DIRTY(esdp));
+ else {
+ esdp = erts_get_scheduler_data();
+ ASSERT(ERTS_SCHEDULER_IS_DIRTY(esdp));
+ }
+#else
esdp = p->scheduler_data;
+ is_normal_sched = 1;
+#endif
ASSERT(esdp->current_process == p
|| esdp->free_process == p);
#else
esdp = erts_scheduler_data;
ASSERT(esdp->current_process == p);
+ is_normal_sched = 1;
#endif
- reds = actual_reds = calls - esdp->virtual_reds;
+
+ sched_out_proc:
+
+ ERTS_SMP_CHK_HAVE_ONLY_MAIN_PROC_LOCK(p);
+
+ if (is_normal_sched)
+ reds = actual_reds = calls - esdp->virtual_reds;
+ else
+ reds = actual_reds = get_dirty_reds(esdp, p);
+
+ ASSERT(actual_reds >= 0);
if (reds < ERTS_PROC_MIN_CONTEXT_SWITCH_REDS_COST)
reds = ERTS_PROC_MIN_CONTEXT_SWITCH_REDS_COST;
esdp->virtual_reds = 0;
@@ -9527,29 +9558,41 @@ Process *schedule(Process *p, int calls)
p->reds += actual_reds;
- erts_smp_proc_lock(p, ERTS_PROC_LOCK_STATUS);
+#ifdef ERTS_SMP
+ erts_smp_proc_lock(p, ERTS_PROC_LOCK_TRACE);
+ if (p->trace_msg_q) {
+ erts_smp_proc_unlock(p, ERTS_PROC_LOCK_TRACE);
+ erts_schedule_flush_trace_messages(p->common.id);
+ } else
+ erts_smp_proc_unlock(p, ERTS_PROC_LOCK_TRACE);
+#endif
- state = erts_smp_atomic32_read_acqb(&p->state);
+ state = erts_smp_atomic32_read_nob(&p->state);
if (IS_TRACED(p)) {
if (IS_TRACED_FL(p, F_TRACE_CALLS) && !(state & ERTS_PSFLG_FREE))
erts_schedule_time_break(p, ERTS_BP_CALL_TIME_SCHEDULE_OUT);
- if (state & (ERTS_PSFLG_FREE|ERTS_PSFLG_EXITING)) {
+ if ((state & (ERTS_PSFLG_FREE|ERTS_PSFLG_EXITING)) == ERTS_PSFLG_EXITING) {
if (ARE_TRACE_FLAGS_ON(p, F_TRACE_SCHED_EXIT))
- trace_sched(p, ((state & ERTS_PSFLG_FREE)
- ? am_out_exited
- : am_out_exiting));
+ trace_sched(p, ERTS_PROC_LOCK_MAIN,
+ ((state & ERTS_PSFLG_FREE)
+ ? am_out_exited
+ : am_out_exiting));
}
else {
- if (ARE_TRACE_FLAGS_ON(p, F_TRACE_SCHED))
- trace_sched(p, am_out);
- else if (ARE_TRACE_FLAGS_ON(p, F_TRACE_SCHED_PROCS))
- trace_virtual_sched(p, am_out);
+ if (ARE_TRACE_FLAGS_ON(p, F_TRACE_SCHED) ||
+ ARE_TRACE_FLAGS_ON(p, F_TRACE_SCHED_PROCS))
+ trace_sched(p, ERTS_PROC_LOCK_MAIN, am_out);
}
}
+ erts_smp_proc_lock(p, ERTS_PROC_LOCK_STATUS);
+
+ /* have to re-read state after taking lock */
+ state = erts_smp_atomic32_read_nob(&p->state);
+
#ifdef ERTS_SMP
- if (state & ERTS_PSFLG_PENDING_EXIT)
+ if (is_normal_sched && (state & ERTS_PSFLG_PENDING_EXIT))
erts_handle_pending_exit(p, (ERTS_PROC_LOCK_MAIN
| ERTS_PROC_LOCK_STATUS));
if (p->pending_suspenders)
@@ -9559,7 +9602,8 @@ Process *schedule(Process *p, int calls)
esdp->reductions += reds;
- schedule_out_process(rq, state, p, proxy_p); /* Returns with rq locked! */
+ /* schedule_out_process() returns with rq locked! */
+ schedule_out_process(rq, state, p, proxy_p, is_normal_sched);
proxy_p = NULL;
ERTS_PROC_REDUCTIONS_EXECUTED(esdp, rq,
@@ -9577,13 +9621,20 @@ Process *schedule(Process *p, int calls)
ERTS_MSACC_SET_STATE_CACHED_M(ERTS_MSACC_STATE_OTHER);
if (state & ERTS_PSFLG_FREE) {
+ if (!is_normal_sched) {
+ ASSERT(p->flags & F_DELAYED_DEL_PROC);
+ erts_proc_dec_refc(p);
+ }
+ else {
#ifdef ERTS_SMP
- ASSERT(esdp->free_process == p);
- esdp->free_process = NULL;
+ ASSERT(esdp->free_process == p);
+ esdp->free_process = NULL;
#else
- erts_proc_dec_refc(p);
+ erts_proc_dec_refc(p);
#endif
+ }
}
+
#ifdef ERTS_SMP
ASSERT(!esdp->free_process);
#endif
@@ -9591,7 +9642,7 @@ Process *schedule(Process *p, int calls)
ERTS_SMP_CHK_NO_PROC_LOCKS;
- if (!ERTS_SCHEDULER_IS_DIRTY(esdp)) {
+ if (is_normal_sched) {
if (esdp->check_time_reds >= ERTS_CHECK_TIME_REDS)
(void) erts_get_monotonic_time(esdp);
@@ -9605,23 +9656,15 @@ Process *schedule(Process *p, int calls)
}
- ERTS_SMP_LC_ASSERT(ERTS_SCHEDULER_IS_DIRTY(esdp)
- || !erts_thr_progress_is_blocking());
+ ERTS_SMP_LC_ASSERT(!is_normal_sched || !erts_thr_progress_is_blocking());
check_activities_to_run: {
+ erts_aint32_t psflg_running, psflg_running_sys;
#ifdef ERTS_SMP
ErtsMigrationPaths *mps;
ErtsMigrationPath *mp;
- if (!ERTS_SCHEDULER_IS_DIRTY(esdp)) {
- ErtsProcList *pnd_xtrs = rq->procs.pending_exiters;
- if (erts_proclist_fetch(&pnd_xtrs, NULL)) {
- rq->procs.pending_exiters = NULL;
- erts_smp_runq_unlock(rq);
- handle_pending_exiters(pnd_xtrs);
- erts_smp_runq_lock(rq);
- }
-
+ if (is_normal_sched) {
if (rq->check_balance_reds <= 0)
check_balance(rq);
@@ -9638,32 +9681,35 @@ Process *schedule(Process *p, int calls)
continue_check_activities_to_run:
flags = ERTS_RUNQ_FLGS_GET_NOB(rq);
continue_check_activities_to_run_known_flags:
- ASSERT(ERTS_SCHEDULER_IS_DIRTY(esdp)
- || flags & ERTS_RUNQ_FLG_NONEMPTY);
+ ASSERT(!is_normal_sched || (flags & ERTS_RUNQ_FLG_NONEMPTY));
- if (flags & (ERTS_RUNQ_FLG_CHK_CPU_BIND|ERTS_RUNQ_FLG_SUSPENDED)) {
- if (flags & ERTS_RUNQ_FLG_SUSPENDED) {
- (void) ERTS_RUNQ_FLGS_UNSET_NOB(rq, ERTS_RUNQ_FLG_EXEC);
+ if (!is_normal_sched) {
+ if (erts_smp_atomic32_read_acqb(&esdp->ssi->flags)
+ & ERTS_SSI_FLG_SUSPENDED) {
suspend_scheduler(esdp);
- flags = ERTS_RUNQ_FLGS_SET_NOB(rq, ERTS_RUNQ_FLG_EXEC);
- flags |= ERTS_RUNQ_FLG_EXEC;
- }
- if (flags & ERTS_RUNQ_FLG_CHK_CPU_BIND) {
- flags = ERTS_RUNQ_FLGS_UNSET(rq, ERTS_RUNQ_FLG_CHK_CPU_BIND);
- flags &= ~ ERTS_RUNQ_FLG_CHK_CPU_BIND;
- erts_sched_check_cpu_bind(esdp);
}
}
-#ifdef ERTS_DIRTY_SCHEDULERS
- else if (ERTS_SCHEDULER_IS_DIRTY(esdp)
- && (erts_smp_atomic32_read_acqb(&esdp->ssi->flags)
- & ERTS_SSI_FLG_SUSPENDED))
- suspend_scheduler(esdp);
-#endif
-
- if (!ERTS_SCHEDULER_IS_DIRTY(esdp)) {
+ else {
erts_aint32_t aux_work;
- int leader_update = erts_thr_progress_update(esdp);
+ int leader_update;
+
+ ASSERT(is_normal_sched);
+
+ if (flags & (ERTS_RUNQ_FLG_CHK_CPU_BIND|ERTS_RUNQ_FLG_SUSPENDED)) {
+ if (flags & ERTS_RUNQ_FLG_SUSPENDED) {
+ (void) ERTS_RUNQ_FLGS_UNSET_NOB(rq, ERTS_RUNQ_FLG_EXEC);
+ suspend_scheduler(esdp);
+ flags = ERTS_RUNQ_FLGS_SET_NOB(rq, ERTS_RUNQ_FLG_EXEC);
+ flags |= ERTS_RUNQ_FLG_EXEC;
+ }
+ if (flags & ERTS_RUNQ_FLG_CHK_CPU_BIND) {
+ flags = ERTS_RUNQ_FLGS_UNSET(rq, ERTS_RUNQ_FLG_CHK_CPU_BIND);
+ flags &= ~ERTS_RUNQ_FLG_CHK_CPU_BIND;
+ erts_sched_check_cpu_bind(esdp);
+ }
+ }
+
+ leader_update = erts_thr_progress_update(esdp);
aux_work = erts_atomic32_read_acqb(&esdp->ssi->aux_work);
if (aux_work | leader_update) {
erts_smp_runq_unlock(rq);
@@ -9689,19 +9735,13 @@ Process *schedule(Process *p, int calls)
flags = ERTS_RUNQ_FLGS_GET_NOB(rq);
-#ifdef ERTS_DIRTY_SCHEDULERS
- if (ERTS_RUNQ_IX_IS_DIRTY(rq->ix) && rq->halt_in_progress) {
- /*
- * TODO: if halt in progress, need to put the dirty scheduler
- * to sleep somewhere around here to prevent it from picking up
- * new work
- */
+ if (!is_normal_sched && rq->halt_in_progress) {
+ /* Wait for emulator to terminate... */
+ while (1)
+ erts_milli_sleep(1000*1000);
}
- else
-#endif
-
- if ((!(flags & ERTS_RUNQ_FLGS_QMASK) && !rq->misc.start)
- || (rq->halt_in_progress && ERTS_EMPTY_RUNQ_PORTS(rq))) {
+ else if ((!(flags & ERTS_RUNQ_FLGS_QMASK) && !rq->misc.start)
+ || (rq->halt_in_progress && ERTS_EMPTY_RUNQ_PORTS(rq))) {
/* Prepare for scheduler wait */
#ifdef ERTS_SMP
ERTS_SMP_LC_ASSERT(erts_smp_lc_runq_is_locked(rq));
@@ -9715,7 +9755,7 @@ Process *schedule(Process *p, int calls)
if (flags & ERTS_RUNQ_FLG_INACTIVE)
empty_runq(rq);
else {
- if (!ERTS_RUNQ_IX_IS_DIRTY(rq->ix) && try_steal_task(rq))
+ if (is_normal_sched && try_steal_task(rq))
goto continue_check_activities_to_run;
empty_runq(rq);
@@ -9744,9 +9784,9 @@ Process *schedule(Process *p, int calls)
goto check_activities_to_run;
}
- else if (!ERTS_SCHEDULER_IS_DIRTY(esdp) &&
- (fcalls > input_reductions &&
- prepare_for_sys_schedule(!0))) {
+ else if (is_normal_sched
+ && (fcalls > input_reductions
+ && prepare_for_sys_schedule(!0))) {
ErtsMonotonicTime current_time;
/*
* Schedule system-level activities.
@@ -9761,7 +9801,10 @@ Process *schedule(Process *p, int calls)
erts_sys_schedule_interrupt(0);
#endif
erts_smp_runq_unlock(rq);
- ERTS_MSACC_SET_STATE_CACHED_M(ERTS_MSACC_STATE_CHECK_IO);
+
+ ERTS_MSACC_SET_STATE_CACHED_M(ERTS_MSACC_STATE_CHECK_IO);
+ LTTNG2(scheduler_poll, esdp->no, 1);
+
erl_sys_schedule(1);
ERTS_MSACC_POP_STATE_M();
@@ -9857,11 +9900,17 @@ Process *schedule(Process *p, int calls)
ASSERT(p); /* Wrong qmask in rq->flags? */
- if (ERTS_SCHEDULER_IS_DIRTY(esdp))
- psflg_band_mask = ~((erts_aint32_t) 0);
- else
+ if (is_normal_sched) {
+ psflg_running = ERTS_PSFLG_RUNNING;
+ psflg_running_sys = ERTS_PSFLG_RUNNING_SYS;
psflg_band_mask = ~(((erts_aint32_t) 1) << (ERTS_PSFLGS_GET_PRQ_PRIO(state)
+ ERTS_PSFLGS_IN_PRQ_MASK_OFFSET));
+ }
+ else {
+ psflg_running = ERTS_PSFLG_DIRTY_RUNNING;
+ psflg_running_sys = ERTS_PSFLG_DIRTY_RUNNING_SYS;
+ psflg_band_mask = ~((erts_aint32_t) 0);
+ }
if (!(state & ERTS_PSFLG_PROXY))
psflg_band_mask &= ~ERTS_PSFLG_IN_RUNQ;
@@ -9876,40 +9925,61 @@ Process *schedule(Process *p, int calls)
state = erts_smp_atomic32_read_nob(&p->state);
}
+#ifdef ERTS_DIRTY_SCHEDULERS
+ if (!is_normal_sched)
+ clear_proc_dirty_queue_bit(p, rq, qbit);
+#endif
+
while (1) {
- erts_aint32_t exp, new, tmp;
- tmp = new = exp = state;
+ erts_aint32_t exp, new;
+ int run_process;
+ new = exp = state;
new &= psflg_band_mask;
- if (!(state & (ERTS_PSFLG_RUNNING
- | ERTS_PSFLG_RUNNING_SYS))) {
- tmp = state & (ERTS_PSFLG_SUSPENDED
- | ERTS_PSFLG_PENDING_EXIT
- | ERTS_PSFLG_ACTIVE_SYS
- | ERTS_PSFLG_DIRTY_ACTIVE_SYS);
- if (tmp != ERTS_PSFLG_SUSPENDED) {
- if (state & (ERTS_PSFLG_ACTIVE_SYS
- | ERTS_PSFLG_DIRTY_ACTIVE_SYS))
- new |= ERTS_PSFLG_RUNNING_SYS;
- else
- new |= ERTS_PSFLG_RUNNING;
- }
+ /*
+ * Run process if not already running (or free)
+ * or exiting and not running on a normal
+ * scheduler, and not suspended (and not in a
+ * state where suspend should be ignored).
+ */
+ run_process = (((!(state & (ERTS_PSFLG_RUNNING
+ | ERTS_PSFLG_RUNNING_SYS
+ | ERTS_PSFLG_DIRTY_RUNNING
+ | ERTS_PSFLG_DIRTY_RUNNING_SYS
+ | ERTS_PSFLG_FREE)))
+#ifdef ERTS_DIRTY_SCHEDULERS
+ | (((state & (ERTS_PSFLG_RUNNING
+ | ERTS_PSFLG_FREE
+ | ERTS_PSFLG_RUNNING_SYS
+ | ERTS_PSFLG_EXITING))
+ == ERTS_PSFLG_EXITING)
+ & (!!is_normal_sched))
+#endif
+ )
+ & ((state & (ERTS_PSFLG_SUSPENDED
+ | ERTS_PSFLG_EXITING
+ | ERTS_PSFLG_FREE
+ | ERTS_PSFLG_PENDING_EXIT
+ | ERTS_PSFLG_ACTIVE_SYS
+ | ERTS_PSFLG_DIRTY_ACTIVE_SYS))
+ != ERTS_PSFLG_SUSPENDED));
+ if (run_process) {
+ if (state & (ERTS_PSFLG_ACTIVE_SYS
+ | ERTS_PSFLG_DIRTY_ACTIVE_SYS))
+ new |= psflg_running_sys;
+ else
+ new |= psflg_running;
}
state = erts_smp_atomic32_cmpxchg_relb(&p->state, new, exp);
if (state == exp) {
- if ((state & (ERTS_PSFLG_RUNNING
- | ERTS_PSFLG_RUNNING_SYS
- | ERTS_PSFLG_FREE))
- || ((state & (ERTS_PSFLG_SUSPENDED
- | ERTS_PSFLG_PENDING_EXIT
- | ERTS_PSFLG_ACTIVE_SYS
- | ERTS_PSFLG_DIRTY_ACTIVE_SYS))
- == ERTS_PSFLG_SUSPENDED)) {
- if (state & ERTS_PSFLG_FREE)
- erts_proc_dec_refc(p);
+ if (!run_process) {
if (proxy_p) {
free_proxy_proc(proxy_p);
proxy_p = NULL;
}
+ else if (state & ERTS_PSFLG_FREE) {
+ /* free and not queued by proxy */
+ erts_proc_dec_refc(p);
+ }
goto pick_next_process;
}
state = new;
@@ -9921,41 +9991,20 @@ Process *schedule(Process *p, int calls)
esdp->current_process = p;
-
+ calls = 0;
reds = context_reds;
#ifdef ERTS_SMP
erts_smp_runq_unlock(rq);
-#ifdef ERTS_DIRTY_SCHEDULERS
- if (ERTS_SCHEDULER_IS_DIRTY(esdp)) {
-#ifdef DEBUG
- int old_dqbit;
-#endif
- int dqbit = qbit;
-
- if (rq == ERTS_DIRTY_CPU_RUNQ)
- dqbit <<= ERTS_PDSFLGS_IN_CPU_PRQ_MASK_OFFSET;
- else {
- ASSERT(rq == ERTS_DIRTY_IO_RUNQ);
- dqbit <<= ERTS_PDSFLGS_IN_IO_PRQ_MASK_OFFSET;
- }
-
-#ifdef DEBUG
- old_dqbit = (int)
-#else
- (void)
-#endif
- erts_smp_atomic32_read_band_mb(&p->dirty_state, ~dqbit);
- ASSERT(old_dqbit & dqbit);
- }
-#endif /* ERTS_DIRTY_SCHEDULERS */
-
#endif /* ERTS_SMP */
}
+ if (!is_normal_sched)
+ save_dirty_start(esdp, p);
+
#ifdef ERTS_SMP
if (flags & ERTS_RUNQ_FLG_PROTECTED)
@@ -9969,15 +10018,10 @@ Process *schedule(Process *p, int calls)
if (erts_sched_stat.enabled) {
int prio;
- UWord old = ERTS_PROC_SCHED_ID(p,
- (ERTS_PROC_LOCK_MAIN
- | ERTS_PROC_LOCK_STATUS),
- (UWord) esdp->no);
+ UWord old = ERTS_PROC_SCHED_ID(p, (UWord) esdp->no);
int migrated = old && old != esdp->no;
-#ifdef ERTS_DIRTY_SCHEDULERS
- ASSERT(!ERTS_SCHEDULER_IS_DIRTY(esdp));
-#endif
+ ASSERT(is_normal_sched);
prio = (int) ERTS_PSFLGS_GET_USR_PRIO(state);
@@ -9991,22 +10035,21 @@ Process *schedule(Process *p, int calls)
erts_smp_spin_unlock(&erts_sched_stat.lock);
}
- ASSERT(!p->scheduler_data);
- p->scheduler_data = esdp;
-
state = erts_smp_atomic32_read_nob(&p->state);
-#ifdef ERTS_DIRTY_SCHEDULERS
- if (!ERTS_SCHEDULER_IS_DIRTY(esdp)) {
- if (!!(state & ERTS_PSFLGS_DIRTY_WORK)
- & !(state & ERTS_PSFLG_ACTIVE_SYS)) {
+ ASSERT(!p->scheduler_data);
+#ifndef ERTS_DIRTY_SCHEDULERS
+ p->scheduler_data = esdp;
+#else /* ERTS_DIRTY_SCHEDULERS */
+ if (is_normal_sched) {
+ if ((!!(state & ERTS_PSFLGS_DIRTY_WORK))
+ & (!(state & ERTS_PSFLG_ACTIVE_SYS))) {
/* Migrate to dirty scheduler... */
sunlock_sched_out_proc:
erts_smp_proc_unlock(p, ERTS_PROC_LOCK_STATUS);
- p->fcalls = reds;
goto sched_out_proc;
-
}
+ p->scheduler_data = esdp;
}
else {
if (state & (ERTS_PSFLG_ACTIVE_SYS
@@ -10040,57 +10083,64 @@ Process *schedule(Process *p, int calls)
#endif /* ERTS_SMP */
- p->fcalls = reds;
+ erts_smp_proc_unlock(p, ERTS_PROC_LOCK_STATUS);
+
+ /* Clear tracer if it has been removed */
+ if (IS_TRACED(p) && erts_is_tracer_proc_enabled(
+ p, ERTS_PROC_LOCK_MAIN, &p->common)) {
- if (IS_TRACED(p)) {
if (state & ERTS_PSFLG_EXITING) {
if (ARE_TRACE_FLAGS_ON(p, F_TRACE_SCHED_EXIT))
- trace_sched(p, am_in_exiting);
+ trace_sched(p, ERTS_PROC_LOCK_MAIN, am_in_exiting);
}
else {
- if (ARE_TRACE_FLAGS_ON(p, F_TRACE_SCHED))
- trace_sched(p, am_in);
- else if (ARE_TRACE_FLAGS_ON(p, F_TRACE_SCHED_PROCS))
- trace_virtual_sched(p, am_in);
+ if (ARE_TRACE_FLAGS_ON(p, F_TRACE_SCHED) ||
+ ARE_TRACE_FLAGS_ON(p, F_TRACE_SCHED_PROCS))
+ trace_sched(p, ERTS_PROC_LOCK_MAIN, am_in);
}
if (IS_TRACED_FL(p, F_TRACE_CALLS)) {
erts_schedule_time_break(p, ERTS_BP_CALL_TIME_SCHEDULE_IN);
}
}
- erts_smp_proc_unlock(p, ERTS_PROC_LOCK_STATUS);
-
-#ifdef ERTS_SMP
- if (is_not_nil(ERTS_TRACER_PROC(p)))
- erts_check_my_tracer_proc(p);
-#endif
-
- if (state & ERTS_PSFLG_RUNNING_SYS) {
- reds -= execute_sys_tasks(p, &state, reds);
- if (reds <= 0
+ if (state & (ERTS_PSFLG_RUNNING_SYS
+ | ERTS_PSFLG_DIRTY_RUNNING_SYS)) {
+ /*
+ * GC is normally never delayed when a process
+ * is scheduled out, but might be when executing
+ * hand written beam assembly in
+ * prim_eval:'receive'. If GC is delayed we are
+ * not allowed to execute system tasks.
+ */
+ if (!(p->flags & F_DELAY_GC)) {
+ int cost = execute_sys_tasks(p, &state, reds);
+ calls += cost;
+ reds -= cost;
+ if (reds <= 0
#ifdef ERTS_DIRTY_SCHEDULERS
- || ERTS_SCHEDULER_IS_DIRTY(esdp)
- || (state & ERTS_PSFLGS_DIRTY_WORK)
+ || !is_normal_sched
+ || (state & ERTS_PSFLGS_DIRTY_WORK)
#endif
- ) {
- p->fcalls = reds;
- goto sched_out_proc;
+ ) {
+ goto sched_out_proc;
+ }
}
- ASSERT(state & ERTS_PSFLG_RUNNING_SYS);
- ASSERT(!(state & ERTS_PSFLG_RUNNING));
+ ASSERT(state & psflg_running_sys);
+ ASSERT(!(state & psflg_running));
while (1) {
erts_aint32_t n, e;
if (((state & (ERTS_PSFLG_SUSPENDED
| ERTS_PSFLG_ACTIVE)) != ERTS_PSFLG_ACTIVE)
- && !(state & ERTS_PSFLG_EXITING))
+ && !(state & ERTS_PSFLG_EXITING)) {
goto sched_out_proc;
+ }
n = e = state;
- n &= ~ERTS_PSFLG_RUNNING_SYS;
- n |= ERTS_PSFLG_RUNNING;
+ n &= ~psflg_running_sys;
+ n |= psflg_running;
state = erts_smp_atomic32_cmpxchg_mb(&p->state, n, e);
if (state == e) {
@@ -10098,18 +10148,18 @@ Process *schedule(Process *p, int calls)
break;
}
- ASSERT(state & ERTS_PSFLG_RUNNING_SYS);
- ASSERT(!(state & ERTS_PSFLG_RUNNING));
+ ASSERT(state & psflg_running_sys);
+ ASSERT(!(state & psflg_running));
}
}
if (ERTS_IS_GC_DESIRED(p)) {
- if (!(state & ERTS_PSFLG_EXITING) && !(p->flags & F_DISABLE_GC)) {
- reds -= erts_garbage_collect_nobump(p, 0, p->arg_reg, p->arity);
- if (reds <= 0) {
- p->fcalls = reds;
+ if (!(state & ERTS_PSFLG_EXITING) && !(p->flags & (F_DELAY_GC|F_DISABLE_GC))) {
+ int cost = scheduler_gc_proc(p, reds);
+ calls += cost;
+ reds -= cost;
+ if (reds <= 0)
goto sched_out_proc;
- }
}
}
@@ -10117,6 +10167,8 @@ Process *schedule(Process *p, int calls)
free_proxy_proc(proxy_p);
proxy_p = NULL;
}
+
+ p->fcalls = reds;
ERTS_SMP_CHK_HAVE_ONLY_MAIN_PROC_LOCK(p);
@@ -10185,7 +10237,7 @@ notify_sys_task_executed(Process *c_p, ErtsProcSysTask *st, Eterm st_result)
ASSERT(hp_start + hsz == hp);
#endif
- erts_queue_message(rp, &rp_locks, mp, msg, NIL);
+ erts_queue_message(rp, rp_locks, mp, msg, c_p->common.id);
if (c_p == rp)
rp_locks &= ~ERTS_PROC_LOCK_MAIN;
@@ -10353,8 +10405,7 @@ execute_sys_tasks(Process *c_p, erts_aint32_t *statep, int in_reds)
{
int garbage_collected = 0;
erts_aint32_t state = *statep;
- int max_reds = in_reds;
- int reds = 0;
+ int reds = in_reds;
int qmask = 0;
ERTS_SMP_LC_ASSERT(erts_proc_lc_my_proc_locks(c_p) == ERTS_PROC_LOCK_MAIN);
@@ -10382,35 +10433,47 @@ execute_sys_tasks(Process *c_p, erts_aint32_t *statep, int in_reds)
if (c_p->flags & F_DISABLE_GC) {
save_gc_task(c_p, st, st_prio);
st = NULL;
- reds++;
+ reds--;
}
else {
if (!garbage_collected) {
FLAGS(c_p) |= F_NEED_FULLSWEEP;
- reds += erts_garbage_collect_nobump(c_p,
- 0,
- c_p->arg_reg,
- c_p->arity);
+ reds -= scheduler_gc_proc(c_p, reds);
garbage_collected = 1;
}
st_res = am_true;
}
break;
- case ERTS_PSTT_CPC:
+ case ERTS_PSTT_CPC: {
+ int fcalls;
+ int cpc_reds = 0;
+ if (!ERTS_PROC_GET_SAVED_CALLS_BUF(c_p))
+ fcalls = reds;
+ else
+ fcalls = reds - CONTEXT_REDS;
st_res = erts_check_process_code(c_p,
st->arg[0],
unsigned_val(st->arg[1]),
- &reds);
+ &cpc_reds,
+ fcalls);
+ reds -= cpc_reds;
if (is_non_value(st_res)) {
/* Needed gc, but gc was disabled */
save_gc_task(c_p, st, st_prio);
st = NULL;
}
break;
+ }
case ERTS_PSTT_COHMQ:
- reds += erts_complete_off_heap_message_queue_change(c_p);
+ reds -= erts_complete_off_heap_message_queue_change(c_p);
+ st_res = am_true;
+ break;
+#ifdef ERTS_SMP
+ case ERTS_PSTT_FTMQ:
+ reds -= erts_flush_trace_messages(c_p, ERTS_PROC_LOCK_MAIN);
st_res = am_true;
break;
+#endif
default:
ERTS_INTERNAL_ERROR("Invalid process sys task type");
st_res = am_false;
@@ -10420,11 +10483,14 @@ execute_sys_tasks(Process *c_p, erts_aint32_t *statep, int in_reds)
reds += notify_sys_task_executed(c_p, st, st_res);
state = erts_smp_atomic32_read_acqb(&c_p->state);
- } while (qmask && reds < max_reds);
+ } while (qmask && reds > 0);
*statep = state;
- return reds;
+ if (in_reds < reds)
+ return in_reds;
+
+ return in_reds - reds;
}
static int
@@ -10456,6 +10522,12 @@ cleanup_sys_tasks(Process *c_p, erts_aint32_t in_state, int in_reds)
case ERTS_PSTT_COHMQ:
st_res = am_false;
break;
+#ifdef ERTS_SMP
+ case ERTS_PSTT_FTMQ:
+ reds -= erts_flush_trace_messages(c_p, ERTS_PROC_LOCK_MAIN);
+ st_res = am_true;
+ break;
+#endif
default:
ERTS_INTERNAL_ERROR("Invalid process sys task type");
st_res = am_false;
@@ -10591,8 +10663,8 @@ badarg:
BIF_ERROR(BIF_P, BADARG);
}
-void
-erts_schedule_complete_off_heap_message_queue_change(Eterm pid)
+static void
+erts_schedule_generic_sys_task(Eterm pid, ErtsProcSysTaskType type)
{
Process *rp = erts_proc_lookup(pid);
if (rp) {
@@ -10602,7 +10674,7 @@ erts_schedule_complete_off_heap_message_queue_change(Eterm pid)
st = erts_alloc(ERTS_ALC_T_PROC_SYS_TSK,
ERTS_PROC_SYS_TASK_SIZE(0));
- st->type = ERTS_PSTT_COHMQ;
+ st->type = type;
st->requester = NIL;
st->reply_tag = NIL;
st->req_id = NIL;
@@ -10617,6 +10689,18 @@ erts_schedule_complete_off_heap_message_queue_change(Eterm pid)
}
}
+void
+erts_schedule_complete_off_heap_message_queue_change(Eterm pid)
+{
+ erts_schedule_generic_sys_task(pid, ERTS_PSTT_COHMQ);
+}
+
+void
+erts_schedule_flush_trace_messages(Eterm pid)
+{
+ erts_schedule_generic_sys_task(pid, ERTS_PSTT_FTMQ);
+}
+
static void
save_gc_task(Process *c_p, ErtsProcSysTask *st, int prio)
{
@@ -10636,7 +10720,7 @@ save_gc_task(Process *c_p, ErtsProcSysTask *st, int prio)
qs->q[PRIORITY_NORMAL] = NULL;
qs->q[PRIORITY_LOW] = NULL;
qs->q[prio] = st;
- (void) ERTS_PROC_SET_DELAYED_GC_TASK_QS(c_p, ERTS_PROC_LOCK_MAIN, qs);
+ (void) ERTS_PROC_SET_DELAYED_GC_TASK_QS(c_p, qs);
}
else {
if (!qs->q[prio]) {
@@ -10654,7 +10738,10 @@ save_gc_task(Process *c_p, ErtsProcSysTask *st, int prio)
}
state = erts_smp_atomic32_read_nob(&c_p->state);
- ASSERT((ERTS_PSFLG_RUNNING|ERTS_PSFLG_RUNNING_SYS) & state);
+ ASSERT((ERTS_PSFLG_RUNNING
+ | ERTS_PSFLG_RUNNING_SYS
+ | ERTS_PSFLG_DIRTY_RUNNING
+ | ERTS_PSFLG_DIRTY_RUNNING_SYS) & state);
while (!(state & ERTS_PSFLG_DELAYED_SYS)
|| prio < ERTS_PSFLGS_GET_ACT_PRIO(state)) {
@@ -10783,7 +10870,7 @@ erts_set_gc_state(Process *c_p, int enable)
erts_smp_proc_unlock(c_p, ERTS_PROC_LOCK_STATUS);
- (void) ERTS_PROC_SET_DELAYED_GC_TASK_QS(c_p, ERTS_PROC_LOCK_MAIN, NULL);
+ (void) ERTS_PROC_SET_DELAYED_GC_TASK_QS(c_p, NULL);
if (dgc_tsk_qs)
proc_sys_task_queues_free(dgc_tsk_qs);
@@ -10979,6 +11066,8 @@ erts_get_exact_total_reductions(Process *c_p, Uint *redsp, Uint *diffp)
erts_smp_proc_lock(c_p, ERTS_PROC_LOCK_MAIN);
}
+static void delete_process(Process* p);
+
void
erts_free_proc(Process *p)
{
@@ -10987,6 +11076,8 @@ erts_free_proc(Process *p)
#endif
ASSERT(erts_smp_atomic32_read_nob(&p->state) & ERTS_PSFLG_FREE);
ASSERT(0 == erts_proc_read_refc(p));
+ if (p->flags & F_DELAYED_DEL_PROC)
+ delete_process(p);
erts_free(ERTS_ALC_T_PROC, (void *) p);
}
@@ -11075,14 +11166,13 @@ erl_create_process(Process* parent, /* Parent of process (default group leader).
Eterm res = THE_NON_VALUE;
erts_aint32_t state = 0;
erts_aint32_t prio = (erts_aint32_t) PRIORITY_NORMAL;
+ ErtsProcLocks locks = ERTS_PROC_LOCKS_ALL;
#ifdef SHCOPY_SPAWN
erts_shcopy_t info;
INITIALIZE_SHCOPY(info);
#endif
-#ifdef ERTS_SMP
erts_smp_proc_lock(parent, ERTS_PROC_LOCKS_ALL_MINOR);
-#endif
/*
* Check for errors.
@@ -11151,9 +11241,13 @@ erl_create_process(Process* parent, /* Parent of process (default group leader).
p->min_heap_size = so->min_heap_size;
p->min_vheap_size = so->min_vheap_size;
p->max_gen_gcs = so->max_gen_gcs;
+ MAX_HEAP_SIZE_SET(p, so->max_heap_size);
+ MAX_HEAP_SIZE_FLAGS_SET(p, so->max_heap_flags);
} else {
p->min_heap_size = H_MIN_SIZE;
p->min_vheap_size = BIN_VH_MIN_SIZE;
+ MAX_HEAP_SIZE_SET(p, H_MAX_SIZE);
+ MAX_HEAP_SIZE_FLAGS_SET(p, H_MAX_FLAGS);
p->max_gen_gcs = (Uint16) erts_smp_atomic32_read_nob(&erts_max_gen_gcs);
}
p->schedule_count = 0;
@@ -11251,7 +11345,7 @@ erl_create_process(Process* parent, /* Parent of process (default group leader).
: STORE_NC(&p->htop, &p->off_heap, parent->group_leader);
}
- erts_get_default_tracing(&ERTS_TRACE_FLAGS(p), &ERTS_TRACER_PROC(p));
+ erts_get_default_proc_tracing(&ERTS_TRACE_FLAGS(p), &ERTS_TRACER(p));
p->msg.first = NULL;
p->msg.last = &p->msg.first;
@@ -11269,7 +11363,7 @@ erl_create_process(Process* parent, /* Parent of process (default group leader).
p->mbuf = NULL;
p->msg_frag = NULL;
p->mbuf_sz = 0;
- p->psd = NULL;
+ erts_smp_atomic_init_nob(&p->psd, (erts_aint_t) NULL);
p->dictionary = NULL;
p->seq_trace_lastcnt = 0;
p->seq_trace_clock = 0;
@@ -11287,21 +11381,60 @@ erl_create_process(Process* parent, /* Parent of process (default group leader).
p->last_old_htop = NULL;
#endif
+#ifdef ERTS_SMP
+ p->trace_msg_q = NULL;
+ p->scheduler_data = NULL;
+ p->suspendee = NIL;
+ p->pending_suspenders = NULL;
+ p->pending_exit.reason = THE_NON_VALUE;
+ p->pending_exit.bp = NULL;
+#endif
+
+#if !defined(NO_FPE_SIGNALS) || defined(HIPE)
+ p->fp_exception = 0;
+#endif
+
if (IS_TRACED(parent)) {
if (ERTS_TRACE_FLAGS(parent) & F_TRACE_SOS) {
ERTS_TRACE_FLAGS(p) |= (ERTS_TRACE_FLAGS(parent) & TRACEE_FLAGS);
- ERTS_TRACER_PROC(p) = ERTS_TRACER_PROC(parent);
- }
- if (ARE_TRACE_FLAGS_ON(parent, F_TRACE_PROCS)) {
- trace_proc_spawn(parent, p->common.id, mod, func, args);
+ erts_tracer_replace(&p->common, ERTS_TRACER(parent));
}
- if (ERTS_TRACE_FLAGS(parent) & F_TRACE_SOS1) {
+ if (ERTS_TRACE_FLAGS(parent) & F_TRACE_SOS1) {
/* Overrides TRACE_CHILDREN */
ERTS_TRACE_FLAGS(p) |= (ERTS_TRACE_FLAGS(parent) & TRACEE_FLAGS);
- ERTS_TRACER_PROC(p) = ERTS_TRACER_PROC(parent);
+ erts_tracer_replace(&p->common, ERTS_TRACER(parent));
ERTS_TRACE_FLAGS(p) &= ~(F_TRACE_SOS1 | F_TRACE_SOS);
ERTS_TRACE_FLAGS(parent) &= ~(F_TRACE_SOS1 | F_TRACE_SOS);
}
+ if (so->flags & SPO_LINK && ERTS_TRACE_FLAGS(parent) & (F_TRACE_SOL|F_TRACE_SOL1)) {
+ ERTS_TRACE_FLAGS(p) |= (ERTS_TRACE_FLAGS(parent)&TRACEE_FLAGS);
+ erts_tracer_replace(&p->common, ERTS_TRACER(parent));
+ if (ERTS_TRACE_FLAGS(parent) & F_TRACE_SOL1) {/*maybe override*/
+ ERTS_TRACE_FLAGS(p) &= ~(F_TRACE_SOL1 | F_TRACE_SOL);
+ ERTS_TRACE_FLAGS(parent) &= ~(F_TRACE_SOL1 | F_TRACE_SOL);
+ }
+ }
+ if (ARE_TRACE_FLAGS_ON(parent, F_TRACE_PROCS)) {
+ locks &= ~(ERTS_PROC_LOCK_STATUS|ERTS_PROC_LOCK_TRACE);
+ erts_smp_proc_unlock(p, ERTS_PROC_LOCK_STATUS|ERTS_PROC_LOCK_TRACE);
+ erts_smp_proc_unlock(parent, ERTS_PROC_LOCK_STATUS|ERTS_PROC_LOCK_TRACE);
+ trace_proc_spawn(parent, am_spawn, p->common.id, mod, func, args);
+ if (so->flags & SPO_LINK)
+ trace_proc(parent, locks, parent, am_link, p->common.id);
+ }
+ }
+
+ if (IS_TRACED_FL(p, F_TRACE_PROCS)) {
+ if ((locks & (ERTS_PROC_LOCK_STATUS|ERTS_PROC_LOCK_TRACE))
+ == (ERTS_PROC_LOCK_STATUS|ERTS_PROC_LOCK_TRACE)) {
+ /* This happens when parent was not traced, but child is */
+ locks &= ~(ERTS_PROC_LOCK_STATUS|ERTS_PROC_LOCK_TRACE);
+ erts_smp_proc_unlock(p, ERTS_PROC_LOCK_STATUS|ERTS_PROC_LOCK_TRACE);
+ erts_smp_proc_unlock(parent, ERTS_PROC_LOCK_STATUS|ERTS_PROC_LOCK_TRACE);
+ }
+ trace_proc_spawn(p, am_spawned, parent->common.id, mod, func, args);
+ if (so->flags & SPO_LINK)
+ trace_proc(p, locks, p, am_getting_linked, parent->common.id);
}
/*
@@ -11312,10 +11445,6 @@ erl_create_process(Process* parent, /* Parent of process (default group leader).
#ifdef DEBUG
int ret;
#endif
- if (IS_TRACED_FL(parent, F_TRACE_PROCS)) {
- trace_proc(parent, parent, am_link, p->common.id);
- }
-
#ifdef DEBUG
ret = erts_add_link(&ERTS_P_LINKS(parent), LINK_PID, p->common.id);
ASSERT(ret == 0);
@@ -11326,17 +11455,6 @@ erl_create_process(Process* parent, /* Parent of process (default group leader).
erts_add_link(&ERTS_P_LINKS(p), LINK_PID, parent->common.id);
#endif
- if (IS_TRACED(parent)) {
- if (ERTS_TRACE_FLAGS(parent) & (F_TRACE_SOL|F_TRACE_SOL1)) {
- ERTS_TRACE_FLAGS(p) |= (ERTS_TRACE_FLAGS(parent)&TRACEE_FLAGS);
- ERTS_TRACER_PROC(p) = ERTS_TRACER_PROC(parent); /*maybe steal*/
-
- if (ERTS_TRACE_FLAGS(parent) & F_TRACE_SOL1) {/*maybe override*/
- ERTS_TRACE_FLAGS(p) &= ~(F_TRACE_SOL1 | F_TRACE_SOL);
- ERTS_TRACE_FLAGS(parent) &= ~(F_TRACE_SOL1 | F_TRACE_SOL);
- }
- }
- }
}
/*
@@ -11351,19 +11469,7 @@ erl_create_process(Process* parent, /* Parent of process (default group leader).
so->mref = mref;
}
-#ifdef ERTS_SMP
- p->scheduler_data = NULL;
- p->suspendee = NIL;
- p->pending_suspenders = NULL;
- p->pending_exit.reason = THE_NON_VALUE;
- p->pending_exit.bp = NULL;
-#endif
-
-#if !defined(NO_FPE_SIGNALS) || defined(HIPE)
- p->fp_exception = 0;
-#endif
-
- erts_smp_proc_unlock(p, ERTS_PROC_LOCKS_ALL);
+ erts_smp_proc_unlock(p, locks);
res = p->common.id;
@@ -11371,6 +11477,8 @@ erl_create_process(Process* parent, /* Parent of process (default group leader).
* Schedule process for execution.
*/
+ erts_smp_proc_unlock(parent, locks & ERTS_PROC_LOCKS_ALL_MINOR);
+
schedule_process(p, state, 0);
VERBOSE(DEBUG_PROCESSES, ("Created a new process: %T\n",p->common.id));
@@ -11384,10 +11492,11 @@ erl_create_process(Process* parent, /* Parent of process (default group leader).
DTRACE2(process_spawn, process_name, mfa);
}
#endif
+ return res;
error:
- erts_smp_proc_unlock(parent, ERTS_PROC_LOCKS_ALL_MINOR);
+ erts_smp_proc_unlock(parent, locks & ERTS_PROC_LOCKS_ALL_MINOR);
return res;
}
@@ -11412,7 +11521,7 @@ void erts_init_empty_process(Process *p)
p->rcount = 0;
p->common.id = ERTS_INVALID_PID;
p->reds = 0;
- ERTS_TRACER_PROC(p) = NIL;
+ ERTS_TRACER(p) = erts_tracer_nil;
ERTS_TRACE_FLAGS(p) = F_INITIAL_TRACE_FLAGS;
p->group_leader = ERTS_INVALID_PID;
p->flags = 0;
@@ -11438,7 +11547,7 @@ void erts_init_empty_process(Process *p)
p->mbuf = NULL;
p->msg_frag = NULL;
p->mbuf_sz = 0;
- p->psd = NULL;
+ erts_smp_atomic_init_nob(&p->psd, (erts_aint_t) NULL);
ERTS_P_MONITORS(p) = NULL;
ERTS_P_LINKS(p) = NULL; /* List of links */
p->nodes_monitors = NULL;
@@ -11532,7 +11641,7 @@ erts_debug_verify_clean_empty_process(Process* p)
ASSERT(p->live_hf_end == ERTS_INVALID_HFRAG_PTR);
ASSERT(p->heap == NULL);
ASSERT(p->common.id == ERTS_INVALID_PID);
- ASSERT(ERTS_TRACER_PROC(p) == NIL);
+ ASSERT(ERTS_TRACER_IS_NIL(ERTS_TRACER(p)));
ASSERT(ERTS_TRACE_FLAGS(p) == F_INITIAL_TRACE_FLAGS);
ASSERT(p->group_leader == ERTS_INVALID_PID);
ASSERT(p->next == NULL);
@@ -11601,21 +11710,44 @@ erts_cleanup_empty_process(Process* p)
#endif
}
-/*
- * p must be the currently executing process.
- */
static void
delete_process(Process* p)
{
Eterm *heap;
+ ErtsPSD *psd;
+ struct saved_calls *scb;
+ process_breakpoint_time_t *pbt;
+ void *nif_export;
+
VERBOSE(DEBUG_PROCESSES, ("Removing process: %T\n",p->common.id));
VERBOSE(DEBUG_SHCOPY, ("[pid=%T] delete process: %p %p %p %p\n", p->common.id,
HEAP_START(p), HEAP_END(p), OLD_HEAP(p), OLD_HEND(p)));
+ scb = ERTS_PROC_SET_SAVED_CALLS_BUF(p, NULL);
+
+ if (scb) {
+ p->fcalls += CONTEXT_REDS; /* Reduction counting depends on this... */
+ erts_free(ERTS_ALC_T_CALLS_BUF, (void *) scb);
+ }
+
+ pbt = ERTS_PROC_SET_CALL_TIME(p, NULL);
+ if (pbt)
+ erts_free(ERTS_ALC_T_BPD, (void *) pbt);
+
+ nif_export = ERTS_PROC_SET_NIF_TRAP_EXPORT(p, NULL);
+ if (nif_export)
+ erts_destroy_nif_export(nif_export);
+
+ clean_dirty_start(p);
+
/* Cleanup psd */
- if (p->psd)
- erts_free(ERTS_ALC_T_PSD, p->psd);
+ psd = (ErtsPSD *) erts_smp_atomic_read_nob(&p->psd);
+
+ if (psd) {
+ erts_smp_atomic_set_nob(&p->psd, (erts_aint_t) NULL); /* Reduction counting depends on this... */
+ erts_free(ERTS_ALC_T_PSD, psd);
+ }
/* Clean binaries and funs */
erts_cleanup_offheap(&p->off_heap);
@@ -11710,7 +11842,8 @@ set_proc_exiting(Process *p,
p->i = (BeamInstr *) beam_exit;
#ifndef ERTS_SMP
- if (state & (ERTS_PSFLG_RUNNING|ERTS_PSFLG_RUNNING_SYS)) {
+ if (state & (ERTS_PSFLG_RUNNING|ERTS_PSFLG_RUNNING_SYS)
+ && !(state & ERTS_PSFLG_GC)) {
/*
* I non smp case:
*
@@ -11739,7 +11872,10 @@ set_proc_self_exiting(Process *c_p)
ERTS_SMP_LC_ASSERT(erts_proc_lc_my_proc_locks(c_p) == ERTS_PROC_LOCKS_ALL);
state = erts_smp_atomic32_read_nob(&c_p->state);
- ASSERT(state & (ERTS_PSFLG_RUNNING|ERTS_PSFLG_RUNNING_SYS));
+ ASSERT(state & (ERTS_PSFLG_RUNNING
+ |ERTS_PSFLG_RUNNING_SYS
+ | ERTS_PSFLG_DIRTY_RUNNING
+ | ERTS_PSFLG_DIRTY_RUNNING_SYS));
#ifdef DEBUG
enqueue =
@@ -11789,51 +11925,73 @@ erts_handle_pending_exit(Process *c_p, ErtsProcLocks locks)
erts_smp_proc_unlock(c_p, xlocks);
}
+static void save_pending_exiter(Process *p, ErtsProcList *plp);
+
static void
-handle_pending_exiters(ErtsProcList *pnd_xtrs)
+do_handle_pending_exiters(ErtsProcList *pnd_xtrs)
{
/* 'list' is expected to have been fetched (i.e. not a ring anymore) */
ErtsProcList *plp = pnd_xtrs;
while (plp) {
- ErtsProcList *free_plp;
- Process *p = erts_pid2proc(NULL, 0, plp->pid, ERTS_PROC_LOCKS_ALL);
+ ErtsProcList *next_plp = plp->next;
+ Process *p = erts_proc_lookup(plp->pid);
if (p) {
- if (erts_proclist_same(plp, p)) {
- erts_aint32_t state = erts_smp_atomic32_read_acqb(&p->state);
- if (!(state & (ERTS_PSFLG_RUNNING|ERTS_PSFLG_RUNNING_SYS))) {
- ASSERT(state & ERTS_PSFLG_PENDING_EXIT);
- erts_handle_pending_exit(p, ERTS_PROC_LOCKS_ALL);
+ erts_aint32_t state;
+ /*
+ * If the process is running on a normal scheduler, the
+ * pending exit will soon be detected and handled by the
+ * scheduler running the process (at schedule in/out).
+ */
+ if (erts_smp_proc_trylock(p, ERTS_PROC_LOCKS_ALL) != EBUSY) {
+ if (erts_proclist_same(plp, p)) {
+ state = erts_smp_atomic32_read_acqb(&p->state);
+ if (!(state & (ERTS_PSFLG_RUNNING
+ | ERTS_PSFLG_RUNNING_SYS
+ | ERTS_PSFLG_EXITING))) {
+ ASSERT(state & ERTS_PSFLG_PENDING_EXIT);
+ erts_handle_pending_exit(p, ERTS_PROC_LOCKS_ALL);
+ }
+ }
+ erts_smp_proc_unlock(p, ERTS_PROC_LOCKS_ALL);
+ }
+ else {
+ erts_smp_proc_lock(p, ERTS_PROC_LOCK_STATUS);
+ if (erts_proclist_same(plp, p)) {
+ state = erts_smp_atomic32_read_acqb(&p->state);
+ if (!(state & (ERTS_PSFLG_RUNNING
+ | ERTS_PSFLG_RUNNING_SYS
+ | ERTS_PSFLG_EXITING))) {
+ /*
+ * Save process and try to acquire all
+ * locks at a later time...
+ */
+ save_pending_exiter(p, plp);
+ plp = NULL;
+ }
}
+ erts_smp_proc_unlock(p, ERTS_PROC_LOCK_STATUS);
}
- erts_smp_proc_unlock(p, ERTS_PROC_LOCKS_ALL);
}
- free_plp = plp;
- plp = plp->next;
- proclist_destroy(free_plp);
+ if (plp)
+ proclist_destroy(plp);
+ plp = next_plp;
}
}
static void
-save_pending_exiter(Process *p)
+save_pending_exiter(Process *p, ErtsProcList *plp)
{
- ErtsProcList *plp;
+ ErtsSchedulerSleepInfo *ssi;
ErtsRunQueue *rq;
- ErtsSchedulerData *esdp = erts_get_scheduler_data();
ERTS_SMP_LC_ASSERT(ERTS_PROC_LOCK_STATUS & erts_proc_lc_my_proc_locks(p));
- if (!esdp)
- rq = RUNQ_READ_RQ(&p->run_queue);
- else
- rq = esdp->run_queue;
-
-#ifdef ERTS_DIRTY_SCHEDULERS
- if (ERTS_RUNQ_IX_IS_DIRTY(rq->ix))
- rq = ERTS_RUNQ_IX(0); /* Handle on ordinary scheduler */
-#endif
+ rq = RUNQ_READ_RQ(&p->run_queue);
+ ASSERT(rq && !ERTS_RUNQ_IX_IS_DIRTY(rq->ix));
- plp = proclist_create(p);
+ if (!plp)
+ plp = proclist_create(p);
erts_smp_runq_lock(rq);
@@ -11841,9 +11999,11 @@ save_pending_exiter(Process *p)
non_empty_runq(rq);
+ ssi = rq->scheduler->ssi;
+
erts_smp_runq_unlock(rq);
- wake_scheduler(rq);
+ set_aux_work_flags_wakeup_nob(ssi, ERTS_SSI_AUX_WORK_PENDING_EXITERS);
}
#endif
@@ -11876,7 +12036,7 @@ send_exit_message(Process *to, ErtsProcLocks *to_locksp,
mp = erts_alloc_message_heap(to, to_locksp, term_size, &hp, &ohp);
mess = copy_struct(exit_term, term_size, &hp, ohp);
#endif
- erts_queue_message(to, to_locksp, mp, mess, NIL);
+ erts_queue_message(to, *to_locksp, mp, mess, am_system);
} else {
Eterm temp_token;
Uint sz_token;
@@ -11894,9 +12054,10 @@ send_exit_message(Process *to, ErtsProcLocks *to_locksp,
mess = copy_struct(exit_term, term_size, &hp, ohp);
#endif
/* the trace token must in this case be updated by the caller */
- seq_trace_output(token, mess, SEQ_TRACE_SEND, to->common.id, NULL);
+ seq_trace_output(token, mess, SEQ_TRACE_SEND, to->common.id, to);
temp_token = copy_struct(token, sz_token, &hp, ohp);
- erts_queue_message(to, to_locksp, mp, mess, temp_token);
+ ERL_MESSAGE_TOKEN(mp) = temp_token;
+ erts_queue_message(to, *to_locksp, mp, mess, am_system);
}
}
@@ -12005,6 +12166,9 @@ send_exit_signal(Process *c_p, /* current process if and only
if ((state & ERTS_PSFLG_TRAP_EXIT)
&& (reason != am_kill || (flags & ERTS_XSIG_FLG_IGN_KILL))) {
+ /* have to release the status lock in order to send the exit message */
+ erts_smp_proc_unlock(rp, *rp_locks & ERTS_PROC_LOCKS_XSIG_SEND);
+ *rp_locks &= ~ERTS_PROC_LOCKS_XSIG_SEND;
if (have_seqtrace(token) && token_update)
seq_trace_update_send(token_update);
if (is_value(exit_tuple))
@@ -12039,7 +12203,7 @@ send_exit_signal(Process *c_p, /* current process if and only
if (need_locks
&& erts_smp_proc_trylock(rp, need_locks) == EBUSY) {
/* ... but we havn't got all locks on it ... */
- save_pending_exiter(rp);
+ save_pending_exiter(rp, NULL);
/*
* The pending exit will be discovered when next
* process is scheduled in
@@ -12302,6 +12466,7 @@ static void doit_exit_link(ErtsLink *lnk, void *vpcontext)
DistEntry *dep;
Process *rp;
+
switch(lnk->type) {
case LINK_PID:
if(is_internal_port(item)) {
@@ -12349,7 +12514,11 @@ static void doit_exit_link(ErtsLink *lnk, void *vpcontext)
if (xres >= 0 && IS_TRACED_FL(rp, F_TRACE_PROCS)) {
/* We didn't exit the process and it is traced */
if (IS_TRACED_FL(rp, F_TRACE_PROCS)) {
- trace_proc(p, rp, am_getting_unlinked, p->common.id);
+ if (rp_locks & ERTS_PROC_LOCKS_XSIG_SEND) {
+ erts_smp_proc_unlock(rp, ERTS_PROC_LOCKS_XSIG_SEND);
+ rp_locks &= ~ERTS_PROC_LOCKS_XSIG_SEND;
+ }
+ trace_proc(NULL, 0, rp, am_getting_unlinked, p->common.id);
}
}
}
@@ -12392,7 +12561,7 @@ static void doit_exit_link(ErtsLink *lnk, void *vpcontext)
break;
default:
- erl_exit(1, "bad type in link list\n");
+ erts_exit(ERTS_ERROR_EXIT, "bad type in link list\n");
break;
}
erts_destroy_link(lnk);
@@ -12433,7 +12602,7 @@ erts_do_exit_process(Process* p, Eterm reason)
#endif
if (p->static_flags & ERTS_STC_FLG_SYSTEM_PROC)
- erl_exit(ERTS_DUMP_EXIT, "System process %T terminated: %T\n",
+ erts_exit(ERTS_DUMP_EXIT, "System process %T terminated: %T\n",
p->common.id, reason);
#ifdef ERTS_SMP
@@ -12466,8 +12635,6 @@ erts_do_exit_process(Process* p, Eterm reason)
if (IS_TRACED_FL(p, F_TRACE_CALLS))
erts_schedule_time_break(p, ERTS_BP_CALL_TIME_SCHEDULE_EXITING);
- if (IS_TRACED_FL(p,F_TRACE_PROCS))
- trace_proc(p, p, am_exit, reason);
}
erts_trace_check_exiting(p->common.id);
@@ -12483,6 +12650,10 @@ erts_do_exit_process(Process* p, Eterm reason)
erts_smp_proc_unlock(p, ERTS_PROC_LOCKS_ALL_MINOR);
+ if (IS_TRACED_FL(p,F_TRACE_PROCS))
+ trace_proc(p, ERTS_PROC_LOCK_MAIN, p, am_exit, reason);
+
+
/*
* p->u.initial of this process can *not* be used anymore;
* will be overwritten by misc termination data.
@@ -12500,10 +12671,8 @@ erts_continue_exit_process(Process *p)
ErtsProcLocks curr_locks = ERTS_PROC_LOCK_MAIN;
Eterm reason = p->fvalue;
DistEntry *dep;
- struct saved_calls *scb;
- process_breakpoint_time_t *pbt;
erts_aint32_t state;
- void *nif_export;
+ int delay_del_proc = 0;
#ifdef DEBUG
int yield_allowed = 1;
@@ -12537,21 +12706,46 @@ erts_continue_exit_process(Process *p)
#endif
#ifdef ERTS_SMP
+ if (p->flags & F_SCHDLR_ONLN_WAITQ)
+ abort_sched_onln_chng_waitq(p);
+
if (p->flags & F_HAVE_BLCKD_MSCHED) {
ErtsSchedSuspendResult ssr;
- ssr = erts_block_multi_scheduling(p, ERTS_PROC_LOCK_MAIN, 0, 1);
+ ssr = erts_block_multi_scheduling(p, ERTS_PROC_LOCK_MAIN, 0, 0, 1);
switch (ssr) {
case ERTS_SCHDLR_SSPND_YIELD_RESTART:
goto yield;
case ERTS_SCHDLR_SSPND_DONE_MSCHED_BLOCKED:
+ case ERTS_SCHDLR_SSPND_DONE_NMSCHED_BLOCKED:
case ERTS_SCHDLR_SSPND_YIELD_DONE_MSCHED_BLOCKED:
+ case ERTS_SCHDLR_SSPND_YIELD_DONE_NMSCHED_BLOCKED:
case ERTS_SCHDLR_SSPND_DONE:
case ERTS_SCHDLR_SSPND_YIELD_DONE:
p->flags &= ~F_HAVE_BLCKD_MSCHED;
break;
case ERTS_SCHDLR_SSPND_EINVAL:
default:
- erl_exit(ERTS_ABORT_EXIT, "%s:%d: Internal error: %d\n",
+ erts_exit(ERTS_ABORT_EXIT, "%s:%d: Internal error: %d\n",
+ __FILE__, __LINE__, (int) ssr);
+ }
+ }
+ if (p->flags & F_HAVE_BLCKD_NMSCHED) {
+ ErtsSchedSuspendResult ssr;
+ ssr = erts_block_multi_scheduling(p, ERTS_PROC_LOCK_MAIN, 0, 1, 1);
+ switch (ssr) {
+ case ERTS_SCHDLR_SSPND_YIELD_RESTART:
+ goto yield;
+ case ERTS_SCHDLR_SSPND_DONE_MSCHED_BLOCKED:
+ case ERTS_SCHDLR_SSPND_DONE_NMSCHED_BLOCKED:
+ case ERTS_SCHDLR_SSPND_YIELD_DONE_MSCHED_BLOCKED:
+ case ERTS_SCHDLR_SSPND_YIELD_DONE_NMSCHED_BLOCKED:
+ case ERTS_SCHDLR_SSPND_DONE:
+ case ERTS_SCHDLR_SSPND_YIELD_DONE:
+ p->flags &= ~F_HAVE_BLCKD_MSCHED;
+ break;
+ case ERTS_SCHDLR_SSPND_EINVAL:
+ default:
+ erts_exit(ERTS_ABORT_EXIT, "%s:%d: Internal error: %d\n",
__FILE__, __LINE__, (int) ssr);
}
}
@@ -12597,6 +12791,9 @@ erts_continue_exit_process(Process *p)
ASSERT(!p->common.u.alive.reg);
}
+ if (IS_TRACED_FL(p, F_TRACE_SCHED_EXIT))
+ trace_sched(p, curr_locks, am_out_exited);
+
erts_smp_proc_lock(p, ERTS_PROC_LOCKS_ALL_MINOR);
curr_locks = ERTS_PROC_LOCKS_ALL;
@@ -12618,7 +12815,7 @@ erts_continue_exit_process(Process *p)
{
/* Do *not* use erts_get_runq_proc() */
ErtsRunQueue *rq;
- rq = erts_get_runq_current(ERTS_GET_SCHEDULER_DATA_FROM_PROC(p));
+ rq = erts_get_runq_current(erts_proc_sched_data(p));
erts_smp_runq_lock(rq);
@@ -12664,14 +12861,24 @@ erts_continue_exit_process(Process *p)
break;
}
+#ifdef ERTS_DIRTY_SCHEDULERS
+ if (a & (ERTS_PSFLG_DIRTY_RUNNING
+ | ERTS_PSFLG_DIRTY_RUNNING_SYS)) {
+ p->flags |= F_DELAYED_DEL_PROC;
+ delay_del_proc = 1;
+ /*
+ * The dirty scheduler will also decrease
+ * refc when done...
+ */
+ erts_proc_inc_refc(p);
+ }
+#endif
+
if (refc_inced && !(n & ERTS_PSFLG_IN_RUNQ))
erts_proc_dec_refc(p);
}
dep = (p->flags & F_DISTRIBUTION) ? erts_this_dist_entry : NULL;
- scb = ERTS_PROC_SET_SAVED_CALLS_BUF(p, ERTS_PROC_LOCKS_ALL, NULL);
- pbt = ERTS_PROC_SET_CALL_TIME(p, ERTS_PROC_LOCKS_ALL, NULL);
- nif_export = ERTS_PROC_SET_NIF_TRAP_EXPORT(p, ERTS_PROC_LOCKS_ALL, NULL);
erts_smp_proc_unlock(p, ERTS_PROC_LOCKS_ALL);
#ifdef BM_COUNTERS
@@ -12711,16 +12918,14 @@ erts_continue_exit_process(Process *p)
have none here */
}
- if (scb)
- erts_free(ERTS_ALC_T_CALLS_BUF, (void *) scb);
-
- if (pbt)
- erts_free(ERTS_ALC_T_BPD, (void *) pbt);
+#ifdef ERTS_SMP
+ erts_flush_trace_messages(p, 0);
+#endif
- if (nif_export)
- erts_destroy_nif_export(nif_export);
+ ERTS_TRACER_CLEAR(&ERTS_TRACER(p));
- delete_process(p);
+ if (!delay_del_proc)
+ delete_process(p);
#ifdef ERTS_SMP
erts_smp_proc_lock(p, ERTS_PROC_LOCK_MAIN);
@@ -12750,6 +12955,7 @@ erts_continue_exit_process(Process *p)
ERTS_SMP_LC_ASSERT(ERTS_PROC_LOCK_MAIN == erts_proc_lc_my_proc_locks(p));
+ BUMP_ALL_REDS(p);
}
/*
@@ -13048,10 +13254,10 @@ erts_print_scheduler_info(int to, void *to_arg, ErtsSchedulerData *esdp) {
* The same global atomic is used as refcount.
*
* A BIF that calls this should make sure to schedule out to never come back:
- * erl_halt((int)(- code));
+ * erts_halt(code);
* ERTS_BIF_YIELD1(bif_export[BIF_erlang_halt_1], BIF_P, NIL);
*/
-void erl_halt(int code)
+void erts_halt(int code)
{
if (-1 == erts_smp_atomic32_cmpxchg_acqb(&erts_halt_progress,
erts_no_schedulers,
@@ -13069,11 +13275,13 @@ void erl_halt(int code)
int
erts_dbg_check_halloc_lock(Process *p)
{
+ ErtsSchedulerData *esdp;
if (ERTS_PROC_LOCK_MAIN & erts_proc_lc_my_proc_locks(p))
return 1;
if (p->common.id == ERTS_INVALID_PID)
return 1;
- if (p->scheduler_data && p == p->scheduler_data->match_pseudo_process)
+ esdp = erts_proc_sched_data(p);
+ if (esdp && p == esdp->match_pseudo_process)
return 1;
if (erts_thr_progress_is_blocking())
return 1;
diff --git a/erts/emulator/beam/erl_process.h b/erts/emulator/beam/erl_process.h
index 0c7ad74614..b44ac442aa 100644
--- a/erts/emulator/beam/erl_process.h
+++ b/erts/emulator/beam/erl_process.h
@@ -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.
@@ -79,10 +79,8 @@ struct ErtsNodesMonitor_;
#define ERTS_HAVE_SCHED_UTIL_BALANCING_SUPPORT 0
#define ERTS_MAX_NO_OF_SCHEDULERS 1024
-#ifdef ERTS_DIRTY_SCHEDULERS
#define ERTS_MAX_NO_OF_DIRTY_CPU_SCHEDULERS ERTS_MAX_NO_OF_SCHEDULERS
#define ERTS_MAX_NO_OF_DIRTY_IO_SCHEDULERS ERTS_MAX_NO_OF_SCHEDULERS
-#endif
#define ERTS_DEFAULT_MAX_PROCESSES (1 << 18)
@@ -246,7 +244,9 @@ extern int erts_sched_thread_suggested_stack_size;
typedef enum {
ERTS_SCHDLR_SSPND_DONE_MSCHED_BLOCKED,
+ ERTS_SCHDLR_SSPND_DONE_NMSCHED_BLOCKED,
ERTS_SCHDLR_SSPND_YIELD_DONE_MSCHED_BLOCKED,
+ ERTS_SCHDLR_SSPND_YIELD_DONE_NMSCHED_BLOCKED,
ERTS_SCHDLR_SSPND_DONE,
ERTS_SCHDLR_SSPND_YIELD_RESTART,
ERTS_SCHDLR_SSPND_YIELD_DONE,
@@ -304,6 +304,7 @@ typedef enum {
ERTS_SSI_AUX_WORK_ASYNC_READY_CLEAN_IX,
ERTS_SSI_AUX_WORK_MISC_THR_PRGR_IX,
ERTS_SSI_AUX_WORK_MISC_IX,
+ ERTS_SSI_AUX_WORK_PENDING_EXITERS_IX,
ERTS_SSI_AUX_WORK_SET_TMO_IX,
ERTS_SSI_AUX_WORK_MSEG_CACHE_CHECK_IX,
ERTS_SSI_AUX_WORK_REAP_PORTS_IX,
@@ -336,6 +337,8 @@ typedef enum {
(((erts_aint32_t) 1) << ERTS_SSI_AUX_WORK_MISC_THR_PRGR_IX)
#define ERTS_SSI_AUX_WORK_MISC \
(((erts_aint32_t) 1) << ERTS_SSI_AUX_WORK_MISC_IX)
+#define ERTS_SSI_AUX_WORK_PENDING_EXITERS \
+ (((erts_aint32_t) 1) << ERTS_SSI_AUX_WORK_PENDING_EXITERS_IX)
#define ERTS_SSI_AUX_WORK_SET_TMO \
(((erts_aint32_t) 1) << ERTS_SSI_AUX_WORK_SET_TMO_IX)
#define ERTS_SSI_AUX_WORK_MSEG_CACHE_CHECK \
@@ -645,6 +648,7 @@ struct ErtsSchedulerData_ {
Uint no; /* Scheduler number for normal schedulers */
#ifdef ERTS_DIRTY_SCHEDULERS
ErtsDirtySchedId dirty_no; /* Scheduler number for dirty schedulers */
+ Process *dirty_shadow_process;
#endif
Port *current_port;
ErtsRunQueue *run_queue;
@@ -805,8 +809,27 @@ erts_smp_reset_max_len(ErtsRunQueue *rq, ErtsRunQueueInfo *rqi)
#define ERTS_PSD_CALL_TIME_BP 3
#define ERTS_PSD_DELAYED_GC_TASK_QS 4
#define ERTS_PSD_NIF_TRAP_EXPORT 5
-
-#define ERTS_PSD_SIZE 6
+#define ERTS_PSD_SUSPENDED_SAVED_CALLS_BUF 6
+#define ERTS_PSD_DIRTY_CPU_START 7
+
+#define ERTS_PSD_SIZE 8
+
+#if !defined(HIPE) && !defined(ERTS_DIRTY_SCHEDULERS)
+# undef ERTS_PSD_SUSPENDED_SAVED_CALLS_BUF
+# undef ERTS_PSD_DIRTY_CPU_START
+# undef ERTS_PSD_SIZE
+# define ERTS_PSD_SIZE 6
+#elif !defined(HIPE)
+# undef ERTS_PSD_SUSPENDED_SAVED_CALLS_BUF
+# undef ERTS_PSD_DIRTY_CPU_START
+# undef ERTS_PSD_SIZE
+# define ERTS_PSD_DIRTY_CPU_START 6
+# define ERTS_PSD_SIZE 7
+#elif !defined(ERTS_DIRTY_SCHEDULERS)
+# undef ERTS_PSD_DIRTY_CPU_START
+# undef ERTS_PSD_SIZE
+# define ERTS_PSD_SIZE 7
+#endif
typedef struct {
void *data[ERTS_PSD_SIZE];
@@ -818,8 +841,8 @@ typedef struct {
#define ERTS_PSD_ERROR_HANDLER_BUF_GET_LOCKS ERTS_PROC_LOCK_MAIN
#define ERTS_PSD_ERROR_HANDLER_BUF_SET_LOCKS ERTS_PROC_LOCK_MAIN
-#define ERTS_PSD_SAVED_CALLS_BUF_GET_LOCKS ERTS_PROC_LOCK_MAIN
-#define ERTS_PSD_SAVED_CALLS_BUF_SET_LOCKS ERTS_PROC_LOCK_MAIN
+#define ERTS_PSD_SAVED_CALLS_BUF_GET_LOCKS ((ErtsProcLocks) 0)
+#define ERTS_PSD_SAVED_CALLS_BUF_SET_LOCKS ((ErtsProcLocks) 0)
#define ERTS_PSD_SCHED_ID_GET_LOCKS ERTS_PROC_LOCK_STATUS
#define ERTS_PSD_SCHED_ID_SET_LOCKS ERTS_PROC_LOCK_STATUS
@@ -830,8 +853,8 @@ typedef struct {
#define ERTS_PSD_DELAYED_GC_TASK_QS_GET_LOCKS ERTS_PROC_LOCK_MAIN
#define ERTS_PSD_DELAYED_GC_TASK_QS_SET_LOCKS ERTS_PROC_LOCK_MAIN
-#define ERTS_PSD_NIF_TRAP_EXPORT_GET_LOCKS ERTS_PROC_LOCK_MAIN
-#define ERTS_PSD_NIF_TRAP_EXPORT_SET_LOCKS ERTS_PROC_LOCK_MAIN
+#define ERTS_PSD_NIF_TRAP_EXPORT_GET_LOCKS ((ErtsProcLocks) 0)
+#define ERTS_PSD_NIF_TRAP_EXPORT_SET_LOCKS ((ErtsProcLocks) 0)
typedef struct {
ErtsProcLocks get_locks;
@@ -911,6 +934,15 @@ struct ErtsPendingSuspend_ {
# define BIN_OLD_VHEAP_SZ(p) (p)->bin_old_vheap_sz
# define BIN_OLD_VHEAP(p) (p)->bin_old_vheap
+# define MAX_HEAP_SIZE_GET(p) ((p)->max_heap_size >> 2)
+# define MAX_HEAP_SIZE_SET(p, sz) ((p)->max_heap_size = ((sz) << 2) | \
+ MAX_HEAP_SIZE_FLAGS_GET(p))
+# define MAX_HEAP_SIZE_FLAGS_GET(p) ((p)->max_heap_size & 0x3)
+# define MAX_HEAP_SIZE_FLAGS_SET(p, flags) ((p)->max_heap_size = flags | \
+ ((p)->max_heap_size & ~0x3))
+# define MAX_HEAP_SIZE_KILL 1
+# define MAX_HEAP_SIZE_LOG 2
+
struct process {
ErtsPTabElementCommon common; /* *Need* to be first in struct */
@@ -925,7 +957,6 @@ struct process {
Eterm* stop; /* Stack top */
Eterm* heap; /* Heap start */
Eterm* hend; /* Heap end */
- Eterm* abandoned_heap;
Uint heap_sz; /* Size of heap in words */
Uint min_heap_size; /* Minimum size of heap (in words). */
Uint min_vheap_size; /* Minimum size of virtual heap (in words). */
@@ -941,6 +972,16 @@ struct process {
#endif
/*
+ * Moved to after "struct hipe_process_state hipe", as a temporary fix for
+ * LLVM hard-coding offsetof(struct process, hipe.nstack) (sic!)
+ * (see void X86FrameLowering::adjustForHiPEPrologue(...) in
+ * lib/Target/X86/X86FrameLowering.cpp).
+ *
+ * Used to be below "Eterm* hend".
+ */
+ Eterm* abandoned_heap;
+
+ /*
* Saved x registers.
*/
Uint arity; /* Number of live argument registers (only valid
@@ -1019,6 +1060,7 @@ struct process {
Eterm *old_hend; /* Heap pointers for generational GC. */
Eterm *old_htop;
Eterm *old_heap;
+ Uint max_heap_size; /* Maximum size of heap (in words). */
Uint16 gen_gcs; /* Number of (minor) generational GCs. */
Uint16 max_gen_gcs; /* Max minor gen GCs before fullsweep. */
ErlOffHeap off_heap; /* Off-heap data updated by copy_struct(). */
@@ -1026,7 +1068,7 @@ struct process {
ErlHeapFragment* live_hf_end;
ErtsMessage *msg_frag; /* Pointer to message fragment list */
Uint mbuf_sz; /* Total size of heap fragments and message fragments */
- ErtsPSD *psd; /* Rarely used process specific data */
+ erts_smp_atomic_t psd; /* Rarely used process specific data */
Uint64 bin_vheap_sz; /* Virtual heap block size for binaries */
Uint64 bin_old_vheap_sz; /* Virtual old heap block size for binaries */
@@ -1041,6 +1083,7 @@ struct process {
#ifdef ERTS_SMP
ErlMessageInQueue msg_inq;
+ ErlTraceMessageQueue *trace_msg_q;
ErtsPendExit pending_exit;
erts_proc_lock_t lock;
ErtsSchedulerData *scheduler_data;
@@ -1070,6 +1113,10 @@ struct process {
Uint space_verified; /* Avoid HAlloc forcing heap fragments when */
Eterm* space_verified_from; /* we rely on available heap space (TestHeap) */
#endif
+
+#ifdef DEBUG
+ Uint debug_reds_in;
+#endif
};
extern const Process erts_invalid_process;
@@ -1162,7 +1209,10 @@ void erts_check_for_holes(Process* p);
#define ERTS_PSFLG_DIRTY_CPU_PROC ERTS_PSFLG_BIT(20)
#define ERTS_PSFLG_DIRTY_IO_PROC ERTS_PSFLG_BIT(21)
#define ERTS_PSFLG_DIRTY_ACTIVE_SYS ERTS_PSFLG_BIT(22)
-#define ERTS_PSFLG_MAX (ERTS_PSFLGS_ZERO_BIT_OFFSET + 22)
+#define ERTS_PSFLG_DIRTY_RUNNING ERTS_PSFLG_BIT(23)
+#define ERTS_PSFLG_DIRTY_RUNNING_SYS ERTS_PSFLG_BIT(24)
+
+#define ERTS_PSFLG_MAX (ERTS_PSFLGS_ZERO_BIT_OFFSET + 24)
#define ERTS_PSFLGS_DIRTY_WORK (ERTS_PSFLG_DIRTY_CPU_PROC \
| ERTS_PSFLG_DIRTY_IO_PROC \
@@ -1173,6 +1223,11 @@ void erts_check_for_holes(Process* p);
| ERTS_PSFLG_IN_PRQ_NORMAL \
| ERTS_PSFLG_IN_PRQ_LOW)
+#define ERTS_PSFLGS_VOLATILE_HEAP (ERTS_PSFLG_EXITING \
+ | ERTS_PSFLG_PENDING_EXIT \
+ | ERTS_PSFLG_DIRTY_RUNNING \
+ | ERTS_PSFLG_DIRTY_RUNNING_SYS)
+
#define ERTS_PSFLGS_GET_ACT_PRIO(PSFLGS) \
(((PSFLGS) >> ERTS_PSFLGS_ACT_PRIO_OFFSET) & ERTS_PSFLGS_PRIO_MASK)
#define ERTS_PSFLGS_GET_USR_PRIO(PSFLGS) \
@@ -1214,6 +1269,7 @@ void erts_check_for_holes(Process* p);
* Static flags that do not change after process creation.
*/
#define ERTS_STC_FLG_SYSTEM_PROC (((Uint32) 1) << 0)
+#define ERTS_STC_FLG_SHADOW_PROC (((Uint32) 1) << 1)
/* The sequential tracing token is a tuple of size 5:
*
@@ -1264,6 +1320,8 @@ typedef struct {
Uint min_vheap_size; /* Minimum virtual heap size */
int priority; /* Priority for process. */
Uint16 max_gen_gcs; /* Maximum number of gen GCs before fullsweep. */
+ Uint max_heap_size; /* Maximum heap size in words */
+ Uint max_heap_flags; /* Maximum heap flags (kill | log) */
int scheduler;
} ErlSpawnOpts;
@@ -1281,7 +1339,7 @@ ERTS_GLB_INLINE void erts_heap_frag_shrink(Process* p, Eterm* hp)
{
ErlHeapFragment* hf = MBUF(p);
- ASSERT(hf!=NULL && (hp - hf->mem < (unsigned long)hf->alloc_size));
+ ASSERT(hf!=NULL && (hp - hf->mem < hf->alloc_size));
hf->used_size = hp - hf->mem;
}
@@ -1339,6 +1397,10 @@ extern int erts_system_profile_ts_type;
#define F_OFF_HEAP_MSGQ_CHNG (1 << 14) /* Off heap msg queue changing */
#define F_ABANDONED_HEAP_USE (1 << 15) /* Have usage of abandoned heap */
#define F_DELAY_GC (1 << 16) /* Similar to disable GC (see below) */
+#define F_SCHDLR_ONLN_WAITQ (1 << 17) /* Process enqueued waiting to change schedulers online */
+#define F_HAVE_BLCKD_NMSCHED (1 << 18) /* Process has blocked normal multi-scheduling */
+#define F_HIPE_MODE (1 << 19)
+#define F_DELAYED_DEL_PROC (1 << 20) /* Delay delete process (dirty proc exit case) */
/*
* F_DISABLE_GC and F_DELAY_GC are similar. Both will prevent
@@ -1356,7 +1418,6 @@ extern int erts_system_profile_ts_type;
#define F_TRACE_FLAG(N) (1 << (ERTS_TRACE_TS_TYPE_BITS + (N)))
/* process trace_flags */
-
#define F_NOW_TS (ERTS_TRACE_FLG_NOW_TIMESTAMP \
<< ERTS_TRACE_FLAGS_TS_TYPE_SHIFT)
#define F_STRICT_MON_TS (ERTS_TRACE_FLG_STRICT_MONOTONIC_TIMESTAMP \
@@ -1378,8 +1439,7 @@ extern int erts_system_profile_ts_type;
#define F_TRACE_ARITY_ONLY F_TRACE_FLAG(12)
#define F_TRACE_RETURN_TO F_TRACE_FLAG(13) /* Return_to trace when breakpoint tracing */
#define F_TRACE_SILENT F_TRACE_FLAG(14) /* No call trace msg suppress */
-#define F_TRACER F_TRACE_FLAG(15) /* May be (has been) tracer */
-#define F_EXCEPTION_TRACE F_TRACE_FLAG(16) /* May have exception trace on stack */
+#define F_EXCEPTION_TRACE F_TRACE_FLAG(15) /* May have exception trace on stack */
/* port trace flags, currently the same as process trace flags */
#define F_TRACE_SCHED_PORTS F_TRACE_FLAG(17) /* Trace of port scheduling */
@@ -1408,12 +1468,14 @@ extern int erts_system_profile_ts_type;
| F_TRACE_SCHED_PORTS | F_TRACE_SCHED_NO \
| F_TRACE_SCHED_EXIT)
+
#define ERTS_TRACEE_MODIFIER_FLAGS \
- (F_TRACE_SILENT | F_TIMESTAMP_MASK | F_TRACE_SCHED_NO)
-#define ERTS_PORT_TRACEE_FLAGS \
- (ERTS_TRACEE_MODIFIER_FLAGS | F_TRACE_PORTS | F_TRACE_SCHED_PORTS)
+ (F_TRACE_SILENT | F_TIMESTAMP_MASK | F_TRACE_SCHED_NO \
+ | F_TRACE_RECEIVE | F_TRACE_SEND)
+#define ERTS_PORT_TRACEE_FLAGS \
+ (ERTS_TRACEE_MODIFIER_FLAGS | F_TRACE_PORTS | F_TRACE_SCHED_PORTS)
#define ERTS_PROC_TRACEE_FLAGS \
- ((TRACEE_FLAGS & ~ERTS_PORT_TRACEE_FLAGS) | ERTS_TRACEE_MODIFIER_FLAGS)
+ ((TRACEE_FLAGS & ~ERTS_PORT_TRACEE_FLAGS) | ERTS_TRACEE_MODIFIER_FLAGS)
#define SEQ_TRACE_FLAG(N) (1 << (ERTS_TRACE_TS_TYPE_BITS + (N)))
@@ -1533,6 +1595,7 @@ int erts_setup_nif_gc(Process* proc, Eterm** objv, int* nobj); /* see erl_nif.c
void erts_destroy_nif_export(void *); /* see erl_nif.c */
ErtsProcList *erts_proclist_create(Process *);
+ErtsProcList *erts_proclist_copy(ErtsProcList *);
void erts_proclist_destroy(ErtsProcList *);
ERTS_GLB_INLINE int erts_proclist_same(ErtsProcList *, Process *);
@@ -1714,32 +1777,27 @@ void erts_schedule_thr_prgr_later_cleanup_op(void (*)(void *),
ErtsThrPrgrLaterOp *,
UWord);
void erts_schedule_complete_off_heap_message_queue_change(Eterm pid);
+void erts_schedule_flush_trace_messages(Eterm pid);
+int erts_flush_trace_messages(Process *c_p, ErtsProcLocks locks);
#if defined(ERTS_SMP) && defined(ERTS_ENABLE_LOCK_CHECK)
int erts_dbg_check_halloc_lock(Process *p);
#endif
-#ifdef DEBUG
-void erts_dbg_multi_scheduling_return_trap(Process *, Eterm);
-#endif
-int erts_get_max_no_executing_schedulers(void);
#if defined(ERTS_SMP) || defined(ERTS_DIRTY_SCHEDULERS)
-ErtsSchedSuspendResult
-erts_schedulers_state(Uint *, Uint *, Uint *, Uint *, Uint *, Uint *, int);
+void
+erts_schedulers_state(Uint *, Uint *, Uint *, Uint *, Uint *, Uint *, Uint *, Uint *);
#endif
#ifdef ERTS_SMP
ErtsSchedSuspendResult
erts_set_schedulers_online(Process *p,
ErtsProcLocks plocks,
Sint new_no,
- Sint *old_no
-#ifdef ERTS_DIRTY_SCHEDULERS
- , int dirty_only
-#endif
- );
+ Sint *old_no,
+ int dirty_only);
ErtsSchedSuspendResult
-erts_block_multi_scheduling(Process *, ErtsProcLocks, int, int);
+erts_block_multi_scheduling(Process *, ErtsProcLocks, int, int, int);
int erts_is_multi_scheduling_blocked(void);
-Eterm erts_multi_scheduling_blockers(Process *);
+Eterm erts_multi_scheduling_blockers(Process *, int);
void erts_start_schedulers(void);
void erts_alloc_notify_delayed_dealloc(int);
void erts_alloc_ensure_handle_delayed_dealloc_call(int);
@@ -1763,7 +1821,8 @@ erts_aint32_t erts_set_aux_work_timeout(int, erts_aint32_t, int);
void erts_sched_notify_check_cpu_bind(void);
Uint erts_active_schedulers(void);
void erts_init_process(int, int, int);
-Eterm erts_process_status(Process *, ErtsProcLocks, Process *, Eterm);
+Eterm erts_process_state2status(erts_aint32_t);
+Eterm erts_process_status(Process *, Eterm);
Uint erts_run_queues_len(Uint *, int, int);
void erts_add_to_runq(Process *);
Eterm erts_bound_schedulers_term(Process *c_p);
@@ -1840,19 +1899,11 @@ int erts_debug_wait_completed(Process *c_p, int flags);
Uint erts_process_memory(Process *c_p, int incl_msg_inq);
-#ifdef ERTS_SMP
-# define ERTS_GET_SCHEDULER_DATA_FROM_PROC(PROC) ((PROC)->scheduler_data)
-# define ERTS_PROC_GET_SCHDATA(PROC) ((PROC)->scheduler_data)
-#else
-# define ERTS_GET_SCHEDULER_DATA_FROM_PROC(PROC) (erts_scheduler_data)
-# define ERTS_PROC_GET_SCHDATA(PROC) (erts_scheduler_data)
-#endif
-
#ifdef ERTS_DO_VERIFY_UNUSED_TEMP_ALLOC
# define ERTS_VERIFY_UNUSED_TEMP_ALLOC(P) \
do { \
ErtsSchedulerData *esdp__ = ((P) \
- ? ERTS_PROC_GET_SCHDATA((Process *) (P)) \
+ ? erts_proc_sched_data((Process *) (P)) \
: erts_get_scheduler_data()); \
if (esdp__ && !ERTS_SCHEDULER_IS_DIRTY(esdp__)) \
esdp__->verify_unused_temp_alloc( \
@@ -1907,18 +1958,19 @@ do { \
#define ERTS_SMP_LC_CHK_RUNQ_LOCK(RQ, L)
#endif
-void *erts_psd_set_init(Process *p, ErtsProcLocks plocks, int ix, void *data);
+void *erts_psd_set_init(Process *p, int ix, void *data);
ERTS_GLB_INLINE void *
erts_psd_get(Process *p, int ix);
ERTS_GLB_INLINE void *
-erts_psd_set(Process *p, ErtsProcLocks plocks, int ix, void *new);
+erts_psd_set(Process *p, int ix, void *new);
#if ERTS_GLB_INLINE_INCL_FUNC_DEF
ERTS_GLB_INLINE void *
erts_psd_get(Process *p, int ix)
{
+ ErtsPSD *psd;
#if defined(ERTS_SMP) && defined(ERTS_ENABLE_LOCK_CHECK)
ErtsProcLocks locks = erts_proc_lc_my_proc_locks(p);
if (ERTS_LC_PSD_ANY_LOCK == erts_psd_required_locks[ix].get_locks)
@@ -1929,71 +1981,95 @@ erts_psd_get(Process *p, int ix)
|| erts_thr_progress_is_blocking());
}
#endif
+
+ psd = (ErtsPSD *) erts_smp_atomic_read_nob(&p->psd);
ASSERT(0 <= ix && ix < ERTS_PSD_SIZE);
- return p->psd ? p->psd->data[ix] : NULL;
+ if (!psd)
+ return NULL;
+ ERTS_SMP_DATA_DEPENDENCY_READ_MEMORY_BARRIER;
+ return psd->data[ix];
}
-
-/*
- * NOTE: erts_psd_set() might release and reacquire locks on 'p'.
- */
ERTS_GLB_INLINE void *
-erts_psd_set(Process *p, ErtsProcLocks plocks, int ix, void *data)
+erts_psd_set(Process *p, int ix, void *data)
{
+ ErtsPSD *psd;
#if defined(ERTS_SMP) && defined(ERTS_ENABLE_LOCK_CHECK)
ErtsProcLocks locks = erts_proc_lc_my_proc_locks(p);
- if (ERTS_LC_PSD_ANY_LOCK == erts_psd_required_locks[ix].set_locks)
- ERTS_SMP_LC_ASSERT(locks || erts_thr_progress_is_blocking());
- else {
- locks &= erts_psd_required_locks[ix].set_locks;
- ERTS_SMP_LC_ASSERT(erts_psd_required_locks[ix].set_locks == locks
- || erts_thr_progress_is_blocking());
+ erts_aint32_t state = state = erts_smp_atomic32_read_nob(&p->state);
+ if (!(state & ERTS_PSFLG_FREE)) {
+ if (ERTS_LC_PSD_ANY_LOCK == erts_psd_required_locks[ix].set_locks)
+ ERTS_SMP_LC_ASSERT(locks || erts_thr_progress_is_blocking());
+ else {
+ locks &= erts_psd_required_locks[ix].set_locks;
+ ERTS_SMP_LC_ASSERT(erts_psd_required_locks[ix].set_locks == locks
+ || erts_thr_progress_is_blocking());
+ }
}
#endif
+ psd = (ErtsPSD *) erts_smp_atomic_read_nob(&p->psd);
ASSERT(0 <= ix && ix < ERTS_PSD_SIZE);
- if (p->psd) {
- void *old = p->psd->data[ix];
- p->psd->data[ix] = data;
+ if (psd) {
+ void *old;
+#ifdef ERTS_SMP
+#ifdef ETHR_ORDERED_READ_DEPEND
+ ETHR_MEMBAR(ETHR_LoadStore|ETHR_StoreStore);
+#else
+ ETHR_MEMBAR(ETHR_LoadLoad|ETHR_LoadStore|ETHR_StoreStore);
+#endif
+#endif
+ old = psd->data[ix];
+ psd->data[ix] = data;
return old;
}
- else {
- if (!data)
- return NULL;
- else
- return erts_psd_set_init(p, plocks, ix, data);
- }
+
+ if (!data)
+ return NULL;
+
+ return erts_psd_set_init(p, ix, data);
}
#endif
-#define ERTS_PROC_SCHED_ID(P, L, ID) \
- ((UWord) erts_psd_set((P), (L), ERTS_PSD_SCHED_ID, (void *) (ID)))
+#define ERTS_PROC_SCHED_ID(P, ID) \
+ ((UWord) erts_psd_set((P), ERTS_PSD_SCHED_ID, (void *) (ID)))
#define ERTS_PROC_GET_SAVED_CALLS_BUF(P) \
((struct saved_calls *) erts_psd_get((P), ERTS_PSD_SAVED_CALLS_BUF))
-#define ERTS_PROC_SET_SAVED_CALLS_BUF(P, L, SCB) \
- ((struct saved_calls *) erts_psd_set((P), (L), ERTS_PSD_SAVED_CALLS_BUF, (void *) (SCB)))
+#define ERTS_PROC_SET_SAVED_CALLS_BUF(P, SCB) \
+ ((struct saved_calls *) erts_psd_set((P), ERTS_PSD_SAVED_CALLS_BUF, (void *) (SCB)))
#define ERTS_PROC_GET_CALL_TIME(P) \
((process_breakpoint_time_t *) erts_psd_get((P), ERTS_PSD_CALL_TIME_BP))
-#define ERTS_PROC_SET_CALL_TIME(P, L, PBT) \
- ((process_breakpoint_time_t *) erts_psd_set((P), (L), ERTS_PSD_CALL_TIME_BP, (void *) (PBT)))
+#define ERTS_PROC_SET_CALL_TIME(P, PBT) \
+ ((process_breakpoint_time_t *) erts_psd_set((P), ERTS_PSD_CALL_TIME_BP, (void *) (PBT)))
#define ERTS_PROC_GET_DELAYED_GC_TASK_QS(P) \
((ErtsProcSysTaskQs *) erts_psd_get((P), ERTS_PSD_DELAYED_GC_TASK_QS))
-#define ERTS_PROC_SET_DELAYED_GC_TASK_QS(P, L, PBT) \
- ((ErtsProcSysTaskQs *) erts_psd_set((P), (L), ERTS_PSD_DELAYED_GC_TASK_QS, (void *) (PBT)))
+#define ERTS_PROC_SET_DELAYED_GC_TASK_QS(P, PBT) \
+ ((ErtsProcSysTaskQs *) erts_psd_set((P), ERTS_PSD_DELAYED_GC_TASK_QS, (void *) (PBT)))
#define ERTS_PROC_GET_NIF_TRAP_EXPORT(P) \
erts_psd_get((P), ERTS_PSD_NIF_TRAP_EXPORT)
-#define ERTS_PROC_SET_NIF_TRAP_EXPORT(P, L, NTE) \
- erts_psd_set((P), (L), ERTS_PSD_NIF_TRAP_EXPORT, (void *) (NTE))
+#define ERTS_PROC_SET_NIF_TRAP_EXPORT(P, NTE) \
+ erts_psd_set((P), ERTS_PSD_NIF_TRAP_EXPORT, (void *) (NTE))
+#ifdef HIPE
+#define ERTS_PROC_GET_SUSPENDED_SAVED_CALLS_BUF(P) \
+ ((struct saved_calls *) erts_psd_get((P), ERTS_PSD_SUSPENDED_SAVED_CALLS_BUF))
+#define ERTS_PROC_SET_SUSPENDED_SAVED_CALLS_BUF(P, SCB) \
+ ((struct saved_calls *) erts_psd_set((P), ERTS_PSD_SUSPENDED_SAVED_CALLS_BUF, (void *) (SCB)))
+#endif
+
+#ifdef ERTS_DIRTY_SCHEDULERS
+#define ERTS_PROC_GET_DIRTY_CPU_START(P) \
+ ((void *) erts_psd_get((P), ERTS_PSD_DIRTY_CPU_START))
+#define ERTS_PROC_SET_DIRTY_CPU_START(P, DCS) \
+ ((void *) erts_psd_set((P), ERTS_PSD_DIRTY_CPU_START, (void *) (DCS)))
+#endif
ERTS_GLB_INLINE Eterm erts_proc_get_error_handler(Process *p);
-ERTS_GLB_INLINE Eterm erts_proc_set_error_handler(Process *p,
- ErtsProcLocks plocks,
- Eterm handler);
+ERTS_GLB_INLINE Eterm erts_proc_set_error_handler(Process *p, Eterm handler);
#if ERTS_GLB_INLINE_INCL_FUNC_DEF
ERTS_GLB_INLINE Eterm
@@ -2009,13 +2085,13 @@ erts_proc_get_error_handler(Process *p)
}
ERTS_GLB_INLINE Eterm
-erts_proc_set_error_handler(Process *p, ErtsProcLocks plocks, Eterm handler)
+erts_proc_set_error_handler(Process *p, Eterm handler)
{
void *old_val;
void *new_val;
ASSERT(is_atom(handler));
new_val = (handler == am_error_handler) ? NULL : (void *) (UWord) handler;
- old_val = erts_psd_set(p, plocks, ERTS_PSD_ERROR_HANDLER, new_val);
+ old_val = erts_psd_set(p, ERTS_PSD_ERROR_HANDLER, new_val);
if (!old_val)
return am_error_handler;
else {
@@ -2134,6 +2210,7 @@ erts_check_emigration_need(ErtsRunQueue *c_rq, int prio)
#endif
+ERTS_GLB_INLINE ErtsSchedulerData *erts_proc_sched_data(Process *c_p);
ERTS_GLB_INLINE int erts_is_scheduler_bound(ErtsSchedulerData *esdp);
ERTS_GLB_INLINE Process *erts_get_current_process(void);
ERTS_GLB_INLINE Eterm erts_get_current_pid(void);
@@ -2167,6 +2244,31 @@ ERTS_GLB_INLINE void erts_shrink_message_heap(ErtsMessage **msgpp, Process *pp,
#if ERTS_GLB_INLINE_INCL_FUNC_DEF
ERTS_GLB_INLINE
+ErtsSchedulerData *erts_proc_sched_data(Process *c_p)
+{
+ ErtsSchedulerData *esdp;
+ ASSERT(c_p);
+#if !defined(ERTS_SMP)
+ esdp = erts_get_scheduler_data();
+#else
+ esdp = c_p->scheduler_data;
+# if defined(ERTS_DIRTY_SCHEDULERS)
+ if (esdp) {
+ ASSERT(esdp == erts_get_scheduler_data());
+ ASSERT(!ERTS_SCHEDULER_IS_DIRTY(esdp));
+ }
+ else {
+ esdp = erts_get_scheduler_data();
+ ASSERT(esdp);
+ ASSERT(ERTS_SCHEDULER_IS_DIRTY(esdp));
+ }
+# endif
+#endif
+ ASSERT(esdp);
+ return esdp;
+}
+
+ERTS_GLB_INLINE
int erts_is_scheduler_bound(ErtsSchedulerData *esdp)
{
if (!esdp)
@@ -2321,14 +2423,17 @@ erts_alloc_message_heap_state(Process *pp,
ErlOffHeap **ohpp)
{
int on_heap;
+ ErtsMessage *mp;
if ((*psp) & ERTS_PSFLG_OFF_HEAP_MSGQ) {
- ErtsMessage *mp = erts_alloc_message(sz, hpp);
+ mp = erts_alloc_message(sz, hpp);
*ohpp = sz == 0 ? NULL : &mp->hfrag.off_heap;
return mp;
}
- return erts_try_alloc_message_on_heap(pp, psp, plp, sz, hpp, ohpp, &on_heap);
+ mp = erts_try_alloc_message_on_heap(pp, psp, plp, sz, hpp, ohpp, &on_heap);
+ ASSERT(pp || !on_heap);
+ return mp;
}
ERTS_GLB_INLINE ErtsMessage *
@@ -2338,7 +2443,7 @@ erts_alloc_message_heap(Process *pp,
Eterm **hpp,
ErlOffHeap **ohpp)
{
- erts_aint32_t state = erts_smp_atomic32_read_nob(&pp->state);
+ erts_aint32_t state = pp ? erts_smp_atomic32_read_nob(&pp->state) : 0;
return erts_alloc_message_heap_state(pp, &state, plp, sz, hpp, ohpp);
}
@@ -2378,7 +2483,7 @@ ERTS_GLB_INLINE ErtsAtomCacheMap *
erts_get_atom_cache_map(Process *c_p)
{
ErtsSchedulerData *esdp = (c_p
- ? ERTS_PROC_GET_SCHDATA(c_p)
+ ? erts_proc_sched_data(c_p)
: erts_get_scheduler_data());
ASSERT(esdp);
return &esdp->atom_cache_map;
@@ -2462,6 +2567,6 @@ erts_sched_poke(ErtsSchedulerSleepInfo *ssi)
#endif
-void erl_halt(int code);
+void erts_halt(int code);
extern erts_smp_atomic32_t erts_halt_progress;
extern int erts_halt_code;
diff --git a/erts/emulator/beam/erl_process_dict.c b/erts/emulator/beam/erl_process_dict.c
index 36d16f7f42..d8c2eaba94 100644
--- a/erts/emulator/beam/erl_process_dict.c
+++ b/erts/emulator/beam/erl_process_dict.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.
@@ -392,7 +392,7 @@ static void pd_hash_erase(Process *p, Eterm id, Eterm *ret)
"display term found in line %d:\n"
"%T\n", p->common.id, __LINE__, old);
#endif
- erl_exit(1, "Damaged process dictionary found during erase/1.");
+ erts_exit(ERTS_ERROR_EXIT, "Damaged process dictionary found during erase/1.");
}
if ((range = HASH_RANGE(p->dictionary)) > INITIAL_SIZE &&
range / 2 > (p->dictionary->numElements)) {
@@ -452,7 +452,7 @@ Eterm pd_hash_get_with_hval(Process *p, Eterm bucket, Eterm id)
"display term found in line %d:\n"
"%T\n", p->common.id, __LINE__, bucket);
#endif
- erl_exit(1, "Damaged process dictionary found during get/1.");
+ erts_exit(ERTS_ERROR_EXIT, "Damaged process dictionary found during get/1.");
}
return am_undefined;
}
@@ -707,7 +707,7 @@ static Eterm pd_hash_put(Process *p, Eterm id, Eterm value)
"%T\n", p->common.id, __LINE__, old);
#endif
- erl_exit(1, "Damaged process dictionary found during put/2.");
+ erts_exit(ERTS_ERROR_EXIT, "Damaged process dictionary found during put/2.");
}
if (HASH_RANGE(p->dictionary) <= p->dictionary->numElements) {
grow(p);
@@ -1061,7 +1061,7 @@ static void pd_check(ProcDict *pd)
}
continue;
} else {
- erl_exit(1,
+ erts_exit(ERTS_ERROR_EXIT,
"Found tag 0x%08x in process dictionary at position %d",
(unsigned long) t, (int) i);
}
diff --git a/erts/emulator/beam/erl_process_dict.h b/erts/emulator/beam/erl_process_dict.h
index dac214c8a1..387562058c 100644
--- a/erts/emulator/beam/erl_process_dict.h
+++ b/erts/emulator/beam/erl_process_dict.h
@@ -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/erts/emulator/beam/erl_process_dump.c b/erts/emulator/beam/erl_process_dump.c
index 39c36ee7a9..eeaa9a569c 100644
--- a/erts/emulator/beam/erl_process_dump.c
+++ b/erts/emulator/beam/erl_process_dump.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.
@@ -103,7 +103,7 @@ Uint erts_process_memory(Process *p, int incl_msg_inq) {
size += p->arity * sizeof(p->arg_reg[0]);
}
- if (p->psd)
+ if (erts_smp_atomic_read_nob(&p->psd) != (erts_aint_t) NULL)
size += sizeof(ErtsPSD);
scb = ERTS_PROC_GET_SAVED_CALLS_BUF(p);
@@ -568,23 +568,21 @@ dump_externally(int to, void *to_arg, Eterm term)
}
}
-void erts_dump_process_state(int to, void *to_arg, erts_aint32_t psflg) {
- if (psflg & ERTS_PSFLG_FREE)
- erts_print(to, to_arg, "Non Existing\n"); /* Should never happen */
- else if (psflg & ERTS_PSFLG_EXITING)
- erts_print(to, to_arg, "Exiting\n");
- else if (psflg & ERTS_PSFLG_GC) {
- erts_print(to, to_arg, "Garbing\n");
- }
- else if (psflg & ERTS_PSFLG_SUSPENDED)
- erts_print(to, to_arg, "Suspended\n");
- else if (psflg & ERTS_PSFLG_RUNNING) {
- erts_print(to, to_arg, "Running\n");
+void erts_dump_process_state(int to, void *to_arg, erts_aint32_t psflg)
+{
+ char *s;
+ switch (erts_process_state2status(psflg)) {
+ case am_free: s = "Non Existing"; break; /* Should never happen */
+ case am_exiting: s = "Exiting"; break;
+ case am_garbage_collecting: s = "Garbing"; break;
+ case am_suspended: s = "Suspended"; break;
+ case am_running: s = "Running"; break;
+ case am_runnable: s = "Scheduled"; break;
+ case am_waiting: s = "Waiting"; break;
+ default: s = "Undefined"; break; /* Should never happen */
}
- else if (psflg & ERTS_PSFLG_ACTIVE)
- erts_print(to, to_arg, "Scheduled\n");
- else
- erts_print(to, to_arg, "Waiting\n");
+
+ erts_print(to, to_arg, "%s\n", s);
}
void
@@ -668,6 +666,10 @@ erts_dump_extended_process_state(int to, void *to_arg, erts_aint32_t psflg) {
erts_print(to, to_arg, "DIRTY_IO_PROC"); break;
case ERTS_PSFLG_DIRTY_ACTIVE_SYS:
erts_print(to, to_arg, "DIRTY_ACTIVE_SYS"); break;
+ case ERTS_PSFLG_DIRTY_RUNNING:
+ erts_print(to, to_arg, "DIRTY_RUNNING"); break;
+ case ERTS_PSFLG_DIRTY_RUNNING_SYS:
+ erts_print(to, to_arg, "DIRTY_RUNNING_SYS"); break;
default:
erts_print(to, to_arg, "UNKNOWN(%d)", chk); break;
}
diff --git a/erts/emulator/beam/erl_process_lock.c b/erts/emulator/beam/erl_process_lock.c
index 0bee2c848c..a69185bc5c 100644
--- a/erts/emulator/beam/erl_process_lock.c
+++ b/erts/emulator/beam/erl_process_lock.c
@@ -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.
@@ -106,6 +106,7 @@ static struct {
Sint16 proc_lock_msgq;
Sint16 proc_lock_btm;
Sint16 proc_lock_status;
+ Sint16 proc_lock_trace;
} lc_id;
#endif
@@ -152,6 +153,7 @@ erts_init_proc_lock(int cpus)
lc_id.proc_lock_msgq = erts_lc_get_lock_order_id("proc_msgq");
lc_id.proc_lock_btm = erts_lc_get_lock_order_id("proc_btm");
lc_id.proc_lock_status = erts_lc_get_lock_order_id("proc_status");
+ lc_id.proc_lock_trace = erts_lc_get_lock_order_id("proc_trace");
#endif
}
@@ -1057,6 +1059,11 @@ erts_proc_lock_init(Process *p)
#ifdef ERTS_ENABLE_LOCK_CHECK
erts_lc_trylock(1, &p->lock.status.lc);
#endif
+ erts_mtx_init_x(&p->lock.trace, "proc_trace", p->common.id, do_lock_count);
+ ethr_mutex_lock(&p->lock.trace.mtx);
+#ifdef ERTS_ENABLE_LOCK_CHECK
+ erts_lc_trylock(1, &p->lock.trace.lc);
+#endif
#endif
#ifdef ERTS_PROC_LOCK_DEBUG
for (i = 0; i <= ERTS_PROC_LOCK_MAX_BIT; i++)
@@ -1078,6 +1085,7 @@ erts_proc_lock_fin(Process *p)
erts_mtx_destroy(&p->lock.msgq);
erts_mtx_destroy(&p->lock.btm);
erts_mtx_destroy(&p->lock.status);
+ erts_mtx_destroy(&p->lock.trace);
#endif
#if defined(ERTS_ENABLE_LOCK_COUNT) && defined(ERTS_SMP)
erts_lcnt_proc_lock_destroy(p);
@@ -1100,26 +1108,29 @@ void erts_lcnt_enable_proc_lock_count(int enable) {
void erts_lcnt_proc_lock_init(Process *p) {
if (!(erts_lcnt_rt_options & ERTS_LCNT_OPT_PROCLOCK)) {
erts_lcnt_init_lock_empty(&(p->lock.lcnt_main));
+ erts_lcnt_init_lock_empty(&(p->lock.lcnt_link));
erts_lcnt_init_lock_empty(&(p->lock.lcnt_msgq));
erts_lcnt_init_lock_empty(&(p->lock.lcnt_btm));
- erts_lcnt_init_lock_empty(&(p->lock.lcnt_link));
erts_lcnt_init_lock_empty(&(p->lock.lcnt_status));
+ erts_lcnt_init_lock_empty(&(p->lock.lcnt_trace));
} else { /* now the common case */
Eterm pid = (p->common.id != ERTS_INVALID_PID) ? p->common.id : NIL;
erts_lcnt_init_lock_x(&(p->lock.lcnt_main), "proc_main", ERTS_LCNT_LT_PROCLOCK, pid);
+ erts_lcnt_init_lock_x(&(p->lock.lcnt_link), "proc_link", ERTS_LCNT_LT_PROCLOCK, pid);
erts_lcnt_init_lock_x(&(p->lock.lcnt_msgq), "proc_msgq", ERTS_LCNT_LT_PROCLOCK, pid);
erts_lcnt_init_lock_x(&(p->lock.lcnt_btm), "proc_btm", ERTS_LCNT_LT_PROCLOCK, pid);
- erts_lcnt_init_lock_x(&(p->lock.lcnt_link), "proc_link", ERTS_LCNT_LT_PROCLOCK, pid);
erts_lcnt_init_lock_x(&(p->lock.lcnt_status),"proc_status",ERTS_LCNT_LT_PROCLOCK, pid);
+ erts_lcnt_init_lock_x(&(p->lock.lcnt_trace), "proc_trace", ERTS_LCNT_LT_PROCLOCK, pid);
} /* the lock names should really be aligned to four characters */
} /* logic reversed */
void erts_lcnt_proc_lock_destroy(Process *p) {
erts_lcnt_destroy_lock(&(p->lock.lcnt_main));
+ erts_lcnt_destroy_lock(&(p->lock.lcnt_link));
erts_lcnt_destroy_lock(&(p->lock.lcnt_msgq));
erts_lcnt_destroy_lock(&(p->lock.lcnt_btm));
- erts_lcnt_destroy_lock(&(p->lock.lcnt_link));
erts_lcnt_destroy_lock(&(p->lock.lcnt_status));
+ erts_lcnt_destroy_lock(&(p->lock.lcnt_trace));
}
static void lcnt_enable_proc_lock_count(Process *proc, int enable) {
@@ -1138,10 +1149,11 @@ static void lcnt_enable_proc_lock_count(Process *proc, int enable) {
void erts_lcnt_proc_lock(erts_proc_lock_t *lock, ErtsProcLocks locks) {
if (!(erts_lcnt_rt_options & ERTS_LCNT_OPT_PROCLOCK)) return;
if (locks & ERTS_PROC_LOCK_MAIN) { erts_lcnt_lock(&(lock->lcnt_main)); }
+ if (locks & ERTS_PROC_LOCK_LINK) { erts_lcnt_lock(&(lock->lcnt_link)); }
if (locks & ERTS_PROC_LOCK_MSGQ) { erts_lcnt_lock(&(lock->lcnt_msgq)); }
if (locks & ERTS_PROC_LOCK_BTM) { erts_lcnt_lock(&(lock->lcnt_btm)); }
- if (locks & ERTS_PROC_LOCK_LINK) { erts_lcnt_lock(&(lock->lcnt_link)); }
if (locks & ERTS_PROC_LOCK_STATUS) { erts_lcnt_lock(&(lock->lcnt_status)); }
+ if (locks & ERTS_PROC_LOCK_TRACE) { erts_lcnt_lock(&(lock->lcnt_trace)); }
}
void erts_lcnt_proc_lock_post_x(erts_proc_lock_t *lock, ErtsProcLocks locks,
@@ -1150,44 +1162,50 @@ void erts_lcnt_proc_lock_post_x(erts_proc_lock_t *lock, ErtsProcLocks locks,
if (locks & ERTS_PROC_LOCK_MAIN) {
erts_lcnt_lock_post_x(&(lock->lcnt_main), file, line);
}
+ if (locks & ERTS_PROC_LOCK_LINK) {
+ erts_lcnt_lock_post_x(&(lock->lcnt_link), file, line);
+ }
if (locks & ERTS_PROC_LOCK_MSGQ) {
erts_lcnt_lock_post_x(&(lock->lcnt_msgq), file, line);
}
if (locks & ERTS_PROC_LOCK_BTM) {
erts_lcnt_lock_post_x(&(lock->lcnt_btm), file, line);
}
- if (locks & ERTS_PROC_LOCK_LINK) {
- erts_lcnt_lock_post_x(&(lock->lcnt_link), file, line);
- }
if (locks & ERTS_PROC_LOCK_STATUS) {
erts_lcnt_lock_post_x(&(lock->lcnt_status), file, line);
}
+ if (locks & ERTS_PROC_LOCK_TRACE) {
+ erts_lcnt_lock_post_x(&(lock->lcnt_trace), file, line);
+ }
}
void erts_lcnt_proc_lock_unaquire(erts_proc_lock_t *lock, ErtsProcLocks locks) {
if (!(erts_lcnt_rt_options & ERTS_LCNT_OPT_PROCLOCK)) return;
if (locks & ERTS_PROC_LOCK_MAIN) { erts_lcnt_lock_unaquire(&(lock->lcnt_main)); }
+ if (locks & ERTS_PROC_LOCK_LINK) { erts_lcnt_lock_unaquire(&(lock->lcnt_link)); }
if (locks & ERTS_PROC_LOCK_MSGQ) { erts_lcnt_lock_unaquire(&(lock->lcnt_msgq)); }
if (locks & ERTS_PROC_LOCK_BTM) { erts_lcnt_lock_unaquire(&(lock->lcnt_btm)); }
- if (locks & ERTS_PROC_LOCK_LINK) { erts_lcnt_lock_unaquire(&(lock->lcnt_link)); }
if (locks & ERTS_PROC_LOCK_STATUS) { erts_lcnt_lock_unaquire(&(lock->lcnt_status)); }
+ if (locks & ERTS_PROC_LOCK_TRACE) { erts_lcnt_lock_unaquire(&(lock->lcnt_trace)); }
}
void erts_lcnt_proc_unlock(erts_proc_lock_t *lock, ErtsProcLocks locks) {
if (!(erts_lcnt_rt_options & ERTS_LCNT_OPT_PROCLOCK)) return;
if (locks & ERTS_PROC_LOCK_MAIN) { erts_lcnt_unlock(&(lock->lcnt_main)); }
+ if (locks & ERTS_PROC_LOCK_LINK) { erts_lcnt_unlock(&(lock->lcnt_link)); }
if (locks & ERTS_PROC_LOCK_MSGQ) { erts_lcnt_unlock(&(lock->lcnt_msgq)); }
if (locks & ERTS_PROC_LOCK_BTM) { erts_lcnt_unlock(&(lock->lcnt_btm)); }
- if (locks & ERTS_PROC_LOCK_LINK) { erts_lcnt_unlock(&(lock->lcnt_link)); }
if (locks & ERTS_PROC_LOCK_STATUS) { erts_lcnt_unlock(&(lock->lcnt_status)); }
+ if (locks & ERTS_PROC_LOCK_TRACE) { erts_lcnt_unlock(&(lock->lcnt_trace)); }
}
void erts_lcnt_proc_trylock(erts_proc_lock_t *lock, ErtsProcLocks locks, int res) {
if (!(erts_lcnt_rt_options & ERTS_LCNT_OPT_PROCLOCK)) return;
if (locks & ERTS_PROC_LOCK_MAIN) { erts_lcnt_trylock(&(lock->lcnt_main), res); }
+ if (locks & ERTS_PROC_LOCK_LINK) { erts_lcnt_trylock(&(lock->lcnt_link), res); }
if (locks & ERTS_PROC_LOCK_MSGQ) { erts_lcnt_trylock(&(lock->lcnt_msgq), res); }
if (locks & ERTS_PROC_LOCK_BTM) { erts_lcnt_trylock(&(lock->lcnt_btm), res); }
- if (locks & ERTS_PROC_LOCK_LINK) { erts_lcnt_trylock(&(lock->lcnt_link), res); }
if (locks & ERTS_PROC_LOCK_STATUS) { erts_lcnt_trylock(&(lock->lcnt_status), res); }
+ if (locks & ERTS_PROC_LOCK_TRACE) { erts_lcnt_trylock(&(lock->lcnt_trace), res); }
} /* reversed logic */
#endif /* ERTS_ENABLE_LOCK_COUNT */
@@ -1224,6 +1242,10 @@ erts_proc_lc_lock(Process *p, ErtsProcLocks locks, char *file, unsigned int line
lck.id = lc_id.proc_lock_status;
erts_lc_lock_x(&lck,file,line);
}
+ if (locks & ERTS_PROC_LOCK_TRACE) {
+ lck.id = lc_id.proc_lock_trace;
+ erts_lc_lock_x(&lck,file,line);
+ }
}
void
@@ -1253,6 +1275,10 @@ erts_proc_lc_trylock(Process *p, ErtsProcLocks locks, int locked,
lck.id = lc_id.proc_lock_status;
erts_lc_trylock_x(locked, &lck, file, line);
}
+ if (locks & ERTS_PROC_LOCK_TRACE) {
+ lck.id = lc_id.proc_lock_trace;
+ erts_lc_trylock_x(locked, &lck, file, line);
+ }
}
void
@@ -1261,6 +1287,10 @@ erts_proc_lc_unlock(Process *p, ErtsProcLocks locks)
erts_lc_lock_t lck = ERTS_LC_LOCK_INIT(-1,
p->common.id,
ERTS_LC_FLG_LT_PROCLOCK);
+ if (locks & ERTS_PROC_LOCK_TRACE) {
+ lck.id = lc_id.proc_lock_trace;
+ erts_lc_unlock(&lck);
+ }
if (locks & ERTS_PROC_LOCK_STATUS) {
lck.id = lc_id.proc_lock_status;
erts_lc_unlock(&lck);
@@ -1292,6 +1322,10 @@ erts_proc_lc_might_unlock(Process *p, ErtsProcLocks locks)
erts_lc_lock_t lck = ERTS_LC_LOCK_INIT(-1,
p->common.id,
ERTS_LC_FLG_LT_PROCLOCK);
+ if (locks & ERTS_PROC_LOCK_TRACE) {
+ lck.id = lc_id.proc_lock_trace;
+ erts_lc_might_unlock(&lck);
+ }
if (locks & ERTS_PROC_LOCK_STATUS) {
lck.id = lc_id.proc_lock_status;
erts_lc_might_unlock(&lck);
@@ -1323,6 +1357,8 @@ erts_proc_lc_might_unlock(Process *p, ErtsProcLocks locks)
erts_lc_might_unlock(&p->lock.btm.lc);
if (locks & ERTS_PROC_LOCK_STATUS)
erts_lc_might_unlock(&p->lock.status.lc);
+ if (locks & ERTS_PROC_LOCK_TRACE)
+ erts_lc_might_unlock(&p->lock.trace.lc);
#endif
}
@@ -1354,6 +1390,10 @@ erts_proc_lc_require_lock(Process *p, ErtsProcLocks locks, char *file,
lck.id = lc_id.proc_lock_status;
erts_lc_require_lock(&lck, file, line);
}
+ if (locks & ERTS_PROC_LOCK_TRACE) {
+ lck.id = lc_id.proc_lock_trace;
+ erts_lc_require_lock(&lck, file, line);
+ }
#elif ERTS_PROC_LOCK_RAW_MUTEX_IMPL
if (locks & ERTS_PROC_LOCK_MAIN)
erts_lc_require_lock(&p->lock.main.lc, file, line);
@@ -1365,6 +1405,8 @@ erts_proc_lc_require_lock(Process *p, ErtsProcLocks locks, char *file,
erts_lc_require_lock(&p->lock.btm.lc, file, line);
if (locks & ERTS_PROC_LOCK_STATUS)
erts_lc_require_lock(&p->lock.status.lc, file, line);
+ if (locks & ERTS_PROC_LOCK_TRACE)
+ erts_lc_require_lock(&p->lock.trace.lc, file, line);
#endif
}
@@ -1375,6 +1417,10 @@ erts_proc_lc_unrequire_lock(Process *p, ErtsProcLocks locks)
erts_lc_lock_t lck = ERTS_LC_LOCK_INIT(-1,
p->common.id,
ERTS_LC_FLG_LT_PROCLOCK);
+ if (locks & ERTS_PROC_LOCK_TRACE) {
+ lck.id = lc_id.proc_lock_trace;
+ erts_lc_unrequire_lock(&lck);
+ }
if (locks & ERTS_PROC_LOCK_STATUS) {
lck.id = lc_id.proc_lock_status;
erts_lc_unrequire_lock(&lck);
@@ -1406,6 +1452,8 @@ erts_proc_lc_unrequire_lock(Process *p, ErtsProcLocks locks)
erts_lc_unrequire_lock(&p->lock.btm.lc);
if (locks & ERTS_PROC_LOCK_STATUS)
erts_lc_unrequire_lock(&p->lock.status.lc);
+ if (locks & ERTS_PROC_LOCK_TRACE)
+ erts_lc_unrequire_lock(&p->lock.trace.lc);
#endif
}
@@ -1429,6 +1477,8 @@ erts_proc_lc_trylock_force_busy(Process *p, ErtsProcLocks locks)
lck.id = lc_id.proc_lock_btm;
else if (locks & ERTS_PROC_LOCK_STATUS)
lck.id = lc_id.proc_lock_status;
+ else if (locks & ERTS_PROC_LOCK_TRACE)
+ lck.id = lc_id.proc_lock_trace;
else
erts_lc_fail("Unknown proc lock found");
@@ -1441,14 +1491,7 @@ erts_proc_lc_trylock_force_busy(Process *p, ErtsProcLocks locks)
void erts_proc_lc_chk_only_proc_main(Process *p)
{
-#if ERTS_PROC_LOCK_OWN_IMPL
- erts_lc_lock_t proc_main = ERTS_LC_LOCK_INIT(lc_id.proc_lock_main,
- p->common.id,
- ERTS_LC_FLG_LT_PROCLOCK);
- erts_lc_check_exact(&proc_main, 1);
-#elif ERTS_PROC_LOCK_RAW_MUTEX_IMPL
- erts_lc_check_exact(&p->lock.main.lc, 1);
-#endif
+ erts_proc_lc_chk_only_proc(p, ERTS_PROC_LOCK_MAIN);
}
#if ERTS_PROC_LOCK_OWN_IMPL
@@ -1456,14 +1499,67 @@ void erts_proc_lc_chk_only_proc_main(Process *p)
ERTS_LC_LOCK_INIT(-1, THE_NON_VALUE, ERTS_LC_FLG_LT_PROCLOCK)
#endif /* ERTS_PROC_LOCK_OWN_IMPL */
+void erts_proc_lc_chk_only_proc(Process *p, ErtsProcLocks locks)
+{
+ int have_locks_len = 0;
+#if ERTS_PROC_LOCK_OWN_IMPL
+ erts_lc_lock_t have_locks[6] = {ERTS_PROC_LC_EMPTY_LOCK_INIT,
+ ERTS_PROC_LC_EMPTY_LOCK_INIT,
+ ERTS_PROC_LC_EMPTY_LOCK_INIT,
+ ERTS_PROC_LC_EMPTY_LOCK_INIT,
+ ERTS_PROC_LC_EMPTY_LOCK_INIT,
+ ERTS_PROC_LC_EMPTY_LOCK_INIT};
+ if (locks & ERTS_PROC_LOCK_MAIN) {
+ have_locks[have_locks_len].id = lc_id.proc_lock_main;
+ have_locks[have_locks_len++].extra = p->common.id;
+ }
+ if (locks & ERTS_PROC_LOCK_LINK) {
+ have_locks[have_locks_len].id = lc_id.proc_lock_link;
+ have_locks[have_locks_len++].extra = p->common.id;
+ }
+ if (locks & ERTS_PROC_LOCK_MSGQ) {
+ have_locks[have_locks_len].id = lc_id.proc_lock_msgq;
+ have_locks[have_locks_len++].extra = p->common.id;
+ }
+ if (locks & ERTS_PROC_LOCK_BTM) {
+ have_locks[have_locks_len].id = lc_id.proc_lock_btm;
+ have_locks[have_locks_len++].extra = p->common.id;
+ }
+ if (locks & ERTS_PROC_LOCK_STATUS) {
+ have_locks[have_locks_len].id = lc_id.proc_lock_status;
+ have_locks[have_locks_len++].extra = p->common.id;
+ }
+ if (locks & ERTS_PROC_LOCK_TRACE) {
+ have_locks[have_locks_len].id = lc_id.proc_lock_trace;
+ have_locks[have_locks_len++].extra = p->common.id;
+ }
+#elif ERTS_PROC_LOCK_RAW_MUTEX_IMPL
+ erts_lc_lock_t have_locks[6];
+ if (locks & ERTS_PROC_LOCK_MAIN)
+ have_locks[have_locks_len++] = p->lock.main.lc;
+ if (locks & ERTS_PROC_LOCK_LINK)
+ have_locks[have_locks_len++] = p->lock.link.lc;
+ if (locks & ERTS_PROC_LOCK_MSGQ)
+ have_locks[have_locks_len++] = p->lock.msgq.lc;
+ if (locks & ERTS_PROC_LOCK_BTM)
+ have_locks[have_locks_len++] = p->lock.btm.lc;
+ if (locks & ERTS_PROC_LOCK_STATUS)
+ have_locks[have_locks_len++] = p->lock.status.lc;
+ if (locks & ERTS_PROC_LOCK_TRACE)
+ have_locks[have_locks_len++] = p->lock.trace.lc;
+#endif
+ erts_lc_check_exact(have_locks, have_locks_len);
+}
+
void
erts_proc_lc_chk_have_proc_locks(Process *p, ErtsProcLocks locks)
{
int have_locks_len = 0;
#if ERTS_PROC_LOCK_OWN_IMPL
- erts_lc_lock_t have_locks[5] = {ERTS_PROC_LC_EMPTY_LOCK_INIT,
+ erts_lc_lock_t have_locks[6] = {ERTS_PROC_LC_EMPTY_LOCK_INIT,
ERTS_PROC_LC_EMPTY_LOCK_INIT,
ERTS_PROC_LC_EMPTY_LOCK_INIT,
+ ERTS_PROC_LC_EMPTY_LOCK_INIT,
ERTS_PROC_LC_EMPTY_LOCK_INIT,
ERTS_PROC_LC_EMPTY_LOCK_INIT};
if (locks & ERTS_PROC_LOCK_MAIN) {
@@ -1486,8 +1582,12 @@ erts_proc_lc_chk_have_proc_locks(Process *p, ErtsProcLocks locks)
have_locks[have_locks_len].id = lc_id.proc_lock_status;
have_locks[have_locks_len++].extra = p->common.id;
}
+ if (locks & ERTS_PROC_LOCK_TRACE) {
+ have_locks[have_locks_len].id = lc_id.proc_lock_trace;
+ have_locks[have_locks_len++].extra = p->common.id;
+ }
#elif ERTS_PROC_LOCK_RAW_MUTEX_IMPL
- erts_lc_lock_t have_locks[5];
+ erts_lc_lock_t have_locks[6];
if (locks & ERTS_PROC_LOCK_MAIN)
have_locks[have_locks_len++] = p->lock.main.lc;
if (locks & ERTS_PROC_LOCK_LINK)
@@ -1498,6 +1598,8 @@ erts_proc_lc_chk_have_proc_locks(Process *p, ErtsProcLocks locks)
have_locks[have_locks_len++] = p->lock.btm.lc;
if (locks & ERTS_PROC_LOCK_STATUS)
have_locks[have_locks_len++] = p->lock.status.lc;
+ if (locks & ERTS_PROC_LOCK_TRACE)
+ have_locks[have_locks_len++] = p->lock.trace.lc;
#endif
erts_lc_check(have_locks, have_locks_len, NULL, 0);
}
@@ -1508,12 +1610,14 @@ erts_proc_lc_chk_proc_locks(Process *p, ErtsProcLocks locks)
int have_locks_len = 0;
int have_not_locks_len = 0;
#if ERTS_PROC_LOCK_OWN_IMPL
- erts_lc_lock_t have_locks[5] = {ERTS_PROC_LC_EMPTY_LOCK_INIT,
+ erts_lc_lock_t have_locks[6] = {ERTS_PROC_LC_EMPTY_LOCK_INIT,
ERTS_PROC_LC_EMPTY_LOCK_INIT,
+ ERTS_PROC_LC_EMPTY_LOCK_INIT,
ERTS_PROC_LC_EMPTY_LOCK_INIT,
ERTS_PROC_LC_EMPTY_LOCK_INIT};
- erts_lc_lock_t have_not_locks[5] = {ERTS_PROC_LC_EMPTY_LOCK_INIT,
+ erts_lc_lock_t have_not_locks[6] = {ERTS_PROC_LC_EMPTY_LOCK_INIT,
ERTS_PROC_LC_EMPTY_LOCK_INIT,
+ ERTS_PROC_LC_EMPTY_LOCK_INIT,
ERTS_PROC_LC_EMPTY_LOCK_INIT,
ERTS_PROC_LC_EMPTY_LOCK_INIT};
@@ -1557,9 +1661,17 @@ erts_proc_lc_chk_proc_locks(Process *p, ErtsProcLocks locks)
have_not_locks[have_not_locks_len].id = lc_id.proc_lock_status;
have_not_locks[have_not_locks_len++].extra = p->common.id;
}
+ if (locks & ERTS_PROC_LOCK_TRACE) {
+ have_locks[have_locks_len].id = lc_id.proc_lock_trace;
+ have_locks[have_locks_len++].extra = p->common.id;
+ }
+ else {
+ have_not_locks[have_not_locks_len].id = lc_id.proc_lock_trace;
+ have_not_locks[have_not_locks_len++].extra = p->common.id;
+ }
#elif ERTS_PROC_LOCK_RAW_MUTEX_IMPL
- erts_lc_lock_t have_locks[5];
- erts_lc_lock_t have_not_locks[5];
+ erts_lc_lock_t have_locks[6];
+ erts_lc_lock_t have_not_locks[6];
if (locks & ERTS_PROC_LOCK_MAIN)
have_locks[have_locks_len++] = p->lock.main.lc;
@@ -1581,6 +1693,10 @@ erts_proc_lc_chk_proc_locks(Process *p, ErtsProcLocks locks)
have_locks[have_locks_len++] = p->lock.status.lc;
else
have_not_locks[have_not_locks_len++] = p->lock.status.lc;
+ if (locks & ERTS_PROC_LOCK_TRACE)
+ have_locks[have_locks_len++] = p->lock.trace.lc;
+ else
+ have_not_locks[have_not_locks_len++] = p->lock.trace.lc;
#endif
erts_lc_check(have_locks, have_locks_len,
@@ -1590,10 +1706,10 @@ erts_proc_lc_chk_proc_locks(Process *p, ErtsProcLocks locks)
ErtsProcLocks
erts_proc_lc_my_proc_locks(Process *p)
{
- int resv[5];
+ int resv[6];
ErtsProcLocks res = 0;
#if ERTS_PROC_LOCK_OWN_IMPL
- erts_lc_lock_t locks[5] = {ERTS_LC_LOCK_INIT(lc_id.proc_lock_main,
+ erts_lc_lock_t locks[6] = {ERTS_LC_LOCK_INIT(lc_id.proc_lock_main,
p->common.id,
ERTS_LC_FLG_LT_PROCLOCK),
ERTS_LC_LOCK_INIT(lc_id.proc_lock_link,
@@ -1607,16 +1723,20 @@ erts_proc_lc_my_proc_locks(Process *p)
ERTS_LC_FLG_LT_PROCLOCK),
ERTS_LC_LOCK_INIT(lc_id.proc_lock_status,
p->common.id,
+ ERTS_LC_FLG_LT_PROCLOCK),
+ ERTS_LC_LOCK_INIT(lc_id.proc_lock_trace,
+ p->common.id,
ERTS_LC_FLG_LT_PROCLOCK)};
#elif ERTS_PROC_LOCK_RAW_MUTEX_IMPL
- erts_lc_lock_t locks[5] = {p->lock.main.lc,
+ erts_lc_lock_t locks[6] = {p->lock.main.lc,
p->lock.link.lc,
p->lock.msgq.lc,
p->lock.btm.lc,
- p->lock.status.lc};
+ p->lock.status.lc,
+ p->lock.trace.lc};
#endif
- erts_lc_have_locks(resv, locks, 5);
+ erts_lc_have_locks(resv, locks, 6);
if (resv[0])
res |= ERTS_PROC_LOCK_MAIN;
if (resv[1])
@@ -1627,6 +1747,8 @@ erts_proc_lc_my_proc_locks(Process *p)
res |= ERTS_PROC_LOCK_BTM;
if (resv[4])
res |= ERTS_PROC_LOCK_STATUS;
+ if (resv[5])
+ res |= ERTS_PROC_LOCK_TRACE;
return res;
}
@@ -1634,14 +1756,15 @@ erts_proc_lc_my_proc_locks(Process *p)
void
erts_proc_lc_chk_no_proc_locks(char *file, int line)
{
- int resv[5];
- int ids[5] = {lc_id.proc_lock_main,
+ int resv[6];
+ int ids[6] = {lc_id.proc_lock_main,
lc_id.proc_lock_link,
lc_id.proc_lock_msgq,
lc_id.proc_lock_btm,
- lc_id.proc_lock_status};
- erts_lc_have_lock_ids(resv, ids, 5);
- if (!ERTS_IS_CRASH_DUMPING && (resv[0] || resv[1] || resv[2] || resv[3] || resv[4])) {
+ lc_id.proc_lock_status,
+ lc_id.proc_lock_trace};
+ erts_lc_have_lock_ids(resv, ids, 6);
+ if (!ERTS_IS_CRASH_DUMPING && (resv[0] || resv[1] || resv[2] || resv[3] || resv[4] || resv[5])) {
erts_lc_fail("%s:%d: Thread has process locks locked when expected "
"not to have any process locks locked",
file, line);
diff --git a/erts/emulator/beam/erl_process_lock.h b/erts/emulator/beam/erl_process_lock.h
index 9c59301086..2cccf0697a 100644
--- a/erts/emulator/beam/erl_process_lock.h
+++ b/erts/emulator/beam/erl_process_lock.h
@@ -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.
@@ -66,7 +66,7 @@
#endif
-#define ERTS_PROC_LOCK_MAX_BIT 4
+#define ERTS_PROC_LOCK_MAX_BIT 5
typedef erts_aint32_t ErtsProcLocks;
@@ -84,6 +84,7 @@ typedef struct erts_proc_lock_t_ {
erts_lcnt_lock_t lcnt_msgq;
erts_lcnt_lock_t lcnt_btm;
erts_lcnt_lock_t lcnt_status;
+ erts_lcnt_lock_t lcnt_trace;
#endif
#elif ERTS_PROC_LOCK_RAW_MUTEX_IMPL
erts_mtx_t main;
@@ -91,6 +92,7 @@ typedef struct erts_proc_lock_t_ {
erts_mtx_t msgq;
erts_mtx_t btm;
erts_mtx_t status;
+ erts_mtx_t trace;
#else
# error "no implementation"
#endif
@@ -137,9 +139,18 @@ typedef struct erts_proc_lock_t_ {
* Protects the following fields in the process structure:
* * pending_suspenders
* * suspendee
+ * * sys_tasks
* * ...
*/
-#define ERTS_PROC_LOCK_STATUS (((ErtsProcLocks) 1) << ERTS_PROC_LOCK_MAX_BIT)
+#define ERTS_PROC_LOCK_STATUS (((ErtsProcLocks) 1) << 4)
+
+/*
+ * Trace message lock:
+ * Protects the order in which messages are sent
+ * from trace nifs. This lock is taken inside enif_send.
+ *
+ */
+#define ERTS_PROC_LOCK_TRACE (((ErtsProcLocks) 1) << ERTS_PROC_LOCK_MAX_BIT)
/*
* Special fields:
@@ -154,8 +165,8 @@ typedef struct erts_proc_lock_t_ {
* all process locks are held, and are allowed to be read if
* at least one process lock (whichever one doesn't matter)
* is held:
- * * tracer_proc
- * * tracer_flags
+ * * common.tracer
+ * * common.trace_flags
*
* The following fields are only allowed to be accessed if
* both the schedule queue lock and at least one process lock
@@ -198,17 +209,15 @@ typedef struct erts_proc_lock_t_ {
/* ERTS_PROC_LOCKS_* are combinations of process locks */
-#define ERTS_PROC_LOCKS_MSG_RECEIVE (ERTS_PROC_LOCK_MSGQ \
- | ERTS_PROC_LOCK_STATUS)
-#define ERTS_PROC_LOCKS_MSG_SEND (ERTS_PROC_LOCK_MSGQ \
- | ERTS_PROC_LOCK_STATUS)
+#define ERTS_PROC_LOCKS_MSG_RECEIVE ERTS_PROC_LOCK_MSGQ
+#define ERTS_PROC_LOCKS_MSG_SEND ERTS_PROC_LOCK_MSGQ
#define ERTS_PROC_LOCKS_XSIG_SEND ERTS_PROC_LOCK_STATUS
#define ERTS_PROC_LOCKS_ALL \
((((ErtsProcLocks) 1) << (ERTS_PROC_LOCK_MAX_BIT + 1)) - 1)
#define ERTS_PROC_LOCKS_ALL_MINOR (ERTS_PROC_LOCKS_ALL \
- & ~ERTS_PROC_LOCK_MAIN)
+ & ~ERTS_PROC_LOCK_MAIN)
#define ERTS_PIX_LOCKS_BITS 10
@@ -260,6 +269,7 @@ void erts_proc_lc_might_unlock(Process *p, ErtsProcLocks locks);
void erts_proc_lc_chk_have_proc_locks(Process *p, ErtsProcLocks locks);
void erts_proc_lc_chk_proc_locks(Process *p, ErtsProcLocks locks);
void erts_proc_lc_chk_only_proc_main(Process *p);
+void erts_proc_lc_chk_only_proc(Process *p, ErtsProcLocks locks);
void erts_proc_lc_chk_no_proc_locks(char *file, int line);
ErtsProcLocks erts_proc_lc_my_proc_locks(Process *p);
int erts_proc_lc_trylock_force_busy(Process *p, ErtsProcLocks locks);
@@ -477,9 +487,15 @@ erts_smp_proc_raw_trylock__(Process *p, ErtsProcLocks locks)
if (locks & ERTS_PROC_LOCK_STATUS)
if (erts_mtx_trylock(&p->lock.status) == EBUSY)
goto busy_status;
+ if (locks & ERTS_PROC_LOCK_TRACE)
+ if (erts_mtx_trylock(&p->lock.trace) == EBUSY)
+ goto busy_trace;
return 0;
+busy_trace:
+ if (locks & ERTS_PROC_LOCK_TRACE)
+ erts_mtx_unlock(&p->lock.trace);
busy_status:
if (locks & ERTS_PROC_LOCK_BTM)
erts_mtx_unlock(&p->lock.btm);
@@ -568,6 +584,8 @@ erts_smp_proc_lock__(Process *p,
erts_mtx_lock(&p->lock.btm);
if (locks & ERTS_PROC_LOCK_STATUS)
erts_mtx_lock(&p->lock.status);
+ if (locks & ERTS_PROC_LOCK_TRACE)
+ erts_mtx_lock(&p->lock.trace);
#ifdef ERTS_PROC_LOCK_DEBUG
erts_proc_lock_op_debug(p, locks, 1);
@@ -653,6 +671,8 @@ erts_smp_proc_unlock__(Process *p,
erts_proc_lock_op_debug(p, locks, 0);
#endif
+ if (locks & ERTS_PROC_LOCK_TRACE)
+ erts_mtx_unlock(&p->lock.trace);
if (locks & ERTS_PROC_LOCK_STATUS)
erts_mtx_unlock(&p->lock.status);
if (locks & ERTS_PROC_LOCK_BTM)
diff --git a/erts/emulator/beam/erl_ptab.c b/erts/emulator/beam/erl_ptab.c
index f7997df051..22830a19c4 100644
--- a/erts/emulator/beam/erl_ptab.c
+++ b/erts/emulator/beam/erl_ptab.c
@@ -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.
@@ -1255,7 +1255,7 @@ ptab_list_bif_engine(Process *c_p, Eterm *res_accp, Binary *mbp)
return 1;
default:
- erl_exit(ERTS_ABORT_EXIT,
+ erts_exit(ERTS_ABORT_EXIT,
"%s:%d:ptab_list_bif_engine(): Invalid state: %d\n",
__FILE__, __LINE__, (int) ptlbdp->state);
}
diff --git a/erts/emulator/beam/erl_ptab.h b/erts/emulator/beam/erl_ptab.h
index 8fd961e3ce..a5931ffc25 100644
--- a/erts/emulator/beam/erl_ptab.h
+++ b/erts/emulator/beam/erl_ptab.h
@@ -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.
@@ -37,14 +37,16 @@
#include "erl_alloc.h"
#include "erl_monitors.h"
-#define ERTS_TRACER_PROC(P) ((P)->common.tracer_proc)
+#define ERTS_TRACER(P) ((P)->common.tracer)
+#define ERTS_TRACER_MODULE(T) (CAR(list_val(T)))
+#define ERTS_TRACER_STATE(T) (CDR(list_val(T)))
#define ERTS_TRACE_FLAGS(P) ((P)->common.trace_flags)
#define ERTS_P_LINKS(P) ((P)->common.u.alive.links)
#define ERTS_P_MONITORS(P) ((P)->common.u.alive.monitors)
#define IS_TRACED(p) \
- (ERTS_TRACER_PROC((p)) != NIL)
+ (ERTS_TRACER(p) != NIL)
#define ARE_TRACE_FLAGS_ON(p,tf) \
((ERTS_TRACE_FLAGS((p)) & (tf|F_SENSITIVE)) == (tf))
#define IS_TRACED_FL(p,tf) \
@@ -56,7 +58,7 @@ typedef struct {
erts_atomic_t atmc;
Sint sint;
} refc;
- Eterm tracer_proc;
+ ErtsTracer tracer;
Uint trace_flags;
erts_smp_atomic_t timer;
union {
diff --git a/erts/emulator/beam/erl_sched_spec_pre_alloc.c b/erts/emulator/beam/erl_sched_spec_pre_alloc.c
index caec24bc03..cab4bd73db 100644
--- a/erts/emulator/beam/erl_sched_spec_pre_alloc.c
+++ b/erts/emulator/beam/erl_sched_spec_pre_alloc.c
@@ -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/erts/emulator/beam/erl_sched_spec_pre_alloc.h b/erts/emulator/beam/erl_sched_spec_pre_alloc.h
index 4d07b0f674..7808d7d438 100644
--- a/erts/emulator/beam/erl_sched_spec_pre_alloc.h
+++ b/erts/emulator/beam/erl_sched_spec_pre_alloc.h
@@ -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/erts/emulator/beam/erl_smp.h b/erts/emulator/beam/erl_smp.h
index 5fc5e989a6..713ed50b86 100644
--- a/erts/emulator/beam/erl_smp.h
+++ b/erts/emulator/beam/erl_smp.h
@@ -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/erts/emulator/beam/erl_sock.h b/erts/emulator/beam/erl_sock.h
index 7be6062115..3429a52d7e 100644
--- a/erts/emulator/beam/erl_sock.h
+++ b/erts/emulator/beam/erl_sock.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/erts/emulator/beam/erl_sys_driver.h b/erts/emulator/beam/erl_sys_driver.h
index 4031eef0aa..d46e88cb05 100644
--- a/erts/emulator/beam/erl_sys_driver.h
+++ b/erts/emulator/beam/erl_sys_driver.h
@@ -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/erts/emulator/beam/erl_term.c b/erts/emulator/beam/erl_term.c
index e31d3a951d..7d857ad326 100644
--- a/erts/emulator/beam/erl_term.c
+++ b/erts/emulator/beam/erl_term.c
@@ -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.
@@ -59,96 +59,6 @@ erts_set_literal_tag(Eterm *term, Eterm *hp_start, Eterm hsz)
#endif
}
-__decl_noreturn static void __noreturn
-et_abort(const char *expr, const char *file, unsigned line)
-{
-#ifdef EXIT_ON_ET_ABORT
- static int have_been_called = 0;
-
- if (have_been_called) {
- abort();
- } else {
- /*
- * Prevent infinite loop.
- */
- have_been_called = 1;
- erl_exit(1, "TYPE ASSERTION FAILED, file %s, line %u: %s\n", file, line, expr);
- }
-#else
- erts_fprintf(stderr, "TYPE ASSERTION FAILED, file %s, line %u: %s\n", file, line, expr);
- abort();
-#endif
-}
-
-#if ET_DEBUG
-#define ET_ASSERT(expr,file,line) \
-do { \
- if (!(expr)) \
- et_abort(#expr, file, line); \
-} while(0)
-#else
-#define ET_ASSERT(expr,file,line) do { } while(0)
-#endif
-
-#if ET_DEBUG
-unsigned tag_val_def_debug(Wterm x, const char *file, unsigned line)
-#else
-unsigned tag_val_def(Wterm x)
-#define file __FILE__
-#define line __LINE__
-#endif
-{
- static char msg[32];
-
- switch (x & _TAG_PRIMARY_MASK) {
- case TAG_PRIMARY_LIST:
- ET_ASSERT(_list_precond(x),file,line);
- return LIST_DEF;
- case TAG_PRIMARY_BOXED: {
- Eterm hdr = *boxed_val(x);
- ET_ASSERT(is_header(hdr),file,line);
- switch ((hdr & _TAG_HEADER_MASK) >> _TAG_PRIMARY_SIZE) {
- case (_TAG_HEADER_ARITYVAL >> _TAG_PRIMARY_SIZE): return TUPLE_DEF;
- case (_TAG_HEADER_POS_BIG >> _TAG_PRIMARY_SIZE): return BIG_DEF;
- case (_TAG_HEADER_NEG_BIG >> _TAG_PRIMARY_SIZE): return BIG_DEF;
- case (_TAG_HEADER_REF >> _TAG_PRIMARY_SIZE): return REF_DEF;
- case (_TAG_HEADER_FLOAT >> _TAG_PRIMARY_SIZE): return FLOAT_DEF;
- case (_TAG_HEADER_EXPORT >> _TAG_PRIMARY_SIZE): return EXPORT_DEF;
- case (_TAG_HEADER_FUN >> _TAG_PRIMARY_SIZE): return FUN_DEF;
- case (_TAG_HEADER_EXTERNAL_PID >> _TAG_PRIMARY_SIZE): return EXTERNAL_PID_DEF;
- case (_TAG_HEADER_EXTERNAL_PORT >> _TAG_PRIMARY_SIZE): return EXTERNAL_PORT_DEF;
- case (_TAG_HEADER_EXTERNAL_REF >> _TAG_PRIMARY_SIZE): return EXTERNAL_REF_DEF;
- case (_TAG_HEADER_MAP >> _TAG_PRIMARY_SIZE): return MAP_DEF;
- case (_TAG_HEADER_REFC_BIN >> _TAG_PRIMARY_SIZE): return BINARY_DEF;
- case (_TAG_HEADER_HEAP_BIN >> _TAG_PRIMARY_SIZE): return BINARY_DEF;
- case (_TAG_HEADER_SUB_BIN >> _TAG_PRIMARY_SIZE): return BINARY_DEF;
- case (_TAG_HEADER_BIN_MATCHSTATE >> _TAG_PRIMARY_SIZE): return MATCHSTATE_DEF;
- }
-
- break;
- }
- case TAG_PRIMARY_IMMED1: {
- switch ((x & _TAG_IMMED1_MASK) >> _TAG_PRIMARY_SIZE) {
- case (_TAG_IMMED1_PID >> _TAG_PRIMARY_SIZE): return PID_DEF;
- case (_TAG_IMMED1_PORT >> _TAG_PRIMARY_SIZE): return PORT_DEF;
- case (_TAG_IMMED1_IMMED2 >> _TAG_PRIMARY_SIZE): {
- switch ((x & _TAG_IMMED2_MASK) >> _TAG_IMMED1_SIZE) {
- case (_TAG_IMMED2_ATOM >> _TAG_IMMED1_SIZE): return ATOM_DEF;
- case (_TAG_IMMED2_NIL >> _TAG_IMMED1_SIZE): return NIL_DEF;
- }
- break;
- }
- case (_TAG_IMMED1_SMALL >> _TAG_PRIMARY_SIZE): return SMALL_DEF;
- }
- break;
- }
- }
- erts_snprintf(msg, sizeof(msg), "tag_val_def: %#lx", (unsigned long) x);
- et_abort(msg, file, line);
-#undef file
-#undef line
-}
-
/*
* XXX: define NUMBER_CODE() here when new representation is used
*/
diff --git a/erts/emulator/beam/erl_term.h b/erts/emulator/beam/erl_term.h
index 2b28762db5..c3234ee349 100644
--- a/erts/emulator/beam/erl_term.h
+++ b/erts/emulator/beam/erl_term.h
@@ -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.
@@ -558,14 +558,6 @@ _ET_DECLARE_CHECKED(Eterm*,tuple_val,Wterm)
#define _GETBITS(X,Pos,Size) (((X) >> (Pos)) & ~(~((Uint) 0) << (Size)))
-/*
- * Creation in node specific data (pids, ports, refs)
- */
-
-#define _CRE_SIZE 2
-
-/* MAX value for the creation field in pid, port and reference */
-#define MAX_CREATION (1 << _CRE_SIZE)
/*
* PID layout (internal pids):
@@ -579,7 +571,7 @@ _ET_DECLARE_CHECKED(Eterm*,tuple_val,Wterm)
*
* n : number
*
- * Old pid layout:
+ * Very old pid layout:
*
* |3 3 2 2 2 2 2 2|2 2 2 2 1 1 1 1|1 1 1 1 1 1 | |
* |1 0 9 8 7 6 5 4|3 2 1 0 9 8 7 6|5 4 3 2 1 0 9 8|7 6 5 4 3 2 1 0|
@@ -1129,11 +1121,11 @@ _ET_DECLARE_CHECKED(Uint,loader_y_reg_index,Uint)
#define FIRST_VACANT_TAG_DEF 0x12
#if ET_DEBUG
-extern unsigned tag_val_def_debug(Wterm, const char*, unsigned);
-#define tag_val_def(x) tag_val_def_debug((x),__FILE__,__LINE__)
+ERTS_GLB_INLINE unsigned tag_val_def(Wterm, const char*, unsigned);
#else
-extern unsigned tag_val_def(Wterm);
+ERTS_GLB_INLINE unsigned tag_val_def(Wterm);
#endif
+
#define not_eq_tags(X,Y) (tag_val_def((X)) ^ tag_val_def((Y)))
#define NUMBER_CODE(x,y) ((tag_val_def(x) << 5) | tag_val_def(y))
@@ -1152,5 +1144,80 @@ extern unsigned tag_val_def(Wterm);
void erts_set_literal_tag(Eterm *term, Eterm *hp_start, Eterm hsz);
+#if ET_DEBUG
+#define ET_ASSERT(expr,file,line) \
+do { \
+ if (!(expr)) \
+ erl_assert_error("TYPE ASSERTION: " #expr, __FUNCTION__, file, line); \
+} while(0)
+#else
+#define ET_ASSERT(expr,file,line) do { } while(0)
+#endif
+
+#if ERTS_GLB_INLINE_INCL_FUNC_DEF
+
+#if ET_DEBUG
+ERTS_GLB_INLINE unsigned tag_val_def(Wterm x, const char *file, unsigned line)
+#else
+ERTS_GLB_INLINE unsigned tag_val_def(Wterm x)
+#define file __FILE__
+#define line __LINE__
+#endif
+{
+ static char *msg = "tag_val_def error";
+
+ switch (x & _TAG_PRIMARY_MASK) {
+ case TAG_PRIMARY_LIST:
+ ET_ASSERT(_list_precond(x),file,line);
+ return LIST_DEF;
+ case TAG_PRIMARY_BOXED: {
+ Eterm hdr = *boxed_val(x);
+ ET_ASSERT(is_header(hdr),file,line);
+ switch ((hdr & _TAG_HEADER_MASK) >> _TAG_PRIMARY_SIZE) {
+ case (_TAG_HEADER_ARITYVAL >> _TAG_PRIMARY_SIZE): return TUPLE_DEF;
+ case (_TAG_HEADER_POS_BIG >> _TAG_PRIMARY_SIZE): return BIG_DEF;
+ case (_TAG_HEADER_NEG_BIG >> _TAG_PRIMARY_SIZE): return BIG_DEF;
+ case (_TAG_HEADER_REF >> _TAG_PRIMARY_SIZE): return REF_DEF;
+ case (_TAG_HEADER_FLOAT >> _TAG_PRIMARY_SIZE): return FLOAT_DEF;
+ case (_TAG_HEADER_EXPORT >> _TAG_PRIMARY_SIZE): return EXPORT_DEF;
+ case (_TAG_HEADER_FUN >> _TAG_PRIMARY_SIZE): return FUN_DEF;
+ case (_TAG_HEADER_EXTERNAL_PID >> _TAG_PRIMARY_SIZE): return EXTERNAL_PID_DEF;
+ case (_TAG_HEADER_EXTERNAL_PORT >> _TAG_PRIMARY_SIZE): return EXTERNAL_PORT_DEF;
+ case (_TAG_HEADER_EXTERNAL_REF >> _TAG_PRIMARY_SIZE): return EXTERNAL_REF_DEF;
+ case (_TAG_HEADER_MAP >> _TAG_PRIMARY_SIZE): return MAP_DEF;
+ case (_TAG_HEADER_REFC_BIN >> _TAG_PRIMARY_SIZE): return BINARY_DEF;
+ case (_TAG_HEADER_HEAP_BIN >> _TAG_PRIMARY_SIZE): return BINARY_DEF;
+ case (_TAG_HEADER_SUB_BIN >> _TAG_PRIMARY_SIZE): return BINARY_DEF;
+ case (_TAG_HEADER_BIN_MATCHSTATE >> _TAG_PRIMARY_SIZE): return MATCHSTATE_DEF;
+ }
+
+ break;
+ }
+ case TAG_PRIMARY_IMMED1: {
+ switch ((x & _TAG_IMMED1_MASK) >> _TAG_PRIMARY_SIZE) {
+ case (_TAG_IMMED1_PID >> _TAG_PRIMARY_SIZE): return PID_DEF;
+ case (_TAG_IMMED1_PORT >> _TAG_PRIMARY_SIZE): return PORT_DEF;
+ case (_TAG_IMMED1_IMMED2 >> _TAG_PRIMARY_SIZE): {
+ switch ((x & _TAG_IMMED2_MASK) >> _TAG_IMMED1_SIZE) {
+ case (_TAG_IMMED2_ATOM >> _TAG_IMMED1_SIZE): return ATOM_DEF;
+ case (_TAG_IMMED2_NIL >> _TAG_IMMED1_SIZE): return NIL_DEF;
+ }
+ break;
+ }
+ case (_TAG_IMMED1_SMALL >> _TAG_PRIMARY_SIZE): return SMALL_DEF;
+ }
+ break;
+ }
+ }
+ erl_assert_error(msg, __FUNCTION__, file, line);
+#undef file
+#undef line
+}
+#endif
+
+#if ET_DEBUG
+#define tag_val_def(X) tag_val_def(X, __FILE__, __LINE__)
+#endif
+
#endif /* __ERL_TERM_H */
diff --git a/erts/emulator/beam/erl_thr_progress.c b/erts/emulator/beam/erl_thr_progress.c
index 7148b756e7..542541165b 100644
--- a/erts/emulator/beam/erl_thr_progress.c
+++ b/erts/emulator/beam/erl_thr_progress.c
@@ -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.
@@ -502,7 +502,7 @@ erts_thr_progress_register_unmanaged_thread(ErtsThrPrgrCallbacks *callbacks)
if (tpd) {
if (!tpd->is_temporary)
- erl_exit(ERTS_ABORT_EXIT,
+ erts_exit(ERTS_ABORT_EXIT,
"%s:%d:%s(): Double register of thread\n",
__FILE__, __LINE__, __func__);
is_blocking = tpd->is_blocking;
@@ -524,7 +524,7 @@ erts_thr_progress_register_unmanaged_thread(ErtsThrPrgrCallbacks *callbacks)
#endif
ASSERT(tpd->id >= 0);
if (tpd->id >= intrnl->unmanaged.no)
- erl_exit(ERTS_ABORT_EXIT,
+ erts_exit(ERTS_ABORT_EXIT,
"%s:%d:%s(): Too many unmanaged registered threads\n",
__FILE__, __LINE__, __func__);
@@ -547,7 +547,7 @@ erts_thr_progress_register_managed_thread(ErtsSchedulerData *esdp,
if (tpd) {
if (!tpd->is_temporary)
- erl_exit(ERTS_ABORT_EXIT,
+ erts_exit(ERTS_ABORT_EXIT,
"%s:%d:%s(): Double register of thread\n",
__FILE__, __LINE__, __func__);
is_blocking = tpd->is_blocking;
@@ -568,7 +568,7 @@ erts_thr_progress_register_managed_thread(ErtsSchedulerData *esdp,
tpd->id = erts_atomic32_inc_read_nob(&intrnl->misc.data.managed_id);
ASSERT(tpd->id >= 0);
if (tpd->id >= intrnl->managed.no)
- erl_exit(ERTS_ABORT_EXIT,
+ erts_exit(ERTS_ABORT_EXIT,
"%s:%d:%s(): Too many managed registered threads\n",
__FILE__, __LINE__, __func__);
@@ -1033,7 +1033,7 @@ has_reached_wakeup(ErtsThrPrgrVal wakeup)
limit += 1;
if (!erts_thr_progress_has_passed__(limit, wakeup))
- erl_exit(ERTS_ABORT_EXIT,
+ erts_exit(ERTS_ABORT_EXIT,
"Invalid wakeup request value found:"
" current=%b64u, wakeup=%b64u, limit=%b64u",
current, wakeup, limit);
@@ -1102,7 +1102,7 @@ request_wakeup_managed(ErtsThrPrgrData *tpd, ErtsThrPrgrVal value)
ix = erts_atomic32_inc_read_nob(&mwd->len) - 1;
#if ERTS_THR_PRGR_DBG_CHK_WAKEUP_REQUEST_VALUE
if (ix >= intrnl->managed.no)
- erl_exit(ERTS_ABORT_EXIT, "Internal error: Too many wakeup requests\n");
+ erts_exit(ERTS_ABORT_EXIT, "Internal error: Too many wakeup requests\n");
#endif
mwd->id[ix] = tpd->id;
diff --git a/erts/emulator/beam/erl_thr_progress.h b/erts/emulator/beam/erl_thr_progress.h
index b89cc4c267..b2894ba1fe 100644
--- a/erts/emulator/beam/erl_thr_progress.h
+++ b/erts/emulator/beam/erl_thr_progress.h
@@ -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/erts/emulator/beam/erl_thr_queue.c b/erts/emulator/beam/erl_thr_queue.c
index 3a91ca9dbe..f56d0828dd 100644
--- a/erts/emulator/beam/erl_thr_queue.c
+++ b/erts/emulator/beam/erl_thr_queue.c
@@ -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.
@@ -224,7 +224,7 @@ ErtsThrQCleanState_t
erts_thr_q_destroy(ErtsThrQ_t *q)
{
if (!q->q.blk)
- erl_exit(ERTS_ABORT_EXIT,
+ erts_exit(ERTS_ABORT_EXIT,
"Trying to destroy not created thread queue\n");
return erts_thr_q_finalize(q);
}
@@ -589,7 +589,7 @@ enqueue(ErtsThrQ_t *q, void *data, ErtsThrQElement_t *this)
#if ERTS_THR_Q_DBG_CHK_DATA
if (!data)
- erl_exit(ERTS_ABORT_EXIT, "Missing data in enqueue\n");
+ erts_exit(ERTS_ABORT_EXIT, "Missing data in enqueue\n");
#endif
ASSERT(!q->q.finalizing);
@@ -771,7 +771,7 @@ erts_thr_q_dequeue(ErtsThrQ_t *q)
#if ERTS_THR_Q_DBG_CHK_DATA
head->data.ptr = NULL;
if (!res)
- erl_exit(ERTS_ABORT_EXIT, "Missing data in dequeue\n");
+ erts_exit(ERTS_ABORT_EXIT, "Missing data in dequeue\n");
#endif
clean(q,
(q->head.deq_fini.automatic
@@ -780,3 +780,35 @@ erts_thr_q_dequeue(ErtsThrQ_t *q)
return res;
#endif
}
+
+#ifdef USE_LTTNG_VM_TRACEPOINTS
+int
+erts_thr_q_length_dirty(ErtsThrQ_t *q)
+{
+ int n = 0;
+#ifndef USE_THREADS
+ void *res;
+ ErtsThrQElement_t *tmp;
+
+ for (tmp = q->first; tmp != NULL; tmp = tmp->next) {
+ n++;
+ }
+#else
+ ErtsThrQElement_t *e;
+ erts_aint_t inext;
+
+ e = ErtsThrQDirtyReadEl(&q->head.head);
+ inext = erts_atomic_read_acqb(&e->next);
+
+ while (inext != ERTS_AINT_NULL) {
+ e = (ErtsThrQElement_t *) inext;
+ if (e != &q->tail.data.marker) {
+ /* don't count marker */
+ n++;
+ }
+ inext = erts_atomic_read_acqb(&e->next);
+ }
+#endif
+ return n;
+}
+#endif
diff --git a/erts/emulator/beam/erl_thr_queue.h b/erts/emulator/beam/erl_thr_queue.h
index 27a6d03224..705a67af4c 100644
--- a/erts/emulator/beam/erl_thr_queue.h
+++ b/erts/emulator/beam/erl_thr_queue.h
@@ -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.
@@ -190,6 +190,10 @@ void erts_thr_q_append_finalize_dequeue_data(ErtsThrQFinDeQ_t *,
int erts_thr_q_finalize_dequeue(ErtsThrQFinDeQ_t *);
void erts_thr_q_finalize_dequeue_state_init(ErtsThrQFinDeQ_t *);
+#ifdef USE_LTTNG_VM_TRACEPOINTS
+int erts_thr_q_length_dirty(ErtsThrQ_t *);
+#endif
+
#ifdef ERTS_SMP
ERTS_GLB_INLINE ErtsThrPrgrVal erts_thr_q_need_thr_progress(ErtsThrQ_t *q);
#endif
diff --git a/erts/emulator/beam/erl_threads.h b/erts/emulator/beam/erl_threads.h
index e689547d1d..eccd49f2a9 100644
--- a/erts/emulator/beam/erl_threads.h
+++ b/erts/emulator/beam/erl_threads.h
@@ -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/erts/emulator/beam/erl_time.h b/erts/emulator/beam/erl_time.h
index 5242063550..a1c4220633 100644
--- a/erts/emulator/beam/erl_time.h
+++ b/erts/emulator/beam/erl_time.h
@@ -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/erts/emulator/beam/erl_time_sup.c b/erts/emulator/beam/erl_time_sup.c
index 98159fdf72..9e37106b88 100644
--- a/erts/emulator/beam/erl_time_sup.c
+++ b/erts/emulator/beam/erl_time_sup.c
@@ -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.
@@ -289,7 +289,7 @@ read_corrected_time(int os_drift_corrected)
ci = time_sup.inf.c.parmon.cdata.insts.curr;
else {
if (os_mtime < time_sup.inf.c.parmon.cdata.insts.prev.os_mtime)
- erl_exit(ERTS_ABORT_EXIT,
+ erts_exit(ERTS_ABORT_EXIT,
"OS monotonic time stepped backwards\n");
ci = time_sup.inf.c.parmon.cdata.insts.prev;
}
@@ -381,7 +381,7 @@ check_time_correction(void *vesdp)
erts_smp_rwmtx_runlock(&time_sup.inf.c.parmon.rwmtx);
if (os_mtime < ci.os_mtime)
- erl_exit(ERTS_ABORT_EXIT,
+ erts_exit(ERTS_ABORT_EXIT,
"OS monotonic time stepped backwards\n");
erl_mtime = calc_corrected_erl_mtime(os_mtime, &ci, &mdiff,
@@ -798,7 +798,7 @@ finalize_corrected_time_offset(ErtsSystemTime *stimep)
erts_smp_rwmtx_runlock(&time_sup.inf.c.parmon.rwmtx);
if (os_mtime < ci.os_mtime)
- erl_exit(ERTS_ABORT_EXIT,
+ erts_exit(ERTS_ABORT_EXIT,
"OS monotonic time stepped backwards\n");
return calc_corrected_erl_mtime(os_mtime, &ci, NULL,
@@ -1966,7 +1966,7 @@ send_time_offset_changed_notifications(void *new_offsetp)
*patch_refp = ref;
ASSERT(hsz == size_object(message_template));
message = copy_struct(message_template, hsz, &hp, ohp);
- erts_queue_message(rp, &rp_locks, mp, message, NIL);
+ erts_queue_message(rp, rp_locks, mp, message, am_clock_service);
}
erts_smp_proc_unlock(rp, rp_locks);
}
@@ -2348,7 +2348,7 @@ erts_napi_convert_time_unit(ErtsMonotonicTime val, int from, int to)
BIF_RETTYPE monotonic_time_0(BIF_ALIST_0)
{
ErtsMonotonicTime mtime = time_sup.r.o.get_time();
- update_last_mtime(ERTS_PROC_GET_SCHDATA(BIF_P), mtime);
+ update_last_mtime(erts_proc_sched_data(BIF_P), mtime);
mtime += ERTS_MONOTONIC_OFFSET_NATIVE;
BIF_RET(make_time_val(BIF_P, mtime));
}
@@ -2356,7 +2356,7 @@ BIF_RETTYPE monotonic_time_0(BIF_ALIST_0)
BIF_RETTYPE monotonic_time_1(BIF_ALIST_1)
{
ErtsMonotonicTime mtime = time_sup.r.o.get_time();
- update_last_mtime(ERTS_PROC_GET_SCHDATA(BIF_P), mtime);
+ update_last_mtime(erts_proc_sched_data(BIF_P), mtime);
BIF_RET(time_unit_conversion(BIF_P, BIF_ARG_1, mtime, 1));
}
@@ -2365,7 +2365,7 @@ BIF_RETTYPE system_time_0(BIF_ALIST_0)
ErtsMonotonicTime mtime, offset;
mtime = time_sup.r.o.get_time();
offset = get_time_offset();
- update_last_mtime(ERTS_PROC_GET_SCHDATA(BIF_P), mtime);
+ update_last_mtime(erts_proc_sched_data(BIF_P), mtime);
BIF_RET(make_time_val(BIF_P, mtime + offset));
}
@@ -2374,7 +2374,7 @@ BIF_RETTYPE system_time_1(BIF_ALIST_0)
ErtsMonotonicTime mtime, offset;
mtime = time_sup.r.o.get_time();
offset = get_time_offset();
- update_last_mtime(ERTS_PROC_GET_SCHDATA(BIF_P), mtime);
+ update_last_mtime(erts_proc_sched_data(BIF_P), mtime);
BIF_RET(time_unit_conversion(BIF_P, BIF_ARG_1, mtime + offset, 0));
}
@@ -2404,7 +2404,7 @@ BIF_RETTYPE timestamp_0(BIF_ALIST_0)
mtime = time_sup.r.o.get_time();
offset = get_time_offset();
- update_last_mtime(ERTS_PROC_GET_SCHDATA(BIF_P), mtime);
+ update_last_mtime(erts_proc_sched_data(BIF_P), mtime);
make_timestamp_value(&mega_sec, &sec, &micro_sec, mtime, offset);
diff --git a/erts/emulator/beam/erl_trace.c b/erts/emulator/beam/erl_trace.c
index 25393369a7..ca001fc156 100644
--- a/erts/emulator/beam/erl_trace.c
+++ b/erts/emulator/beam/erl_trace.c
@@ -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.
@@ -20,6 +20,19 @@
/*
* Support functions for tracing.
+ *
+ * Ideas for future speed improvements in tracing framework:
+ * * Move ErtsTracerNif into ErtsTracer
+ * + Removes need for locking
+ * + Removes hash lookup overhead
+ * + Use a refc on the ErtsTracerNif to know when it can
+ * be freed. We don't want to allocate a separate
+ * ErtsTracerNif for each module used.
+ * * Optimize GenericBp for cache locality by reusing equivalent
+ * GenericBp and GenericBpData in multiple tracer points.
+ * + Possibly we want to use specialized instructions for different
+ * types of trace so that the knowledge of which struct is used
+ * can be in the instruction.
*/
#ifdef HAVE_CONFIG_H
@@ -39,6 +52,7 @@
#include "erl_bits.h"
#include "erl_thr_progress.h"
#include "erl_bif_unique.h"
+#include "erl_map.h"
#if 0
#define DEBUG_PRINTOUTS
@@ -46,17 +60,15 @@
#undef DEBUG_PRINTOUTS
#endif
-extern BeamInstr beam_return_to_trace[1]; /* OpCode(i_return_to_trace) */
-extern BeamInstr beam_return_trace[1]; /* OpCode(i_return_trace) */
-extern BeamInstr beam_return_time_trace[1]; /* OpCode(i_return_time_trace) */
-
/* Pseudo export entries. Never filled in with data, only used to
yield unique pointers of the correct type. */
Export exp_send, exp_receive, exp_timeout;
-static Eterm system_seq_tracer;
-static Uint default_trace_flags;
-static Eterm default_tracer;
+static ErtsTracer system_seq_tracer;
+static Uint default_proc_trace_flags;
+static ErtsTracer default_proc_tracer;
+static Uint default_port_trace_flags;
+static ErtsTracer default_port_tracer;
static Eterm system_monitor;
static Eterm system_profile;
@@ -70,8 +82,6 @@ static erts_smp_rwmtx_t sys_trace_rwmtx;
enum ErtsSysMsgType {
SYS_MSG_TYPE_UNDEFINED,
- SYS_MSG_TYPE_TRACE,
- SYS_MSG_TYPE_SEQTRACE,
SYS_MSG_TYPE_SYSMON,
SYS_MSG_TYPE_ERRLGR,
SYS_MSG_TYPE_PROC_MSG,
@@ -176,7 +186,7 @@ take_timestamp(ErtsTraceTimeStamp *tsp, int ts_type)
hsz += 3; /* 2-tuple */
raw_unique = erts_raw_get_unique_monotonic_integer();
tsp->u.monotonic.raw_unique = raw_unique;
- hsz += erts_raw_unique_monotonic_integer_heap_size(raw_unique);
+ hsz += erts_raw_unique_monotonic_integer_heap_size(raw_unique, 0);
}
return hsz;
}
@@ -216,8 +226,7 @@ write_timestamp(ErtsTraceTimeStamp *tsp, Eterm **hpp)
return emtime;
raw = tsp->u.monotonic.raw_unique;
- unique = erts_raw_make_unique_monotonic_integer_value(hpp,
- raw);
+ unique = erts_raw_make_unique_monotonic_integer_value(hpp, raw, 0);
res = TUPLE2(*hpp, emtime, unique);
*hpp += 3;
return res;
@@ -228,7 +237,7 @@ write_timestamp(ErtsTraceTimeStamp *tsp, Eterm **hpp)
}
}
-#define PATCH_TS_SIZE(p) patch_ts_size(TFLGS_TS_TYPE(p))
+#ifdef ERTS_SMP
static ERTS_INLINE Uint
patch_ts_size(int ts_type)
@@ -248,6 +257,7 @@ patch_ts_size(int ts_type)
return 0;
}
}
+#endif /* ERTS_SMP */
/*
* Write a timestamp. The timestamp MUST be the last
@@ -299,43 +309,6 @@ write_ts(int ts_type, Eterm *hp, ErlHeapFragment *bp, Process *tracer)
return res;
}
-/*
- * Patch a timestamp into a tuple. The tuple MUST be the last thing
- * built on the heap before the call, and the timestamp MUST be
- * the last thing after the call. This since patch_ts() might adjust
- * the size of the used area.
- */
-
-#define PATCH_TS__(Type, Tuple, Hp, Bp, Tracer) \
- do { \
- int ts_type__ = (Type); \
- if (ts_type__) \
- patch_ts(ts_type__, (Tuple), (Hp), (Bp), (Tracer)); \
- } while (0)
-
-#ifdef ERTS_SMP
-#define PATCH_TS(Type, Tuple, Hp, Bp, Tracer) \
- PATCH_TS__((Type), (Tuple), (Hp), (Bp), NULL)
-#else
-#define PATCH_TS(Type, Tuple, Hp, Bp, Tracer) \
- PATCH_TS__((Type), (Tuple), (Hp), (Bp), (Tracer))
-#endif
-
-static ERTS_INLINE void
-patch_ts(int ts_type, Eterm tuple, Eterm* hp, ErlHeapFragment *bp, Process *tracer)
-{
- Eterm *tptr = tuple_val(tuple);
- int arity = arityval(*tptr);
-
- ASSERT(ts_type);
- ASSERT((tptr+arity+1) == hp);
-
- tptr[0] = make_arityval(arity+1);
- tptr[1] = am_trace_ts;
-
- *hp = write_ts(ts_type, hp+1, bp, tracer);
-}
-
#ifdef ERTS_SMP
static void enqueue_sys_msg_unlocked(enum ErtsSysMsgType type,
Eterm from,
@@ -350,6 +323,14 @@ static void enqueue_sys_msg(enum ErtsSysMsgType type,
static void init_sys_msg_dispatcher(void);
#endif
+static void init_tracer_nif(void);
+static int tracer_cmp_fun(void*, void*);
+static HashValue tracer_hash_fun(void*);
+static void *tracer_alloc_fun(void*);
+static void tracer_free_fun(void*);
+
+typedef struct ErtsTracerNif_ ErtsTracerNif;
+
void erts_init_trace(void) {
erts_smp_rwmtx_opt_t rwmtx_opts = ERTS_SMP_RWMTX_OPT_DEFAULT_INITER;
rwmtx_opts.type = ERTS_SMP_RWMTX_TYPE_EXTREMELY_FREQUENT_READ;
@@ -363,80 +344,67 @@ void erts_init_trace(void) {
erts_bif_trace_init();
erts_system_monitor_clear(NULL);
erts_system_profile_clear(NULL);
- default_trace_flags = F_INITIAL_TRACE_FLAGS;
- default_tracer = NIL;
- system_seq_tracer = am_false;
+ default_proc_trace_flags = F_INITIAL_TRACE_FLAGS;
+ default_proc_tracer = erts_tracer_nil;
+ default_port_trace_flags = F_INITIAL_TRACE_FLAGS;
+ default_port_tracer = erts_tracer_nil;
+ system_seq_tracer = erts_tracer_nil;
#ifdef ERTS_SMP
init_sys_msg_dispatcher();
#endif
+ init_tracer_nif();
}
-static Eterm system_seq_tracer;
-
#define ERTS_ALLOC_SYSMSG_HEAP(SZ, BPP, OHPP, UNUSED) \
(*(BPP) = new_message_buffer((SZ)), \
*(OHPP) = &(*(BPP))->off_heap, \
(*(BPP))->mem)
-#ifdef ERTS_SMP
-#define ERTS_ENQ_TRACE_MSG(FPID, TPID, MSG, BP) \
-do { \
- ERTS_LC_ASSERT(erts_smp_lc_mtx_is_locked(&smq_mtx)); \
- enqueue_sys_msg_unlocked(SYS_MSG_TYPE_TRACE, (FPID), (TPID), (MSG), (BP)); \
-} while(0)
-#else
-#define ERTS_ENQ_TRACE_MSG(FPID, TPROC, MSG, BP) \
- do { \
- ErtsMessage *mp__ = erts_alloc_message(0, NULL); \
- mp__->data.heap_frag = (BP); \
- erts_queue_message((TPROC), NULL, mp__, (MSG), NIL); \
- } while (0)
-#endif
+enum ErtsTracerOpt {
+ TRACE_FUN_DEFAULT = 0,
+ TRACE_FUN_ENABLED = 1,
+ TRACE_FUN_T_SEND = 2,
+ TRACE_FUN_T_RECEIVE = 3,
+ TRACE_FUN_T_CALL = 4,
+ TRACE_FUN_T_SCHED_PROC = 5,
+ TRACE_FUN_T_SCHED_PORT = 6,
+ TRACE_FUN_T_GC = 7,
+ TRACE_FUN_T_PROCS = 8,
+ TRACE_FUN_T_PORTS = 9,
+ TRACE_FUN_E_SEND = 10,
+ TRACE_FUN_E_RECEIVE = 11,
+ TRACE_FUN_E_CALL = 12,
+ TRACE_FUN_E_SCHED_PROC = 13,
+ TRACE_FUN_E_SCHED_PORT = 14,
+ TRACE_FUN_E_GC = 15,
+ TRACE_FUN_E_PROCS = 16,
+ TRACE_FUN_E_PORTS = 17
+};
-/*
- * NOTE that the ERTS_GET_TRACER_REF() returns from the function (!!!)
- * using it, and resets the parameters used if the tracer is invalid, i.e.,
- * use it with extreme care!
- */
-#ifdef ERTS_SMP
-#define ERTS_NULL_TRACER_REF NIL
-#define ERTS_TRACER_REF_TYPE Eterm
- /* In the smp case, we never find the tracer invalid here (the sys
- message dispatcher thread takes care of that). */
-#define ERTS_GET_TRACER_REF(RES, TPID, TRACEE_FLGS) \
-do { (RES) = (TPID); } while(0)
-int
-erts_is_tracer_proc_valid(Process* p)
-{
- return 1;
-}
-#else
-#define ERTS_NULL_TRACER_REF NULL
-#define ERTS_TRACER_REF_TYPE Process *
-#define ERTS_GET_TRACER_REF(RES, TPID, TRACEE_FLGS) \
-do { \
- (RES) = erts_proc_lookup((TPID)); \
- if (!(RES) || !(ERTS_TRACE_FLAGS((RES)) & F_TRACER)) { \
- (TPID) = NIL; \
- (TRACEE_FLGS) &= ~TRACEE_FLAGS; \
- return; \
- } \
-} while (0)
-int
-erts_is_tracer_proc_valid(Process* p)
-{
- Process* tracer;
+#define NIF_TRACER_TYPES (18)
- tracer = erts_proc_lookup(ERTS_TRACER_PROC(p));
- if (tracer && ERTS_TRACE_FLAGS(tracer) & F_TRACER) {
- return 1;
- } else {
- ERTS_TRACER_PROC(p) = NIL;
- ERTS_TRACE_FLAGS(p) = ~TRACEE_FLAGS;
- return 0;
- }
-}
-#endif
+
+static ERTS_INLINE int
+send_to_tracer_nif_raw(Process *c_p, Process *tracee, const ErtsTracer tracer,
+ Uint trace_flags, Eterm t_p_id, ErtsTracerNif *tnif,
+ enum ErtsTracerOpt topt,
+ Eterm tag, Eterm msg, Eterm extra, Eterm pam_result);
+static ERTS_INLINE int
+send_to_tracer_nif(Process *c_p, ErtsPTabElementCommon *t_p,
+ Eterm t_p_id, ErtsTracerNif *tnif,
+ enum ErtsTracerOpt topt,
+ Eterm tag, Eterm msg, Eterm extra,
+ Eterm pam_result);
+static ERTS_INLINE Eterm
+call_enabled_tracer(const ErtsTracer tracer,
+ ErtsTracerNif **tnif_ref,
+ enum ErtsTracerOpt topt,
+ Eterm tag, Eterm t_p_id);
+static int
+is_tracer_enabled(Process* c_p, ErtsProcLocks c_p_locks,
+ ErtsPTabElementCommon *t_p,
+ ErtsTracerNif **tnif_ret,
+ enum ErtsTracerOpt topt, Eterm tag);
static Uint active_sched;
@@ -451,19 +419,6 @@ static void
exiting_reset(Eterm exiting)
{
erts_smp_rwmtx_rwlock(&sys_trace_rwmtx);
- if (exiting == default_tracer) {
- default_tracer = NIL;
- default_trace_flags &= TRACEE_FLAGS;
-#ifdef DEBUG
- default_trace_flags |= F_INITIAL_TRACE_FLAGS;
-#endif
- }
- if (exiting == system_seq_tracer) {
-#ifdef DEBUG_PRINTOUTS
- erts_fprintf(stderr, "seq tracer %T exited\n", exiting);
-#endif
- system_seq_tracer = am_false;
- }
if (exiting == system_monitor) {
#ifdef ERTS_SMP
system_monitor = NIL;
@@ -488,11 +443,7 @@ erts_trace_check_exiting(Eterm exiting)
{
int reset = 0;
erts_smp_rwmtx_rlock(&sys_trace_rwmtx);
- if (exiting == default_tracer)
- reset = 1;
- else if (exiting == system_seq_tracer)
- reset = 1;
- else if (exiting == system_monitor)
+ if (exiting == system_monitor)
reset = 1;
else if (exiting == system_profile)
reset = 1;
@@ -501,23 +452,25 @@ erts_trace_check_exiting(Eterm exiting)
exiting_reset(exiting);
}
-static ERTS_INLINE int
-is_valid_tracer(Eterm tracer)
+ErtsTracer
+erts_set_system_seq_tracer(Process *c_p, ErtsProcLocks c_p_locks, ErtsTracer new)
{
- return erts_proc_lookup(tracer) || erts_is_valid_tracer_port(tracer);
-}
+ ErtsTracer old;
-Eterm
-erts_set_system_seq_tracer(Process *c_p, ErtsProcLocks c_p_locks, Eterm new)
-{
- Eterm old;
-
- if (new != am_false && !is_valid_tracer(new))
- return THE_NON_VALUE;
+ if (!ERTS_TRACER_IS_NIL(new)) {
+ Eterm nif_result = call_enabled_tracer(
+ new, NULL, TRACE_FUN_ENABLED, am_trace_status, am_undefined);
+ switch (nif_result) {
+ case am_trace: break;
+ default:
+ return THE_NON_VALUE;
+ }
+ }
erts_smp_rwmtx_rwlock(&sys_trace_rwmtx);
old = system_seq_tracer;
- system_seq_tracer = new;
+ system_seq_tracer = erts_tracer_nil;
+ erts_tracer_update(&system_seq_tracer, new);
#ifdef DEBUG_PRINTOUTS
erts_fprintf(stderr, "set seq tracer new=%T old=%T\n", new, old);
@@ -526,66 +479,134 @@ erts_set_system_seq_tracer(Process *c_p, ErtsProcLocks c_p_locks, Eterm new)
return old;
}
-Eterm
+ErtsTracer
erts_get_system_seq_tracer(void)
{
- Eterm st;
+ ErtsTracer st;
erts_smp_rwmtx_rlock(&sys_trace_rwmtx);
st = system_seq_tracer;
#ifdef DEBUG_PRINTOUTS
erts_fprintf(stderr, "get seq tracer %T\n", st);
#endif
erts_smp_rwmtx_runlock(&sys_trace_rwmtx);
+
+ if (st != erts_tracer_nil &&
+ call_enabled_tracer(st, NULL, TRACE_FUN_ENABLED,
+ am_trace_status, am_undefined) == am_remove) {
+ erts_set_system_seq_tracer(NULL, 0, erts_tracer_nil);
+ st = erts_tracer_nil;
+ }
+
return st;
}
static ERTS_INLINE void
-get_default_tracing(Uint *flagsp, Eterm *tracerp)
-{
- if (!(default_trace_flags & TRACEE_FLAGS))
- default_tracer = NIL;
-
- if (is_nil(default_tracer)) {
- default_trace_flags &= ~TRACEE_FLAGS;
- } else if (is_internal_pid(default_tracer)) {
- if (!erts_proc_lookup(default_tracer)) {
- reset_tracer:
- default_trace_flags &= ~TRACEE_FLAGS;
- default_tracer = NIL;
- }
+get_default_tracing(Uint *flagsp, ErtsTracer *tracerp,
+ Uint *default_trace_flags,
+ ErtsTracer *default_tracer)
+{
+ if (!(*default_trace_flags & TRACEE_FLAGS))
+ ERTS_TRACER_CLEAR(default_tracer);
+
+ if (ERTS_TRACER_IS_NIL(*default_tracer)) {
+ *default_trace_flags &= ~TRACEE_FLAGS;
} else {
- ASSERT(is_internal_port(default_tracer));
- if (!erts_is_valid_tracer_port(default_tracer))
- goto reset_tracer;
+ Eterm nif_res;
+ nif_res = call_enabled_tracer(*default_tracer,
+ NULL, TRACE_FUN_ENABLED,
+ am_trace_status, am_undefined);
+ switch (nif_res) {
+ case am_trace: break;
+ default: {
+ ErtsTracer curr_default_tracer = *default_tracer;
+ if (tracerp) {
+ /* we only have a rlock, so we have to unlock and then rwlock */
+ erts_smp_rwmtx_runlock(&sys_trace_rwmtx);
+ erts_smp_rwmtx_rwlock(&sys_trace_rwmtx);
+ }
+ /* check if someone else changed default tracer
+ while we got the write lock, if so we don't do
+ anything. */
+ if (curr_default_tracer == *default_tracer) {
+ *default_trace_flags &= ~TRACEE_FLAGS;
+ ERTS_TRACER_CLEAR(default_tracer);
+ }
+ if (tracerp) {
+ erts_smp_rwmtx_rwunlock(&sys_trace_rwmtx);
+ erts_smp_rwmtx_rlock(&sys_trace_rwmtx);
+ }
+ }
+ }
}
if (flagsp)
- *flagsp = default_trace_flags;
- if (tracerp)
- *tracerp = default_tracer;
+ *flagsp = *default_trace_flags;
+ if (tracerp) {
+ erts_tracer_update(tracerp,*default_tracer);
+ }
+}
+
+static ERTS_INLINE void
+erts_change_default_tracing(int setflags, Uint flags,
+ const ErtsTracer tracer,
+ Uint *default_trace_flags,
+ ErtsTracer *default_tracer)
+{
+ if (setflags)
+ *default_trace_flags |= flags;
+ else
+ *default_trace_flags &= ~flags;
+
+ erts_tracer_update(default_tracer, tracer);
+
+ get_default_tracing(NULL, NULL, default_trace_flags, default_tracer);
}
void
-erts_change_default_tracing(int setflags, Uint *flagsp, Eterm *tracerp)
+erts_change_default_proc_tracing(int setflags, Uint flagsp,
+ const ErtsTracer tracer)
{
erts_smp_rwmtx_rwlock(&sys_trace_rwmtx);
- if (flagsp) {
- if (setflags)
- default_trace_flags |= *flagsp;
- else
- default_trace_flags &= ~(*flagsp);
- }
- if (tracerp)
- default_tracer = *tracerp;
- get_default_tracing(flagsp, tracerp);
+ erts_change_default_tracing(
+ setflags, flagsp, tracer,
+ &default_proc_trace_flags,
+ &default_proc_tracer);
erts_smp_rwmtx_rwunlock(&sys_trace_rwmtx);
}
void
-erts_get_default_tracing(Uint *flagsp, Eterm *tracerp)
+erts_change_default_port_tracing(int setflags, Uint flagsp,
+ const ErtsTracer tracer)
+{
+ erts_smp_rwmtx_rwlock(&sys_trace_rwmtx);
+ erts_change_default_tracing(
+ setflags, flagsp, tracer,
+ &default_port_trace_flags,
+ &default_port_tracer);
+ erts_smp_rwmtx_rwunlock(&sys_trace_rwmtx);
+}
+
+void
+erts_get_default_proc_tracing(Uint *flagsp, ErtsTracer *tracerp)
+{
+ erts_smp_rwmtx_rlock(&sys_trace_rwmtx);
+ *tracerp = erts_tracer_nil; /* initialize */
+ get_default_tracing(
+ flagsp, tracerp,
+ &default_proc_trace_flags,
+ &default_proc_tracer);
+ erts_smp_rwmtx_runlock(&sys_trace_rwmtx);
+}
+
+void
+erts_get_default_port_tracing(Uint *flagsp, ErtsTracer *tracerp)
{
erts_smp_rwmtx_rlock(&sys_trace_rwmtx);
- get_default_tracing(flagsp, tracerp);
+ *tracerp = erts_tracer_nil; /* initialize */
+ get_default_tracing(
+ flagsp, tracerp,
+ &default_port_trace_flags,
+ &default_port_tracer);
erts_smp_rwmtx_runlock(&sys_trace_rwmtx);
}
@@ -623,29 +644,22 @@ erts_get_system_profile(void) {
return profile;
}
-#ifdef ERTS_SMP
-static void
-do_send_to_port(Eterm to,
- Port* unused_port,
- Eterm from,
- enum ErtsSysMsgType type,
- Eterm message)
-{
- Uint sz = size_object(message);
- ErlHeapFragment *bp = new_message_buffer(sz);
- Uint *hp = bp->mem;
- Eterm msg = copy_struct(message, sz, &hp, &bp->off_heap);
- enqueue_sys_msg_unlocked(type, from, to, msg, bp);
-}
-
-#define WRITE_SYS_MSG_TO_PORT write_sys_msg_to_port
+#ifdef HAVE_ERTS_NOW_CPU
+# define GET_NOW(m, s, u) \
+do { \
+ if (erts_cpu_timestamp) \
+ erts_get_now_cpu(m, s, u); \
+ else \
+ get_now(m, s, u); \
+} while (0)
#else
-#define WRITE_SYS_MSG_TO_PORT do_send_to_port
+# define GET_NOW(m, s, u) do {get_now(m, s, u);} while (0)
#endif
+
static void
-WRITE_SYS_MSG_TO_PORT(Eterm unused_to,
+write_sys_msg_to_port(Eterm unused_to,
Port* trace_port,
Eterm unused_from,
enum ErtsSysMsgType unused_type,
@@ -661,7 +675,7 @@ WRITE_SYS_MSG_TO_PORT(Eterm unused_to,
erts_encode_ext(message, &ptr);
if (!(ptr <= buffer+size)) {
- erl_exit(1, "Internal error in do_send_to_port: %d\n", ptr-buffer);
+ erts_exit(ERTS_ERROR_EXIT, "Internal error in do_send_to_port: %d\n", ptr-buffer);
}
#ifndef ERTS_SMP
@@ -672,150 +686,6 @@ WRITE_SYS_MSG_TO_PORT(Eterm unused_to,
erts_free(ERTS_ALC_T_TMP, (void *) buffer);
}
-
-#ifndef ERTS_SMP
-/* Send {trace_ts, Pid, out, 0, Timestamp}
- * followed by {trace_ts, Pid, in, 0, NewTimestamp}
- *
- * 'NewTimestamp' through patch_ts().
- */
-static void
-do_send_schedfix_to_port(Port *trace_port, Eterm pid, Eterm timestamp, int ts_type) {
-#define LOCAL_HEAP_SIZE (5+5+ERTS_TRACE_PATCH_TS_MAX_SIZE)
- DeclareTmpHeapNoproc(local_heap,LOCAL_HEAP_SIZE);
- Eterm message;
- Eterm *hp;
- Eterm mfarity;
-
- UseTmpHeapNoproc(LOCAL_HEAP_SIZE);
- ASSERT(is_pid(pid));
- ASSERT(is_tuple(timestamp));
- ASSERT(*tuple_val(timestamp) == make_arityval(3));
-
- hp = local_heap;
- mfarity = make_small(0);
- message = TUPLE5(hp, am_trace_ts, pid, am_out, mfarity, timestamp);
- /* Note, hp is deliberately NOT incremented since it will be reused */
-
- do_send_to_port(trace_port->common.id,
- trace_port,
- pid,
- SYS_MSG_TYPE_UNDEFINED,
- message);
-
-
- message = TUPLE5(hp, am_trace_ts, pid, am_in, mfarity,
- NIL /* Will be overwritten by timestamp */);
- hp += 6;
- hp[-1] = write_ts(ts_type, hp, NULL, NULL);
-
- do_send_to_port(trace_port->common.id,
- trace_port,
- pid,
- SYS_MSG_TYPE_UNDEFINED,
- message);
- UnUseTmpHeapNoproc(LOCAL_HEAP_SIZE);
-#undef LOCAL_HEAP_SIZE
-}
-#endif
-
-/* If (c_p != NULL), a fake schedule out/in message pair will be sent,
- * if the driver so requests.
- * It is assumed that 'message' is not an 'out' message.
- *
- * 'c_p' is the currently executing process, "tracee" is the traced process
- * which 'message' concerns => if (*tracee_flags & F_TIMESTAMP_MASK),
- * 'message' must contain a timestamp.
- */
-static void
-send_to_port(Process *c_p, Eterm message,
- Eterm *tracer_pid, Uint *tracee_flags) {
- Port* trace_port;
-#ifndef ERTS_SMP
- int ts_type;
-#define LOCAL_HEAP_SIZE ERTS_TRACE_PATCH_TS_MAX_SIZE
- Eterm ts;
- DeclareTmpHeapNoproc(local_heap,LOCAL_HEAP_SIZE);
-#endif
-
- ASSERT(is_internal_port(*tracer_pid));
-#ifdef ERTS_SMP
- if (is_not_internal_port(*tracer_pid))
- return;
-
- trace_port = NULL;
-#else
-
- trace_port = erts_id2port_sflgs(*tracer_pid,
- NULL,
- 0,
- ERTS_PORT_SFLGS_INVALID_TRACER_LOOKUP);
-
- if (!trace_port) {
- *tracee_flags &= ~TRACEE_FLAGS;
- *tracer_pid = NIL;
- return;
- }
-
- /*
- * Make a fake schedule only if the current process is traced
- * with 'running' and 'timestamp'.
- */
-
- if ( c_p == NULL ||
- (! IS_TRACED_FL(c_p, F_TRACE_SCHED | F_TIMESTAMP_MASK))) {
-#endif
- do_send_to_port(*tracer_pid,
- trace_port,
- c_p ? c_p->common.id : NIL,
- SYS_MSG_TYPE_TRACE,
- message);
-#ifndef ERTS_SMP
- erts_port_release(trace_port);
- return;
- }
-
- /*
- * Note that the process being traced for some type of trace messages
- * (e.g. getting_linked) need not be the current process. That other
- * process might not have timestamps enabled.
- */
- UseTmpHeapNoproc(LOCAL_HEAP_SIZE);
-
- /* A fake schedule might be needed.
- * Create a dummy trace message with timestamp to be
- * passed to do_send_schedfix_to_port().
- */
- ts_type = TFLGS_TS_TYPE(c_p);
- ts = write_ts(ts_type, local_heap, NULL, NULL);
-
- trace_port->control_flags &= ~PORT_CONTROL_FLAG_HEAVY;
- do_send_to_port(*tracer_pid,
- trace_port,
- c_p ? c_p->common.id : NIL,
- SYS_MSG_TYPE_TRACE,
- message);
-
- if (trace_port->control_flags & PORT_CONTROL_FLAG_HEAVY) {
- /* The driver has just informed us that the last write took a
- * non-neglectible amount of time.
- *
- * We need to fake some trace messages to compensate for the time the
- * current process had to sacrifice for the writing of the previous
- * trace message. We pretend that the process got scheduled out
- * just after writning the real trace message, and now gets scheduled
- * in again.
- */
- do_send_schedfix_to_port(trace_port, c_p->common.id, ts, ts_type);
- }
-
- erts_port_release(trace_port);
-
- UnUseTmpHeapNoproc(LOCAL_HEAP_SIZE);
-#undef LOCAL_HEAP_SIZE
-#endif
-}
-
#ifndef ERTS_SMP
/* Profile send
* Checks if profiler is port or process
@@ -844,11 +714,11 @@ profile_send(Eterm from, Eterm message) {
0,
ERTS_PORT_SFLGS_INVALID_TRACER_LOOKUP);
if (profiler_port) {
- do_send_to_port(profiler,
- profiler_port,
- NIL, /* or current process->common.id */
- SYS_MSG_TYPE_SYSPROF,
- message);
+ write_sys_msg_to_port(profiler,
+ profiler_port,
+ NIL, /* or current process->common.id */
+ SYS_MSG_TYPE_SYSPROF,
+ message);
erts_port_release(profiler_port);
}
@@ -868,154 +738,26 @@ profile_send(Eterm from, Eterm message) {
else
msg = copy_struct(message, sz, &hp, &mp->hfrag.off_heap);
- erts_queue_message(profile_p, NULL, mp, msg, NIL);
+ erts_queue_message(profile_p, 0, mp, msg, from);
}
}
#endif
-
-/* A fake schedule out/in message pair will be sent,
- * if the driver so requests.
- *
- * 'c_p' is the currently executing process, may be NULL.
- */
static void
-seq_trace_send_to_port(Process *c_p,
- Eterm seq_tracer,
- Eterm message)
+trace_sched_aux(Process *p, ErtsProcLocks locks, Eterm what)
{
- Port* trace_port;
-#ifndef ERTS_SMP
- int ts_type;
- Eterm ts;
-#define LOCAL_HEAP_SIZE ERTS_TRACE_PATCH_TS_MAX_SIZE
- DeclareTmpHeapNoproc(local_heap,LOCAL_HEAP_SIZE);
- UseTmpHeapNoproc(LOCAL_HEAP_SIZE);
-#endif
-
- ASSERT(is_internal_port(seq_tracer));
-#ifdef ERTS_SMP
- if (is_not_internal_port(seq_tracer))
- return;
-
- trace_port = NULL;
-#else
- trace_port = erts_id2port_sflgs(seq_tracer,
- NULL,
- 0,
- ERTS_PORT_SFLGS_INVALID_TRACER_LOOKUP);
- if (!trace_port) {
- system_seq_tracer = am_false;
-#ifndef ERTS_SMP
- UnUseTmpHeapNoproc(LOCAL_HEAP_SIZE);
-#endif
- return;
- }
-
- if (c_p == NULL
- || (! IS_TRACED_FL(c_p, F_TRACE_SCHED | F_TIMESTAMP_MASK))) {
-#endif
- do_send_to_port(seq_tracer,
- trace_port,
- c_p ? c_p->common.id : NIL,
- SYS_MSG_TYPE_SEQTRACE,
- message);
-
-#ifndef ERTS_SMP
- erts_port_release(trace_port);
- UnUseTmpHeapNoproc(LOCAL_HEAP_SIZE);
- return;
- }
- /* Make a fake schedule only if the current process is traced
- * with 'running' and 'timestamp'.
- */
-
- /* A fake schedule might be needed.
- * Create a dummy trace message with timestamp to be
- * passed to do_send_schedfix_to_port().
- */
- ts_type = TFLGS_TS_TYPE(c_p);
- ts = write_ts(ts_type, local_heap, NULL, NULL);
-
- trace_port->control_flags &= ~PORT_CONTROL_FLAG_HEAVY;
- do_send_to_port(seq_tracer,
- trace_port,
- c_p ? c_p->common.id : NIL,
- SYS_MSG_TYPE_SEQTRACE,
- message);
-
- if (trace_port->control_flags & PORT_CONTROL_FLAG_HEAVY) {
- /* The driver has just informed us that the last write took a
- * non-neglectible amount of time.
- *
- * We need to fake some trace messages to compensate for the time the
- * current process had to sacrifice for the writing of the previous
- * trace message. We pretend that the process got scheduled out
- * just after writing the real trace message, and now gets scheduled
- * in again.
- */
- do_send_schedfix_to_port(trace_port, c_p->common.id, ts, ts_type);
- }
-
- erts_port_release(trace_port);
-
- UnUseTmpHeapNoproc(LOCAL_HEAP_SIZE);
-#undef LOCAL_HEAP_SIZE
-#endif
-}
-
-static ERTS_INLINE void
-send_to_tracer(Process *tracee,
- ERTS_TRACER_REF_TYPE tracer_ref,
- Eterm msg,
- Eterm **hpp,
- ErlHeapFragment *bp,
- int no_fake_sched)
-{
- ERTS_SMP_LC_ASSERT(erts_proc_lc_my_proc_locks(tracee));
-
- erts_smp_mtx_lock(&smq_mtx);
+ Eterm tmp, *hp;
+ int curr_func;
+ ErtsTracerNif *tnif = NULL;
- if (is_internal_pid(ERTS_TRACER_PROC(tracee))) {
- PATCH_TS(TFLGS_TS_TYPE(tracee), msg, *hpp, bp, tracer_ref);
- ERTS_ENQ_TRACE_MSG(tracee->common.id, tracer_ref, msg, bp);
- }
- else {
- ASSERT(is_internal_port(ERTS_TRACER_PROC(tracee)));
- PATCH_TS(TFLGS_TS_TYPE(tracee), msg, *hpp, NULL, NULL);
- send_to_port(no_fake_sched ? NULL : tracee,
- msg,
- &ERTS_TRACER_PROC(tracee),
- &ERTS_TRACE_FLAGS(tracee));
- }
-
- erts_smp_mtx_unlock(&smq_mtx);
-
-}
-
-static void
-trace_sched_aux(Process *p, Eterm what, int never_fake_sched)
-{
-#define LOCAL_HEAP_SIZE (5+4+1+ERTS_TRACE_PATCH_TS_MAX_SIZE)
- DeclareTmpHeap(local_heap,LOCAL_HEAP_SIZE,p);
- Eterm tmp, mess, *hp;
- ErlHeapFragment *bp = NULL;
- ErlOffHeap *off_heap;
- ERTS_TRACER_REF_TYPE tracer_ref = ERTS_NULL_TRACER_REF;
- int sched_no, curr_func, to_port, no_fake_sched;
-
- if (is_nil(ERTS_TRACER_PROC(p)))
+ if (ERTS_TRACER_IS_NIL(ERTS_TRACER(p)))
return;
- no_fake_sched = never_fake_sched;
-
switch (what) {
case am_out:
case am_out_exiting:
case am_out_exited:
- no_fake_sched = 1;
- break;
case am_in:
case am_in_exiting:
break;
@@ -1024,16 +766,8 @@ trace_sched_aux(Process *p, Eterm what, int never_fake_sched)
break;
}
- sched_no = IS_TRACED_FL(p, F_TRACE_SCHED_NO);
- to_port = is_internal_port(ERTS_TRACER_PROC(p));
-
- if (!to_port) {
- ASSERT(is_internal_pid(ERTS_TRACER_PROC(p)));
-
- ERTS_GET_TRACER_REF(tracer_ref,
- ERTS_TRACER_PROC(p),
- ERTS_TRACE_FLAGS(p));
- }
+ if (!is_tracer_enabled(p, locks, &p->common, &tnif, TRACE_FUN_E_SCHED_PROC, what))
+ return;
if (ERTS_PROC_IS_EXITING(p))
curr_func = 0;
@@ -1043,44 +777,16 @@ trace_sched_aux(Process *p, Eterm what, int never_fake_sched)
curr_func = p->current != NULL;
}
- UseTmpHeap(LOCAL_HEAP_SIZE,p);
-
- if (to_port)
- hp = local_heap;
- else {
- Uint size = 5;
- if (curr_func)
- size += 4;
- if (sched_no)
- size += 1;
- size += PATCH_TS_SIZE(p);
- hp = ERTS_ALLOC_SYSMSG_HEAP(size, &bp, &off_heap, tracer_ref);
- }
-
if (!curr_func) {
tmp = make_small(0);
} else {
+ hp = HAlloc(p, 4);
tmp = TUPLE3(hp,p->current[0],p->current[1],make_small(p->current[2]));
hp += 4;
}
- if (!sched_no) {
- mess = TUPLE4(hp, am_trace, p->common.id, what, tmp);
- hp += 5;
- }
- else {
-#ifdef ERTS_SMP
- Eterm sched_id = make_small(p->scheduler_data->no);
-#else
- Eterm sched_id = make_small(1);
-#endif
- mess = TUPLE5(hp, am_trace, p->common.id, what, sched_id, tmp);
- hp += 6;
- }
-
- send_to_tracer(p, tracer_ref, mess, &hp, bp, no_fake_sched);
- UnUseTmpHeap(LOCAL_HEAP_SIZE,p);
-#undef LOCAL_HEAP_SIZE
+ send_to_tracer_nif(p, &p->common, p->common.id, tnif, TRACE_FUN_T_SCHED_PROC,
+ what, tmp, THE_NON_VALUE, am_true);
}
/* Send {trace_ts, Pid, What, {Mod, Func, Arity}, Timestamp}
@@ -1090,9 +796,9 @@ trace_sched_aux(Process *p, Eterm what, int never_fake_sched)
* 'out_exiting', or 'out_exited'.
*/
void
-trace_sched(Process *p, Eterm what)
+trace_sched(Process *p, ErtsProcLocks locks, Eterm what)
{
- trace_sched_aux(p, what, 0);
+ trace_sched_aux(p, locks, what);
}
/* Send {trace_ts, Pid, Send, Msg, DestPid, Timestamp}
@@ -1103,140 +809,118 @@ trace_sched(Process *p, Eterm what)
void
trace_send(Process *p, Eterm to, Eterm msg)
{
- Eterm operation;
- unsigned sz_msg;
- unsigned sz_to;
- Eterm* hp;
- Eterm mess;
-
- if (!ARE_TRACE_FLAGS_ON(p, F_TRACE_SEND)) {
+ Eterm operation = am_send;
+ ErtsTracerNif *tnif = NULL;
+ ErtsTracingEvent* te;
+ Eterm pam_result;
+
+ ASSERT(ARE_TRACE_FLAGS_ON(p, F_TRACE_SEND));
+
+ te = &erts_send_tracing[erts_active_bp_ix()];
+ if (!te->on) {
return;
}
+ if (te->match_spec) {
+ Eterm args[2];
+ Uint32 return_flags;
+ args[0] = to;
+ args[1] = msg;
+ pam_result = erts_match_set_run_trace(p, p,
+ te->match_spec, args, 2,
+ ERTS_PAM_TMP_RESULT, &return_flags);
+ if (pam_result == am_false)
+ return;
+ if (ERTS_TRACE_FLAGS(p) & F_TRACE_SILENT) {
+ erts_match_set_release_result_trace(p, pam_result);
+ return;
+ }
+ } else
+ pam_result = am_true;
- operation = am_send;
if (is_internal_pid(to)) {
if (!erts_proc_lookup(to))
goto send_to_non_existing_process;
}
else if(is_external_pid(to)
&& external_pid_dist_entry(to) == erts_this_dist_entry) {
- char *s;
send_to_non_existing_process:
- s = "send_to_non_existing_process";
- operation = am_atom_put(s, sys_strlen(s));
+ operation = am_send_to_non_existing_process;
}
- if (is_internal_port(ERTS_TRACER_PROC(p))) {
-#define LOCAL_HEAP_SIZE (6 + ERTS_TRACE_PATCH_TS_MAX_SIZE)
- DeclareTmpHeapNoproc(local_heap,LOCAL_HEAP_SIZE);
- UseTmpHeapNoproc(LOCAL_HEAP_SIZE);
-
- hp = local_heap;
- mess = TUPLE5(hp, am_trace, p->common.id, operation, msg, to);
- hp += 6;
- erts_smp_mtx_lock(&smq_mtx);
- PATCH_TS(TFLGS_TS_TYPE(p), mess, hp, NULL, NULL);
- send_to_port(p, mess, &ERTS_TRACER_PROC(p), &ERTS_TRACE_FLAGS(p));
- UnUseTmpHeapNoproc(LOCAL_HEAP_SIZE);
-#undef LOCAL_HEAP_SIZE
- erts_smp_mtx_unlock(&smq_mtx);
- } else {
- Uint need;
- ErlHeapFragment *bp;
- ErlOffHeap *off_heap;
- ERTS_TRACER_REF_TYPE tracer_ref;
-
- ASSERT(is_internal_pid(ERTS_TRACER_PROC(p)));
-
- ERTS_GET_TRACER_REF(tracer_ref,
- ERTS_TRACER_PROC(p),
- ERTS_TRACE_FLAGS(p));
-
- sz_msg = size_object(msg);
- sz_to = size_object(to);
- need = sz_msg + sz_to + 6 + PATCH_TS_SIZE(p);
-
- hp = ERTS_ALLOC_SYSMSG_HEAP(need, &bp, &off_heap, tracer_ref);
-
- to = copy_struct(to,
- sz_to,
- &hp,
- off_heap);
- msg = copy_struct(msg,
- sz_msg,
- &hp,
- off_heap);
- mess = TUPLE5(hp, am_trace, p->common.id, operation, msg, to);
- hp += 6;
-
- erts_smp_mtx_lock(&smq_mtx);
-
- PATCH_TS(TFLGS_TS_TYPE(p), mess, hp, bp, tracer_ref);
- ERTS_ENQ_TRACE_MSG(p->common.id, tracer_ref, mess, bp);
- erts_smp_mtx_unlock(&smq_mtx);
+ if (is_tracer_enabled(p, ERTS_PROC_LOCK_MAIN, &p->common, &tnif,
+ TRACE_FUN_E_SEND, operation)) {
+ send_to_tracer_nif(p, &p->common, p->common.id, tnif, TRACE_FUN_T_SEND,
+ operation, msg, to, pam_result);
}
+ erts_match_set_release_result_trace(p, pam_result);
}
/* Send {trace_ts, Pid, receive, Msg, Timestamp}
* or {trace, Pid, receive, Msg}
*/
void
-trace_receive(Process *rp, Eterm msg)
+trace_receive(Process* receiver,
+ Eterm from,
+ Eterm msg, ErtsTracingEvent* te)
{
- Eterm mess;
- size_t sz_msg;
- Eterm* hp;
-
- if (is_internal_port(ERTS_TRACER_PROC(rp))) {
-#define LOCAL_HEAP_SIZE (5+ERTS_TRACE_PATCH_TS_MAX_SIZE)
- DeclareTmpHeapNoproc(local_heap,LOCAL_HEAP_SIZE);
- UseTmpHeapNoproc(LOCAL_HEAP_SIZE);
-
- hp = local_heap;
- mess = TUPLE4(hp, am_trace, rp->common.id, am_receive, msg);
- hp += 5;
- erts_smp_mtx_lock(&smq_mtx);
- PATCH_TS(TFLGS_TS_TYPE(rp), mess, hp, NULL, NULL);
- send_to_port(rp, mess, &ERTS_TRACER_PROC(rp), &ERTS_TRACE_FLAGS(rp));
- UnUseTmpHeapNoproc(LOCAL_HEAP_SIZE);
-#undef LOCAL_HEAP_SIZE
- erts_smp_mtx_unlock(&smq_mtx);
- } else {
- Uint hsz;
- ErlHeapFragment *bp;
- ErlOffHeap *off_heap;
- ERTS_TRACER_REF_TYPE tracer_ref;
-
- ASSERT(is_internal_pid(ERTS_TRACER_PROC(rp)));
-
- ERTS_GET_TRACER_REF(tracer_ref,
- ERTS_TRACER_PROC(rp),
- ERTS_TRACE_FLAGS(rp));
-
- sz_msg = size_object(msg);
-
- hsz = sz_msg + 5 + PATCH_TS_SIZE(rp);
-
- hp = ERTS_ALLOC_SYSMSG_HEAP(hsz, &bp, &off_heap, tracer_ref);
-
- msg = copy_struct(msg, sz_msg, &hp, off_heap);
- mess = TUPLE4(hp, am_trace, rp->common.id, am_receive, msg);
- hp += 5;
-
- erts_smp_mtx_lock(&smq_mtx);
-
- PATCH_TS(TFLGS_TS_TYPE(rp), mess, hp, bp, tracer_ref);
- ERTS_ENQ_TRACE_MSG(rp->common.id, tracer_ref, mess, bp);
- erts_smp_mtx_unlock(&smq_mtx);
- }
+ ErtsTracerNif *tnif = NULL;
+ Eterm pam_result;
+
+ if (!te) {
+ te = &erts_receive_tracing[erts_active_bp_ix()];
+ if (!te->on)
+ return;
+ }
+ else ASSERT(te->on);
+
+ if (te->match_spec) {
+ Eterm args[3];
+ Uint32 return_flags;
+ if (is_pid(from)) {
+ args[0] = pid_node_name(from);
+ args[1] = from;
+ }
+ else {
+ ASSERT(is_atom(from));
+ args[0] = from; /* node name or other atom (e.g 'system') */
+ args[1] = am_undefined;
+ }
+ args[2] = msg;
+ pam_result = erts_match_set_run_trace(NULL, receiver,
+ te->match_spec, args, 3,
+ ERTS_PAM_TMP_RESULT, &return_flags);
+ if (pam_result == am_false)
+ return;
+ if (ERTS_TRACE_FLAGS(receiver) & F_TRACE_SILENT) {
+ erts_match_set_release_result_trace(NULL, pam_result);
+ return;
+ }
+ } else
+ pam_result = am_true;
+
+ if (is_tracer_enabled(NULL, 0, &receiver->common, &tnif,
+ TRACE_FUN_E_RECEIVE, am_receive)) {
+ send_to_tracer_nif(NULL, &receiver->common, receiver->common.id,
+ tnif, TRACE_FUN_T_RECEIVE,
+ am_receive, msg, THE_NON_VALUE, pam_result);
+ }
+ erts_match_set_release_result_trace(NULL, pam_result);
}
int
seq_trace_update_send(Process *p)
{
- Eterm seq_tracer = erts_get_system_seq_tracer();
+ ErtsTracer seq_tracer = erts_get_system_seq_tracer();
ASSERT((is_tuple(SEQ_TRACE_TOKEN(p)) || is_nil(SEQ_TRACE_TOKEN(p))));
- if ((p->common.id == seq_tracer) || have_no_seqtrace(SEQ_TRACE_TOKEN(p))) {
+ if (have_no_seqtrace(SEQ_TRACE_TOKEN(p)) ||
+ (seq_tracer != NIL &&
+ call_enabled_tracer(seq_tracer, NULL,
+ TRACE_FUN_ENABLED, am_seq_trace,
+ p ? p->common.id : am_undefined) != am_trace)
+#ifdef USE_VM_PROBES
+ || (SEQ_TRACE_TOKEN(p) == am_have_dt_utag)
+#endif
+ ) {
return 0;
}
SEQ_TRACE_TOKEN_SENDER(p) = p->common.id;
@@ -1264,20 +948,29 @@ seq_trace_output_generic(Eterm token, Eterm msg, Uint type,
Eterm receiver, Process *process, Eterm exitfrom)
{
Eterm mess;
- ErlHeapFragment* bp;
Eterm* hp;
Eterm label;
Eterm lastcnt_serial;
Eterm type_atom;
- int sz_exit;
- Eterm seq_tracer;
- int ts_type;
+ ErtsTracer seq_tracer;
+ int seq_tracer_flags = 0;
+#define LOCAL_HEAP_SIZE (64)
+ DeclareTmpHeapNoproc(local_heap,LOCAL_HEAP_SIZE);
seq_tracer = erts_get_system_seq_tracer();
ASSERT(is_tuple(token) || is_nil(token));
- if (SEQ_TRACE_T_SENDER(token) == seq_tracer || token == NIL ||
- (process && ERTS_TRACE_FLAGS(process) & F_SENSITIVE)) {
+ if (token == NIL || (process && ERTS_TRACE_FLAGS(process) & F_SENSITIVE) ||
+ ERTS_TRACER_IS_NIL(seq_tracer) ||
+ call_enabled_tracer(seq_tracer,
+ NULL, TRACE_FUN_ENABLED,
+ am_seq_trace,
+ process ? process->common.id : am_undefined) != am_trace) {
+ return;
+ }
+
+ if ((unsigned_val(SEQ_TRACE_T_FLAGS(token)) & type) == 0) {
+ /* No flags set, nothing to do */
return;
}
@@ -1286,155 +979,32 @@ seq_trace_output_generic(Eterm token, Eterm msg, Uint type,
case SEQ_TRACE_PRINT: type_atom = am_print; break;
case SEQ_TRACE_RECEIVE: type_atom = am_receive; break;
default:
- erl_exit(1, "invalid type in seq_trace_output_generic: %d:\n", type);
+ erts_exit(ERTS_ERROR_EXIT, "invalid type in seq_trace_output_generic: %d:\n", type);
return; /* To avoid warning */
}
- if ((unsigned_val(SEQ_TRACE_T_FLAGS(token)) & type) == 0) {
- /* No flags set, nothing to do */
- return;
- }
+ UseTmpHeapNoproc(LOCAL_HEAP_SIZE);
- if (seq_tracer == am_false) {
- return; /* no need to send anything */
+ hp = local_heap;
+ label = SEQ_TRACE_T_LABEL(token);
+ lastcnt_serial = TUPLE2(hp, SEQ_TRACE_T_LASTCNT(token),
+ SEQ_TRACE_T_SERIAL(token));
+ hp += 3;
+ if (exitfrom != NIL) {
+ msg = TUPLE3(hp, am_EXIT, exitfrom, msg);
+ hp += 4;
}
+ mess = TUPLE5(hp, type_atom, lastcnt_serial, SEQ_TRACE_T_SENDER(token), receiver, msg);
+ hp += 6;
- ts_type = ERTS_SEQTFLGS2TSTYPE(unsigned_val(SEQ_TRACE_T_FLAGS(token)));
-
- if (is_internal_port(seq_tracer)) {
-#define LOCAL_HEAP_SIZE (60 + ERTS_TRACE_PATCH_TS_MAX_SIZE)
- DeclareTmpHeapNoproc(local_heap,LOCAL_HEAP_SIZE);
- UseTmpHeapNoproc(LOCAL_HEAP_SIZE);
+ seq_tracer_flags |= ERTS_SEQTFLGS2TFLGS(unsigned_val(SEQ_TRACE_T_FLAGS(token)));
- hp = local_heap;
- label = SEQ_TRACE_T_LABEL(token);
- lastcnt_serial = TUPLE2(hp, SEQ_TRACE_T_LASTCNT(token),
- SEQ_TRACE_T_SERIAL(token));
- hp += 3;
- if (exitfrom != NIL) {
- msg = TUPLE3(hp, am_EXIT, exitfrom, msg);
- hp += 4;
- }
- mess = TUPLE5(hp, type_atom, lastcnt_serial, SEQ_TRACE_T_SENDER(token),
- receiver, msg);
- hp += 6;
+ send_to_tracer_nif_raw(NULL, process, seq_tracer, seq_tracer_flags,
+ label, NULL, TRACE_FUN_DEFAULT, am_seq_trace, mess,
+ THE_NON_VALUE, am_true);
- erts_smp_mtx_lock(&smq_mtx);
- if (!ts_type) {
- mess = TUPLE3(hp, am_seq_trace, label, mess);
- seq_trace_send_to_port(NULL, seq_tracer, mess);
- } else {
- mess = TUPLE4(hp, am_seq_trace, label, mess,
- NIL /* Will be overwritten by timestamp */);
- hp += 5;
- hp[-1] = write_ts(ts_type, hp, NULL, NULL);
- seq_trace_send_to_port(process, seq_tracer, mess);
- }
- UnUseTmpHeapNoproc(LOCAL_HEAP_SIZE);
+ UnUseTmpHeapNoproc(LOCAL_HEAP_SIZE);
#undef LOCAL_HEAP_SIZE
- erts_smp_mtx_unlock(&smq_mtx);
- } else {
-#ifndef ERTS_SMP
- Process* tracer;
-#endif
- Eterm sender_copy;
- Eterm receiver_copy;
- Eterm m2;
- Uint sz_label, sz_lastcnt_serial, sz_msg, sz_ts, sz_sender,
- sz_exitfrom, sz_receiver;
-
- ASSERT(is_internal_pid(seq_tracer));
-
-#ifndef ERTS_SMP
-
- tracer = erts_proc_lookup(seq_tracer);
- if (!tracer) {
- system_seq_tracer = am_false;
- return; /* no need to send anything */
- }
-#endif
- if (receiver == seq_tracer) {
- return; /* no need to send anything */
- }
-
- sz_label = size_object(SEQ_TRACE_T_LABEL(token));
- sz_sender = size_object(SEQ_TRACE_T_SENDER(token));
- sz_receiver = size_object(receiver);
- sz_lastcnt_serial = 3; /* TUPLE2 */
- sz_msg = size_object(msg);
-
- sz_ts = patch_ts_size(ts_type);
- if (exitfrom != NIL) {
- sz_exit = 4; /* create {'EXIT',exitfrom,msg} */
- sz_exitfrom = size_object(exitfrom);
- }
- else {
- sz_exit = 0;
- sz_exitfrom = 0;
- }
- bp = new_message_buffer(4 /* TUPLE3 */ + sz_ts + 6 /* TUPLE5 */
- + sz_lastcnt_serial + sz_label + sz_msg
- + sz_exit + sz_exitfrom
- + sz_sender + sz_receiver);
- hp = bp->mem;
- label = copy_struct(SEQ_TRACE_T_LABEL(token), sz_label, &hp, &bp->off_heap);
- lastcnt_serial = TUPLE2(hp,SEQ_TRACE_T_LASTCNT(token),SEQ_TRACE_T_SERIAL(token));
- hp += 3;
- m2 = copy_struct(msg, sz_msg, &hp, &bp->off_heap);
- if (sz_exit) {
- Eterm exitfrom_copy = copy_struct(exitfrom,
- sz_exitfrom,
- &hp,
- &bp->off_heap);
- m2 = TUPLE3(hp, am_EXIT, exitfrom_copy, m2);
- hp += 4;
- }
- sender_copy = copy_struct(SEQ_TRACE_T_SENDER(token),
- sz_sender,
- &hp,
- &bp->off_heap);
- receiver_copy = copy_struct(receiver,
- sz_receiver,
- &hp,
- &bp->off_heap);
- mess = TUPLE5(hp,
- type_atom,
- lastcnt_serial,
- sender_copy,
- receiver_copy,
- m2);
- hp += 6;
-
- erts_smp_mtx_lock(&smq_mtx);
-
- if (!ts_type)
- mess = TUPLE3(hp, am_seq_trace, label, mess);
- else {
- mess = TUPLE4(hp, am_seq_trace, label, mess,
- NIL /* Will be overwritten by timestamp */);
- hp += 5;
- /* Write timestamp in element 6 of the 'msg' tuple */
- hp[-1] = write_ts(ts_type, hp, bp,
-#ifndef ERTS_SMP
- tracer
-#else
- NULL
-#endif
- );
- }
-
-#ifdef ERTS_SMP
- enqueue_sys_msg_unlocked(SYS_MSG_TYPE_SEQTRACE, NIL, NIL, mess, bp);
- erts_smp_mtx_unlock(&smq_mtx);
-#else
- /* trace_token must be NIL here */
- {
- ErtsMessage *mp = erts_alloc_message(0, NULL);
- mp->data.heap_frag = bp;
- erts_queue_message(tracer, NULL, mp, mess, NIL);
- }
-#endif
- }
}
/* Send {trace_ts, Pid, return_to, {Mod, Func, Arity}, Timestamp}
@@ -1443,63 +1013,20 @@ seq_trace_output_generic(Eterm token, Eterm msg, Uint type,
void
erts_trace_return_to(Process *p, BeamInstr *pc)
{
-#define LOCAL_HEAP_SIZE (4+5+ERTS_TRACE_PATCH_TS_MAX_SIZE)
- Eterm* hp;
Eterm mfa;
- Eterm mess;
- DeclareTmpHeapNoproc(local_heap,LOCAL_HEAP_SIZE);
BeamInstr *code_ptr = find_function_from_pc(pc);
- UseTmpHeapNoproc(LOCAL_HEAP_SIZE);
-
- hp = local_heap;
-
if (!code_ptr) {
mfa = am_undefined;
} else {
+ Eterm *hp = HAlloc(p, 4);
mfa = TUPLE3(hp, code_ptr[0], code_ptr[1], make_small(code_ptr[2]));
- hp += 4;
}
-
- mess = TUPLE4(hp, am_trace, p->common.id, am_return_to, mfa);
- hp += 5;
- erts_smp_mtx_lock(&smq_mtx);
-
- PATCH_TS(TFLGS_TS_TYPE(p), mess, hp, NULL, NULL);
-
- if (is_internal_port(ERTS_TRACER_PROC(p))) {
- send_to_port(p, mess, &ERTS_TRACER_PROC(p), &ERTS_TRACE_FLAGS(p));
- } else {
- ErlHeapFragment *bp;
- ErlOffHeap *off_heap;
- ERTS_TRACER_REF_TYPE tracer_ref;
- unsigned size;
-
- /*
- * Find the tracer.
- */
- ASSERT(is_internal_pid(ERTS_TRACER_PROC(p)));
-
- ERTS_GET_TRACER_REF(tracer_ref,
- ERTS_TRACER_PROC(p),
- ERTS_TRACE_FLAGS(p));
-
- size = size_object(mess);
-
- hp = ERTS_ALLOC_SYSMSG_HEAP(size, &bp, &off_heap, tracer_ref);
-
- /*
- * Copy the trace message into the buffer and enqueue it.
- */
- mess = copy_struct(mess, size, &hp, off_heap);
- ERTS_ENQ_TRACE_MSG(p->common.id, tracer_ref, mess, bp);
- }
- UnUseTmpHeapNoproc(LOCAL_HEAP_SIZE);
-#undef LOCAL_HEAP_SIZE
- erts_smp_mtx_unlock(&smq_mtx);
+ send_to_tracer_nif(p, &p->common, p->common.id, NULL, TRACE_FUN_T_CALL,
+ am_return_to, mfa, THE_NON_VALUE, am_true);
}
@@ -1507,114 +1034,53 @@ erts_trace_return_to(Process *p, BeamInstr *pc)
* or {trace, Pid, return_from, {Mod, Name, Arity}, Retval}
*/
void
-erts_trace_return(Process* p, BeamInstr* fi, Eterm retval, Eterm *tracer_pid)
+erts_trace_return(Process* p, BeamInstr* fi, Eterm retval, ErtsTracer *tracer)
{
Eterm* hp;
- Eterm mfa;
- Eterm mess;
- Eterm mod, name;
+ Eterm mfa, mod, name;
int arity;
Uint meta_flags, *tracee_flags;
- int ts_type;
-#ifdef ERTS_SMP
- Eterm tracee;
-#endif
-
- ASSERT(tracer_pid);
- if (*tracer_pid == am_true) {
+
+ ASSERT(tracer);
+ if (ERTS_TRACER_COMPARE(*tracer, erts_tracer_true)) {
/* Breakpoint trace enabled without specifying tracer =>
* use process tracer and flags
*/
- tracer_pid = &ERTS_TRACER_PROC(p);
+ tracer = &ERTS_TRACER(p);
}
- if (is_nil(*tracer_pid)) {
+ if (ERTS_TRACER_IS_NIL(*tracer)) {
/* Trace disabled */
return;
}
- ASSERT(is_internal_pid(*tracer_pid) || is_internal_port(*tracer_pid));
- if (*tracer_pid == p->common.id) {
- /* Do not generate trace messages to oneself */
- return;
- }
- if (tracer_pid == &ERTS_TRACER_PROC(p)) {
+ ASSERT(IS_TRACER_VALID(*tracer));
+ if (tracer == &ERTS_TRACER(p)) {
/* Tracer specified in process structure =>
* non-breakpoint trace =>
* use process flags
*/
tracee_flags = &ERTS_TRACE_FLAGS(p);
-#ifdef ERTS_SMP
- tracee = p->common.id;
-#endif
+ if (! (*tracee_flags & F_TRACE_CALLS)) {
+ return;
+ }
} else {
/* Tracer not specified in process structure =>
* tracer specified in breakpoint =>
* meta trace =>
* use fixed flag set instead of process flags
- */
+ */
meta_flags = F_TRACE_CALLS | F_NOW_TS;
tracee_flags = &meta_flags;
-#ifdef ERTS_SMP
- tracee = NIL;
-#endif
}
- if (! (*tracee_flags & F_TRACE_CALLS)) {
- return;
- }
-
+
mod = fi[0];
name = fi[1];
arity = fi[2];
-
- ts_type = ERTS_TFLGS2TSTYPE(*tracee_flags);
-
- if (is_internal_port(*tracer_pid)) {
-#define LOCAL_HEAP_SIZE (4+6+ERTS_TRACE_PATCH_TS_MAX_SIZE)
- DeclareTmpHeapNoproc(local_heap,LOCAL_HEAP_SIZE);
- UseTmpHeapNoproc(LOCAL_HEAP_SIZE);
- hp = local_heap;
- mfa = TUPLE3(hp, mod, name, make_small(arity));
- hp += 4;
- mess = TUPLE5(hp, am_trace, p->common.id, am_return_from, mfa, retval);
- hp += 6;
- erts_smp_mtx_lock(&smq_mtx);
- PATCH_TS(ts_type, mess, hp, NULL, NULL);
- send_to_port(p, mess, tracer_pid, tracee_flags);
- UnUseTmpHeapNoproc(LOCAL_HEAP_SIZE);
-#undef LOCAL_HEAP_SIZE
- erts_smp_mtx_unlock(&smq_mtx);
- } else {
- ErlHeapFragment *bp;
- ErlOffHeap *off_heap;
- ERTS_TRACER_REF_TYPE tracer_ref;
- unsigned size;
- unsigned retval_size;
-
- ASSERT(is_internal_pid(*tracer_pid));
-
- ERTS_GET_TRACER_REF(tracer_ref, *tracer_pid, *tracee_flags);
-
- retval_size = size_object(retval);
- size = 6 + 4 + retval_size + patch_ts_size(ts_type);
-
- hp = ERTS_ALLOC_SYSMSG_HEAP(size, &bp, &off_heap, tracer_ref);
- /*
- * Build the trace tuple and put it into receive queue of the tracer process.
- */
-
- mfa = TUPLE3(hp, mod, name, make_small(arity));
- hp += 4;
- retval = copy_struct(retval, retval_size, &hp, off_heap);
- mess = TUPLE5(hp, am_trace, p->common.id, am_return_from, mfa, retval);
- hp += 6;
-
- erts_smp_mtx_lock(&smq_mtx);
-
- PATCH_TS(ts_type, mess, hp, bp, tracer_ref);
-
- ERTS_ENQ_TRACE_MSG(tracee, tracer_ref, mess, bp);
- erts_smp_mtx_unlock(&smq_mtx);
- }
+ hp = HAlloc(p, 4);
+ mfa = TUPLE3(hp, mod, name, make_small(arity));
+ hp += 4;
+ send_to_tracer_nif_raw(p, NULL, *tracer, *tracee_flags, p->common.id,
+ NULL, TRACE_FUN_T_CALL, am_return_from, mfa, retval, am_true);
}
/* Send {trace_ts, Pid, exception_from, {Mod, Name, Arity}, {Class,Value},
@@ -1626,116 +1092,50 @@ erts_trace_return(Process* p, BeamInstr* fi, Eterm retval, Eterm *tracer_pid)
*/
void
erts_trace_exception(Process* p, BeamInstr mfa[3], Eterm class, Eterm value,
- Eterm *tracer_pid)
+ ErtsTracer *tracer)
{
Eterm* hp;
- Eterm mfa_tuple;
- Eterm cv;
- Eterm mess;
+ Eterm mfa_tuple, cv;
Uint meta_flags, *tracee_flags;
- int ts_type;
-#ifdef ERTS_SMP
- Eterm tracee;
-#endif
-
- ASSERT(tracer_pid);
- if (*tracer_pid == am_true) {
+
+ ASSERT(tracer);
+ if (ERTS_TRACER_COMPARE(*tracer, erts_tracer_true)) {
/* Breakpoint trace enabled without specifying tracer =>
* use process tracer and flags
*/
- tracer_pid = &ERTS_TRACER_PROC(p);
+ tracer = &ERTS_TRACER(p);
}
- if (is_nil(*tracer_pid)) {
+ if (ERTS_TRACER_IS_NIL(*tracer)) {
/* Trace disabled */
return;
}
- ASSERT(is_internal_pid(*tracer_pid) || is_internal_port(*tracer_pid));
- if (*tracer_pid == p->common.id) {
- /* Do not generate trace messages to oneself */
- return;
- }
- if (tracer_pid == &ERTS_TRACER_PROC(p)) {
+ ASSERT(IS_TRACER_VALID(*tracer));
+ if (tracer == &ERTS_TRACER(p)) {
/* Tracer specified in process structure =>
* non-breakpoint trace =>
* use process flags
*/
tracee_flags = &ERTS_TRACE_FLAGS(p);
-#ifdef ERTS_SMP
- tracee = p->common.id;
-#endif
- if (! (*tracee_flags & F_TRACE_CALLS)) {
- return;
- }
+ if (! (*tracee_flags & F_TRACE_CALLS)) {
+ return;
+ }
} else {
/* Tracer not specified in process structure =>
* tracer specified in breakpoint =>
* meta trace =>
* use fixed flag set instead of process flags
- */
+ */
meta_flags = F_TRACE_CALLS | F_NOW_TS;
tracee_flags = &meta_flags;
-#ifdef ERTS_SMP
- tracee = NIL;
-#endif
}
-
- ts_type = ERTS_TFLGS2TSTYPE(*tracee_flags);
-
- if (is_internal_port(*tracer_pid)) {
-#define LOCAL_HEAP_SIZE (4+3+6+ERTS_TRACE_PATCH_TS_MAX_SIZE)
- DeclareTmpHeapNoproc(local_heap,LOCAL_HEAP_SIZE);
- UseTmpHeapNoproc(LOCAL_HEAP_SIZE);
-
- hp = local_heap;
- mfa_tuple = TUPLE3(hp, (Eterm) mfa[0], (Eterm) mfa[1], make_small((Eterm)mfa[2]));
- hp += 4;
- cv = TUPLE2(hp, class, value);
- hp += 3;
- mess = TUPLE5(hp, am_trace, p->common.id, am_exception_from, mfa_tuple, cv);
- hp += 6;
- ASSERT((hp - local_heap) <= LOCAL_HEAP_SIZE);
- erts_smp_mtx_lock(&smq_mtx);
- PATCH_TS(ts_type, mess, hp, NULL, NULL);
- send_to_port(p, mess, tracer_pid, tracee_flags);
- UnUseTmpHeapNoproc(LOCAL_HEAP_SIZE);
-#undef LOCAL_HEAP_SIZE
- erts_smp_mtx_unlock(&smq_mtx);
- } else {
- ErlHeapFragment *bp;
- ErlOffHeap *off_heap;
- ERTS_TRACER_REF_TYPE tracer_ref;
- unsigned size;
- unsigned value_size;
-
- ASSERT(is_internal_pid(*tracer_pid));
-
- ERTS_GET_TRACER_REF(tracer_ref, *tracer_pid, *tracee_flags);
-
- value_size = size_object(value);
- size = 6 + 4 + 3 + value_size + patch_ts_size(ts_type);
-
- hp = ERTS_ALLOC_SYSMSG_HEAP(size, &bp, &off_heap, tracer_ref);
-
- /*
- * Build the trace tuple and put it into receive queue of the tracer process.
- */
-
- mfa_tuple = TUPLE3(hp, (Eterm) mfa[0], (Eterm) mfa[1], make_small((Eterm) mfa[2]));
- hp += 4;
- value = copy_struct(value, value_size, &hp, off_heap);
- cv = TUPLE2(hp, class, value);
- hp += 3;
- mess = TUPLE5(hp, am_trace, p->common.id,
- am_exception_from, mfa_tuple, cv);
- hp += 6;
- erts_smp_mtx_lock(&smq_mtx);
-
- PATCH_TS(ts_type, mess, hp, bp, tracer_ref);
-
- ERTS_ENQ_TRACE_MSG(tracee, tracer_ref, mess, bp);
- erts_smp_mtx_unlock(&smq_mtx);
- }
+ hp = HAlloc(p, 7);;
+ mfa_tuple = TUPLE3(hp, (Eterm) mfa[0], (Eterm) mfa[1], make_small((Eterm)mfa[2]));
+ hp += 4;
+ cv = TUPLE2(hp, class, value);
+ hp += 3;
+ send_to_tracer_nif_raw(p, NULL, *tracer, *tracee_flags, p->common.id,
+ NULL, TRACE_FUN_T_CALL, am_exception_from, mfa_tuple, cv, am_true);
}
/*
@@ -1754,7 +1154,7 @@ erts_trace_exception(Process* p, BeamInstr mfa[3], Eterm class, Eterm value,
*/
Uint32
erts_call_trace(Process* p, BeamInstr mfa[3], Binary *match_spec,
- Eterm* args, int local, Eterm *tracer_pid)
+ Eterm* args, int local, ErtsTracer *tracer)
{
Eterm* hp;
Eterm mfa_tuple;
@@ -1762,55 +1162,65 @@ erts_call_trace(Process* p, BeamInstr mfa[3], Binary *match_spec,
int i;
Uint32 return_flags;
Eterm pam_result = am_true;
- Eterm mess;
Uint meta_flags, *tracee_flags;
- int ts_type;
-#ifdef ERTS_SMP
- Eterm tracee;
-#endif
+ ErtsTracerNif *tnif = NULL;
Eterm transformed_args[MAX_ARG];
- DeclareTypedTmpHeap(ErlSubBin,sub_bin_heap,p);
+ ErtsTracer pre_ms_tracer = erts_tracer_nil;
- ASSERT(tracer_pid);
- if (*tracer_pid == am_true) {
- /* Breakpoint trace enabled without specifying tracer =>
+ ASSERT(tracer);
+ if (ERTS_TRACER_COMPARE(*tracer, erts_tracer_true)) {
+ /* Breakpoint trace enabled without specifying tracer =>
* use process tracer and flags
*/
- tracer_pid = &ERTS_TRACER_PROC(p);
- }
- if (is_nil(*tracer_pid)) {
- /* Trace disabled */
- return 0;
+ tracer = &ERTS_TRACER(p);
}
- ASSERT(is_internal_pid(*tracer_pid) || is_internal_port(*tracer_pid));
- if (*tracer_pid == p->common.id) {
- /* Do not generate trace messages to oneself */
+ if (ERTS_TRACER_IS_NIL(*tracer)) {
+ /* Trace disabled */
return 0;
}
- if (tracer_pid == &ERTS_TRACER_PROC(p)) {
+ ASSERT(IS_TRACER_VALID(*tracer));
+ if (tracer == &ERTS_TRACER(p)) {
/* Tracer specified in process structure =>
* non-breakpoint trace =>
* use process flags
*/
tracee_flags = &ERTS_TRACE_FLAGS(p);
-#ifdef ERTS_SMP
- tracee = p->common.id;
-#endif
+ /* Is is not ideal at all to call this check twice,
+ it should be optimized so that only one call is made. */
+ if (!is_tracer_enabled(p, ERTS_PROC_LOCK_MAIN, &p->common, &tnif,
+ TRACE_FUN_ENABLED, am_trace_status)
+ || !is_tracer_enabled(p, ERTS_PROC_LOCK_MAIN, &p->common, &tnif,
+ TRACE_FUN_E_CALL, am_call)) {
+ return 0;
+ }
} else {
/* Tracer not specified in process structure =>
* tracer specified in breakpoint =>
* meta trace =>
* use fixed flag set instead of process flags
- */
- if (ERTS_TRACE_FLAGS(p) & F_SENSITIVE) {
- /* No trace messages for sensitive processes. */
- return 0;
- }
+ */
+ if (ERTS_TRACE_FLAGS(p) & F_SENSITIVE) {
+ /* No trace messages for sensitive processes. */
+ return 0;
+ }
meta_flags = F_TRACE_CALLS | F_NOW_TS;
tracee_flags = &meta_flags;
-#ifdef ERTS_SMP
- tracee = NIL;
-#endif
+ switch (call_enabled_tracer(*tracer,
+ &tnif, TRACE_FUN_ENABLED,
+ am_trace_status, p->common.id)) {
+ default:
+ case am_remove: *tracer = erts_tracer_nil;
+ case am_discard: return 0;
+ case am_trace:
+ switch (call_enabled_tracer(*tracer,
+ &tnif, TRACE_FUN_T_CALL,
+ am_call, p->common.id)) {
+ default:
+ case am_discard: return 0;
+ case am_trace: break;
+ }
+ break;
+ }
}
/*
@@ -1821,18 +1231,13 @@ erts_call_trace(Process* p, BeamInstr mfa[3], Binary *match_spec,
* temporarily convert any match contexts to sub binaries.
*/
arity = (Eterm) mfa[2];
- UseTmpHeap(ERL_SUB_BIN_SIZE,p);
-#ifdef DEBUG
- sub_bin_heap->thing_word = 0;
-#endif
for (i = 0; i < arity; i++) {
Eterm arg = args[i];
if (is_boxed(arg) && header_is_bin_matchstate(*boxed_val(arg))) {
ErlBinMatchState* ms = (ErlBinMatchState *) boxed_val(arg);
ErlBinMatchBuffer* mb = &ms->mb;
Uint bit_size;
-
- ASSERT(sub_bin_heap->thing_word == 0); /* At most one of match context */
+ ErlSubBin *sub_bin_heap = (ErlSubBin *)HAlloc(p, ERL_SUB_BIN_SIZE);
bit_size = mb->size - mb->offset;
sub_bin_heap->thing_word = HEADER_SUB_BIN;
@@ -1849,275 +1254,94 @@ erts_call_trace(Process* p, BeamInstr mfa[3], Binary *match_spec,
}
args = transformed_args;
- ts_type = ERTS_TFLGS2TSTYPE(*tracee_flags);
-
- if (is_internal_port(*tracer_pid)) {
- Eterm local_heap[64+ERTS_TRACE_PATCH_TS_MAX_SIZE+MAX_ARG];
- hp = local_heap;
-
- if (!erts_is_valid_tracer_port(*tracer_pid)) {
-#ifdef ERTS_SMP
- ASSERT(is_nil(tracee) || tracer_pid == &ERTS_TRACER_PROC(p));
- if (is_not_nil(tracee))
- erts_smp_proc_lock(p, ERTS_PROC_LOCKS_ALL_MINOR);
-#endif
- *tracee_flags &= ~TRACEE_FLAGS;
- *tracer_pid = NIL;
-#ifdef ERTS_SMP
- if (is_not_nil(tracee))
- erts_smp_proc_unlock(p, ERTS_PROC_LOCKS_ALL_MINOR);
-#endif
- UnUseTmpHeap(ERL_SUB_BIN_SIZE,p);
- return 0;
- }
-
- /*
- * If there is a PAM program, run it. Return if it fails.
- *
- * Some precedence rules:
- *
- * - No proc flags, e.g 'silent' or 'return_to'
- * has any effect on meta trace.
- * - The 'silent' process trace flag silences all call
- * related messages, e.g 'call', 'return_to' and 'return_from'.
- * - The {message,_} PAM function does not affect {return_trace}.
- * - The {message,false} PAM function shall give the same
- * 'call' trace message as no PAM match.
- * - The {message,true} PAM function shall give the same
- * 'call' trace message as a nonexistent PAM program.
- */
-
- /* BEGIN this code should be the same for port and pid trace */
- return_flags = 0;
- if (match_spec) {
- pam_result = erts_match_set_run(p, match_spec, args, arity,
- ERTS_PAM_TMP_RESULT, &return_flags);
- if (is_non_value(pam_result)) {
- erts_match_set_release_result(p);
- UnUseTmpHeap(ERL_SUB_BIN_SIZE,p);
- return 0;
- }
- }
- if (tracee_flags == &meta_flags) {
- /* Meta trace */
- if (pam_result == am_false) {
- erts_match_set_release_result(p);
- UnUseTmpHeap(ERL_SUB_BIN_SIZE,p);
- return return_flags;
- }
- } else {
- /* Non-meta trace */
- if (*tracee_flags & F_TRACE_SILENT) {
- erts_match_set_release_result(p);
- UnUseTmpHeap(ERL_SUB_BIN_SIZE,p);
- return 0;
- }
- if (pam_result == am_false) {
- erts_match_set_release_result(p);
- UnUseTmpHeap(ERL_SUB_BIN_SIZE,p);
- return return_flags;
- }
- if (local && (*tracee_flags & F_TRACE_RETURN_TO)) {
- return_flags |= MATCH_SET_RETURN_TO_TRACE;
- }
- }
- /* END this code should be the same for port and pid trace */
-
- /*
- * Build the the {M,F,A} tuple in the local heap.
- * (A is arguments or arity.)
- */
-
- if (*tracee_flags & F_TRACE_ARITY_ONLY) {
- mfa_tuple = make_small(arity);
- } else {
- mfa_tuple = NIL;
- for (i = arity-1; i >= 0; i--) {
- mfa_tuple = CONS(hp, args[i], mfa_tuple);
- hp += 2;
- }
- }
- mfa_tuple = TUPLE3(hp, (Eterm) mfa[0], (Eterm) mfa[1], mfa_tuple);
- hp += 4;
-
- /*
- * Build the trace tuple and send it to the port.
- */
-
- mess = TUPLE4(hp, am_trace, p->common.id, am_call, mfa_tuple);
- hp += 5;
- if (pam_result != am_true) {
- hp[-5] = make_arityval(5);
- *hp++ = pam_result;
- }
- erts_smp_mtx_lock(&smq_mtx);
- PATCH_TS(ts_type, mess, hp, NULL, NULL);
- send_to_port(p, mess, tracer_pid, tracee_flags);
- erts_smp_mtx_unlock(&smq_mtx);
- erts_match_set_release_result(p);
- UnUseTmpHeap(ERL_SUB_BIN_SIZE,p);
- return *tracer_pid == NIL ? 0 : return_flags;
+ /*
+ * If there is a PAM program, run it. Return if it fails.
+ *
+ * Some precedence rules:
+ *
+ * - No proc flags, e.g 'silent' or 'return_to'
+ * has any effect on meta trace.
+ * - The 'silent' process trace flag silences all call
+ * related messages, e.g 'call', 'return_to' and 'return_from'.
+ * - The {message,_} PAM function does not affect {return_trace}.
+ * - The {message,false} PAM function shall give the same
+ * 'call' trace message as no PAM match.
+ * - The {message,true} PAM function shall give the same
+ * 'call' trace message as a nonexistent PAM program.
+ */
+ return_flags = 0;
+ if (match_spec) {
+ /* we have to make a copy of the tracer here as the match spec
+ may remove it, and we still want to generate a trace message */
+ erts_tracer_update(&pre_ms_tracer, *tracer);
+ tracer = &pre_ms_tracer;
+ pam_result = erts_match_set_run_trace(p, p,
+ match_spec, args, arity,
+ ERTS_PAM_TMP_RESULT, &return_flags);
+ }
+
+ if (tracee_flags == &meta_flags) {
+ /* Meta trace */
+ if (pam_result == am_false) {
+ UnUseTmpHeap(ERL_SUB_BIN_SIZE,p);
+ ERTS_TRACER_CLEAR(&pre_ms_tracer);
+ return return_flags;
+ }
} else {
- ErlHeapFragment *bp;
- ErlOffHeap *off_heap;
- Process *tracer;
- ERTS_TRACER_REF_TYPE tracer_ref;
-#ifdef ERTS_SMP
- Eterm tpid;
-#endif
- unsigned size;
- unsigned sizes[MAX_ARG];
- unsigned pam_result_size = 0;
- int invalid_tracer;
-
- ASSERT(is_internal_pid(*tracer_pid));
-
- tracer = erts_pid2proc(p, ERTS_PROC_LOCK_MAIN,
- *tracer_pid, ERTS_PROC_LOCK_STATUS);
- if (!tracer)
- invalid_tracer = 1;
- else {
- invalid_tracer = !(ERTS_TRACE_FLAGS(tracer) & F_TRACER);
- erts_smp_proc_unlock(tracer, ERTS_PROC_LOCK_STATUS);
- }
-
- if (invalid_tracer) {
-#ifdef ERTS_SMP
- ASSERT(is_nil(tracee)
- || tracer_pid == &ERTS_TRACER_PROC(p));
- if (is_not_nil(tracee))
- erts_smp_proc_lock(p, ERTS_PROC_LOCKS_ALL_MINOR);
-#endif
- *tracee_flags &= ~TRACEE_FLAGS;
- *tracer_pid = NIL;
-#ifdef ERTS_SMP
- if (is_not_nil(tracee))
- erts_smp_proc_unlock(p, ERTS_PROC_LOCKS_ALL_MINOR);
-#endif
- UnUseTmpHeap(ERL_SUB_BIN_SIZE,p);
- return 0;
- }
-
-#ifdef ERTS_SMP
- tpid = *tracer_pid; /* Need to save tracer pid,
- since *tracer_pid might
- be reset by erts_match_set_run() */
- tracer_ref = tpid;
-#else
- tracer_ref = tracer;
-#endif
-
- /*
- * If there is a PAM program, run it. Return if it fails.
- *
- * See the rules above in the port trace code.
- */
-
- /* BEGIN this code should be the same for port and pid trace */
- return_flags = 0;
- if (match_spec) {
- pam_result = erts_match_set_run(p, match_spec, args, arity,
- ERTS_PAM_TMP_RESULT, &return_flags);
- if (is_non_value(pam_result)) {
- erts_match_set_release_result(p);
- UnUseTmpHeap(ERL_SUB_BIN_SIZE,p);
- return 0;
- }
- }
- if (tracee_flags == &meta_flags) {
- /* Meta trace */
- if (pam_result == am_false) {
- erts_match_set_release_result(p);
- UnUseTmpHeap(ERL_SUB_BIN_SIZE,p);
- return return_flags;
- }
- } else {
- /* Non-meta trace */
- if (*tracee_flags & F_TRACE_SILENT) {
- erts_match_set_release_result(p);
- UnUseTmpHeap(ERL_SUB_BIN_SIZE,p);
- return 0;
- }
- if (pam_result == am_false) {
- erts_match_set_release_result(p);
- UnUseTmpHeap(ERL_SUB_BIN_SIZE,p);
- return return_flags;
- }
- if (local && (*tracee_flags & F_TRACE_RETURN_TO)) {
- return_flags |= MATCH_SET_RETURN_TO_TRACE;
- }
- }
- /* END this code should be the same for port and pid trace */
-
- /*
- * Calculate number of words needed on heap.
- */
-
- size = 4 + 5; /* Trace tuple + MFA tuple. */
- if (! (*tracee_flags & F_TRACE_ARITY_ONLY)) {
- size += 2*arity;
- for (i = arity-1; i >= 0; i--) {
- sizes[i] = size_object(args[i]);
- size += sizes[i];
- }
- }
- size += patch_ts_size(ts_type);
- if (pam_result != am_true) {
- pam_result_size = size_object(pam_result);
- size += 1 + pam_result_size;
- /* One element in trace tuple + term size. */
- }
-
- hp = ERTS_ALLOC_SYSMSG_HEAP(size, &bp, &off_heap, tracer_ref);
+ /* Non-meta trace */
+ if (*tracee_flags & F_TRACE_SILENT) {
+ erts_match_set_release_result_trace(p, pam_result);
+ UnUseTmpHeap(ERL_SUB_BIN_SIZE,p);
+ ERTS_TRACER_CLEAR(&pre_ms_tracer);
+ return 0;
+ }
+ if (pam_result == am_false) {
+ UnUseTmpHeap(ERL_SUB_BIN_SIZE,p);
+ ERTS_TRACER_CLEAR(&pre_ms_tracer);
+ return return_flags;
+ }
+ if (local && (*tracee_flags & F_TRACE_RETURN_TO)) {
+ return_flags |= MATCH_SET_RETURN_TO_TRACE;
+ }
+ }
+
+ ASSERT(!ERTS_TRACER_IS_NIL(*tracer));
- /*
- * Build the the {M,F,A} tuple in the message buffer.
- * (A is arguments or arity.)
- */
-
- if (*tracee_flags & F_TRACE_ARITY_ONLY) {
- mfa_tuple = make_small(arity);
- } else {
- mfa_tuple = NIL;
- for (i = arity-1; i >= 0; i--) {
- Eterm term = copy_struct(args[i], sizes[i], &hp, off_heap);
- mfa_tuple = CONS(hp, term, mfa_tuple);
- hp += 2;
- }
- }
- mfa_tuple = TUPLE3(hp, (Eterm) mfa[0], (Eterm) mfa[1], mfa_tuple);
- hp += 4;
-
- /*
- * Copy the PAM result (if any) onto the heap.
- */
-
- if (pam_result != am_true) {
- pam_result = copy_struct(pam_result, pam_result_size, &hp, off_heap);
- }
+ /*
+ * Build the the {M,F,A} tuple in the local heap.
+ * (A is arguments or arity.)
+ */
- erts_match_set_release_result(p);
- /*
- * Build the trace tuple and enqueue it.
- */
-
- mess = TUPLE4(hp, am_trace, p->common.id, am_call, mfa_tuple);
- hp += 5;
- if (pam_result != am_true) {
- hp[-5] = make_arityval(5);
- *hp++ = pam_result;
- }
+ if (*tracee_flags & F_TRACE_ARITY_ONLY) {
+ hp = HAlloc(p, 4);
+ mfa_tuple = make_small(arity);
+ } else {
+ hp = HAlloc(p, 4 + arity * 2);
+ mfa_tuple = NIL;
+ for (i = arity-1; i >= 0; i--) {
+ mfa_tuple = CONS(hp, args[i], mfa_tuple);
+ hp += 2;
+ }
+ }
+ mfa_tuple = TUPLE3(hp, (Eterm) mfa[0], (Eterm) mfa[1], mfa_tuple);
+ hp += 4;
- erts_smp_mtx_lock(&smq_mtx);
+ /*
+ * Build the trace tuple and send it to the port.
+ */
+ send_to_tracer_nif_raw(p, NULL, *tracer, *tracee_flags, p->common.id,
+ tnif, TRACE_FUN_T_CALL, am_call, mfa_tuple,
+ THE_NON_VALUE, pam_result);
- PATCH_TS(ts_type, mess, hp, bp, tracer_ref);
- ERTS_ENQ_TRACE_MSG(tracee, tracer_ref, mess, bp);
- erts_smp_mtx_unlock(&smq_mtx);
- UnUseTmpHeap(ERL_SUB_BIN_SIZE,p);
- return return_flags;
+ if (match_spec) {
+ erts_match_set_release_result_trace(p, pam_result);
+ if (tracer == &pre_ms_tracer)
+ ERTS_TRACER_CLEAR(&pre_ms_tracer);
}
+
+ return return_flags;
}
/* Sends trace message:
@@ -2129,69 +1353,14 @@ erts_call_trace(Process* p, BeamInstr mfa[3], Binary *match_spec,
* 't_p' is the traced process.
*/
void
-trace_proc(Process *c_p, Process *t_p, Eterm what, Eterm data)
+trace_proc(Process *c_p, ErtsProcLocks c_p_locks,
+ Process *t_p, Eterm what, Eterm data)
{
- Eterm mess;
- Eterm* hp;
- int need;
-
- ERTS_SMP_LC_ASSERT((erts_proc_lc_my_proc_locks(t_p) != 0)
- || erts_thr_progress_is_blocking());
- if (is_internal_port(ERTS_TRACER_PROC(t_p))) {
-#define LOCAL_HEAP_SIZE (5+5)
- DeclareTmpHeapNoproc(local_heap,LOCAL_HEAP_SIZE);
- UseTmpHeapNoproc(LOCAL_HEAP_SIZE);
-
-
- hp = local_heap;
- mess = TUPLE4(hp, am_trace, t_p->common.id, what, data);
- hp += 5;
- erts_smp_mtx_lock(&smq_mtx);
- PATCH_TS(TFLGS_TS_TYPE(t_p), mess, hp, NULL, NULL);
- send_to_port(
-#ifndef ERTS_SMP
- /* No fake schedule out and in again after an exit */
- what == am_exit ? NULL : c_p,
-#else
- /* Fake schedule out and in are never sent when smp enabled */
- c_p,
-#endif
- mess,
- &ERTS_TRACER_PROC(t_p),
- &ERTS_TRACE_FLAGS(t_p));
- UnUseTmpHeapNoproc(LOCAL_HEAP_SIZE);
-#undef LOCAL_HEAP_SIZE
- erts_smp_mtx_unlock(&smq_mtx);
- } else {
- Eterm tmp;
- ErlHeapFragment *bp;
- ErlOffHeap *off_heap;
- ERTS_TRACER_REF_TYPE tracer_ref;
- size_t sz_data;
-
- ASSERT(is_internal_pid(ERTS_TRACER_PROC(t_p)));
-
- ERTS_GET_TRACER_REF(tracer_ref,
- ERTS_TRACER_PROC(t_p),
- ERTS_TRACE_FLAGS(t_p));
-
- sz_data = size_object(data);
-
- need = sz_data + 5 + PATCH_TS_SIZE(t_p);
-
- hp = ERTS_ALLOC_SYSMSG_HEAP(need, &bp, &off_heap, tracer_ref);
-
- tmp = copy_struct(data, sz_data, &hp, off_heap);
- mess = TUPLE4(hp, am_trace, t_p->common.id, what, tmp);
- hp += 5;
-
- erts_smp_mtx_lock(&smq_mtx);
-
- PATCH_TS(TFLGS_TS_TYPE(t_p), mess, hp, bp, tracer_ref);
-
- ERTS_ENQ_TRACE_MSG(t_p->common.id, tracer_ref, mess, bp);
- erts_smp_mtx_unlock(&smq_mtx);
- }
+ ErtsTracerNif *tnif = NULL;
+ if (is_tracer_enabled(NULL, 0, &t_p->common, &tnif,
+ TRACE_FUN_E_PROCS, what))
+ send_to_tracer_nif(NULL, &t_p->common, t_p->common.id, tnif, TRACE_FUN_T_PROCS,
+ what, data, THE_NON_VALUE, am_true);
}
@@ -2203,77 +1372,37 @@ trace_proc(Process *c_p, Process *t_p, Eterm what, Eterm data)
* and 'args' may be a deep term.
*/
void
-trace_proc_spawn(Process *p, Eterm pid,
+trace_proc_spawn(Process *p, Eterm what, Eterm pid,
Eterm mod, Eterm func, Eterm args)
{
- Eterm mfa;
- Eterm mess;
- Eterm* hp;
-
- if (is_internal_port(ERTS_TRACER_PROC(p))) {
-#define LOCAL_HEAP_SIZE (4+6+5)
- DeclareTmpHeapNoproc(local_heap,LOCAL_HEAP_SIZE);
- UseTmpHeapNoproc(LOCAL_HEAP_SIZE);
+ ErtsTracerNif *tnif = NULL;
+ if (is_tracer_enabled(NULL, 0,
+ &p->common, &tnif, TRACE_FUN_E_PROCS, what)) {
+ Eterm mfa;
+ Eterm* hp;
- hp = local_heap;
- mfa = TUPLE3(hp, mod, func, args);
- hp += 4;
- mess = TUPLE5(hp, am_trace, p->common.id, am_spawn, pid, mfa);
- hp += 6;
- erts_smp_mtx_lock(&smq_mtx);
- PATCH_TS(TFLGS_TS_TYPE(p), mess, hp, NULL, NULL);
- send_to_port(p, mess, &ERTS_TRACER_PROC(p), &ERTS_TRACE_FLAGS(p));
- UnUseTmpHeapNoproc(LOCAL_HEAP_SIZE);
-#undef LOCAL_HEAP_SIZE
- erts_smp_mtx_unlock(&smq_mtx);
- } else {
- Eterm tmp;
- ErlHeapFragment *bp;
- ErlOffHeap *off_heap;
- ERTS_TRACER_REF_TYPE tracer_ref;
- size_t sz_args, sz_pid;
- Uint need;
-
- ASSERT(is_internal_pid(ERTS_TRACER_PROC(p)));
-
- ERTS_GET_TRACER_REF(tracer_ref,
- ERTS_TRACER_PROC(p),
- ERTS_TRACE_FLAGS(p));
-
- sz_args = size_object(args);
- sz_pid = size_object(pid);
- need = sz_args + 4 + 6 + PATCH_TS_SIZE(p);
-
- hp = ERTS_ALLOC_SYSMSG_HEAP(need, &bp, &off_heap, tracer_ref);
-
- tmp = copy_struct(args, sz_args, &hp, off_heap);
- mfa = TUPLE3(hp, mod, func, tmp);
- hp += 4;
- tmp = copy_struct(pid, sz_pid, &hp, off_heap);
- mess = TUPLE5(hp, am_trace, p->common.id, am_spawn, tmp, mfa);
- hp += 6;
-
- erts_smp_mtx_lock(&smq_mtx);
-
- PATCH_TS(TFLGS_TS_TYPE(p), mess, hp, bp, tracer_ref);
-
- ERTS_ENQ_TRACE_MSG(p->common.id, tracer_ref, mess, bp);
- erts_smp_mtx_unlock(&smq_mtx);
+ hp = HAlloc(p, 4);
+ mfa = TUPLE3(hp, mod, func, args);
+ hp += 4;
+ send_to_tracer_nif(NULL, &p->common, p->common.id, tnif, TRACE_FUN_T_PROCS,
+ what, pid, mfa, am_true);
}
}
void save_calls(Process *p, Export *e)
{
- struct saved_calls *scb = ERTS_PROC_GET_SAVED_CALLS_BUF(p);
- if (scb) {
- Export **ct = &scb->ct[0];
- int len = scb->len;
-
- ct[scb->cur] = e;
- if (++scb->cur >= len)
- scb->cur = 0;
- if (scb->n < len)
- scb->n++;
+ if ((ERTS_TRACE_FLAGS(p) & F_SENSITIVE) == 0) {
+ struct saved_calls *scb = ERTS_PROC_GET_SAVED_CALLS_BUF(p);
+ if (scb) {
+ Export **ct = &scb->ct[0];
+ int len = scb->len;
+
+ ct[scb->cur] = e;
+ if (++scb->cur >= len)
+ scb->cur = 0;
+ if (scb->n < len)
+ scb->n++;
+ }
}
}
@@ -2290,68 +1419,29 @@ void save_calls(Process *p, Export *e)
* are all small (atomic) integers.
*/
void
-trace_gc(Process *p, Eterm what)
+trace_gc(Process *p, Eterm what, Uint size, Eterm msg)
{
- ErlHeapFragment *bp = NULL;
- ErlOffHeap *off_heap;
- ERTS_TRACER_REF_TYPE tracer_ref = ERTS_NULL_TRACER_REF; /* Initialized
- to eliminate
- compiler
- warning */
+ ErtsTracerNif *tnif = NULL;
Eterm* hp;
- Eterm msg = NIL;
- Uint size;
-
-#define LOCAL_HEAP_SIZE \
- (ERTS_PROCESS_GC_INFO_MAX_SIZE) + \
- 5/*4-tuple */ + ERTS_TRACE_PATCH_TS_MAX_SIZE
- DeclareTmpHeap(local_heap,LOCAL_HEAP_SIZE,p);
-
- UseTmpHeap(LOCAL_HEAP_SIZE,p);
-
- if (is_internal_port(ERTS_TRACER_PROC(p))) {
- hp = local_heap;
-#ifdef DEBUG
- size = 0;
- (void) erts_process_gc_info(p, &size, NULL);
-
- size += 5/*4-tuple*/ + PATCH_TS_SIZE(p);
-#endif
- } else {
- ASSERT(is_internal_pid(ERTS_TRACER_PROC(p)));
-
- ERTS_GET_TRACER_REF(tracer_ref,
- ERTS_TRACER_PROC(p),
- ERTS_TRACE_FLAGS(p));
-
- size = 0;
- (void) erts_process_gc_info(p, &size, NULL);
-
- size += 5/*4-tuple*/ + PATCH_TS_SIZE(p);
-
- hp = ERTS_ALLOC_SYSMSG_HEAP(size, &bp, &off_heap, tracer_ref);
- }
+ Uint sz = 0;
+ Eterm tup;
- ASSERT(size <= LOCAL_HEAP_SIZE);
+ if (is_tracer_enabled(p, ERTS_PROC_LOCK_MAIN, &p->common, &tnif,
+ TRACE_FUN_E_GC, what)) {
- msg = erts_process_gc_info(p, NULL, &hp);
+ if (is_non_value(msg)) {
- msg = TUPLE4(hp, am_trace, p->common.id, what, msg);
- hp += 5;
+ (void) erts_process_gc_info(p, &sz, NULL, 0, 0);
+ hp = HAlloc(p, sz + 3 + 2);
- erts_smp_mtx_lock(&smq_mtx);
+ msg = erts_process_gc_info(p, NULL, &hp, 0, 0);
+ tup = TUPLE2(hp, am_wordsize, make_small(size)); hp += 3;
+ msg = CONS(hp, tup, msg); hp += 2;
+ }
- if (is_internal_port(ERTS_TRACER_PROC(p))) {
- PATCH_TS(TFLGS_TS_TYPE(p), msg, hp, NULL, NULL);
- send_to_port(p, msg, &ERTS_TRACER_PROC(p), &ERTS_TRACE_FLAGS(p));
+ send_to_tracer_nif(p, &p->common, p->common.id, tnif, TRACE_FUN_T_GC,
+ what, msg, THE_NON_VALUE, am_true);
}
- else {
- PATCH_TS(TFLGS_TS_TYPE(p), msg, hp, bp, tracer_ref);
- ERTS_ENQ_TRACE_MSG(p->common.id, tracer_ref, msg, bp);
- }
- erts_smp_mtx_unlock(&smq_mtx);
- UnUseTmpHeap(LOCAL_HEAP_SIZE,p);
-#undef LOCAL_HEAP_SIZE
}
void
@@ -2413,7 +1503,7 @@ monitor_long_schedule_proc(Process *p, BeamInstr *in_fp, BeamInstr *out_fp, Uint
{
ErtsMessage *mp = erts_alloc_message(0, NULL);
mp->data.heap_frag = bp;
- erts_queue_message(monitor_p, NULL, mp, msg, NIL);
+ erts_queue_message(monitor_p, 0, mp, msg, am_system);
}
#endif
}
@@ -2478,7 +1568,7 @@ monitor_long_schedule_port(Port *pp, ErtsPortTaskType type, Uint time)
{
ErtsMessage *mp = erts_alloc_message(0, NULL);
mp->data.heap_frag = bp;
- erts_queue_message(monitor_p, NULL, mp, msg, NIL);
+ erts_queue_message(monitor_p, 0, mp, msg, am_system);
}
#endif
}
@@ -2553,7 +1643,7 @@ monitor_long_gc(Process *p, Uint time) {
{
ErtsMessage *mp = erts_alloc_message(0, NULL);
mp->data.heap_frag = bp;
- erts_queue_message(monitor_p, NULL, mp, msg, NIL);
+ erts_queue_message(monitor_p, 0, mp, msg, am_system);
}
#endif
}
@@ -2628,7 +1718,7 @@ monitor_large_heap(Process *p) {
{
ErtsMessage *mp = erts_alloc_message(0, NULL);
mp->data.heap_frag = bp;
- erts_queue_message(monitor_p, NULL, mp, msg, NIL);
+ erts_queue_message(monitor_p, 0, mp, msg, am_system);
}
#endif
}
@@ -2660,7 +1750,7 @@ monitor_generic(Process *p, Eterm type, Eterm spec) {
{
ErtsMessage *mp = erts_alloc_message(0, NULL);
mp->data.heap_frag = bp;
- erts_queue_message(monitor_p, NULL, mp, msg, NIL);
+ erts_queue_message(monitor_p, 0, mp, msg, am_system);
}
#endif
@@ -2722,106 +1812,15 @@ profile_scheduler(Eterm scheduler_id, Eterm state) {
}
-void
-profile_scheduler_q(Eterm scheduler_id, Eterm state, Eterm no_schedulers, Uint Ms, Uint s, Uint us) {
- Eterm *hp, msg, timestamp;
-
-#ifndef ERTS_SMP
-#define LOCAL_HEAP_SIZE (4 + 7)
- DeclareTmpHeapNoproc(local_heap,LOCAL_HEAP_SIZE);
- UseTmpHeapNoproc(LOCAL_HEAP_SIZE);
-
- hp = local_heap;
-#else
- ErlHeapFragment *bp;
- Uint hsz;
-
- hsz = 4 + 7;
-
- bp = new_message_buffer(hsz);
- hp = bp->mem;
-#endif
-
- erts_smp_mtx_lock(&smq_mtx);
-
- timestamp = TUPLE3(hp, make_small(Ms), make_small(s), make_small(us)); hp += 4;
- msg = TUPLE6(hp, am_profile, am_scheduler, scheduler_id, state, no_schedulers, timestamp); hp += 7;
-#ifndef ERTS_SMP
- profile_send(NIL, msg);
- UnUseTmpHeapNoproc(LOCAL_HEAP_SIZE);
-#undef LOCAL_HEAP_SIZE
-#else
- enqueue_sys_msg_unlocked(SYS_MSG_TYPE_SYSPROF, NIL, NIL, msg, bp);
-#endif
- erts_smp_mtx_unlock(&smq_mtx);
-
-}
-
-
-/* Send {trace_ts, Pid, What, {Mod, Func, Arity}, Timestamp}
- * or {trace, Pid, What, {Mod, Func, Arity}}
- *
- * where 'What' is supposed to be 'in' or 'out'.
- *
- * Virtual scheduling do not fake scheduling for ports.
- */
-
-
-void trace_virtual_sched(Process *p, Eterm what)
-{
- trace_sched_aux(p, what, 1);
-}
-
/* Port profiling */
void
trace_port_open(Port *p, Eterm calling_pid, Eterm drv_name) {
- Eterm mess;
- Eterm* hp;
-
- if (is_internal_port(ERTS_TRACER_PROC(p))) {
-#define LOCAL_HEAP_SIZE (6+ERTS_TRACE_PATCH_TS_MAX_SIZE)
- DeclareTmpHeapNoproc(local_heap,LOCAL_HEAP_SIZE);
- UseTmpHeapNoproc(LOCAL_HEAP_SIZE);
-
- hp = local_heap;
-
- mess = TUPLE5(hp, am_trace, calling_pid, am_open, p->common.id, drv_name);
- hp += 6;
- erts_smp_mtx_lock(&smq_mtx);
- PATCH_TS(TFLGS_TS_TYPE(p), mess, hp, NULL, NULL);
- /* No fake schedule */
- send_to_port(NULL, mess, &ERTS_TRACER_PROC(p), &ERTS_TRACE_FLAGS(p));
- UnUseTmpHeapNoproc(LOCAL_HEAP_SIZE);
-#undef LOCAL_HEAP_SIZE
- erts_smp_mtx_unlock(&smq_mtx);
- } else {
- ErlHeapFragment *bp;
- ErlOffHeap *off_heap;
- size_t sz_data;
- ERTS_TRACER_REF_TYPE tracer_ref;
-
- ASSERT(is_internal_pid(ERTS_TRACER_PROC(p)));
-
- sz_data = 6 + PATCH_TS_SIZE(p);
-
- ERTS_GET_TRACER_REF(tracer_ref,
- ERTS_TRACER_PROC(p),
- ERTS_TRACE_FLAGS(p));
-
- hp = ERTS_ALLOC_SYSMSG_HEAP(sz_data, &bp, &off_heap, tracer_ref);
-
- mess = TUPLE5(hp, am_trace, calling_pid, am_open, p->common.id, drv_name);
- hp += 6;
-
- erts_smp_mtx_lock(&smq_mtx);
-
- PATCH_TS(TFLGS_TS_TYPE(p), mess, hp, bp, tracer_ref);
-
- ERTS_ENQ_TRACE_MSG(p->common.id, tracer_ref, mess, bp);
- erts_smp_mtx_unlock(&smq_mtx);
- }
-
+ ErtsTracerNif *tnif = NULL;
+ ERTS_SMP_CHK_NO_PROC_LOCKS;
+ if (is_tracer_enabled(NULL, 0, &p->common, &tnif, TRACE_FUN_E_PORTS, am_open))
+ send_to_tracer_nif(NULL, &p->common, p->common.id, tnif, TRACE_FUN_T_PORTS,
+ am_open, calling_pid, drv_name, am_true);
}
/* Sends trace message:
@@ -2833,52 +1832,211 @@ trace_port_open(Port *p, Eterm calling_pid, Eterm drv_name) {
*/
void
trace_port(Port *t_p, Eterm what, Eterm data) {
- Eterm mess;
- Eterm* hp;
+ ErtsTracerNif *tnif = NULL;
ERTS_SMP_LC_ASSERT(erts_lc_is_port_locked(t_p)
|| erts_thr_progress_is_blocking());
+ ERTS_SMP_CHK_NO_PROC_LOCKS;
+ if (is_tracer_enabled(NULL, 0, &t_p->common, &tnif, TRACE_FUN_E_PORTS, what))
+ send_to_tracer_nif(NULL, &t_p->common, t_p->common.id, tnif, TRACE_FUN_T_PORTS,
+ what, data, THE_NON_VALUE, am_true);
+}
- if (is_internal_port(ERTS_TRACER_PROC(t_p))) {
-#define LOCAL_HEAP_SIZE (5+ERTS_TRACE_PATCH_TS_MAX_SIZE)
- DeclareTmpHeapNoproc(local_heap,LOCAL_HEAP_SIZE);
- UseTmpHeapNoproc(LOCAL_HEAP_SIZE);
- hp = local_heap;
- mess = TUPLE4(hp, am_trace, t_p->common.id, what, data);
- hp += 5;
- erts_smp_mtx_lock(&smq_mtx);
- PATCH_TS(TFLGS_TS_TYPE(t_p), mess, hp, NULL, NULL);
- /* No fake schedule */
- send_to_port(NULL,mess,&ERTS_TRACER_PROC(t_p),&ERTS_TRACE_FLAGS(t_p));
- UnUseTmpHeapNoproc(LOCAL_HEAP_SIZE);
-#undef LOCAL_HEAP_SIZE
- erts_smp_mtx_unlock(&smq_mtx);
+static Eterm
+trace_port_tmp_binary(char *bin, Sint sz, Binary **bptrp, Eterm **hp)
+{
+ if (sz <= ERL_ONHEAP_BIN_LIMIT) {
+ ErlHeapBin *hb = (ErlHeapBin *)*hp;
+ hb->thing_word = header_heap_bin(sz);
+ hb->size = sz;
+ sys_memcpy(hb->data, bin, sz);
+ *hp += heap_bin_size(sz);
+ return make_binary(hb);
} else {
- ErlHeapFragment *bp;
- ErlOffHeap *off_heap;
- size_t sz_data;
- ERTS_TRACER_REF_TYPE tracer_ref;
+ ProcBin* pb = (ProcBin *)*hp;
+ Binary *bptr = erts_bin_nrml_alloc(sz);
+ erts_refc_init(&bptr->refc, 1);
+ sys_memcpy(bptr->orig_bytes, bin, sz);
+ pb->thing_word = HEADER_PROC_BIN;
+ pb->size = sz;
+ pb->next = NULL;
+ pb->val = bptr;
+ pb->bytes = (byte*) bptr->orig_bytes;
+ pb->flags = 0;
+ *bptrp = bptr;
+ *hp += PROC_BIN_SIZE;
+ return make_binary(pb);
+ }
+}
- ASSERT(is_internal_pid(ERTS_TRACER_PROC(t_p)));
+/* Sends trace message:
+ * {trace, PortPid, 'receive', {pid(), {command, iolist()}}}
+ * {trace, PortPid, 'receive', {pid(), {control, pid()}}}
+ * {trace, PortPid, 'receive', {pid(), exit}}
+ *
+ */
+void
+trace_port_receive(Port *t_p, Eterm caller, Eterm what, ...)
+{
+ ErtsTracerNif *tnif = NULL;
+ ERTS_SMP_LC_ASSERT(erts_lc_is_port_locked(t_p)
+ || erts_thr_progress_is_blocking());
+ ERTS_SMP_CHK_NO_PROC_LOCKS;
+ if (is_tracer_enabled(NULL, 0, &t_p->common, &tnif, TRACE_FUN_E_RECEIVE, am_receive)) {
+ /* We can use a stack heap here, as the nif is called in the
+ context of a port */
+#define LOCAL_HEAP_SIZE (3 + 3 + heap_bin_size(ERL_ONHEAP_BIN_LIMIT) + 3)
+ DeclareTmpHeapNoproc(local_heap,LOCAL_HEAP_SIZE);
+
+ Eterm *hp, data, *orig_hp = NULL;
+ Binary *bptr = NULL;
+ va_list args;
+ UseTmpHeapNoproc(LOCAL_HEAP_SIZE);
+ hp = local_heap;
+
+ if (what == am_close) {
+ data = what;
+ } else {
+ Eterm arg;
+ va_start(args, what);
+ if (what == am_command) {
+ char *bin = va_arg(args, char *);
+ Sint sz = va_arg(args, Sint);
+ va_end(args);
+ arg = trace_port_tmp_binary(bin, sz, &bptr, &hp);
+ } else if (what == am_call || what == am_control) {
+ unsigned int command = va_arg(args, unsigned int);
+ char *bin = va_arg(args, char *);
+ Sint sz = va_arg(args, Sint);
+ Eterm cmd;
+ va_end(args);
+ arg = trace_port_tmp_binary(bin, sz, &bptr, &hp);
+#if defined(ARCH_32)
+ if (!IS_USMALL(0, command)) {
+ *hp = make_pos_bignum_header(1);
+ BIG_DIGIT(hp, 0) = (Uint)command;
+ cmd = make_big(hp);
+ hp += 2;
+ } else
+#endif
+ {
+ cmd = make_small((Sint)command);
+ }
+ arg = TUPLE2(hp, cmd, arg);
+ hp += 3;
+ } else if (what == am_commandv) {
+ ErlIOVec *evp = va_arg(args, ErlIOVec*);
+ int i;
+ va_end(args);
+ if ((6 + evp->vsize * (2+PROC_BIN_SIZE+ERL_SUB_BIN_SIZE)) > LOCAL_HEAP_SIZE) {
+ hp = erts_alloc(ERTS_ALC_T_TMP,
+ (6 + evp->vsize * (2+PROC_BIN_SIZE+ERL_SUB_BIN_SIZE)) * sizeof(Eterm));
+ orig_hp = hp;
+ }
+ arg = NIL;
+ /* Convert each element in the ErlIOVec to a sub bin that points
+ to a procbin. We don't have to increment the proc bin refc as
+ the port task keeps the reference alive. */
+ for (i = evp->vsize-1; i >= 0; i--) {
+ if (evp->iov[i].iov_len) {
+ ProcBin* pb = (ProcBin*)hp;
+ ErlSubBin *sb;
+ ASSERT(evp->binv[i]);
+ pb->thing_word = HEADER_PROC_BIN;
+ pb->val = ErlDrvBinary2Binary(evp->binv[i]);
+ pb->size = pb->val->orig_size;
+ pb->next = NULL;
+ pb->bytes = (byte*) pb->val->orig_bytes;
+ pb->flags = 0;
+ hp += PROC_BIN_SIZE;
+
+ sb = (ErlSubBin*) hp;
+ sb->thing_word = HEADER_SUB_BIN;
+ sb->size = evp->iov[i].iov_len;
+ sb->offs = (byte*)(evp->iov[i].iov_base) - pb->bytes;
+ sb->orig = make_binary(pb);
+ sb->bitoffs = 0;
+ sb->bitsize = 0;
+ sb->is_writable = 0;
+ hp += ERL_SUB_BIN_SIZE;
+
+ arg = CONS(hp, make_binary(sb), arg);
+ hp += 2;
+ }
+ }
+ what = am_command;
+ } else {
+ arg = va_arg(args, Eterm);
+ va_end(args);
+ }
+ data = TUPLE2(hp, what, arg);
+ hp += 3;
+ }
+
+ data = TUPLE2(hp, caller, data);
+ hp += 3;
+ ASSERT(hp <= (local_heap + LOCAL_HEAP_SIZE) || orig_hp);
+ send_to_tracer_nif(NULL, &t_p->common, t_p->common.id, tnif,
+ TRACE_FUN_T_RECEIVE,
+ am_receive, data, THE_NON_VALUE, am_true);
+
+ if (bptr && erts_refc_dectest(&bptr->refc, 1) == 0)
+ erts_bin_free(bptr);
+
+ if (orig_hp)
+ erts_free(ERTS_ALC_T_TMP, orig_hp);
+
+ UnUseTmpHeapNoproc(LOCAL_HEAP_SIZE);
+ }
+#undef LOCAL_HEAP_SIZE
+}
+
+void
+trace_port_send(Port *t_p, Eterm receiver, Eterm msg, int exists)
+{
+ ErtsTracerNif *tnif = NULL;
+ Eterm op = exists ? am_send : am_send_to_non_existing_process;
+ ERTS_SMP_LC_ASSERT(erts_lc_is_port_locked(t_p)
+ || erts_thr_progress_is_blocking());
+ ERTS_SMP_CHK_NO_PROC_LOCKS;
+ if (is_tracer_enabled(NULL, 0, &t_p->common, &tnif, TRACE_FUN_E_SEND, op))
+ send_to_tracer_nif(NULL, &t_p->common, t_p->common.id, tnif, TRACE_FUN_T_SEND,
+ op, msg, receiver, am_true);
+}
- sz_data = 5 + PATCH_TS_SIZE(t_p);
+void trace_port_send_binary(Port *t_p, Eterm to, Eterm what, char *bin, Sint sz)
+{
+ ErtsTracerNif *tnif = NULL;
+ ERTS_SMP_LC_ASSERT(erts_lc_is_port_locked(t_p)
+ || erts_thr_progress_is_blocking());
+ ERTS_SMP_CHK_NO_PROC_LOCKS;
+ if (is_tracer_enabled(NULL, 0, &t_p->common, &tnif, TRACE_FUN_E_SEND, am_send)) {
+ Eterm msg;
+ Binary* bptr = NULL;
+#define LOCAL_HEAP_SIZE (3 + 3 + heap_bin_size(ERL_ONHEAP_BIN_LIMIT))
+ DeclareTmpHeapNoproc(local_heap,LOCAL_HEAP_SIZE);
- ERTS_GET_TRACER_REF(tracer_ref,
- ERTS_TRACER_PROC(t_p),
- ERTS_TRACE_FLAGS(t_p));
+ Eterm *hp;
- hp = ERTS_ALLOC_SYSMSG_HEAP(sz_data, &bp, &off_heap, tracer_ref);
+ ERTS_CT_ASSERT(heap_bin_size(ERL_ONHEAP_BIN_LIMIT) >= PROC_BIN_SIZE);
+ UseTmpHeapNoproc(LOCAL_HEAP_SIZE);
+ hp = local_heap;
- mess = TUPLE4(hp, am_trace, t_p->common.id, what, data);
- hp += 5;
+ msg = trace_port_tmp_binary(bin, sz, &bptr, &hp);
- erts_smp_mtx_lock(&smq_mtx);
+ msg = TUPLE2(hp, what, msg);
+ hp += 3;
+ msg = TUPLE2(hp, t_p->common.id, msg);
+ hp += 3;
- PATCH_TS(TFLGS_TS_TYPE(t_p), mess, hp, bp, tracer_ref);
+ send_to_tracer_nif(NULL, &t_p->common, t_p->common.id, tnif, TRACE_FUN_T_SEND,
+ am_send, msg, to, am_true);
+ if (bptr && erts_refc_dectest(&bptr->refc, 1) == 0)
+ erts_bin_free(bptr);
- ERTS_ENQ_TRACE_MSG(t_p->common.id, tracer_ref, mess, bp);
- erts_smp_mtx_unlock(&smq_mtx);
+ UnUseTmpHeapNoproc(LOCAL_HEAP_SIZE);
+#undef LOCAL_HEAP_SIZE
}
}
@@ -2892,83 +2050,19 @@ trace_port(Port *t_p, Eterm what, Eterm data) {
void
trace_sched_ports(Port *p, Eterm what) {
- trace_sched_ports_where(p,what, make_small(0));
+ trace_sched_ports_where(p, what, make_small(0));
}
-void
-trace_sched_ports_where(Port *p, Eterm what, Eterm where) {
- Eterm mess;
- Eterm* hp;
- int ws = 5;
- Eterm sched_id = am_undefined;
-
- if (is_internal_port(ERTS_TRACER_PROC(p))) {
-#define LOCAL_HEAP_SIZE (6+ERTS_TRACE_PATCH_TS_MAX_SIZE)
- DeclareTmpHeapNoproc(local_heap,LOCAL_HEAP_SIZE);
- UseTmpHeapNoproc(LOCAL_HEAP_SIZE);
-
- hp = local_heap;
-
- if (IS_TRACED_FL(p, F_TRACE_SCHED_NO)) {
-#ifdef ERTS_SMP
- ErtsSchedulerData *esd = erts_get_scheduler_data();
- if (esd) sched_id = make_small(esd->no);
- else sched_id = am_undefined;
-#else
- sched_id = make_small(1);
-#endif
- mess = TUPLE5(hp, am_trace, p->common.id, what, sched_id, where);
- ws = 6;
- } else {
- mess = TUPLE4(hp, am_trace, p->common.id, what, where);
- ws = 5;
- }
- hp += ws;
-
- erts_smp_mtx_lock(&smq_mtx);
-
- PATCH_TS(TFLGS_TS_TYPE(p), mess, hp, NULL, NULL);
-
- /* No fake scheduling */
- send_to_port(NULL, mess, &ERTS_TRACER_PROC(p), &ERTS_TRACE_FLAGS(p));
- UnUseTmpHeapNoproc(LOCAL_HEAP_SIZE);
-#undef LOCAL_HEAP_SIZE
- erts_smp_mtx_unlock(&smq_mtx);
- } else {
- ErlHeapFragment *bp;
- ErlOffHeap *off_heap;
- ERTS_TRACER_REF_TYPE tracer_ref;
-
- ASSERT(is_internal_pid(ERTS_TRACER_PROC(p)));
-
- if (IS_TRACED_FL(p, F_TRACE_SCHED_NO)) ws = 6; /* Make place for scheduler id */
-
- ERTS_GET_TRACER_REF(tracer_ref,
- ERTS_TRACER_PROC(p),
- ERTS_TRACE_FLAGS(p));
-
- hp = ERTS_ALLOC_SYSMSG_HEAP(ws+PATCH_TS_SIZE(p), &bp, &off_heap, tracer_ref);
-
- if (IS_TRACED_FL(p, F_TRACE_SCHED_NO)) {
-#ifdef ERTS_SMP
- ErtsSchedulerData *esd = erts_get_scheduler_data();
- if (esd) sched_id = make_small(esd->no);
- else sched_id = am_undefined;
-#else
- sched_id = make_small(1);
-#endif
- mess = TUPLE5(hp, am_trace, p->common.id, what, sched_id, where);
- } else {
- mess = TUPLE4(hp, am_trace, p->common.id, what, where);
- }
- hp += ws;
-
- erts_smp_mtx_lock(&smq_mtx);
-
- PATCH_TS(TFLGS_TS_TYPE(p), mess, hp, bp, tracer_ref);
- ERTS_ENQ_TRACE_MSG(p->common.id, tracer_ref, mess, bp);
- erts_smp_mtx_unlock(&smq_mtx);
- }
+void
+trace_sched_ports_where(Port *t_p, Eterm what, Eterm where) {
+ ErtsTracerNif *tnif = NULL;
+ ERTS_SMP_LC_ASSERT(erts_lc_is_port_locked(t_p)
+ || erts_thr_progress_is_blocking());
+ ERTS_SMP_CHK_NO_PROC_LOCKS;
+ if (is_tracer_enabled(NULL, 0, &t_p->common, &tnif, TRACE_FUN_E_SCHED_PORT, what))
+ send_to_tracer_nif(NULL, &t_p->common, t_p->common.id,
+ tnif, TRACE_FUN_T_SCHED_PORT,
+ what, where, THE_NON_VALUE, am_true);
}
/* Port profiling */
@@ -3021,6 +2115,7 @@ profile_runnable_proc(Process *p, Eterm status){
Eterm *hp, msg;
Eterm where = am_undefined;
ErlHeapFragment *bp = NULL;
+ int use_current = 1;
#ifndef ERTS_SMP
#define LOCAL_HEAP_SIZE (4 + 6 + ERTS_TRACE_PATCH_TS_MAX_SIZE)
@@ -3033,12 +2128,19 @@ profile_runnable_proc(Process *p, Eterm status){
Uint hsz = 4 + 6 + patch_ts_size(erts_system_profile_ts_type)-1;
#endif
- if (!p->current) {
- p->current = find_function_from_pc(p->i);
+ if (ERTS_PROC_IS_EXITING(p)) {
+ use_current = 0;
+ /* could probably set 'where' to 'exiting' here,
+ * though it's not documented as such */
+ } else {
+ if (!p->current) {
+ p->current = find_function_from_pc(p->i);
+ }
+ use_current = p->current != NULL;
}
#ifdef ERTS_SMP
- if (!p->current) {
+ if (!use_current) {
hsz -= 4;
}
@@ -3046,7 +2148,7 @@ profile_runnable_proc(Process *p, Eterm status){
hp = bp->mem;
#endif
- if (p->current) {
+ if (use_current) {
where = TUPLE3(hp, p->current[0], p->current[1], make_small(p->current[2])); hp += 4;
} else {
where = make_small(0);
@@ -3076,28 +2178,6 @@ profile_runnable_proc(Process *p, Eterm status){
#ifdef ERTS_SMP
-void
-erts_check_my_tracer_proc(Process *p)
-{
- if (is_internal_pid(ERTS_TRACER_PROC(p))) {
- Process *tracer = erts_pid2proc(p,
- ERTS_PROC_LOCK_MAIN,
- ERTS_TRACER_PROC(p),
- ERTS_PROC_LOCK_STATUS);
- int invalid_tracer = (!tracer
- || !(ERTS_TRACE_FLAGS(tracer) & F_TRACER));
- if (tracer)
- erts_smp_proc_unlock(tracer, ERTS_PROC_LOCK_STATUS);
- if (invalid_tracer) {
- erts_smp_proc_lock(p, ERTS_PROC_LOCKS_ALL_MINOR);
- ERTS_TRACE_FLAGS(p) &= ~TRACEE_FLAGS;
- ERTS_TRACER_PROC(p) = NIL;
- erts_smp_proc_unlock(p, ERTS_PROC_LOCKS_ALL_MINOR);
- }
- }
-}
-
-
typedef struct ErtsSysMsgQ_ ErtsSysMsgQ;
struct ErtsSysMsgQ_ {
ErtsSysMsgQ *next;
@@ -3175,12 +2255,6 @@ static void
print_msg_type(ErtsSysMsgQ *smqp)
{
switch (smqp->type) {
- case SYS_MSG_TYPE_TRACE:
- erts_fprintf(stderr, "TRACE ");
- break;
- case SYS_MSG_TYPE_SEQTRACE:
- erts_fprintf(stderr, "SEQTRACE ");
- break;
case SYS_MSG_TYPE_SYSMON:
erts_fprintf(stderr, "SYSMON ");
break;
@@ -3191,8 +2265,8 @@ print_msg_type(ErtsSysMsgQ *smqp)
erts_fprintf(stderr, "ERRLGR ");
break;
case SYS_MSG_TYPE_PROC_MSG:
- erts_fprintf(stderr, "PROC_MSG ");
- break;
+ erts_fprintf(stderr, "PROC_MSG ");
+ break;
default:
erts_fprintf(stderr, "??? ");
break;
@@ -3204,17 +2278,6 @@ static void
sys_msg_disp_failure(ErtsSysMsgQ *smqp, Eterm receiver)
{
switch (smqp->type) {
- case SYS_MSG_TYPE_TRACE:
- /* Invalid tracer_proc's are removed when processes
- are scheduled in. */
- break;
- case SYS_MSG_TYPE_SEQTRACE:
- /* Reset seq_tracer if it hasn't changed */
- erts_smp_rwmtx_rwlock(&sys_trace_rwmtx);
- if (system_seq_tracer == receiver)
- system_seq_tracer = am_false;
- erts_smp_rwmtx_rwunlock(&sys_trace_rwmtx);
- break;
case SYS_MSG_TYPE_SYSMON:
if (receiver == NIL
&& !erts_system_monitor_long_gc
@@ -3275,7 +2338,7 @@ sys_msg_disp_failure(ErtsSysMsgQ *smqp, Eterm receiver)
break;
}
case SYS_MSG_TYPE_PROC_MSG:
- break;
+ break;
default:
ASSERT(0);
}
@@ -3393,13 +2456,9 @@ sys_msg_dispatcher_func(void *unused)
print_msg_type(smqp);
#endif
switch (smqp->type) {
- case SYS_MSG_TYPE_TRACE:
- case SYS_MSG_TYPE_PROC_MSG:
- receiver = smqp->to;
- break;
- case SYS_MSG_TYPE_SEQTRACE:
- receiver = erts_get_system_seq_tracer();
- break;
+ case SYS_MSG_TYPE_PROC_MSG:
+ receiver = smqp->to;
+ break;
case SYS_MSG_TYPE_SYSMON:
receiver = erts_get_system_monitor();
if (smqp->from == receiver) {
@@ -3434,16 +2493,8 @@ sys_msg_dispatcher_func(void *unused)
if (is_internal_pid(receiver)) {
proc = erts_pid2proc(NULL, 0, receiver, proc_locks);
- if (!proc
- || (smqp->type == SYS_MSG_TYPE_TRACE
- && !(ERTS_TRACE_FLAGS(proc) & F_TRACER))) {
+ if (!proc) {
/* Bad tracer */
-#ifdef DEBUG_PRINTOUTS
- if (smqp->type == SYS_MSG_TYPE_TRACE && proc)
- erts_fprintf(stderr,
- "<tracer alive but missing "
- "F_TRACER flag> ");
-#endif
goto failure;
}
else {
@@ -3451,7 +2502,7 @@ sys_msg_dispatcher_func(void *unused)
queue_proc_msg:
mp = erts_alloc_message(0, NULL);
mp->data.heap_frag = smqp->bp;
- erts_queue_message(proc,&proc_locks,mp,smqp->msg,NIL);
+ erts_queue_message(proc,proc_locks,mp,smqp->msg,am_system);
#ifdef DEBUG_PRINTOUTS
erts_fprintf(stderr, "delivered\n");
#endif
@@ -3517,12 +2568,6 @@ erts_foreach_sys_msg_in_q(void (*func)(Eterm,
for (sm = sys_message_queue; sm; sm = sm->next) {
Eterm to;
switch (sm->type) {
- case SYS_MSG_TYPE_TRACE:
- to = sm->to;
- break;
- case SYS_MSG_TYPE_SEQTRACE:
- to = erts_get_system_seq_tracer();
- break;
case SYS_MSG_TYPE_SYSMON:
to = erts_get_system_monitor();
break;
@@ -3560,3 +2605,603 @@ init_sys_msg_dispatcher(void)
}
#endif
+
+#include "erl_nif.h"
+
+typedef struct {
+ char *name;
+ Uint arity;
+ ErlNifFunc *cb;
+} ErtsTracerType;
+
+struct ErtsTracerNif_ {
+ HashBucket hb;
+ Eterm module;
+ struct erl_module_nif* nif_mod;
+ ErtsTracerType tracers[NIF_TRACER_TYPES];
+};
+
+static void init_tracer_template(ErtsTracerNif *tnif) {
+
+ /* default tracer functions */
+ tnif->tracers[TRACE_FUN_DEFAULT].name = "trace";
+ tnif->tracers[TRACE_FUN_DEFAULT].arity = 6;
+ tnif->tracers[TRACE_FUN_DEFAULT].cb = NULL;
+
+ tnif->tracers[TRACE_FUN_ENABLED].name = "enabled";
+ tnif->tracers[TRACE_FUN_ENABLED].arity = 3;
+ tnif->tracers[TRACE_FUN_ENABLED].cb = NULL;
+
+ /* specific tracer functions */
+ tnif->tracers[TRACE_FUN_T_SEND].name = "trace_send";
+ tnif->tracers[TRACE_FUN_T_SEND].arity = 6;
+ tnif->tracers[TRACE_FUN_T_SEND].cb = NULL;
+
+ tnif->tracers[TRACE_FUN_T_RECEIVE].name = "trace_receive";
+ tnif->tracers[TRACE_FUN_T_RECEIVE].arity = 6;
+ tnif->tracers[TRACE_FUN_T_RECEIVE].cb = NULL;
+
+ tnif->tracers[TRACE_FUN_T_CALL].name = "trace_call";
+ tnif->tracers[TRACE_FUN_T_CALL].arity = 6;
+ tnif->tracers[TRACE_FUN_T_CALL].cb = NULL;
+
+ tnif->tracers[TRACE_FUN_T_SCHED_PROC].name = "trace_running_procs";
+ tnif->tracers[TRACE_FUN_T_SCHED_PROC].arity = 6;
+ tnif->tracers[TRACE_FUN_T_SCHED_PROC].cb = NULL;
+
+ tnif->tracers[TRACE_FUN_T_SCHED_PORT].name = "trace_running_ports";
+ tnif->tracers[TRACE_FUN_T_SCHED_PORT].arity = 6;
+ tnif->tracers[TRACE_FUN_T_SCHED_PORT].cb = NULL;
+
+ tnif->tracers[TRACE_FUN_T_GC].name = "trace_garbage_collection";
+ tnif->tracers[TRACE_FUN_T_GC].arity = 6;
+ tnif->tracers[TRACE_FUN_T_GC].cb = NULL;
+
+ tnif->tracers[TRACE_FUN_T_PROCS].name = "trace_procs";
+ tnif->tracers[TRACE_FUN_T_PROCS].arity = 6;
+ tnif->tracers[TRACE_FUN_T_PROCS].cb = NULL;
+
+ tnif->tracers[TRACE_FUN_T_PORTS].name = "trace_ports";
+ tnif->tracers[TRACE_FUN_T_PORTS].arity = 6;
+ tnif->tracers[TRACE_FUN_T_PORTS].cb = NULL;
+
+ /* specific enabled functions */
+ tnif->tracers[TRACE_FUN_E_SEND].name = "enabled_send";
+ tnif->tracers[TRACE_FUN_E_SEND].arity = 3;
+ tnif->tracers[TRACE_FUN_E_SEND].cb = NULL;
+
+ tnif->tracers[TRACE_FUN_E_RECEIVE].name = "enabled_receive";
+ tnif->tracers[TRACE_FUN_E_RECEIVE].arity = 3;
+ tnif->tracers[TRACE_FUN_E_RECEIVE].cb = NULL;
+
+ tnif->tracers[TRACE_FUN_E_CALL].name = "enabled_call";
+ tnif->tracers[TRACE_FUN_E_CALL].arity = 3;
+ tnif->tracers[TRACE_FUN_E_CALL].cb = NULL;
+
+ tnif->tracers[TRACE_FUN_E_SCHED_PROC].name = "enabled_running_procs";
+ tnif->tracers[TRACE_FUN_E_SCHED_PROC].arity = 3;
+ tnif->tracers[TRACE_FUN_E_SCHED_PROC].cb = NULL;
+
+ tnif->tracers[TRACE_FUN_E_SCHED_PORT].name = "enabled_running_ports";
+ tnif->tracers[TRACE_FUN_E_SCHED_PORT].arity = 3;
+ tnif->tracers[TRACE_FUN_E_SCHED_PORT].cb = NULL;
+
+ tnif->tracers[TRACE_FUN_E_GC].name = "enabled_garbage_collection";
+ tnif->tracers[TRACE_FUN_E_GC].arity = 3;
+ tnif->tracers[TRACE_FUN_E_GC].cb = NULL;
+
+ tnif->tracers[TRACE_FUN_E_PROCS].name = "enabled_procs";
+ tnif->tracers[TRACE_FUN_E_PROCS].arity = 3;
+ tnif->tracers[TRACE_FUN_E_PROCS].cb = NULL;
+
+ tnif->tracers[TRACE_FUN_E_PORTS].name = "enabled_ports";
+ tnif->tracers[TRACE_FUN_E_PORTS].arity = 3;
+ tnif->tracers[TRACE_FUN_E_PORTS].cb = NULL;
+}
+
+static Hash *tracer_hash = NULL;
+static erts_smp_rwmtx_t tracer_mtx;
+
+static ErtsTracerNif *
+load_tracer_nif(const ErtsTracer tracer)
+{
+ Module* mod = erts_get_module(ERTS_TRACER_MODULE(tracer),
+ erts_active_code_ix());
+ struct erl_module_instance *instance;
+ ErlNifFunc *funcs;
+ int num_of_funcs;
+ ErtsTracerNif tnif_tmpl, *tnif;
+ ErtsTracerType *tracers;
+ int i,j;
+
+ if (!mod || !mod->curr.nif) {
+ return NULL;
+ }
+
+ instance = &mod->curr;
+
+ init_tracer_template(&tnif_tmpl);
+ tnif_tmpl.nif_mod = instance->nif;
+ tnif_tmpl.module = ERTS_TRACER_MODULE(tracer);
+ tracers = tnif_tmpl.tracers;
+
+ num_of_funcs = erts_nif_get_funcs(instance->nif, &funcs);
+
+ for(i = 0; i < num_of_funcs; i++) {
+ for (j = 0; j < NIF_TRACER_TYPES; j++) {
+ if (strcmp(tracers[j].name, funcs[i].name) == 0 && tracers[j].arity == funcs[i].arity) {
+ tracers[j].cb = &(funcs[i]);
+ break;
+ }
+ }
+ }
+
+ if (tracers[TRACE_FUN_DEFAULT].cb == NULL || tracers[TRACE_FUN_ENABLED].cb == NULL ) {
+ return NULL;
+ }
+
+ erts_smp_rwmtx_rwlock(&tracer_mtx);
+ tnif = hash_put(tracer_hash, &tnif_tmpl);
+ erts_smp_rwmtx_rwunlock(&tracer_mtx);
+
+ return tnif;
+}
+
+static ERTS_INLINE ErtsTracerNif *
+lookup_tracer_nif(const ErtsTracer tracer)
+{
+ ErtsTracerNif tnif_tmpl;
+ ErtsTracerNif *tnif;
+ tnif_tmpl.module = ERTS_TRACER_MODULE(tracer);
+ erts_smp_rwmtx_rlock(&tracer_mtx);
+ if ((tnif = hash_get(tracer_hash, &tnif_tmpl)) == NULL) {
+ erts_smp_rwmtx_runlock(&tracer_mtx);
+ tnif = load_tracer_nif(tracer);
+ ASSERT(!tnif || tnif->nif_mod);
+ return tnif;
+ }
+ erts_smp_rwmtx_runlock(&tracer_mtx);
+ ASSERT(tnif->nif_mod);
+ return tnif;
+}
+
+/* This function converts an Erlang tracer term to ErtsTracer.
+ It returns THE_NON_VALUE if an invalid tracer term was given.
+ Accepted input is:
+ pid() || port() || {prefix, pid()} || {prefix, port()} ||
+ {prefix, atom(), term()} || {atom(), term()}
+ */
+ErtsTracer
+erts_term_to_tracer(Eterm prefix, Eterm t)
+{
+ ErtsTracer tracer = erts_tracer_nil;
+ ASSERT(is_atom(prefix) || prefix == THE_NON_VALUE);
+ if (!is_nil(t)) {
+ Eterm module = am_erl_tracer, state = THE_NON_VALUE;
+ Eterm hp[2];
+ if (is_tuple(t)) {
+ Eterm *tp = tuple_val(t);
+ if (prefix != THE_NON_VALUE) {
+ if (arityval(tp[0]) == 2 && tp[1] == prefix)
+ t = tp[2];
+ else if (arityval(tp[0]) == 3 && tp[1] == prefix && is_atom(tp[2])) {
+ module = tp[2];
+ state = tp[3];
+ }
+ } else {
+ if (arityval(tp[0]) == 2 && is_atom(tp[2])) {
+ module = tp[1];
+ state = tp[2];
+ }
+ }
+ }
+ if (state == THE_NON_VALUE && (is_internal_pid(t) || is_internal_port(t)))
+ state = t;
+ if (state == THE_NON_VALUE)
+ return THE_NON_VALUE;
+ erts_tracer_update(&tracer, CONS(hp, module, state));
+ }
+ if (!lookup_tracer_nif(tracer)) {
+ ASSERT(ERTS_TRACER_MODULE(tracer) != am_erl_tracer);
+ ERTS_TRACER_CLEAR(&tracer);
+ return THE_NON_VALUE;
+ }
+ return tracer;
+}
+
+Eterm
+erts_tracer_to_term(Process *p, ErtsTracer tracer)
+{
+ if (ERTS_TRACER_IS_NIL(tracer))
+ return am_false;
+ if (ERTS_TRACER_MODULE(tracer) == am_erl_tracer)
+ /* Have to manage these specifically in order to be
+ backwards compatible */
+ return ERTS_TRACER_STATE(tracer);
+ else {
+ Eterm *hp = HAlloc(p, 3);
+ return TUPLE2(hp, ERTS_TRACER_MODULE(tracer),
+ copy_object(ERTS_TRACER_STATE(tracer), p));
+ }
+}
+
+
+static ERTS_INLINE int
+send_to_tracer_nif_raw(Process *c_p, Process *tracee,
+ const ErtsTracer tracer, Uint tracee_flags,
+ Eterm t_p_id, ErtsTracerNif *tnif,
+ enum ErtsTracerOpt topt,
+ Eterm tag, Eterm msg, Eterm extra, Eterm pam_result)
+{
+ if (tnif || (tnif = lookup_tracer_nif(tracer)) != NULL) {
+#define MAP_SIZE 3
+ Eterm argv[6], local_heap[3+MAP_SIZE /* values */ + (MAP_SIZE+1 /* keys */)];
+ flatmap_t *map = (flatmap_t*)(local_heap+(MAP_SIZE+1));
+ Eterm *map_values = flatmap_get_values(map);
+
+ topt = (tnif->tracers[topt].cb) ? topt : TRACE_FUN_DEFAULT;
+ ASSERT(topt < NIF_TRACER_TYPES);
+
+ argv[0] = tag;
+ argv[1] = ERTS_TRACER_STATE(tracer);
+ argv[2] = t_p_id;
+ argv[3] = msg;
+ argv[4] = extra == THE_NON_VALUE ? am_undefined : extra;
+ argv[5] = make_flatmap(map);
+
+ map->thing_word = MAP_HEADER_FLATMAP;
+ map->size = MAP_SIZE;
+ map->keys = TUPLE3(local_heap, am_match_spec_result, am_scheduler_id, am_timestamp);
+
+ *map_values++ = pam_result;
+ if (tracee_flags & F_TRACE_SCHED_NO)
+ *map_values++ = make_small(erts_get_scheduler_id());
+ else
+ *map_values++ = am_undefined;
+ if (tracee_flags & F_NOW_TS)
+#ifdef HAVE_ERTS_NOW_CPU
+ if (erts_cpu_timestamp)
+ *map_values++ = am_cpu_timestamp;
+ else
+#endif
+ *map_values++ = am_timestamp;
+ else if (tracee_flags & F_STRICT_MON_TS)
+ *map_values++ = am_strict_monotonic;
+ else if (tracee_flags & F_MON_TS)
+ *map_values++ = am_monotonic;
+ else
+ *map_values++ = am_undefined;
+
+#undef MAP_SIZE
+ erts_nif_call_function(c_p, tracee ? tracee : c_p,
+ tnif->nif_mod,
+ tnif->tracers[topt].cb,
+ tnif->tracers[topt].arity,
+ argv);
+ }
+ return 1;
+}
+
+static ERTS_INLINE int
+send_to_tracer_nif(Process *c_p, ErtsPTabElementCommon *t_p,
+ Eterm t_p_id, ErtsTracerNif *tnif, enum ErtsTracerOpt topt,
+ Eterm tag, Eterm msg, Eterm extra, Eterm pam_result)
+{
+#if defined(ERTS_SMP) && defined(ERTS_ENABLE_LOCK_CHECK)
+ if (c_p) {
+ /* We have to hold the main lock of the currently executing process */
+ erts_proc_lc_chk_have_proc_locks(c_p, ERTS_PROC_LOCK_MAIN);
+ }
+ if (is_internal_pid(t_p->id)) {
+ /* We have to have at least one lock */
+ ERTS_SMP_LC_ASSERT(erts_proc_lc_my_proc_locks((Process*)t_p) & ERTS_PROC_LOCKS_ALL);
+ } else {
+ ASSERT(is_internal_port(t_p->id));
+ ERTS_SMP_LC_ASSERT(erts_lc_is_port_locked((Port*)t_p));
+ }
+#endif
+
+ return send_to_tracer_nif_raw(c_p,
+ is_internal_pid(t_p->id) ? (Process*)t_p : NULL,
+ t_p->tracer, t_p->trace_flags,
+ t_p_id, tnif, topt, tag, msg, extra,
+ pam_result);
+}
+
+static ERTS_INLINE Eterm
+call_enabled_tracer(const ErtsTracer tracer,
+ ErtsTracerNif **tnif_ret,
+ enum ErtsTracerOpt topt,
+ Eterm tag, Eterm t_p_id) {
+ ErtsTracerNif *tnif = lookup_tracer_nif(tracer);
+ if (tnif) {
+ Eterm argv[] = {tag, ERTS_TRACER_STATE(tracer), t_p_id},
+ ret;
+ topt = (tnif->tracers[topt].cb) ? topt : TRACE_FUN_ENABLED;
+ ASSERT(topt < NIF_TRACER_TYPES);
+ ASSERT(tnif->tracers[topt].cb != NULL);
+ if (tnif_ret) *tnif_ret = tnif;
+ ret = erts_nif_call_function(NULL, NULL, tnif->nif_mod,
+ tnif->tracers[topt].cb,
+ tnif->tracers[topt].arity,
+ argv);
+ if (tag == am_trace_status && ret != am_remove)
+ return am_trace;
+ ASSERT(tag == am_trace_status || ret != am_remove);
+ return ret;
+ }
+ return tag == am_trace_status ? am_remove : am_discard;
+}
+
+static int
+is_tracer_enabled(Process* c_p, ErtsProcLocks c_p_locks,
+ ErtsPTabElementCommon *t_p,
+ ErtsTracerNif **tnif_ret,
+ enum ErtsTracerOpt topt, Eterm tag) {
+ Eterm nif_result;
+
+#if defined(ERTS_SMP) && defined(ERTS_ENABLE_LOCK_CHECK)
+ if (c_p)
+ ERTS_SMP_LC_ASSERT(erts_proc_lc_my_proc_locks(c_p) == c_p_locks
+ || erts_thr_progress_is_blocking());
+ if (is_internal_pid(t_p->id)) {
+ /* We have to have at least one lock */
+ ERTS_SMP_LC_ASSERT(erts_proc_lc_my_proc_locks((Process*)t_p) & ERTS_PROC_LOCKS_ALL
+ || erts_thr_progress_is_blocking());
+ } else {
+ ASSERT(is_internal_port(t_p->id));
+ ERTS_SMP_LC_ASSERT(erts_lc_is_port_locked((Port*)t_p)
+ || erts_thr_progress_is_blocking());
+ }
+#endif
+
+ nif_result = call_enabled_tracer(t_p->tracer, tnif_ret, topt, tag, t_p->id);
+ switch (nif_result) {
+ case am_discard: return 0;
+ case am_trace: return 1;
+ case THE_NON_VALUE:
+ case am_remove: ASSERT(tag == am_trace_status); break;
+ default:
+ /* only am_remove should be returned, but if
+ something else is returned we fall-through
+ and remove the tracer. */
+ ASSERT(0);
+ }
+
+ /* Only remove tracer on self() and ports */
+ if (is_internal_port(t_p->id) || (c_p && c_p->common.id == t_p->id)) {
+ ErtsProcLocks c_p_xlocks = 0;
+ if (is_internal_pid(t_p->id)) {
+ ERTS_SMP_LC_ASSERT(erts_proc_lc_my_proc_locks(c_p) & ERTS_PROC_LOCK_MAIN);
+ if (c_p_locks != ERTS_PROC_LOCKS_ALL) {
+ c_p_xlocks = ~c_p_locks & ERTS_PROC_LOCKS_ALL;
+ if (erts_smp_proc_trylock(c_p, c_p_xlocks) == EBUSY) {
+ erts_smp_proc_unlock(c_p, c_p_locks & ~ERTS_PROC_LOCK_MAIN);
+ erts_smp_proc_lock(c_p, ERTS_PROC_LOCKS_ALL_MINOR);
+ }
+ }
+ }
+ erts_tracer_replace(t_p, erts_tracer_nil);
+ t_p->trace_flags &= ~TRACEE_FLAGS;
+
+ if (c_p_xlocks)
+ erts_smp_proc_unlock(c_p, c_p_xlocks);
+ }
+
+ return 0;
+}
+
+int erts_is_tracer_enabled(const ErtsTracer tracer, ErtsPTabElementCommon *t_p)
+{
+ ErtsTracerNif *tnif = lookup_tracer_nif(tracer);
+ if (tnif) {
+ Eterm nif_result = call_enabled_tracer(tracer, &tnif,
+ TRACE_FUN_ENABLED,
+ am_trace_status,
+ t_p->id);
+ switch (nif_result) {
+ case am_discard:
+ case am_trace: return 1;
+ default:
+ break;
+ }
+ }
+ return 0;
+}
+
+int erts_is_tracer_proc_enabled(Process* c_p, ErtsProcLocks c_p_locks,
+ ErtsPTabElementCommon *t_p)
+{
+ return is_tracer_enabled(c_p, c_p_locks, t_p, NULL, TRACE_FUN_ENABLED,
+ am_trace_status);
+}
+
+int erts_is_tracer_proc_enabled_send(Process* c_p, ErtsProcLocks c_p_locks,
+ ErtsPTabElementCommon *t_p)
+{
+ return is_tracer_enabled(c_p, c_p_locks, t_p, NULL, TRACE_FUN_T_SEND, am_send);
+}
+
+
+void erts_tracer_replace(ErtsPTabElementCommon *t_p, const ErtsTracer tracer)
+{
+#if defined(ERTS_SMP) && defined(ERTS_ENABLE_LOCK_CHECK)
+ if (is_internal_pid(t_p->id) && !erts_thr_progress_is_blocking()) {
+ erts_proc_lc_chk_have_proc_locks((Process*)t_p, ERTS_PROC_LOCKS_ALL);
+ } else if (is_internal_port(t_p->id)) {
+ ERTS_LC_ASSERT(erts_lc_is_port_locked((Port*)t_p)
+ || erts_thr_progress_is_blocking());
+ }
+#endif
+ if (ERTS_TRACER_COMPARE(t_p->tracer, tracer))
+ return;
+
+ erts_tracer_update(&t_p->tracer, tracer);
+}
+
+static void free_tracer(void *p)
+{
+ ErtsTracer tracer = (ErtsTracer)p;
+
+ if (is_immed(ERTS_TRACER_STATE(tracer))) {
+ erts_free(ERTS_ALC_T_HEAP_FRAG, ptr_val(tracer));
+ } else {
+ ErlHeapFragment *hf = (void*)((char*)(ptr_val(tracer)) - offsetof(ErlHeapFragment, mem));
+ free_message_buffer(hf);
+ }
+}
+
+/* un-define erts_tracer_update before implementation */
+#ifdef erts_tracer_update
+#undef erts_tracer_update
+#endif
+
+/*
+ * ErtsTracer is either NIL, 'true' or [Mod | State]
+ *
+ * - If State is immediate then the memory for
+ * the cons cell is just two words + sizeof(ErtsThrPrgrLaterOp) large.
+ * - If State is a complex term then the cons cell
+ * is allocated in an ErlHeapFragment where the cons
+ * ptr points to the mem field. So in order to get the
+ * ptr to the fragment you do this:
+ * (char*)(ptr_val(tracer)) - offsetof(ErlHeapFragment, mem)
+ * Normally you shouldn't have to care about this though
+ * as erts_tracer_update takes care of it for you.
+ *
+ * When ErtsTracer is stored in the stack as part of a
+ * return trace, the cons cell is stored on the heap of
+ * the process.
+ *
+ * The cons cell is not always stored on the heap as:
+ * 1) for port/meta tracing there is no heap
+ * 2) we would need the main lock in order to
+ * read the tracer which is undesirable.
+ *
+ * One way to optimize this (memory wise) is to keep an refc and only bump
+ * the refc when *tracer is NIL.
+ */
+void
+erts_tracer_update(ErtsTracer *tracer, const ErtsTracer new_tracer)
+{
+ ErlHeapFragment *hf;
+
+ if (is_not_nil(*tracer)) {
+ Uint offs = 2;
+ UWord size = 2 * sizeof(Eterm) + sizeof(ErtsThrPrgrLaterOp);
+ ASSERT(is_list(*tracer));
+ if (is_not_immed(ERTS_TRACER_STATE(*tracer))) {
+ hf = (void*)(((char*)(ptr_val(*tracer)) - offsetof(ErlHeapFragment, mem)));
+ offs = hf->used_size;
+ size = hf->alloc_size * sizeof(Eterm) + sizeof(ErlHeapFragment);
+ ASSERT(offs == size_object(*tracer));
+ }
+ /* We schedule the free:ing of the tracer until after a thread progress
+ has been made so that we know that no schedulers have any references
+ to it. Because we do this, it is possible to release all locks of a
+ process/port and still use the ErtsTracer of that port/process
+ without having to worry if it is free'd.
+ */
+ erts_schedule_thr_prgr_later_cleanup_op(
+ free_tracer, (void*)(*tracer),
+ (ErtsThrPrgrLaterOp*)(ptr_val(*tracer) + offs),
+ size);
+ }
+
+ if (is_nil(new_tracer)) {
+ *tracer = new_tracer;
+ } else if (is_immed(ERTS_TRACER_STATE(new_tracer))) {
+ /* If tracer state is an immediate we only allocate a 2 Eterm heap.
+ Not sure if it is worth it, we save 4 words (sizeof(ErlHeapFragment))
+ per tracer. */
+ Eterm *hp = erts_alloc(ERTS_ALC_T_HEAP_FRAG,
+ 2*sizeof(Eterm) + sizeof(ErtsThrPrgrLaterOp));
+ *tracer = CONS(hp, ERTS_TRACER_MODULE(new_tracer),
+ ERTS_TRACER_STATE(new_tracer));
+ } else {
+ Eterm *hp, tracer_state = ERTS_TRACER_STATE(new_tracer),
+ tracer_module = ERTS_TRACER_MODULE(new_tracer);
+ Uint sz = size_object(tracer_state);
+ hf = new_message_buffer(sz + 2 /* cons cell */ + (sizeof(ErtsThrPrgrLaterOp)+sizeof(Eterm)-1)/sizeof(Eterm));
+ hp = hf->mem + 2;
+ hf->used_size -= (sizeof(ErtsThrPrgrLaterOp)+sizeof(Eterm)-1)/sizeof(Eterm);
+ *tracer = copy_struct(tracer_state, sz, &hp, &hf->off_heap);
+ *tracer = CONS(hf->mem, tracer_module, *tracer);
+ ASSERT((void*)(((char*)(ptr_val(*tracer)) - offsetof(ErlHeapFragment, mem))) == hf);
+ }
+}
+
+static void init_tracer_nif()
+{
+ erts_smp_rwmtx_opt_t rwmtx_opt = ERTS_SMP_RWMTX_OPT_DEFAULT_INITER;
+ rwmtx_opt.type = ERTS_SMP_RWMTX_TYPE_EXTREMELY_FREQUENT_READ;
+ rwmtx_opt.lived = ERTS_SMP_RWMTX_LONG_LIVED;
+ erts_smp_rwmtx_init_opt(&tracer_mtx, &rwmtx_opt, "tracer_mtx");
+
+ erts_tracer_nif_clear();
+
+}
+
+int erts_tracer_nif_clear()
+{
+
+ erts_smp_rwmtx_rlock(&tracer_mtx);
+ if (!tracer_hash || tracer_hash->nobjs) {
+
+ HashFunctions hf;
+ hf.hash = tracer_hash_fun;
+ hf.cmp = tracer_cmp_fun;
+ hf.alloc = tracer_alloc_fun;
+ hf.free = tracer_free_fun;
+ hf.meta_alloc = (HMALLOC_FUN) erts_alloc;
+ hf.meta_free = (HMFREE_FUN) erts_free;
+ hf.meta_print = (HMPRINT_FUN) erts_print;
+
+ erts_smp_rwmtx_runlock(&tracer_mtx);
+ erts_smp_rwmtx_rwlock(&tracer_mtx);
+
+ if (tracer_hash)
+ hash_delete(tracer_hash);
+
+ tracer_hash = hash_new(ERTS_ALC_T_TRACER_NIF, "tracer_hash", 10, hf);
+
+ erts_smp_rwmtx_rwunlock(&tracer_mtx);
+ return 1;
+ }
+
+ erts_smp_rwmtx_runlock(&tracer_mtx);
+ return 0;
+}
+
+static int tracer_cmp_fun(void* a, void* b)
+{
+ return ((ErtsTracerNif*)a)->module != ((ErtsTracerNif*)b)->module;
+}
+
+static HashValue tracer_hash_fun(void* obj)
+{
+ return make_internal_hash(((ErtsTracerNif*)obj)->module);
+}
+
+static void *tracer_alloc_fun(void* tmpl)
+{
+ ErtsTracerNif *obj = erts_alloc(ERTS_ALC_T_TRACER_NIF,
+ sizeof(ErtsTracerNif) +
+ sizeof(ErtsThrPrgrLaterOp));
+ memcpy(obj, tmpl, sizeof(*obj));
+ return obj;
+}
+
+static void tracer_free_fun_cb(void* obj)
+{
+ erts_free(ERTS_ALC_T_TRACER_NIF, obj);
+}
+
+static void tracer_free_fun(void* obj)
+{
+ ErtsTracerNif *tnif = obj;
+ erts_schedule_thr_prgr_later_op(
+ tracer_free_fun_cb, obj,
+ (ErtsThrPrgrLaterOp*)(tnif + 1));
+
+}
diff --git a/erts/emulator/beam/erl_trace.h b/erts/emulator/beam/erl_trace.h
index a0058264d7..0095d4386b 100644
--- a/erts/emulator/beam/erl_trace.h
+++ b/erts/emulator/beam/erl_trace.h
@@ -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.
@@ -46,6 +46,8 @@
#define ERTS_SEQTFLGS2TSTYPE(SEQTFLGS) \
((int) (((SEQTFLGS) >> ERTS_SEQ_TRACE_FLAGS_TS_TYPE_SHIFT) \
& ERTS_TRACE_TS_TYPE_MASK))
+#define ERTS_SEQTFLGS2TFLGS(SEQTFLGS) \
+ (ERTS_SEQTFLGS2TSTYPE(SEQTFLGS) << ERTS_TRACE_FLAGS_TS_TYPE_SHIFT)
#endif /* ERL_TRACE_H__FLAGS__ */
@@ -54,6 +56,15 @@
struct binary;
+typedef struct
+{
+ int on;
+ struct binary* match_spec;
+} ErtsTracingEvent;
+
+extern ErtsTracingEvent erts_send_tracing[];
+extern ErtsTracingEvent erts_receive_tracing[];
+
/* erl_bif_trace.c */
Eterm erl_seq_trace_info(Process *p, Eterm arg1);
void erts_system_monitor_clear(Process *c_p);
@@ -62,15 +73,19 @@ void erts_system_profile_clear(Process *c_p);
/* erl_trace.c */
void erts_init_trace(void);
void erts_trace_check_exiting(Eterm exiting);
-Eterm erts_set_system_seq_tracer(Process *c_p,
- ErtsProcLocks c_p_locks,
- Eterm new);
-Eterm erts_get_system_seq_tracer(void);
-void erts_change_default_tracing(int setflags, Uint *flagsp, Eterm *tracerp);
-void erts_get_default_tracing(Uint *flagsp, Eterm *tracerp);
+ErtsTracer erts_set_system_seq_tracer(Process *c_p,
+ ErtsProcLocks c_p_locks,
+ ErtsTracer new);
+ErtsTracer erts_get_system_seq_tracer(void);
+void erts_change_default_proc_tracing(int setflags, Uint flagsp,
+ const ErtsTracer tracerp);
+void erts_get_default_proc_tracing(Uint *flagsp, ErtsTracer *tracerp);
+void erts_change_default_port_tracing(int setflags, Uint flagsp,
+ const ErtsTracer tracerp);
+void erts_get_default_port_tracing(Uint *flagsp, ErtsTracer *tracerp);
void erts_set_system_monitor(Eterm monitor);
Eterm erts_get_system_monitor(void);
-int erts_is_tracer_proc_valid(Process* p);
+int erts_is_tracer_valid(Process* p);
#ifdef ERTS_SMP
void erts_check_my_tracer_proc(Process *);
@@ -81,28 +96,32 @@ void erts_foreach_sys_msg_in_q(void (*func)(Eterm,
Eterm,
ErlHeapFragment *));
void erts_queue_error_logger_message(Eterm, Eterm, ErlHeapFragment *);
+void erts_send_sys_msg_proc(Eterm, Eterm, Eterm, ErlHeapFragment *);
#endif
-void erts_send_sys_msg_proc(Eterm, Eterm, Eterm, ErlHeapFragment *);
void trace_send(Process*, Eterm, Eterm);
-void trace_receive(Process*, Eterm);
-Uint32 erts_call_trace(Process *p, BeamInstr mfa[], struct binary *match_spec, Eterm* args,
- int local, Eterm *tracer_pid);
-void erts_trace_return(Process* p, BeamInstr* fi, Eterm retval, Eterm *tracer_pid);
+void trace_receive(Process*, Eterm, Eterm, ErtsTracingEvent*);
+Uint32 erts_call_trace(Process *p, BeamInstr mfa[], struct binary *match_spec,
+ Eterm* args, int local, ErtsTracer *tracer);
+void erts_trace_return(Process* p, BeamInstr* fi, Eterm retval,
+ ErtsTracer *tracer);
void erts_trace_exception(Process* p, BeamInstr mfa[], Eterm class, Eterm value,
- Eterm *tracer);
+ ErtsTracer *tracer);
void erts_trace_return_to(Process *p, BeamInstr *pc);
-void trace_sched(Process*, Eterm);
-void trace_proc(Process*, Process*, Eterm, Eterm);
-void trace_proc_spawn(Process*, Eterm pid, Eterm mod, Eterm func, Eterm args);
+void trace_sched(Process*, ErtsProcLocks, Eterm);
+void trace_proc(Process*, ErtsProcLocks, Process*, Eterm, Eterm);
+void trace_proc_spawn(Process*, Eterm what, Eterm pid, Eterm mod, Eterm func, Eterm args);
void save_calls(Process *p, Export *);
-void trace_gc(Process *p, Eterm what);
+void trace_gc(Process *p, Eterm what, Uint size, Eterm msg);
/* port tracing */
-void trace_virtual_sched(Process*, Eterm);
+void trace_virtual_sched(Process*, ErtsProcLocks, Eterm);
void trace_sched_ports(Port *pp, Eterm);
void trace_sched_ports_where(Port *pp, Eterm, Eterm);
void trace_port(Port *, Eterm what, Eterm data);
void trace_port_open(Port *, Eterm calling_pid, Eterm drv_name);
+void trace_port_receive(Port *, Eterm calling_pid, Eterm tag, ...);
+void trace_port_send(Port *, Eterm to, Eterm msg, int exists);
+void trace_port_send_binary(Port *, Eterm to, Eterm what, char *bin, Sint sz);
/* system_profile */
void erts_set_system_profile(Eterm profile);
@@ -121,7 +140,7 @@ void monitor_large_heap(Process *p);
void monitor_generic(Process *p, Eterm type, Eterm spec);
Uint erts_trace_flag2bit(Eterm flag);
int erts_trace_flags(Eterm List,
- Uint *pMask, Eterm *pTracer, int *pCpuTimestamp);
+ Uint *pMask, ErtsTracer *pTracer, int *pCpuTimestamp);
Eterm erts_bif_trace(int bif_index, Process* p, Eterm* args, BeamInstr *I);
#ifdef ERTS_SMP
@@ -161,15 +180,50 @@ int erts_set_trace_pattern(Process*p, Eterm* mfa, int specified,
struct binary* match_prog_set,
struct binary *meta_match_prog_set,
int on, struct trace_pattern_flags,
- Eterm meta_tracer_pid, int is_blocking);
+ ErtsTracer meta_tracer, int is_blocking);
void
erts_get_default_trace_pattern(int *trace_pattern_is_on,
struct binary **match_spec,
struct binary **meta_match_spec,
struct trace_pattern_flags *trace_pattern_flags,
- Eterm *meta_tracer_pid);
+ ErtsTracer *meta_tracer);
int erts_is_default_trace_enabled(void);
void erts_bif_trace_init(void);
int erts_finish_breakpointing(void);
+/* Nif tracer functions */
+int erts_is_tracer_proc_enabled(Process *c_p, ErtsProcLocks c_p_locks,
+ ErtsPTabElementCommon *t_p);
+int erts_is_tracer_proc_enabled_send(Process* c_p, ErtsProcLocks c_p_locks,
+ ErtsPTabElementCommon *t_p);
+int erts_is_tracer_enabled(const ErtsTracer tracer, ErtsPTabElementCommon *t_p);
+Eterm erts_tracer_to_term(Process *p, ErtsTracer tracer);
+ErtsTracer erts_term_to_tracer(Eterm prefix, Eterm term);
+void erts_tracer_replace(ErtsPTabElementCommon *t_p,
+ const ErtsTracer new_tracer);
+void erts_tracer_update(ErtsTracer *tracer, const ErtsTracer new_tracer);
+int erts_tracer_nif_clear(void);
+
+#define erts_tracer_update(t,n) do { if (*(t) != (n)) erts_tracer_update(t,n); } while(0)
+#define ERTS_TRACER_CLEAR(t) erts_tracer_update(t, erts_tracer_nil)
+
+static const ErtsTracer
+ERTS_DECLARE_DUMMY(erts_tracer_true) = am_true;
+
+static const ErtsTracer
+ERTS_DECLARE_DUMMY(erts_tracer_nil) = NIL;
+
+#define ERTS_TRACER_COMPARE(t1, t2) \
+ (EQ((t1), (t2)))
+
+#define ERTS_TRACER_IS_NIL(t1) ERTS_TRACER_COMPARE(t1, erts_tracer_nil)
+
+#define IS_TRACER_VALID(tracer) \
+ (ERTS_TRACER_COMPARE(tracer,erts_tracer_true) \
+ || ERTS_TRACER_IS_NIL(tracer) \
+ || (is_list(tracer) && is_atom(CAR(list_val(tracer)))))
+
+#define ERTS_TRACER_FROM_ETERM(termp) \
+ ((ErtsTracer*)(termp))
+
#endif /* ERL_TRACE_H__ */
diff --git a/erts/emulator/beam/erl_unicode.c b/erts/emulator/beam/erl_unicode.c
index 551717139d..bd5e1482fb 100644
--- a/erts/emulator/beam/erl_unicode.c
+++ b/erts/emulator/beam/erl_unicode.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.
@@ -55,7 +55,7 @@ static BIF_RETTYPE finalize_list_to_list(Process *p,
Uint num_processed_bytes,
Uint num_bytes_to_process,
Uint num_resulting_chars,
- int state, int left,
+ int state, Sint left,
Eterm tail);
static BIF_RETTYPE characters_to_utf8_trap(BIF_ALIST_3);
static BIF_RETTYPE characters_to_list_trap_1(BIF_ALIST_3);
@@ -173,12 +173,13 @@ static ERTS_INLINE int allowed_iterations(Process *p)
else
return tmp;
}
-static ERTS_INLINE int cost_to_proc(Process *p, int cost)
+
+static ERTS_INLINE void cost_to_proc(Process *p, Sint cost)
{
- int x = (cost / LOOP_FACTOR);
+ Sint x = (cost / LOOP_FACTOR);
BUMP_REDS(p,x);
- return x;
}
+
static ERTS_INLINE int simple_loops_to_common(int cost)
{
int factor = (LOOP_FACTOR_SIMPLE / LOOP_FACTOR);
@@ -243,14 +244,15 @@ static int utf8_len(byte first)
return -1;
}
-static int copy_utf8_bin(byte *target, byte *source, Uint size,
- byte *leftover, int *num_leftovers,
- byte **err_pos, Uint *characters) {
- int copied = 0;
+static Uint copy_utf8_bin(byte *target, byte *source, Uint size,
+ byte *leftover, int *num_leftovers,
+ byte **err_pos, Uint *characters)
+{
+ Uint copied = 0;
if (leftover != NULL && *num_leftovers) {
int need = utf8_len(leftover[0]);
int from_source = need - (*num_leftovers);
- int c;
+ Uint c;
byte *tmp_err_pos = NULL;
ASSERT(need > 0);
ASSERT(from_source > 0);
@@ -502,8 +504,8 @@ L_Again: /* Restart with sublist, old listend was pushed on stack */
}
-static Eterm do_build_utf8(Process *p, Eterm ioterm, int *left, int latin1,
- byte *target, int *pos, Uint *characters, int *err,
+static Eterm do_build_utf8(Process *p, Eterm ioterm, Sint *left, int latin1,
+ byte *target, Uint *pos, Uint *characters, int *err,
byte *leftover, int *num_leftovers)
{
int c;
@@ -573,7 +575,7 @@ static Eterm do_build_utf8(Process *p, Eterm ioterm, int *left, int latin1,
}
if (!latin1) {
- int num;
+ Uint num;
byte *err_pos = NULL;
num = copy_utf8_bin(target + (*pos), bytes,
size, leftover, num_leftovers,&err_pos,characters);
@@ -804,7 +806,7 @@ static int check_leftovers(byte *source, int size)
-static BIF_RETTYPE build_utf8_return(Process *p,Eterm bin,int pos,
+static BIF_RETTYPE build_utf8_return(Process *p,Eterm bin,Uint pos,
Eterm rest_term,int err,
byte *leftover,int num_leftovers,Eterm latin1)
{
@@ -859,8 +861,8 @@ static BIF_RETTYPE characters_to_utf8_trap(BIF_ALIST_3)
#endif
byte* bytes;
Eterm rest_term;
- int left, sleft;
- int pos;
+ Sint left, sleft;
+ Uint pos;
int err;
byte leftover[4]; /* used for temp buffer too,
otherwise 3 bytes would have been enough */
@@ -874,7 +876,7 @@ static BIF_RETTYPE characters_to_utf8_trap(BIF_ALIST_3)
real_bin = binary_val(BIF_ARG_1);
ASSERT(*real_bin == HEADER_PROC_BIN);
#endif
- pos = (int) binary_size(BIF_ARG_1);
+ pos = binary_size(BIF_ARG_1);
bytes = binary_bytes(BIF_ARG_1);
sleft = left = allowed_iterations(BIF_P);
err = 0;
@@ -934,9 +936,9 @@ BIF_RETTYPE unicode_characters_to_binary_2(BIF_ALIST_2)
int latin1;
Eterm bin;
byte *bytes;
- int pos;
+ Uint pos;
int err;
- int left, sleft;
+ Sint left, sleft;
Eterm rest_term, subject;
byte leftover[4]; /* used for temp buffer too, o
therwise 3 bytes would have been enough */
@@ -999,7 +1001,7 @@ BIF_RETTYPE unicode_characters_to_binary_2(BIF_ALIST_2)
byte *t = NULL;
Uint sz = binary_size(bin);
byte *by = erts_get_aligned_binary_bytes(bin,&t);
- int i;
+ Uint i;
erts_printf("<<");
for (i = 0;i < sz; ++i) {
erts_printf((i == sz -1) ? "0x%X" : "0x%X, ", (unsigned) by[i]);
@@ -1007,7 +1009,7 @@ BIF_RETTYPE unicode_characters_to_binary_2(BIF_ALIST_2)
erts_printf(">>: ");
erts_free_aligned_binary_bytes(t);
}
- erts_printf("%d - %d = %d\n",sleft,left,sleft - left);
+ erts_printf("%ld - %ld = %ld\n", sleft, left, sleft - left);
}
#endif
cost_to_proc(BIF_P, sleft - left);
@@ -1015,10 +1017,10 @@ BIF_RETTYPE unicode_characters_to_binary_2(BIF_ALIST_2)
leftover,num_leftovers,BIF_ARG_2);
}
-static BIF_RETTYPE build_list_return(Process *p, byte *bytes, int pos, Uint characters,
+static BIF_RETTYPE build_list_return(Process *p, byte *bytes, Uint pos, Uint characters,
Eterm rest_term, int err,
byte *leftover, int num_leftovers,
- Eterm latin1, int left)
+ Eterm latin1, Sint left)
{
Eterm *hp;
@@ -1070,11 +1072,11 @@ static BIF_RETTYPE characters_to_list_trap_1(BIF_ALIST_3)
{
RestartContext *rc;
byte* bytes;
- int pos;
+ Uint pos;
Uint characters;
int err;
Eterm rest_term;
- int left, sleft;
+ Sint left, sleft;
int latin1 = 0;
byte leftover[4]; /* used for temp buffer too,
@@ -1107,9 +1109,9 @@ BIF_RETTYPE unicode_characters_to_list_2(BIF_ALIST_2)
int latin1;
Uint characters = 0;
byte *bytes;
- int pos;
+ Uint pos;
int err;
- int left, sleft;
+ Sint left, sleft;
Eterm rest_term;
byte leftover[4]; /* used for temp buffer too, o
therwise 3 bytes would have been enough */
@@ -1541,7 +1543,7 @@ static BIF_RETTYPE finalize_list_to_list(Process *p,
Uint num_processed_bytes,
Uint num_bytes_to_process,
Uint num_resulting_chars,
- int state, int left,
+ int state, Sint left,
Eterm tail)
{
Uint num_built; /* characters */
@@ -2016,7 +2018,7 @@ char *erts_convert_filename_to_encoding(Eterm name, char *statbuf, size_t statbu
++need;
}
if (used)
- *used = (Sint) need;
+ *used = need;
if (need+extra > statbuf_size) {
name_buf = (char *) erts_alloc(alloc_type, need+extra);
} else {
@@ -2507,7 +2509,7 @@ void erts_copy_utf8_to_utf16_little(byte *target, byte *bytes, int num_chars)
((Uint) (bytes[3] & ((byte) 0x3F)));
bytes += 4;
} else {
- erl_exit(1,"Internal unicode error in prim_file:internal_name2native/1");
+ erts_exit(ERTS_ERROR_EXIT,"Internal unicode error in prim_file:internal_name2native/1");
}
*target++ = (byte) (unipoint & 0xFF);
*target++ = (byte) ((unipoint >> 8) & 0xFF);
diff --git a/erts/emulator/beam/erl_unicode.h b/erts/emulator/beam/erl_unicode.h
index 4c25d89b7c..e01eaa787e 100644
--- a/erts/emulator/beam/erl_unicode.h
+++ b/erts/emulator/beam/erl_unicode.h
@@ -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/erts/emulator/beam/erl_unicode_normalize.h b/erts/emulator/beam/erl_unicode_normalize.h
index 16c62db50e..21e2a52544 100644
--- a/erts/emulator/beam/erl_unicode_normalize.h
+++ b/erts/emulator/beam/erl_unicode_normalize.h
@@ -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/erts/emulator/beam/erl_utils.h b/erts/emulator/beam/erl_utils.h
index 640969daf0..81800752f0 100644
--- a/erts/emulator/beam/erl_utils.h
+++ b/erts/emulator/beam/erl_utils.h
@@ -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/erts/emulator/beam/erl_vm.h b/erts/emulator/beam/erl_vm.h
index 98f27a1725..f97716d030 100644
--- a/erts/emulator/beam/erl_vm.h
+++ b/erts/emulator/beam/erl_vm.h
@@ -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.
@@ -50,6 +50,7 @@
#define H_DEFAULT_SIZE 233 /* default (heap + stack) min size */
#define VH_DEFAULT_SIZE 32768 /* default virtual (bin) heap min size (words) */
+#define H_DEFAULT_MAX_SIZE 0 /* default max heap size is off */
#define CP_SIZE 1
@@ -160,12 +161,13 @@ extern int num_instructions; /* Number of instruction in opc[]. */
extern int H_MIN_SIZE; /* minimum (heap + stack) */
extern int BIN_VH_MIN_SIZE; /* minimum virtual (bin) heap */
+extern int H_MAX_SIZE; /* maximum (heap + stack) */
+extern int H_MAX_FLAGS; /* maximum heap flags */
extern int erts_atom_table_size;/* Atom table size */
extern int erts_pd_initial_size;/* Initial Process dictionary table size */
#define ORIG_CREATION 0
-#define INTERNAL_CREATION 255
/* macros for extracting bytes from uint16's */
diff --git a/erts/emulator/beam/erl_zlib.c b/erts/emulator/beam/erl_zlib.c
index e44e86c39c..944ff2e35f 100644
--- a/erts/emulator/beam/erl_zlib.c
+++ b/erts/emulator/beam/erl_zlib.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/erts/emulator/beam/erl_zlib.h b/erts/emulator/beam/erl_zlib.h
index 2ca1e3735e..c83c6f291f 100644
--- a/erts/emulator/beam/erl_zlib.h
+++ b/erts/emulator/beam/erl_zlib.h
@@ -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/erts/emulator/beam/erlang_dtrace.d b/erts/emulator/beam/erlang_dtrace.d
index c682f76e3a..237889e0f5 100644
--- a/erts/emulator/beam/erlang_dtrace.d
+++ b/erts/emulator/beam/erlang_dtrace.d
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Dustin Sallings, Michal Ptaszek, Scott Lystig Fritchie 2011-2012.
+ * Copyright Dustin Sallings, Michal Ptaszek, Scott Lystig Fritchie 2011-2016.
* All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -700,6 +700,35 @@ provider erlang {
*/
probe efile_drv__return(int, int, char *, int, int, int);
+
+/*
+ * The set of probes called by the erlang tracer nif backend. In order
+ * to receive events on these you both have to enable tracing in erlang
+ * using the trace bifs and also from dtrace/systemtap.
+ */
+
+
+ /**
+ * A trace message of type `event` was triggered by process `p`.
+ *
+ *
+ * @param p the PID (string form) of the process
+ * @param event the event that was triggered (i.e. call or spawn)
+ * @param state the state of the tracer nif as a string
+ * @param arg1 first argument to the trace event
+ * @param arg2 second argument to the trace event
+ */
+ probe trace(char *p, char *event, char *state, char *arg1, char *arg2);
+
+ /**
+ * A sequence trace message of type `label` was triggered.
+ *
+ * @param state the state of the tracer nif as a string
+ * @param label the seq trace label
+ * @param seq_info the seq trace info tuple as a string
+ */
+ probe trace_seq(char *state, char *label, char *seq_info);
+
/*
* NOTE:
* For formatting int64_t arguments within a D script, see:
diff --git a/erts/include/erl_native_features_config.h.in b/erts/emulator/beam/erlang_lttng.c
index 2bd1d96229..fce40eedc1 100644
--- a/erts/include/erl_native_features_config.h.in
+++ b/erts/emulator/beam/erlang_lttng.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2004-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,5 +18,15 @@
* %CopyrightEnd%
*/
-/* Dirty scheduler support */
-#undef ERL_NIF_DIRTY_SCHEDULER_SUPPORT
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#ifdef USE_LTTNG
+#define TRACEPOINT_CREATE_PROBES
+/*
+ * The header containing our TRACEPOINT_EVENTs.
+ */
+#define TRACEPOINT_DEFINE
+#include "erlang_lttng.h"
+#endif /* USE_LTTNG */
diff --git a/erts/emulator/beam/erlang_lttng.h b/erts/emulator/beam/erlang_lttng.h
new file mode 100644
index 0000000000..12f68e477b
--- /dev/null
+++ b/erts/emulator/beam/erlang_lttng.h
@@ -0,0 +1,424 @@
+/*
+ * %CopyrightBegin%
+ *
+ * Copyright Ericsson AB 1996-2016. All 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 USE_LTTNG
+#undef TRACEPOINT_PROVIDER
+#define TRACEPOINT_PROVIDER com_ericsson_otp
+
+#undef TRACEPOINT_INCLUDE
+#define TRACEPOINT_INCLUDE "erlang_lttng.h"
+
+#if !defined(__ERLANG_LTTNG_H__) || defined(TRACEPOINT_HEADER_MULTI_READ)
+#define __ERLANG_LTTNG_H__
+
+#include <lttng/tracepoint.h>
+
+/* Schedulers */
+
+TRACEPOINT_EVENT(
+ com_ericsson_otp,
+ scheduler_poll,
+ TP_ARGS(
+ int, id,
+ int, runnable
+ ),
+ TP_FIELDS(
+ ctf_integer(int, scheduler, id)
+ ctf_integer(int, runnable, runnable)
+ )
+)
+
+#ifndef LTTNG_CARRIER_STATS
+#define LTTNG_CARRIER_STATS
+typedef struct {
+ unsigned long no;
+ unsigned long size;
+} lttng_stat_values_t;
+
+typedef struct {
+ lttng_stat_values_t carriers;
+ lttng_stat_values_t blocks;
+} lttng_carrier_stats_t;
+#endif
+
+
+/* Port and Driver Scheduling */
+
+TRACEPOINT_EVENT(
+ com_ericsson_otp,
+ driver_start,
+ TP_ARGS(
+ char*, pid,
+ char*, driver,
+ char*, port
+ ),
+ TP_FIELDS(
+ ctf_string(pid, pid)
+ ctf_string(driver, driver)
+ ctf_string(port, port)
+ )
+)
+
+TRACEPOINT_EVENT(
+ com_ericsson_otp,
+ driver_init,
+ TP_ARGS(
+ char*, driver,
+ int, major,
+ int, minor,
+ int, flags
+ ),
+ TP_FIELDS(
+ ctf_string(driver, driver)
+ ctf_integer(int, major, major)
+ ctf_integer(int, minor, minor)
+ ctf_integer(int, flags, flags)
+ )
+)
+
+TRACEPOINT_EVENT(
+ com_ericsson_otp,
+ driver_outputv,
+ TP_ARGS(
+ char*, pid,
+ char*, port,
+ char*, driver,
+ size_t, bytes
+ ),
+ TP_FIELDS(
+ ctf_string(pid, pid)
+ ctf_string(port, port)
+ ctf_string(driver, driver)
+ ctf_integer(size_t, bytes, bytes)
+ )
+)
+
+TRACEPOINT_EVENT(
+ com_ericsson_otp,
+ driver_output,
+ TP_ARGS(
+ char*, pid,
+ char*, port,
+ char*, driver,
+ size_t, bytes
+ ),
+ TP_FIELDS(
+ ctf_string(pid, pid)
+ ctf_string(port, port)
+ ctf_string(driver, driver)
+ ctf_integer(size_t, bytes, bytes)
+ )
+)
+
+TRACEPOINT_EVENT(
+ com_ericsson_otp,
+ driver_ready_input,
+ TP_ARGS(
+ char*, pid,
+ char*, port,
+ char*, driver
+ ),
+ TP_FIELDS(
+ ctf_string(pid, pid)
+ ctf_string(port, port)
+ ctf_string(driver, driver)
+ )
+)
+
+TRACEPOINT_EVENT(
+ com_ericsson_otp,
+ driver_ready_output,
+ TP_ARGS(
+ char*, pid,
+ char*, port,
+ char*, driver
+ ),
+ TP_FIELDS(
+ ctf_string(pid, pid)
+ ctf_string(port, port)
+ ctf_string(driver, driver)
+ )
+)
+
+TRACEPOINT_EVENT(
+ com_ericsson_otp,
+ driver_event,
+ TP_ARGS(
+ char*, pid,
+ char*, port,
+ char*, driver
+ ),
+ TP_FIELDS(
+ ctf_string(pid, pid)
+ ctf_string(port, port)
+ ctf_string(driver, driver)
+ )
+)
+
+TRACEPOINT_EVENT(
+ com_ericsson_otp,
+ driver_timeout,
+ TP_ARGS(
+ char*, pid,
+ char*, port,
+ char*, driver
+ ),
+ TP_FIELDS(
+ ctf_string(pid, pid)
+ ctf_string(port, port)
+ ctf_string(driver, driver)
+ )
+)
+
+TRACEPOINT_EVENT(
+ com_ericsson_otp,
+ driver_stop_select,
+ TP_ARGS(
+ char*, driver
+ ),
+ TP_FIELDS(
+ ctf_string(driver, driver)
+ )
+)
+
+TRACEPOINT_EVENT(
+ com_ericsson_otp,
+ driver_flush,
+ TP_ARGS(
+ char*, pid,
+ char*, port,
+ char*, driver
+ ),
+ TP_FIELDS(
+ ctf_string(pid, pid)
+ ctf_string(port, port)
+ ctf_string(driver, driver)
+ )
+)
+
+TRACEPOINT_EVENT(
+ com_ericsson_otp,
+ driver_stop,
+ TP_ARGS(
+ char*, pid,
+ char*, port,
+ char*, driver
+ ),
+ TP_FIELDS(
+ ctf_string(pid, pid)
+ ctf_string(port, port)
+ ctf_string(driver, driver)
+ )
+)
+
+TRACEPOINT_EVENT(
+ com_ericsson_otp,
+ driver_process_exit,
+ TP_ARGS(
+ char*, pid,
+ char*, port,
+ char*, driver
+ ),
+ TP_FIELDS(
+ ctf_string(pid, pid)
+ ctf_string(port, port)
+ ctf_string(driver, driver)
+ )
+)
+
+TRACEPOINT_EVENT(
+ com_ericsson_otp,
+ driver_ready_async,
+ TP_ARGS(
+ char*, pid,
+ char*, port,
+ char*, driver
+ ),
+ TP_FIELDS(
+ ctf_string(pid, pid)
+ ctf_string(port, port)
+ ctf_string(driver, driver)
+ )
+)
+
+TRACEPOINT_EVENT(
+ com_ericsson_otp,
+ driver_finish,
+ TP_ARGS(
+ char*, driver
+ ),
+ TP_FIELDS(
+ ctf_string(driver, driver)
+ )
+)
+
+TRACEPOINT_EVENT(
+ com_ericsson_otp,
+ driver_call,
+ TP_ARGS(
+ char*, pid,
+ char*, port,
+ char*, driver,
+ unsigned int, command,
+ size_t, bytes
+ ),
+ TP_FIELDS(
+ ctf_string(pid, pid)
+ ctf_string(port, port)
+ ctf_string(driver, driver)
+ ctf_integer(unsigned int, command, command)
+ ctf_integer(size_t, bytes, bytes)
+ )
+)
+
+TRACEPOINT_EVENT(
+ com_ericsson_otp,
+ driver_control,
+ TP_ARGS(
+ char*, pid,
+ char*, port,
+ char*, driver,
+ unsigned int, command,
+ size_t, bytes
+ ),
+ TP_FIELDS(
+ ctf_string(pid, pid)
+ ctf_string(port, port)
+ ctf_string(driver, driver)
+ ctf_integer(unsigned int, command, command)
+ ctf_integer(size_t, bytes, bytes)
+ )
+)
+
+/* Async pool */
+
+TRACEPOINT_EVENT(
+ com_ericsson_otp,
+ aio_pool_get,
+ TP_ARGS(
+ char*, port,
+ int, length
+ ),
+ TP_FIELDS(
+ ctf_string(port, port)
+ ctf_integer(int, length, length)
+ )
+)
+
+TRACEPOINT_EVENT(
+ com_ericsson_otp,
+ aio_pool_put,
+ TP_ARGS(
+ char*, port,
+ int, length
+ ),
+ TP_FIELDS(
+ ctf_string(port, port)
+ ctf_integer(int, length, length)
+ )
+)
+
+
+/* Memory Allocator */
+
+TRACEPOINT_EVENT(
+ com_ericsson_otp,
+ carrier_create,
+ TP_ARGS(
+ const char*, type,
+ int, instance,
+ unsigned long, size,
+ lttng_carrier_stats_t *, mbcs,
+ lttng_carrier_stats_t *, sbcs
+ ),
+ TP_FIELDS(
+ ctf_string(type, type)
+ ctf_integer(int, instance, instance)
+ ctf_integer(unsigned long, size, size)
+ ctf_integer(unsigned long, mbc_carriers, mbcs->carriers.no)
+ ctf_integer(unsigned long, mbc_carriers_size, mbcs->carriers.size)
+ ctf_integer(unsigned long, mbc_blocks, mbcs->blocks.no)
+ ctf_integer(unsigned long, mbc_blocks_size, mbcs->blocks.size)
+ ctf_integer(unsigned long, sbc_carriers, sbcs->carriers.no)
+ ctf_integer(unsigned long, sbc_carriers_size, sbcs->carriers.size)
+ ctf_integer(unsigned long, sbc_blocks, sbcs->blocks.no)
+ ctf_integer(unsigned long, sbc_blocks_size, sbcs->blocks.size)
+ )
+)
+
+
+TRACEPOINT_EVENT(
+ com_ericsson_otp,
+ carrier_destroy,
+ TP_ARGS(
+ const char*, type,
+ int, instance,
+ unsigned long, size,
+ lttng_carrier_stats_t *, mbcs,
+ lttng_carrier_stats_t *, sbcs
+ ),
+ TP_FIELDS(
+ ctf_string(type, type)
+ ctf_integer(int, instance, instance)
+ ctf_integer(unsigned long, size, size)
+ ctf_integer(unsigned long, mbc_carriers, mbcs->carriers.no)
+ ctf_integer(unsigned long, mbc_carriers_size, mbcs->carriers.size)
+ ctf_integer(unsigned long, mbc_blocks, mbcs->blocks.no)
+ ctf_integer(unsigned long, mbc_blocks_size, mbcs->blocks.size)
+ ctf_integer(unsigned long, sbc_carriers, sbcs->carriers.no)
+ ctf_integer(unsigned long, sbc_carriers_size, sbcs->carriers.size)
+ ctf_integer(unsigned long, sbc_blocks, sbcs->blocks.no)
+ ctf_integer(unsigned long, sbc_blocks_size, sbcs->blocks.size)
+ )
+)
+
+TRACEPOINT_EVENT(
+ com_ericsson_otp,
+ carrier_pool_put,
+ TP_ARGS(
+ const char*, name,
+ int, instance,
+ unsigned long, size
+ ),
+ TP_FIELDS(
+ ctf_string(type, name)
+ ctf_integer(int, instance, instance)
+ ctf_integer(unsigned long, size, size)
+ )
+)
+
+TRACEPOINT_EVENT(
+ com_ericsson_otp,
+ carrier_pool_get,
+ TP_ARGS(
+ const char*, name,
+ int, instance,
+ unsigned long, size
+ ),
+ TP_FIELDS(
+ ctf_string(type, name)
+ ctf_integer(int, instance, instance)
+ ctf_integer(unsigned long, size, size)
+ )
+)
+
+#endif /* __ERLANG_LTTNG_H__ */
+#include <lttng/tracepoint-event.h>
+#endif /* USE_LTTNG */
diff --git a/erts/emulator/beam/error.h b/erts/emulator/beam/error.h
index cba8672c68..6c33b12dd0 100644
--- a/erts/emulator/beam/error.h
+++ b/erts/emulator/beam/error.h
@@ -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/erts/emulator/beam/export.c b/erts/emulator/beam/export.c
index 581efe6eec..02c24557c1 100644
--- a/erts/emulator/beam/export.c
+++ b/erts/emulator/beam/export.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/erts/emulator/beam/export.h b/erts/emulator/beam/export.h
index a8bc9d2f66..8c81cbd410 100644
--- a/erts/emulator/beam/export.h
+++ b/erts/emulator/beam/export.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.
diff --git a/erts/emulator/beam/external.c b/erts/emulator/beam/external.c
index 58010dcb72..3c002d43a7 100644
--- a/erts/emulator/beam/external.c
+++ b/erts/emulator/beam/external.c
@@ -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.
@@ -51,7 +51,18 @@
#define MAX_STRING_LEN 0xffff
-#define is_valid_creation(Cre) ((unsigned)(Cre) < MAX_CREATION || (Cre) == INTERNAL_CREATION)
+/* MAX value for the creation field in pid, port and reference
+ for the local node and for the current external format.
+
+ Larger creation values than this are allowed in external pid, port and refs
+ encoded with NEW_PID_EXT, NEW_PORT_EXT and NEWER_REFERENCE_EXT.
+ The point here is to prepare for future upgrade to 32-bit creation.
+ OTP-19 (erts-8.0) can handle big creation values from other (newer) nodes,
+ but do not use big creation values for the local node yet,
+ as we still may have to communicate with older nodes.
+*/
+#define ERTS_MAX_LOCAL_CREATION (3)
+#define is_valid_creation(Cre) ((unsigned)(Cre) <= ERTS_MAX_LOCAL_CREATION)
#undef ERTS_DEBUG_USE_DIST_SEP
#ifdef DEBUG
@@ -97,7 +108,7 @@ static byte* enc_pid(ErtsAtomCacheMap *, Eterm, byte*, Uint32);
struct B2TContext_t;
static byte* dec_term(ErtsDistExternal*, ErtsHeapFactory*, byte*, Eterm*, struct B2TContext_t*);
static byte* dec_atom(ErtsDistExternal *, byte*, Eterm*);
-static byte* dec_pid(ErtsDistExternal *, ErtsHeapFactory*, byte*, Eterm*);
+static byte* dec_pid(ErtsDistExternal *, ErtsHeapFactory*, byte*, Eterm*, byte tag);
static Sint decoded_size(byte *ep, byte* endp, int internal_tags, struct B2TContext_t*);
static BIF_RETTYPE term_to_binary_trap_1(BIF_ALIST_1);
@@ -570,7 +581,7 @@ void erts_encode_ext(Eterm term, byte **ext)
*ep++ = VERSION_MAGIC;
ep = enc_term(NULL, term, ep, TERM_TO_BINARY_DFLAGS, NULL);
if (!ep)
- erl_exit(ERTS_ABORT_EXIT,
+ erts_exit(ERTS_ABORT_EXIT,
"%s:%d:erts_encode_ext(): Internal data structure error\n",
__FILE__, __LINE__);
*ext = ep;
@@ -967,19 +978,24 @@ erts_decode_dist_ext(ErtsHeapFactory* factory,
return THE_NON_VALUE;
}
-Eterm erts_decode_ext(ErtsHeapFactory* factory, byte **ext)
+Eterm erts_decode_ext(ErtsHeapFactory* factory, byte **ext, Uint32 flags)
{
+ ErtsDistExternal ede, *edep;
Eterm obj;
byte *ep = *ext;
if (*ep++ != VERSION_MAGIC) {
erts_factory_undo(factory);
return THE_NON_VALUE;
}
- ep = dec_term(NULL, factory, ep, &obj, NULL);
+ if (flags) {
+ ASSERT(flags == ERTS_DIST_EXT_BTT_SAFE);
+ ede.flags = flags; /* a dummy struct just for the flags */
+ edep = &ede;
+ } else {
+ edep = NULL;
+ }
+ ep = dec_term(edep, factory, ep, &obj, NULL);
if (!ep) {
-#ifdef DEBUG
- bin_write(ERTS_PRINT_STDERR,NULL,*ext,500);
-#endif
return THE_NON_VALUE;
}
*ext = ep;
@@ -1559,7 +1575,7 @@ static BIF_RETTYPE binary_to_term_int(Process* p, Uint32 flags, Eterm bin, Binar
b2t_destroy_context(ctx);
if (ctx->u.dc.factory.hp > ctx->u.dc.factory.hp_end) {
- erl_exit(1, ":%s, line %d: heap overrun by %d words(s)\n",
+ erts_exit(ERTS_ERROR_EXIT, ":%s, line %d: heap overrun by %d words(s)\n",
__FILE__, __LINE__, ctx->u.dc.factory.hp - ctx->u.dc.factory.hp_end);
}
erts_factory_close(&ctx->u.dc.factory);
@@ -1708,12 +1724,12 @@ erts_term_to_binary_simple(Process* p, Eterm Term, Uint size, int level, Uint fl
if ((endp = enc_term(NULL, Term, bytes, flags, NULL))
== NULL) {
- erl_exit(1, "%s, line %d: bad term: %x\n",
+ erts_exit(ERTS_ERROR_EXIT, "%s, line %d: bad term: %x\n",
__FILE__, __LINE__, Term);
}
real_size = endp - bytes;
if (real_size > size) {
- erl_exit(1, "%s, line %d: buffer overflow: %d word(s)\n",
+ erts_exit(ERTS_ERROR_EXIT, "%s, line %d: buffer overflow: %d word(s)\n",
__FILE__, __LINE__, real_size - size);
}
@@ -1753,12 +1769,12 @@ erts_term_to_binary_simple(Process* p, Eterm Term, Uint size, int level, Uint fl
bytes[0] = VERSION_MAGIC;
if ((endp = enc_term(NULL, Term, bytes+1, flags, NULL))
== NULL) {
- erl_exit(1, "%s, line %d: bad term: %x\n",
+ erts_exit(ERTS_ERROR_EXIT, "%s, line %d: bad term: %x\n",
__FILE__, __LINE__, Term);
}
real_size = endp - bytes;
if (real_size > size) {
- erl_exit(1, "%s, line %d: buffer overflow: %d word(s)\n",
+ erts_exit(ERTS_ERROR_EXIT, "%s, line %d: buffer overflow: %d word(s)\n",
__FILE__, __LINE__, endp - (bytes + size));
}
return erts_realloc_binary(bin, real_size);
@@ -2147,12 +2163,13 @@ static byte*
enc_pid(ErtsAtomCacheMap *acmp, Eterm pid, byte* ep, Uint32 dflags)
{
Uint on, os;
+ Eterm sysname = ((is_internal_pid(pid) && (dflags & DFLAG_INTERNAL_TAGS))
+ ? am_Empty : pid_node_name(pid));
+ Uint32 creation = pid_creation(pid);
+ byte* tagp = ep++;
- *ep++ = PID_EXT;
/* insert atom here containing host and sysname */
- ep = enc_atom(acmp, pid_node_name(pid), ep, dflags);
-
- /* two bytes for each number and serial */
+ ep = enc_atom(acmp, sysname, ep, dflags);
on = pid_number(pid);
os = pid_serial(pid);
@@ -2161,8 +2178,15 @@ enc_pid(ErtsAtomCacheMap *acmp, Eterm pid, byte* ep, Uint32 dflags)
ep += 4;
put_int32(os, ep);
ep += 4;
- *ep++ = (is_internal_pid(pid) && (dflags & DFLAG_INTERNAL_TAGS)) ?
- INTERNAL_CREATION : pid_creation(pid);
+ if (creation <= ERTS_MAX_LOCAL_CREATION) {
+ *tagp = PID_EXT;
+ *ep++ = creation;
+ } else {
+ ASSERT(is_external_pid(pid));
+ *tagp = NEW_PID_EXT;
+ put_int32(creation, ep);
+ ep += 4;
+ }
return ep;
}
@@ -2242,27 +2266,27 @@ dec_atom(ErtsDistExternal *edep, byte* ep, Eterm* objp)
return ep;
}
-static ERTS_INLINE ErlNode* dec_get_node(Eterm sysname, Uint creation)
+static ERTS_INLINE ErlNode* dec_get_node(Eterm sysname, Uint32 creation)
{
- switch (creation) {
- case INTERNAL_CREATION:
+ if (sysname == am_Empty) /* && DFLAG_INTERNAL_TAGS */
return erts_this_node;
- case ORIG_CREATION:
- if (sysname == erts_this_node->sysname) {
- creation = erts_this_node->creation;
- }
- }
+
+ if (sysname == erts_this_node->sysname
+ && (creation == erts_this_node->creation || creation == ORIG_CREATION))
+ return erts_this_node;
+
return erts_find_or_insert_node(sysname,creation);
}
static byte*
-dec_pid(ErtsDistExternal *edep, ErtsHeapFactory* factory, byte* ep, Eterm* objp)
+dec_pid(ErtsDistExternal *edep, ErtsHeapFactory* factory, byte* ep,
+ Eterm* objp, byte tag)
{
Eterm sysname;
Uint data;
Uint num;
Uint ser;
- Uint cre;
+ Uint32 cre;
ErlNode *node;
*objp = NIL; /* In case we fail, don't leave a hole in the heap */
@@ -2278,12 +2302,19 @@ dec_pid(ErtsDistExternal *edep, ErtsHeapFactory* factory, byte* ep, Eterm* objp)
ep += 4;
if (ser > ERTS_MAX_PID_SERIAL)
return NULL;
- cre = get_int8(ep);
- ep += 1;
- if (!is_valid_creation(cre)) {
- return NULL;
+ if (tag == PID_EXT) {
+ cre = get_int8(ep);
+ ep += 1;
+ if (!is_valid_creation(cre)) {
+ return NULL;
+ }
+ } else {
+ ASSERT(tag == NEW_PID_EXT);
+ cre = get_int32(ep);
+ ep += 4;
}
+
data = make_pid_data(ser, num);
/*
@@ -2523,16 +2554,26 @@ enc_term_int(TTBEncodeContext* ctx, ErtsAtomCacheMap *acmp, Eterm obj, byte* ep,
case REF_DEF:
case EXTERNAL_REF_DEF: {
Uint32 *ref_num;
+ Eterm sysname = (((dflags & DFLAG_INTERNAL_TAGS) && is_internal_ref(obj))
+ ? am_Empty : ref_node_name(obj));
+ Uint32 creation = ref_creation(obj);
+ byte* tagp = ep++;
ASSERT(dflags & DFLAG_EXTENDED_REFERENCES);
- *ep++ = NEW_REFERENCE_EXT;
i = ref_no_of_numbers(obj);
put_int16(i, ep);
ep += 2;
- ep = enc_atom(acmp,ref_node_name(obj),ep,dflags);
- *ep++ = ((dflags & DFLAG_INTERNAL_TAGS) && is_internal_ref(obj)) ?
- INTERNAL_CREATION : ref_creation(obj);
+ ep = enc_atom(acmp, sysname, ep, dflags);
+ if (creation <= ERTS_MAX_LOCAL_CREATION) {
+ *tagp = NEW_REFERENCE_EXT;
+ *ep++ = creation;
+ } else {
+ ASSERT(is_external_ref(obj));
+ *tagp = NEWER_REFERENCE_EXT;
+ put_int32(creation, ep);
+ ep += 4;
+ }
ref_num = ref_numbers(obj);
for (j = 0; j < i; j++) {
put_int32(ref_num[j], ep);
@@ -2541,17 +2582,27 @@ enc_term_int(TTBEncodeContext* ctx, ErtsAtomCacheMap *acmp, Eterm obj, byte* ep,
break;
}
case PORT_DEF:
- case EXTERNAL_PORT_DEF:
+ case EXTERNAL_PORT_DEF: {
+ Eterm sysname = (((dflags & DFLAG_INTERNAL_TAGS) && is_internal_port(obj))
+ ? am_Empty : port_node_name(obj));
+ Uint32 creation = port_creation(obj);
+ byte* tagp = ep++;
- *ep++ = PORT_EXT;
- ep = enc_atom(acmp,port_node_name(obj),ep,dflags);
+ ep = enc_atom(acmp, sysname, ep, dflags);
j = port_number(obj);
put_int32(j, ep);
ep += 4;
- *ep++ = ((dflags & DFLAG_INTERNAL_TAGS) && is_internal_port(obj)) ?
- INTERNAL_CREATION : port_creation(obj);
+ if (creation <= ERTS_MAX_LOCAL_CREATION) {
+ *tagp = PORT_EXT;
+ *ep++ = creation;
+ } else {
+ ASSERT(is_external_port(obj));
+ *tagp = NEW_PORT_EXT;
+ put_int32(creation, ep);
+ ep += 4;
+ }
break;
-
+ }
case LIST_DEF:
{
int is_str;
@@ -2631,7 +2682,7 @@ enc_term_int(TTBEncodeContext* ctx, ErtsAtomCacheMap *acmp, Eterm obj, byte* ep,
ASSERT(node_sz < 17);
break;
default:
- erl_exit(1, "bad header\r\n");
+ erts_exit(ERTS_ERROR_EXIT, "bad header\r\n");
}
ptr++;
@@ -3255,20 +3306,23 @@ dec_term_atom_common:
hp += FLOAT_SIZE_OBJECT;
break;
}
- case PID_EXT:
+ case PID_EXT:
+ case NEW_PID_EXT:
factory->hp = hp;
- ep = dec_pid(edep, factory, ep, objp);
+ ep = dec_pid(edep, factory, ep, objp, ep[-1]);
hp = factory->hp;
if (ep == NULL) {
goto error;
}
break;
- case PORT_EXT:
+ case PORT_EXT:
+ case NEW_PORT_EXT:
{
Eterm sysname;
ErlNode *node;
Uint num;
- Uint cre;
+ Uint32 cre;
+ byte tag = ep[-1];
if ((ep = dec_atom(edep, ep, &sysname)) == NULL) {
goto error;
@@ -3277,12 +3331,17 @@ dec_term_atom_common:
goto error;
}
ep += 4;
- cre = get_int8(ep);
- ep++;
- if (!is_valid_creation(cre)) {
- goto error;
- }
-
+ if (tag == PORT_EXT) {
+ cre = get_int8(ep);
+ ep++;
+ if (!is_valid_creation(cre)) {
+ goto error;
+ }
+ }
+ else {
+ cre = get_int32(ep);
+ ep += 4;
+ }
node = dec_get_node(sysname, cre);
if(node == erts_this_node) {
*objp = make_internal_port(num);
@@ -3307,7 +3366,7 @@ dec_term_atom_common:
Eterm sysname;
ErlNode *node;
int i;
- Uint cre;
+ Uint32 cre;
Uint32 *ref_num;
Uint32 r0;
Uint ref_words;
@@ -3331,9 +3390,6 @@ dec_term_atom_common:
ref_words = get_int16(ep);
ep += 2;
- if (ref_words > ERTS_MAX_REF_NUMBERS)
- goto error;
-
if ((ep = dec_atom(edep, ep, &sysname)) == NULL)
goto error;
@@ -3346,8 +3402,23 @@ dec_term_atom_common:
ep += 4;
if (r0 >= MAX_REFERENCE)
goto error;
+ goto ref_ext_common;
+
+ case NEWER_REFERENCE_EXT:
+ ref_words = get_int16(ep);
+ ep += 2;
+
+ if ((ep = dec_atom(edep, ep, &sysname)) == NULL)
+ goto error;
+
+ cre = get_int32(ep);
+ ep += 4;
+ r0 = get_int32(ep); /* allow full word */
+ ep += 4;
ref_ext_common:
+ if (ref_words > ERTS_MAX_REF_NUMBERS)
+ goto error;
node = dec_get_node(sysname, cre);
if(node == erts_this_node) {
@@ -3701,9 +3772,9 @@ dec_term_atom_common:
*objp = make_fun(funp);
/* Creator pid */
- if (*ep != PID_EXT
- || (ep = dec_pid(edep, factory, ++ep,
- &funp->creator))==NULL) {
+ if ((*ep != PID_EXT && *ep != NEW_PID_EXT)
+ || (ep = dec_pid(edep, factory, ep+1,
+ &funp->creator, *ep))==NULL) {
goto error;
}
@@ -3887,9 +3958,13 @@ error:
* Must unlink all off-heap objects that may have been
* linked into the process.
*/
- if (factory->hp < hp) { /* Sometimes we used hp and sometimes factory->hp */
- factory->hp = hp; /* the largest must be the freshest */
+ if (factory->mode != FACTORY_CLOSED) {
+ if (factory->hp < hp) { /* Sometimes we used hp and sometimes factory->hp */
+ factory->hp = hp; /* the largest must be the freshest */
+ }
}
+ else ASSERT(factory->hp == hp);
+
error_hamt:
erts_factory_undo(factory);
PSTACK_DESTROY(hamt_array);
@@ -4005,20 +4080,29 @@ encode_size_struct_int(TTBSizeContext* ctx, ErtsAtomCacheMap *acmp, Eterm obj,
else
result += 1 + 4 + 1 + i; /* tag,size,sign,digits */
break;
+ case EXTERNAL_PID_DEF:
+ if (external_pid_creation(obj) > ERTS_MAX_LOCAL_CREATION)
+ result += 3;
+ /*fall through*/
case PID_DEF:
- case EXTERNAL_PID_DEF:
result += (1 + encode_size_struct2(acmp, pid_node_name(obj), dflags) +
4 + 4 + 1);
break;
+ case EXTERNAL_REF_DEF:
+ if (external_ref_creation(obj) > ERTS_MAX_LOCAL_CREATION)
+ result += 3;
+ /*fall through*/
case REF_DEF:
- case EXTERNAL_REF_DEF:
ASSERT(dflags & DFLAG_EXTENDED_REFERENCES);
i = ref_no_of_numbers(obj);
result += (1 + 2 + encode_size_struct2(acmp, ref_node_name(obj), dflags) +
1 + 4*i);
break;
- case PORT_DEF:
- case EXTERNAL_PORT_DEF:
+ case EXTERNAL_PORT_DEF:
+ if (external_port_creation(obj) > ERTS_MAX_LOCAL_CREATION)
+ result += 3;
+ /*fall through*/
+ case PORT_DEF:
result += (1 + encode_size_struct2(acmp, port_node_name(obj), dflags) +
4 + 1);
break;
@@ -4086,7 +4170,7 @@ encode_size_struct_int(TTBSizeContext* ctx, ErtsAtomCacheMap *acmp, Eterm obj,
ASSERT(node_sz < 17);
break;
default:
- erl_exit(1, "bad header\r\n");
+ erts_exit(ERTS_ERROR_EXIT, "bad header\r\n");
}
ptr++;
@@ -4174,7 +4258,7 @@ encode_size_struct_int(TTBSizeContext* ctx, ErtsAtomCacheMap *acmp, Eterm obj,
break;
default:
- erl_exit(1,"Internal data structure error (in encode_size_struct2)%x\n",
+ erts_exit(ERTS_ERROR_EXIT,"Internal data structure error (in encode_size_struct2)%x\n",
obj);
}
@@ -4345,19 +4429,32 @@ init_done:
SKIP(1+atom_extra_skip);
atom_extra_skip = 0;
break;
- case PID_EXT:
+ case NEW_PID_EXT:
+ atom_extra_skip = 12;
+ goto case_PID;
+ case PID_EXT:
atom_extra_skip = 9;
+ case_PID:
/* In case it is an external pid */
heap_size += EXTERNAL_THING_HEAD_SIZE + 1;
terms++;
break;
- case PORT_EXT:
+ case NEW_PORT_EXT:
+ atom_extra_skip = 8;
+ goto case_PORT;
+ case PORT_EXT:
atom_extra_skip = 5;
+ case_PORT:
/* In case it is an external port */
heap_size += EXTERNAL_THING_HEAD_SIZE + 1;
terms++;
break;
- case NEW_REFERENCE_EXT:
+ case NEWER_REFERENCE_EXT:
+ atom_extra_skip = 4;
+ goto case_NEW_REFERENCE;
+ case NEW_REFERENCE_EXT:
+ atom_extra_skip = 1;
+ case_NEW_REFERENCE:
{
int id_words;
@@ -4368,7 +4465,7 @@ init_done:
goto error;
ep += 2;
- atom_extra_skip = 1 + 4*id_words;
+ atom_extra_skip += 4*id_words;
/* In case it is an external ref */
#if defined(ARCH_64)
heap_size += EXTERNAL_THING_HEAD_SIZE + id_words/2 + 1;
diff --git a/erts/emulator/beam/external.h b/erts/emulator/beam/external.h
index d12051c6b4..f00426cc16 100644
--- a/erts/emulator/beam/external.h
+++ b/erts/emulator/beam/external.h
@@ -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,8 +18,6 @@
* %CopyrightEnd%
*/
-/* Same order as the ordering of terms in erlang */
-
/* Since there are 255 different External tag values to choose from
There is no reason to not be extravagant.
Hence, the different tags for large/small tuple e.t.c
@@ -37,9 +35,12 @@
#define SMALL_ATOM_EXT 's'
#define REFERENCE_EXT 'e'
#define NEW_REFERENCE_EXT 'r'
+#define NEWER_REFERENCE_EXT 'Z'
#define PORT_EXT 'f'
+#define NEW_PORT_EXT 'Y'
#define NEW_FLOAT_EXT 'F'
#define PID_EXT 'g'
+#define NEW_PID_EXT 'X'
#define SMALL_TUPLE_EXT 'h'
#define LARGE_TUPLE_EXT 'i'
#define NIL_EXT 'j'
@@ -191,7 +192,7 @@ Eterm erts_decode_dist_ext(ErtsHeapFactory* factory, ErtsDistExternal *);
Sint erts_decode_ext_size(byte*, Uint);
Sint erts_decode_ext_size_ets(byte*, Uint);
-Eterm erts_decode_ext(ErtsHeapFactory*, byte**);
+Eterm erts_decode_ext(ErtsHeapFactory*, byte**, Uint32 flags);
Eterm erts_decode_ext_ets(ErtsHeapFactory*, byte*);
Eterm erts_term_to_binary(Process* p, Eterm Term, int level, Uint flags);
diff --git a/erts/emulator/beam/global.h b/erts/emulator/beam/global.h
index 956efa5e36..b76b9cd874 100644
--- a/erts/emulator/beam/global.h
+++ b/erts/emulator/beam/global.h
@@ -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,6 +44,8 @@
#include "erl_port.h"
#include "erl_gc.h"
+struct enif_func_t;
+
struct enif_environment_t /* ErlNifEnv */
{
struct erl_module_nif* mod_nif;
@@ -54,14 +56,22 @@ struct enif_environment_t /* ErlNifEnv */
int fpe_was_unmasked;
struct enif_tmp_obj_t* tmp_obj_list;
int exception_thrown; /* boolean */
+ Process *tracee;
+ int exiting; /* boolean (dirty nifs might return in exiting state) */
};
extern void erts_pre_nif(struct enif_environment_t*, Process*,
- struct erl_module_nif*);
+ struct erl_module_nif*, Process* tracee);
extern void erts_post_nif(struct enif_environment_t* env);
extern Eterm erts_nif_taints(Process* p);
extern void erts_print_nif_taints(int to, void* to_arg);
void erts_unload_nif(struct erl_module_nif* nif);
extern void erl_nif_init(void);
+extern int erts_nif_get_funcs(struct erl_module_nif*,
+ struct enif_func_t **funcs);
+extern Eterm erts_nif_call_function(Process *p, Process *tracee,
+ struct erl_module_nif*,
+ struct enif_func_t *,
+ int argc, Eterm *argv);
/* Driver handle (wrapper for old plain handle) */
#define ERL_DE_OK 0
@@ -425,7 +435,7 @@ void erl_grow_estack(ErtsEStack*, Uint need);
#define ESTACK_CHANGE_ALLOCATOR(s,t) \
do { \
if ((s).start != ESTK_DEF_STACK(s)) { \
- erl_exit(1, "Internal error - trying to change allocator " \
+ erts_exit(ERTS_ERROR_EXIT, "Internal error - trying to change allocator " \
"type of active estack\n"); \
} \
(s).alloc_type = (t); \
@@ -586,7 +596,7 @@ do { \
#define WSTACK_CHANGE_ALLOCATOR(s,t) \
do { \
if (s.wstart != WSTK_DEF_STACK(s)) { \
- erl_exit(1, "Internal error - trying to change allocator " \
+ erts_exit(ERTS_ERROR_EXIT, "Internal error - trying to change allocator " \
"type of active wstack\n"); \
} \
s.alloc_type = (t); \
@@ -778,7 +788,7 @@ ErtsPStack s = { (byte*)PSTK_DEF_STACK(s), /* pstart */ \
#define PSTACK_CHANGE_ALLOCATOR(s,t) \
do { \
if (s.pstart != (byte*)PSTK_DEF_STACK(s)) { \
- erl_exit(1, "Internal error - trying to change allocator " \
+ erts_exit(ERTS_ERROR_EXIT, "Internal error - trying to change allocator " \
"type of active pstack\n"); \
} \
s.alloc_type = (t); \
@@ -937,7 +947,7 @@ ERTS_GLB_INLINE Eterm erts_equeue_get(ErtsEQueue *q) {
void erts_emasculate_writable_binary(ProcBin* pb);
Eterm erts_new_heap_binary(Process *p, byte *buf, int len, byte** datap);
-Eterm erts_new_mso_binary(Process*, byte*, int);
+Eterm erts_new_mso_binary(Process*, byte*, Uint);
Eterm new_binary(Process*, byte*, Uint);
Eterm erts_realloc_binary(Eterm bin, size_t size);
@@ -988,7 +998,7 @@ Eterm erl_is_function(Process* p, Eterm arg1, Eterm arg2);
#define ERTS_CPC_ALLOW_GC (1 << 0)
#define ERTS_CPC_COPY_LITERALS (1 << 1)
#define ERTS_CPC_ALL (ERTS_CPC_ALLOW_GC | ERTS_CPC_COPY_LITERALS)
-Eterm erts_check_process_code(Process *c_p, Eterm module, Uint flags, int *redsp);
+Eterm erts_check_process_code(Process *c_p, Eterm module, Uint flags, int *redsp, int fcalls);
typedef struct {
Eterm *ptr;
@@ -1048,8 +1058,8 @@ double erts_get_positive_zero_float(void);
/* config.c */
-__decl_noreturn void __noreturn erl_exit(int n, char*, ...);
-__decl_noreturn void __noreturn erl_exit_flush_async(int n, char*, ...);
+__decl_noreturn void __noreturn erts_exit(int n, char*, ...);
+__decl_noreturn void __noreturn erts_flush_async_exit(int n, char*, ...);
void erl_error(char*, va_list);
/* This controls whether sharing-preserving copy is used by Erlang */
@@ -1474,9 +1484,19 @@ do { \
#define MatchSetGetSource(MPSP) erts_match_set_get_source(MPSP)
-extern Binary *erts_match_set_compile(Process *p, Eterm matchexpr);
+extern Binary *erts_match_set_compile(Process *p, Eterm matchexpr, Eterm MFA);
Eterm erts_match_set_lint(Process *p, Eterm matchexpr);
extern void erts_match_set_release_result(Process* p);
+ERTS_GLB_INLINE void erts_match_set_release_result_trace(Process* p, Eterm);
+
+#if ERTS_GLB_INLINE_INCL_FUNC_DEF
+ERTS_GLB_INLINE
+void erts_match_set_release_result_trace(Process* p, Eterm pam_result)
+{
+ if (is_not_immed(pam_result))
+ erts_match_set_release_result(p);
+}
+#endif /* ERTS_GLB_INLINE_INCL_FUNC_DEF */
enum erts_pam_run_flags {
ERTS_PAM_TMP_RESULT=1,
@@ -1484,10 +1504,12 @@ enum erts_pam_run_flags {
ERTS_PAM_CONTIGUOUS_TUPLE=4,
ERTS_PAM_IGNORE_TRACE_SILENT=8
};
-extern Eterm erts_match_set_run(Process *p, Binary *mpsp,
- Eterm *args, int num_args,
- enum erts_pam_run_flags in_flags,
- Uint32 *return_flags);
+extern Eterm erts_match_set_run_trace(Process *p,
+ Process *self,
+ Binary *mpsp,
+ Eterm *args, int num_args,
+ enum erts_pam_run_flags in_flags,
+ Uint32 *return_flags);
extern Eterm erts_match_set_get_source(Binary *mpsp);
extern void erts_match_prog_foreach_offheap(Binary *b,
void (*)(ErlOffHeap *, void *),
@@ -1532,10 +1554,15 @@ ERTS_GLB_INLINE void dtrace_fun_decode(Process *process,
ERTS_GLB_INLINE void
dtrace_pid_str(Eterm pid, char *process_buf)
{
- erts_snprintf(process_buf, DTRACE_TERM_BUF_SIZE, "<%lu.%lu.%lu>",
- pid_channel_no(pid),
- pid_number(pid),
- pid_serial(pid));
+ if (is_pid(pid))
+ erts_snprintf(process_buf, DTRACE_TERM_BUF_SIZE, "<%lu.%lu.%lu>",
+ pid_channel_no(pid),
+ pid_number(pid),
+ pid_serial(pid));
+ else if (is_port(pid))
+ erts_snprintf(process_buf, DTRACE_TERM_BUF_SIZE, "#Port<%lu.%lu>",
+ port_channel_no(pid),
+ port_number(pid));
}
ERTS_GLB_INLINE void
@@ -1547,9 +1574,7 @@ dtrace_proc_str(Process *process, char *process_buf)
ERTS_GLB_INLINE void
dtrace_port_str(Port *port, char *port_buf)
{
- erts_snprintf(port_buf, DTRACE_TERM_BUF_SIZE, "#Port<%lu.%lu>",
- port_channel_no(port->common.id),
- port_number(port->common.id));
+ dtrace_pid_str(port->common.id, port_buf);
}
ERTS_GLB_INLINE void
diff --git a/erts/emulator/beam/hash.c b/erts/emulator/beam/hash.c
index 5a0b93f693..e255b961f1 100644
--- a/erts/emulator/beam/hash.c
+++ b/erts/emulator/beam/hash.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/erts/emulator/beam/hash.h b/erts/emulator/beam/hash.h
index e94aaa0a84..9f773d8faa 100644
--- a/erts/emulator/beam/hash.h
+++ b/erts/emulator/beam/hash.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/erts/emulator/beam/index.c b/erts/emulator/beam/index.c
index 06d0b5123d..26d6c04ea0 100644
--- a/erts/emulator/beam/index.c
+++ b/erts/emulator/beam/index.c
@@ -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.
@@ -84,7 +84,7 @@ index_put_entry(IndexTable* t, void* tmpl)
Uint sz;
if (ix >= t->limit) {
/* A core dump is unnecessary */
- erl_exit(ERTS_DUMP_EXIT, "no more index entries in %s (max=%d)\n",
+ erts_exit(ERTS_DUMP_EXIT, "no more index entries in %s (max=%d)\n",
t->htable.name, t->limit);
}
sz = INDEX_PAGE_SIZE*sizeof(IndexSlot*);
@@ -123,7 +123,7 @@ void erts_index_merge(Hash* src, IndexTable* dst)
ix = dst->entries++;
if (ix >= dst->size) {
if (ix >= dst->limit) {
- erl_exit(1, "no more index entries in %s (max=%d)\n",
+ erts_exit(ERTS_ERROR_EXIT, "no more index entries in %s (max=%d)\n",
dst->htable.name, dst->limit);
}
sz = INDEX_PAGE_SIZE*sizeof(IndexSlot*);
diff --git a/erts/emulator/beam/index.h b/erts/emulator/beam/index.h
index 99b2bdfab0..218779c33b 100644
--- a/erts/emulator/beam/index.h
+++ b/erts/emulator/beam/index.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.
diff --git a/erts/emulator/beam/io.c b/erts/emulator/beam/io.c
index 41b0fcdd1b..0377f6cb5e 100644
--- a/erts/emulator/beam/io.c
+++ b/erts/emulator/beam/io.c
@@ -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.
@@ -47,6 +47,7 @@
#define ERTS_WANT_EXTERNAL_TAGS
#include "external.h"
#include "dtrace-wrapper.h"
+#include "lttng-wrapper.h"
#include "erl_map.h"
#include "erl_bif_unique.h"
#include "erl_hl_timer.h"
@@ -87,7 +88,7 @@ int erts_port_parallelism = 0;
static erts_atomic64_t bytes_in;
static erts_atomic64_t bytes_out;
-static void deliver_result(Eterm sender, Eterm pid, Eterm res);
+static void deliver_result(Port *p, Eterm sender, Eterm pid, Eterm res);
static int init_driver(erts_driver_t *, ErlDrvEntry *, DE_Handle *);
static void terminate_port(Port *p);
static void pdl_init(void);
@@ -211,6 +212,7 @@ static ERTS_INLINE void
kill_port(Port *pp)
{
ERTS_SMP_LC_ASSERT(erts_lc_is_port_locked(pp));
+ ERTS_TRACER_CLEAR(&ERTS_TRACER(pp));
erts_ptab_delete_element(&erts_port, &pp->common); /* Time of death */
erts_port_task_free_port(pp);
/* In non-smp case the port structure may have been deallocated now */
@@ -397,13 +399,13 @@ static Port *create_port(char *name,
prt->common.u.alive.reg = NULL;
ERTS_PTMR_INIT(prt);
erts_port_task_handle_init(&prt->timeout_task);
- prt->psd = NULL;
+ erts_smp_atomic_init_nob(&prt->psd, (erts_aint_t) NULL);
prt->async_open_port = NULL;
prt->drv_data = (SWord) 0;
prt->os_pid = -1;
/* Set default tracing */
- erts_get_default_tracing(&ERTS_TRACE_FLAGS(prt), &ERTS_TRACER_PROC(prt));
+ erts_get_default_port_tracing(&ERTS_TRACE_FLAGS(prt), &ERTS_TRACER(prt));
ERTS_CT_ASSERT(offsetof(Port,common) == 0);
@@ -708,7 +710,7 @@ erts_open_driver(erts_driver_t* driver, /* Pointer to driver. */
if (driver->start) {
ERTS_MSACC_PUSH_STATE_M();
if (IS_TRACED_FL(port, F_TRACE_SCHED_PORTS)) {
- trace_sched_ports_where(port, am_in, am_start);
+ trace_sched_ports_where(port, am_in, am_open);
}
port->caller = pid;
#ifdef USE_VM_PROBES
@@ -717,7 +719,19 @@ erts_open_driver(erts_driver_t* driver, /* Pointer to driver. */
DTRACE3(driver_start, process_str, driver->name, port_str);
}
#endif
+
ERTS_MSACC_SET_STATE_CACHED_M(ERTS_MSACC_STATE_PORT);
+
+#ifdef USE_LTTNG_VM_TRACEPOINTS
+ if (LTTNG_ENABLED(driver_start)) {
+ lttng_decl_portbuf(port_str);
+ lttng_decl_procbuf(proc_str);
+ lttng_pid_to_str(pid, proc_str);
+ lttng_port_to_str(port, port_str);
+ LTTNG3(driver_start, proc_str, driver->name, port_str);
+ }
+#endif
+
fpe_was_unmasked = erts_block_fpe();
drv_data = (*driver->start)(ERTS_Port2ErlDrvPort(port), name, opts);
if (((SWord) drv_data) == -1)
@@ -740,7 +754,7 @@ erts_open_driver(erts_driver_t* driver, /* Pointer to driver. */
ERTS_MSACC_POP_STATE_M();
port->caller = NIL;
if (IS_TRACED_FL(port, F_TRACE_SCHED_PORTS)) {
- trace_sched_ports_where(port, am_out, am_start);
+ trace_sched_ports_where(port, am_out, am_open);
}
#ifdef ERTS_SMP
if (port->xports)
@@ -1287,7 +1301,7 @@ try_imm_drv_call(ErtsTryImmDrvCallState *sp)
reds_left_in = CONTEXT_REDS/10;
else {
if (IS_TRACED_FL(c_p, F_TRACE_SCHED_PROCS))
- trace_virtual_sched(c_p, am_out);
+ trace_sched(c_p, ERTS_PROC_LOCK_MAIN, am_out);
/*
* No status lock held while sending runnable
* proc trace messages. It is however not needed
@@ -1371,7 +1385,7 @@ finalize_imm_drv_call(ErtsTryImmDrvCallState *sp)
}
if (IS_TRACED_FL(c_p, F_TRACE_SCHED_PROCS))
- trace_virtual_sched(c_p, am_in);
+ trace_sched(c_p, ERTS_PROC_LOCK_MAIN, am_in);
/*
* No status lock held while sending runnable
* proc trace messages. It is however not needed
@@ -1418,10 +1432,11 @@ finalize_force_imm_drv_call(ErtsTryImmDrvCallState *sp)
static ERTS_INLINE void
queue_port_sched_op_reply(Process *rp,
- ErtsProcLocks *rp_locksp,
+ ErtsProcLocks rp_locks,
ErtsHeapFactory* factory,
Uint32 *ref_num,
- Eterm msg)
+ Eterm msg,
+ Port* prt)
{
Eterm* hp = erts_produce_heap(factory, ERTS_QUEUE_PORT_SCHED_OP_REPLY_SIZE, 0);
Eterm ref;
@@ -1434,11 +1449,12 @@ queue_port_sched_op_reply(Process *rp,
erts_factory_trim_and_close(factory, &msg, 1);
- erts_queue_message(rp, rp_locksp, factory->message, msg, NIL);
+ erts_queue_message(rp, rp_locks, factory->message, msg,
+ prt ? prt->common.id : am_undefined);
}
static void
-port_sched_op_reply(Eterm to, Uint32 *ref_num, Eterm msg)
+port_sched_op_reply(Eterm to, Uint32 *ref_num, Eterm msg, Port* prt)
{
Process *rp = erts_proc_lookup_raw(to);
if (rp) {
@@ -1464,10 +1480,11 @@ port_sched_op_reply(Eterm to, Uint32 *ref_num, Eterm msg)
factory.off_heap));
queue_port_sched_op_reply(rp,
- &rp_locks,
+ rp_locks,
&factory,
ref_num,
- msg_copy);
+ msg_copy,
+ prt);
if (rp_locks)
erts_smp_proc_unlock(rp, rp_locks);
@@ -1522,9 +1539,8 @@ erts_schedule_proc2port_signal(Process *c_p,
ERTS_SMP_MSGQ_MV_INQ2PRIVQ(c_p);
c_p->msg.save = c_p->msg.last;
- erts_smp_proc_unlock(c_p,
- (ERTS_PROC_LOCK_MAIN
- | ERTS_PROC_LOCKS_MSG_RECEIVE));
+ erts_smp_proc_unlock(c_p, (ERTS_PROC_LOCKS_MSG_RECEIVE
+ | ERTS_PROC_LOCK_MAIN));
}
@@ -1542,8 +1558,19 @@ erts_schedule_proc2port_signal(Process *c_p,
erts_smp_proc_lock(c_p, ERTS_PROC_LOCK_MAIN);
if (sched_res != 0) {
- if (refp)
+ if (refp) {
+ /*
+ * We need to restore the message queue save
+ * pointer to the beginning of the message queue
+ * since the caller now wont wait for a message
+ * containing the reference created above...
+ */
+ ASSERT(c_p);
+ erts_smp_proc_lock(c_p, ERTS_PROC_LOCKS_MSG_RECEIVE);
+ JOIN_MESSAGE(c_p);
+ erts_smp_proc_unlock(c_p, ERTS_PROC_LOCKS_MSG_RECEIVE);
*refp = NIL;
+ }
return ERTS_PORT_OP_DROPPED;
}
return ERTS_PORT_OP_SCHEDULED;
@@ -1627,7 +1654,7 @@ port_badsig(Port *prt, erts_aint32_t state, int op,
state,
sigdp->flags & ERTS_P2P_SIG_DATA_FLG_BAD_OUTPUT);
if (sigdp->flags & ERTS_P2P_SIG_DATA_FLG_REPLY)
- port_sched_op_reply(sigdp->caller, sigdp->ref, am_badarg);
+ port_sched_op_reply(sigdp->caller, sigdp->ref, am_badarg, prt);
return ERTS_PORT_REDS_BADSIG;
} /* port_badsig */
/* bad_port_signal() will
@@ -1718,12 +1745,25 @@ call_driver_outputv(int bang_op,
ERTS_SMP_LC_ASSERT(erts_lc_is_port_locked(prt)
|| ERTS_IS_CRASH_DUMPING);
+
+ if (IS_TRACED_FL(prt, F_TRACE_RECEIVE))
+ trace_port_receive(prt, caller, am_commandv, evp);
+
#ifdef USE_VM_PROBES
if (DTRACE_ENABLED(driver_outputv)) {
DTRACE_FORMAT_COMMON_PID_AND_PORT(caller, prt);
DTRACE4(driver_outputv, process_str, port_str, prt->name, size);
}
#endif
+#ifdef USE_LTTNG_VM_TRACEPOINTS
+ if (LTTNG_ENABLED(driver_outputv)) {
+ lttng_decl_portbuf(port_str);
+ lttng_decl_procbuf(proc_str);
+ lttng_pid_to_str(caller, proc_str);
+ lttng_port_to_str(prt, port_str);
+ LTTNG4(driver_outputv, proc_str, port_str, prt->name, size);
+ }
+#endif
prt->caller = caller;
(*drv->outputv)((ErlDrvData) prt->drv_data, evp);
@@ -1749,7 +1789,6 @@ cleanup_scheduled_outputv(ErlIOVec *ev, ErlDrvBinary *cbinp)
driver_free_binary(ev->binv[i]);
if (cbinp)
driver_free_binary(cbinp);
- erts_free(ERTS_ALC_T_DRV_CMD_DATA, ev);
}
static int
@@ -1784,7 +1823,7 @@ port_sig_outputv(Port *prt, erts_aint32_t state, int op, ErtsProc2PortSigData *s
}
if (sigdp->flags & ERTS_P2P_SIG_DATA_FLG_REPLY)
- port_sched_op_reply(sigdp->caller, sigdp->ref, reply);
+ port_sched_op_reply(sigdp->caller, sigdp->ref, reply, prt);
cleanup_scheduled_outputv(sigdp->u.outputv.evp,
sigdp->u.outputv.cbinp);
@@ -1826,6 +1865,18 @@ call_driver_output(int bang_op,
DTRACE4(driver_output, process_str, port_str, prt->name, size);
}
#endif
+#ifdef USE_LTTNG_VM_TRACEPOINTS
+ if (LTTNG_ENABLED(driver_output)) {
+ lttng_decl_portbuf(port_str);
+ lttng_decl_procbuf(proc_str);
+ lttng_pid_to_str(caller, proc_str);
+ lttng_port_to_str(prt, port_str);
+ LTTNG4(driver_output, proc_str, port_str, prt->name, size);
+ }
+#endif
+
+ if (IS_TRACED_FL(prt, F_TRACE_RECEIVE))
+ trace_port_receive(prt, caller, am_command, bufp, size);
prt->caller = caller;
(*drv->output)((ErlDrvData) prt->drv_data, bufp, size);
@@ -1880,13 +1931,195 @@ port_sig_output(Port *prt, erts_aint32_t state, int op, ErtsProc2PortSigData *si
}
if (sigdp->flags & ERTS_P2P_SIG_DATA_FLG_REPLY)
- port_sched_op_reply(sigdp->caller, sigdp->ref, reply);
+ port_sched_op_reply(sigdp->caller, sigdp->ref, reply, prt);
cleanup_scheduled_output(sigdp->u.output.bufp);
return ERTS_PORT_REDS_CMD_OUTPUT;
}
+
+/*
+ * This erts_port_output will always create a port task.
+ * The call is treated as a port_command call, i.e. no
+ * badsig i generated if the input in invalid. However
+ * an error_logger message is generated.
+ */
+int
+erts_port_output_async(Port *prt, Eterm from, Eterm list)
+{
+
+ ErtsPortOpResult res;
+ ErtsProc2PortSigData *sigdp;
+ erts_driver_t *drv = prt->drv_ptr;
+ size_t size;
+ int task_flags;
+ ErtsProc2PortSigCallback port_sig_callback;
+ ErlDrvBinary *cbin = NULL;
+ ErlIOVec *evp = NULL;
+ char *buf = NULL;
+ ErtsPortTaskHandle *ns_pthp;
+
+ if (drv->outputv) {
+ ErlIOVec ev;
+ SysIOVec* ivp;
+ ErlDrvBinary** bvp;
+ int vsize;
+ Uint csize;
+ Uint pvsize;
+ Uint pcsize;
+ size_t iov_offset, binv_offset, alloc_size;
+ Uint blimit = 0;
+ char *ptr;
+ int i;
+
+ Eterm* bptr = NULL;
+ Uint offset;
+
+ if (is_binary(list)) {
+ /* We optimize for when we get a procbin without offset */
+ Eterm real_bin;
+ int bitoffs;
+ int bitsize;
+ ERTS_GET_REAL_BIN(list, real_bin, offset, bitoffs, bitsize);
+ bptr = binary_val(real_bin);
+ if (*bptr == HEADER_PROC_BIN && bitoffs == 0) {
+ size = binary_size(list);
+ vsize = 1;
+ } else
+ bptr = NULL;
+ }
+
+ if (!bptr) {
+ if (io_list_vec_len(list, &vsize, &csize, &pvsize, &pcsize, &size))
+ goto bad_value;
+
+ /* To pack or not to pack (small binaries) ...? */
+ if (vsize >= SMALL_WRITE_VEC) {
+ /* Do pack */
+ vsize = pvsize + 1;
+ csize = pcsize;
+ blimit = ERL_SMALL_IO_BIN_LIMIT;
+ }
+ cbin = driver_alloc_binary(csize);
+ if (!cbin)
+ erts_alloc_enomem(ERTS_ALC_T_DRV_BINARY, ERTS_SIZEOF_Binary(csize));
+ }
+
+
+ iov_offset = ERTS_ALC_DATA_ALIGN_SIZE(sizeof(ErlIOVec));
+ binv_offset = iov_offset;
+ binv_offset += ERTS_ALC_DATA_ALIGN_SIZE((vsize+1)*sizeof(SysIOVec));
+ alloc_size = binv_offset;
+ alloc_size += (vsize+1)*sizeof(ErlDrvBinary *);
+
+ sigdp = erts_port_task_alloc_p2p_sig_data_extra(alloc_size, (void**)&ptr);
+
+ evp = (ErlIOVec *) ptr;
+ ivp = evp->iov = (SysIOVec *) (ptr + iov_offset);
+ bvp = evp->binv = (ErlDrvBinary **) (ptr + binv_offset);
+
+ ivp[0].iov_base = NULL;
+ ivp[0].iov_len = 0;
+ bvp[0] = NULL;
+
+ if (bptr) {
+ ProcBin* pb = (ProcBin *) bptr;
+
+ ivp[1].iov_base = pb->bytes+offset;
+ ivp[1].iov_len = size;
+ bvp[1] = Binary2ErlDrvBinary(pb->val);
+
+ evp->vsize = 1;
+ } else {
+
+ evp->vsize = io_list_to_vec(list, ivp+1, bvp+1, cbin, blimit);
+ if (evp->vsize < 0) {
+ if (evp != &ev)
+ erts_free(ERTS_ALC_T_DRV_CMD_DATA, evp);
+ driver_free_binary(cbin);
+ goto bad_value;
+ }
+ }
+#if 0
+ /* This assertion may say something useful, but it can
+ be falsified during the emulator test suites. */
+ ASSERT(evp->vsize == vsize);
+#endif
+ evp->vsize++;
+ evp->size = size; /* total size */
+
+ /* Need to increase refc on all binaries */
+ for (i = 1; i < evp->vsize; i++)
+ if (bvp[i])
+ driver_binary_inc_refc(bvp[i]);
+
+ sigdp->flags = ERTS_P2P_SIG_TYPE_OUTPUTV;
+ sigdp->u.outputv.from = from;
+ sigdp->u.outputv.evp = evp;
+ sigdp->u.outputv.cbinp = cbin;
+ port_sig_callback = port_sig_outputv;
+ } else {
+ ErlDrvSizeT ERTS_DECLARE_DUMMY(r);
+
+ /*
+ * Apperently there exist code that write 1 byte to
+ * much in buffer. Where it resides I don't know, but
+ * we can live with one byte extra allocated...
+ */
+
+ if (erts_iolist_size(list, &size))
+ goto bad_value;
+
+ buf = erts_alloc(ERTS_ALC_T_DRV_CMD_DATA, size + 1);
+
+ r = erts_iolist_to_buf(list, buf, size);
+ ASSERT(ERTS_IOLIST_TO_BUF_SUCCEEDED(r));
+
+ sigdp = erts_port_task_alloc_p2p_sig_data();
+ sigdp->flags = ERTS_P2P_SIG_TYPE_OUTPUT;
+ sigdp->u.output.from = from;
+ sigdp->u.output.bufp = buf;
+ sigdp->u.output.size = size;
+ port_sig_callback = port_sig_output;
+ }
+ sigdp->flags = 0;
+ ns_pthp = NULL;
+ task_flags = 0;
+
+ res = erts_schedule_proc2port_signal(NULL,
+ prt,
+ ERTS_INVALID_PID,
+ NULL,
+ sigdp,
+ task_flags,
+ ns_pthp,
+ port_sig_callback);
+
+ if (res != ERTS_PORT_OP_SCHEDULED) {
+ if (drv->outputv)
+ cleanup_scheduled_outputv(evp, cbin);
+ else
+ cleanup_scheduled_output(buf);
+ return 1;
+ }
+ return 1;
+
+bad_value:
+
+ /*
+ * We call badsig directly here as this function is called with
+ * the main lock of the calling process still held.
+ * At the moment this operation is always not a bang_op, so
+ * only an error_logger message should be generated, no badsig.
+ */
+
+ badsig_received(0, prt, erts_atomic32_read_nob(&prt->state), 1);
+
+ return 0;
+
+}
+
ErtsPortOpResult
erts_port_output(Process *c_p,
int flags,
@@ -1896,7 +2129,7 @@ erts_port_output(Process *c_p,
Eterm *refp)
{
ErtsPortOpResult res;
- ErtsProc2PortSigData *sigdp;
+ ErtsProc2PortSigData *sigdp = NULL;
erts_driver_t *drv = prt->drv_ptr;
size_t size;
int try_call;
@@ -1949,7 +2182,6 @@ erts_port_output(Process *c_p,
DTRACE4(port_command, process_str, port_str, prt->name, "command");
}
#endif
-
if (drv->outputv) {
ErlIOVec ev;
SysIOVec iv[SMALL_WRITE_VEC];
@@ -1978,10 +2210,13 @@ erts_port_output(Process *c_p,
evp = &ev;
}
else {
- char *ptr = erts_alloc((try_call
- ? ERTS_ALC_T_TMP
- : ERTS_ALC_T_DRV_CMD_DATA), alloc_size);
-
+ char *ptr;
+ if (try_call) {
+ ptr = erts_alloc(ERTS_ALC_T_TMP, alloc_size);
+ } else {
+ sigdp = erts_port_task_alloc_p2p_sig_data_extra(
+ alloc_size, (void**)&ptr);
+ }
evp = (ErlIOVec *) ptr;
ivp = evp->iov = (SysIOVec *) (ptr + iov_offset);
bvp = evp->binv = (ErlDrvBinary **) (ptr + binv_offset);
@@ -2010,9 +2245,12 @@ erts_port_output(Process *c_p,
bvp[0] = NULL;
evp->vsize = io_list_to_vec(list, ivp+1, bvp+1, cbin, blimit);
if (evp->vsize < 0) {
- if (evp != &ev)
- erts_free(try_call ? ERTS_ALC_T_TMP : ERTS_ALC_T_DRV_CMD_DATA,
- evp);
+ if (evp != &ev) {
+ if (try_call)
+ erts_free(ERTS_ALC_T_TMP, evp);
+ else
+ erts_port_task_free_p2p_sig_data(sigdp);
+ }
driver_free_binary(cbin);
goto bad_value;
}
@@ -2064,8 +2302,10 @@ erts_port_output(Process *c_p,
/* Fall through... */
case ERTS_TRY_IMM_DRV_CALL_INVALID_PORT:
driver_free_binary(cbin);
- if (evp != &ev)
+ if (evp != &ev) {
+ ASSERT(!sigdp);
erts_free(ERTS_ALC_T_TMP, evp);
+ }
if (try_call_res != ERTS_TRY_IMM_DRV_CALL_OK)
return ERTS_PORT_OP_DROPPED;
if (c_p)
@@ -2076,8 +2316,10 @@ erts_port_output(Process *c_p,
if (async_nosuspend
&& (sched_flags & (busy_flgs|ERTS_PTS_FLG_EXIT))) {
driver_free_binary(cbin);
- if (evp != &ev)
+ if (evp != &ev) {
+ ASSERT(!sigdp);
erts_free(ERTS_ALC_T_TMP, evp);
+ }
return ((sched_flags & ERTS_PTS_FLG_EXIT)
? ERTS_PORT_OP_DROPPED
: ERTS_PORT_OP_BUSY);
@@ -2092,9 +2334,16 @@ erts_port_output(Process *c_p,
if (bvp[i])
driver_binary_inc_refc(bvp[i]);
- new_evp = erts_alloc(ERTS_ALC_T_DRV_CMD_DATA, alloc_size);
+ /* The port task and iovec is allocated in the
+ same structure as an optimization. This
+ is especially important in erts_port_output_async
+ of when !try_call */
+ ASSERT(sigdp == NULL);
+ sigdp = erts_port_task_alloc_p2p_sig_data_extra(
+ alloc_size, (void**)&new_evp);
if (evp != &ev) {
+ /* Copy from TMP alloc to port task */
sys_memcpy((void *) new_evp, (void *) evp, alloc_size);
new_evp->iov = (SysIOVec *) (((char *) new_evp)
+ iov_offset);
@@ -2142,7 +2391,6 @@ erts_port_output(Process *c_p,
evp = new_evp;
}
- sigdp = erts_port_task_alloc_p2p_sig_data();
sigdp->flags = ERTS_P2P_SIG_TYPE_OUTPUTV;
sigdp->u.outputv.from = from;
sigdp->u.outputv.evp = evp;
@@ -2264,7 +2512,7 @@ erts_port_output(Process *c_p,
sigdp->flags &= ~ERTS_P2P_SIG_DATA_FLG_NOSUSPEND;
else if (async_nosuspend) {
ErtsSchedulerData *esdp = (c_p
- ? ERTS_PROC_GET_SCHDATA(c_p)
+ ? erts_proc_sched_data(c_p)
: erts_get_scheduler_data());
ASSERT(esdp);
ns_pthp = &esdp->nosuspend_port_task_handle;
@@ -2351,7 +2599,10 @@ call_deliver_port_exit(int bang_op,
return ERTS_PORT_OP_DROPPED;
}
- if (!erts_deliver_port_exit(prt, from, reason, bang_op))
+ if (IS_TRACED_FL(prt, F_TRACE_RECEIVE))
+ trace_port_receive(prt, from, am_close);
+
+ if (!erts_deliver_port_exit(prt, from, reason, bang_op, broken_link))
return ERTS_PORT_OP_DROPPED;
#ifdef USE_VM_PROBES
@@ -2388,7 +2639,7 @@ port_sig_exit(Port *prt,
if (sigdp->u.exit.bp)
free_message_buffer(sigdp->u.exit.bp);
if (sigdp->flags & ERTS_P2P_SIG_DATA_FLG_REPLY)
- port_sched_op_reply(sigdp->caller, sigdp->ref, msg);
+ port_sched_op_reply(sigdp->caller, sigdp->ref, msg, prt);
return ERTS_PORT_REDS_EXIT;
}
@@ -2422,13 +2673,13 @@ erts_port_exit(Process *c_p,
ERTS_PORT_SFLGS_INVALID_LOOKUP,
0,
!refp,
- am_exit);
+ am_close);
switch (try_imm_drv_call(&try_call_state)) {
case ERTS_TRY_IMM_DRV_CALL_OK: {
res = call_deliver_port_exit(flags & ERTS_PORT_SIG_FLG_BANG_OP,
- from,
+ c_p ? c_p->common.id : from,
prt,
try_call_state.state,
reason,
@@ -2507,8 +2758,11 @@ set_port_connected(int bang_op,
return ERTS_PORT_OP_DROPPED;
}
+ if (IS_TRACED_FL(prt, F_TRACE_RECEIVE))
+ trace_port_receive(prt, from, am_connect, connect);
+
ERTS_PORT_SET_CONNECTED(prt, connect);
- deliver_result(prt->common.id, from, am_connected);
+ deliver_result(prt, prt->common.id, from, am_connected);
#ifdef USE_VM_PROBES
if(DTRACE_ENABLED(port_command)) {
@@ -2530,10 +2784,22 @@ set_port_connected(int bang_op,
erts_add_link(&ERTS_P_LINKS(rp), LINK_PID, prt->common.id);
erts_add_link(&ERTS_P_LINKS(prt), LINK_PID, connect);
+ if (IS_TRACED_FL(rp, F_TRACE_PROCS))
+ trace_proc(NULL, 0, rp, am_getting_linked, prt->common.id);
+
ERTS_PORT_SET_CONNECTED(prt, connect);
erts_smp_proc_unlock(rp, ERTS_PROC_LOCK_LINK);
+ if (IS_TRACED_FL(prt, F_TRACE_PORTS))
+ trace_port(prt, am_getting_linked, connect);
+ if (IS_TRACED_FL(prt, F_TRACE_RECEIVE))
+ trace_port_receive(prt, from, am_connect, connect);
+ if (IS_TRACED_FL(prt, F_TRACE_SEND)) {
+ Eterm hp[3];
+ trace_port_send(prt, from, TUPLE2(hp, prt->common.id, am_connected), 1);
+ }
+
#ifdef USE_VM_PROBES
if (DTRACE_ENABLED(port_connect)) {
DTRACE_CHARBUF(process_str, DTRACE_TERM_BUF_SIZE);
@@ -2566,7 +2832,7 @@ port_sig_connect(Port *prt, erts_aint32_t state, int op, ErtsProc2PortSigData *s
msg = am_true;
}
if (sigdp->flags & ERTS_P2P_SIG_DATA_FLG_REPLY)
- port_sched_op_reply(sigdp->caller, sigdp->ref, msg);
+ port_sched_op_reply(sigdp->caller, sigdp->ref, msg, prt);
return ERTS_PORT_REDS_CONNECT;
}
@@ -2636,8 +2902,11 @@ static void
port_unlink(Port *prt, Eterm from)
{
ErtsLink *lnk = erts_remove_link(&ERTS_P_LINKS(prt), from);
- if (lnk)
+ if (lnk) {
+ if (IS_TRACED_FL(prt, F_TRACE_PORTS))
+ trace_port(prt, am_getting_unlinked, from);
erts_destroy_link(lnk);
+ }
}
static int
@@ -2646,7 +2915,7 @@ port_sig_unlink(Port *prt, erts_aint32_t state, int op, ErtsProc2PortSigData *si
if (op == ERTS_PROC2PORT_SIG_EXEC)
port_unlink(prt, sigdp->u.unlink.from);
if (sigdp->flags & ERTS_P2P_SIG_DATA_FLG_REPLY)
- port_sched_op_reply(sigdp->caller, sigdp->ref, am_true);
+ port_sched_op_reply(sigdp->caller, sigdp->ref, am_true, prt);
return ERTS_PORT_REDS_UNLINK;
}
@@ -2707,10 +2976,10 @@ port_link_failure(Eterm port_id, Eterm linker)
NIL,
NULL,
0);
- if (xres >= 0 && IS_TRACED_FL(rp, F_TRACE_PROCS)) {
+ if (xres >= 0) {
/* We didn't exit the process and it is traced */
if (IS_TRACED_FL(rp, F_TRACE_PROCS))
- trace_proc(NULL, rp, am_getting_unlinked, port_id);
+ trace_proc(NULL, 0, rp, am_getting_unlinked, port_id);
}
if (rp_locks)
erts_smp_proc_unlock(rp, rp_locks);
@@ -2721,10 +2990,15 @@ port_link_failure(Eterm port_id, Eterm linker)
static void
port_link(Port *prt, erts_aint32_t state, Eterm to)
{
- if (!(state & ERTS_PORT_SFLGS_INVALID_LOOKUP))
+ if (IS_TRACED_FL(prt, F_TRACE_PORTS))
+ trace_port(prt, am_getting_linked, to);
+ if (!(state & ERTS_PORT_SFLGS_INVALID_LOOKUP)) {
erts_add_link(&ERTS_P_LINKS(prt), LINK_PID, to);
- else
+ } else {
port_link_failure(prt->common.id, to);
+ if (IS_TRACED_FL(prt, F_TRACE_PORTS))
+ trace_port(prt, am_unlink, to);
+ }
}
static int
@@ -2732,10 +3006,11 @@ port_sig_link(Port *prt, erts_aint32_t state, int op, ErtsProc2PortSigData *sigd
{
if (op == ERTS_PROC2PORT_SIG_EXEC)
port_link(prt, state, sigdp->u.link.to);
- else
+ else {
port_link_failure(sigdp->u.link.port, sigdp->u.link.to);
+ }
if (sigdp->flags & ERTS_P2P_SIG_DATA_FLG_REPLY)
- port_sched_op_reply(sigdp->caller, sigdp->ref, am_true);
+ port_sched_op_reply(sigdp->caller, sigdp->ref, am_true, prt);
return ERTS_PORT_REDS_LINK;
}
@@ -2792,7 +3067,8 @@ init_ack_send_reply(Port *port, Eterm resp)
}
port_sched_op_reply(port->async_open_port->to,
port->async_open_port->ref,
- resp);
+ resp,
+ port);
erts_free(ERTS_ALC_T_PRTSD, port->async_open_port);
port->async_open_port = NULL;
@@ -3153,7 +3429,7 @@ static int read_linebuf(LineBufContext *bp)
}
static void
-deliver_result(Eterm sender, Eterm pid, Eterm res)
+deliver_result(Port *prt, Eterm sender, Eterm pid, Eterm res)
{
Process *rp;
ErtsProcLocks rp_locks = 0;
@@ -3161,12 +3437,22 @@ deliver_result(Eterm sender, Eterm pid, Eterm res)
ERTS_SMP_CHK_NO_PROC_LOCKS;
+ ASSERT(!prt || prt->common.id == sender);
+#ifdef ERTS_SMP
+ ASSERT(!prt || erts_lc_is_port_locked(prt));
+#endif
+
ASSERT(is_internal_port(sender) && is_internal_pid(pid));
rp = (scheduler
? erts_proc_lookup(pid)
: erts_pid2proc_opt(NULL, 0, pid, 0, ERTS_P2P_FLG_INC_REFC));
+ if (prt && IS_TRACED_FL(prt, F_TRACE_SEND)) {
+ Eterm hp[3];
+ trace_port_send(prt, pid, TUPLE2(hp, sender, res), !!rp);
+ }
+
if (rp) {
Eterm tuple;
ErtsMessage *mp;
@@ -3179,7 +3465,7 @@ deliver_result(Eterm sender, Eterm pid, Eterm res)
sz_res + 3, &hp, &ohp);
res = copy_struct(res, sz_res, &hp, ohp);
tuple = TUPLE2(hp, sender, res);
- erts_queue_message(rp, &rp_locks, mp, tuple, NIL);
+ erts_queue_message(rp, rp_locks, mp, tuple, sender);
if (rp_locks)
erts_smp_proc_unlock(rp, rp_locks);
@@ -3211,6 +3497,7 @@ static void deliver_read_message(Port* prt, erts_aint32_t state, Eterm to,
ErlOffHeap *ohp;
ErtsProcLocks rp_locks = 0;
int scheduler = erts_get_scheduler_id() != 0;
+ int trace_send = IS_TRACED_FL(prt, F_TRACE_SEND);
ERTS_SMP_LC_ASSERT(erts_lc_is_port_locked(prt));
ERTS_SMP_CHK_NO_PROC_LOCKS;
@@ -3233,7 +3520,7 @@ static void deliver_read_message(Port* prt, erts_aint32_t state, Eterm to,
if (!rp)
return;
- mp = erts_alloc_message_heap(rp, &rp_locks, need, &hp, &ohp);
+ mp = erts_alloc_message_heap(trace_send ? NULL : rp, &rp_locks, need, &hp, &ohp);
listp = NIL;
if ((state & ERTS_PORT_SFLG_BINARY_IO) == 0) {
@@ -3275,7 +3562,11 @@ static void deliver_read_message(Port* prt, erts_aint32_t state, Eterm to,
tuple = TUPLE2(hp, prt->common.id, tuple);
hp += 3;
- erts_queue_message(rp, &rp_locks, mp, tuple, am_undefined);
+ if (trace_send)
+ trace_port_send(prt, to, tuple, 1);
+
+ ERL_MESSAGE_TOKEN(mp) = am_undefined;
+ erts_queue_message(rp, rp_locks, mp, tuple, prt->common.id);
if (rp_locks)
erts_smp_proc_unlock(rp, rp_locks);
if (!scheduler)
@@ -3354,6 +3645,7 @@ deliver_vec_message(Port* prt, /* Port */
ErtsProcLocks rp_locks = 0;
int scheduler = erts_get_scheduler_id() != 0;
erts_aint32_t state;
+ int trace_send = IS_TRACED_FL(prt, F_TRACE_SEND);
ERTS_SMP_LC_ASSERT(erts_lc_is_port_locked(prt));
ERTS_SMP_CHK_NO_PROC_LOCKS;
@@ -3381,7 +3673,7 @@ deliver_vec_message(Port* prt, /* Port */
need += (hlen+csize)*2;
}
- mp = erts_alloc_message_heap(rp, &rp_locks, need, &hp, &ohp);
+ mp = erts_alloc_message_heap(trace_send ? NULL : rp, &rp_locks, need, &hp, &ohp);
listp = NIL;
iov += vsize;
@@ -3442,7 +3734,11 @@ deliver_vec_message(Port* prt, /* Port */
tuple = TUPLE2(hp, prt->common.id, tuple);
hp += 3;
- erts_queue_message(rp, &rp_locks, mp, tuple, am_undefined);
+ if (IS_TRACED_FL(prt, F_TRACE_SEND))
+ trace_port_send(prt, to, tuple, 1);
+
+ ERL_MESSAGE_TOKEN(mp) = am_undefined;
+ erts_queue_message(rp, rp_locks, mp, tuple, prt->common.id);
erts_smp_proc_unlock(rp, rp_locks);
if (!scheduler)
erts_proc_dec_refc(rp);
@@ -3489,6 +3785,17 @@ static void flush_port(Port *p)
DTRACE3(driver_flush, process_str, port_str, p->name);
}
#endif
+#ifdef USE_LTTNG_VM_TRACEPOINTS
+ if (LTTNG_ENABLED(driver_flush)) {
+ lttng_decl_portbuf(port_str);
+ lttng_decl_procbuf(proc_str);
+ lttng_pid_to_str(ERTS_PORT_GET_CONNECTED(p), proc_str);
+ lttng_port_to_str(p, port_str);
+ LTTNG3(driver_flush, proc_str, port_str, p->name);
+ }
+#endif
+
+
if (IS_TRACED_FL(p, F_TRACE_SCHED_PORTS)) {
trace_sched_ports_where(p, am_in, am_flush);
}
@@ -3520,6 +3827,7 @@ terminate_port(Port *prt)
Eterm connected_id = NIL /* Initialize to silence compiler */;
erts_driver_t *drv;
erts_aint32_t state;
+ ErtsPrtSD *psd;
ERTS_SMP_CHK_NO_PROC_LOCKS;
ERTS_SMP_LC_ASSERT(erts_lc_is_port_locked(prt));
@@ -3551,6 +3859,16 @@ terminate_port(Port *prt)
DTRACE3(driver_stop, process_str, drv->name, port_str);
}
#endif
+#ifdef USE_LTTNG_VM_TRACEPOINTS
+ if (LTTNG_ENABLED(driver_stop)) {
+ lttng_decl_portbuf(port_str);
+ lttng_decl_procbuf(proc_str);
+ lttng_pid_to_str(connected_id, proc_str);
+ lttng_port_to_str(prt, port_str);
+ LTTNG3(driver_stop, proc_str, port_str, drv->name);
+ }
+#endif
+
(*drv->stop)((ErlDrvData)prt->drv_data);
erts_unblock_fpe(fpe_was_unmasked);
ERTS_MSACC_POP_STATE_M();
@@ -3560,6 +3878,11 @@ terminate_port(Port *prt)
ASSERT(!prt->xports);
#endif
}
+
+ if (is_internal_port(send_closed_port_id)
+ && IS_TRACED_FL(prt, F_TRACE_SEND))
+ trace_port_send(prt, connected_id, am_closed, 1);
+
if(drv->handle != NULL) {
erts_smp_rwmtx_rlock(&erts_driver_list_lock);
erts_ddll_decrement_port_count(drv->handle);
@@ -3573,8 +3896,9 @@ terminate_port(Port *prt)
erts_cleanup_port_data(prt);
- if (prt->psd)
- erts_free(ERTS_ALC_T_PRTSD, prt->psd);
+ psd = (ErtsPrtSD *) erts_smp_atomic_read_nob(&prt->psd);
+ if (psd)
+ erts_free(ERTS_ALC_T_PRTSD, psd);
ASSERT(prt->dist_entry == NULL);
@@ -3587,10 +3911,10 @@ terminate_port(Port *prt)
if ((state & ERTS_PORT_SFLG_HALT)
&& (erts_smp_atomic32_dec_read_nob(&erts_halt_progress) == 0)) {
erts_port_release(prt); /* We will exit and never return */
- erl_exit_flush_async(erts_halt_code, "");
+ erts_flush_async_exit(erts_halt_code, "");
}
if (is_internal_port(send_closed_port_id))
- deliver_result(send_closed_port_id, connected_id, am_closed);
+ deliver_result(NULL, send_closed_port_id, connected_id, am_closed);
}
void
@@ -3623,7 +3947,7 @@ static void sweep_one_monitor(ErtsMonitor *mon, void *vpsc)
typedef struct {
- Eterm port;
+ Port *port;
Eterm reason;
} SweepContext;
@@ -3632,10 +3956,13 @@ static void sweep_one_link(ErtsLink *lnk, void *vpsc)
SweepContext *psc = vpsc;
DistEntry *dep;
Process *rp;
-
+ Eterm port_id = psc->port->common.id;
ASSERT(lnk->type == LINK_PID);
-
+
+ if (IS_TRACED_FL(psc->port, F_TRACE_PORTS))
+ trace_port(psc->port, am_unlink, lnk->pid);
+
if (is_external_pid(lnk->pid)) {
dep = external_pid_dist_entry(lnk->pid);
if(dep != erts_this_dist_entry) {
@@ -3648,9 +3975,9 @@ static void sweep_one_link(ErtsLink *lnk, void *vpsc)
case ERTS_DSIG_PREP_NOT_CONNECTED:
break;
case ERTS_DSIG_PREP_CONNECTED:
- erts_remove_dist_link(&dld, psc->port, lnk->pid, dep);
+ erts_remove_dist_link(&dld, port_id, lnk->pid, dep);
erts_destroy_dist_link(&dld);
- code = erts_dsig_send_exit(&dsd, psc->port, lnk->pid,
+ code = erts_dsig_send_exit(&dsd, port_id, lnk->pid,
psc->reason);
ASSERT(code == ERTS_DSIG_SEND_OK);
break;
@@ -3664,23 +3991,25 @@ static void sweep_one_link(ErtsLink *lnk, void *vpsc)
ASSERT(is_internal_pid(lnk->pid));
rp = erts_pid2proc(NULL, 0, lnk->pid, rp_locks);
if (rp) {
- ErtsLink *rlnk = erts_remove_link(&ERTS_P_LINKS(rp), psc->port);
+ ErtsLink *rlnk = erts_remove_link(&ERTS_P_LINKS(rp), port_id);
if (rlnk) {
int xres = erts_send_exit_signal(NULL,
- psc->port,
+ port_id,
rp,
&rp_locks,
psc->reason,
NIL,
NULL,
0);
- if (xres >= 0 && IS_TRACED_FL(rp, F_TRACE_PROCS)) {
+ if (xres >= 0) {
+ if (rp_locks & ERTS_PROC_LOCKS_XSIG_SEND) {
+ erts_smp_proc_unlock(rp, ERTS_PROC_LOCKS_XSIG_SEND);
+ rp_locks &= ~ERTS_PROC_LOCKS_XSIG_SEND;
+ }
/* We didn't exit the process and it is traced */
- if (IS_TRACED_FL(rp, F_TRACE_PROCS)) {
- trace_proc(NULL, rp, am_getting_unlinked,
- psc->port);
- }
+ if (IS_TRACED_FL(rp, F_TRACE_PROCS))
+ trace_proc(NULL, 0, rp, am_getting_unlinked, port_id);
}
erts_destroy_link(rlnk);
}
@@ -3702,7 +4031,8 @@ static void sweep_one_link(ErtsLink *lnk, void *vpsc)
*/
int
-erts_deliver_port_exit(Port *p, Eterm from, Eterm reason, int send_closed)
+erts_deliver_port_exit(Port *p, Eterm from, Eterm reason, int send_closed,
+ int drop_normal)
{
ErtsLink *lnk;
Eterm rreason;
@@ -3732,8 +4062,10 @@ erts_deliver_port_exit(Port *p, Eterm from, Eterm reason, int send_closed)
| ERTS_PORT_SFLG_CLOSING))
return 0;
- if (reason == am_normal && from != ERTS_PORT_GET_CONNECTED(p) && from != p->common.id)
+ if (reason == am_normal && from != ERTS_PORT_GET_CONNECTED(p)
+ && from != p->common.id && drop_normal) {
return 0;
+ }
set_state_flags = ERTS_PORT_SFLG_EXITING;
if (send_closed)
@@ -3744,9 +4076,8 @@ erts_deliver_port_exit(Port *p, Eterm from, Eterm reason, int send_closed)
state = erts_atomic32_read_bor_mb(&p->state, set_state_flags);
state |= set_state_flags;
- if (IS_TRACED_FL(p, F_TRACE_PORTS)) {
+ if (IS_TRACED_FL(p, F_TRACE_PORTS))
trace_port(p, am_closed, reason);
- }
erts_trace_check_exiting(p->common.id);
@@ -3756,7 +4087,7 @@ erts_deliver_port_exit(Port *p, Eterm from, Eterm reason, int send_closed)
(void) erts_unregister_name(NULL, 0, p, p->common.u.alive.reg->name);
{
- SweepContext sc = {p->common.id, rreason};
+ SweepContext sc = {p, rreason};
lnk = ERTS_P_LINKS(p);
ERTS_P_LINKS(p) = NULL;
erts_sweep_links(lnk, &sweep_one_link, &sc);
@@ -3878,9 +4209,22 @@ call_driver_control(Eterm caller,
command, size);
}
#endif
-
+
+ if (IS_TRACED_FL(prt, F_TRACE_RECEIVE))
+ trace_port_receive(prt, caller, am_control, command, bufp, size);
+
ERTS_MSACC_SET_STATE_CACHED_M(ERTS_MSACC_STATE_PORT);
+#ifdef USE_LTTNG_VM_TRACEPOINTS
+ if (LTTNG_ENABLED(driver_control)) {
+ lttng_decl_procbuf(proc_str);
+ lttng_decl_portbuf(port_str);
+ lttng_pid_to_str(caller, proc_str);
+ lttng_port_to_str(prt, port_str);
+ LTTNG5(driver_control, proc_str, port_str, prt->name, command, size);
+ }
+#endif
+
prt->caller = caller;
cres = prt->drv_ptr->control((ErlDrvData) prt->drv_data,
command,
@@ -3895,6 +4239,9 @@ call_driver_control(Eterm caller,
if (cres < 0)
return ERTS_PORT_OP_BADARG;
+ if (IS_TRACED_FL(prt, F_TRACE_SEND))
+ trace_port_send_binary(prt, caller, am_control, *resp_bufp, cres);
+
*from_size = (ErlDrvSizeT) cres;
return ERTS_PORT_OP_DONE;
@@ -4045,10 +4392,11 @@ port_sig_control(Port *prt,
&factory.hp,
factory.off_heap);
queue_port_sched_op_reply(rp,
- &rp_locks,
+ rp_locks,
&factory,
sigdp->ref,
- msg);
+ msg,
+ prt);
if (rp_locks)
erts_smp_proc_unlock(rp, rp_locks);
@@ -4059,7 +4407,7 @@ port_sig_control(Port *prt,
/* failure */
if (sigdp->caller != ERTS_INVALID_PID)
- port_sched_op_reply(sigdp->caller, sigdp->ref, am_badarg);
+ port_sched_op_reply(sigdp->caller, sigdp->ref, am_badarg, prt);
done:
@@ -4294,6 +4642,18 @@ call_driver_call(Eterm caller,
DTRACE5(driver_call, process_str, port_str, prt->name, command, size);
}
#endif
+#ifdef USE_LTTNG_VM_TRACEPOINTS
+ if (LTTNG_ENABLED(driver_call)) {
+ lttng_decl_procbuf(proc_str);
+ lttng_decl_portbuf(port_str);
+ lttng_pid_to_str(caller,proc_str);
+ lttng_port_to_str(prt, port_str);
+ LTTNG5(driver_call, proc_str, port_str, prt->name, command, size);
+ }
+#endif
+
+ if (IS_TRACED_FL(prt, F_TRACE_RECEIVE))
+ trace_port_receive(prt, caller, am_call, command, bufp, size);
ERTS_MSACC_SET_STATE_CACHED_M(ERTS_MSACC_STATE_PORT);
@@ -4313,6 +4673,9 @@ call_driver_call(Eterm caller,
|| ((byte) (*resp_bufp)[0]) != VERSION_MAGIC)
return ERTS_PORT_OP_BADARG;
+ if (IS_TRACED_FL(prt, F_TRACE_SEND))
+ trace_port_send_binary(prt, caller, am_call, *resp_bufp, cres);
+
*from_size = (ErlDrvSizeT) cres;
return ERTS_PORT_OP_DONE;
@@ -4373,7 +4736,7 @@ port_sig_call(Port *prt,
(void) erts_factory_message_create(&factory, rp, &rp_locks, hsz);
endp = (byte *) resp_bufp;
- msg = erts_decode_ext(&factory, &endp);
+ msg = erts_decode_ext(&factory, &endp, 0);
if (is_value(msg)) {
hp = erts_produce_heap(&factory,
3,
@@ -4381,10 +4744,11 @@ port_sig_call(Port *prt,
msg = TUPLE2(hp, am_ok, msg);
queue_port_sched_op_reply(rp,
- &rp_locks,
+ rp_locks,
&factory,
sigdp->ref,
- msg);
+ msg,
+ prt);
if (rp_locks)
erts_smp_proc_unlock(rp, rp_locks);
@@ -4396,7 +4760,7 @@ port_sig_call(Port *prt,
}
}
- port_sched_op_reply(sigdp->caller, sigdp->ref, am_badarg);
+ port_sched_op_reply(sigdp->caller, sigdp->ref, am_badarg, prt);
done:
@@ -4492,7 +4856,7 @@ erts_port_call(Process* c_p,
hsz += 3;
erts_factory_proc_prealloc_init(&factory, c_p, hsz);
endp = (byte *) resp_bufp;
- term = erts_decode_ext(&factory, &endp);
+ term = erts_decode_ext(&factory, &endp, 0);
if (term == THE_NON_VALUE)
return ERTS_PORT_OP_BADARG;
hp = erts_produce_heap(&factory,3,0);
@@ -4611,7 +4975,7 @@ port_sig_info(Port *prt,
{
ASSERT(sigdp->flags & ERTS_P2P_SIG_DATA_FLG_REPLY);
if (op != ERTS_PROC2PORT_SIG_EXEC)
- port_sched_op_reply(sigdp->caller, sigdp->ref, am_undefined);
+ port_sched_op_reply(sigdp->caller, sigdp->ref, am_undefined, prt);
else {
Eterm *hp, *hp_start;
Uint hsz;
@@ -4637,10 +5001,11 @@ port_sig_info(Port *prt,
mp->data.heap_frag = bp;
erts_factory_selfcontained_message_init(&factory, mp, hp);
queue_port_sched_op_reply(rp,
- &rp_locks,
+ rp_locks,
&factory,
sigdp->ref,
- value);
+ value,
+ prt);
}
if (rp_locks)
erts_smp_proc_unlock(rp, rp_locks);
@@ -4756,7 +5121,8 @@ reply_io_bytes(void *vreq)
eout = erts_bld_uint64(&hp, NULL, out);
msg = TUPLE4(hp, ref, make_small(sched_id), ein, eout);
- erts_queue_message(rp, &rp_locks, mp, msg, NIL);
+
+ erts_queue_message(rp, rp_locks, mp, msg, am_system);
if (req->sched_id == sched_id)
rp_locks &= ~ERTS_PROC_LOCK_MAIN;
@@ -4774,7 +5140,7 @@ erts_request_io_bytes(Process *c_p)
Uint *hp;
Eterm ref;
Uint32 *refn;
- ErtsSchedulerData *esdp = ERTS_PROC_GET_SCHDATA(c_p);
+ ErtsSchedulerData *esdp = erts_proc_sched_data(c_p);
ErtsIOBytesReq *req = erts_alloc(ERTS_ALC_T_IOB_REQ,
sizeof(ErtsIOBytesReq));
@@ -5018,7 +5384,7 @@ void erts_raw_port_command(Port* p, byte* buf, Uint len)
ERTS_SMP_LC_ASSERT(erts_lc_is_port_locked(p));
if (len > (Uint) INT_MAX)
- erl_exit(ERTS_ABORT_EXIT,
+ erts_exit(ERTS_ABORT_EXIT,
"Absurdly large data buffer (%beu bytes) passed to"
"output callback of %s driver.\n",
len,
@@ -5056,6 +5422,15 @@ int async_ready(Port *p, void* data)
DTRACE3(driver_ready_async, process_str, port_str, p->name);
}
#endif
+#ifdef USE_LTTNG_VM_TRACEPOINTS
+ if (LTTNG_ENABLED(driver_ready_async)) {
+ lttng_decl_portbuf(port_str);
+ lttng_decl_procbuf(proc_str);
+ lttng_pid_to_str(ERTS_PORT_GET_CONNECTED(p), proc_str);
+ lttng_port_to_str(p, port_str);
+ LTTNG3(driver_ready_async, proc_str, port_str, p->name);
+ }
+#endif
(*p->drv_ptr->ready_async)((ErlDrvData)p->drv_data, data);
need_free = 0;
ERTS_MSACC_POP_STATE_M();
@@ -5218,6 +5593,7 @@ void driver_report_exit(ErlDrvPort ix, int status)
ErtsProcLocks rp_locks = 0;
int scheduler = erts_get_scheduler_id() != 0;
Port* prt = erts_drvport2port(ix);
+ int trace_send = IS_TRACED_FL(prt, F_TRACE_SEND);
if (prt == ERTS_INVALID_ERL_DRV_PORT)
return;
@@ -5234,13 +5610,17 @@ void driver_report_exit(ErlDrvPort ix, int status)
if (!rp)
return;
- mp = erts_alloc_message_heap(rp, &rp_locks, 3+3, &hp, &ohp);
+ mp = erts_alloc_message_heap(trace_send ? NULL : rp, &rp_locks, 3+3, &hp, &ohp);
tuple = TUPLE2(hp, am_exit_status, make_small(status));
hp += 3;
tuple = TUPLE2(hp, prt->common.id, tuple);
- erts_queue_message(rp, &rp_locks, mp, tuple, am_undefined);
+ if (IS_TRACED_FL(prt, F_TRACE_SEND))
+ trace_port_send(prt, pid, tuple, 1);
+
+ ERL_MESSAGE_TOKEN(mp) = am_undefined;
+ erts_queue_message(rp, rp_locks, mp, tuple, prt->common.id);
erts_smp_proc_unlock(rp, rp_locks);
if (!scheduler)
@@ -5334,13 +5714,13 @@ cleanup_b2t_states(struct b2t_states__ *b2tsp)
*/
static int
-driver_deliver_term(Eterm to, ErlDrvTermData* data, int len)
+driver_deliver_term(Port *prt, Eterm to, ErlDrvTermData* data, int len)
{
#define HEAP_EXTRA 200
#define ERTS_DDT_FAIL do { res = -1; goto done; } while (0)
Uint need = 0;
int depth = 0;
- int res;
+ int res = 0;
ErlDrvTermData* ptr;
ErlDrvTermData* ptr_end;
DECLARE_ESTACK(stack);
@@ -5559,11 +5939,26 @@ driver_deliver_term(Eterm to, ErlDrvTermData* data, int len)
? erts_proc_lookup(to)
: erts_pid2proc_opt(NULL, 0, to, 0, ERTS_P2P_FLG_INC_REFC));
if (!rp) {
- res = 0;
- goto done;
- }
+ if (!prt || !IS_TRACED_FL(prt, F_TRACE_SEND))
+ goto done;
+ if (!erts_is_tracer_proc_enabled_send(NULL, 0, &prt->common))
+ goto done;
- (void) erts_factory_message_create(&factory, rp, &rp_locks, need);
+ res = -2;
+
+ /* We allocate a temporary heap to be used to create
+ the message that may be sent using tracing */
+ erts_factory_tmp_init(&factory, erts_alloc(ERTS_ALC_T_DRIVER, need*sizeof(Eterm)),
+ need, ERTS_ALC_T_DRIVER);
+
+ } else {
+ /* We force the creation of a heap fragment (rp == NULL) when send
+ tracing so that we don't have the main lock of the process while
+ tracing */
+ Process *trace_rp = prt && IS_TRACED_FL(prt, F_TRACE_SEND) ? NULL : rp;
+ (void) erts_factory_message_create(&factory, trace_rp, &rp_locks, need);
+ res = 1;
+ }
/*
* Interpret the instructions and build the term.
@@ -5826,22 +6221,45 @@ driver_deliver_term(Eterm to, ErlDrvTermData* data, int len)
ESTACK_PUSH(stack, mess);
}
- res = 1;
-
done:
if (res > 0) {
+ Eterm from = am_undefined;
mess = ESTACK_POP(stack); /* get resulting value */
erts_factory_trim_and_close(&factory, &mess, 1);
+
+ if (prt) {
+ if (IS_TRACED_FL(prt, F_TRACE_SEND)) {
+ trace_port_send(prt, to, mess, 1);
+ }
+ from = prt->common.id;
+ }
+
/* send message */
- erts_queue_message(rp, &rp_locks, factory.message, mess, am_undefined);
+ ERL_MESSAGE_TOKEN(factory.message) = am_undefined;
+ erts_queue_message(rp, rp_locks, factory.message, mess, from);
+ }
+ else if (res == -2) {
+ /* this clause only happens when we were requested to
+ generate a send trace, but the process to send to
+ did not exist any more */
+ mess = ESTACK_POP(stack); /* get resulting value */
+
+ trace_port_send(prt, to, mess, 0);
+
+ erts_factory_trim_and_close(&factory, &mess, 1);
+ erts_free(ERTS_ALC_T_DRIVER, factory.hp_start);
+ res = 0;
}
else {
if (b2t.ix > b2t.used)
b2t.used = b2t.ix;
for (b2t.ix = 0; b2t.ix < b2t.used; b2t.ix++)
erts_binary2term_abort(&b2t.state[b2t.ix]);
- erts_factory_undo(&factory);
+ if (factory.mode != FACTORY_CLOSED) {
+ ERL_MESSAGE_TERM(factory.message) = am_undefined;
+ erts_factory_undo(&factory);
+ }
}
if (rp) {
if (rp_locks)
@@ -5857,7 +6275,8 @@ driver_deliver_term(Eterm to, ErlDrvTermData* data, int len)
}
static ERTS_INLINE int
-deliver_term_check_port(ErlDrvTermData port_id, Eterm *connected_p)
+deliver_term_check_port(ErlDrvTermData port_id, Eterm *connected_p,
+ Port **trace_prt)
{
#ifdef ERTS_SMP
ErtsThrPrgrDelayHandle dhndl = erts_thr_progress_unmanaged_delay();
@@ -5885,8 +6304,11 @@ deliver_term_check_port(ErlDrvTermData port_id, Eterm *connected_p)
if (dhndl != ERTS_THR_PRGR_DHANDLE_MANAGED) {
erts_thr_progress_unmanaged_continue(dhndl);
ETHR_MEMBAR(ETHR_LoadLoad|ETHR_LoadStore);
- }
+ } else
#endif
+ {
+ *trace_prt = prt;
+ }
ERTS_SMP_LC_ASSERT(dhndl == ERTS_THR_PRGR_DHANDLE_MANAGED
? erts_lc_is_port_locked(prt)
: !erts_lc_is_port_locked(prt));
@@ -5897,10 +6319,11 @@ int erl_drv_output_term(ErlDrvTermData port_id, ErlDrvTermData* data, int len)
{
/* May be called from arbitrary thread */
Eterm connected;
- int res = deliver_term_check_port(port_id, &connected);
+ Port *prt = NULL;
+ int res = deliver_term_check_port(port_id, &connected, &prt);
if (res <= 0)
return res;
- return driver_deliver_term(connected, data, len);
+ return driver_deliver_term(prt, connected, data, len);
}
/*
@@ -5924,7 +6347,7 @@ driver_output_term(ErlDrvPort drvport, ErlDrvTermData* data, int len)
if (state & ERTS_PORT_SFLG_CLOSING)
return 0;
- return driver_deliver_term(ERTS_PORT_GET_CONNECTED(prt), data, len);
+ return driver_deliver_term(prt, ERTS_PORT_GET_CONNECTED(prt), data, len);
}
int erl_drv_send_term(ErlDrvTermData port_id,
@@ -5933,10 +6356,11 @@ int erl_drv_send_term(ErlDrvTermData port_id,
int len)
{
/* May be called from arbitrary thread */
- int res = deliver_term_check_port(port_id, NULL);
+ Port *prt = NULL;
+ int res = deliver_term_check_port(port_id, NULL, &prt);
if (res <= 0)
return res;
- return driver_deliver_term(to, data, len);
+ return driver_deliver_term(prt, to, data, len);
}
/*
@@ -5955,20 +6379,21 @@ driver_send_term(ErlDrvPort drvport,
* to make this access safe without using a less efficient
* internal data representation for ErlDrvPort.
*/
+ Port* prt = NULL;
ERTS_SMP_CHK_NO_PROC_LOCKS;
#ifdef ERTS_SMP
if (erts_thr_progress_is_managed_thread())
#endif
{
erts_aint32_t state;
- Port* prt = erts_drvport2port_state(drvport, &state);
+ prt = erts_drvport2port_state(drvport, &state);
if (prt == ERTS_INVALID_ERL_DRV_PORT)
return -1; /* invalid (dead) */
ERTS_SMP_LC_ASSERT(erts_lc_is_port_locked(prt));
if (state & ERTS_PORT_SFLG_CLOSING)
return 0;
}
- return driver_deliver_term(to, data, len);
+ return driver_deliver_term(prt, to, data, len);
}
@@ -7102,6 +7527,15 @@ void erts_fire_port_monitor(Port *prt, Eterm ref)
DTRACE3(driver_process_exit, process_str, port_str, prt->name);
}
#endif
+#ifdef USE_LTTNG_VM_TRACEPOINTS
+ if (LTTNG_ENABLED(driver_process_exit)) {
+ lttng_decl_portbuf(port_str);
+ lttng_decl_procbuf(proc_str);
+ lttng_pid_to_str(ERTS_PORT_GET_CONNECTED(prt), proc_str);
+ lttng_port_to_str(prt, port_str);
+ LTTNG3(driver_process_exit, proc_str, port_str, prt->name);
+ }
+#endif
fpe_was_unmasked = erts_block_fpe();
(*callback)((ErlDrvData) (prt->drv_data), &drv_monitor);
erts_unblock_fpe(fpe_was_unmasked);
@@ -7135,7 +7569,7 @@ driver_failure_term(ErlDrvPort ix, Eterm term, int eof)
if (state & ERTS_PORT_SFLG_CLOSING) {
terminate_port(prt);
} else if (eof && (state & ERTS_PORT_SFLG_SOFT_EOF)) {
- deliver_result(prt->common.id, ERTS_PORT_GET_CONNECTED(prt), am_eof);
+ deliver_result(prt, prt->common.id, ERTS_PORT_GET_CONNECTED(prt), am_eof);
} else {
/* XXX UGLY WORK AROUND, Let erts_deliver_port_exit() terminate the port */
if (prt->port_data_lock)
@@ -7143,7 +7577,7 @@ driver_failure_term(ErlDrvPort ix, Eterm term, int eof)
prt->ioq.size = 0;
if (prt->port_data_lock)
driver_pdl_unlock(prt->port_data_lock);
- erts_deliver_port_exit(prt, prt->common.id, eof ? am_normal : term, 0);
+ erts_deliver_port_exit(prt, prt->common.id, eof ? am_normal : term, 0, 0);
}
return 0;
}
@@ -7396,7 +7830,7 @@ driver_system_info(ErlDrvSysInfo *sip, size_t si_size)
* of ErlDrvSysInfo (introduced in driver version 1.0).
*/
if (!sip || si_size < ERL_DRV_SYS_INFO_SIZE(smp_support))
- erl_exit(1,
+ erts_exit(ERTS_ERROR_EXIT,
"driver_system_info(%p, %ld) called with invalid arguments\n",
sip, si_size);
@@ -7447,11 +7881,13 @@ driver_system_info(ErlDrvSysInfo *sip, size_t si_size)
* (driver version 3.1, NIF version 2.7)
*/
if (si_size >= ERL_DRV_SYS_INFO_SIZE(dirty_scheduler_support)) {
-#if defined(ERL_NIF_DIRTY_SCHEDULER_SUPPORT) && defined(USE_THREADS)
- sip->dirty_scheduler_support = 1;
+ sip->dirty_scheduler_support =
+#ifdef ERTS_DIRTY_SCHEDULERS
+ 1
#else
- sip->dirty_scheduler_support = 0;
+ 0
#endif
+ ;
}
}
@@ -7579,6 +8015,8 @@ init_driver(erts_driver_t *drv, ErlDrvEntry *de, DE_Handle *handle)
int fpe_was_unmasked = erts_block_fpe();
DTRACE4(driver_init, drv->name, drv->version.major, drv->version.minor,
drv->flags);
+ LTTNG4(driver_init, drv->name, drv->version.major, drv->version.minor,
+ drv->flags);
res = (*de->init)();
erts_unblock_fpe(fpe_was_unmasked);
return res;
diff --git a/erts/emulator/beam/lttng-wrapper.h b/erts/emulator/beam/lttng-wrapper.h
new file mode 100644
index 0000000000..294872c365
--- /dev/null
+++ b/erts/emulator/beam/lttng-wrapper.h
@@ -0,0 +1,107 @@
+/*
+ * %CopyrightBegin%
+ *
+ * Copyright Ericsson AB 1996-2016. All 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%
+ */
+
+#ifndef __LTTNG_WRAPPER_H__
+#define __LTTNG_WRAPPER_H__
+
+#ifdef USE_LTTNG
+
+#include "erlang_lttng.h"
+#define USE_LTTNG_VM_TRACEPOINTS
+
+#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_decl_carrier_stats(Name) \
+ lttng_carrier_stats_t Name##_STATSTRUCT, *Name = &Name##_STATSTRUCT
+
+#define lttng_pid_to_str(pid, name) \
+ erts_snprintf(name, LTTNG_PROC_BUFFER_SZ, "%T", (pid))
+
+#define lttng_portid_to_str(pid, name) \
+ erts_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) \
+ erts_snprintf(Name, LTTNG_MFA_BUFFER_SZ, "%T:%T/%lu", (Eterm)(m), (Eterm)(f), (Uint)(a))
+
+#define lttng_proc_to_mfa_str(p, Name) \
+ do { \
+ if (ERTS_PROC_IS_EXITING((p))) { \
+ strcpy(Name, "<exiting>"); \
+ } else { \
+ BeamInstr *_fptr = find_function_from_pc((p)->i); \
+ if (_fptr) { \
+ lttng_mfa_to_str(_fptr[0],_fptr[1],_fptr[2], Name); \
+ } else { \
+ strcpy(Name, "<unknown>"); \
+ } \
+ } \
+ } while(0)
+
+/* ErtsRunQueue->ErtsSchedulerData->Uint */
+#define lttng_rq_to_id(RQ) \
+ (RQ)->scheduler->no
+
+#define LTTNG_ENABLED(Name) \
+ tracepoint_enabled(com_ericsson_otp, Name)
+
+/* include a special LTTNG_DO for do_tracepoint ? */
+#define LTTNG1(Name, Arg1) \
+ tracepoint(com_ericsson_otp, Name, (Arg1))
+
+#define LTTNG2(Name, Arg1, Arg2) \
+ tracepoint(com_ericsson_otp, Name, (Arg1), (Arg2))
+
+#define LTTNG3(Name, Arg1, Arg2, Arg3) \
+ tracepoint(com_ericsson_otp, Name, (Arg1), (Arg2), (Arg3))
+
+#define LTTNG4(Name, Arg1, Arg2, Arg3, Arg4) \
+ tracepoint(com_ericsson_otp, Name, (Arg1), (Arg2), (Arg3), (Arg4))
+
+#define LTTNG5(Name, Arg1, Arg2, Arg3, Arg4, Arg5) \
+ tracepoint(com_ericsson_otp, Name, (Arg1), (Arg2), (Arg3), (Arg4), (Arg5))
+
+#else /* USE_LTTNG */
+
+#define LTTNG1(Name, Arg1) do {} while(0)
+#define LTTNG2(Name, Arg1, Arg2) do {} while(0)
+#define LTTNG3(Name, Arg1, Arg2, Arg3) do {} while(0)
+#define LTTNG4(Name, Arg1, Arg2, Arg3, Arg4) do {} while(0)
+#define LTTNG5(Name, Arg1, Arg2, Arg3, Arg4, Arg5) do {} while(0)
+
+#endif /* USE_LTTNG */
+#endif /* __LTTNG_WRAPPER_H__ */
diff --git a/erts/emulator/beam/module.c b/erts/emulator/beam/module.c
index f5c7b177d3..3eb11f1693 100644
--- a/erts/emulator/beam/module.c
+++ b/erts/emulator/beam/module.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/erts/emulator/beam/module.h b/erts/emulator/beam/module.h
index b7468b0926..4e12731d85 100644
--- a/erts/emulator/beam/module.h
+++ b/erts/emulator/beam/module.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.
diff --git a/erts/emulator/beam/ops.tab b/erts/emulator/beam/ops.tab
index 9e53b4bfcc..879daaca0a 100644
--- a/erts/emulator/beam/ops.tab
+++ b/erts/emulator/beam/ops.tab
@@ -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.
@@ -181,11 +181,6 @@ i_jump_on_val_zero y f I
i_jump_on_val x f I I
i_jump_on_val y f I I
-jump Target | label Lbl | same_label(Target, Lbl) => label Lbl
-
-is_ne_exact L1 S1 S2 | jump Fail | label L2 | same_label(L1, L2) => \
- is_eq_exact Fail S1 S2 | label L2
-
%macro: get_list GetList -pack
get_list x x x
get_list x x y
@@ -234,6 +229,9 @@ i_get_tuple_element y P y
%macro: i_get_tuple_element2 GetTupleElement2 -pack
i_get_tuple_element2 x P x
+%macro: i_get_tuple_element2y GetTupleElement2Y -pack
+i_get_tuple_element2y x P y y
+
%macro: i_get_tuple_element3 GetTupleElement3 -pack
i_get_tuple_element3 x P x
@@ -256,7 +254,14 @@ case_end x
badmatch x
if_end
-raise s s
+
+# Operands for raise/2 are almost always in x(2) and x(1).
+# Optimize for that case.
+raise x==2 x==1 => i_raise
+raise Trace=y Value=y => move Trace x=2 | move Value x=1 | i_raise
+raise Trace Value => move Trace x=3 | move Value x=1 | move x=3 x=2 | i_raise
+
+i_raise
# Internal now, but could be useful to make known to the compiler.
badarg j
@@ -303,7 +308,7 @@ move_window5 x x x x x y
# Swap registers.
move R1=x Tmp=x | move R2=xy R1 | move Tmp R2 => swap_temp R1 R2 Tmp
-swap_temp R1 R2 Tmp | line Loc | apply Live | is_killed(Tmp, Live) => \
+swap_temp R1 R2 Tmp | line Loc | apply Live | is_killed_apply(Tmp, Live) => \
swap R1 R2 | line Loc | apply Live
swap_temp R1 R2 Tmp | line Loc | call Live Addr | is_killed(Tmp, Live) => \
@@ -527,9 +532,9 @@ i_put_tuple x I
i_put_tuple y I
#
-# The instruction "put_list Const [] Dst" will not be generated by
-# the current BEAM compiler. But until R15A, play it safe by handling
-# that instruction with the following transformation.
+# The instruction "put_list Const [] Dst" were generated in rare
+# circumstances up to and including OTP 18. Starting with OTP 19,
+# AFAIK, it should never be generated.
#
put_list Const=c n Dst => move Const x | put_list x n Dst
@@ -647,6 +652,9 @@ get_tuple_element Reg=x P1 D1=x | get_tuple_element Reg=x P2 D2=x | \
get_tuple_element Reg=x P1 D1=x | get_tuple_element Reg=x P2 D2=x | \
succ(P1, P2) | succ(D1, D2) => i_get_tuple_element2 Reg P1 D1
+get_tuple_element Reg=x P1 D1=y | get_tuple_element Reg=x P2 D2=y | \
+ succ(P1, P2) => i_get_tuple_element2y Reg P1 D1 D2
+
get_tuple_element Reg P Dst => i_get_tuple_element Reg P Dst
is_integer Fail=f i =>
@@ -1355,9 +1363,7 @@ bs_put_utf8 Fail u Src=s => i_bs_put_utf8 Fail Src
i_bs_put_utf8 j s
-bs_put_utf16 Fail Flags=u Src=s => i_bs_put_utf16 Fail Flags Src
-
-i_bs_put_utf16 j I s
+bs_put_utf16 j I s
bs_put_utf32 Fail=j Flags=u Src=s => \
i_bs_validate_unicode Fail Src | bs_put_integer Fail i=32 u=1 Flags Src
@@ -1539,7 +1545,6 @@ gen_minus p Live Reg=d Int=i Dst | negation_is_small(Int) => \
# GCing arithmetic instructions.
#
-gen_plus Fail Live Y=y X=x Dst => i_plus Fail Live X Y Dst
gen_plus Fail Live S1 S2 Dst => i_plus Fail Live S1 S2 Dst
gen_minus Fail Live S1 S2 Dst => i_minus Fail Live S1 S2 Dst
diff --git a/erts/emulator/beam/packet_parser.c b/erts/emulator/beam/packet_parser.c
index a737a86f14..f14910bc72 100644
--- a/erts/emulator/beam/packet_parser.c
+++ b/erts/emulator/beam/packet_parser.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/erts/emulator/beam/packet_parser.h b/erts/emulator/beam/packet_parser.h
index 717d905fad..358d650804 100644
--- a/erts/emulator/beam/packet_parser.h
+++ b/erts/emulator/beam/packet_parser.h
@@ -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/erts/emulator/beam/register.c b/erts/emulator/beam/register.c
index fdb6cbc813..77f79fcea4 100644
--- a/erts/emulator/beam/register.c
+++ b/erts/emulator/beam/register.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.
@@ -125,7 +125,7 @@ static RegProc* reg_alloc(RegProc *tmpl)
{
RegProc* obj = (RegProc*) erts_alloc(ERTS_ALC_T_REG_PROC, sizeof(RegProc));
if (!obj) {
- erl_exit(1, "Can't allocate %d bytes of memory\n", sizeof(RegProc));
+ erts_exit(ERTS_ERROR_EXIT, "Can't allocate %d bytes of memory\n", sizeof(RegProc));
}
obj->name = tmpl->name;
obj->p = tmpl->p;
@@ -226,7 +226,8 @@ int erts_register_name(Process *c_p, Eterm name, Eterm id)
rp = (RegProc*) hash_put(&process_reg, (void*) &r);
if (proc && rp->p == proc) {
if (IS_TRACED_FL(proc, F_TRACE_PROCS)) {
- trace_proc(c_p, proc, am_register, name);
+ trace_proc(proc, ERTS_PROC_LOCK_MAIN,
+ proc, am_register, name);
}
proc->common.u.alive.reg = rp;
}
@@ -470,8 +471,8 @@ int erts_unregister_name(Process *c_p,
int res = 0;
RegProc r, *rp;
Port *port = c_prt;
+ ErtsProcLocks current_c_p_locks = 0;
#ifdef ERTS_SMP
- ErtsProcLocks current_c_p_locks;
/*
* SMP note: If 'c_prt != NULL' and 'c_prt->reg->name == name',
@@ -537,8 +538,12 @@ int erts_unregister_name(Process *c_p,
ERTS_SMP_LC_ASSERT(erts_lc_is_port_locked(port));
rp->pt->common.u.alive.reg = NULL;
-
+
if (IS_TRACED_FL(port, F_TRACE_PORTS)) {
+ if (current_c_p_locks) {
+ erts_smp_proc_unlock(c_p, current_c_p_locks);
+ current_c_p_locks = 0;
+ }
trace_port(port, am_unregister, r.name);
}
@@ -555,7 +560,8 @@ int erts_unregister_name(Process *c_p,
#endif
rp->p->common.u.alive.reg = NULL;
if (IS_TRACED_FL(rp->p, F_TRACE_PROCS)) {
- trace_proc(c_p, rp->p, am_unregister, r.name);
+ trace_proc(rp->p, (c_p == rp->p) ? c_p_locks : ERTS_PROC_LOCK_MAIN,
+ rp->p, am_unregister, r.name);
}
#ifdef ERTS_SMP
if (rp->p != c_p) {
diff --git a/erts/emulator/beam/register.h b/erts/emulator/beam/register.h
index 144536f34b..88ab7b7bf1 100644
--- a/erts/emulator/beam/register.h
+++ b/erts/emulator/beam/register.h
@@ -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/erts/emulator/beam/safe_hash.c b/erts/emulator/beam/safe_hash.c
index 3f039c8dfd..30b26a7296 100644
--- a/erts/emulator/beam/safe_hash.c
+++ b/erts/emulator/beam/safe_hash.c
@@ -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/erts/emulator/beam/safe_hash.h b/erts/emulator/beam/safe_hash.h
index a11370813c..6910b33004 100644
--- a/erts/emulator/beam/safe_hash.h
+++ b/erts/emulator/beam/safe_hash.h
@@ -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/erts/emulator/beam/sys.h b/erts/emulator/beam/sys.h
index 068d636a40..f303d4f167 100644
--- a/erts/emulator/beam/sys.h
+++ b/erts/emulator/beam/sys.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.
@@ -34,6 +34,10 @@
(((__GNUC__ << 24) | (__GNUC_MINOR__ << 12) | __GNUC_PATCHLEVEL__) >= (((MAJ) << 24) | ((MIN) << 12) | (PL)))
#endif
+#if defined(ERTS_DIRTY_SCHEDULERS) && !defined(ERTS_SMP)
+# error "Dirty schedulers not supported without smp support"
+#endif
+
#ifdef ERTS_INLINE
# ifndef ERTS_CAN_INLINE
# define ERTS_CAN_INLINE 1
@@ -92,6 +96,9 @@
#define ErtsInArea(ptr,start,nbytes) \
((UWord)((char*)(ptr) - (char*)(start)) < (nbytes))
+#define ErtsContainerStruct(ptr, type, member) \
+ (type *)((char *)(1 ? (ptr) : &((type *)0)->member) - offsetof(type, member))
+
#if defined (__WIN32__)
# include "erl_win_sys.h"
#else
@@ -138,10 +145,10 @@ typedef ERTS_SYS_FD_TYPE ErtsSysFdType;
#endif
#if ERTS_AT_LEAST_GCC_VSN__(2, 96, 0)
-#ifndef __llvm__
-# define ERTS_WRITE_UNLIKELY(X) X __attribute__ ((section ("ERTS_LOW_WRITE") ))
-#else
+#if (defined(__APPLE__) && defined(__MACH__)) || defined(__DARWIN__)
# define ERTS_WRITE_UNLIKELY(X) X __attribute__ ((section ("__DATA,ERTS_LOW_WRITE") ))
+#else
+# define ERTS_WRITE_UNLIKELY(X) X __attribute__ ((section ("ERTS_LOW_WRITE") ))
#endif
#else
# define ERTS_WRITE_UNLIKELY(X) X
@@ -580,15 +587,16 @@ static unsigned long zero_value = 0, one_value = 1;
# endif /* !__WIN32__ */
#endif /* WANT_NONBLOCKING */
-__decl_noreturn void __noreturn erl_exit(int n, char*, ...);
+__decl_noreturn void __noreturn erts_exit(int n, char*, ...);
-/* Some special erl_exit() codes: */
-#define ERTS_INTR_EXIT INT_MIN /* called from signal handler */
-#define ERTS_ABORT_EXIT (INT_MIN + 1) /* no crash dump; only abort() */
-#define ERTS_DUMP_EXIT (INT_MIN + 2) /* crash dump; then exit() */
+/* Some special erts_exit() codes: */
+#define ERTS_INTR_EXIT -1 /* called from signal handler */
+#define ERTS_ABORT_EXIT -2 /* no crash dump; only abort() */
+#define ERTS_DUMP_EXIT -3 /* crash dump; then exit() */
+#define ERTS_ERROR_EXIT -4 /* crash dump; then abort() */
#define ERTS_INTERNAL_ERROR(What) \
- erl_exit(ERTS_ABORT_EXIT, "%s:%d:%s(): Internal error: %s\n", \
+ erts_exit(ERTS_ABORT_EXIT, "%s:%d:%s(): Internal error: %s\n", \
__FILE__, __LINE__, __func__, What)
Eterm erts_check_io_info(void *p);
@@ -643,6 +651,15 @@ typedef struct preload {
unsigned char* code; /* Code pointer */
} Preload;
+/*
+ * ErtsTracer is either NIL, 'true' or [Mod | State]
+ *
+ * If set to NIL, it means no tracer.
+ * If set to 'true' it means the current process' tracer.
+ * If set to [Mod | State], there is a tracer.
+ * See erts_tracer_update for more details
+ */
+typedef Eterm ErtsTracer;
/*
* This structure contains options to all built in drivers.
@@ -903,7 +920,7 @@ erts_refc_inc(erts_refc_t *refcp, erts_aint_t min_val)
#ifdef ERTS_REFC_DEBUG
erts_aint_t val = erts_smp_atomic_inc_read_nob((erts_smp_atomic_t *) refcp);
if (val < min_val)
- erl_exit(ERTS_ABORT_EXIT,
+ erts_exit(ERTS_ABORT_EXIT,
"erts_refc_inc(): Bad refc found (refc=%ld < %ld)!\n",
val, min_val);
#else
@@ -917,7 +934,7 @@ erts_refc_inctest(erts_refc_t *refcp, erts_aint_t min_val)
erts_aint_t val = erts_smp_atomic_inc_read_nob((erts_smp_atomic_t *) refcp);
#ifdef ERTS_REFC_DEBUG
if (val < min_val)
- erl_exit(ERTS_ABORT_EXIT,
+ erts_exit(ERTS_ABORT_EXIT,
"erts_refc_inctest(): Bad refc found (refc=%ld < %ld)!\n",
val, min_val);
#endif
@@ -930,7 +947,7 @@ erts_refc_dec(erts_refc_t *refcp, erts_aint_t min_val)
#ifdef ERTS_REFC_DEBUG
erts_aint_t val = erts_smp_atomic_dec_read_nob((erts_smp_atomic_t *) refcp);
if (val < min_val)
- erl_exit(ERTS_ABORT_EXIT,
+ erts_exit(ERTS_ABORT_EXIT,
"erts_refc_dec(): Bad refc found (refc=%ld < %ld)!\n",
val, min_val);
#else
@@ -944,7 +961,7 @@ erts_refc_dectest(erts_refc_t *refcp, erts_aint_t min_val)
erts_aint_t val = erts_smp_atomic_dec_read_nob((erts_smp_atomic_t *) refcp);
#ifdef ERTS_REFC_DEBUG
if (val < min_val)
- erl_exit(ERTS_ABORT_EXIT,
+ erts_exit(ERTS_ABORT_EXIT,
"erts_refc_dectest(): Bad refc found (refc=%ld < %ld)!\n",
val, min_val);
#endif
@@ -957,7 +974,7 @@ erts_refc_add(erts_refc_t *refcp, erts_aint_t diff, erts_aint_t min_val)
#ifdef ERTS_REFC_DEBUG
erts_aint_t val = erts_smp_atomic_add_read_nob((erts_smp_atomic_t *) refcp, diff);
if (val < min_val)
- erl_exit(ERTS_ABORT_EXIT,
+ erts_exit(ERTS_ABORT_EXIT,
"erts_refc_add(%ld): Bad refc found (refc=%ld < %ld)!\n",
diff, val, min_val);
#else
@@ -971,7 +988,7 @@ erts_refc_read(erts_refc_t *refcp, erts_aint_t min_val)
erts_aint_t val = erts_smp_atomic_read_nob((erts_smp_atomic_t *) refcp);
#ifdef ERTS_REFC_DEBUG
if (val < min_val)
- erl_exit(ERTS_ABORT_EXIT,
+ erts_exit(ERTS_ABORT_EXIT,
"erts_refc_read(): Bad refc found (refc=%ld < %ld)!\n",
val, min_val);
#endif
diff --git a/erts/emulator/beam/time.c b/erts/emulator/beam/time.c
index 48cb39333a..6f15082130 100644
--- a/erts/emulator/beam/time.c
+++ b/erts/emulator/beam/time.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.
@@ -567,7 +567,7 @@ erts_init_time(int time_correction, ErtsTimeWarpMode time_warp_mode)
itime = erts_init_time_sup(time_correction, time_warp_mode);
#ifdef TIW_ITIME_IS_CONSTANT
if (itime != TIW_ITIME) {
- erl_exit(ERTS_ABORT_EXIT, "timer resolution mismatch %d != %d", itime, TIW_ITIME);
+ erts_exit(ERTS_ABORT_EXIT, "timer resolution mismatch %d != %d", itime, TIW_ITIME);
}
#else
tiw_itime = itime;
diff --git a/erts/emulator/beam/utils.c b/erts/emulator/beam/utils.c
index 3ba02023a1..cedc88e5fe 100644
--- a/erts/emulator/beam/utils.c
+++ b/erts/emulator/beam/utils.c
@@ -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.
@@ -71,41 +71,6 @@
#define HAVE_MALLOPT 0
#endif
-/* profile_scheduler mini message queue */
-
-typedef struct {
- Uint scheduler_id;
- Uint no_schedulers;
- Uint Ms;
- Uint s;
- Uint us;
- Eterm state;
-} profile_sched_msg;
-
-typedef struct {
- profile_sched_msg msg[2];
- Uint n;
-} profile_sched_msg_q;
-
-#ifdef ERTS_SMP
-
-#if 0 /* Unused */
-static void
-dispatch_profile_msg_q(profile_sched_msg_q *psmq)
-{
- int i = 0;
- profile_sched_msg *msg = NULL;
- ASSERT(psmq != NULL);
- for (i = 0; i < psmq->n; i++) {
- msg = &(psmq->msg[i]);
- profile_scheduler_q(make_small(msg->scheduler_id), msg->state, am_undefined, msg->Ms, msg->s, msg->us);
- }
-}
-#endif
-
-#endif
-
-
Eterm*
erts_heap_alloc(Process* p, Uint need, Uint xtra)
{
@@ -1069,7 +1034,7 @@ tail_recur:
}
default:
- erl_exit(1, "Invalid tag in make_hash(0x%X,0x%X)\n", term, op);
+ erts_exit(ERTS_ERROR_EXIT, "Invalid tag in make_hash(0x%X,0x%X)\n", term, op);
return 0;
}
if (WSTACK_ISEMPTY(stack)) break;
@@ -1342,7 +1307,7 @@ make_hash2(Eterm term)
i = hashmap_bitcount(MAP_HEADER_VAL(hdr));
break;
default:
- erl_exit(1, "bad header");
+ erts_exit(ERTS_ERROR_EXIT, "bad header");
}
while (i) {
if (is_list(*ptr)) {
@@ -1505,7 +1470,7 @@ make_hash2(Eterm term)
break;
default:
- erl_exit(1, "Invalid tag in make_hash2(0x%X)\n", term);
+ erts_exit(ERTS_ERROR_EXIT, "Invalid tag in make_hash2(0x%X)\n", term);
}
}
break;
@@ -1536,7 +1501,7 @@ make_hash2(Eterm term)
UINT32_HASH(NIL_DEF, HCONST_2);
goto hash2_common;
default:
- erl_exit(1, "Invalid tag in make_hash2(0x%X)\n", term);
+ erts_exit(ERTS_ERROR_EXIT, "Invalid tag in make_hash2(0x%X)\n", term);
}
case _TAG_IMMED1_SMALL:
{
@@ -1552,7 +1517,7 @@ make_hash2(Eterm term)
}
break;
default:
- erl_exit(1, "Invalid tag in make_hash2(0x%X)\n", term);
+ erts_exit(ERTS_ERROR_EXIT, "Invalid tag in make_hash2(0x%X)\n", term);
hash2_common:
/* Uint32 hash always has the hash value of the previous term,
@@ -1747,7 +1712,7 @@ make_internal_hash(Eterm term)
i = hashmap_bitcount(MAP_HEADER_VAL(hdr));
break;
default:
- erl_exit(1, "bad header");
+ erts_exit(ERTS_ERROR_EXIT, "bad header");
}
while (i) {
if (is_list(*ptr)) {
@@ -1923,7 +1888,7 @@ make_internal_hash(Eterm term)
goto pop_next;
}
default:
- erl_exit(1, "Invalid tag in make_hash2(0x%X)\n", term);
+ erts_exit(ERTS_ERROR_EXIT, "Invalid tag in make_hash2(0x%X)\n", term);
}
}
break;
@@ -1936,7 +1901,7 @@ make_internal_hash(Eterm term)
goto pop_next;
default:
- erl_exit(1, "Invalid tag in make_hash2(0x%X)\n", term);
+ erts_exit(ERTS_ERROR_EXIT, "Invalid tag in make_hash2(0x%X)\n", term);
pop_next:
if (ESTACK_ISEMPTY(s)) {
@@ -2219,7 +2184,7 @@ tail_recur:
}
default:
- erl_exit(1, "Invalid tag in make_broken_hash\n");
+ erts_exit(ERTS_ERROR_EXIT, "Invalid tag in make_broken_hash\n");
return 0;
}
if (WSTACK_ISEMPTY(stack)) break;
@@ -2298,7 +2263,7 @@ static void do_send_logger_message(Eterm *hp, ErlOffHeap *ohp, ErlHeapFragment *
{
ErtsMessage *mp = erts_alloc_message(0, NULL);
mp->data.heap_frag = bp;
- erts_queue_message(p, NULL /* only used for smp build */, mp, message, NIL);
+ erts_queue_message(p, 0, mp, message, am_system);
}
#endif
}
@@ -2893,7 +2858,7 @@ tailrecur_ne:
ASSERT(sz > 0 && sz < 17);
break;
default:
- erl_exit(1, "Unknown hashmap subsubtag\n");
+ erts_exit(ERTS_ERROR_EXIT, "Unknown hashmap subsubtag\n");
}
goto term_array;
}
diff --git a/erts/emulator/beam/version.h b/erts/emulator/beam/version.h
index 004725eaf5..0fa775fe8c 100644
--- a/erts/emulator/beam/version.h
+++ b/erts/emulator/beam/version.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/erts/emulator/drivers/common/efile_drv.c b/erts/emulator/drivers/common/efile_drv.c
index c5c780dce5..3adb8db661 100644
--- a/erts/emulator/drivers/common/efile_drv.c
+++ b/erts/emulator/drivers/common/efile_drv.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.
@@ -119,8 +119,6 @@
#include "dtrace-wrapper.h"
-void erl_exit(int n, char *fmt, ...);
-
static ErlDrvSysInfo sys_info;
/* For explanation of this var, see comment for same var in erl_async.c */
@@ -509,21 +507,10 @@ struct t_data
static void *ef_safe_alloc(Uint s)
{
void *p = EF_ALLOC(s);
- if (!p) erl_exit(1, "efile drv: Can't allocate %lu bytes of memory\n", (unsigned long)s);
- return p;
-}
-
-#if 0 /* Currently not used */
-
-static void *ef_safe_realloc(void *op, Uint s)
-{
- void *p = EF_REALLOC(op, s);
- if (!p) erl_exit(1, "efile drv: Can't reallocate %lu bytes of memory\n", (unsigned long)s);
+ if (!p) erts_exit(ERTS_ERROR_EXIT, "efile drv: Can't allocate %lu bytes of memory\n", (unsigned long)s);
return p;
}
-#endif
-
/*********************************************************************
* ErlIOVec manipulation functions.
*/
@@ -2913,12 +2900,12 @@ file_output(ErlDrvData e, char* buf, ErlDrvSizeT count)
d = EF_SAFE_ALLOC(sizeof(struct t_data) - 1
+ FILENAME_BYTELEN(buf + 9*4) + FILENAME_CHARSIZE);
- d->info.mode = get_int32(buf + 0 * 4);
- d->info.uid = get_int32(buf + 1 * 4);
- d->info.gid = get_int32(buf + 2 * 4);
- d->info.accessTime = (time_t)((Sint64)get_int64(buf + 3 * 4));
- d->info.modifyTime = (time_t)((Sint64)get_int64(buf + 5 * 4));
- d->info.cTime = (time_t)((Sint64)get_int64(buf + 7 * 4));
+ d->info.mode = get_int32(buf + 0 * 4);
+ d->info.uid = get_int32(buf + 1 * 4);
+ d->info.gid = get_int32(buf + 2 * 4);
+ d->info.accessTime = get_int64(buf + 3 * 4);
+ d->info.modifyTime = get_int64(buf + 5 * 4);
+ d->info.cTime = get_int64(buf + 7 * 4);
FILENAME_COPY(d->b, buf + 9*4);
#ifdef USE_VM_PROBES
diff --git a/erts/emulator/drivers/common/erl_efile.h b/erts/emulator/drivers/common/erl_efile.h
index be5a891486..b7f063b4f2 100644
--- a/erts/emulator/drivers/common/erl_efile.h
+++ b/erts/emulator/drivers/common/erl_efile.h
@@ -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.
@@ -105,9 +105,9 @@ typedef struct _Efile_info {
Uint32 inode; /* Inode number. */
Uint32 uid; /* User id of owner. */
Uint32 gid; /* Group id of owner. */
- time_t accessTime; /* Last time the file was accessed. */
- time_t modifyTime; /* Last time the file was modified. */
- time_t cTime; /* Creation time (Windows) or last
+ Sint64 accessTime; /* Last time the file was accessed. */
+ Sint64 modifyTime; /* Last time the file was modified. */
+ Sint64 cTime; /* Creation time (Windows) or last
* inode change (Unix).
*/
} Efile_info;
diff --git a/erts/emulator/drivers/common/gzio.h b/erts/emulator/drivers/common/gzio.h
index a6fe2fb6f5..ee0ebe7bd8 100644
--- a/erts/emulator/drivers/common/gzio.h
+++ b/erts/emulator/drivers/common/gzio.h
@@ -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/erts/emulator/drivers/common/gzio_zutil.h b/erts/emulator/drivers/common/gzio_zutil.h
index 9eefb86637..b229ae4efd 100644
--- a/erts/emulator/drivers/common/gzio_zutil.h
+++ b/erts/emulator/drivers/common/gzio_zutil.h
@@ -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/erts/emulator/drivers/common/inet_drv.c b/erts/emulator/drivers/common/inet_drv.c
index f910b5955a..e87d141ddb 100644
--- a/erts/emulator/drivers/common/inet_drv.c
+++ b/erts/emulator/drivers/common/inet_drv.c
@@ -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.
@@ -1345,7 +1345,7 @@ static const struct in6_addr in6addr_loopback =
#endif /* HAVE_IN6 */
/* XXX: is this a driver interface function ??? */
-void erl_exit(int n, char*, ...);
+void erts_exit(int n, char*, ...);
/*
* Malloc wrapper,
@@ -1358,7 +1358,7 @@ void erl_exit(int n, char*, ...);
static void *alloc_wrapper(ErlDrvSizeT size){
void *ret = driver_alloc(size);
if(ret == NULL)
- erl_exit(1,"Out of virtual memory in malloc (%s)", __FILE__);
+ erts_exit(ERTS_ERROR_EXIT,"Out of virtual memory in malloc (%s)", __FILE__);
return ret;
}
#define ALLOC(X) alloc_wrapper(X)
@@ -1366,7 +1366,7 @@ static void *alloc_wrapper(ErlDrvSizeT size){
static void *realloc_wrapper(void *current, ErlDrvSizeT size){
void *ret = driver_realloc(current,size);
if(ret == NULL)
- erl_exit(1,"Out of virtual memory in realloc (%s)", __FILE__);
+ erts_exit(ERTS_ERROR_EXIT,"Out of virtual memory in realloc (%s)", __FILE__);
return ret;
}
#define REALLOC(X,Y) realloc_wrapper(X,Y)
@@ -1627,7 +1627,7 @@ check_double_release(InetDrvBufStk *bs, ErlDrvBinary* buf)
int i;
for (i = 0; i < bs->buf.pos; ++i) {
if (bs->buf.stk[i] == buf) {
- erl_exit(ERTS_ABORT_EXIT,
+ erts_exit(ERTS_ABORT_EXIT,
"Multiple buffer release in inet_drv, this "
"is a bug, save the core and send it to "
@@ -6803,7 +6803,7 @@ static ErlDrvSSizeT inet_fill_opts(inet_descriptor* desc,
do { \
ErlDrvSizeT new_need = ((Ptr) - (*dest)) + (Size); \
if (new_need > dest_used) { \
- erl_exit(1,"Internal error in inet_drv, " \
+ erts_exit(ERTS_ERROR_EXIT,"Internal error in inet_drv, " \
"miscalculated buffer size"); \
} \
dest_used = new_need; \
@@ -7180,7 +7180,7 @@ static ErlDrvSSizeT sctp_fill_opts(inet_descriptor* desc,
do { \
int need; \
if ((Index) > spec_allocated) { \
- erl_exit(1,"Internal error in inet_drv, " \
+ erts_exit(ERTS_ERROR_EXIT,"Internal error in inet_drv, " \
"miscalculated buffer size"); \
} \
need = (Index) + (N); \
diff --git a/erts/emulator/drivers/common/ram_file_drv.c b/erts/emulator/drivers/common/ram_file_drv.c
index 9cb44d0b7e..bcdfe6a186 100644
--- a/erts/emulator/drivers/common/ram_file_drv.c
+++ b/erts/emulator/drivers/common/ram_file_drv.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/erts/emulator/drivers/common/zlib_drv.c b/erts/emulator/drivers/common/zlib_drv.c
index 364048174c..440ba956d8 100644
--- a/erts/emulator/drivers/common/zlib_drv.c
+++ b/erts/emulator/drivers/common/zlib_drv.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/erts/emulator/drivers/unix/bin_drv.c b/erts/emulator/drivers/unix/bin_drv.c
index 21fb398907..4b633bb0cf 100644
--- a/erts/emulator/drivers/unix/bin_drv.c
+++ b/erts/emulator/drivers/unix/bin_drv.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/erts/emulator/drivers/unix/multi_drv.c b/erts/emulator/drivers/unix/multi_drv.c
index 7f8c2d9a0d..eddc57d4d4 100644
--- a/erts/emulator/drivers/unix/multi_drv.c
+++ b/erts/emulator/drivers/unix/multi_drv.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/erts/emulator/drivers/unix/sig_drv.c b/erts/emulator/drivers/unix/sig_drv.c
index e6f2ecc494..68ad6b9156 100644
--- a/erts/emulator/drivers/unix/sig_drv.c
+++ b/erts/emulator/drivers/unix/sig_drv.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/erts/emulator/drivers/unix/ttsl_drv.c b/erts/emulator/drivers/unix/ttsl_drv.c
index 25cad37e25..e425b99f16 100644
--- a/erts/emulator/drivers/unix/ttsl_drv.c
+++ b/erts/emulator/drivers/unix/ttsl_drv.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.
@@ -199,7 +199,7 @@ static void my_debug_printf(char *fmt, ...)
erts_vsnprintf(buffer,1024,fmt,args);
va_end(args);
erts_fprintf(debuglog,"%s\n",buffer);
- //erts_printf("Debuglog = %s\n",buffer);
+ /*erts_printf("Debuglog = %s\n",buffer);*/
}
#else
@@ -261,7 +261,7 @@ static int ttysl_init(void)
if (debuglog != NULL)
setbuf(debuglog,NULL);
}
- DEBUGLOG(("Debuglog = %s(0x%ld)\n",dl,(long) debuglog));
+ DEBUGLOG(("ttysl_init: Debuglog = %s(0x%ld)\n",dl,(long) debuglog));
}
#endif
return 0;
@@ -277,36 +277,46 @@ static ErlDrvData ttysl_start(ErlDrvPort port, char* buf)
int flag;
extern int using_oldshell; /* set this to let the rest of erts know */
+ DEBUGLOG(("ttysl_start: driver input \"%s\", ttysl_port = %d (-1 expected)", buf, ttysl_port));
utf8buf_size = 0;
- if (ttysl_port != (ErlDrvPort)-1)
- return ERL_DRV_ERROR_GENERAL;
+ if (ttysl_port != (ErlDrvPort)-1) {
+ DEBUGLOG(("ttysl_start: failure with ttysl_port = %d, not initialized properly?\n", ttysl_port));
+ return ERL_DRV_ERROR_GENERAL;
+ }
- if (!isatty(0) || !isatty(1))
+ DEBUGLOG(("ttysl_start: isatty(0) = %d (1 expected), isatty(1) = %d (1 expected)", isatty(0), isatty(1)));
+ if (!isatty(0) || !isatty(1)) {
+ DEBUGLOG(("ttysl_start: failure in isatty, isatty(0) = %d, isatty(1) = %d", isatty(0), isatty(1)));
return ERL_DRV_ERROR_GENERAL;
+ }
/* Set the terminal modes to default leave as is. */
canon = echo = sig = 0;
/* Parse the input parameters. */
for (s = strchr(buf, ' '); s; s = t) {
- s++;
- /* Find end of this argument (start of next) and insert NUL. */
- if ((t = strchr(s, ' '))) {
- *t = '\0';
- }
- if ((flag = ((*s == '+') ? 1 : ((*s == '-') ? -1 : 0)))) {
- if (s[1] == 'c') canon = flag;
- if (s[1] == 'e') echo = flag;
- if (s[1] == 's') sig = flag;
- }
- else if ((ttysl_fd = open(s, O_RDWR, 0)) < 0)
- return ERL_DRV_ERROR_GENERAL;
+ s++;
+ /* Find end of this argument (start of next) and insert NUL. */
+ if ((t = strchr(s, ' '))) {
+ *t = '\0';
+ }
+ if ((flag = ((*s == '+') ? 1 : ((*s == '-') ? -1 : 0)))) {
+ if (s[1] == 'c') canon = flag;
+ if (s[1] == 'e') echo = flag;
+ if (s[1] == 's') sig = flag;
+ }
+ else if ((ttysl_fd = open(s, O_RDWR, 0)) < 0) {
+ DEBUGLOG(("ttysl_start: failed to open ttysl_fd, open(%s, O_RDWR, 0)) = %d\n", s, ttysl_fd));
+ return ERL_DRV_ERROR_GENERAL;
+ }
}
+
if (ttysl_fd < 0)
ttysl_fd = 0;
if (tty_init(ttysl_fd, canon, echo, sig) < 0 ||
- tty_set(ttysl_fd) < 0) {
+ tty_set(ttysl_fd) < 0) {
+ DEBUGLOG(("ttysl_start: failed init tty or set tty\n"));
ttysl_port = (ErlDrvPort)-1;
tty_reset(ttysl_fd);
return ERL_DRV_ERROR_GENERAL;
@@ -314,6 +324,7 @@ static ErlDrvData ttysl_start(ErlDrvPort port, char* buf)
/* Set up smart line and termcap stuff. */
if (!start_lbuf() || !start_termcap()) {
+ DEBUGLOG(("ttysl_start: failed to start_lbuf or start_termcap\n"));
stop_lbuf(); /* Must free this */
tty_reset(ttysl_fd);
return ERL_DRV_ERROR_GENERAL;
@@ -335,10 +346,10 @@ static ErlDrvData ttysl_start(ErlDrvPort port, char* buf)
l = setlocale(LC_CTYPE, ""); /* Set international environment */
if (l != NULL) {
utf8_mode = (strcmp(nl_langinfo(CODESET), "UTF-8") == 0);
- DEBUGLOG(("setlocale: %s\n",l));
+ DEBUGLOG(("ttysl_start: setlocale: %s",l));
}
#endif
- DEBUGLOG(("utf8_mode is %s\n",(utf8_mode) ? "on" : "off"));
+ DEBUGLOG(("ttysl_start: utf8_mode is %s",(utf8_mode) ? "on" : "off"));
sys_signal(SIGCONT, cont);
sys_signal(SIGWINCH, winch);
@@ -348,6 +359,7 @@ static ErlDrvData ttysl_start(ErlDrvPort port, char* buf)
/* we need to know this when we enter the break handler */
using_oldshell = 0;
+ DEBUGLOG(("ttysl_start: successful start\n"));
return (ErlDrvData)ttysl_port; /* Nothing important to return */
#endif /* HAVE_TERMCAP */
}
@@ -418,6 +430,7 @@ static ErlDrvSSizeT ttysl_control(ErlDrvData drv_data,
static void ttysl_stop(ErlDrvData ttysl_data)
{
+ DEBUGLOG(("ttysl_stop: ttysl_port = %d\n",ttysl_port));
if (ttysl_port != (ErlDrvPort)-1) {
stop_lbuf();
stop_termcap();
@@ -617,12 +630,13 @@ static int check_buf_size(byte *s, int n)
int ch;
int size = 10;
+ DEBUGLOG(("check_buf_size: n = %d",n));
while(pos < n) {
/* Indata is always UTF-8 */
if ((ch = pick_utf8(s,n,&pos)) < 0) {
/* XXX temporary allow invalid chars */
ch = (int) s[pos];
- DEBUGLOG(("Invalid UTF8:%d",ch));
+ DEBUGLOG(("check_buf_size: Invalid UTF8:%d",ch));
++pos;
}
if (utf8_mode) { /* That is, terminal is UTF8 compliant */
@@ -630,7 +644,7 @@ static int check_buf_size(byte *s, int n)
#ifdef HAVE_WCWIDTH
int width;
#endif
- DEBUGLOG(("Printable(UTF-8:%d):%d",pos,ch));
+ DEBUGLOG(("check_buf_size: Printable(UTF-8:%d):%d",pos,ch));
size++;
#ifdef HAVE_WCWIDTH
if ((width = wcwidth(ch)) > 1) {
@@ -640,21 +654,21 @@ static int check_buf_size(byte *s, int n)
} else if (ch == '\t') {
size += 8;
} else {
- DEBUGLOG(("Magic(UTF-8:%d):%d",pos,ch));
+ DEBUGLOG(("check_buf_size: Magic(UTF-8:%d):%d",pos,ch));
size += 2;
}
} else {
if (ch <= 255 && isprint(ch)) {
- DEBUGLOG(("Printable:%d",ch));
+ DEBUGLOG(("check_buf_size: Printable:%d",ch));
size++;
} else if (ch == '\t')
size += 8;
else if (ch >= 128) {
- DEBUGLOG(("Non printable:%d",ch));
+ DEBUGLOG(("check_buf_size: Non printable:%d",ch));
size += (octal_or_hex_positions(ch) + 1);
}
else {
- DEBUGLOG(("Magic:%d",ch));
+ DEBUGLOG(("check_buf_size: Magic:%d",ch));
size += 2;
}
}
@@ -664,10 +678,12 @@ static int check_buf_size(byte *s, int n)
lbuf_size = size + lpos + BUFSIZ;
if ((lbuf = driver_realloc(lbuf, lbuf_size * sizeof(Uint32))) == NULL) {
+ DEBUGLOG(("check_buf_size: alloc failure of %d bytes", lbuf_size * sizeof(Uint32)));
driver_failure(ttysl_port, -1);
return(0);
}
}
+ DEBUGLOG(("check_buf_size: success\n"));
return(1);
}
@@ -685,6 +701,8 @@ static void ttysl_from_erlang(ErlDrvData ttysl_data, char* buf, ErlDrvSizeT coun
if (lpos > MAXSIZE)
put_chars((byte*)"\n", 1);
+ DEBUGLOG(("ttysl_from_erlang: OP = %d", buf[0]));
+
switch (buf[0]) {
case OP_PUTC_SYNC:
/* Using sync means that we have to send an ok to the
@@ -695,7 +713,7 @@ static void ttysl_from_erlang(ErlDrvData ttysl_data, char* buf, ErlDrvSizeT coun
the port_command. */
/* fall through */
case OP_PUTC:
- DEBUGLOG(("OP: Putc(%lu)",(unsigned long) count-1));
+ DEBUGLOG(("ttysl_from_erlang: OP: Putc(%lu)",(unsigned long) count-1));
if (check_buf_size((byte*)buf+1, count-1) == 0)
return;
put_chars((byte*)buf+1, count-1);
@@ -738,6 +756,7 @@ static void ttysl_from_erlang(ErlDrvData ttysl_data, char* buf, ErlDrvSizeT coun
ERL_DRV_USE|ERL_DRV_WRITE,1);
break;
} else {
+ DEBUGLOG(("ttysl_from_erlang: driver failure in writev(%d,..) = %d (errno = %d)\n", ttysl_fd, written, errno));
driver_failure_posix(ttysl_port, errno);
return;
}
@@ -774,6 +793,9 @@ static void ttysl_to_tty(ErlDrvData ttysl_data, ErlDrvEvent fd) {
ErlDrvSizeT sz;
iov = driver_peekq(ttysl_port,&qlen);
+
+ DEBUGLOG(("ttysl_to_tty: qlen = %d", qlen));
+
if (iov)
written = writev(ttysl_fd, iov, qlen > MAXIOV ? MAXIOV : qlen);
else
@@ -782,6 +804,7 @@ static void ttysl_to_tty(ErlDrvData ttysl_data, ErlDrvEvent fd) {
if (errno == EINTR) {
continue;
} else if (errno != ERRNO_BLOCK){
+ DEBUGLOG(("ttysl_to_tty: driver failure in writev(%d,..) = %d (errno = %d)\n", ttysl_fd, written, errno));
driver_failure_posix(ttysl_port, errno);
}
break;
@@ -800,11 +823,13 @@ static void ttysl_to_tty(ErlDrvData ttysl_data, ErlDrvEvent fd) {
if (sz == 0) {
driver_select(ttysl_port,(ErlDrvEvent)(long)ttysl_fd,
ERL_DRV_WRITE,0);
- if (ttysl_terminate)
+ if (ttysl_terminate) {
/* flush has been called, which means we should terminate
when queue is empty. This will not send any exit
message */
+ DEBUGLOG(("ttysl_to_tty: ttysl_terminate normal\n"));
driver_failure_atom(ttysl_port, "normal");
+ }
break;
}
}
@@ -814,6 +839,7 @@ static void ttysl_to_tty(ErlDrvData ttysl_data, ErlDrvEvent fd) {
}
static void ttysl_flush_tty(ErlDrvData ttysl_data) {
+ DEBUGLOG(("ttysl_flush_tty: .."));
ttysl_terminate = 1;
return;
}
@@ -834,6 +860,8 @@ static void ttysl_from_tty(ErlDrvData ttysl_data, ErlDrvEvent fd)
p += utf8buf_size;
utf8buf_size = 0;
}
+
+ DEBUGLOG(("ttysl_from_tty: remainder = %d", left));
if ((i = read((int)(SWord)fd, (char *) p, left)) >= 0) {
if (p != b) {
@@ -847,7 +875,7 @@ static void ttysl_from_tty(ErlDrvData ttysl_data, ErlDrvEvent fd)
utf8buf_size = i -pos;
memcpy(utf8buf,b+pos,utf8buf_size);
} else if (ch == -1) {
- DEBUGLOG(("Giving up on UTF8 mode, invalid character"));
+ DEBUGLOG(("ttysl_from_tty: Giving up on UTF8 mode, invalid character"));
utf8_mode = 0;
goto latin_terminal;
}
@@ -864,6 +892,7 @@ static void ttysl_from_tty(ErlDrvData ttysl_data, ErlDrvEvent fd)
}
}
} else {
+ DEBUGLOG(("ttysl_from_tty: driver failure in read(%d,..) = %d\n", (int)(SWord)fd, i));
driver_failure(ttysl_port, -1);
}
}
@@ -1155,7 +1184,7 @@ static int write_buf(Uint32 *s, int n)
byte *octbuff;
byte octtmp[256];
int octbytes;
- DEBUGLOG(("Escaped: %d", ch));
+ DEBUGLOG(("write_buf: Escaped: %d", ch));
octbytes = octal_or_hex_positions(ch);
if (octbytes > 256) {
octbuff = driver_alloc(octbytes);
@@ -1164,11 +1193,11 @@ static int write_buf(Uint32 *s, int n)
}
octbytes = 0;
octal_or_hex_format(ch, octbuff, &octbytes);
- DEBUGLOG(("octbytes: %d", octbytes));
+ DEBUGLOG(("write_buf: octbytes: %d", octbytes));
outc('\\');
for (i = 0; i < octbytes; ++i) {
outc(lastput = octbuff[i]);
- DEBUGLOG(("outc: %d", (int) lastput));
+ DEBUGLOG(("write_buf: outc: %d", (int) lastput));
}
n -= octbytes+1;
s += octbytes+1;
@@ -1180,7 +1209,7 @@ static int write_buf(Uint32 *s, int n)
--n; s++;
#endif
} else {
- DEBUGLOG(("Very unexpected character %d",(int) *s));
+ DEBUGLOG(("write_buf: Very unexpected character %d",(int) *s));
++n;
--s;
}
@@ -1242,6 +1271,9 @@ static int start_termcap(void)
size_t envsz = 1024;
char *env = NULL;
char *c;
+ int tres;
+
+ DEBUGLOG(("start_termcap: .."));
capbuf = driver_alloc(1024);
if (!capbuf)
@@ -1249,9 +1281,10 @@ static int start_termcap(void)
eres = erl_drv_getenv("TERM", capbuf, &envsz);
if (eres == 0)
env = capbuf;
- else if (eres < 0)
+ else if (eres < 0) {
+ DEBUGLOG(("start_termcap: failure in erl_drv_getenv(\"TERM\", ..) = %d\n", eres));
goto false;
- else /* if (eres > 1) */ {
+ } else /* if (eres > 1) */ {
char *envbuf = driver_alloc(envsz);
if (!envbuf)
goto false;
@@ -1261,7 +1294,8 @@ static int start_termcap(void)
if (eres == 0)
break;
newenvbuf = driver_realloc(envbuf, envsz);
- if (eres < 0 || !newenvbuf) {
+ if (eres < 0 || !newenvbuf) {
+ DEBUGLOG(("start_termcap: failure in erl_drv_getenv(\"TERM\", ..) = %d or realloc buf == %p\n", eres, newenvbuf));
env = newenvbuf ? newenvbuf : envbuf;
goto false;
}
@@ -1269,8 +1303,10 @@ static int start_termcap(void)
}
env = envbuf;
}
- if (tgetent((char*)lbuf, env) <= 0)
- goto false;
+ if ((tres = tgetent((char*)lbuf, env)) <= 0) {
+ DEBUGLOG(("start_termcap: failure in tgetent(..) = %d\n", tres));
+ goto false;
+ }
if (env != capbuf) {
env = NULL;
driver_free(env);
@@ -1286,8 +1322,11 @@ static int start_termcap(void)
if (!(left = tgetflag("bs") ? "\b" : tgetstr("bc", &c)))
left = "\b"; /* Can't happen - but does on Solaris 2 */
right = tgetstr("nd", &c);
- if (up && down && left && right)
- return TRUE;
+ if (up && down && left && right) {
+ DEBUGLOG(("start_termcap: successful start\n"));
+ return TRUE;
+ }
+ DEBUGLOG(("start_termcap: failed start\n"));
false:
if (env && env != capbuf)
driver_free(env);
@@ -1364,10 +1403,13 @@ static void update_cols(void)
static struct termios tty_smode, tty_rmode;
-static int tty_init(int fd, int canon, int echo, int sig)
-{
- if (tcgetattr(fd, &tty_rmode) < 0)
- return -1;
+static int tty_init(int fd, int canon, int echo, int sig) {
+ int tres;
+ DEBUGLOG(("tty_init: fd = %d, canon = %d, echo = %d, sig = %d", fd, canon, echo, sig));
+ if ((tres = tcgetattr(fd, &tty_rmode)) < 0) {
+ DEBUGLOG(("tty_init: failure in tcgetattr(%d,..) = %d\n", fd, tres));
+ return -1;
+ }
tty_smode = tty_rmode;
/* Default characteristics for all usage including termcap output. */
@@ -1420,6 +1462,7 @@ static int tty_init(int fd, int canon, int echo, int sig)
#endif
tty_smode.c_lflag &= ~(ISIG|IEXTEN);
}
+ DEBUGLOG(("tty_init: successful init\n"));
return 0;
}
@@ -1430,20 +1473,25 @@ static int tty_init(int fd, int canon, int echo, int sig)
static int tty_set(int fd)
{
- DEBUGF(("Setting tty...\n"));
+ int tres;
+ DEBUGF(("tty_set: Setting tty...\n"));
- if (tcsetattr(fd, TCSANOW, &tty_smode) < 0)
+ if ((tres = tcsetattr(fd, TCSANOW, &tty_smode)) < 0) {
+ DEBUGLOG(("tty_set: failure in tcgetattr(%d,..) = %d\n", fd, tres));
return(-1);
+ }
return(0);
}
static int tty_reset(int fd) /* of terminal device */
{
- DEBUGF(("Resetting tty...\n"));
+ int tres;
+ DEBUGF(("tty_reset: Resetting tty...\n"));
- if (tcsetattr(fd, TCSANOW, &tty_rmode) < 0)
+ if ((tres = tcsetattr(fd, TCSANOW, &tty_rmode)) < 0) {
+ DEBUGLOG(("tty_reset: failure in tcsetattr(%d,..) = %d\n", fd, tres));
return(-1);
-
+ }
return(0);
}
@@ -1458,6 +1506,7 @@ static int tty_reset(int fd) /* of terminal device */
static RETSIGTYPE suspend(int sig)
{
if (tty_reset(ttysl_fd) < 0) {
+ DEBUGLOG(("signal: failure in suspend(%d), can't reset tty %d\n", sig, ttysl_fd));
fprintf(stderr,"Can't reset tty \n");
exit(1);
}
@@ -1469,6 +1518,7 @@ static RETSIGTYPE suspend(int sig)
sys_signal(sig, suspend); /* Reset signal handler */
if (tty_set(ttysl_fd) < 0) {
+ DEBUGLOG(("signal: failure in suspend(%d), can't set tty %d\n", sig, ttysl_fd));
fprintf(stderr,"Can't set tty raw \n");
exit(1);
}
@@ -1479,6 +1529,7 @@ static RETSIGTYPE suspend(int sig)
static RETSIGTYPE cont(int sig)
{
if (tty_set(ttysl_fd) < 0) {
+ DEBUGLOG(("signal: failure in cont(%d), can't set tty raw %d\n", sig, ttysl_fd));
fprintf(stderr,"Can't set tty raw\n");
exit(1);
}
diff --git a/erts/emulator/drivers/unix/unix_efile.c b/erts/emulator/drivers/unix/unix_efile.c
index 00da48b107..bfe0807df8 100644
--- a/erts/emulator/drivers/unix/unix_efile.c
+++ b/erts/emulator/drivers/unix/unix_efile.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.
@@ -467,7 +467,7 @@ int
efile_fdatasync(Efile_error *errInfo, /* Where to return error codes. */
int fd) /* File descriptor for file to sync data. */
{
-#ifdef HAVE_FDATASYNC
+#if defined(HAVE_FDATASYNC) && !defined(__DARWIN__)
return check_error(fdatasync(fd), errInfo);
#else
return efile_fsync(errInfo, fd);
@@ -537,9 +537,9 @@ efile_fileinfo(Efile_error* errInfo, Efile_info* pInfo,
else
pInfo->type = FT_OTHER;
- pInfo->accessTime = statbuf.st_atime;
- pInfo->modifyTime = statbuf.st_mtime;
- pInfo->cTime = statbuf.st_ctime;
+ pInfo->accessTime = (Sint64)statbuf.st_atime;
+ pInfo->modifyTime = (Sint64)statbuf.st_mtime;
+ pInfo->cTime = (Sint64)statbuf.st_ctime;
pInfo->mode = statbuf.st_mode;
pInfo->links = statbuf.st_nlink;
@@ -578,8 +578,8 @@ efile_write_info(Efile_error *errInfo, Efile_info *pInfo, char *name)
}
}
- tval.actime = pInfo->accessTime;
- tval.modtime = pInfo->modifyTime;
+ tval.actime = (time_t)pInfo->accessTime;
+ tval.modtime = (time_t)pInfo->modifyTime;
return check_error(utime(name, &tval), errInfo);
}
@@ -638,12 +638,21 @@ efile_writev(Efile_error* errInfo, /* Where to return error codes */
do {
w = writev(fd, &iov[cnt], b);
} while (w < 0 && errno == EINTR);
+ if (w < 0 && errno == EINVAL) {
+ goto single_write;
+ }
} else
+ single_write:
/* Degenerated io vector - use regular write */
#endif
{
do {
- w = write(fd, iov[cnt].iov_base, iov[cnt].iov_len);
+ size_t iov_len = iov[cnt].iov_len;
+ size_t limit = 1024*1024*1024; /* 1GB */
+ if (iov_len > limit) {
+ iov_len = limit;
+ }
+ w = write(fd, iov[cnt].iov_base, iov_len);
} while (w < 0 && errno == EINTR);
ASSERT(w <= iov[cnt].iov_len ||
(w == -1 && errno != EINTR));
diff --git a/erts/emulator/drivers/vxworks/vxworks_resolv.c b/erts/emulator/drivers/vxworks/vxworks_resolv.c
index a7de53c692..c2cdf4a90b 100644
--- a/erts/emulator/drivers/vxworks/vxworks_resolv.c
+++ b/erts/emulator/drivers/vxworks/vxworks_resolv.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/erts/emulator/drivers/win32/registry_drv.c b/erts/emulator/drivers/win32/registry_drv.c
index 4e396aa8d9..a03a030df8 100644
--- a/erts/emulator/drivers/win32/registry_drv.c
+++ b/erts/emulator/drivers/win32/registry_drv.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/erts/emulator/drivers/win32/ttsl_drv.c b/erts/emulator/drivers/win32/ttsl_drv.c
index 4bd766a8a8..99e7fb25a4 100644
--- a/erts/emulator/drivers/win32/ttsl_drv.c
+++ b/erts/emulator/drivers/win32/ttsl_drv.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/erts/emulator/drivers/win32/win_con.c b/erts/emulator/drivers/win32/win_con.c
index 0d63d46698..0bcccfe405 100644
--- a/erts/emulator/drivers/win32/win_con.c
+++ b/erts/emulator/drivers/win32/win_con.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.
@@ -279,7 +279,7 @@ ConInit(void)
}
/*
- ConNormalExit() is called from erl_exit() when the emulator
+ ConNormalExit() is called from erts_exit() when the emulator
is stopping. If the exit has not been initiated by this
console thread (WM_DESTROY or ID_BREAK), the function must
invoke the console thread to save the user preferences.
@@ -529,7 +529,7 @@ ConThreadInit(LPVOID param)
/*
PostQuitMessage() results in WM_QUIT which makes GetMessage()
return 0 (which stops the main loop). Before we return from
- the console thread, the ctrl_handler is called to do erl_exit.
+ the console thread, the ctrl_handler is called to do erts_exit.
*/
(*ctrl_handler)(CTRL_CLOSE_EVENT);
return msg.wParam;
diff --git a/erts/emulator/drivers/win32/win_con.h b/erts/emulator/drivers/win32/win_con.h
index 3f4e89a195..7a642cd7ed 100644
--- a/erts/emulator/drivers/win32/win_con.h
+++ b/erts/emulator/drivers/win32/win_con.h
@@ -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/erts/emulator/drivers/win32/win_efile.c b/erts/emulator/drivers/win32/win_efile.c
index d95f29f49d..2d366b5833 100644
--- a/erts/emulator/drivers/win32/win_efile.c
+++ b/erts/emulator/drivers/win32/win_efile.c
@@ -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/erts/emulator/hipe/TODO b/erts/emulator/hipe/TODO
index dd9760ea1c..0c28616a30 100644
--- a/erts/emulator/hipe/TODO
+++ b/erts/emulator/hipe/TODO
@@ -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/erts/emulator/hipe/elf64ppc.x b/erts/emulator/hipe/elf64ppc.x
index 3cd4010cb3..46d2632970 100644
--- a/erts/emulator/hipe/elf64ppc.x
+++ b/erts/emulator/hipe/elf64ppc.x
@@ -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/erts/emulator/hipe/hipe_amd64.c b/erts/emulator/hipe/hipe_amd64.c
index 1bb336637d..62739d2a78 100644
--- a/erts/emulator/hipe/hipe_amd64.c
+++ b/erts/emulator/hipe/hipe_amd64.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.
@@ -83,21 +83,6 @@ int hipe_patch_call(void *callAddress, void *destAddress, void *trampoline)
return 0;
}
-/*
- * Memory allocator for executable code.
- *
- * This is required on AMD64 because some Linux kernels
- * (including 2.6.10-rc1 and newer www.kernel.org ones)
- * default to non-executable memory mappings, causing
- * ordinary malloc() memory to be non-executable.
- *
- * Implementing this properly also allows us to ensure that
- * executable code ends up in the low 2GB of the address space,
- * as required by HiPE/AMD64's small code model.
- */
-static unsigned int code_bytes;
-static char *code_next;
-
#if 0 /* change to non-zero to get allocation statistics at exit() */
static unsigned int total_mapped, nr_joins, nr_splits, total_alloc, nr_allocs, nr_large, total_lost;
static unsigned int atexit_done;
@@ -121,101 +106,20 @@ static void atexit_alloc_code_stats(void)
#define ALLOC_CODE_STATS(X) do{}while(0)
#endif
-/* FreeBSD 6.1 breakage */
-#if !defined(MAP_ANONYMOUS) && defined(MAP_ANON)
-#define MAP_ANONYMOUS MAP_ANON
-#endif
-
-static int morecore(unsigned int alloc_bytes)
-{
- unsigned int map_bytes;
- char *map_hint, *map_start;
-
- /* Page-align the amount to allocate. */
- map_bytes = (alloc_bytes + 4095) & ~4095;
-
- /* Round up small allocations. */
- if (map_bytes < 1024*1024)
- map_bytes = 1024*1024;
- else
- ALLOC_CODE_STATS(++nr_large);
-
- /* Create a new memory mapping, ensuring it is executable
- and in the low 2GB of the address space. Also attempt
- to make it adjacent to the previous mapping. */
- map_hint = code_next + code_bytes;
-#if !defined(MAP_32BIT)
- /* FreeBSD doesn't have MAP_32BIT, and it doesn't respect
- a plain map_hint (returns high mappings even though the
- hint refers to a free area), so we have to use both map_hint
- and MAP_FIXED to get addresses below the 2GB boundary.
- This is even worse than the Linux/ppc64 case.
- Similarly, Solaris 10 doesn't have MAP_32BIT,
- and it doesn't respect a plain map_hint. */
- if (!map_hint) /* first call */
- map_hint = (char*)(512*1024*1024); /* 0.5GB */
-#endif
- if ((unsigned long)map_hint & 4095)
- abort();
- map_start = mmap(map_hint, map_bytes,
- PROT_EXEC|PROT_READ|PROT_WRITE,
- MAP_PRIVATE|MAP_ANONYMOUS
-#if defined(MAP_32BIT)
- |MAP_32BIT
-#elif defined(__FreeBSD__) || defined(__sun__)
- |MAP_FIXED
-#endif
- ,
- -1, 0);
- ALLOC_CODE_STATS(fprintf(stderr, "%s: mmap(%p,%u,...) == %p\r\n", __FUNCTION__, map_hint, map_bytes, map_start));
-#if !defined(MAP_32BIT)
- if (map_start != MAP_FAILED &&
- (((unsigned long)map_start + (map_bytes-1)) & ~0x7FFFFFFFUL)) {
- fprintf(stderr, "mmap with hint %p returned code memory %p\r\n", map_hint, map_start);
- abort();
- }
-#endif
- if (map_start == MAP_FAILED)
- return -1;
-
- ALLOC_CODE_STATS(total_mapped += map_bytes);
-
- /* Merge adjacent mappings, so the trailing portion of the previous
- mapping isn't lost. In practice this is quite successful. */
- if (map_start == map_hint) {
- ALLOC_CODE_STATS(++nr_joins);
- code_bytes += map_bytes;
-#if !defined(MAP_32BIT)
- if (!code_next) /* first call */
- code_next = map_start;
-#endif
- } else {
- ALLOC_CODE_STATS(++nr_splits);
- ALLOC_CODE_STATS(total_lost += code_bytes);
- code_next = map_start;
- code_bytes = map_bytes;
- }
-
- ALLOC_CODE_STATS(atexit_alloc_code_stats());
-
- return 0;
-}
-
+/*
+ * Memory allocator for executable code.
+ *
+ * We use a dedicated allocator for executable code (from OTP 19.0)
+ * to make sure the memory we get is executable (PROT_EXEC)
+ * and to ensure that executable code ends up in the low 2GB
+ * of the address space, as required by HiPE/AMD64's small code model.
+ */
static void *alloc_code(unsigned int alloc_bytes)
{
- void *res;
-
- /* Align function entries. */
- alloc_bytes = (alloc_bytes + 3) & ~3;
-
- if (code_bytes < alloc_bytes && morecore(alloc_bytes) != 0)
- return NULL;
ALLOC_CODE_STATS(++nr_allocs);
ALLOC_CODE_STATS(total_alloc += alloc_bytes);
- res = code_next;
- code_next += alloc_bytes;
- code_bytes -= alloc_bytes;
- return res;
+
+ return erts_alloc(ERTS_ALC_T_HIPE_EXEC, alloc_bytes);
}
void *hipe_alloc_code(Uint nrbytes, Eterm callees, Eterm *trampolines, Process *p)
diff --git a/erts/emulator/hipe/hipe_amd64.h b/erts/emulator/hipe/hipe_amd64.h
index 09b55a1243..750a26fcb9 100644
--- a/erts/emulator/hipe/hipe_amd64.h
+++ b/erts/emulator/hipe/hipe_amd64.h
@@ -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/erts/emulator/hipe/hipe_amd64.tab b/erts/emulator/hipe/hipe_amd64.tab
index 70287034a0..e5ff31b985 100644
--- a/erts/emulator/hipe/hipe_amd64.tab
+++ b/erts/emulator/hipe/hipe_amd64.tab
@@ -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/erts/emulator/hipe/hipe_amd64_asm.m4 b/erts/emulator/hipe/hipe_amd64_asm.m4
index ecb25ec5c8..2c0fbbee2d 100644
--- a/erts/emulator/hipe/hipe_amd64_asm.m4
+++ b/erts/emulator/hipe/hipe_amd64_asm.m4
@@ -2,7 +2,7 @@ changecom(`/*', `*/')dnl
/*
* %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/erts/emulator/hipe/hipe_amd64_bifs.m4 b/erts/emulator/hipe/hipe_amd64_bifs.m4
index 602e71c195..9cf3bf74fd 100644
--- a/erts/emulator/hipe/hipe_amd64_bifs.m4
+++ b/erts/emulator/hipe/hipe_amd64_bifs.m4
@@ -2,7 +2,7 @@ changecom(`/*', `*/')dnl
/*
* %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/erts/emulator/hipe/hipe_amd64_gc.h b/erts/emulator/hipe/hipe_amd64_gc.h
index e7a156c910..6b95d54904 100644
--- a/erts/emulator/hipe/hipe_amd64_gc.h
+++ b/erts/emulator/hipe/hipe_amd64_gc.h
@@ -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/erts/emulator/hipe/hipe_amd64_glue.S b/erts/emulator/hipe/hipe_amd64_glue.S
index 6fb93bce53..b37ed3c68a 100644
--- a/erts/emulator/hipe/hipe_amd64_glue.S
+++ b/erts/emulator/hipe/hipe_amd64_glue.S
@@ -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/erts/emulator/hipe/hipe_amd64_glue.h b/erts/emulator/hipe/hipe_amd64_glue.h
index e54b8b3a3f..089658f4b5 100644
--- a/erts/emulator/hipe/hipe_amd64_glue.h
+++ b/erts/emulator/hipe/hipe_amd64_glue.h
@@ -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/erts/emulator/hipe/hipe_amd64_primops.h b/erts/emulator/hipe/hipe_amd64_primops.h
index 23d8202e46..94c39a9433 100644
--- a/erts/emulator/hipe/hipe_amd64_primops.h
+++ b/erts/emulator/hipe/hipe_amd64_primops.h
@@ -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/erts/emulator/hipe/hipe_arch.h b/erts/emulator/hipe/hipe_arch.h
index 21dabc7cb6..6f959815bb 100644
--- a/erts/emulator/hipe/hipe_arch.h
+++ b/erts/emulator/hipe/hipe_arch.h
@@ -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/erts/emulator/hipe/hipe_arm.c b/erts/emulator/hipe/hipe_arm.c
index 01512e9aa1..f8ef468341 100644
--- a/erts/emulator/hipe/hipe_arm.c
+++ b/erts/emulator/hipe/hipe_arm.c
@@ -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/erts/emulator/hipe/hipe_arm.h b/erts/emulator/hipe/hipe_arm.h
index a0e07cd6ce..b5fe6317c9 100644
--- a/erts/emulator/hipe/hipe_arm.h
+++ b/erts/emulator/hipe/hipe_arm.h
@@ -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/erts/emulator/hipe/hipe_arm.tab b/erts/emulator/hipe/hipe_arm.tab
index bcac2cd79d..152319edbd 100644
--- a/erts/emulator/hipe/hipe_arm.tab
+++ b/erts/emulator/hipe/hipe_arm.tab
@@ -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/erts/emulator/hipe/hipe_arm_asm.m4 b/erts/emulator/hipe/hipe_arm_asm.m4
index 8ce8600f97..ae9ec752bb 100644
--- a/erts/emulator/hipe/hipe_arm_asm.m4
+++ b/erts/emulator/hipe/hipe_arm_asm.m4
@@ -2,7 +2,7 @@ changecom(`/*', `*/')dnl
/*
* %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/erts/emulator/hipe/hipe_arm_bifs.m4 b/erts/emulator/hipe/hipe_arm_bifs.m4
index 3efe961964..d9c9952dbf 100644
--- a/erts/emulator/hipe/hipe_arm_bifs.m4
+++ b/erts/emulator/hipe/hipe_arm_bifs.m4
@@ -2,7 +2,7 @@ changecom(`/*', `*/')dnl
/*
* %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/erts/emulator/hipe/hipe_arm_gc.h b/erts/emulator/hipe/hipe_arm_gc.h
index dfffd6c630..e8eb900978 100644
--- a/erts/emulator/hipe/hipe_arm_gc.h
+++ b/erts/emulator/hipe/hipe_arm_gc.h
@@ -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/erts/emulator/hipe/hipe_arm_glue.S b/erts/emulator/hipe/hipe_arm_glue.S
index e4ce9b75ef..49ffa8b1d8 100644
--- a/erts/emulator/hipe/hipe_arm_glue.S
+++ b/erts/emulator/hipe/hipe_arm_glue.S
@@ -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/erts/emulator/hipe/hipe_arm_glue.h b/erts/emulator/hipe/hipe_arm_glue.h
index 39bc27ec5f..dffc5aef03 100644
--- a/erts/emulator/hipe/hipe_arm_glue.h
+++ b/erts/emulator/hipe/hipe_arm_glue.h
@@ -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/erts/emulator/hipe/hipe_arm_primops.h b/erts/emulator/hipe/hipe_arm_primops.h
index 0e8f84dfb9..c080b67699 100644
--- a/erts/emulator/hipe/hipe_arm_primops.h
+++ b/erts/emulator/hipe/hipe_arm_primops.h
@@ -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/erts/emulator/hipe/hipe_bif0.c b/erts/emulator/hipe/hipe_bif0.c
index 6f495b8825..4063cbf306 100644
--- a/erts/emulator/hipe/hipe_bif0.c
+++ b/erts/emulator/hipe/hipe_bif0.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.
@@ -406,7 +406,7 @@ BIF_RETTYPE hipe_bifs_enter_code_2(BIF_ALIST_2)
nrcallees = arityval(tuple_val(BIF_ARG_2)[0]);
else
nrcallees = 0;
- erl_exit(1, "%s: failed to allocate %lu bytes and %lu trampolines\r\n",
+ erts_exit(ERTS_ERROR_EXIT, "%s: failed to allocate %lu bytes and %lu trampolines\r\n",
__func__, (unsigned long)nrbytes, (unsigned long)nrcallees);
}
memcpy(address, bytes, nrbytes);
@@ -533,13 +533,13 @@ BIF_RETTYPE hipe_bifs_merge_term_1(BIF_ALIST_1)
BIF_RET(val);
}
-struct mfa {
+struct mfa_t {
Eterm mod;
Eterm fun;
Uint ari;
};
-static int term_to_mfa(Eterm term, struct mfa *mfa)
+static int term_to_mfa(Eterm term, struct mfa_t *mfa)
{
Eterm mod, fun, a;
Uint ari;
@@ -597,7 +597,7 @@ static Uint *hipe_find_emu_address(Eterm mod, Eterm name, unsigned int arity)
Uint *hipe_bifs_find_pc_from_mfa(Eterm term)
{
- struct mfa mfa;
+ struct mfa_t mfa;
if (!term_to_mfa(term, &mfa))
return NULL;
@@ -617,7 +617,7 @@ BIF_RETTYPE hipe_bifs_set_native_address_3(BIF_ALIST_3)
Eterm *pc;
void *address;
int is_closure;
- struct mfa mfa;
+ struct mfa_t mfa;
switch (BIF_ARG_3) {
case am_false:
@@ -1225,7 +1225,7 @@ void hipe_mfa_set_trampoline(Eterm m, Eterm f, unsigned int arity, void *trampol
BIF_RETTYPE hipe_bifs_set_funinfo_native_address_3(BIF_ALIST_3)
{
- struct mfa mfa;
+ struct mfa_t mfa;
void *address;
int is_exported;
@@ -1247,7 +1247,7 @@ BIF_RETTYPE hipe_bifs_set_funinfo_native_address_3(BIF_ALIST_3)
BIF_RETTYPE hipe_bifs_invalidate_funinfo_native_addresses_1(BIF_ALIST_1)
{
Eterm lst;
- struct mfa mfa;
+ struct mfa_t mfa;
struct hipe_mfa_info *p;
hipe_mfa_info_table_rwlock();
@@ -1322,7 +1322,7 @@ static void *hipe_make_stub(Eterm m, Eterm f, unsigned int arity, int is_remote)
export_entry = erts_export_get_or_make_stub(m, f, arity);
StubAddress = hipe_make_native_stub(export_entry, arity);
if (!StubAddress)
- erl_exit(1, "hipe_make_stub: code allocation failed\r\n");
+ erts_exit(ERTS_ERROR_EXIT, "hipe_make_stub: code allocation failed\r\n");
return StubAddress;
}
@@ -1416,7 +1416,7 @@ BIF_RETTYPE hipe_find_na_or_make_stub(BIF_ALIST_3)
BIF_RETTYPE hipe_bifs_find_na_or_make_stub_2(BIF_ALIST_2)
{
- struct mfa mfa;
+ struct mfa_t mfa;
void *address;
int is_remote;
@@ -1518,9 +1518,9 @@ struct ref {
*/
BIF_RETTYPE hipe_bifs_add_ref_2(BIF_ALIST_2)
{
- struct mfa callee;
+ struct mfa_t callee;
Eterm *tuple;
- struct mfa caller;
+ struct mfa_t caller;
void *address;
void *trampoline;
unsigned int flags;
@@ -1597,7 +1597,7 @@ BIF_RETTYPE hipe_bifs_add_ref_2(BIF_ALIST_2)
*/
BIF_RETTYPE hipe_bifs_mark_referred_from_1(BIF_ALIST_1) /* get_refs_from */
{
- struct mfa mfa;
+ struct mfa_t mfa;
const struct hipe_mfa_info *p;
struct ref *ref;
@@ -1649,7 +1649,7 @@ static void hipe_purge_all_refs(void)
BIF_RETTYPE hipe_bifs_remove_refs_from_1(BIF_ALIST_1)
{
- struct mfa mfa;
+ struct mfa_t mfa;
struct hipe_mfa_info *caller_mfa, *callee_mfa;
struct hipe_mfa_info_list *refers_to, *tmp_refers_to;
struct ref **prev, *ref;
@@ -1703,7 +1703,7 @@ BIF_RETTYPE hipe_bifs_remove_refs_from_1(BIF_ALIST_1)
*/
BIF_RETTYPE hipe_bifs_redirect_referred_from_1(BIF_ALIST_1)
{
- struct mfa mfa;
+ struct mfa_t mfa;
struct hipe_mfa_info *p;
struct ref **prev, *ref;
int is_remote, res;
diff --git a/erts/emulator/hipe/hipe_bif0.h b/erts/emulator/hipe/hipe_bif0.h
index 5527c6c3ed..c9a8216368 100644
--- a/erts/emulator/hipe/hipe_bif0.h
+++ b/erts/emulator/hipe/hipe_bif0.h
@@ -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/erts/emulator/hipe/hipe_bif0.tab b/erts/emulator/hipe/hipe_bif0.tab
index 5ce254314a..99237aae05 100644
--- a/erts/emulator/hipe/hipe_bif0.tab
+++ b/erts/emulator/hipe/hipe_bif0.tab
@@ -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/erts/emulator/hipe/hipe_bif1.c b/erts/emulator/hipe/hipe_bif1.c
index a2682992a4..08adbd474e 100644
--- a/erts/emulator/hipe/hipe_bif1.c
+++ b/erts/emulator/hipe/hipe_bif1.c
@@ -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/erts/emulator/hipe/hipe_bif1.h b/erts/emulator/hipe/hipe_bif1.h
index 80cdeb4a82..e12bb1a1f3 100644
--- a/erts/emulator/hipe/hipe_bif1.h
+++ b/erts/emulator/hipe/hipe_bif1.h
@@ -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/erts/emulator/hipe/hipe_bif1.tab b/erts/emulator/hipe/hipe_bif1.tab
index 6c4e05afdb..c5b452f199 100644
--- a/erts/emulator/hipe/hipe_bif1.tab
+++ b/erts/emulator/hipe/hipe_bif1.tab
@@ -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/erts/emulator/hipe/hipe_bif2.c b/erts/emulator/hipe/hipe_bif2.c
index 2328e69886..dfd34e31d4 100644
--- a/erts/emulator/hipe/hipe_bif2.c
+++ b/erts/emulator/hipe/hipe_bif2.c
@@ -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/erts/emulator/hipe/hipe_bif2.tab b/erts/emulator/hipe/hipe_bif2.tab
index a29e1fbdbb..bbcb577be0 100644
--- a/erts/emulator/hipe/hipe_bif2.tab
+++ b/erts/emulator/hipe/hipe_bif2.tab
@@ -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/erts/emulator/hipe/hipe_bif64.c b/erts/emulator/hipe/hipe_bif64.c
index b97cf2b7ee..a1a3c81bfe 100644
--- a/erts/emulator/hipe/hipe_bif64.c
+++ b/erts/emulator/hipe/hipe_bif64.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/erts/emulator/hipe/hipe_bif64.h b/erts/emulator/hipe/hipe_bif64.h
index 856b4003dc..a97ce311d3 100644
--- a/erts/emulator/hipe/hipe_bif64.h
+++ b/erts/emulator/hipe/hipe_bif64.h
@@ -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/erts/emulator/hipe/hipe_bif64.tab b/erts/emulator/hipe/hipe_bif64.tab
index 3062ab5848..eefca379a0 100644
--- a/erts/emulator/hipe/hipe_bif64.tab
+++ b/erts/emulator/hipe/hipe_bif64.tab
@@ -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/erts/emulator/hipe/hipe_bif_list.m4 b/erts/emulator/hipe/hipe_bif_list.m4
index 7240280345..29095a5389 100644
--- a/erts/emulator/hipe/hipe_bif_list.m4
+++ b/erts/emulator/hipe/hipe_bif_list.m4
@@ -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/erts/emulator/hipe/hipe_debug.c b/erts/emulator/hipe/hipe_debug.c
index a48578c468..ace489452f 100644
--- a/erts/emulator/hipe/hipe_debug.c
+++ b/erts/emulator/hipe/hipe_debug.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.
@@ -195,7 +195,7 @@ void hipe_print_pcb(Process *p)
U("rcount ", rcount);
U("id ", common.id);
U("reds ", reds);
- U("tracer_pr..", common.tracer_proc);
+ U("tracer ", common.tracer);
U("trace_fla..", common.trace_flags);
U("group_lea..", group_leader);
U("flags ", flags);
diff --git a/erts/emulator/hipe/hipe_debug.h b/erts/emulator/hipe/hipe_debug.h
index bf10d5a2a8..c510eac949 100644
--- a/erts/emulator/hipe/hipe_debug.h
+++ b/erts/emulator/hipe/hipe_debug.h
@@ -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/erts/emulator/hipe/hipe_gbif_list.h b/erts/emulator/hipe/hipe_gbif_list.h
index dc93741a1d..424b001298 100644
--- a/erts/emulator/hipe/hipe_gbif_list.h
+++ b/erts/emulator/hipe/hipe_gbif_list.h
@@ -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/erts/emulator/hipe/hipe_gc.c b/erts/emulator/hipe/hipe_gc.c
index 2e19bf88bf..d0619a0609 100644
--- a/erts/emulator/hipe/hipe_gc.c
+++ b/erts/emulator/hipe/hipe_gc.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/erts/emulator/hipe/hipe_gc.h b/erts/emulator/hipe/hipe_gc.h
index e373324cdd..5b5eb29175 100644
--- a/erts/emulator/hipe/hipe_gc.h
+++ b/erts/emulator/hipe/hipe_gc.h
@@ -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/erts/emulator/hipe/hipe_mkliterals.c b/erts/emulator/hipe/hipe_mkliterals.c
index dfa5313739..0d3493ec6c 100644
--- a/erts/emulator/hipe/hipe_mkliterals.c
+++ b/erts/emulator/hipe/hipe_mkliterals.c
@@ -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/erts/emulator/hipe/hipe_mode_switch.c b/erts/emulator/hipe/hipe_mode_switch.c
index 976180cc30..884331e969 100644
--- a/erts/emulator/hipe/hipe_mode_switch.c
+++ b/erts/emulator/hipe/hipe_mode_switch.c
@@ -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.
@@ -59,6 +59,7 @@
* TODO: check PCB consistency at native BIF calls
*/
int hipe_modeswitch_debug = 0;
+extern BeamInstr beam_exit[];
#define HIPE_DEBUG 0
@@ -108,7 +109,7 @@ static const char *code_str(unsigned code)
static void __noreturn
hipe_abort(const char *expr, const char *file, unsigned line)
{
- erl_exit(1, "ASSERTION FAILED, file %s, line %u: %s\r\n", file, line, expr);
+ erts_exit(ERTS_ERROR_EXIT, "ASSERTION FAILED, file %s, line %u: %s\r\n", file, line, expr);
}
#define HIPE_ASSERT3(expr, file, line) \
@@ -173,6 +174,33 @@ void hipe_mode_switch_init(void)
make_catch(beam_catches_cons(hipe_beam_pc_throw, BEAM_CATCHES_NIL));
hipe_mfa_info_table_init();
+
+#if (defined(__i386__) || defined(__x86_64__)) && defined(__linux__)
+ /* Verify that the offset of c-p->hipe does not change.
+ The ErLLVM hipe backend depends on it being in a specific
+ position. Kostis et al has promised to fix this in upstream
+ llvm by OTP 20, so it should be possible to remove these asserts
+ after that. */
+ ERTS_CT_ASSERT(sizeof(ErtsPTabElementCommon) ==
+ (sizeof(Eterm) + /* id */
+ sizeof(((ErtsPTabElementCommon*)0)->refc) +
+ sizeof(ErtsTracer) + /* tracer */
+ sizeof(Uint) + /* trace_flags */
+ sizeof(erts_smp_atomic_t) + /* timer */
+ sizeof(((ErtsPTabElementCommon*)0)->u)));
+
+ ERTS_CT_ASSERT(offsetof(Process, hipe) ==
+ (sizeof(ErtsPTabElementCommon) + /* common */
+ sizeof(Eterm*) + /* htop */
+ sizeof(Eterm*) + /* stop */
+ sizeof(Eterm*) + /* heap */
+ sizeof(Eterm*) + /* hend */
+ sizeof(Uint) + /* heap_sz */
+ sizeof(Uint) + /* min_heap_size */
+ sizeof(Uint) + /* min_vheap_size */
+ sizeof(volatile unsigned long))); /* fp_exception */
+#endif
+
}
void hipe_set_call_trap(Uint *bfun, void *nfun, int is_closure)
@@ -218,15 +246,37 @@ static __inline__ void hipe_pop_beam_trap_frame(Process *p)
Process *hipe_mode_switch(Process *p, unsigned cmd, Eterm reg[])
{
unsigned result;
-#if NR_ARG_REGS > 5
- /* When NR_ARG_REGS > 5, we need to protect the process' input
- reduction count (which BEAM stores in def_arg_reg[5]) from
- being clobbered by the arch glue code. */
Eterm reds_in = p->def_arg_reg[5];
-#endif
-#if NR_ARG_REGS > 4
- Eterm o_reds = p->def_arg_reg[4];
-#endif
+ /*
+ * Process is in the normal case scheduled out when reduction
+ * count reach zero. When "save calls" is enabled reduction
+ * count is subtracted with CONTEXT_REDS, i.e. initial reduction
+ * count will be zero or less and process is scheduled out
+ * when -CONTEXT_REDS is reached.
+ *
+ * HiPE does not support the "save calls" feature, so we switch
+ * to using a positive reduction counter when executing in
+ * hipe mode, but need to restore the "save calls" when
+ * returning to beam. We also need to hide the save calls buffer
+ * from BIFs. We do that by moving the saved calls buf to
+ * suspended saved calls buf.
+ *
+ * Beam has initial reduction count in stored in p->def_arg_reg[5].
+ *
+ * Beam expects -neg_o_reds to be found in p->def_arg_reg[4]
+ * on return to beam.
+ */
+
+ {
+ struct saved_calls *scb = ERTS_PROC_SET_SAVED_CALLS_BUF(p, NULL);
+ if (scb) {
+ reds_in += CONTEXT_REDS;
+ p->fcalls += CONTEXT_REDS;
+ ERTS_PROC_SET_SUSPENDED_SAVED_CALLS_BUF(p, scb);
+ }
+ }
+
+ p->flags |= F_HIPE_MODE; /* inform bifs where we are comming from... */
p->i = NULL;
/* Set current_function to undefined. stdlib hibernate tests rely on it. */
@@ -316,7 +366,7 @@ Process *hipe_mode_switch(Process *p, unsigned cmd, Eterm reg[])
break;
}
default:
- erl_exit(1, "hipe_mode_switch: cmd %#x\r\n", cmd);
+ erts_exit(ERTS_ERROR_EXIT, "hipe_mode_switch: cmd %#x\r\n", cmd);
}
do_return_from_native:
DPRINTF("result == %#x (%s)", result, code_str(result));
@@ -481,12 +531,25 @@ Process *hipe_mode_switch(Process *p, unsigned cmd, Eterm reg[])
erts_smp_proc_unlock(p, ERTS_PROC_LOCKS_MSG_RECEIVE);
do_schedule:
{
-#if !(NR_ARG_REGS > 5)
- int reds_in = p->def_arg_reg[5];
+ struct saved_calls *scb;
+
+ scb = ERTS_PROC_SET_SUSPENDED_SAVED_CALLS_BUF(p, NULL);
+ if (scb)
+ ERTS_PROC_SET_SAVED_CALLS_BUF(p, scb);
+
+ /* The process may have died while it was executing,
+ if so we return out from native code to the interpreter */
+ if (erts_smp_atomic32_read_nob(&p->state) & ERTS_PSFLG_EXITING)
+ p->i = beam_exit;
+#ifdef DEBUG
+ ASSERT(p->debug_reds_in == reds_in);
#endif
+ p->flags &= ~F_HIPE_MODE;
+
ERTS_SMP_UNREQ_PROC_MAIN_LOCK(p);
p = schedule(p, reds_in - p->fcalls);
ERTS_SMP_REQ_PROC_MAIN_LOCK(p);
+ ASSERT(!(p->flags & F_HIPE_MODE));
#ifdef ERTS_SMP
p->hipe_smp.have_receive_locks = 0;
reg = p->scheduler_data->x_reg_array;
@@ -501,28 +564,32 @@ Process *hipe_mode_switch(Process *p, unsigned cmd, Eterm reg[])
reg[i] = argp[i];
}
{
-#if !(NR_ARG_REGS > 5)
- Eterm reds_in;
-#endif
-#if !(NR_ARG_REGS > 4)
- Eterm o_reds;
-#endif
+ struct saved_calls *scb;
reds_in = p->fcalls;
- o_reds = 0;
- if (ERTS_PROC_GET_SAVED_CALLS_BUF(p)) {
- o_reds = reds_in;
- reds_in = 0;
- p->fcalls = 0;
- }
- p->def_arg_reg[4] = o_reds;
p->def_arg_reg[5] = reds_in;
+#ifdef DEBUG
+ p->debug_reds_in = reds_in;
+#endif
if (p->i == hipe_beam_pc_resume) {
+ p->flags |= F_HIPE_MODE; /* inform bifs where we are comming from... */
+ scb = ERTS_PROC_SET_SAVED_CALLS_BUF(p, NULL);
+ if (scb)
+ ERTS_PROC_SET_SUSPENDED_SAVED_CALLS_BUF(p, scb);
p->i = NULL;
p->arity = 0;
goto do_resume;
}
+
+ scb = ERTS_PROC_GET_SAVED_CALLS_BUF(p);
+ if (!scb)
+ p->def_arg_reg[4] = 0;
+ else {
+ p->def_arg_reg[4] = CONTEXT_REDS;
+ p->fcalls = -CONTEXT_REDS + reds_in;
+ }
}
+
HIPE_CHECK_PCB(p);
result = HIPE_MODE_SWITCH_RES_CALL_BEAM;
p->def_arg_reg[3] = result;
@@ -560,16 +627,31 @@ Process *hipe_mode_switch(Process *p, unsigned cmd, Eterm reg[])
goto do_throw_to_native;
}
default:
- erl_exit(1, "hipe_mode_switch: result %#x\r\n", result);
+ erts_exit(ERTS_ERROR_EXIT, "hipe_mode_switch: result %#x\r\n", result);
}
+
+ {
+ struct saved_calls *scb = ERTS_PROC_SET_SUSPENDED_SAVED_CALLS_BUF(p, NULL);
+ if (!scb)
+ p->def_arg_reg[4] = 0;
+ else {
+ p->def_arg_reg[4] = CONTEXT_REDS;
+ p->fcalls -= CONTEXT_REDS;
+ ERTS_PROC_SET_SAVED_CALLS_BUF(p, scb);
+ }
+ }
+
HIPE_CHECK_PCB(p);
p->def_arg_reg[3] = result;
-#if NR_ARG_REGS > 4
- p->def_arg_reg[4] = o_reds;
-#endif
#if NR_ARG_REGS > 5
+ /*
+ * When NR_ARG_REGS > 5, we need to protect the process' input
+ * reduction count (which BEAM stores in def_arg_reg[5]) from
+ * being clobbered by the arch glue code.
+ */
p->def_arg_reg[5] = reds_in;
#endif
+ p->flags &= ~F_HIPE_MODE;
return p;
}
diff --git a/erts/emulator/hipe/hipe_mode_switch.h b/erts/emulator/hipe/hipe_mode_switch.h
index 620cc6356b..c40077d558 100644
--- a/erts/emulator/hipe/hipe_mode_switch.h
+++ b/erts/emulator/hipe/hipe_mode_switch.h
@@ -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/erts/emulator/hipe/hipe_native_bif.c b/erts/emulator/hipe/hipe_native_bif.c
index 16cc70234d..9c03b3811c 100644
--- a/erts/emulator/hipe/hipe_native_bif.c
+++ b/erts/emulator/hipe/hipe_native_bif.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.
@@ -180,7 +180,7 @@ void hipe_fclearerror_error(Process *p)
#if !defined(NO_FPE_SIGNALS)
erts_fp_check_init_error(&p->fp_exception);
#else
- erl_exit(ERTS_ABORT_EXIT, "Emulated FPE not cleared by HiPE");
+ erts_exit(ERTS_ABORT_EXIT, "Emulated FPE not cleared by HiPE");
#endif
}
@@ -601,7 +601,7 @@ void hipe_clear_timeout(Process *c_p)
}
#endif
if (IS_TRACED_FL(c_p, F_TRACE_RECEIVE)) {
- trace_receive(c_p, am_timeout);
+ trace_receive(c_p, am_clock_service, am_timeout, NULL);
}
c_p->flags &= ~F_TIMO;
JOIN_MESSAGE(c_p);
diff --git a/erts/emulator/hipe/hipe_native_bif.h b/erts/emulator/hipe/hipe_native_bif.h
index 55a0d3bb1b..a02d26087b 100644
--- a/erts/emulator/hipe/hipe_native_bif.h
+++ b/erts/emulator/hipe/hipe_native_bif.h
@@ -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/erts/emulator/hipe/hipe_ops.tab b/erts/emulator/hipe/hipe_ops.tab
index d021c72ac9..96e4c0da91 100644
--- a/erts/emulator/hipe/hipe_ops.tab
+++ b/erts/emulator/hipe/hipe_ops.tab
@@ -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/erts/emulator/hipe/hipe_ppc.c b/erts/emulator/hipe/hipe_ppc.c
index 3f86de626d..9b2048c457 100644
--- a/erts/emulator/hipe/hipe_ppc.c
+++ b/erts/emulator/hipe/hipe_ppc.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/erts/emulator/hipe/hipe_ppc.h b/erts/emulator/hipe/hipe_ppc.h
index 777c9384d5..e86c122fb1 100644
--- a/erts/emulator/hipe/hipe_ppc.h
+++ b/erts/emulator/hipe/hipe_ppc.h
@@ -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/erts/emulator/hipe/hipe_ppc.tab b/erts/emulator/hipe/hipe_ppc.tab
index 5bf2320cbe..274612d9ce 100644
--- a/erts/emulator/hipe/hipe_ppc.tab
+++ b/erts/emulator/hipe/hipe_ppc.tab
@@ -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/erts/emulator/hipe/hipe_ppc64.tab b/erts/emulator/hipe/hipe_ppc64.tab
index 301a9752f7..a291185b57 100644
--- a/erts/emulator/hipe/hipe_ppc64.tab
+++ b/erts/emulator/hipe/hipe_ppc64.tab
@@ -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/erts/emulator/hipe/hipe_ppc_asm.m4 b/erts/emulator/hipe/hipe_ppc_asm.m4
index ea74923d1f..be25d65725 100644
--- a/erts/emulator/hipe/hipe_ppc_asm.m4
+++ b/erts/emulator/hipe/hipe_ppc_asm.m4
@@ -2,7 +2,7 @@ changecom(`/*', `*/')dnl
/*
* %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/erts/emulator/hipe/hipe_ppc_bifs.m4 b/erts/emulator/hipe/hipe_ppc_bifs.m4
index 28518827ec..57b4208bee 100644
--- a/erts/emulator/hipe/hipe_ppc_bifs.m4
+++ b/erts/emulator/hipe/hipe_ppc_bifs.m4
@@ -2,7 +2,7 @@ changecom(`/*', `*/')dnl
/*
* %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/erts/emulator/hipe/hipe_ppc_gc.h b/erts/emulator/hipe/hipe_ppc_gc.h
index 0854d9e950..a6ec1338ff 100644
--- a/erts/emulator/hipe/hipe_ppc_gc.h
+++ b/erts/emulator/hipe/hipe_ppc_gc.h
@@ -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/erts/emulator/hipe/hipe_ppc_glue.S b/erts/emulator/hipe/hipe_ppc_glue.S
index 6e2022603c..44351dc06c 100644
--- a/erts/emulator/hipe/hipe_ppc_glue.S
+++ b/erts/emulator/hipe/hipe_ppc_glue.S
@@ -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/erts/emulator/hipe/hipe_ppc_glue.h b/erts/emulator/hipe/hipe_ppc_glue.h
index 93ca39fcb3..2bfa10298c 100644
--- a/erts/emulator/hipe/hipe_ppc_glue.h
+++ b/erts/emulator/hipe/hipe_ppc_glue.h
@@ -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/erts/emulator/hipe/hipe_ppc_primops.h b/erts/emulator/hipe/hipe_ppc_primops.h
index ce3dda9eb3..540605de9f 100644
--- a/erts/emulator/hipe/hipe_ppc_primops.h
+++ b/erts/emulator/hipe/hipe_ppc_primops.h
@@ -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/erts/emulator/hipe/hipe_primops.h b/erts/emulator/hipe/hipe_primops.h
index 0bec677574..4fcbc9df38 100644
--- a/erts/emulator/hipe/hipe_primops.h
+++ b/erts/emulator/hipe/hipe_primops.h
@@ -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/erts/emulator/hipe/hipe_process.h b/erts/emulator/hipe/hipe_process.h
index 60d09ea1c9..21c4239753 100644
--- a/erts/emulator/hipe/hipe_process.h
+++ b/erts/emulator/hipe/hipe_process.h
@@ -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/erts/emulator/hipe/hipe_risc_gc.h b/erts/emulator/hipe/hipe_risc_gc.h
index 770ec93459..315f8e7f9f 100644
--- a/erts/emulator/hipe/hipe_risc_gc.h
+++ b/erts/emulator/hipe/hipe_risc_gc.h
@@ -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/erts/emulator/hipe/hipe_risc_glue.h b/erts/emulator/hipe/hipe_risc_glue.h
index 51db7eac01..0284265307 100644
--- a/erts/emulator/hipe/hipe_risc_glue.h
+++ b/erts/emulator/hipe/hipe_risc_glue.h
@@ -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/erts/emulator/hipe/hipe_risc_stack.c b/erts/emulator/hipe/hipe_risc_stack.c
index fd04421381..dc98c96b8f 100644
--- a/erts/emulator/hipe/hipe_risc_stack.c
+++ b/erts/emulator/hipe/hipe_risc_stack.c
@@ -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/erts/emulator/hipe/hipe_signal.h b/erts/emulator/hipe/hipe_signal.h
index b2f461797d..5d8621135b 100644
--- a/erts/emulator/hipe/hipe_signal.h
+++ b/erts/emulator/hipe/hipe_signal.h
@@ -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/erts/emulator/hipe/hipe_sparc.c b/erts/emulator/hipe/hipe_sparc.c
index bd95bc5d98..23020f34ee 100644
--- a/erts/emulator/hipe/hipe_sparc.c
+++ b/erts/emulator/hipe/hipe_sparc.c
@@ -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/erts/emulator/hipe/hipe_sparc.h b/erts/emulator/hipe/hipe_sparc.h
index 0b74b2db26..25d513e988 100644
--- a/erts/emulator/hipe/hipe_sparc.h
+++ b/erts/emulator/hipe/hipe_sparc.h
@@ -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/erts/emulator/hipe/hipe_sparc.tab b/erts/emulator/hipe/hipe_sparc.tab
index 2f528c0607..bc90d38168 100644
--- a/erts/emulator/hipe/hipe_sparc.tab
+++ b/erts/emulator/hipe/hipe_sparc.tab
@@ -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/erts/emulator/hipe/hipe_sparc_asm.m4 b/erts/emulator/hipe/hipe_sparc_asm.m4
index 227a1658b4..8a9a516eab 100644
--- a/erts/emulator/hipe/hipe_sparc_asm.m4
+++ b/erts/emulator/hipe/hipe_sparc_asm.m4
@@ -2,7 +2,7 @@ changecom(`/*', `*/')dnl
/*
* %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/erts/emulator/hipe/hipe_sparc_bifs.m4 b/erts/emulator/hipe/hipe_sparc_bifs.m4
index a7bbe5b2cc..2e886ec1d1 100644
--- a/erts/emulator/hipe/hipe_sparc_bifs.m4
+++ b/erts/emulator/hipe/hipe_sparc_bifs.m4
@@ -2,7 +2,7 @@ changecom(`/*', `*/')dnl
/*
* %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/erts/emulator/hipe/hipe_sparc_gc.h b/erts/emulator/hipe/hipe_sparc_gc.h
index 99e55df1ce..eea0268ed5 100644
--- a/erts/emulator/hipe/hipe_sparc_gc.h
+++ b/erts/emulator/hipe/hipe_sparc_gc.h
@@ -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/erts/emulator/hipe/hipe_sparc_glue.S b/erts/emulator/hipe/hipe_sparc_glue.S
index 7e47ffb52f..077db9b8ad 100644
--- a/erts/emulator/hipe/hipe_sparc_glue.S
+++ b/erts/emulator/hipe/hipe_sparc_glue.S
@@ -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/erts/emulator/hipe/hipe_sparc_glue.h b/erts/emulator/hipe/hipe_sparc_glue.h
index 95ce1e5b4a..3a1795f408 100644
--- a/erts/emulator/hipe/hipe_sparc_glue.h
+++ b/erts/emulator/hipe/hipe_sparc_glue.h
@@ -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/erts/emulator/hipe/hipe_sparc_primops.h b/erts/emulator/hipe/hipe_sparc_primops.h
index e42bcbad62..2ecfa1293e 100644
--- a/erts/emulator/hipe/hipe_sparc_primops.h
+++ b/erts/emulator/hipe/hipe_sparc_primops.h
@@ -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/erts/emulator/hipe/hipe_stack.c b/erts/emulator/hipe/hipe_stack.c
index e088b45c57..e2e6eb74b1 100644
--- a/erts/emulator/hipe/hipe_stack.c
+++ b/erts/emulator/hipe/hipe_stack.c
@@ -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/erts/emulator/hipe/hipe_stack.h b/erts/emulator/hipe/hipe_stack.h
index f575b97ce3..4ea7d5c031 100644
--- a/erts/emulator/hipe/hipe_stack.h
+++ b/erts/emulator/hipe/hipe_stack.h
@@ -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/erts/emulator/hipe/hipe_x86.c b/erts/emulator/hipe/hipe_x86.c
index 19b70afced..3d25646231 100644
--- a/erts/emulator/hipe/hipe_x86.c
+++ b/erts/emulator/hipe/hipe_x86.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/erts/emulator/hipe/hipe_x86.h b/erts/emulator/hipe/hipe_x86.h
index 30dc5666ae..8967793171 100644
--- a/erts/emulator/hipe/hipe_x86.h
+++ b/erts/emulator/hipe/hipe_x86.h
@@ -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/erts/emulator/hipe/hipe_x86.tab b/erts/emulator/hipe/hipe_x86.tab
index 55fb03cde8..b922f05165 100644
--- a/erts/emulator/hipe/hipe_x86.tab
+++ b/erts/emulator/hipe/hipe_x86.tab
@@ -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/erts/emulator/hipe/hipe_x86_abi.txt b/erts/emulator/hipe/hipe_x86_abi.txt
index b74fcef127..31a4a0e121 100644
--- a/erts/emulator/hipe/hipe_x86_abi.txt
+++ b/erts/emulator/hipe/hipe_x86_abi.txt
@@ -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/erts/emulator/hipe/hipe_x86_asm.m4 b/erts/emulator/hipe/hipe_x86_asm.m4
index 3457574622..91c60382eb 100644
--- a/erts/emulator/hipe/hipe_x86_asm.m4
+++ b/erts/emulator/hipe/hipe_x86_asm.m4
@@ -2,7 +2,7 @@ changecom(`/*', `*/')dnl
/*
* %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/erts/emulator/hipe/hipe_x86_bifs.m4 b/erts/emulator/hipe/hipe_x86_bifs.m4
index 0c0a8da6eb..b8ac5046d5 100644
--- a/erts/emulator/hipe/hipe_x86_bifs.m4
+++ b/erts/emulator/hipe/hipe_x86_bifs.m4
@@ -2,7 +2,7 @@ changecom(`/*', `*/')dnl
/*
* %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/erts/emulator/hipe/hipe_x86_gc.h b/erts/emulator/hipe/hipe_x86_gc.h
index a8770ef4f9..c22b28c2d5 100644
--- a/erts/emulator/hipe/hipe_x86_gc.h
+++ b/erts/emulator/hipe/hipe_x86_gc.h
@@ -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/erts/emulator/hipe/hipe_x86_glue.S b/erts/emulator/hipe/hipe_x86_glue.S
index cf382c480d..8d6e377730 100644
--- a/erts/emulator/hipe/hipe_x86_glue.S
+++ b/erts/emulator/hipe/hipe_x86_glue.S
@@ -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/erts/emulator/hipe/hipe_x86_glue.h b/erts/emulator/hipe/hipe_x86_glue.h
index 6c123e8938..818d7444e2 100644
--- a/erts/emulator/hipe/hipe_x86_glue.h
+++ b/erts/emulator/hipe/hipe_x86_glue.h
@@ -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/erts/emulator/hipe/hipe_x86_primops.h b/erts/emulator/hipe/hipe_x86_primops.h
index 3e057059bc..68a284203e 100644
--- a/erts/emulator/hipe/hipe_x86_primops.h
+++ b/erts/emulator/hipe/hipe_x86_primops.h
@@ -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/erts/emulator/hipe/hipe_x86_signal.c b/erts/emulator/hipe/hipe_x86_signal.c
index 0ecd13c4bc..50d08b96d3 100644
--- a/erts/emulator/hipe/hipe_x86_signal.c
+++ b/erts/emulator/hipe/hipe_x86_signal.c
@@ -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/erts/emulator/hipe/hipe_x86_stack.c b/erts/emulator/hipe/hipe_x86_stack.c
index 6629713a05..f1559b1451 100644
--- a/erts/emulator/hipe/hipe_x86_stack.c
+++ b/erts/emulator/hipe/hipe_x86_stack.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/erts/emulator/internal_doc/dec.erl b/erts/emulator/internal_doc/dec.erl
index e64e37a7d9..8ce83fa402 100644
--- a/erts/emulator/internal_doc/dec.erl
+++ b/erts/emulator/internal_doc/dec.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/erts/emulator/internal_doc/erl_ext_dist.txt b/erts/emulator/internal_doc/erl_ext_dist.txt
index 23b7d0d8e5..0b9a783069 100644
--- a/erts/emulator/internal_doc/erl_ext_dist.txt
+++ b/erts/emulator/internal_doc/erl_ext_dist.txt
@@ -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/erts/emulator/nifs/common/erl_tracer_nif.c b/erts/emulator/nifs/common/erl_tracer_nif.c
new file mode 100644
index 0000000000..6dddc80607
--- /dev/null
+++ b/erts/emulator/nifs/common/erl_tracer_nif.c
@@ -0,0 +1,261 @@
+/*
+ * %CopyrightBegin%
+ *
+ * Copyright Ericsson 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: NIF library for process/port tracer
+ *
+ */
+
+
+#define STATIC_ERLANG_NIF 1
+
+#include "erl_nif.h"
+#include "config.h"
+#include "sys.h"
+
+#ifdef VALGRIND
+# include <valgrind/memcheck.h>
+#endif
+
+/* 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", 6, trace}
+};
+
+
+ERL_NIF_INIT(erl_tracer, nif_funcs, load, NULL, upgrade, unload)
+
+#define ATOMS \
+ ATOM_DECL(call); \
+ ATOM_DECL(command); \
+ ATOM_DECL(cpu_timestamp); \
+ ATOM_DECL(discard); \
+ ATOM_DECL(exception_from); \
+ ATOM_DECL(match_spec_result); \
+ ATOM_DECL(monotonic); \
+ ATOM_DECL(ok); \
+ ATOM_DECL(remove); \
+ ATOM_DECL(return_from); \
+ ATOM_DECL(scheduler_id); \
+ ATOM_DECL(send); \
+ ATOM_DECL(send_to_non_existing_process); \
+ ATOM_DECL(seq_trace); \
+ ATOM_DECL(spawn); \
+ ATOM_DECL(strict_monotonic); \
+ ATOM_DECL(timestamp); \
+ ATOM_DECL(trace); \
+ ATOM_DECL(trace_status); \
+ ATOM_DECL(trace_ts); \
+ ATOM_DECL(true); \
+ ATOM_DECL(gc_minor_start); \
+ ATOM_DECL(gc_minor_end); \
+ ATOM_DECL(gc_major_start); \
+ ATOM_DECL(gc_major_end); \
+ ATOM_DECL(undefined);
+
+#define ATOM_DECL(A) static ERL_NIF_TERM atom_##A
+ATOMS
+#undef ATOM_DECL
+
+static int load(ErlNifEnv* env, void** priv_data, ERL_NIF_TERM load_info)
+{
+
+#define ATOM_DECL(A) atom_##A = enif_make_atom(env, #A)
+ATOMS
+#undef ATOM_DECL
+
+ *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[])
+{
+ ErlNifPid to_pid;
+ ErlNifPort to_port;
+ ERL_NIF_TERM ret = enif_is_identical(argv[0], atom_trace_status) ?
+ atom_remove : atom_discard;
+
+ ASSERT(argc == 3);
+
+ if (enif_get_local_pid(env, argv[1], &to_pid)) {
+ if (!enif_is_process_alive(env, &to_pid))
+ /* tracer is dead so we should remove this trace point */
+ return ret;
+ } else if (enif_get_local_port(env, argv[1], &to_port)) {
+ if (!enif_is_port_alive(env, &to_port))
+ /* tracer is dead so we should remove this trace point */
+ return ret;
+ } else {
+ /* The state was not a pid or a port */
+ return ret;
+ }
+
+ /* Only generate trace for when tracer != tracee */
+ if (enif_is_identical(argv[1], argv[2])) {
+ return atom_discard;
+ }
+
+ return atom_trace;
+}
+
+/*
+ -spec trace(seq_trace, TracerState :: pid() | port(),
+ Label :: non_neg_integer(),
+ Msg :: term(),
+ Opts :: map()) -> ignored();
+ trace(Tag :: atom(), TracerState :: pid() | port(),
+ Tracee :: pid() || port() || undefined,
+ Msg :: term(),
+ Opts :: map()) -> ignored().
+ -spec trace(Tag :: atom(), TracerState :: pid() | port(),
+ Tracee :: pid() || port() || undefined,
+ Msg :: term(),
+ Extra :: term(),
+ Opts :: map()) -> ignored().
+*/
+static ERL_NIF_TERM trace(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+{
+ ERL_NIF_TERM value, msg, tt[8], opts;
+ ErlNifPid to_pid;
+ ErlNifPort to_port;
+ size_t tt_sz = 0;
+ int is_port = 0;
+ ASSERT(argc == 6);
+
+ if (!enif_get_local_pid(env, argv[1], &to_pid)) {
+ if (!enif_get_local_port(env, argv[1], &to_port)) {
+ /* This only fails if argv[1] is a not a local port/pid
+ which should not happen as it is checked in enabled */
+ ASSERT(0);
+ return atom_ok;
+ }
+ is_port = 1;
+ }
+
+ if (!enif_is_identical(argv[4], atom_undefined)) {
+ tt[tt_sz++] = atom_trace;
+ tt[tt_sz++] = argv[2];
+ tt[tt_sz++] = argv[0];
+ tt[tt_sz++] = argv[3];
+ tt[tt_sz++] = argv[4];
+ } else {
+ if (enif_is_identical(argv[0], atom_seq_trace)) {
+ tt[tt_sz++] = atom_seq_trace;
+ tt[tt_sz++] = argv[2];
+ tt[tt_sz++] = argv[3];
+ } else {
+ tt[tt_sz++] = atom_trace;
+ tt[tt_sz++] = argv[2];
+ tt[tt_sz++] = argv[0];
+ tt[tt_sz++] = argv[3];
+ }
+ }
+
+ opts = argv[5];
+
+ if (enif_get_map_value(env, opts, atom_match_spec_result,
+ &value)
+ && !enif_is_identical(value, atom_true)) {
+ tt[tt_sz++] = value;
+ }
+
+ if (enif_get_map_value(env, opts, atom_scheduler_id, &value)
+ && !enif_is_identical(value, atom_undefined)) {
+ tt[tt_sz++] = value;
+ }
+
+ if (enif_get_map_value(env, opts, atom_timestamp, &value)
+ && !enif_is_identical(value, atom_undefined)) {
+ ERL_NIF_TERM ts;
+ if (enif_is_identical(value, atom_monotonic)) {
+ ErlNifTime mon = enif_monotonic_time(ERL_NIF_NSEC);
+ ts = enif_make_int64(env, mon);
+ } else if (enif_is_identical(value, atom_strict_monotonic)) {
+ ErlNifTime mon = enif_monotonic_time(ERL_NIF_NSEC);
+ ERL_NIF_TERM unique = enif_make_unique_integer(
+ env, ERL_NIF_UNIQUE_MONOTONIC);
+ ts = enif_make_tuple2(env, enif_make_int64(env, mon), unique);
+ } else if (enif_is_identical(value, atom_timestamp)) {
+ ts = enif_now_time(env);
+ } else if (enif_is_identical(value, atom_cpu_timestamp)) {
+ ts = enif_cpu_time(env);
+ } else {
+ ASSERT(0);
+ goto error;
+ }
+ tt[tt_sz++] = ts;
+ if (tt[0] == atom_trace)
+ tt[0] = atom_trace_ts;
+ }
+
+ msg = enif_make_tuple_from_array(env, tt, tt_sz);
+
+ if (is_port) {
+ ErlNifBinary bin;
+
+ if (!enif_term_to_binary(env, msg, &bin))
+ goto error;
+
+ msg = enif_make_binary(env, &bin);
+
+ if (!enif_port_command(env, &to_port, NULL, msg))
+ /* port has probably died, enabled will clean up */;
+
+ enif_release_binary(&bin);
+ } else {
+
+ if (!enif_send(env, &to_pid, NULL, msg))
+ /* process has probably died, enabled will clean up */;
+ }
+
+error:
+
+ return atom_ok;
+}
diff --git a/erts/emulator/pcre/pcre.mk b/erts/emulator/pcre/pcre.mk
index b844b77214..38b91237a2 100644
--- a/erts/emulator/pcre/pcre.mk
+++ b/erts/emulator/pcre/pcre.mk
@@ -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/erts/emulator/sys/common/erl_check_io.c b/erts/emulator/sys/common/erl_check_io.c
index f87196d724..44a77f3ea5 100644
--- a/erts/emulator/sys/common/erl_check_io.c
+++ b/erts/emulator/sys/common/erl_check_io.c
@@ -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.
@@ -39,6 +39,7 @@
#include "erl_check_io.h"
#include "erl_thr_progress.h"
#include "dtrace-wrapper.h"
+#include "lttng-wrapper.h"
#define ERTS_WANT_TIMER_WHEEL_API
#include "erl_time.h"
@@ -395,6 +396,7 @@ forget_removed(struct pollset_info* psi)
if (drv_ptr) {
int was_unmasked = erts_block_fpe();
DTRACE1(driver_stop_select, drv_ptr->name);
+ LTTNG1(driver_stop_select, drv_ptr->name);
(*drv_ptr->stop_select) ((ErlDrvEvent) fd, NULL);
erts_unblock_fpe(was_unmasked);
if (drv_ptr->handle) {
@@ -1055,6 +1057,7 @@ done_unknown:
if (stop_select_fn) {
int was_unmasked = erts_block_fpe();
DTRACE1(driver_stop_select, name);
+ LTTNG1(driver_stop_select, "unknown");
(*stop_select_fn)(e, NULL);
erts_unblock_fpe(was_unmasked);
}
diff --git a/erts/emulator/sys/common/erl_check_io.h b/erts/emulator/sys/common/erl_check_io.h
index c8675a7d9d..14f1ea3f43 100644
--- a/erts/emulator/sys/common/erl_check_io.h
+++ b/erts/emulator/sys/common/erl_check_io.h
@@ -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/erts/emulator/sys/common/erl_mmap.c b/erts/emulator/sys/common/erl_mmap.c
index 03ca080c14..53009a1481 100644
--- a/erts/emulator/sys/common/erl_mmap.c
+++ b/erts/emulator/sys/common/erl_mmap.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.
@@ -28,6 +28,8 @@
#include "erl_mmap.h"
#include <stddef.h>
+#if HAVE_ERTS_MMAP
+
/* #define ERTS_MMAP_OP_RINGBUF_SZ 100 */
#if defined(DEBUG) || 0
@@ -294,12 +296,13 @@ typedef struct {
}ErtsFreeSegMap;
struct ErtsMemMapper_ {
- int (*reserve_physical)(char *, UWord);
+ int (*reserve_physical)(char *, UWord, int exec);
void (*unreserve_physical)(char *, UWord);
int supercarrier;
int no_os_mmap;
+ int executable; /* is client a native code allocator? */
/*
- * Super unaligend area is located above super aligned
+ * Super unaligned area is located above super aligned
* area. That is, `sa.bot` is beginning of the super
* carrier, `sua.top` is the end of the super carrier,
* and sa.top and sua.bot moves towards eachother.
@@ -355,6 +358,12 @@ char* erts_literals_start;
UWord erts_literals_size;
#endif
+#ifdef ERTS_ALC_A_EXEC
+ErtsMemMapper erts_exec_mmapper;
+#endif
+
+
+
#define ERTS_MMAP_SIZE_SC_SA_INC(SZ) \
do { \
mm->size.supercarrier.used.total += (SZ); \
@@ -1232,6 +1241,7 @@ Eterm build_free_seg_list(Process* p, ErtsFreeSegMap* map)
#if HAVE_MMAP
# define ERTS_MMAP_PROT (PROT_READ|PROT_WRITE)
+# define ERTS_MMAP_PROT_EXEC (PROT_READ|PROT_WRITE|PROT_EXEC)
# if defined(MAP_ANONYMOUS)
# define ERTS_MMAP_FLAGS (MAP_ANON|MAP_PRIVATE)
# define ERTS_MMAP_FD (-1)
@@ -1245,24 +1255,26 @@ Eterm build_free_seg_list(Process* p, ErtsFreeSegMap* map)
#endif
static ERTS_INLINE void *
-os_mmap(void *hint_ptr, UWord size, int try_superalign)
+os_mmap(void *hint_ptr, UWord size, int try_superalign, int executable)
{
#if HAVE_MMAP
+ const int prot = executable ? ERTS_MMAP_PROT_EXEC : ERTS_MMAP_PROT;
void *res;
#ifdef MAP_ALIGN
if (try_superalign)
- res = mmap((void *) ERTS_SUPERALIGNED_SIZE, size, ERTS_MMAP_PROT,
+ res = mmap((void *) ERTS_SUPERALIGNED_SIZE, size, prot,
ERTS_MMAP_FLAGS|MAP_ALIGN, ERTS_MMAP_FD, 0);
else
#endif
- res = mmap((void *) hint_ptr, size, ERTS_MMAP_PROT,
+ res = mmap((void *) hint_ptr, size, prot,
ERTS_MMAP_FLAGS, ERTS_MMAP_FD, 0);
if (res == MAP_FAILED)
return NULL;
return res;
#elif HAVE_VIRTUALALLOC
+ const DWORD prot = executable ? PAGE_EXECUTE_READWRITE : PAGE_READWRITE;
return (void *) VirtualAlloc(NULL, (SIZE_T) size,
- MEM_COMMIT|MEM_RESERVE, PAGE_READWRITE);
+ MEM_COMMIT|MEM_RESERVE, prot);
#else
# error "missing mmap() or similar"
#endif
@@ -1319,6 +1331,7 @@ os_mremap(void *ptr, UWord old_size, UWord new_size, int try_superalign)
#if HAVE_MMAP
#define ERTS_MMAP_RESERVE_PROT (ERTS_MMAP_PROT)
+#define ERTS_MMAP_RESERVE_PROT_EXEC (ERTS_MMAP_PROT_EXEC)
#define ERTS_MMAP_RESERVE_FLAGS (ERTS_MMAP_FLAGS|MAP_FIXED)
#define ERTS_MMAP_UNRESERVE_PROT (PROT_NONE)
#define ERTS_MMAP_UNRESERVE_FLAGS (ERTS_MMAP_FLAGS|MAP_NORESERVE|MAP_FIXED)
@@ -1326,9 +1339,10 @@ os_mremap(void *ptr, UWord old_size, UWord new_size, int try_superalign)
#define ERTS_MMAP_VIRTUAL_FLAGS (ERTS_MMAP_FLAGS|MAP_NORESERVE)
static int
-os_reserve_physical(char *ptr, UWord size)
+os_reserve_physical(char *ptr, UWord size, int exec)
{
- void *res = mmap((void *) ptr, (size_t) size, ERTS_MMAP_RESERVE_PROT,
+ const int prot = exec ? ERTS_MMAP_RESERVE_PROT_EXEC : ERTS_MMAP_RESERVE_PROT;
+ void *res = mmap((void *) ptr, (size_t) size, prot,
ERTS_MMAP_RESERVE_FLAGS, ERTS_MMAP_FD, 0);
if (res == (void *) MAP_FAILED)
return 0;
@@ -1341,14 +1355,43 @@ os_unreserve_physical(char *ptr, UWord size)
void *res = mmap((void *) ptr, (size_t) size, ERTS_MMAP_UNRESERVE_PROT,
ERTS_MMAP_UNRESERVE_FLAGS, ERTS_MMAP_FD, 0);
if (res == (void *) MAP_FAILED)
- erl_exit(ERTS_ABORT_EXIT, "Failed to unreserve memory");
+ erts_exit(ERTS_ABORT_EXIT, "Failed to unreserve memory");
}
static void *
-os_mmap_virtual(char *ptr, UWord size)
+os_mmap_virtual(char *ptr, UWord size, int exec)
{
- void *res = mmap((void *) ptr, (size_t) size, ERTS_MMAP_VIRTUAL_PROT,
- ERTS_MMAP_VIRTUAL_FLAGS, ERTS_MMAP_FD, 0);
+ int flags = ERTS_MMAP_VIRTUAL_FLAGS;
+ void* res;
+
+#ifdef ERTS_ALC_A_EXEC
+ if (exec) {
+ ASSERT(!ptr);
+ /* OTP-19.0: Nice hack below cut-and-pasted from hipe_amd64.c */
+
+# ifdef MAP_32BIT
+ /* If we got MAP_32BIT (Linux), then use that to ask for low memory */
+ flags |= MAP_32BIT;
+# else
+ /* FreeBSD doesn't have MAP_32BIT, and it doesn't respect
+ a plain map_hint (returns high mappings even though the
+ hint refers to a free area), so we have to use both map_hint
+ and MAP_FIXED to get addresses below the 2GB boundary.
+ This is even worse than the Linux/ppc64 case.
+ Similarly, Solaris 10 doesn't have MAP_32BIT,
+ and it doesn't respect a plain map_hint. */
+ ptr = (char*)(512*1024*1024); /* 0.5GB */
+
+# if defined(__FreeBSD__) || defined(__sun__)
+ flags |= MAP_FIXED;
+# endif
+# endif /* !MAP_32BIT */
+ }
+#else /* !ERTS_ALC_A_EXEC */
+ ASSERT(!exec);
+#endif
+ res = mmap((void *) ptr, (size_t) size, ERTS_MMAP_VIRTUAL_PROT,
+ flags, ERTS_MMAP_FD, 0);
if (res == (void *) MAP_FAILED)
return NULL;
return res;
@@ -1361,7 +1404,7 @@ os_mmap_virtual(char *ptr, UWord size)
#endif /* ERTS_HAVE_OS_MMAP */
-static int reserve_noop(char *ptr, UWord size)
+static int reserve_noop(char *ptr, UWord size, int exec)
{
#ifdef ERTS_MMAP_DEBUG_FILL_AREAS
Uint32 *uip, *end = (Uint32 *) (ptr + size);
@@ -1404,7 +1447,7 @@ alloc_desc_insert_free_seg(ErtsMemMapper* mm,
#if ERTS_HAVE_OS_MMAP
if (!mm->no_os_mmap) {
- ptr = os_mmap(mm->desc.new_area_hint, ERTS_PAGEALIGNED_SIZE, 0);
+ ptr = os_mmap(mm->desc.new_area_hint, ERTS_PAGEALIGNED_SIZE, 0, 0);
if (ptr) {
mm->desc.new_area_hint = ptr+ERTS_PAGEALIGNED_SIZE;
ERTS_MMAP_SIZE_OS_INC(ERTS_PAGEALIGNED_SIZE);
@@ -1423,7 +1466,7 @@ alloc_desc_insert_free_seg(ErtsMemMapper* mm,
da_map = &mm->sua.map;
desc = lookup_free_seg(da_map, ERTS_PAGEALIGNED_SIZE);
if (desc) {
- if (mm->reserve_physical(desc->start, ERTS_PAGEALIGNED_SIZE))
+ if (mm->reserve_physical(desc->start, ERTS_PAGEALIGNED_SIZE, 0))
ERTS_MMAP_SIZE_SC_SUA_INC(ERTS_PAGEALIGNED_SIZE);
else
desc = NULL;
@@ -1433,7 +1476,7 @@ alloc_desc_insert_free_seg(ErtsMemMapper* mm,
da_map = &mm->sa.map;
desc = lookup_free_seg(da_map, ERTS_PAGEALIGNED_SIZE);
if (desc) {
- if (mm->reserve_physical(desc->start, ERTS_PAGEALIGNED_SIZE))
+ if (mm->reserve_physical(desc->start, ERTS_PAGEALIGNED_SIZE, 0))
ERTS_MMAP_SIZE_SC_SA_INC(ERTS_PAGEALIGNED_SIZE);
else
desc = NULL;
@@ -1494,7 +1537,7 @@ erts_mmap(ErtsMemMapper* mm, Uint32 flags, UWord *sizep)
if (desc) {
seg = desc->start;
end = seg+asize;
- if (!mm->reserve_physical(seg, asize))
+ if (!mm->reserve_physical(seg, asize, mm->executable))
goto supercarrier_reserve_failure;
if (desc->end == end) {
delete_free_seg(&mm->sua.map, desc);
@@ -1509,8 +1552,8 @@ erts_mmap(ErtsMemMapper* mm, Uint32 flags, UWord *sizep)
}
if (asize <= mm->sua.bot - mm->sa.top) {
- if (!mm->reserve_physical(mm->sua.bot - asize,
- asize))
+ if (!mm->reserve_physical(mm->sua.bot - asize, asize,
+ mm->executable))
goto supercarrier_reserve_failure;
mm->sua.bot -= asize;
seg = mm->sua.bot;
@@ -1526,7 +1569,8 @@ erts_mmap(ErtsMemMapper* mm, Uint32 flags, UWord *sizep)
char *start = seg = desc->start;
seg = (char *) ERTS_SUPERALIGNED_CEILING(seg);
end = seg+asize;
- if (!mm->reserve_physical(start, (UWord) (end - start)))
+ if (!mm->reserve_physical(start, (UWord) (end - start),
+ mm->executable))
goto supercarrier_reserve_failure;
ERTS_MMAP_SIZE_SC_SA_INC(asize);
if (desc->end == end) {
@@ -1558,7 +1602,8 @@ erts_mmap(ErtsMemMapper* mm, Uint32 flags, UWord *sizep)
if (asize + (seg - start) <= mm->sua.bot - start) {
end = seg + asize;
- if (!mm->reserve_physical(start, (UWord) (end - start)))
+ if (!mm->reserve_physical(start, (UWord) (end - start),
+ mm->executable))
goto supercarrier_reserve_failure;
mm->sa.top = end;
ERTS_MMAP_SIZE_SC_SA_INC(asize);
@@ -1580,7 +1625,8 @@ erts_mmap(ErtsMemMapper* mm, Uint32 flags, UWord *sizep)
seg = (char *) ERTS_SUPERALIGNED_CEILING(org_start);
end = seg + asize;
- if (!mm->reserve_physical(seg, (UWord) (org_end - seg)))
+ if (!mm->reserve_physical(seg, (UWord) (org_end - seg),
+ mm->executable))
goto supercarrier_reserve_failure;
ERTS_MMAP_SIZE_SC_SUA_INC(asize);
if (org_start != seg) {
@@ -1613,13 +1659,13 @@ erts_mmap(ErtsMemMapper* mm, Uint32 flags, UWord *sizep)
/* Map using OS primitives */
if (!(ERTS_MMAPFLG_SUPERCARRIER_ONLY & flags) && !mm->no_os_mmap) {
if (!(ERTS_MMAPFLG_SUPERALIGNED & flags)) {
- seg = os_mmap(NULL, asize, 0);
+ seg = os_mmap(NULL, asize, 0, mm->executable);
if (!seg)
goto failure;
}
else {
asize = ERTS_SUPERALIGNED_CEILING(*sizep);
- seg = os_mmap(NULL, asize, 1);
+ seg = os_mmap(NULL, asize, 1, mm->executable);
if (!seg)
goto failure;
@@ -1629,7 +1675,8 @@ erts_mmap(ErtsMemMapper* mm, Uint32 flags, UWord *sizep)
os_munmap(seg, asize);
- ptr = os_mmap(NULL, asize + ERTS_SUPERALIGNED_SIZE, 1);
+ ptr = os_mmap(NULL, asize + ERTS_SUPERALIGNED_SIZE, 1,
+ mm->executable);
if (!ptr)
goto failure;
@@ -1964,7 +2011,8 @@ erts_mremap(ErtsMemMapper* mm,
if (next && new_end <= next->end) {
if (!mm->reserve_physical(((char *) ptr) + old_size,
- asize - old_size))
+ asize - old_size,
+ mm->executable))
goto supercarrier_reserve_failure;
if (new_end < next->end)
resize_free_seg(&mm->sua.map, next, new_end, next->end);
@@ -1982,7 +2030,8 @@ erts_mremap(ErtsMemMapper* mm,
if (end == mm->sa.top) {
if (new_end <= mm->sua.bot) {
if (!mm->reserve_physical(((char *) ptr) + old_size,
- asize - old_size))
+ asize - old_size,
+ mm->executable))
goto supercarrier_reserve_failure;
mm->sa.top = new_end;
new_ptr = ptr;
@@ -1994,7 +2043,8 @@ erts_mremap(ErtsMemMapper* mm,
adjacent_free_seg(&mm->sa.map, start, end, &prev, &next);
if (next && new_end <= next->end) {
if (!mm->reserve_physical(((char *) ptr) + old_size,
- asize - old_size))
+ asize - old_size,
+ mm->executable))
goto supercarrier_reserve_failure;
if (new_end < next->end)
resize_free_seg(&mm->sa.map, next, new_end, next->end);
@@ -2051,6 +2101,7 @@ int erts_mmap_in_supercarrier(ErtsMemMapper* mm, void *ptr)
}
static struct {
+ Eterm options;
Eterm total;
Eterm total_sa;
Eterm total_sua;
@@ -2084,6 +2135,7 @@ static void init_atoms(void)
erts_mtx_lock(&am.init_mutex);
if (!am.is_initialized) {
+ AM_INIT(options);
AM_INIT(total);
AM_INIT(total_sa);
AM_INIT(total_sua);
@@ -2112,7 +2164,7 @@ static void hard_dbg_mseg_init(void);
#endif
void
-erts_mmap_init(ErtsMemMapper* mm, ErtsMMapInit *init)
+erts_mmap_init(ErtsMemMapper* mm, ErtsMMapInit *init, int executable)
{
static int is_first_call = 1;
int virtual_map = 0;
@@ -2136,7 +2188,7 @@ erts_mmap_init(ErtsMemMapper* mm, ErtsMMapInit *init)
#endif
erts_page_inv_mask = pagesize - 1;
if (pagesize & erts_page_inv_mask)
- erl_exit(-1, "erts_mmap: Invalid pagesize: %bpu\n",
+ erts_exit(1, "erts_mmap: Invalid pagesize: %bpu\n",
pagesize);
ERTS_MMAP_OP_RINGBUF_INIT();
@@ -2144,11 +2196,12 @@ erts_mmap_init(ErtsMemMapper* mm, ErtsMMapInit *init)
mm->supercarrier = 0;
mm->reserve_physical = reserve_noop;
mm->unreserve_physical = unreserve_noop;
+ mm->executable = executable;
#if HAVE_MMAP && !defined(MAP_ANON)
mm->mmap_fd = open("/dev/zero", O_RDWR);
if (mm->mmap_fd < 0)
- erl_exit(-1, "erts_mmap: Failed to open /dev/zero\n");
+ erts_exit(1, "erts_mmap: Failed to open /dev/zero\n");
#endif
erts_smp_mtx_init(&mm->mtx, "erts_mmap");
@@ -2163,9 +2216,9 @@ erts_mmap_init(ErtsMemMapper* mm, ErtsMMapInit *init)
ptr = (char *) ERTS_PAGEALIGNED_CEILING(init->virtual_range.start);
end = (char *) ERTS_PAGEALIGNED_FLOOR(init->virtual_range.end);
sz = end - ptr;
- start = os_mmap_virtual(ptr, sz);
+ start = os_mmap_virtual(ptr, sz, executable);
if (!start || start > ptr || start >= end)
- erl_exit(-1,
+ erts_exit(1,
"erts_mmap: Failed to create virtual range for super carrier\n");
sz = start - ptr;
if (sz)
@@ -2188,7 +2241,7 @@ erts_mmap_init(ErtsMemMapper* mm, ErtsMMapInit *init)
sz = ERTS_PAGEALIGNED_CEILING(init->scs);
#ifdef ERTS_HAVE_OS_PHYSICAL_MEMORY_RESERVATION
if (!init->scrpm) {
- start = os_mmap_virtual(NULL, sz);
+ start = os_mmap_virtual(NULL, sz, executable);
mm->reserve_physical = os_reserve_physical;
mm->unreserve_physical = os_unreserve_physical;
virtual_map = 1;
@@ -2200,10 +2253,10 @@ erts_mmap_init(ErtsMemMapper* mm, ErtsMMapInit *init)
* The whole supercarrier will by physically
* reserved all the time.
*/
- start = os_mmap(NULL, sz, 1);
+ start = os_mmap(NULL, sz, 1, executable);
}
if (!start)
- erl_exit(-1,
+ erts_exit(1,
"erts_mmap: Failed to create super carrier of size %bpu MB\n",
init->scs/1024/1024);
end = start + sz;
@@ -2250,7 +2303,7 @@ erts_mmap_init(ErtsMemMapper* mm, ErtsMMapInit *init)
if ((desc_size
+ ERTS_SUPERALIGNED_SIZE
+ ERTS_PAGEALIGNED_SIZE) > end - start)
- erl_exit(-1, "erts_mmap: No space for segments in super carrier\n");
+ erts_exit(1, "erts_mmap: No space for segments in super carrier\n");
mm->sa.bot = start;
mm->sa.bot += desc_size;
@@ -2274,7 +2327,7 @@ erts_mmap_init(ErtsMemMapper* mm, ErtsMMapInit *init)
mm->sua.top -= ERTS_PAGEALIGNED_SIZE;
mm->size.supercarrier.used.total += ERTS_PAGEALIGNED_SIZE;
#ifdef ERTS_HAVE_OS_PHYSICAL_MEMORY_RESERVATION
- if (!virtual_map || os_reserve_physical(mm->sua.top, ERTS_PAGEALIGNED_SIZE))
+ if (!virtual_map || os_reserve_physical(mm->sua.top, ERTS_PAGEALIGNED_SIZE, 0))
#endif
add_free_desc_area(mm, mm->sua.top, end);
mm->desc.reserved += (end - mm->sua.top) / sizeof(ErtsFreeSegDesc);
@@ -2287,8 +2340,8 @@ erts_mmap_init(ErtsMemMapper* mm, ErtsMMapInit *init)
* will be used for free segment descritors.
*/
#ifdef ERTS_HAVE_OS_PHYSICAL_MEMORY_RESERVATION
- if (virtual_map && !os_reserve_physical(start, mm->sa.bot - start))
- erl_exit(-1, "erts_mmap: Failed to reserve physical memory for descriptors\n");
+ if (virtual_map && !os_reserve_physical(start, mm->sa.bot - start, 0))
+ erts_exit(1, "erts_mmap: Failed to reserve physical memory for descriptors\n");
#endif
mm->desc.unused_start = start;
mm->desc.unused_end = mm->sa.bot;
@@ -2338,9 +2391,9 @@ Eterm erts_mmap_info(ErtsMemMapper* mm,
Eterm seg_tags[] = { am.used, am.max, am.allocated, am.reserved, am.used_sa, am.used_sua };
Eterm group[2];
Eterm group_tags[] = { am.sizes, am.free_segs };
- Eterm list[2];
- Eterm list_tags[2]; /* { am.supercarrier, am.os } */
- int lix;
+ Eterm list[3];
+ Eterm list_tags[3]; /* { am.options, am.supercarrier, am.os } */
+ int lix = 0;
Eterm res = THE_NON_VALUE;
if (!hpp) {
@@ -2363,6 +2416,12 @@ Eterm erts_mmap_info(ErtsMemMapper* mm,
erts_smp_mtx_unlock(&mm->mtx);
}
+ list[lix] = erts_mmap_info_options(mm, "option ", print_to_p, print_to_arg,
+ hpp, szp);
+ list_tags[lix] = am.options;
+ lix++;
+
+
if (print_to_p) {
int to = *print_to_p;
void *arg = print_to_arg;
@@ -2392,7 +2451,6 @@ Eterm erts_mmap_info(ErtsMemMapper* mm,
init_atoms();
}
- lix = 0;
if (mm->supercarrier) {
group[0] = erts_bld_atom_uword_2tup_list(hpp, szp,
sizeof(size_tags)/sizeof(Eterm),
@@ -2457,9 +2515,13 @@ Eterm erts_mmap_info_options(ErtsMemMapper* mm,
return res;
}
+#endif /* HAVE_ERTS_MMAP */
-Eterm erts_mmap_debug_info(ErtsMemMapper* mm, Process* p)
+Eterm erts_mmap_debug_info(Process* p)
{
+#if HAVE_ERTS_MMAP
+ ErtsMemMapper* mm = &erts_dflt_mmapper;
+
if (mm->supercarrier) {
ERTS_DECL_AM(sabot);
ERTS_DECL_AM(satop);
@@ -2497,9 +2559,8 @@ Eterm erts_mmap_debug_info(ErtsMemMapper* mm, Process* p)
HRelease(p, hp_end, hp);
return list;
}
- else {
- return am_undefined;
- }
+#endif
+ return am_undefined;
}
diff --git a/erts/emulator/sys/common/erl_mmap.h b/erts/emulator/sys/common/erl_mmap.h
index 61d912fd28..7ac61a82c1 100644
--- a/erts/emulator/sys/common/erl_mmap.h
+++ b/erts/emulator/sys/common/erl_mmap.h
@@ -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,9 +26,36 @@
#define ERTS_MMAP_SUPERALIGNED_BITS (18)
/* Affects hard limits for sbct and lmbcs documented in erts_alloc.xml */
-#define ERTS_MMAPFLG_OS_ONLY (((Uint32) 1) << 0)
-#define ERTS_MMAPFLG_SUPERCARRIER_ONLY (((Uint32) 1) << 1)
-#define ERTS_MMAPFLG_SUPERALIGNED (((Uint32) 1) << 2)
+#ifndef HAVE_MMAP
+# define HAVE_MMAP 0
+#endif
+#ifndef HAVE_MREMAP
+# define HAVE_MREMAP 0
+#endif
+#if HAVE_MMAP
+# define ERTS_HAVE_OS_MMAP 1
+# define ERTS_HAVE_GENUINE_OS_MMAP 1
+# if HAVE_MREMAP
+# define ERTS_HAVE_OS_MREMAP 1
+# endif
+# if defined(MAP_FIXED) && defined(MAP_NORESERVE)
+# define ERTS_HAVE_OS_PHYSICAL_MEMORY_RESERVATION 1
+# endif
+#endif
+
+#ifndef HAVE_VIRTUALALLOC
+# define HAVE_VIRTUALALLOC 0
+#endif
+#if HAVE_VIRTUALALLOC
+# define ERTS_HAVE_OS_MMAP 1
+#endif
+
+#ifdef ERTS_HAVE_GENUINE_OS_MMAP
+# define HAVE_ERTS_MMAP 1
+#else
+# define HAVE_ERTS_MMAP 0
+#endif
+
extern UWord erts_page_inv_mask;
@@ -50,29 +77,16 @@ typedef struct {
#define ERTS_MMAP_INIT_DEFAULT_INITER \
{{NULL, NULL}, {NULL, NULL}, 0, 1, (1 << 16), 1}
+#define ERTS_LITERAL_VIRTUAL_AREA_SIZE (UWORD_CONSTANT(1)*1024*1024*1024)
+
#define ERTS_MMAP_INIT_LITERAL_INITER \
- {{NULL, NULL}, {NULL, NULL}, 1024*1024*1024, 1, (1 << 16), 0}
+ {{NULL, NULL}, {NULL, NULL}, ERTS_LITERAL_VIRTUAL_AREA_SIZE, 1, (1 << 10), 0}
-typedef struct ErtsMemMapper_ ErtsMemMapper;
+#define ERTS_HIPE_EXEC_VIRTUAL_AREA_SIZE (UWORD_CONSTANT(512)*1024*1024)
+
+#define ERTS_MMAP_INIT_HIPE_EXEC_INITER \
+ {{NULL, NULL}, {NULL, NULL}, ERTS_HIPE_EXEC_VIRTUAL_AREA_SIZE, 1, (1 << 10), 0}
-void *erts_mmap(ErtsMemMapper*, Uint32 flags, UWord *sizep);
-void erts_munmap(ErtsMemMapper*, Uint32 flags, void *ptr, UWord size);
-void *erts_mremap(ErtsMemMapper*, Uint32 flags, void *ptr, UWord old_size, UWord *sizep);
-int erts_mmap_in_supercarrier(ErtsMemMapper*, void *ptr);
-void erts_mmap_init(ErtsMemMapper*, ErtsMMapInit*);
-struct erts_mmap_info_struct
-{
- UWord sizes[6];
- UWord segs[6];
- UWord os_used;
-};
-Eterm erts_mmap_info(ErtsMemMapper*, int *print_to_p, void *print_to_arg,
- Eterm** hpp, Uint* szp, struct erts_mmap_info_struct*);
-Eterm erts_mmap_info_options(ErtsMemMapper*,
- char *prefix, int *print_to_p, void *print_to_arg,
- Uint **hpp, Uint *szp);
-struct process;
-Eterm erts_mmap_debug_info(ErtsMemMapper*, struct process*);
#define ERTS_SUPERALIGNED_SIZE \
(1 << ERTS_MMAP_SUPERALIGNED_BITS)
@@ -100,34 +114,46 @@ Eterm erts_mmap_debug_info(ErtsMemMapper*, struct process*);
#define ERTS_PAGEALIGNED_SIZE \
(ERTS_INV_PAGEALIGNED_MASK + 1)
-#ifndef HAVE_MMAP
-# define HAVE_MMAP 0
-#endif
-#ifndef HAVE_MREMAP
-# define HAVE_MREMAP 0
-#endif
-#if HAVE_MMAP
-# define ERTS_HAVE_OS_MMAP 1
-# define ERTS_HAVE_GENUINE_OS_MMAP 1
-# if HAVE_MREMAP
-# define ERTS_HAVE_OS_MREMAP 1
-# endif
-# if defined(MAP_FIXED) && defined(MAP_NORESERVE)
-# define ERTS_HAVE_OS_PHYSICAL_MEMORY_RESERVATION 1
-# endif
-#endif
+struct process;
+Eterm erts_mmap_debug_info(struct process*);
-#ifndef HAVE_VIRTUALALLOC
-# define HAVE_VIRTUALALLOC 0
-#endif
-#if HAVE_VIRTUALALLOC
-# define ERTS_HAVE_OS_MMAP 1
-#endif
+#if HAVE_ERTS_MMAP
+
+typedef struct ErtsMemMapper_ ErtsMemMapper;
+
+#define ERTS_MMAPFLG_OS_ONLY (((Uint32) 1) << 0)
+#define ERTS_MMAPFLG_SUPERCARRIER_ONLY (((Uint32) 1) << 1)
+#define ERTS_MMAPFLG_SUPERALIGNED (((Uint32) 1) << 2)
+
+void *erts_mmap(ErtsMemMapper*, Uint32 flags, UWord *sizep);
+void erts_munmap(ErtsMemMapper*, Uint32 flags, void *ptr, UWord size);
+void *erts_mremap(ErtsMemMapper*, Uint32 flags, void *ptr, UWord old_size, UWord *sizep);
+int erts_mmap_in_supercarrier(ErtsMemMapper*, void *ptr);
+void erts_mmap_init(ErtsMemMapper*, ErtsMMapInit*, int executable);
+struct erts_mmap_info_struct
+{
+ UWord sizes[6];
+ UWord segs[6];
+ UWord os_used;
+};
+Eterm erts_mmap_info(ErtsMemMapper*, int *print_to_p, void *print_to_arg,
+ Eterm** hpp, Uint* szp, struct erts_mmap_info_struct*);
+Eterm erts_mmap_info_options(ErtsMemMapper*,
+ char *prefix, int *print_to_p, void *print_to_arg,
+ Uint **hpp, Uint *szp);
+
+
+#ifdef ERTS_WANT_MEM_MAPPERS
+# include "erl_alloc_types.h"
extern ErtsMemMapper erts_dflt_mmapper;
-#if defined(ARCH_64) && defined(ERTS_HAVE_OS_PHYSICAL_MEMORY_RESERVATION)
+# if defined(ARCH_64) && defined(ERTS_HAVE_OS_PHYSICAL_MEMORY_RESERVATION)
extern ErtsMemMapper erts_literal_mmapper;
-#endif
+# endif
+# ifdef ERTS_ALC_A_EXEC
+extern ErtsMemMapper erts_exec_mmapper;
+# endif
+#endif /* ERTS_WANT_MEM_MAPPERS */
/*#define HARD_DEBUG_MSEG*/
#ifdef HARD_DEBUG_MSEG
@@ -140,4 +166,6 @@ void hard_dbg_remove_mseg(void* seg, UWord sz);
# define HARD_DBG_REMOVE_MSEG(SEG,SZ)
#endif
+#endif /* HAVE_ERTS_MMAP */
+
#endif /* ERL_MMAP_H__ */
diff --git a/erts/emulator/sys/common/erl_mseg.c b/erts/emulator/sys/common/erl_mseg.c
index 20695899eb..f3306a888c 100644
--- a/erts/emulator/sys/common/erl_mseg.c
+++ b/erts/emulator/sys/common/erl_mseg.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.
@@ -31,6 +31,7 @@
# include "config.h"
#endif
+#define ERTS_WANT_MEM_MAPPERS
#include "sys.h"
#include "erl_mseg.h"
#include "global.h"
@@ -995,10 +996,7 @@ info_options(ErtsMsegAllctr_t *ma,
Uint **hpp,
Uint *szp)
{
- Eterm res;
-
- res = erts_mmap_info_options(&erts_dflt_mmapper,
- prefix, print_to_p, print_to_arg, hpp, szp);
+ Eterm res = NIL;
if (print_to_p) {
int to = *print_to_p;
@@ -1109,7 +1107,7 @@ info_calls(ErtsMsegAllctr_t *ma, int *print_to_p, void *print_to_arg, Uint **hpp
static Eterm
info_status(ErtsMsegAllctr_t *ma, int *print_to_p, void *print_to_arg,
- int begin_new_max_period, Uint **hpp, Uint *szp)
+ int begin_new_max_period, int only_sz, Uint **hpp, Uint *szp)
{
Eterm res = THE_NON_VALUE;
@@ -1122,38 +1120,41 @@ info_status(ErtsMsegAllctr_t *ma, int *print_to_p, void *print_to_arg,
int to = *print_to_p;
void *arg = print_to_arg;
- erts_print(to, arg, "cached_segments: %beu\n", ma->cache_size);
- erts_print(to, arg, "cache_hits: %beu\n", ma->cache_hits);
- erts_print(to, arg, "segments: %beu %beu %beu\n",
- ma->segments.current.no, ma->segments.max.no, ma->segments.max_ever.no);
- erts_print(to, arg, "segments_size: %beu %beu %beu\n",
+ if (!only_sz) {
+ erts_print(to, arg, "cached_segments: %beu\n", ma->cache_size);
+ erts_print(to, arg, "cache_hits: %beu\n", ma->cache_hits);
+ erts_print(to, arg, "segments: %beu %beu %beu\n",
+ ma->segments.current.no, ma->segments.max.no, ma->segments.max_ever.no);
+ erts_print(to, arg, "segments_watermark: %beu\n",
+ ma->segments.current.watermark);
+ }
+ erts_print(to, arg, "segments_size: %beu %beu %beu\n",
ma->segments.current.sz, ma->segments.max.sz, ma->segments.max_ever.sz);
- erts_print(to, arg, "segments_watermark: %beu\n",
- ma->segments.current.watermark);
}
if (hpp || szp) {
res = NIL;
- add_2tup(hpp, szp, &res,
- am.segments_watermark,
- bld_unstable_uint(hpp, szp, ma->segments.current.watermark));
- add_4tup(hpp, szp, &res,
- am.segments_size,
- bld_unstable_uint(hpp, szp, ma->segments.current.sz),
- bld_unstable_uint(hpp, szp, ma->segments.max.sz),
- bld_unstable_uint(hpp, szp, ma->segments.max_ever.sz));
- add_4tup(hpp, szp, &res,
- am.segments,
- bld_unstable_uint(hpp, szp, ma->segments.current.no),
- bld_unstable_uint(hpp, szp, ma->segments.max.no),
- bld_unstable_uint(hpp, szp, ma->segments.max_ever.no));
- add_2tup(hpp, szp, &res,
- am.cache_hits,
- bld_unstable_uint(hpp, szp, ma->cache_hits));
- add_2tup(hpp, szp, &res,
- am.cached_segments,
- bld_unstable_uint(hpp, szp, ma->cache_size));
-
+ add_4tup(hpp, szp, &res,
+ am.segments_size,
+ bld_unstable_uint(hpp, szp, ma->segments.current.sz),
+ bld_unstable_uint(hpp, szp, ma->segments.max.sz),
+ bld_unstable_uint(hpp, szp, ma->segments.max_ever.sz));
+ if (!only_sz) {
+ add_2tup(hpp, szp, &res,
+ am.segments_watermark,
+ bld_unstable_uint(hpp, szp, ma->segments.current.watermark));
+ add_4tup(hpp, szp, &res,
+ am.segments,
+ bld_unstable_uint(hpp, szp, ma->segments.current.no),
+ bld_unstable_uint(hpp, szp, ma->segments.max.no),
+ bld_unstable_uint(hpp, szp, ma->segments.max_ever.no));
+ add_2tup(hpp, szp, &res,
+ am.cache_hits,
+ bld_unstable_uint(hpp, szp, ma->cache_hits));
+ add_2tup(hpp, szp, &res,
+ am.cached_segments,
+ bld_unstable_uint(hpp, szp, ma->cache_size));
+ }
}
if (begin_new_max_period) {
@@ -1165,26 +1166,31 @@ info_status(ErtsMsegAllctr_t *ma, int *print_to_p, void *print_to_arg,
}
static Eterm info_memkind(ErtsMsegAllctr_t *ma, int *print_to_p, void *print_to_arg,
- int begin_max_per, Uint **hpp, Uint *szp)
+ int begin_max_per, int only_sz, Uint **hpp, Uint *szp)
{
Eterm res = THE_NON_VALUE;
Eterm atoms[3];
Eterm values[3];
- if (print_to_p) {
- erts_print(*print_to_p, print_to_arg, "memory kind: %s\n", "all memory");
+ if (!only_sz) {
+ if (print_to_p) {
+ erts_print(*print_to_p, print_to_arg, "memory kind: %s\n", "all memory");
+ }
+ if (hpp || szp) {
+ atoms[0] = am.name;
+ atoms[1] = am.status;
+ atoms[2] = am.calls;
+ values[0] = erts_bld_string(hpp, szp, "all memory");
+ }
}
- if (hpp || szp) {
- atoms[0] = am.name;
- atoms[1] = am.status;
- atoms[2] = am.calls;
- values[0] = erts_bld_string(hpp, szp, "all memory");
- }
- values[1] = info_status(ma, print_to_p, print_to_arg, begin_max_per, hpp, szp);
- values[2] = info_calls(ma, print_to_p, print_to_arg, hpp, szp);
+ res = info_status(ma, print_to_p, print_to_arg, begin_max_per, only_sz, hpp, szp);
+ if (!only_sz) {
+ values[1] = res;
+ values[2] = info_calls(ma, print_to_p, print_to_arg, hpp, szp);
- if (hpp || szp)
- res = bld_2tup_list(hpp, szp, 3, atoms, values);
+ if (hpp || szp)
+ res = bld_2tup_list(hpp, szp, 3, atoms, values);
+ }
return res;
}
@@ -1228,6 +1234,7 @@ erts_mseg_info(int ix,
int *print_to_p,
void *print_to_arg,
int begin_max_per,
+ int only_sz,
Uint **hpp,
Uint *szp)
{
@@ -1238,24 +1245,29 @@ erts_mseg_info(int ix,
Uint n = 0;
if (hpp || szp) {
-
- if (!atoms_initialized)
- init_atoms(ma);
-
- atoms[0] = am.version;
- atoms[1] = am.options;
- atoms[2] = am.memkind;
- atoms[3] = am.memkind;
+ if (!atoms_initialized)
+ init_atoms(ma);
+ }
+ if (!only_sz) {
+ if (hpp || szp) {
+ atoms[0] = am.version;
+ atoms[1] = am.options;
+ atoms[2] = am.memkind;
+ }
+ values[n++] = info_version(ma, print_to_p, print_to_arg, hpp, szp);
+ values[n++] = info_options(ma, "option ", print_to_p, print_to_arg, hpp, szp);
}
- values[n++] = info_version(ma, print_to_p, print_to_arg, hpp, szp);
- values[n++] = info_options(ma, "option ", print_to_p, print_to_arg, hpp, szp);
ERTS_MSEG_LOCK(ma);
ERTS_DBG_MA_CHK_THR_ACCESS(ma);
- values[n++] = info_memkind(ma, print_to_p, print_to_arg, begin_max_per, hpp, szp);
- if (hpp || szp)
- res = bld_2tup_list(hpp, szp, n, atoms, values);
+ res = info_memkind(ma, print_to_p, print_to_arg, begin_max_per, only_sz, hpp, szp);
+
+ if (!only_sz) {
+ values[n++] = res;
+ if (hpp || szp)
+ res = bld_2tup_list(hpp, szp, n, atoms, values);
+ }
ERTS_MSEG_UNLOCK(ma);
@@ -1402,10 +1414,19 @@ erts_mseg_init(ErtsMsegInit_t *init)
erts_mtx_init(&init_atoms_mutex, "mseg_init_atoms");
- erts_mmap_init(&erts_dflt_mmapper, &init->dflt_mmap);
+#ifdef ERTS_ALC_A_EXEC
+ /* Initialize erts_exec_mapper *FIRST*, to increase probability
+ * of getting low memory for HiPE AMD64's small code model.
+ */
+ erts_mmap_init(&erts_exec_mmapper, &init->exec_mmap, 1);
+#endif
+ erts_mmap_init(&erts_dflt_mmapper, &init->dflt_mmap, 0);
+#if defined(ARCH_64) && defined(ERTS_HAVE_OS_PHYSICAL_MEMORY_RESERVATION)
+ erts_mmap_init(&erts_literal_mmapper, &init->literal_mmap, 0);
+#endif
if (!IS_2POW(GET_PAGE_SIZE))
- erl_exit(ERTS_ABORT_EXIT, "erts_mseg: Unexpected page_size %beu\n", GET_PAGE_SIZE);
+ erts_exit(ERTS_ABORT_EXIT, "erts_mseg: Unexpected page_size %beu\n", GET_PAGE_SIZE);
ASSERT((MSEG_ALIGNED_SIZE % GET_PAGE_SIZE) == 0);
diff --git a/erts/emulator/sys/common/erl_mseg.h b/erts/emulator/sys/common/erl_mseg.h
index 2acd8f8505..a43b409e94 100644
--- a/erts/emulator/sys/common/erl_mseg.h
+++ b/erts/emulator/sys/common/erl_mseg.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.
@@ -61,6 +61,7 @@ typedef struct {
Uint nos;
ErtsMMapInit dflt_mmap;
ErtsMMapInit literal_mmap;
+ ErtsMMapInit exec_mmap;
} ErtsMsegInit_t;
#define ERTS_MSEG_INIT_DEFAULT_INITIALIZER \
@@ -70,7 +71,8 @@ typedef struct {
10, /* mcs: Max cache size */ \
1000, /* cci: Cache check interval */ \
ERTS_MMAP_INIT_DEFAULT_INITER, \
- ERTS_MMAP_INIT_LITERAL_INITER \
+ ERTS_MMAP_INIT_LITERAL_INITER, \
+ ERTS_MMAP_INIT_HIPE_EXEC_INITER \
}
typedef struct {
@@ -97,7 +99,7 @@ void erts_mseg_init(ErtsMsegInit_t *init);
void erts_mseg_late_init(void); /* Have to be called after all allocators,
threads and timers have been initialized. */
Eterm erts_mseg_info_options(int, int *, void*, Uint **, Uint *);
-Eterm erts_mseg_info(int, int *, void*, int, Uint **, Uint *);
+Eterm erts_mseg_info(int, int *, void*, int, int, Uint **, Uint *);
#endif /* #if HAVE_ERTS_MSEG */
diff --git a/erts/emulator/sys/common/erl_mtrace_sys_wrap.c b/erts/emulator/sys/common/erl_mtrace_sys_wrap.c
index a8c575835a..fc871f94f1 100644
--- a/erts/emulator/sys/common/erl_mtrace_sys_wrap.c
+++ b/erts/emulator/sys/common/erl_mtrace_sys_wrap.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/erts/emulator/sys/common/erl_os_monotonic_time_extender.c b/erts/emulator/sys/common/erl_os_monotonic_time_extender.c
index b79485241f..d53190fdd5 100644
--- a/erts/emulator/sys/common/erl_os_monotonic_time_extender.c
+++ b/erts/emulator/sys/common/erl_os_monotonic_time_extender.c
@@ -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.
@@ -44,7 +44,7 @@ static void *os_monotonic_time_extender(void *vstatep)
erts_milli_sleep(sleep_time);
}
- erl_exit(ERTS_ABORT_EXIT, "os_monotonic_time_extender thread terminating");
+ erts_exit(ERTS_ABORT_EXIT, "os_monotonic_time_extender thread terminating");
return NULL;
}
diff --git a/erts/emulator/sys/common/erl_poll.c b/erts/emulator/sys/common/erl_poll.c
index 36ee94111c..e394d84f73 100644
--- a/erts/emulator/sys/common/erl_poll.c
+++ b/erts/emulator/sys/common/erl_poll.c
@@ -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/erts/emulator/sys/common/erl_poll.h b/erts/emulator/sys/common/erl_poll.h
index bc2c681876..c16122610d 100644
--- a/erts/emulator/sys/common/erl_poll.h
+++ b/erts/emulator/sys/common/erl_poll.h
@@ -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/erts/emulator/sys/common/erl_sys_common_misc.c b/erts/emulator/sys/common/erl_sys_common_misc.c
index e292741bfa..79f87eb3a9 100644
--- a/erts/emulator/sys/common/erl_sys_common_misc.c
+++ b/erts/emulator/sys/common/erl_sys_common_misc.c
@@ -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/erts/emulator/sys/common/erl_util_queue.h b/erts/emulator/sys/common/erl_util_queue.h
index b50e062dd5..73293e0225 100644
--- a/erts/emulator/sys/common/erl_util_queue.h
+++ b/erts/emulator/sys/common/erl_util_queue.h
@@ -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/erts/emulator/sys/unix/driver_int.h b/erts/emulator/sys/unix/driver_int.h
index a6b9085245..840b832878 100644
--- a/erts/emulator/sys/unix/driver_int.h
+++ b/erts/emulator/sys/unix/driver_int.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/erts/emulator/sys/unix/erl_child_setup.c b/erts/emulator/sys/unix/erl_child_setup.c
index 4e61530cf1..6beb316350 100644
--- a/erts/emulator/sys/unix/erl_child_setup.c
+++ b/erts/emulator/sys/unix/erl_child_setup.c
@@ -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.
@@ -61,6 +61,7 @@
#include "erl_driver.h"
#include "sys_uds.h"
#include "hash.h"
+#include "erl_term.h"
#include "erl_child_setup.h"
#define SET_CLOEXEC(fd) fcntl(fd, F_SETFD, fcntl(fd, F_GETFD) | FD_CLOEXEC)
diff --git a/erts/emulator/sys/unix/erl_main.c b/erts/emulator/sys/unix/erl_main.c
index c417bea622..972b93a505 100644
--- a/erts/emulator/sys/unix/erl_main.c
+++ b/erts/emulator/sys/unix/erl_main.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/erts/emulator/sys/unix/erl_unix_sys.h b/erts/emulator/sys/unix/erl_unix_sys.h
index 8b1822ca9f..241540b894 100644
--- a/erts/emulator/sys/unix/erl_unix_sys.h
+++ b/erts/emulator/sys/unix/erl_unix_sys.h
@@ -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.
@@ -321,6 +321,7 @@ typedef void (*SIGFUNC)(int);
extern SIGFUNC sys_signal(int, SIGFUNC);
extern void sys_sigrelease(int);
extern void sys_sigblock(int);
+extern void sys_init_suspend_handler(void);
/*
* Handling of floating point exceptions.
diff --git a/erts/emulator/sys/unix/erl_unix_sys_ddll.c b/erts/emulator/sys/unix/erl_unix_sys_ddll.c
index daed5af1b6..8f1ceac883 100644
--- a/erts/emulator/sys/unix/erl_unix_sys_ddll.c
+++ b/erts/emulator/sys/unix/erl_unix_sys_ddll.c
@@ -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/erts/emulator/sys/unix/sys.c b/erts/emulator/sys/unix/sys.c
index 2ad5f3b4d5..6fb86f6dda 100644
--- a/erts/emulator/sys/unix/sys.c
+++ b/erts/emulator/sys/unix/sys.c
@@ -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.
@@ -121,8 +121,10 @@ erts_smp_atomic_t sys_misc_mem_sz;
static void smp_sig_notify(char c);
static int sig_notify_fds[2] = {-1, -1};
+#if !defined(ETHR_UNUSABLE_SIGUSRX) && defined(ERTS_THR_HAVE_SIG_FUNCS)
static int sig_suspend_fds[2] = {-1, -1};
#define ERTS_SYS_SUSPEND_SIGNAL SIGUSR2
+#endif
#endif
@@ -631,7 +633,7 @@ break_requested(void)
fprintf(stderr,"break!\n");
#endif
if (ERTS_BREAK_REQUESTED)
- erl_exit(ERTS_INTR_EXIT, "");
+ erts_exit(ERTS_INTR_EXIT, "");
ERTS_SET_BREAK_REQUESTED;
ERTS_CHK_IO_AS_INTR(); /* Make sure we don't sleep in poll */
@@ -670,7 +672,7 @@ sigusr1_exit(void)
}
prepare_crash_dump(secs);
- erl_exit(1, "Received SIGUSR1\n");
+ erts_exit(ERTS_ERROR_EXIT, "Received SIGUSR1\n");
}
#ifdef ETHR_UNUSABLE_SIGUSRX
@@ -678,7 +680,7 @@ sigusr1_exit(void)
#else
-#ifdef ERTS_SMP
+#ifdef ERTS_SYS_SUSPEND_SIGNAL
void
sys_thr_suspend(erts_tid_t tid) {
erts_thr_kill(tid, ERTS_SYS_SUSPEND_SIGNAL);
@@ -706,7 +708,7 @@ static RETSIGTYPE user_signal1(int signum)
#endif
}
-#ifdef ERTS_SMP
+#ifdef ERTS_SYS_SUSPEND_SIGNAL
#if (defined(SIG_SIGSET) || defined(SIG_SIGNAL))
static RETSIGTYPE suspend_signal(void)
#else
@@ -719,14 +721,14 @@ static RETSIGTYPE suspend_signal(int signum)
res = read(sig_suspend_fds[0], buf, sizeof(int));
} while (res < 0 && errno == EINTR);
}
-#endif /* #ifdef ERTS_SMP */
+#endif /* #ifdef ERTS_SYS_SUSPEND_SIGNAL */
#endif /* #ifndef ETHR_UNUSABLE_SIGUSRX */
static void
quit_requested(void)
{
- erl_exit(ERTS_INTR_EXIT, "");
+ erts_exit(ERTS_INTR_EXIT, "");
}
#if (defined(SIG_SIGSET) || defined(SIG_SIGNAL))
@@ -772,13 +774,17 @@ void init_break_handler(void)
sys_signal(SIGINT, request_break);
#ifndef ETHR_UNUSABLE_SIGUSRX
sys_signal(SIGUSR1, user_signal1);
-#ifdef ERTS_SMP
- sys_signal(ERTS_SYS_SUSPEND_SIGNAL, suspend_signal);
-#endif /* #ifdef ERTS_SMP */
#endif /* #ifndef ETHR_UNUSABLE_SIGUSRX */
sys_signal(SIGQUIT, do_quit);
}
+void sys_init_suspend_handler(void)
+{
+#ifdef ERTS_SYS_SUSPEND_SIGNAL
+ sys_signal(ERTS_SYS_SUSPEND_SIGNAL, suspend_signal);
+#endif
+}
+
int sys_max_files(void)
{
return(max_files);
@@ -1252,7 +1258,7 @@ signal_dispatcher_thread_func(void *unused)
if (res < 0) {
if (errno == EINTR)
continue;
- erl_exit(ERTS_ABORT_EXIT,
+ erts_exit(ERTS_ABORT_EXIT,
"signal-dispatcher thread got unexpected error: %s (%d)\n",
erl_errno_id(errno),
errno);
@@ -1289,7 +1295,7 @@ signal_dispatcher_thread_func(void *unused)
sigusr1_exit();
break;
default:
- erl_exit(ERTS_ABORT_EXIT,
+ erts_exit(ERTS_ABORT_EXIT,
"signal-dispatcher thread received unknown "
"signal notification: '%c'\n",
buf[i]);
@@ -1308,7 +1314,7 @@ init_smp_sig_notify(void)
thr_opts.name = "sys_sig_dispatcher";
if (pipe(sig_notify_fds) < 0) {
- erl_exit(ERTS_ABORT_EXIT,
+ erts_exit(ERTS_ABORT_EXIT,
"Failed to create signal-dispatcher pipe: %s (%d)\n",
erl_errno_id(errno),
errno);
@@ -1323,12 +1329,14 @@ init_smp_sig_notify(void)
static void
init_smp_sig_suspend(void) {
+#ifdef ERTS_SYS_SUSPEND_SIGNAL
if (pipe(sig_suspend_fds) < 0) {
- erl_exit(ERTS_ABORT_EXIT,
+ erts_exit(ERTS_ABORT_EXIT,
"Failed to create sig_suspend pipe: %s (%d)\n",
erl_errno_id(errno),
errno);
}
+#endif
}
#ifdef __DARWIN__
@@ -1340,7 +1348,7 @@ static void initialize_darwin_main_thread_pipes(void)
{
if (pipe(erts_darwin_main_thread_pipe) < 0 ||
pipe(erts_darwin_main_thread_result_pipe) < 0) {
- erl_exit(1,"Fatal error initializing Darwin main thread stealing");
+ erts_exit(ERTS_ERROR_EXIT,"Fatal error initializing Darwin main thread stealing");
}
}
diff --git a/erts/emulator/sys/unix/sys_drivers.c b/erts/emulator/sys/unix/sys_drivers.c
index 2a7cd91265..ac39b8a389 100644
--- a/erts/emulator/sys/unix/sys_drivers.c
+++ b/erts/emulator/sys/unix/sys_drivers.c
@@ -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.
@@ -1665,14 +1665,14 @@ static ErlDrvData forker_start(ErlDrvPort port_num, char* name,
res = erts_sys_getenv_raw("BINDIR", bindir, &bindirsz);
if (res != 0) {
if (res < 0)
- erl_exit(-1,
+ erts_exit(1,
"Environment variable BINDIR is not set\n");
if (res > 0)
- erl_exit(-1,
+ erts_exit(1,
"Value of environment variable BINDIR is too large\n");
}
if (bindir[0] != DIR_SEPARATOR_CHAR)
- erl_exit(-1,
+ erts_exit(1,
"Environment variable BINDIR does not contain an"
" absolute path\n");
csp_path_sz = (strlen(bindir)
@@ -1686,7 +1686,7 @@ static ErlDrvData forker_start(ErlDrvPort port_num, char* name,
DIR_SEPARATOR_CHAR,
CHILD_SETUP_PROG_NAME);
if (socketpair(AF_UNIX, SOCK_STREAM, 0, fds) < 0) {
- erl_exit(ERTS_ABORT_EXIT,
+ erts_exit(ERTS_ABORT_EXIT,
"Could not open unix domain socket in spawn_init: %d\n",
errno);
}
@@ -1754,11 +1754,11 @@ static void forker_ready_input(ErlDrvData e, ErlDrvEvent fd)
if ((res = read(fd, proto, sizeof(*proto))) < 0) {
if (errno == ERRNO_BLOCK)
return;
- erl_exit(ERTS_DUMP_EXIT, "Failed to read from erl_child_setup: %d\n", errno);
+ erts_exit(ERTS_DUMP_EXIT, "Failed to read from erl_child_setup: %d\n", errno);
}
if (res == 0)
- erl_exit(ERTS_DUMP_EXIT, "erl_child_setup closed\n");
+ erts_exit(ERTS_DUMP_EXIT, "erl_child_setup closed\n");
ASSERT(res == sizeof(*proto));
@@ -1814,7 +1814,7 @@ static void forker_ready_output(ErlDrvData e, ErlDrvEvent fd)
proto->u.start.fds, 3, 0) < 0) {
if (errno == ERRNO_BLOCK)
return;
- erl_exit(ERTS_DUMP_EXIT, "Failed to write to erl_child_setup: %d\n", errno);
+ erts_exit(ERTS_DUMP_EXIT, "Failed to write to erl_child_setup: %d\n", errno);
}
#ifndef FORKER_PROTO_START_ACK
close(proto->u.start.fds[0]);
@@ -1846,7 +1846,7 @@ static ErlDrvSSizeT forker_control(ErlDrvData e, unsigned int cmd, char *buf,
driver_select(port_num, forker_fd, ERL_DRV_WRITE|ERL_DRV_USE, 1);
return 0;
}
- erl_exit(ERTS_DUMP_EXIT, "Failed to write to erl_child_setup: %d\n", errno);
+ erts_exit(ERTS_DUMP_EXIT, "Failed to write to erl_child_setup: %d\n", errno);
}
#ifndef FORKER_PROTO_START_ACK
diff --git a/erts/emulator/sys/unix/sys_float.c b/erts/emulator/sys/unix/sys_float.c
index 1ef9e5eef7..6435da086f 100644
--- a/erts/emulator/sys/unix/sys_float.c
+++ b/erts/emulator/sys/unix/sys_float.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.
@@ -53,7 +53,7 @@ static void erts_init_fp_exception(void)
void erts_thread_init_fp_exception(void)
{
unsigned long *fpe = erts_alloc(ERTS_ALC_T_FP_EXCEPTION, sizeof(*fpe));
- *fpe = 0L;
+ *fpe = 0;
erts_tsd_set(fpe_key, fpe);
}
@@ -90,7 +90,7 @@ void erts_fp_check_init_error(volatile unsigned long *fpexnp)
snprintf(buf, sizeof buf, "ERTS_FP_CHECK_INIT at %p: detected unhandled FPE at %p\r\n",
__builtin_return_address(0), (void*)*fpexnp);
if (write(2, buf, strlen(buf)) <= 0)
- erl_exit(ERTS_ABORT_EXIT, "%s", buf);
+ erts_exit(ERTS_ABORT_EXIT, "%s", buf);
*fpexnp = 0;
#if defined(__i386__) || defined(__x86_64__)
erts_restore_fpu();
@@ -102,6 +102,17 @@ void erts_fp_check_init_error(volatile unsigned long *fpexnp)
#define __DARWIN__ 1
#endif
+/*
+ * Define two processor and possibly OS-specific primitives:
+ *
+ * static void unmask_fpe(void);
+ * -- unmask invalid, overflow, and divide-by-zero exceptions
+ *
+ * static int mask_fpe(void);
+ * -- mask invalid, overflow, and divide-by-zero exceptions
+ * -- return non-zero if the previous state was unmasked
+ */
+
#if (defined(__i386__) || defined(__x86_64__)) && defined(__GNUC__)
static void unmask_x87(void)
@@ -113,7 +124,6 @@ static void unmask_x87(void)
__asm__ __volatile__("fldcw %0" : : "m"(cw));
}
-/* mask x87 FPE, return true if the previous state was unmasked */
static int mask_x87(void)
{
unsigned short cw;
@@ -136,7 +146,6 @@ static void unmask_sse2(void)
__asm__ __volatile__("ldmxcsr %0" : : "m"(mxcsr));
}
-/* mask SSE2 FPE, return true if the previous state was unmasked */
static int mask_sse2(void)
{
unsigned int mxcsr;
@@ -257,21 +266,19 @@ static int cpu_has_sse2(void)
}
#endif /* !__x86_64__ */
-static void unmask_fpe(void)
+static void unmask_fpe_internal(void)
{
- __asm__ __volatile__("fnclex");
unmask_x87();
if (cpu_has_sse2())
unmask_sse2();
}
-static void unmask_fpe_conditional(int unmasked)
+static void unmask_fpe(void)
{
- if (unmasked)
- unmask_fpe();
+ __asm__ __volatile__("fnclex");
+ unmask_fpe_internal();
}
-/* mask x86 FPE, return true if the previous state was unmasked */
static int mask_fpe(void)
{
int unmasked;
@@ -285,9 +292,7 @@ static int mask_fpe(void)
void erts_restore_fpu(void)
{
__asm__ __volatile__("fninit");
- unmask_x87();
- if (cpu_has_sse2())
- unmask_sse2();
+ unmask_fpe_internal();
}
#elif defined(__sparc__) && defined(__linux__)
@@ -310,13 +315,6 @@ static void unmask_fpe(void)
__asm__ __volatile__(LDX " %0, %%fsr" : : "m"(fsr));
}
-static void unmask_fpe_conditional(int unmasked)
-{
- if (unmasked)
- unmask_fpe();
-}
-
-/* mask SPARC FPE, return true if the previous state was unmasked */
static int mask_fpe(void)
{
unsigned long fsr;
@@ -431,13 +429,6 @@ static void unmask_fpe(void)
set_fpscr(0x80|0x40|0x10); /* VE, OE, ZE; not UE or XE */
}
-static void unmask_fpe_conditional(int unmasked)
-{
- if (unmasked)
- unmask_fpe();
-}
-
-/* mask PowerPC FPE, return true if the previous state was unmasked */
static int mask_fpe(void)
{
int unmasked;
@@ -447,20 +438,13 @@ static int mask_fpe(void)
return unmasked;
}
-#else
+#else /* !(x86 || (sparc && linux) || (powerpc && (linux || darwin))) */
static void unmask_fpe(void)
{
fpsetmask(FP_X_INV | FP_X_OFL | FP_X_DZ);
}
-static void unmask_fpe_conditional(int unmasked)
-{
- if (unmasked)
- unmask_fpe();
-}
-
-/* mask IEEE FPE, return true if previous state was unmasked */
static int mask_fpe(void)
{
const fp_except unmasked_mask = FP_X_INV | FP_X_OFL | FP_X_DZ;
@@ -472,6 +456,16 @@ static int mask_fpe(void)
#endif
+/*
+ * Define a processor and OS-specific SIGFPE handler.
+ *
+ * The effect of receiving a SIGFPE should be:
+ * 1. Update the processor context:
+ * a) on x86: mask FP exceptions, do not skip faulting instruction
+ * b) on SPARC and PowerPC: unmask FP exceptions, skip faulting instruction
+ * 2. call set_current_fp_exception with the PC of the faulting instruction
+ */
+
#if (defined(__linux__) && (defined(__i386__) || defined(__x86_64__) || defined(__sparc__) || defined(__powerpc__))) || (defined(__DARWIN__) && (defined(__i386__) || defined(__x86_64__) || defined(__ppc__))) || (defined(__FreeBSD__) && (defined(__x86_64__) || defined(__i386__))) || ((defined(__NetBSD__) || defined(__OpenBSD__)) && defined(__x86_64__)) || (defined(__sun__) && defined(__x86_64__))
#if defined(__linux__) && defined(__i386__)
@@ -499,18 +493,8 @@ static int mask_fpe(void)
#define mc_pc(mc) ((mc)->gregs[REG_RIP])
#elif defined(__linux__) && defined(__i386__)
#define mc_pc(mc) ((mc)->gregs[REG_EIP])
-#elif defined(__DARWIN__) && defined(__i386__)
-#ifdef DARWIN_MODERN_MCONTEXT
-#define mc_pc(mc) ((mc)->__ss.__eip)
-#else
-#define mc_pc(mc) ((mc)->ss.eip)
-#endif
-#elif defined(__DARWIN__) && defined(__x86_64__)
-#ifdef DARWIN_MODERN_MCONTEXT
-#define mc_pc(mc) ((mc)->__ss.__rip)
-#else
-#define mc_pc(mc) ((mc)->ss.rip)
-#endif
+#elif defined(__DARWIN__)
+# error "Floating-point exceptions not supported on MacOS X"
#elif defined(__FreeBSD__) && defined(__x86_64__)
#define mc_pc(mc) ((mc)->mc_rip)
#elif defined(__FreeBSD__) && defined(__i386__)
@@ -530,8 +514,7 @@ static void fpe_sig_action(int sig, siginfo_t *si, void *puc)
ucontext_t *uc = puc;
unsigned long pc;
-#if defined(__linux__)
-#if defined(__x86_64__)
+#if defined(__linux__) && defined(__x86_64__)
mcontext_t *mc = &uc->uc_mcontext;
fpregset_t fpstate = mc->fpregs;
pc = mc_pc(mc);
@@ -543,26 +526,26 @@ static void fpe_sig_action(int sig, siginfo_t *si, void *puc)
set encoding makes that a poor solution here. */
fpstate->mxcsr = 0x1F80;
fpstate->swd &= ~0xFF;
-#elif defined(__i386__)
+#elif defined(__linux__) && defined(__i386__)
mcontext_t *mc = &uc->uc_mcontext;
fpregset_t fpstate = mc->fpregs;
pc = mc_pc(mc);
if ((fpstate->status >> 16) == X86_FXSR_MAGIC)
((struct _fpstate*)fpstate)->mxcsr = 0x1F80;
fpstate->sw &= ~0xFF;
-#elif defined(__sparc__) && defined(__arch64__)
+#elif defined(__linux__) && defined(__sparc__) && defined(__arch64__)
/* on SPARC the 3rd parameter points to a sigcontext not a ucontext */
struct sigcontext *sc = (struct sigcontext*)puc;
pc = sc->sigc_regs.tpc;
sc->sigc_regs.tpc = sc->sigc_regs.tnpc;
sc->sigc_regs.tnpc += 4;
-#elif defined(__sparc__)
+#elif defined(__linux__) && defined(__sparc__)
/* on SPARC the 3rd parameter points to a sigcontext not a ucontext */
struct sigcontext *sc = (struct sigcontext*)puc;
pc = sc->si_regs.pc;
sc->si_regs.pc = sc->si_regs.npc;
sc->si_regs.npc = (unsigned long)sc->si_regs.npc + 4;
-#elif defined(__powerpc__)
+#elif defined(__linux__) && defined(__powerpc__)
#if defined(__powerpc64__)
mcontext_t *mc = &uc->uc_mcontext;
unsigned long *regs = &mc->gp_regs[0];
@@ -573,19 +556,8 @@ static void fpe_sig_action(int sig, siginfo_t *si, void *puc)
pc = regs[PT_NIP];
regs[PT_NIP] += 4;
regs[PT_FPSCR] = 0x80|0x40|0x10; /* VE, OE, ZE; not UE or XE */
-#endif
#elif defined(__DARWIN__) && (defined(__i386__) || defined(__x86_64__))
-#ifdef DARWIN_MODERN_MCONTEXT
- mcontext_t mc = uc->uc_mcontext;
- pc = mc_pc(mc);
- mc->__fs.__fpu_mxcsr = 0x1F80;
- *(unsigned short *)&mc->__fs.__fpu_fsw &= ~0xFF;
-#else
- mcontext_t mc = uc->uc_mcontext;
- pc = mc_pc(mc);
- mc->fs.fpu_mxcsr = 0x1F80;
- *(unsigned short *)&mc->fs.fpu_fsw &= ~0xFF;
-#endif /* DARWIN_MODERN_MCONTEXT */
+# error "Floating-point exceptions not supported on MacOS X"
#elif defined(__DARWIN__) && defined(__ppc__)
mcontext_t mc = uc->uc_mcontext;
pc = mc->ss.srr0;
@@ -641,7 +613,7 @@ static void fpe_sig_action(int sig, siginfo_t *si, void *puc)
#endif
#if 0
{
- char buf[64];
+ char buf[128];
snprintf(buf, sizeof buf, "%s: FPE at %p\r\n", __FUNCTION__, (void*)pc);
write(2, buf, strlen(buf));
}
@@ -726,7 +698,8 @@ int erts_sys_block_fpe(void)
void erts_sys_unblock_fpe(int unmasked)
{
- unmask_fpe_conditional(unmasked);
+ if (unmasked)
+ unmask_fpe();
}
#endif
@@ -838,11 +811,6 @@ sys_chars_to_double(char* buf, double* fp)
int
matherr(struct exception *exc)
{
-#if !defined(NO_FPE_SIGNALS)
- volatile unsigned long *fpexnp = erts_get_current_fp_exception();
- if (fpexnp != NULL)
- *fpexnp = (unsigned long)__builtin_return_address(0);
-#endif
return 1;
}
diff --git a/erts/emulator/sys/unix/sys_time.c b/erts/emulator/sys/unix/sys_time.c
index 03d39c7ce6..60f8decd96 100644
--- a/erts/emulator/sys/unix/sys_time.c
+++ b/erts/emulator/sys/unix/sys_time.c
@@ -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.
@@ -344,7 +344,7 @@ sys_init_time(ErtsSysInitTimeResult *init_resp)
* times() (CLK_TCK), the resolution is always one millisecond..
*/
if ((erts_sys_time_data__.r.o.ticks_per_sec = TICKS_PER_SEC()) < 0)
- erl_exit(ERTS_ABORT_EXIT, "Can't get clock ticks/sec\n");
+ erts_exit(ERTS_ABORT_EXIT, "Can't get clock ticks/sec\n");
#if defined(OS_MONOTONIC_TIME_USING_TIMES)
#if ERTS_COMPILE_TIME_MONOTONIC_TIME_UNIT
@@ -454,7 +454,7 @@ posix_clock_gettime(clockid_t id, char *name)
if (clock_gettime(id, &ts) != 0) {
int err = errno;
char *errstr = err ? strerror(err) : "unknown";
- erl_exit(ERTS_ABORT_EXIT,
+ erts_exit(ERTS_ABORT_EXIT,
"clock_gettime(%s, _) failed: %s (%d)\n",
name, errstr, err);
}
@@ -499,13 +499,13 @@ posix_clock_gettime_times(clockid_t mid, char *mname,
if (mres != 0) {
char *errstr = merr ? strerror(merr) : "unknown";
- erl_exit(ERTS_ABORT_EXIT,
+ erts_exit(ERTS_ABORT_EXIT,
"clock_gettime(%s, _) failed: %s (%d)\n",
mname, errstr, merr);
}
if (sres != 0) {
char *errstr = serr ? strerror(serr) : "unknown";
- erl_exit(ERTS_ABORT_EXIT,
+ erts_exit(ERTS_ABORT_EXIT,
"clock_gettime(%s, _) failed: %s (%d)\n",
sname, errstr, serr);
}
@@ -678,7 +678,7 @@ mach_clocks_init(void)
clck_srv_p = &internal_state.r.o.mach.clock.monotonic.srv;
kret = host_get_clock_service(host, id, clck_srv_p);
if (kret != KERN_SUCCESS) {
- erl_exit(ERTS_ABORT_EXIT,
+ erts_exit(ERTS_ABORT_EXIT,
"host_get_clock_service(_, %s, _) failed\n",
name);
}
@@ -690,7 +690,7 @@ mach_clocks_init(void)
clck_srv_p = &internal_state.r.o.mach.clock.wall.srv;
kret = host_get_clock_service(host, id, clck_srv_p);
if (kret != KERN_SUCCESS) {
- erl_exit(ERTS_ABORT_EXIT,
+ erts_exit(ERTS_ABORT_EXIT,
"host_get_clock_service(_, %s, _) failed\n",
name);
}
@@ -699,7 +699,7 @@ mach_clocks_init(void)
if (atexit(mach_clocks_fini) != 0) {
int err = errno;
char *errstr = err ? strerror(err) : "unknown";
- erl_exit(ERTS_ABORT_EXIT,
+ erts_exit(ERTS_ABORT_EXIT,
"Failed to register mach_clocks_fini() "
"for call at exit: %s (%d)\n",
errstr, err);
@@ -721,7 +721,7 @@ mach_clock_getres(ErtsMachClock *clk)
(clock_attr_t) attr,
&cnt);
if (kret != KERN_SUCCESS || cnt != 1) {
- erl_exit(ERTS_ABORT_EXIT,
+ erts_exit(ERTS_ABORT_EXIT,
"clock_get_attributes(%s, _) failed\n",
clk->name);
}
@@ -739,7 +739,7 @@ mach_clock_get_time(ErtsMachClock *clk)
kret = clock_get_time(clk->srv, &time_spec);
if (kret != KERN_SUCCESS)
- erl_exit(ERTS_ABORT_EXIT, "clock_get_time(%s, _) failed\n", clk->name);
+ erts_exit(ERTS_ABORT_EXIT, "clock_get_time(%s, _) failed\n", clk->name);
return ERTS_TimeSpec2Sint64(&time_spec);
}
@@ -785,11 +785,11 @@ erts_os_times(ErtsMonotonicTime *mtimep, ErtsSystemTime *stimep)
&sys_time_spec);
if (mkret != KERN_SUCCESS)
- erl_exit(ERTS_ABORT_EXIT,
+ erts_exit(ERTS_ABORT_EXIT,
"clock_get_time(%s, _) failed\n",
internal_state.r.o.mach.clock.monotonic.name);
if (skret != KERN_SUCCESS)
- erl_exit(ERTS_ABORT_EXIT,
+ erts_exit(ERTS_ABORT_EXIT,
"clock_get_time(%s, _) failed\n",
internal_state.r.o.mach.clock.wall.name);
@@ -854,7 +854,7 @@ erts_os_system_time(void)
if (gettimeofday(&tv, NULL) != 0) {
int err = errno;
char *errstr = err ? strerror(err) : "unknown";
- erl_exit(ERTS_ABORT_EXIT,
+ erts_exit(ERTS_ABORT_EXIT,
"gettimeofday(_, NULL) failed: %s (%d)\n",
errstr, err);
}
diff --git a/erts/emulator/sys/unix/sys_uds.c b/erts/emulator/sys/unix/sys_uds.c
index 015d0346a1..dd0a3b03ff 100644
--- a/erts/emulator/sys/unix/sys_uds.c
+++ b/erts/emulator/sys/unix/sys_uds.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/erts/emulator/sys/unix/sys_uds.h b/erts/emulator/sys/unix/sys_uds.h
index 844a2804d8..a598102d5c 100644
--- a/erts/emulator/sys/unix/sys_uds.h
+++ b/erts/emulator/sys/unix/sys_uds.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/erts/emulator/sys/win32/dosmap.c b/erts/emulator/sys/win32/dosmap.c
index a98065c666..95fbba384b 100644
--- a/erts/emulator/sys/win32/dosmap.c
+++ b/erts/emulator/sys/win32/dosmap.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/erts/emulator/sys/win32/driver_int.h b/erts/emulator/sys/win32/driver_int.h
index b931da52f5..50097d3fd2 100644
--- a/erts/emulator/sys/win32/driver_int.h
+++ b/erts/emulator/sys/win32/driver_int.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/erts/emulator/sys/win32/erl_main.c b/erts/emulator/sys/win32/erl_main.c
index 21d9a58da6..9eee300f48 100644
--- a/erts/emulator/sys/win32/erl_main.c
+++ b/erts/emulator/sys/win32/erl_main.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/erts/emulator/sys/win32/erl_poll.c b/erts/emulator/sys/win32/erl_poll.c
index 660ded297a..94f3840b5f 100644
--- a/erts/emulator/sys/win32/erl_poll.c
+++ b/erts/emulator/sys/win32/erl_poll.c
@@ -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.
@@ -437,7 +437,7 @@ wakeup_cause(ErtsPollSet ps)
break;
default:
res = 0;
- erl_exit(ERTS_ABORT_EXIT,
+ erts_exit(ERTS_ABORT_EXIT,
"%s:%d: Internal error: Invalid wakeup_state=%d\n",
__FILE__, __LINE__, (int) wakeup_state);
}
@@ -577,7 +577,7 @@ static void signal_standby(ErtsPollSet ps)
--(ps->standby_wait_counter);
if (ps->standby_wait_counter < 0) {
LeaveCriticalSection(&(ps->standby_crit));
- erl_exit(1,"Standby signalled by more threads than expected");
+ erts_exit(ERTS_ERROR_EXIT,"Standby signalled by more threads than expected");
}
if (!(ps->standby_wait_counter)) {
SetEvent(ps->standby_wait_event);
@@ -739,7 +739,7 @@ static void *break_waiter(void *param)
erts_mtx_unlock(&break_waiter_lock);
break;
default:
- erl_exit(1,"Unexpected event in break_waiter");
+ erts_exit(ERTS_ERROR_EXIT,"Unexpected event in break_waiter");
}
}
}
@@ -1158,7 +1158,7 @@ int erts_poll_wait(ErtsPollSet ps,
HARDDEBUGF(("Oups!"));
/* Oups, got signalled before we took the lock, can't reset */
if(!is_io_ready(ps)) {
- erl_exit(1,"Internal error: "
+ erts_exit(ERTS_ERROR_EXIT,"Internal error: "
"Inconsistent io structures in erl_poll.\n");
}
START_WAITER(ps,w);
@@ -1219,7 +1219,7 @@ int erts_poll_wait(ErtsPollSet ps,
ERTS_SET_BREAK_REQUESTED;
break;
case BREAK_WAITER_GOT_HALT:
- erl_exit(0,"");
+ erts_exit(0,"");
break;
default:
break;
diff --git a/erts/emulator/sys/win32/erl_win32_sys_ddll.c b/erts/emulator/sys/win32/erl_win32_sys_ddll.c
index 7c24a77e31..274133a346 100644
--- a/erts/emulator/sys/win32/erl_win32_sys_ddll.c
+++ b/erts/emulator/sys/win32/erl_win32_sys_ddll.c
@@ -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/erts/emulator/sys/win32/erl_win_dyn_driver.h b/erts/emulator/sys/win32/erl_win_dyn_driver.h
index 9c699fdba0..6f28d513c2 100644
--- a/erts/emulator/sys/win32/erl_win_dyn_driver.h
+++ b/erts/emulator/sys/win32/erl_win_dyn_driver.h
@@ -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/erts/emulator/sys/win32/erl_win_sys.h b/erts/emulator/sys/win32/erl_win_sys.h
index 99c1066ab3..7bdfac168b 100644
--- a/erts/emulator/sys/win32/erl_win_sys.h
+++ b/erts/emulator/sys/win32/erl_win_sys.h
@@ -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/erts/emulator/sys/win32/sys.c b/erts/emulator/sys/win32/sys.c
index 76ce25916a..cf821b05cb 100644
--- a/erts/emulator/sys/win32/sys.c
+++ b/erts/emulator/sys/win32/sys.c
@@ -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,7 +38,7 @@
void erts_sys_init_float(void);
void erl_start(int, char**);
-void erl_exit(int n, char*, ...);
+void erts_exit(int n, char*, ...);
void erl_error(char*, va_list);
void erl_crash_dump(char*, int, char*, ...);
@@ -200,7 +200,7 @@ erts_sys_misc_mem_sz(void)
*/
void sys_tty_reset(int exit_code)
{
- if (exit_code > 0)
+ if (exit_code == ERTS_ERROR_EXIT)
ConWaitForExit();
else
ConNormalExit();
@@ -3079,6 +3079,8 @@ erl_bin_write(buf, sz, max)
}
}
+#endif /* DEBUG */
+
void
erl_assert_error(const char* expr, const char* func, const char* file, int line)
{
@@ -3094,7 +3096,6 @@ erl_assert_error(const char* expr, const char* func, const char* file, int line)
DebugBreak();
}
-#endif /* DEBUG */
static void
check_supported_os_version(void)
@@ -3108,13 +3109,13 @@ check_supported_os_version(void)
|| int_os_version.dwMajorVersion < major
|| (int_os_version.dwMajorVersion == major
&& int_os_version.dwMinorVersion < minor))
- erl_exit(-1,
+ erts_exit(1,
"Windows version not supported "
"(min required: winnt %d.%d)\n",
major, minor);
}
#else
- erl_exit(-1,
+ erts_exit(1,
"Windows version not supported "
"(min required: win %d.%d)\n",
nt_major, nt_minor);
diff --git a/erts/emulator/sys/win32/sys_env.c b/erts/emulator/sys/win32/sys_env.c
index 67b6e55377..21ef71ad9a 100644
--- a/erts/emulator/sys/win32/sys_env.c
+++ b/erts/emulator/sys/win32/sys_env.c
@@ -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/erts/emulator/sys/win32/sys_float.c b/erts/emulator/sys/win32/sys_float.c
index 86e822da5b..2b2d6ab7d3 100644
--- a/erts/emulator/sys/win32/sys_float.c
+++ b/erts/emulator/sys/win32/sys_float.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.
@@ -139,8 +139,7 @@ sys_double_to_chars_ext(double fp, char *buffer, size_t buffer_size, size_t deci
int
matherr(struct _exception *exc)
{
- erl_fp_exception = 1;
- DEBUGF(("FP exception (matherr) (0x%x) (%d)\n", exc->type, erl_fp_exception));
+ DEBUGF(("FP exception (matherr) (0x%x)\n", exc->type));
return 1;
}
diff --git a/erts/emulator/sys/win32/sys_interrupt.c b/erts/emulator/sys/win32/sys_interrupt.c
index d6178de03c..df838960eb 100644
--- a/erts/emulator/sys/win32/sys_interrupt.c
+++ b/erts/emulator/sys/win32/sys_interrupt.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.
@@ -81,7 +81,7 @@ BOOL WINAPI ctrl_handler_ignore_break(DWORD dwCtrlType)
return TRUE;
/* else pour through... */
case CTRL_CLOSE_EVENT:
- erl_exit(0, "");
+ erts_exit(0, "");
break;
}
return TRUE;
@@ -106,7 +106,7 @@ BOOL WINAPI ctrl_handler_replace_intr(DWORD dwCtrlType)
/* else pour through... */
case CTRL_CLOSE_EVENT:
case CTRL_SHUTDOWN_EVENT:
- erl_exit(0, "");
+ erts_exit(0, "");
break;
}
return TRUE;
@@ -133,7 +133,7 @@ BOOL WINAPI ctrl_handler(DWORD dwCtrlType)
return TRUE;
/* else pour through... */
case CTRL_CLOSE_EVENT:
- erl_exit(0, "");
+ erts_exit(0, "");
break;
}
return TRUE;
diff --git a/erts/emulator/sys/win32/sys_time.c b/erts/emulator/sys/win32/sys_time.c
index 3b4fd26d63..e8c67b3928 100644
--- a/erts/emulator/sys/win32/sys_time.c
+++ b/erts/emulator/sys/win32/sys_time.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.
@@ -147,7 +147,7 @@ os_monotonic_time_qpc(void)
LARGE_INTEGER pc;
if (!(*internal_state.r.o.pQueryPerformanceCounter)(&pc))
- erl_exit(ERTS_ABORT_EXIT, "QueryPerformanceCounter() failed\n");
+ erts_exit(ERTS_ABORT_EXIT, "QueryPerformanceCounter() failed\n");
return (ErtsMonotonicTime) pc.QuadPart;
}
@@ -164,7 +164,7 @@ os_times_qpc(ErtsMonotonicTime *mtimep, ErtsSystemTime *stimep)
GetSystemTime(&st);
if (!qpcr)
- erl_exit(ERTS_ABORT_EXIT, "QueryPerformanceCounter() failed\n");
+ erts_exit(ERTS_ABORT_EXIT, "QueryPerformanceCounter() failed\n");
*mtimep = (ErtsMonotonicTime) pc.QuadPart;
@@ -251,7 +251,7 @@ sys_hrtime_qpc(void)
LARGE_INTEGER pc;
if (!(*internal_state.r.o.pQueryPerformanceCounter)(&pc))
- erl_exit(ERTS_ABORT_EXIT, "QueryPerformanceCounter() failed\n");
+ erts_exit(ERTS_ABORT_EXIT, "QueryPerformanceCounter() failed\n");
ASSERT(pc.QuadPart > 0);
diff --git a/erts/emulator/test/Makefile b/erts/emulator/test/Makefile
index 318db4b45e..b580211eff 100644
--- a/erts/emulator/test/Makefile
+++ b/erts/emulator/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,6 +53,7 @@ MODULES= \
crypto_SUITE \
ddll_SUITE \
decode_packet_SUITE \
+ dirty_nif_SUITE \
distribution_SUITE \
driver_SUITE \
efile_SUITE \
@@ -70,6 +71,7 @@ MODULES= \
hash_SUITE \
hibernate_SUITE \
list_bif_SUITE \
+ lttng_SUITE \
map_SUITE \
match_spec_SUITE \
module_info_SUITE \
@@ -109,8 +111,11 @@ MODULES= \
trace_meta_SUITE \
trace_call_count_SUITE \
trace_call_time_SUITE \
+ tracer_SUITE \
+ tracer_test \
scheduler_SUITE \
old_scheduler_SUITE \
+ port_trace_SUITE \
unique_SUITE \
z_SUITE \
old_mod \
diff --git a/erts/emulator/test/a_SUITE.erl b/erts/emulator/test/a_SUITE.erl
index a9bba9548b..880c5a5821 100644
--- a/erts/emulator/test/a_SUITE.erl
+++ b/erts/emulator/test/a_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.
@@ -29,66 +29,41 @@
-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, long_timers/1, pollset_size/1]).
+-export([all/0, suite/0,
+ long_timers/1, pollset_size/1]).
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]}].
all() ->
[long_timers, pollset_size].
-groups() ->
- [].
-
-init_per_suite(Config) ->
- Config.
-
-end_per_suite(_Config) ->
- ok.
-
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
-
-
-long_timers(doc) ->
- [];
-long_timers(suite) ->
- [];
long_timers(Config) when is_list(Config) ->
- Dir = ?config(data_dir, Config),
- ?line long_timers_test:start(Dir),
- ?line {comment,
- "Testcase started! This test will run in parallel with the "
- "erts testsuite and ends in the z_SUITE:long_timers testcase."}.
+ Dir = proplists:get_value(data_dir, Config),
+ long_timers_test:start(Dir),
+ {comment, "Testcase started! This test will run in parallel with the "
+ "erts testsuite and ends in the z_SUITE:long_timers testcase."}.
-pollset_size(doc) ->
- [];
-pollset_size(suite) ->
- [];
pollset_size(Config) when is_list(Config) ->
%% Ensure inet_gethost_native port program started, in order to
%% allow other suites to use it...
inet_gethost_native:gethostbyname("localhost"),
- ?line Parent = self(),
- ?line Go = make_ref(),
- ?line spawn(fun () ->
- Name = pollset_size_testcase_initial_state_holder,
- true = register(Name, self()),
- ChkIo = get_check_io_info(),
- io:format("Initial: ~p~n", [ChkIo]),
- Parent ! Go,
- receive
- {get_initial_check_io_result, Pid} ->
- Pid ! {initial_check_io_result, ChkIo}
- end
- end),
- ?line receive Go -> ok end,
- ?line {comment,
- "Testcase started! This test will run in parallel with the "
- "erts testsuite and ends in the z_SUITE:pollset_size testcase."}.
+ Parent = self(),
+ Go = make_ref(),
+ spawn(fun () ->
+ Name = pollset_size_testcase_initial_state_holder,
+ true = register(Name, self()),
+ ChkIo = get_check_io_info(),
+ io:format("Initial: ~p~n", [ChkIo]),
+ Parent ! Go,
+ receive
+ {get_initial_check_io_result, Pid} ->
+ Pid ! {initial_check_io_result, ChkIo}
+ end
+ end),
+ receive Go -> ok end,
+ {comment, "Testcase started! This test will run in parallel with the "
+ "erts testsuite and ends in the z_SUITE:pollset_size testcase."}.
%%
%% Internal functions...
@@ -106,5 +81,3 @@ display_check_io(ChkIo) ->
get_check_io_info() ->
z_SUITE:get_check_io_info().
-
-
diff --git a/erts/emulator/test/after_SUITE.erl b/erts/emulator/test/after_SUITE.erl
index 879fb03927..4f20ad3656 100644
--- a/erts/emulator/test/after_SUITE.erl
+++ b/erts/emulator/test/after_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.
@@ -24,90 +24,64 @@
-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([all/0, suite/0,
t_after/1, receive_after/1, receive_after_big/1,
receive_after_errors/1, receive_var_zero/1, receive_zero/1,
multi_timeout/1, receive_after_32bit/1,
receive_after_blast/1]).
--export([init_per_testcase/2, end_per_testcase/2]).
-
%% Internal exports.
-export([timeout_g/0]).
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap, {minutes, 4}}].
all() ->
[t_after, receive_after, receive_after_big,
receive_after_errors, receive_var_zero, receive_zero,
multi_timeout, receive_after_32bit, receive_after_blast].
-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(Func, Config) when is_atom(Func), is_list(Config) ->
- Dog=?t:timetrap(?t:minutes(3)),
- [{watchdog, Dog}|Config].
-
-end_per_testcase(_Func, Config) ->
- Dog=?config(watchdog, Config),
- ?t:timetrap_cancel(Dog).
-
%% Tests for an old round-off error in 'receive after'."
t_after(Config) when is_list(Config) ->
- ?line spawn(fun frequent_process/0),
- ?line Period = test_server:minutes(1),
- ?line Before = erlang:monotonic_time(),
+ spawn(fun frequent_process/0),
+ Period = test_server:minutes(1),
+ Before = erlang:monotonic_time(),
receive
- after Period ->
- ?line After = erlang:monotonic_time(),
- ?line report(Period, Before, After)
- end.
+ after Period ->
+ After = erlang:monotonic_time(),
+ report(Period, Before, After)
+ end.
report(Period, Before, After) ->
case erlang:convert_time_unit(After - Before, native, 100*1000) / Period of
- Percent when Percent > 100.10 ->
- test_server:fail({too_inaccurate, Percent});
- Percent when Percent < 100.0 ->
- test_server:fail({too_early, Percent});
- Percent ->
- Comment = io_lib:format("Elapsed/expected: ~.2f %", [Percent]),
- {comment, lists:flatten(Comment)}
+ Percent when Percent > 100.10 ->
+ ct:fail({too_inaccurate, Percent});
+ Percent when Percent < 100.0 ->
+ ct:fail({too_early, Percent});
+ Percent ->
+ Comment = io_lib:format("Elapsed/expected: ~.2f %", [Percent]),
+ {comment, lists:flatten(Comment)}
end.
frequent_process() ->
receive
- after 100 ->
- ?line frequent_process()
- end.
+ after 100 ->
+ frequent_process()
+ end.
-receive_after(doc) ->
- "Test that 'receive after' works (doesn't hang). "
- "The test takes 10 seconds to complete.";
+%% Test that 'receive after' works (doesn't hang).
+%% The test takes 10 seconds to complete.
receive_after(Config) when is_list(Config) ->
- ?line receive_after1(5000).
+ receive_after1(5000).
receive_after1(1) ->
- ?line io:format("Testing: receive after ~p~n", [1]),
- ?line receive after 1 -> ok end;
+ io:format("Testing: receive after ~p~n", [1]),
+ receive after 1 -> ok end;
receive_after1(N) ->
- ?line io:format("Testing: receive after ~p~n", [N]),
- ?line receive after N -> receive_after1(N div 2) end.
+ io:format("Testing: receive after ~p~n", [N]),
+ receive after N -> receive_after1(N div 2) end.
receive_after_big(Config) when is_list(Config) ->
%% Test that 'receive after' with a 32 bit number works.
@@ -119,14 +93,14 @@ receive_after_big1(Timeout) ->
erlang:yield(),
spawn(fun() -> Self ! here_is_a_message end),
ok = receive
- here_is_a_message ->
- ok
- after Timeout ->
- %% We test that the timeout can be set,
- %% not that an timeout occurs after the appropriate delay
- %% (48 days, 56 minutes, 48 seconds)!
- timeout
- end.
+ here_is_a_message ->
+ ok
+ after Timeout ->
+ %% We test that the timeout can be set,
+ %% not that an timeout occurs after the appropriate delay
+ %% (48 days, 56 minutes, 48 seconds)!
+ timeout
+ end.
receive_after_big2() ->
Self = self(),
@@ -147,38 +121,38 @@ receive_after_big2() ->
%% Test error cases for 'receive after'.
receive_after_errors(Config) when is_list(Config) ->
- ?line ?TryAfter(-1),
- ?line ?TryAfter(0.0),
- ?line ?TryAfter(3.14),
- ?line ?TryAfter(16#100000000),
- ?line ?TryAfter(392347129847294724972398472984729847129874),
- ?line ?TryAfter(16#3fffffffffffffff),
- ?line ?TryAfter(16#ffffffffffffffff),
- ?line ?TryAfter(-16#100000000),
- ?line ?TryAfter(-3891278094774921784123987129848),
- ?line ?TryAfter(xxx),
+ ?TryAfter(-1),
+ ?TryAfter(0.0),
+ ?TryAfter(3.14),
+ ?TryAfter(16#100000000),
+ ?TryAfter(392347129847294724972398472984729847129874),
+ ?TryAfter(16#3fffffffffffffff),
+ ?TryAfter(16#ffffffffffffffff),
+ ?TryAfter(-16#100000000),
+ ?TryAfter(-3891278094774921784123987129848),
+ ?TryAfter(xxx),
ok.
try_after(Timeout) ->
{'EXIT',{timeout_value,_}} = (catch receive after Timeout -> ok end).
-receive_var_zero(doc) -> "Test 'after Z', when Z == 0.";
+%% Test 'after Z', when Z == 0.
receive_var_zero(Config) when is_list(Config) ->
self() ! x,
self() ! y,
Z = zero(),
timeout = receive
- z -> ok
- after Z -> timeout
- end,
+ z -> ok
+ after Z -> timeout
+ end,
timeout = receive
- after Z -> timeout
- end,
+ after Z -> timeout
+ end,
self() ! w,
receive
x -> ok;
Other ->
- ?line ?t:fail({bad_message,Other})
+ ct:fail({bad_message,Other})
end.
zero() -> 0.
@@ -188,44 +162,43 @@ receive_zero(Config) when is_list(Config) ->
self() ! x,
self() ! y,
timeout = receive
- z -> ok
- after 0 ->
- timeout
- end,
+ z -> ok
+ after 0 ->
+ timeout
+ end,
self() ! w,
timeout = receive
after 0 -> timeout
end,
receive
- x -> ok;
- Other ->
- ?line ?t:fail({bad_message,Other})
+ x -> ok;
+ Other ->
+ ct:fail({bad_message,Other})
end.
-multi_timeout(doc) ->
- "Test for catching invalid assertion in erl_message.c (in queue_message)."
- "This failed (dumped core) with debug-compiled emulator.";
+%% Test for catching invalid assertion in erl_message.c (in queue_message)
+%% This failed (dumped core) with debug-compiled emulator.
multi_timeout(Config) when is_list(Config) ->
- ?line P = spawn(?MODULE, timeout_g, []),
- ?line P ! a,
- ?line P ! b,
- ?line receive
- after 1000 -> ok
- end,
- ?line P ! c,
- ?line receive
- after 1000 -> ok
- end,
- ?line P ! d,
+ P = spawn(?MODULE, timeout_g, []),
+ P ! a,
+ P ! b,
+ receive
+ after 1000 -> ok
+ end,
+ P ! c,
+ receive
+ after 1000 -> ok
+ end,
+ P ! d,
ok.
timeout_g() ->
- ?line receive
- a -> ok
+ receive
+ a -> ok
+ end,
+ receive
+ after 100000 -> ok
end,
- ?line receive
- after 100000 -> ok
- end,
ok.
%% OTP-7493: Timeout for 32 bit numbers (such as 16#ffffFFFF) could
@@ -264,8 +237,8 @@ receive_after_blast(Config) when is_list(Config) ->
TimeoutTime = erlang:monotonic_time(milli_seconds) + 5000,
lists:foreach(fun ({P, _}) -> P ! {go, TimeoutTime} end, PMs),
lists:foreach(fun ({P, M}) ->
- receive
- {'DOWN', M, process, P, normal} ->
- ok
- end
- end, PMs).
+ receive
+ {'DOWN', M, process, P, normal} ->
+ ok
+ end
+ end, PMs).
diff --git a/erts/emulator/test/alloc_SUITE.erl b/erts/emulator/test/alloc_SUITE.erl
index 332e2ad67d..84cf4921d3 100644
--- a/erts/emulator/test/alloc_SUITE.erl
+++ b/erts/emulator/test/alloc_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,8 +19,7 @@
-module(alloc_SUITE).
-author('[email protected]').
--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, init_per_testcase/2, end_per_testcase/2]).
-export([basic/1,
coalesce/1,
@@ -34,42 +33,20 @@
cpool/1,
migration/1]).
--export([init_per_testcase/2, end_per_testcase/2]).
-
-include_lib("common_test/include/ct.hrl").
--define(DEFAULT_TIMETRAP_SECS, 240).
-
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap, {minutes, 4}}].
all() ->
[basic, coalesce, threads, realloc_copy, bucket_index,
bucket_mask, rbtree, mseg_clear_cache, erts_mmap, cpool, migration].
-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) ->
- Dog = ?t:timetrap(?t:seconds(?DEFAULT_TIMETRAP_SECS)),
- [{watchdog, Dog}, {testcase, Case}, {debug,false} | Config].
+ [{testcase, Case},{debug,false}|Config].
end_per_testcase(_Case, Config) when is_list(Config) ->
- Dog = ?config(watchdog, Config),
- ?t:timetrap_cancel(Dog),
ok.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -77,41 +54,15 @@ end_per_testcase(_Case, Config) when is_list(Config) ->
%% Testcases %%
%% %%
-basic(suite) -> [];
-basic(doc) -> [];
-basic(Cfg) -> ?line drv_case(Cfg).
-
-coalesce(suite) -> [];
-coalesce(doc) -> [];
-coalesce(Cfg) -> ?line drv_case(Cfg).
-
-threads(suite) -> [];
-threads(doc) -> [];
-threads(Cfg) -> ?line drv_case(Cfg).
-
-realloc_copy(suite) -> [];
-realloc_copy(doc) -> [];
-realloc_copy(Cfg) -> ?line drv_case(Cfg).
-
-bucket_index(suite) -> [];
-bucket_index(doc) -> [];
-bucket_index(Cfg) -> ?line drv_case(Cfg).
-
-bucket_mask(suite) -> [];
-bucket_mask(doc) -> [];
-bucket_mask(Cfg) -> ?line drv_case(Cfg).
-
-rbtree(suite) -> [];
-rbtree(doc) -> [];
-rbtree(Cfg) -> ?line drv_case(Cfg).
-
-mseg_clear_cache(suite) -> [];
-mseg_clear_cache(doc) -> [];
-mseg_clear_cache(Cfg) -> ?line drv_case(Cfg).
-
-cpool(suite) -> [];
-cpool(doc) -> [];
-cpool(Cfg) -> ?line drv_case(Cfg).
+basic(Cfg) -> drv_case(Cfg).
+coalesce(Cfg) -> drv_case(Cfg).
+threads(Cfg) -> drv_case(Cfg).
+realloc_copy(Cfg) -> drv_case(Cfg).
+bucket_index(Cfg) -> drv_case(Cfg).
+bucket_mask(Cfg) -> drv_case(Cfg).
+rbtree(Cfg) -> drv_case(Cfg).
+mseg_clear_cache(Cfg) -> drv_case(Cfg).
+cpool(Cfg) -> drv_case(Cfg).
migration(Cfg) ->
case erlang:system_info(smp_support) of
@@ -122,16 +73,32 @@ migration(Cfg) ->
end.
erts_mmap(Config) when is_list(Config) ->
- case ?t:os_type() of
- {unix, _} ->
+ case {os:type(), mmsc_flags()} of
+ {{unix,_}, false} ->
[erts_mmap_do(Config, SCO, SCRPM, SCRFSD)
|| SCO <-[true,false], SCRFSD <-[1234,0], SCRPM <- [true,false]];
- {SkipOs,_} ->
- ?line {skipped,
+ {{unix,_}, Flags} ->
+ {skipped, Flags};
+ {{SkipOs,_},_} ->
+ {skipped,
lists:flatten(["Not run on "
| io_lib:format("~p",[SkipOs])])}
end.
+%% Check if there are ERL_FLAGS set that will mess up this test case
+mmsc_flags() ->
+ case mmsc_flags("ERL_FLAGS") of
+ false -> mmsc_flags("ERL_ZFLAGS");
+ Flags -> Flags
+ end.
+mmsc_flags(Env) ->
+ case os:getenv(Env) of
+ false -> false;
+ V -> case string:str(V, "+MMsc") of
+ 0 -> false;
+ P -> Env ++ "=" ++ string:substr(V, P)
+ end
+ end.
erts_mmap_do(Config, SCO, SCRPM, SCRFSD) ->
%% We use the number of schedulers + 1 * approx main carriers size
@@ -150,25 +117,26 @@ erts_mmap_do(Config, SCO, SCRPM, SCRFSD) ->
{ok, Node} = start_node(Config, Opts),
Self = self(),
Ref = make_ref(),
- F = fun () ->
- SI = erlang:system_info({allocator,mseg_alloc}),
- {erts_mmap,EM} = lists:keyfind(erts_mmap, 1, SI),
- {supercarrier,SC} = lists:keyfind(supercarrier, 1, EM),
- {sizes,Sizes} = lists:keyfind(sizes, 1, SC),
- {free_segs,Segs} = lists:keyfind(free_segs,1,SC),
- {total,Total} = lists:keyfind(total,1,Sizes),
- Total = SCS*1024*1024,
-
- {reserved,Reserved} = lists:keyfind(reserved,1,Segs),
- true = (Reserved >= SCRFSD),
-
- case {SCO,lists:keyfind(os,1,EM)} of
- {true, false} -> ok;
- {false, {os,_}} -> ok
- end,
-
- Self ! {Ref, ok}
- end,
+ F = fun() ->
+ SI = erlang:system_info({allocator,erts_mmap}),
+ {default_mmap,EM} = lists:keyfind(default_mmap, 1, SI),
+ {supercarrier,SC} = lists:keyfind(supercarrier, 1, EM),
+ {sizes,Sizes} = lists:keyfind(sizes, 1, SC),
+ {free_segs,Segs} = lists:keyfind(free_segs,1,SC),
+ {total,Total} = lists:keyfind(total,1,Sizes),
+ io:format("Expecting total ~w, got ~w~n", [SCS*1024*1024,Total]),
+ Total = SCS*1024*1024,
+
+ {reserved,Reserved} = lists:keyfind(reserved,1,Segs),
+ true = (Reserved >= SCRFSD),
+
+ case {SCO,lists:keyfind(os,1,EM)} of
+ {true, false} -> ok;
+ {false, {os,_}} -> ok
+ end,
+
+ Self ! {Ref, ok}
+ end,
spawn_link(Node, F),
Result = receive {Ref, Rslt} -> Rslt end,
@@ -185,28 +153,28 @@ drv_case(Config) ->
drv_case(Config, one_shot, "").
drv_case(Config, Mode, NodeOpts) when is_list(Config) ->
- case ?t:os_type() of
+ case os:type() of
{Family, _} when Family == unix; Family == win32 ->
- ?line {ok, Node} = start_node(Config, NodeOpts),
- ?line Self = self(),
- ?line Ref = make_ref(),
- ?line spawn_link(Node,
+ {ok, Node} = start_node(Config, NodeOpts),
+ Self = self(),
+ Ref = make_ref(),
+ spawn_link(Node,
fun () ->
Res = run_drv_case(Config, Mode),
Self ! {Ref, Res}
end),
- ?line Result = receive {Ref, Rslt} -> Rslt end,
- ?line stop_node(Node),
- ?line Result;
+ Result = receive {Ref, Rslt} -> Rslt end,
+ stop_node(Node),
+ Result;
SkipOs ->
- ?line {skipped,
+ {skipped,
lists:flatten(["Not run on "
| io_lib:format("~p",[SkipOs])])}
end.
run_drv_case(Config, Mode) ->
- DataDir = ?config(data_dir,Config),
- CaseName = ?config(testcase,Config),
+ DataDir = proplists:get_value(data_dir,Config),
+ CaseName = proplists:get_value(testcase,Config),
File = filename:join(DataDir, CaseName),
{ok,CaseName,Bin} = compile:file(File, [binary,return_errors]),
{module,CaseName} = erlang:load_module(CaseName,Bin),
@@ -266,7 +234,6 @@ print_stats(migration) ->
io:format("Number of blocks : ~p\n", [Btot]),
io:format("Number of carriers: ~p\n", [Ctot]);
-
print_stats(_) -> ok.
tuple_add(T1, T2) ->
@@ -338,7 +305,7 @@ repeat_while_loop(Fun, TRef, I) ->
flush_log() ->
receive
{print, Str} ->
- ?t:format("~s", [Str]),
+ io:format("~s", [Str]),
flush_log()
after 0 ->
ok
@@ -348,23 +315,23 @@ handle_result(_State, Result0) ->
flush_log(),
case Result0 of
{'EXIT', Error} ->
- ?line ?t:fail(Error);
+ ct:fail(Error);
{'EXIT', error, Error} ->
- ?line ?t:fail(Error);
+ ct:fail(Error);
{failed, Comment} ->
- ?line ?t:fail(Comment);
+ ct:fail(Comment);
{skipped, Comment} ->
- ?line {skipped, Comment};
+ {skipped, Comment};
{succeeded, ""} ->
- ?line succeeded;
+ succeeded;
{succeeded, Comment} ->
- ?line {comment, Comment};
+ {comment, Comment};
continue ->
continue
end.
start_node(Config, Opts) when is_list(Config), is_list(Opts) ->
- case ?config(debug,Config) of
+ case proplists:get_value(debug,Config) of
true -> {ok, node()};
_ -> start_node_1(Config, Opts)
end.
@@ -373,16 +340,16 @@ start_node_1(Config, Opts) ->
Pa = filename:dirname(code:which(?MODULE)),
Name = list_to_atom(atom_to_list(?MODULE)
++ "-"
- ++ atom_to_list(?config(testcase, Config))
+ ++ atom_to_list(proplists:get_value(testcase, Config))
++ "-"
++ integer_to_list(erlang:system_time(seconds))
++ "-"
++ integer_to_list(erlang:unique_integer([positive]))),
- ?t:start_node(Name, slave, [{args, Opts++" -pa "++Pa}]).
+ test_server:start_node(Name, slave, [{args, Opts++" -pa "++Pa}]).
stop_node(Node) when Node =:= node() -> ok;
stop_node(Node) ->
- ?t:stop_node(Node).
+ test_server:stop_node(Node).
free_memory() ->
%% Free memory in MB.
@@ -401,6 +368,6 @@ free_memory() ->
TotFree div (1024*1024)
catch
error : undef ->
- ?t:fail({"os_mon not built"})
+ ct:fail({"os_mon not built"})
end.
diff --git a/erts/emulator/test/alloc_SUITE_data/cpool.c b/erts/emulator/test/alloc_SUITE_data/cpool.c
index 73026cc758..0c41f4d747 100644
--- a/erts/emulator/test/alloc_SUITE_data/cpool.c
+++ b/erts/emulator/test/alloc_SUITE_data/cpool.c
@@ -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/erts/emulator/test/alloc_SUITE_data/migration.c b/erts/emulator/test/alloc_SUITE_data/migration.c
index b006360043..b9a4de03b3 100644
--- a/erts/emulator/test/alloc_SUITE_data/migration.c
+++ b/erts/emulator/test/alloc_SUITE_data/migration.c
@@ -1,7 +1,7 @@
/*
* %CopyrightBegin%
*
- * Copyright Ericsson AB 2014. All Rights Reserved.
+ * Copyright Ericsson AB 2014-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
diff --git a/erts/emulator/test/async_ports_SUITE.erl b/erts/emulator/test/async_ports_SUITE.erl
index c89b3655ff..f0f5fb5687 100644
--- a/erts/emulator/test/async_ports_SUITE.erl
+++ b/erts/emulator/test/async_ports_SUITE.erl
@@ -1,8 +1,10 @@
-module(async_ports_SUITE).
--include_lib("common_test/include/ct.hrl").
+-export([all/0, suite/0]).
+-export([permanent_busy_test/1]).
+-export([run_loop/5]).
--compile(export_all).
+-include_lib("common_test/include/ct.hrl").
-define(PACKET_SIZE, (10 * 1024 * 8)).
-define(CPORT_DELAY, 100).
@@ -11,17 +13,15 @@
-define(TEST_PROCS_COUNT, 2).
-define(TC_TIMETRAP_SECONDS, 10).
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap, {seconds, ?TC_TIMETRAP_SECONDS}}].
all() ->
- [
- permanent_busy_test
- ].
+ [permanent_busy_test].
permanent_busy_test(Config) ->
- ct:timetrap({seconds, ?TC_TIMETRAP_SECONDS}),
- ExePath = filename:join(?config(data_dir, Config), "cport"),
-
+ ExePath = filename:join(proplists:get_value(data_dir, Config), "cport"),
Self = self(),
spawn_link(
fun() ->
@@ -29,17 +29,16 @@ permanent_busy_test(Config) ->
Port = open_port(ExePath),
- Testers =
- lists:map(
- fun(_) ->
- erlang:spawn_link(?MODULE, run_loop,
- [Self,
- Port,
- Block,
- ?TEST_LOOPS_COUNT,
- 0])
- end,
- lists:seq(1, ?TEST_PROCS_COUNT)),
+ Testers = lists:map(
+ fun(_) ->
+ spawn_link(?MODULE, run_loop,
+ [Self,
+ Port,
+ Block,
+ ?TEST_LOOPS_COUNT,
+ 0])
+ end,
+ lists:seq(1, ?TEST_PROCS_COUNT)),
Self ! {test_info, Port, Testers},
endless_flush(Port)
end),
diff --git a/erts/emulator/test/beam_SUITE.erl b/erts/emulator/test/beam_SUITE.erl
index 499b05d658..6a54fa87e0 100644
--- a/erts/emulator/test/beam_SUITE.erl
+++ b/erts/emulator/test/beam_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.
@@ -24,17 +24,19 @@
init_per_group/2,end_per_group/2,
packed_registers/1, apply_last/1, apply_last_bif/1,
buildo_mucho/1, heap_sizes/1, big_lists/1, fconv/1,
- select_val/1]).
+ select_val/1, swap_temp_apply/1]).
--export([applied/2]).
+-export([applied/2,swap_temp_applied/1]).
-include_lib("common_test/include/ct.hrl").
+-include_lib("syntax_tools/include/merl.hrl").
suite() -> [{ct_hooks,[ts_install_cth]}].
all() ->
[packed_registers, apply_last, apply_last_bif,
- buildo_mucho, heap_sizes, big_lists, select_val].
+ buildo_mucho, heap_sizes, big_lists, select_val,
+ swap_temp_apply].
groups() ->
[].
@@ -61,15 +63,15 @@ apply_last(Config) when is_list(Config) ->
{Pid, finished} ->
stack_size(Pid)
after 30000 ->
- ?t:fail("applied/2 timed out.")
+ ct:fail("applied/2 timed out.")
end,
Pid ! die,
- ?t:format("Size: ~p~n", [Size]),
+ io:format("Size: ~p~n", [Size]),
if
Size < 700 ->
ok;
true ->
- ?t:fail("10000 apply() grew stack too much.")
+ ct:fail("10000 apply() grew stack too much.")
end,
ok.
@@ -92,49 +94,46 @@ applied(Starter, N) ->
apply_last_bif(Config) when is_list(Config) ->
apply(erlang, abs, [1]).
-%% Test three high register numbers in a put_list instruction
-%% (to test whether packing works properly).
+%% Test whether packing works properly.
packed_registers(Config) when is_list(Config) ->
- PrivDir = ?config(priv_dir, Config),
- Mod = packed_regs,
- Name = filename:join(PrivDir, atom_to_list(Mod) ++ ".erl"),
-
- %% Generate a module which generates a list of tuples.
- %% put_list(A) -> [{A, 600}, {A, 999}, ... {A, 0}].
- Code = gen_packed_regs(600, ["-module("++atom_to_list(Mod)++").\n",
- "-export([put_list/1]).\n",
- "put_list(A) ->\n["]),
- ok = file:write_file(Name, Code),
-
- %% Compile the module.
- io:format("Compiling: ~s\n", [Name]),
- CompRc = compile:file(Name, [{outdir, PrivDir}, report]),
- io:format("Result: ~p\n",[CompRc]),
- {ok, Mod} = CompRc,
-
- %% Load it.
- io:format("Loading...\n",[]),
- LoadRc = code:load_abs(filename:join(PrivDir, atom_to_list(Mod))),
- {module,_Module} = LoadRc,
-
- %% Call it and verify result.
- Term = {a, b},
- L = Mod:put_list(Term),
- verify_packed_regs(L, Term, 600),
+ Mod = ?FUNCTION_NAME,
+
+ %% Generate scrambled sequence.
+ Seq0 = [{erlang:phash2(I),I} || I <- lists:seq(0, 260)],
+ Seq = [I || {_,I} <- lists:sort(Seq0)],
+
+ %% Generate a test modules that uses get_list/3 instructions
+ %% with high register numbers.
+ S0 = [begin
+ VarName = list_to_atom("V"++integer_to_list(V)),
+ {merl:var(VarName),V}
+ end || V <- Seq],
+ Vars = [V || {V,_} <- S0],
+ NewVars = [begin
+ VarName = list_to_atom("M"++integer_to_list(V)),
+ merl:var(VarName)
+ end || V <- Seq],
+ S = [?Q("_@Var = id(_@Value@)") || {Var,Value} <- S0],
+ Code = ?Q(["-module('@Mod@').\n"
+ "-export([f/0]).\n"
+ "f() ->\n"
+ "_@S,\n"
+ "_ = id(0),\n"
+ "L = [_@Vars],\n"
+ "_ = id(1),\n"
+ "[_@NewVars] = L,\n" %Test get_list/3.
+ "_ = id(2),\n"
+ "id([_@Vars,_@NewVars]).\n"
+ "id(I) -> I.\n"]),
+ merl:compile_and_load(Code),
+ CombinedSeq = Seq ++ Seq,
+ CombinedSeq = Mod:f(),
+
+ %% Clean up.
+ true = code:delete(Mod),
+ false = code:purge(Mod),
ok.
-gen_packed_regs(0, Acc) ->
- [Acc|"{A,0}].\n"];
-gen_packed_regs(N, Acc) ->
- gen_packed_regs(N-1, [Acc,"{A,",integer_to_list(N)|"},\n"]).
-
-verify_packed_regs([], _, -1) -> ok;
-verify_packed_regs([{Term, N}| T], Term, N) ->
- verify_packed_regs(T, Term, N-1);
-verify_packed_regs(L, Term, N) ->
- ok = io:format("Expected [{~p, ~p}|T]; got\n~p\n", [Term, N, L]),
- test_server:fail().
-
buildo_mucho(Config) when is_list(Config) ->
buildo_mucho_1(),
ok.
@@ -319,7 +318,7 @@ fconv(Config) when is_list(Config) ->
do_fconv(Type) ->
try
do_fconv(Type, 1.0),
- test_server:fail()
+ ct:fail(no_badarith)
catch
error:badarith ->
ok
@@ -347,3 +346,41 @@ do_select_val(X) ->
Int when is_integer(Int) ->
integer
end.
+
+swap_temp_apply(_Config) ->
+ {swap_temp_applied,42} = do_swap_temp_apply(41),
+ not_an_integer = do_swap_temp_apply(not_an_integer),
+ ok.
+
+do_swap_temp_apply(Msg) ->
+ case swap_temp_apply_function(Msg) of
+ undefined -> Msg;
+ Type ->
+ %% The following sequence:
+ %% move {x,0} {x,2}
+ %% move {y,0} {x,0}
+ %% move {x,2} {y,0}
+ %% apply 1
+ %%
+ %% Would be incorrectly transformed to:
+ %% swap {x,0} {y,0}
+ %% apply 1
+ %%
+ %% ({x,1} is the module, {x,2} the function to be applied).
+ %%
+ %% If the instructions are to be transformed, the correct
+ %% transformation is:
+ %%
+ %% swap_temp {x,0} {y,0} {x,2}
+ %% apply 1
+ Fields = ?MODULE:Type(Msg),
+ {Type,Fields}
+ end.
+
+swap_temp_apply_function(Int) when is_integer(Int) ->
+ swap_temp_applied;
+swap_temp_apply_function(_) ->
+ undefined.
+
+swap_temp_applied(Int) ->
+ Int+1.
diff --git a/erts/emulator/test/beam_literals_SUITE.erl b/erts/emulator/test/beam_literals_SUITE.erl
index 29c6a5c7ac..09761263e2 100644
--- a/erts/emulator/test/beam_literals_SUITE.erl
+++ b/erts/emulator/test/beam_literals_SUITE.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.
@@ -55,7 +55,7 @@ end_per_group(_GroupName, Config) ->
Config.
-putting(doc) -> "Test creating lists and tuples containing big number literals.";
+%% Test creating lists and tuples containing big number literals.
putting(Config) when is_list(Config) ->
-773973888575883407313908 = chksum(putting1(8987697898797)).
@@ -64,23 +64,22 @@ putting1(X) ->
[X|349873987387373],
[329878349873|-387394729872], -773973937933873929749873}.
-matching_bigs(doc) -> "Test matching of a few big number literals (in Beam,"
- "select_val/3 will NOT be used).";
+%% Test matching of a few big number literals (in Beam select_val/3 will NOT be used).
matching_bigs(Config) when is_list(Config) ->
a = matching1(3972907842873739),
b = matching1(-389789298378939783333333333333333333784),
other = matching1(3141699999999999999999999999999999999),
other = matching1(42).
-matching_smalls(doc) -> "Test matching small numbers (both positive and negative).";
+%% Test matching small numbers (both positive and negative).
matching_smalls(Config) when is_list(Config) ->
- ?line a = m_small(-42),
- ?line b = m_small(0),
- ?line c = m_small(105),
- ?line d = m_small(-13),
- ?line e = m_small(337848),
- ?line other = m_small(324),
- ?line other = m_small(-7),
+ a = m_small(-42),
+ b = m_small(0),
+ c = m_small(105),
+ d = m_small(-13),
+ e = m_small(337848),
+ other = m_small(324),
+ other = m_small(-7),
ok.
m_small(-42) -> a;
@@ -90,17 +89,16 @@ m_small(-13) -> d;
m_small(337848) -> e;
m_small(_) -> other.
-matching_smalls_jt(doc) ->
- "Test matching small numbers (both positive and negative). "
- "Make sure that a jump table is used.";
+%% Test matching small numbers (both positive and negative).
+%% Make sure that a jump table is used.
matching_smalls_jt(Config) when is_list(Config) ->
- ?line a = m_small_jt(-2),
- ?line b = m_small_jt(-1),
- ?line c = m_small_jt(0),
- ?line d = m_small_jt(2),
- ?line e = m_small_jt(3),
- ?line other = m_small(324),
- ?line other = m_small(-7),
+ a = m_small_jt(-2),
+ b = m_small_jt(-1),
+ c = m_small_jt(0),
+ d = m_small_jt(2),
+ e = m_small_jt(3),
+ other = m_small(324),
+ other = m_small(-7),
ok.
m_small_jt(-2) -> a;
@@ -117,8 +115,7 @@ matching1(-389789298378939783333333333333333333784) -> b;
matching1(_) -> other.
-matching_more_bigs(doc) -> "Test matching of a big number literals (in Beam,"
- "a select_val/3 instruction will be used).";
+%% Test matching of a big number literals (in Beam, a select_val/3 instruction will be used)
matching_more_bigs(Config) when is_list(Config) ->
a = matching2(-999766349740978337),
b = matching2(9734097866575478),
@@ -137,8 +134,7 @@ matching2(13987294872948990) -> d;
matching2(777723896192459245) -> e;
matching2(_) -> other.
-matching_bigs_and_smalls(doc) -> "Test matching of a mix of big numbers and literals.";
-matching_bigs_and_smalls(suite) -> [];
+%% Test matching of a mix of big numbers and literals.
matching_bigs_and_smalls(Config) when is_list(Config) ->
a = matching3(38472928723987239873873),
b = matching3(0),
@@ -159,30 +155,30 @@ matching3(42) -> e;
matching3(-4533) -> f;
matching3(_) -> other.
-badmatch(doc) -> "Test literal badmatches with big number and floats.";
+%% Test literal badmatches with big number and floats.
badmatch(Config) when is_list(Config) ->
%% We are satisfied if we can load this module and run it.
Big = id(32984798729847892498297824872982972978239874),
Float = id(3.1415927),
- ?line catch a = Big,
- ?line catch b = Float,
- ?line {'EXIT',{{badmatch,3879373498378993387},_}} =
+ catch a = Big,
+ catch b = Float,
+ {'EXIT',{{badmatch,3879373498378993387},_}} =
(catch c = 3879373498378993387),
- ?line {'EXIT',{{badmatch,7.0},_}} = (catch d = 7.0),
- ?line case Big of
- Big -> ok
- end,
- ?line case Float of
- Float -> ok
- end,
+ {'EXIT',{{badmatch,7.0},_}} = (catch d = 7.0),
+ case Big of
+ Big -> ok
+ end,
+ case Float of
+ Float -> ok
+ end,
ok.
case_clause(Config) when is_list(Config) ->
- ?line {'EXIT',{{case_clause,337.0},_}} = (catch case_clause_float()),
- ?line {'EXIT',{{try_clause,42.0},_}} = (catch try_case_clause_float()),
- ?line {'EXIT',{{case_clause,37932749837839747383847398743789348734987},_}} =
+ {'EXIT',{{case_clause,337.0},_}} = (catch case_clause_float()),
+ {'EXIT',{{try_clause,42.0},_}} = (catch try_case_clause_float()),
+ {'EXIT',{{case_clause,37932749837839747383847398743789348734987},_}} =
(catch case_clause_big()),
- ?line {'EXIT',{{try_clause,977387349872349870423364354398566348},_}} =
+ {'EXIT',{{try_clause,977387349872349870423364354398566348},_}} =
(catch try_case_clause_big()),
ok.
@@ -210,8 +206,7 @@ try_case_clause_big() ->
error
end.
-receiving(doc) -> "Test receive with a big number literal (more than 27 bits, "
- "less than 32 bits).";
+%% Test receive with a big number literal (more than 27 bits, less than 32 bits).
receiving(Config) when is_list(Config) ->
Self = self(),
spawn(fun() -> Self ! here_is_a_message end),
@@ -222,11 +217,11 @@ receiving(Config) when is_list(Config) ->
timeout
end.
-literal_type_tests(doc) -> "Test type tests on literal values.";
+%% Test type tests on literal values.
literal_type_tests(Config) when is_list(Config) ->
%% Generate an Erlang module with all different type of type tests.
- ?line Tests = make_test([{T, L} || T <- type_tests(), L <- literals()]),
- ?line Mod = literal_test,
+ Tests = make_test([{T, L} || T <- type_tests(), L <- literals()]),
+ Mod = literal_test,
Anno = erl_anno:new(0),
Func = {function, Anno, test, 0, [{clause,Anno,[],[],Tests}]},
Form = [{attribute,Anno,module,Mod},
@@ -234,22 +229,22 @@ literal_type_tests(Config) when is_list(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 {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),
+ {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 {module,Mod} = code:load_binary(Mod, Mod, Code2),
- ?line Mod:test(),
- ?line true = code:delete(Mod),
- ?line code:purge(Mod),
+ {module,Mod} = code:load_binary(Mod, Mod, Code2),
+ Mod:test(),
+ true = code:delete(Mod),
+ code:purge(Mod),
ok.
make_test([{is_function=T,L}|Ts]) ->
@@ -299,34 +294,34 @@ type_tests() ->
put_list(Config) when is_list(Config) ->
%% put_list x0 Literal Reg
- ?line [Config|8739757395764] = put_list_rqr(Config),
- ?line {[Config|7779757395764],Config} = put_list_rqx(Config),
- ?line [Config|98765432100000] = put_list_rqy(Config),
+ [Config|8739757395764] = put_list_rqr(Config),
+ {[Config|7779757395764],Config} = put_list_rqx(Config),
+ [Config|98765432100000] = put_list_rqy(Config),
%% put_list x Literal Reg
- ?line [Config|16#FFFFF77777137483769] = put_list_xqr(ignore, Config),
- ?line {[Config|16#AAAAAFFFFF77777],{a,b},Config} = put_list_xqx({a,b}, Config),
- ?line [Config|12777765432979879] = put_list_xqy(ignore, Config),
+ [Config|16#FFFFF77777137483769] = put_list_xqr(ignore, Config),
+ {[Config|16#AAAAAFFFFF77777],{a,b},Config} = put_list_xqx({a,b}, Config),
+ [Config|12777765432979879] = put_list_xqy(ignore, Config),
%% put_list y Literal Reg
- ?line [Config|17424134793676869867] = put_list_yqr(Config),
- ?line {[Config|77424134793676869867],Config} = put_list_yqx(Config),
- ?line {Config,[Config|16#BCDEFF4241676869867]} = put_list_yqy(Config),
+ [Config|17424134793676869867] = put_list_yqr(Config),
+ {[Config|77424134793676869867],Config} = put_list_yqx(Config),
+ {Config,[Config|16#BCDEFF4241676869867]} = put_list_yqy(Config),
%% put_list Literal x0 Reg
- ?line [42.0|Config] = put_list_qrr(Config),
- ?line [Config,42.0|Config] = put_list_qrx(Config),
- ?line [100.0|Config] = put_list_qry(Config),
+ [42.0|Config] = put_list_qrr(Config),
+ [Config,42.0|Config] = put_list_qrx(Config),
+ [100.0|Config] = put_list_qry(Config),
%% put_list Literal x1 Reg
- ?line [127.0|Config] = put_list_qxr({ignore,me}, Config),
- ?line [Config,130.0|Config] = put_list_qxx(ignore, Config),
- ?line [99.0|Config] = put_list_qxy(Config),
+ [127.0|Config] = put_list_qxr({ignore,me}, Config),
+ [Config,130.0|Config] = put_list_qxx(ignore, Config),
+ [99.0|Config] = put_list_qxy(Config),
%% put_list Literal y0 Reg
- ?line [200.0|Config] = put_list_qyr(Config),
- ?line [Config,210.0|Config] = put_list_qyx(Config),
- ?line [[300.0|Config]|Config] = put_list_qyy(Config),
+ [200.0|Config] = put_list_qyr(Config),
+ [Config,210.0|Config] = put_list_qyx(Config),
+ [[300.0|Config]|Config] = put_list_qyy(Config),
ok.
@@ -417,8 +412,8 @@ put_list_qyy(Config) ->
[Res|Config].
fconv(Config) when is_list(Config) ->
- ?line 5.0 = fconv_1(-34444444450.0),
- ?line 13.0 = fconv_2(7.0),
+ 5.0 = fconv_1(-34444444450.0),
+ 13.0 = fconv_2(7.0),
ok.
fconv_1(F) when is_float(F) ->
@@ -428,19 +423,18 @@ fconv_2(F) when is_float(F) ->
6.0 + F.
literal_case_expression(Config) when is_list(Config) ->
- ?line DataDir = ?config(data_dir, Config),
- ?line Src = filename:join(DataDir, "literal_case_expression"),
- ?line {ok,literal_case_expression=Mod,Code} =
- compile:file(Src, [from_asm,binary]),
- ?line {module,Mod} = code:load_binary(Mod, Src, Code),
- ?line ok = Mod:x(),
- ?line ok = Mod:y(),
- ?line ok = Mod:zi1(),
- ?line ok = Mod:zi2(),
- ?line ok = Mod:za1(),
- ?line ok = Mod:za2(),
- ?line true = code:delete(Mod),
- ?line code:purge(Mod),
+ DataDir = proplists:get_value(data_dir, Config),
+ Src = filename:join(DataDir, "literal_case_expression"),
+ {ok,literal_case_expression=Mod,Code} = compile:file(Src, [from_asm,binary]),
+ {module,Mod} = code:load_binary(Mod, Src, Code),
+ ok = Mod:x(),
+ ok = Mod:y(),
+ ok = Mod:zi1(),
+ ok = Mod:zi2(),
+ ok = Mod:za1(),
+ ok = Mod:za2(),
+ true = code:delete(Mod),
+ code:purge(Mod),
ok.
%% Test the i_increment instruction.
@@ -452,27 +446,27 @@ increment(Config) when is_list(Config) ->
Neg32 = -(1 bsl 27),
Big32 = id(1 bsl 32),
Result32 = (1 bsl 32) + (1 bsl 27),
- ?line Result32 = Big32 + (1 bsl 27),
- ?line Result32 = Big32 - Neg32,
+ Result32 = Big32 + (1 bsl 27),
+ Result32 = Big32 - Neg32,
%% Same thing, but for the 64-bit emulator.
Neg64 = -(1 bsl 59),
Big64 = id(1 bsl 64),
Result64 = (1 bsl 64) + (1 bsl 59),
- ?line Result64 = Big64 + (1 bsl 59),
- ?line Result64 = Big64 - Neg64,
+ Result64 = Big64 + (1 bsl 59),
+ Result64 = Big64 - Neg64,
%% Test error handling for the i_increment instruction.
Bad = id(bad),
- ?line {'EXIT',{badarith,_}} = (catch Bad + 42),
+ {'EXIT',{badarith,_}} = (catch Bad + 42),
%% Small operands, but a big result.
Res32 = 1 bsl 27,
Small32 = id(Res32-1),
- ?line Res32 = Small32 + 1,
+ Res32 = Small32 + 1,
Res64 = 1 bsl 59,
Small64 = id(Res64-1),
- ?line Res64 = Small64 + 1,
+ Res64 = Small64 + 1,
ok.
%% Help functions.
diff --git a/erts/emulator/test/bif_SUITE.erl b/erts/emulator/test/bif_SUITE.erl
index 9bba5387fa..26bb416bf0 100644
--- a/erts/emulator/test/bif_SUITE.erl
+++ b/erts/emulator/test/bif_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.
@@ -23,9 +23,7 @@
-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,
- init_per_group/2,end_per_group/2,
- init_per_testcase/2,end_per_testcase/2,
+-export([all/0, suite/0,
display/1, display_huge/0,
erl_bif_types/1,guard_bifs_in_erl_bif_types/1,
shadow_comments/1,
@@ -35,7 +33,9 @@
atom_to_binary/1,min_max/1, erlang_halt/1,
is_builtin/1]).
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap, {minutes, 1}}].
all() ->
[erl_bif_types, guard_bifs_in_erl_bif_types, shadow_comments,
@@ -45,35 +45,7 @@ all() ->
atom_to_binary, binary_to_atom, binary_to_existing_atom,
min_max, erlang_halt, is_builtin].
-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(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).
-
-
-display(suite) ->
- [];
-display(doc) ->
- ["Uses erlang:display to test that erts_printf does not do deep recursion"];
+%% Uses erlang:display to test that erts_printf does not do deep recursion
display(Config) when is_list(Config) ->
Pa = filename:dirname(code:which(?MODULE)),
{ok, Node} = test_server:start_node(display_huge_term,peer,
@@ -118,7 +90,7 @@ erl_bif_types_2(List) ->
[_|_] ->
io:put_chars("Bifs with bad arity\n"),
io:format("~p\n", [BadArity]),
- ?line ?t:fail({length(BadArity),bad_arity})
+ ct:fail({length(BadArity),bad_arity})
end.
erl_bif_types_3(List) ->
@@ -142,7 +114,7 @@ erl_bif_types_3(List) ->
io:put_chars("Bifs with failing calls to erlang_bif_types:type/3 "
"(or with bogus return values):\n"),
io:format("~p\n", [BadSmokeTest]),
- ?line ?t:fail({length(BadSmokeTest),bad_smoke_test})
+ ct:fail({length(BadSmokeTest),bad_smoke_test})
end.
guard_bifs_in_erl_bif_types(_Config) ->
@@ -163,7 +135,7 @@ guard_bifs_in_erl_bif_types(_Config) ->
"The following guard BIFs have no type information "
"in erl_bif_types:\n\n",
[io_lib:format(" ~p/~p\n", [F,A]) || {F,A} <- Not]]),
- ?t:fail()
+ ct:fail(erl_bif_types)
end.
shadow_comments(_Config) ->
@@ -203,7 +175,7 @@ shadow_comments(_Config) ->
"obvious.\n\nThe following comments are missing:\n\n",
[io_lib:format("%% Shadowed by erl_bif_types: ~p:~p/~p\n",
[M,F,A]) || {M,F,A} <- NoComments]]),
- ?t:fail()
+ ct:fail(bif_stub)
end,
case NoBifSpecs of
@@ -217,7 +189,7 @@ shadow_comments(_Config) ->
"Therefore, the following comments should be removed:\n\n",
[io_lib:format("%% Shadowed by erl_bif_types: ~p:~p/~p\n",
[M,F,A]) || {M,F,A} <- NoBifSpecs]]),
- ?t:fail()
+ ct:fail(erl_bif_types)
end.
extract_comments(Mod, Path) ->
@@ -239,7 +211,7 @@ ensure_erl_bif_types_compiled() ->
case erlang:function_exported(erl_bif_types, module_info, 0) of
false ->
%% Fail cleanly.
- ?t:fail("erl_bif_types not compiled");
+ ct:fail("erl_bif_types not compiled");
true ->
ok
end.
@@ -277,7 +249,7 @@ specs(_) ->
[_|_] ->
io:put_chars("The following BIFs don't have specs:\n"),
[print_mfa(MFA) || MFA <- NoSpecs],
- ?t:fail()
+ ct:fail(no_spec)
end.
is_operator({erlang,F,A}) ->
@@ -337,7 +309,7 @@ auto_imports([{erlang,F,A}|T], Errors) ->
auto_imports([], 0) ->
ok;
auto_imports([], Errors) ->
- ?t:fail({Errors,inconsistencies}).
+ ct:fail({Errors,inconsistencies}).
extract_functions(M, Abstr) ->
[{{M,F,A},Body} || {function,_,F,A,Body} <- Abstr].
@@ -356,40 +328,36 @@ check_stub({_,F,A}, B) ->
io:put_chars(erl_pp:function(Func)),
io:nl(),
io:put_chars("The body should be: erlang:nif_error(undef)"),
- ?t:fail()
+ ct:fail(invalid_body)
end.
t_list_to_existing_atom(Config) when is_list(Config) ->
- ?line all = list_to_existing_atom("all"),
- ?line ?MODULE = list_to_existing_atom(?MODULE_STRING),
- ?line UnlikelyStr = "dsfj923874390867er869fds9864y97jhg3973qerueoru",
+ all = list_to_existing_atom("all"),
+ ?MODULE = list_to_existing_atom(?MODULE_STRING),
+ UnlikelyStr = "dsfj923874390867er869fds9864y97jhg3973qerueoru",
try
- ?line list_to_existing_atom(UnlikelyStr),
- ?line ?t:fail()
+ list_to_existing_atom(UnlikelyStr),
+ ct:fail(atom_exists)
catch
error:badarg -> ok
end,
%% The compiler has become smarter! We need the call to id/1 in
%% the next line.
- ?line UnlikelyAtom = list_to_atom(id(UnlikelyStr)),
- ?line UnlikelyAtom = list_to_existing_atom(UnlikelyStr),
+ UnlikelyAtom = list_to_atom(id(UnlikelyStr)),
+ UnlikelyAtom = list_to_existing_atom(UnlikelyStr),
ok.
-os_env(doc) ->
- [];
-os_env(suite) ->
- [];
os_env(Config) when is_list(Config) ->
- ?line EnvVar1 = "MjhgvFDrresdCghN mnjkUYg vfrD",
- ?line false = os:getenv(EnvVar1),
- ?line true = os:putenv(EnvVar1, "mors"),
- ?line "mors" = os:getenv(EnvVar1),
- ?line true = os:putenv(EnvVar1, ""),
- ?line case os:getenv(EnvVar1) of
- "" -> ?line ok;
- false -> ?line ok;
- BadVal -> ?line ?t:fail(BadVal)
+ EnvVar1 = "MjhgvFDrresdCghN mnjkUYg vfrD",
+ false = os:getenv(EnvVar1),
+ true = os:putenv(EnvVar1, "mors"),
+ "mors" = os:getenv(EnvVar1),
+ true = os:putenv(EnvVar1, ""),
+ case os:getenv(EnvVar1) of
+ "" -> ok;
+ false -> ok;
+ BadVal -> ct:fail(BadVal)
end,
true = os:putenv(EnvVar1, "mors"),
true = os:unsetenv(EnvVar1),
@@ -397,19 +365,18 @@ os_env(Config) when is_list(Config) ->
true = os:unsetenv(EnvVar1), % unset unset variable
%% os:putenv, os:getenv and os:unsetenv currently use a temp
%% buffer of size 1024 for storing key+value
- ?line os_env_long(1010, 1030, "hej hopp").
+ os_env_long(1010, 1030, "hej hopp").
os_env_long(Min, Max, _Value) when Min > Max ->
- ?line ok;
+ ok;
os_env_long(Min, Max, Value) ->
- ?line EnvVar = lists:duplicate(Min, $X),
- ?line true = os:putenv(EnvVar, Value),
- ?line Value = os:getenv(EnvVar),
+ EnvVar = lists:duplicate(Min, $X),
+ true = os:putenv(EnvVar, Value),
+ Value = os:getenv(EnvVar),
true = os:unsetenv(EnvVar),
- ?line os_env_long(Min+1, Max, Value).
+ os_env_long(Min+1, Max, Value).
-otp_7526(doc) ->
- ["Test that string:to_integer does not Halloc in wrong order."];
+%% Test that string:to_integer does not Halloc in wrong order.
otp_7526(Config) when is_list(Config) ->
ok = test_7526(256).
@@ -424,15 +391,15 @@ do_test_7526(N,M) ->
{Self, Ref} = {self(), make_ref()},
T = erlang:make_tuple(M,0),
spawn_opt(fun()->
- L = iterate_7526(N, []),
- BadList = [X || X <- L, X =/= 9223372036854775808],
- BadLen = length(BadList),
- M = length(tuple_to_list(T)),
- %%io:format("~b bad conversions: ~p~n", [BadLen, BadList]),
- Self ! {done, Ref, BadLen}
- end,
- [link,{fullsweep_after,0}]),
- receive {done, Ref, Len} -> Len end.
+ L = iterate_7526(N, []),
+ BadList = [X || X <- L, X =/= 9223372036854775808],
+ BadLen = length(BadList),
+ M = length(tuple_to_list(T)),
+ %%io:format("~b bad conversions: ~p~n", [BadLen, BadList]),
+ Self ! {done, Ref, BadLen}
+ end,
+ [link,{fullsweep_after,0}]),
+ receive {done, Ref, Len} -> Len end.
test_7526(0) ->
@@ -456,57 +423,53 @@ binary_to_atom(Config) when is_list(Config) ->
LongBin = list_to_binary(Long),
%% latin1
- ?line '' = test_binary_to_atom(<<>>, latin1),
- ?line '\377' = test_binary_to_atom(<<255>>, latin1),
- ?line HalfLongAtom = test_binary_to_atom(HalfLongBin, latin1),
- ?line LongAtom = test_binary_to_atom(LongBin, latin1),
+ '' = test_binary_to_atom(<<>>, latin1),
+ '\377' = test_binary_to_atom(<<255>>, latin1),
+ HalfLongAtom = test_binary_to_atom(HalfLongBin, latin1),
+ LongAtom = test_binary_to_atom(LongBin, latin1),
%% utf8
- ?line '' = test_binary_to_atom(<<>>, utf8),
- ?line HalfLongAtom = test_binary_to_atom(HalfLongBin, utf8),
- ?line HalfLongAtom = test_binary_to_atom(HalfLongBin, unicode),
- ?line [] = [C || C <- lists:seq(128, 255),
+ '' = test_binary_to_atom(<<>>, utf8),
+ HalfLongAtom = test_binary_to_atom(HalfLongBin, utf8),
+ HalfLongAtom = test_binary_to_atom(HalfLongBin, unicode),
+ [] = [C || C <- lists:seq(128, 255),
begin
list_to_atom([C]) =/=
test_binary_to_atom(<<C/utf8>>, utf8)
end],
%% badarg failures.
- ?line fail_binary_to_atom(atom),
- ?line fail_binary_to_atom(42),
- ?line fail_binary_to_atom({a,b,c}),
- ?line fail_binary_to_atom([1,2,3]),
- ?line fail_binary_to_atom([]),
- ?line fail_binary_to_atom(42.0),
- ?line fail_binary_to_atom(self()),
- ?line fail_binary_to_atom(make_ref()),
- ?line fail_binary_to_atom(<<0:7>>),
- ?line fail_binary_to_atom(<<42:13>>),
- ?line ?BADARG(binary_to_atom(id(<<>>), blurf)),
- ?line ?BADARG(binary_to_atom(id(<<>>), [])),
+ fail_binary_to_atom(atom),
+ fail_binary_to_atom(42),
+ fail_binary_to_atom({a,b,c}),
+ fail_binary_to_atom([1,2,3]),
+ fail_binary_to_atom([]),
+ fail_binary_to_atom(42.0),
+ fail_binary_to_atom(self()),
+ fail_binary_to_atom(make_ref()),
+ fail_binary_to_atom(<<0:7>>),
+ fail_binary_to_atom(<<42:13>>),
+ ?BADARG(binary_to_atom(id(<<>>), blurf)),
+ ?BADARG(binary_to_atom(id(<<>>), [])),
%% Bad UTF8 sequences.
- ?line ?BADARG(binary_to_atom(id(<<255>>), utf8)),
- ?line ?BADARG(binary_to_atom(id(<<255,0>>), utf8)),
- ?line ?BADARG(binary_to_atom(id(<<16#C0,16#80>>), utf8)), %Overlong 0.
- ?line [?BADARG(binary_to_atom(<<C/utf8>>, utf8)) ||
- C <- lists:seq(256, 16#D7FF)],
- ?line [?BADARG(binary_to_atom(<<C/utf8>>, utf8)) ||
- C <- lists:seq(16#E000, 16#FFFD)],
- ?line [?BADARG(binary_to_atom(<<C/utf8>>, utf8)) ||
- C <- lists:seq(16#10000, 16#8FFFF)],
- ?line [?BADARG(binary_to_atom(<<C/utf8>>, utf8)) ||
- C <- lists:seq(16#90000, 16#10FFFF)],
+ ?BADARG(binary_to_atom(id(<<255>>), utf8)),
+ ?BADARG(binary_to_atom(id(<<255,0>>), utf8)),
+ ?BADARG(binary_to_atom(id(<<16#C0,16#80>>), utf8)), %Overlong 0.
+ [?BADARG(binary_to_atom(<<C/utf8>>, utf8)) || C <- lists:seq(256, 16#D7FF)],
+ [?BADARG(binary_to_atom(<<C/utf8>>, utf8)) || C <- lists:seq(16#E000, 16#FFFD)],
+ [?BADARG(binary_to_atom(<<C/utf8>>, utf8)) || C <- lists:seq(16#10000, 16#8FFFF)],
+ [?BADARG(binary_to_atom(<<C/utf8>>, utf8)) || C <- lists:seq(16#90000, 16#10FFFF)],
%% system_limit failures.
- ?line ?SYS_LIMIT(binary_to_atom(id(<<0:512/unit:8,255>>), utf8)),
- ?line ?SYS_LIMIT(binary_to_atom(id(<<0:512/unit:8,255,0>>), utf8)),
- ?line ?SYS_LIMIT(binary_to_atom(<<0:256/unit:8>>, latin1)),
- ?line ?SYS_LIMIT(binary_to_atom(<<0:257/unit:8>>, latin1)),
- ?line ?SYS_LIMIT(binary_to_atom(<<0:512/unit:8>>, latin1)),
- ?line ?SYS_LIMIT(binary_to_atom(<<0:256/unit:8>>, utf8)),
- ?line ?SYS_LIMIT(binary_to_atom(<<0:257/unit:8>>, utf8)),
- ?line ?SYS_LIMIT(binary_to_atom(<<0:512/unit:8>>, utf8)),
+ ?SYS_LIMIT(binary_to_atom(id(<<0:512/unit:8,255>>), utf8)),
+ ?SYS_LIMIT(binary_to_atom(id(<<0:512/unit:8,255,0>>), utf8)),
+ ?SYS_LIMIT(binary_to_atom(<<0:256/unit:8>>, latin1)),
+ ?SYS_LIMIT(binary_to_atom(<<0:257/unit:8>>, latin1)),
+ ?SYS_LIMIT(binary_to_atom(<<0:512/unit:8>>, latin1)),
+ ?SYS_LIMIT(binary_to_atom(<<0:256/unit:8>>, utf8)),
+ ?SYS_LIMIT(binary_to_atom(<<0:257/unit:8>>, utf8)),
+ ?SYS_LIMIT(binary_to_atom(<<0:512/unit:8>>, utf8)),
ok.
test_binary_to_atom(Bin0, Encoding) ->
@@ -519,49 +482,49 @@ test_binary_to_atom(Bin0, Encoding) ->
fail_binary_to_atom(Bin) ->
try
- binary_to_atom(Bin, latin1)
+ binary_to_atom(Bin, latin1)
catch
- error:badarg ->
- ok
+ error:badarg ->
+ ok
end,
try
- binary_to_atom(Bin, utf8)
+ binary_to_atom(Bin, utf8)
catch
- error:badarg ->
- ok
+ error:badarg ->
+ ok
end,
try
- binary_to_existing_atom(Bin, latin1)
+ binary_to_existing_atom(Bin, latin1)
catch
- error:badarg ->
- ok
+ error:badarg ->
+ ok
end,
try
- binary_to_existing_atom(Bin, utf8)
+ binary_to_existing_atom(Bin, utf8)
catch
- error:badarg ->
- ok
+ error:badarg ->
+ ok
end.
binary_to_existing_atom(Config) when is_list(Config) ->
- ?line UnlikelyBin = <<"ou0897979655678dsfj923874390867er869fds973qerueoru">>,
+ UnlikelyBin = <<"ou0897979655678dsfj923874390867er869fds973qerueoru">>,
try
- ?line binary_to_existing_atom(UnlikelyBin, latin1),
- ?line ?t:fail()
+ binary_to_existing_atom(UnlikelyBin, latin1),
+ ct:fail(atom_exists)
catch
error:badarg -> ok
end,
try
- ?line binary_to_existing_atom(UnlikelyBin, utf8),
- ?line ?t:fail()
+ binary_to_existing_atom(UnlikelyBin, utf8),
+ ct:fail(atom_exists)
catch
error:badarg -> ok
end,
- ?line UnlikelyAtom = binary_to_atom(id(UnlikelyBin), latin1),
- ?line UnlikelyAtom = binary_to_existing_atom(UnlikelyBin, latin1),
+ UnlikelyAtom = binary_to_atom(id(UnlikelyBin), latin1),
+ UnlikelyAtom = binary_to_existing_atom(UnlikelyBin, latin1),
ok.
@@ -574,32 +537,32 @@ atom_to_binary(Config) when is_list(Config) ->
LongBin = list_to_binary(Long),
%% latin1
- ?line <<>> = atom_to_binary('', latin1),
- ?line <<"abc">> = atom_to_binary(abc, latin1),
- ?line <<127>> = atom_to_binary('\177', latin1),
- ?line HalfLongBin = atom_to_binary(HalfLongAtom, latin1),
- ?line LongBin = atom_to_binary(LongAtom, latin1),
+ <<>> = atom_to_binary('', latin1),
+ <<"abc">> = atom_to_binary(abc, latin1),
+ <<127>> = atom_to_binary('\177', latin1),
+ HalfLongBin = atom_to_binary(HalfLongAtom, latin1),
+ LongBin = atom_to_binary(LongAtom, latin1),
%% utf8.
- ?line <<>> = atom_to_binary('', utf8),
- ?line <<>> = atom_to_binary('', unicode),
- ?line <<127>> = atom_to_binary('\177', utf8),
- ?line <<"abcdef">> = atom_to_binary(abcdef, utf8),
- ?line HalfLongBin = atom_to_binary(HalfLongAtom, utf8),
- ?line LongAtomBin = atom_to_binary(LongAtom, utf8),
- ?line verify_long_atom_bin(LongAtomBin, 0),
+ <<>> = atom_to_binary('', utf8),
+ <<>> = atom_to_binary('', unicode),
+ <<127>> = atom_to_binary('\177', utf8),
+ <<"abcdef">> = atom_to_binary(abcdef, utf8),
+ HalfLongBin = atom_to_binary(HalfLongAtom, utf8),
+ LongAtomBin = atom_to_binary(LongAtom, utf8),
+ verify_long_atom_bin(LongAtomBin, 0),
%% Failing cases.
- ?line fail_atom_to_binary(<<1>>),
- ?line fail_atom_to_binary(42),
- ?line fail_atom_to_binary({a,b,c}),
- ?line fail_atom_to_binary([1,2,3]),
- ?line fail_atom_to_binary([]),
- ?line fail_atom_to_binary(42.0),
- ?line fail_atom_to_binary(self()),
- ?line fail_atom_to_binary(make_ref()),
- ?line ?BADARG(atom_to_binary(id(a), blurf)),
- ?line ?BADARG(atom_to_binary(id(b), [])),
+ fail_atom_to_binary(<<1>>),
+ fail_atom_to_binary(42),
+ fail_atom_to_binary({a,b,c}),
+ fail_atom_to_binary([1,2,3]),
+ fail_atom_to_binary([]),
+ fail_atom_to_binary(42.0),
+ fail_atom_to_binary(self()),
+ fail_atom_to_binary(make_ref()),
+ ?BADARG(atom_to_binary(id(a), blurf)),
+ ?BADARG(atom_to_binary(id(b), [])),
ok.
verify_long_atom_bin(<<I/utf8,T/binary>>, I) ->
@@ -608,74 +571,73 @@ verify_long_atom_bin(<<>>, 255) -> ok.
fail_atom_to_binary(Term) ->
try
- atom_to_binary(Term, latin1)
+ atom_to_binary(Term, latin1)
catch
- error:badarg ->
- ok
+ error:badarg ->
+ ok
end,
try
- atom_to_binary(Term, utf8)
+ atom_to_binary(Term, utf8)
catch
- error:badarg ->
- ok
+ error:badarg ->
+ ok
end.
min_max(Config) when is_list(Config) ->
- ?line a = erlang:min(id(a), a),
- ?line a = erlang:min(id(a), b),
- ?line a = erlang:min(id(b), a),
- ?line b = erlang:min(id(b), b),
- ?line a = erlang:max(id(a), a),
- ?line b = erlang:max(id(a), b),
- ?line b = erlang:max(id(b), a),
- ?line b = erlang:max(id(b), b),
-
- ?line 42.0 = erlang:min(42.0, 42),
- ?line 42.0 = erlang:max(42.0, 42),
+ a = erlang:min(id(a), a),
+ a = erlang:min(id(a), b),
+ a = erlang:min(id(b), a),
+ b = erlang:min(id(b), b),
+ a = erlang:max(id(a), a),
+ b = erlang:max(id(a), b),
+ b = erlang:max(id(b), a),
+ b = erlang:max(id(b), b),
+
+ 42.0 = erlang:min(42.0, 42),
+ 42.0 = erlang:max(42.0, 42),
%% And now (R14) they are also autoimported!
- ?line a = min(id(a), a),
- ?line a = min(id(a), b),
- ?line a = min(id(b), a),
- ?line b = min(id(b), b),
- ?line a = max(id(a), a),
- ?line b = max(id(a), b),
- ?line b = max(id(b), a),
- ?line b = max(id(b), b),
-
- ?line 42.0 = min(42.0, 42),
- ?line 42.0 = max(42.0, 42),
-
+ a = min(id(a), a),
+ a = min(id(a), b),
+ a = min(id(b), a),
+ b = min(id(b), b),
+ a = max(id(a), a),
+ b = max(id(a), b),
+ b = max(id(b), a),
+ b = max(id(b), b),
+
+ 42.0 = min(42.0, 42),
+ 42.0 = max(42.0, 42),
ok.
erlang_halt(Config) when is_list(Config) ->
try erlang:halt(undefined) of
- _-> ?t:fail({erlang,halt,{undefined}})
+ _-> ct:fail({erlang,halt,{undefined}})
catch error:badarg -> ok end,
try halt(undefined) of
- _-> ?t:fail({halt,{undefined}})
+ _-> ct:fail({halt,{undefined}})
catch error:badarg -> ok end,
try erlang:halt(undefined, []) of
- _-> ?t:fail({erlang,halt,{undefined,[]}})
+ _-> ct:fail({erlang,halt,{undefined,[]}})
catch error:badarg -> ok end,
try halt(undefined, []) of
- _-> ?t:fail({halt,{undefined,[]}})
+ _-> ct:fail({halt,{undefined,[]}})
catch error:badarg -> ok end,
try halt(0, undefined) of
- _-> ?t:fail({halt,{0,undefined}})
+ _-> ct:fail({halt,{0,undefined}})
catch error:badarg -> ok end,
try halt(0, [undefined]) of
- _-> ?t:fail({halt,{0,[undefined]}})
+ _-> ct:fail({halt,{0,[undefined]}})
catch error:badarg -> ok end,
try halt(0, [{undefined,true}]) of
- _-> ?t:fail({halt,{0,[{undefined,true}]}})
+ _-> ct:fail({halt,{0,[{undefined,true}]}})
catch error:badarg -> ok end,
try halt(0, [{flush,undefined}]) of
- _-> ?t:fail({halt,{0,[{flush,undefined}]}})
+ _-> ct:fail({halt,{0,[{flush,undefined}]}})
catch error:badarg -> ok end,
try halt(0, [{flush,true,undefined}]) of
- _-> ?t:fail({halt,{0,[{flush,true,undefined}]}})
+ _-> ct:fail({halt,{0,[{flush,true,undefined}]}})
catch error:badarg -> ok end,
H = hostname(),
{ok,N1} = slave:start(H, halt_node1),
diff --git a/erts/emulator/test/big_SUITE.erl b/erts/emulator/test/big_SUITE.erl
index bb77235253..402751393a 100644
--- a/erts/emulator/test/big_SUITE.erl
+++ b/erts/emulator/test/big_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.
@@ -20,8 +20,8 @@
-module(big_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, groups/0]).
+
-export([t_div/1, eq_28/1, eq_32/1, eq_big/1, eq_math/1, big_literals/1,
borders/1, negative/1, big_float_1/1, big_float_2/1,
shift_limit_1/1, powmod/1, system_limit/1, toobig/1, otp_6692/1]).
@@ -32,11 +32,12 @@
-export([fac/1, fib/1, pow/2, gcd/2, lcm/2]).
--export([init_per_testcase/2, end_per_testcase/2]).
-include_lib("common_test/include/ct.hrl").
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap, {minutes, 3}}].
all() ->
[t_div, eq_28, eq_32, eq_big, eq_math, big_literals,
@@ -46,27 +47,6 @@ all() ->
groups() ->
[{big_float, [], [big_float_1, big_float_2]}].
-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(Func, Config) when is_atom(Func), is_list(Config) ->
- Dog=?t:timetrap(?t:minutes(3)),
- [{watchdog, Dog}|Config].
-
-end_per_testcase(_Func, Config) ->
- Dog=?config(watchdog, Config),
- ?t:timetrap_cancel(Dog).
-
%%
%% Syntax of data files:
%% Expr1 = Expr2.
@@ -95,7 +75,7 @@ eq_math(Config) when is_list(Config) ->
test(TestFile).
-borders(doc) -> "Tests border cases between small/big.";
+%% Tests border cases between small/big.
borders(Config) when is_list(Config) ->
TestFile = test_file(Config, "borders.dat"),
test(TestFile).
@@ -107,7 +87,7 @@ negative(Config) when is_list(Config) ->
%% Find test file
test_file(Config, Name) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
filename:join(DataDir, Name).
%%
@@ -119,12 +99,12 @@ test(File) ->
test(File, [node()]).
test(File, Nodes) ->
- ?line {ok,Fd} = file:open(File, [read]),
+ {ok,Fd} = file:open(File, [read]),
Res = test(File, Fd, Nodes),
file:close(Fd),
case Res of
{0,Cases} -> {comment, integer_to_list(Cases) ++ " cases"};
- {_,_} -> test_server:fail()
+ {_,_} -> ct:fail("failed")
end.
test(File, Fd, Ns) ->
@@ -156,7 +136,7 @@ multi_match(Ns, Expr) ->
multi_match(Ns, Expr, []).
multi_match([Node|Ns], Expr, Rs) ->
- ?line X = rpc:call(Node, big_SUITE, eval, [Expr]),
+ X = rpc:call(Node, big_SUITE, eval, [Expr]),
if X == 0 -> multi_match(Ns, Expr, Rs);
true -> multi_match(Ns, Expr, [{Node,X}|Rs])
end;
@@ -248,10 +228,10 @@ lcm(Q, R) ->
%% Test case t_div cut in from R2D test suite.
t_div(Config) when is_list(Config) ->
- ?line 'try'(fun() -> 98765432101234 div 98765432101235 end, 0),
+ 'try'(fun() -> 98765432101234 div 98765432101235 end, 0),
% Big remainder, small quotient.
- ?line 'try'(fun() -> 339254531512 div 68719476736 end, 4),
+ 'try'(fun() -> 339254531512 div 68719476736 end, 4),
ok.
'try'(Fun, Result) ->
@@ -265,65 +245,60 @@ t_div(Config) when is_list(Config) ->
{result, Result} ->
'try'(Iter-1, Fun, Result, [0|Filler]);
{result, Other} ->
- io:format("Expected ~p; got ~p~n", [Result, Other]),
- test_server:fail()
+ ct:fail("Expected ~p; got ~p~n", [Result, Other])
end.
init(ReplyTo, Fun, _Filler) ->
ReplyTo ! {result, Fun()}.
-big_literals(doc) ->
- "Tests that big-number literals work correctly.";
+%% Tests that big-number literals work correctly.
big_literals(Config) when is_list(Config) ->
%% Note: The literal test cannot be compiler on a pre-R4 Beam emulator,
%% so we compile it now.
- ?line DataDir = ?config(data_dir, Config),
- ?line Test = filename:join(DataDir, "literal_test"),
- ?line {ok, Mod, Bin} = compile:file(Test, [binary]),
- ?line {module, Mod} = code:load_binary(Mod, Mod, Bin),
- ?line ok = Mod:t(),
+ DataDir = proplists:get_value(data_dir, Config),
+ Test = filename:join(DataDir, "literal_test"),
+ {ok, Mod, Bin} = compile:file(Test, [binary]),
+ {module, Mod} = code:load_binary(Mod, Mod, Bin),
+ ok = Mod:t(),
ok.
-big_float_1(doc) ->
- ["OTP-2436, part 1"];
+%% OTP-2436, part 1
big_float_1(Config) when is_list(Config) ->
%% F is a number very close to a maximum float.
- ?line F = id(1.7e308),
- ?line I = trunc(F),
- ?line true = (I == F),
- ?line false = (I /= F),
- ?line true = (I > F/2),
- ?line false = (I =< F/2),
- ?line true = (I*2 >= F),
- ?line false = (I*2 < F),
- ?line true = (I*I > F),
- ?line false = (I*I =< F),
-
- ?line true = (F == I),
- ?line false = (F /= I),
- ?line false = (F/2 > I),
- ?line true = (F/2 =< I),
- ?line false = (F >= I*2),
- ?line true = (F < I*2),
- ?line false = (F > I*I),
- ?line true = (F =< I*I),
+ F = id(1.7e308),
+ I = trunc(F),
+ true = (I == F),
+ false = (I /= F),
+ true = (I > F/2),
+ false = (I =< F/2),
+ true = (I*2 >= F),
+ false = (I*2 < F),
+ true = (I*I > F),
+ false = (I*I =< F),
+
+ true = (F == I),
+ false = (F /= I),
+ false = (F/2 > I),
+ true = (F/2 =< I),
+ false = (F >= I*2),
+ true = (F < I*2),
+ false = (F > I*I),
+ true = (F =< I*I),
ok.
-big_float_2(doc) ->
- ["OTP-2436, part 2"];
+%% "OTP-2436, part 2
big_float_2(Config) when is_list(Config) ->
- ?line F = id(1.7e308),
- ?line I = trunc(F),
- ?line {'EXIT', _} = (catch 1/(2*I)),
- ?line _Ignore = 2/I,
- ?line {'EXIT', _} = (catch 4/(2*I)),
+ F = id(1.7e308),
+ I = trunc(F),
+ {'EXIT', _} = (catch 1/(2*I)),
+ _Ignore = 2/I,
+ {'EXIT', _} = (catch 4/(2*I)),
ok.
-shift_limit_1(doc) ->
- ["OTP-3256"];
+%% OTP-3256
shift_limit_1(Config) when is_list(Config) ->
- ?line case catch (id(1) bsl 100000000) of
+ case catch (id(1) bsl 100000000) of
{'EXIT', {system_limit, _}} ->
ok
end,
@@ -352,16 +327,16 @@ powmod(A, B, C) ->
end.
system_limit(Config) when is_list(Config) ->
- ?line Maxbig = maxbig(),
- ?line {'EXIT',{system_limit,_}} = (catch Maxbig+1),
- ?line {'EXIT',{system_limit,_}} = (catch -Maxbig-1),
- ?line {'EXIT',{system_limit,_}} = (catch 2*Maxbig),
- ?line {'EXIT',{system_limit,_}} = (catch bnot Maxbig),
- ?line {'EXIT',{system_limit,_}} = (catch apply(erlang, id('bnot'), [Maxbig])),
- ?line {'EXIT',{system_limit,_}} = (catch Maxbig bsl 2),
- ?line {'EXIT',{system_limit,_}} = (catch apply(erlang, id('bsl'), [Maxbig,2])),
- ?line {'EXIT',{system_limit,_}} = (catch id(1) bsl (1 bsl 45)),
- ?line {'EXIT',{system_limit,_}} = (catch id(1) bsl (1 bsl 69)),
+ Maxbig = maxbig(),
+ {'EXIT',{system_limit,_}} = (catch Maxbig+1),
+ {'EXIT',{system_limit,_}} = (catch -Maxbig-1),
+ {'EXIT',{system_limit,_}} = (catch 2*Maxbig),
+ {'EXIT',{system_limit,_}} = (catch bnot Maxbig),
+ {'EXIT',{system_limit,_}} = (catch apply(erlang, id('bnot'), [Maxbig])),
+ {'EXIT',{system_limit,_}} = (catch Maxbig bsl 2),
+ {'EXIT',{system_limit,_}} = (catch apply(erlang, id('bsl'), [Maxbig,2])),
+ {'EXIT',{system_limit,_}} = (catch id(1) bsl (1 bsl 45)),
+ {'EXIT',{system_limit,_}} = (catch id(1) bsl (1 bsl 69)),
ok.
maxbig() ->
@@ -372,7 +347,7 @@ maxbig() ->
id(I) -> I.
toobig(Config) when is_list(Config) ->
- ?line {'EXIT',{{badmatch,_},_}} = (catch toobig()),
+ {'EXIT',{{badmatch,_},_}} = (catch toobig()),
ok.
toobig() ->
@@ -381,12 +356,9 @@ toobig() ->
<<ANr:ASize>> = A, % should fail
ANr band ANr.
-otp_6692(suite) ->
- [];
-otp_6692(doc) ->
- ["Tests for DIV/REM bug reported in OTP-6692"];
+%% Tests for DIV/REM bug reported in OTP-6692
otp_6692(Config) when is_list(Config)->
- ?line loop1(1,1000).
+ loop1(1,1000).
fact(N) ->
fact(N,1).
diff --git a/erts/emulator/test/big_SUITE_data/literal_test.erl b/erts/emulator/test/big_SUITE_data/literal_test.erl
index 1620693bfa..17c4db467a 100644
--- a/erts/emulator/test/big_SUITE_data/literal_test.erl
+++ b/erts/emulator/test/big_SUITE_data/literal_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/erts/emulator/test/binary_SUITE.erl b/erts/emulator/test/binary_SUITE.erl
index c5e3226a13..1c7d278bb0 100644
--- a/erts/emulator/test/binary_SUITE.erl
+++ b/erts/emulator/test/binary_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.
@@ -106,17 +106,17 @@ end_per_testcase(_Func, _Config) ->
copy_terms(Config) when is_list(Config) ->
Self = self(),
- ?line Pid = spawn_link(fun() -> copy_server(Self) end),
+ Pid = spawn_link(fun() -> copy_server(Self) end),
F = fun(Term) ->
Pid ! Term,
receive
Term -> ok;
Other ->
io:format("Sent: ~P\nGot back:~P", [Term,12,Other,12]),
- ?t:fail(bad_term)
+ ct:fail(bad_term)
end
end,
- ?line test_terms(F),
+ test_terms(F),
ok.
copy_server(Parent) ->
@@ -129,154 +129,152 @@ copy_server(Parent) ->
%% Tests list_to_binary/1, binary_to_list/1 and size/1,
%% using flat lists.
-conversions(suite) -> [];
conversions(Config) when is_list(Config) ->
- ?line test_bin([]),
- ?line test_bin([1]),
- ?line test_bin([1, 2]),
- ?line test_bin([1, 2, 3]),
- ?line test_bin(lists:seq(0, ?heap_binary_size)),
- ?line test_bin(lists:seq(0, ?heap_binary_size+1)),
- ?line test_bin(lists:seq(0, 255)),
- ?line test_bin(lists:duplicate(50000, $@)),
+ test_bin([]),
+ test_bin([1]),
+ test_bin([1, 2]),
+ test_bin([1, 2, 3]),
+ test_bin(lists:seq(0, ?heap_binary_size)),
+ test_bin(lists:seq(0, ?heap_binary_size+1)),
+ test_bin(lists:seq(0, 255)),
+ test_bin(lists:duplicate(50000, $@)),
%% Binary in list.
List = [1,2,3,4,5],
- ?line B1 = make_sub_binary(list_to_binary(List)),
- ?line 5 = size(B1),
- ?line 5 = size(make_unaligned_sub_binary(B1)),
- ?line 40 = bit_size(B1),
- ?line 40 = bit_size(make_unaligned_sub_binary(B1)),
- ?line B2 = list_to_binary([42,B1,19]),
- ?line B2 = list_to_binary([42,make_unaligned_sub_binary(B1),19]),
- ?line B2 = iolist_to_binary(B2),
- ?line B2 = iolist_to_binary(make_unaligned_sub_binary(B2)),
- ?line 7 = size(B2),
- ?line 7 = size(make_sub_binary(B2)),
- ?line 56 = bit_size(B2),
- ?line 56 = bit_size(make_sub_binary(B2)),
- ?line [42,1,2,3,4,5,19] = binary_to_list(B2),
- ?line [42,1,2,3,4,5,19] = binary_to_list(make_sub_binary(B2)),
- ?line [42,1,2,3,4,5,19] = binary_to_list(make_unaligned_sub_binary(B2)),
- ?line [42,1,2,3,4,5,19] = bitstring_to_list(B2),
- ?line [42,1,2,3,4,5,19] = bitstring_to_list(make_sub_binary(B2)),
- ?line [42,1,2,3,4,5,19] = bitstring_to_list(make_unaligned_sub_binary(B2)),
+ B1 = make_sub_binary(list_to_binary(List)),
+ 5 = size(B1),
+ 5 = size(make_unaligned_sub_binary(B1)),
+ 40 = bit_size(B1),
+ 40 = bit_size(make_unaligned_sub_binary(B1)),
+ B2 = list_to_binary([42,B1,19]),
+ B2 = list_to_binary([42,make_unaligned_sub_binary(B1),19]),
+ B2 = iolist_to_binary(B2),
+ B2 = iolist_to_binary(make_unaligned_sub_binary(B2)),
+ 7 = size(B2),
+ 7 = size(make_sub_binary(B2)),
+ 56 = bit_size(B2),
+ 56 = bit_size(make_sub_binary(B2)),
+ [42,1,2,3,4,5,19] = binary_to_list(B2),
+ [42,1,2,3,4,5,19] = binary_to_list(make_sub_binary(B2)),
+ [42,1,2,3,4,5,19] = binary_to_list(make_unaligned_sub_binary(B2)),
+ [42,1,2,3,4,5,19] = bitstring_to_list(B2),
+ [42,1,2,3,4,5,19] = bitstring_to_list(make_sub_binary(B2)),
+ [42,1,2,3,4,5,19] = bitstring_to_list(make_unaligned_sub_binary(B2)),
ok.
test_bin(List) ->
- ?line Size = length(List),
- ?line Bin = list_to_binary(List),
- ?line Bin = iolist_to_binary(List),
- ?line Bin = list_to_bitstring(List),
- ?line Size = iolist_size(List),
- ?line Size = iolist_size(Bin),
- ?line Size = iolist_size(make_unaligned_sub_binary(Bin)),
- ?line Size = size(Bin),
- ?line Size = size(make_sub_binary(Bin)),
- ?line Size = size(make_unaligned_sub_binary(Bin)),
- ?line List = binary_to_list(Bin),
- ?line List = binary_to_list(make_sub_binary(Bin)),
- ?line List = binary_to_list(make_unaligned_sub_binary(Bin)),
- ?line List = bitstring_to_list(Bin),
- ?line List = bitstring_to_list(make_unaligned_sub_binary(Bin)).
+ Size = length(List),
+ Bin = list_to_binary(List),
+ Bin = iolist_to_binary(List),
+ Bin = list_to_bitstring(List),
+ Size = iolist_size(List),
+ Size = iolist_size(Bin),
+ Size = iolist_size(make_unaligned_sub_binary(Bin)),
+ Size = size(Bin),
+ Size = size(make_sub_binary(Bin)),
+ Size = size(make_unaligned_sub_binary(Bin)),
+ List = binary_to_list(Bin),
+ List = binary_to_list(make_sub_binary(Bin)),
+ List = binary_to_list(make_unaligned_sub_binary(Bin)),
+ List = bitstring_to_list(Bin),
+ List = bitstring_to_list(make_unaligned_sub_binary(Bin)).
%% Tests list_to_binary/1, iolist_to_binary/1, list_to_bitstr/1, binary_to_list/1,3,
%% bitstr_to_list/1, and size/1, using deep lists.
deep_lists(Config) when is_list(Config) ->
- ?line test_deep_list(["abc"]),
- ?line test_deep_list([[12,13,[123,15]]]),
- ?line test_deep_list([[12,13,[lists:seq(0, 255), []]]]),
+ test_deep_list(["abc"]),
+ test_deep_list([[12,13,[123,15]]]),
+ test_deep_list([[12,13,[lists:seq(0, 255), []]]]),
ok.
test_deep_list(List) ->
- ?line FlatList = lists:flatten(List),
- ?line Size = length(FlatList),
- ?line Bin = list_to_binary(List),
- ?line Bin = iolist_to_binary(List),
- ?line Bin = iolist_to_binary(Bin),
- ?line Bin = list_to_bitstring(List),
- ?line Size = size(Bin),
- ?line Size = iolist_size(List),
- ?line Size = iolist_size(FlatList),
- ?line Size = iolist_size(Bin),
- ?line Bitsize = bit_size(Bin),
- ?line Bitsize = 8*Size,
- ?line FlatList = binary_to_list(Bin),
- ?line FlatList = bitstring_to_list(Bin),
+ FlatList = lists:flatten(List),
+ Size = length(FlatList),
+ Bin = list_to_binary(List),
+ Bin = iolist_to_binary(List),
+ Bin = iolist_to_binary(Bin),
+ Bin = list_to_bitstring(List),
+ Size = size(Bin),
+ Size = iolist_size(List),
+ Size = iolist_size(FlatList),
+ Size = iolist_size(Bin),
+ Bitsize = bit_size(Bin),
+ Bitsize = 8*Size,
+ FlatList = binary_to_list(Bin),
+ FlatList = bitstring_to_list(Bin),
io:format("testing plain binary..."),
- ?line t_binary_to_list_3(FlatList, Bin, 1, Size),
+ t_binary_to_list_3(FlatList, Bin, 1, Size),
io:format("testing unaligned sub binary..."),
- ?line t_binary_to_list_3(FlatList, make_unaligned_sub_binary(Bin), 1, Size).
+ t_binary_to_list_3(FlatList, make_unaligned_sub_binary(Bin), 1, Size).
t_binary_to_list_3(List, Bin, From, To) ->
- ?line going_up(List, Bin, From, To),
- ?line going_down(List, Bin, From, To),
- ?line going_center(List, Bin, From, To).
+ going_up(List, Bin, From, To),
+ going_down(List, Bin, From, To),
+ going_center(List, Bin, From, To).
going_up(List, Bin, From, To) when From =< To ->
- ?line List = binary_to_list(Bin, From, To),
- ?line going_up(tl(List), Bin, From+1, To);
+ List = binary_to_list(Bin, From, To),
+ going_up(tl(List), Bin, From+1, To);
going_up(_List, _Bin, From, To) when From > To ->
ok.
going_down(List, Bin, From, To) when To > 0->
- ?line compare(List, binary_to_list(Bin, From, To), To-From+1),
- ?line going_down(List, Bin, From, To-1);
+ compare(List, binary_to_list(Bin, From, To), To-From+1),
+ going_down(List, Bin, From, To-1);
going_down(_List, _Bin, _From, _To) ->
ok.
going_center(List, Bin, From, To) when From >= To ->
- ?line compare(List, binary_to_list(Bin, From, To), To-From+1),
- ?line going_center(tl(List), Bin, From+1, To-1);
+ compare(List, binary_to_list(Bin, From, To), To-From+1),
+ going_center(tl(List), Bin, From+1, To-1);
going_center(_List, _Bin, _From, _To) ->
ok.
compare([X|Rest1], [X|Rest2], Left) when Left > 0 ->
- ?line compare(Rest1, Rest2, Left-1);
+ compare(Rest1, Rest2, Left-1);
compare([_X|_], [_Y|_], _Left) ->
- ?line test_server:fail();
+ ct:fail("compare fail");
compare(_List, [], 0) ->
ok.
deep_bitstr_lists(Config) when is_list(Config) ->
- ?line {<<7:3>>,[<<7:3>>]} = test_deep_bitstr([<<7:3>>]),
- ?line {<<42,5:3>>=Bin,[42,<<5:3>>]=List} = test_deep_bitstr([42,<<5:3>>]),
- ?line {Bin,List} = test_deep_bitstr([42|<<5:3>>]),
- ?line {Bin,List} = test_deep_bitstr([<<42,5:3>>]),
- ?line {Bin,List} = test_deep_bitstr([<<1:3>>,<<10:5>>|<<5:3>>]),
- ?line {Bin,List} = test_deep_bitstr([<<1:3>>,<<10:5>>,<<5:3>>]),
- ?line {Bin,List} = test_deep_bitstr([[<<1:3>>,<<10:5>>],[],<<5:3>>]),
- ?line {Bin,List} = test_deep_bitstr([[[<<1:3>>]|<<10:5>>],[],<<5:3>>]),
- ?line {Bin,List} = test_deep_bitstr([[<<0:1>>,<<0:1>>,[],<<1:1>>,<<10:5>>],
+ {<<7:3>>,[<<7:3>>]} = test_deep_bitstr([<<7:3>>]),
+ {<<42,5:3>>=Bin,[42,<<5:3>>]=List} = test_deep_bitstr([42,<<5:3>>]),
+ {Bin,List} = test_deep_bitstr([42|<<5:3>>]),
+ {Bin,List} = test_deep_bitstr([<<42,5:3>>]),
+ {Bin,List} = test_deep_bitstr([<<1:3>>,<<10:5>>|<<5:3>>]),
+ {Bin,List} = test_deep_bitstr([<<1:3>>,<<10:5>>,<<5:3>>]),
+ {Bin,List} = test_deep_bitstr([[<<1:3>>,<<10:5>>],[],<<5:3>>]),
+ {Bin,List} = test_deep_bitstr([[[<<1:3>>]|<<10:5>>],[],<<5:3>>]),
+ {Bin,List} = test_deep_bitstr([[<<0:1>>,<<0:1>>,[],<<1:1>>,<<10:5>>],
<<1:1>>,<<0:1>>,<<1:1>>]),
ok.
test_deep_bitstr(List) ->
- %%?line {'EXIT',{badarg,_}} = list_to_binary(List),
+ %%{'EXIT',{badarg,_}} = list_to_binary(List),
Bin = list_to_bitstring(List),
{Bin,bitstring_to_list(Bin)}.
-bad_list_to_binary(suite) -> [];
bad_list_to_binary(Config) when is_list(Config) ->
- ?line test_bad_bin(atom),
- ?line test_bad_bin(42),
- ?line test_bad_bin([1|2]),
- ?line test_bad_bin([256]),
- ?line test_bad_bin([255, [256]]),
- ?line test_bad_bin([-1]),
- ?line test_bad_bin([atom_in_list]),
- ?line test_bad_bin([[<<8>>]|bad_tail]),
+ test_bad_bin(atom),
+ test_bad_bin(42),
+ test_bad_bin([1|2]),
+ test_bad_bin([256]),
+ test_bad_bin([255, [256]]),
+ test_bad_bin([-1]),
+ test_bad_bin([atom_in_list]),
+ test_bad_bin([[<<8>>]|bad_tail]),
{'EXIT',{badarg,_}} = (catch list_to_binary(id(<<1,2,3>>))),
{'EXIT',{badarg,_}} = (catch list_to_binary(id([<<42:7>>]))),
{'EXIT',{badarg,_}} = (catch list_to_bitstring(id(<<1,2,3>>))),
%% Funs used to be implemented as a type of binary internally.
- ?line test_bad_bin(fun(X, Y) -> X*Y end),
- ?line test_bad_bin([1,fun(X) -> X + 1 end,2|fun() -> 0 end]),
- ?line test_bad_bin([fun(X) -> X + 1 end]),
+ test_bad_bin(fun(X, Y) -> X*Y end),
+ test_bad_bin([1,fun(X) -> X + 1 end,2|fun() -> 0 end]),
+ test_bad_bin([fun(X) -> X + 1 end]),
%% Test iolists that do not fit in the address space.
%% Unfortunately, it would be too slow to test in a 64-bit emulator.
@@ -287,15 +285,15 @@ bad_list_to_binary(Config) when is_list(Config) ->
huge_iolists() ->
FourGigs = 1 bsl 32,
- ?line Sizes = [FourGigs+N || N <- lists:seq(0, 64)] ++
+ Sizes = [FourGigs+N || N <- lists:seq(0, 64)] ++
[1 bsl N || N <- lists:seq(33, 37)],
- ?line Base = <<0:(1 bsl 20)/unit:8>>,
+ Base = <<0:(1 bsl 20)/unit:8>>,
[begin
L = build_iolist(Sz, Base),
- ?line {'EXIT',{system_limit,_}} = (catch list_to_binary([L])),
- ?line {'EXIT',{system_limit,_}} = (catch list_to_bitstring([L])),
- ?line {'EXIT',{system_limit,_}} = (catch binary:list_to_bin([L])),
- ?line {'EXIT',{system_limit,_}} = (catch iolist_to_binary(L))
+ {'EXIT',{system_limit,_}} = (catch list_to_binary([L])),
+ {'EXIT',{system_limit,_}} = (catch list_to_bitstring([L])),
+ {'EXIT',{system_limit,_}} = (catch binary:list_to_bin([L])),
+ {'EXIT',{system_limit,_}} = (catch iolist_to_binary(L))
end || Sz <- Sizes],
ok.
@@ -305,15 +303,15 @@ test_bad_bin(List) ->
{'EXIT',{badarg,_}} = (catch list_to_bitstring(List)),
{'EXIT',{badarg,_}} = (catch iolist_size(List)).
-bad_binary_to_list(doc) -> "Tries binary_to_list/1,3 with bad arguments.";
+%% Tries binary_to_list/1,3 with bad arguments.
bad_binary_to_list(Config) when is_list(Config) ->
- ?line bad_bin_to_list(fun(X) -> X * 42 end),
+ bad_bin_to_list(fun(X) -> X * 42 end),
GoodBin = list_to_binary(lists:seq(1, 10)),
- ?line bad_bin_to_list(fun(X) -> X * 44 end, 1, 2),
- ?line bad_bin_to_list(GoodBin, 0, 1),
- ?line bad_bin_to_list(GoodBin, 2, 1),
- ?line bad_bin_to_list(GoodBin, 11, 11),
+ bad_bin_to_list(fun(X) -> X * 44 end, 1, 2),
+ bad_bin_to_list(GoodBin, 0, 1),
+ bad_bin_to_list(GoodBin, 2, 1),
+ bad_bin_to_list(GoodBin, 11, 11),
{'EXIT',{badarg,_}} = (catch binary_to_list(id(<<42:7>>))),
ok.
@@ -327,63 +325,61 @@ bad_bin_to_list(Bin, First, Last) ->
%% Tries to split a binary at all possible positions.
-t_split_binary(suite) -> [];
t_split_binary(Config) when is_list(Config) ->
- ?line L = lists:seq(0, ?heap_binary_size-5), %Heap binary.
- ?line B = list_to_binary(L),
- ?line split(L, B, size(B)),
+ L = lists:seq(0, ?heap_binary_size-5), %Heap binary.
+ B = list_to_binary(L),
+ split(L, B, size(B)),
%% Sub binary of heap binary.
- ?line split(L, make_sub_binary(B), size(B)),
+ split(L, make_sub_binary(B), size(B)),
{X,_Y} = split_binary(B, size(B) div 2),
- ?line split(binary_to_list(X), X, size(X)),
+ split(binary_to_list(X), X, size(X)),
%% Unaligned sub binary of heap binary.
- ?line split(L, make_unaligned_sub_binary(B), size(B)),
+ split(L, make_unaligned_sub_binary(B), size(B)),
{X,_Y} = split_binary(B, size(B) div 2),
- ?line split(binary_to_list(X), X, size(X)),
+ split(binary_to_list(X), X, size(X)),
%% Reference-counted binary.
- ?line L2 = lists:seq(0, ?heap_binary_size+1),
- ?line B2 = list_to_binary(L2),
- ?line split(L2, B2, size(B2)),
+ L2 = lists:seq(0, ?heap_binary_size+1),
+ B2 = list_to_binary(L2),
+ split(L2, B2, size(B2)),
%% Sub binary of reference-counted binary.
- ?line split(L2, make_sub_binary(B2), size(B2)),
+ split(L2, make_sub_binary(B2), size(B2)),
{X2,_Y2} = split_binary(B2, size(B2) div 2),
- ?line split(binary_to_list(X2), X2, size(X2)),
+ split(binary_to_list(X2), X2, size(X2)),
%% Unaligned sub binary of reference-counted binary.
- ?line split(L2, make_unaligned_sub_binary(B2), size(B2)),
+ split(L2, make_unaligned_sub_binary(B2), size(B2)),
{X2,_Y2} = split_binary(B2, size(B2) div 2),
- ?line split(binary_to_list(X2), X2, size(X2)),
+ split(binary_to_list(X2), X2, size(X2)),
ok.
split(L, B, Pos) when Pos > 0 ->
- ?line {B1, B2} = split_binary(B, Pos),
- ?line B1 = list_to_binary(lists:sublist(L, 1, Pos)),
- ?line B2 = list_to_binary(lists:nthtail(Pos, L)),
- ?line split(L, B, Pos-1);
+ {B1, B2} = split_binary(B, Pos),
+ B1 = list_to_binary(lists:sublist(L, 1, Pos)),
+ B2 = list_to_binary(lists:nthtail(Pos, L)),
+ split(L, B, Pos-1);
split(_L, _B, 0) ->
ok.
-bad_split(doc) -> "Tries split_binary/2 with bad arguments.";
-bad_split(suite) -> [];
+%% Tries split_binary/2 with bad arguments.
bad_split(Config) when is_list(Config) ->
GoodBin = list_to_binary([1,2,3]),
- ?line bad_split(GoodBin, -1),
- ?line bad_split(GoodBin, 4),
- ?line bad_split(GoodBin, a),
+ bad_split(GoodBin, -1),
+ bad_split(GoodBin, 4),
+ bad_split(GoodBin, a),
%% Funs are a kind of binaries.
- ?line bad_split(fun(_X) -> 1 end, 1),
+ bad_split(fun(_X) -> 1 end, 1),
ok.
bad_split(Bin, Pos) ->
{'EXIT',{badarg,_}} = (catch split_binary(Bin, Pos)).
-t_hash(doc) -> "Test hash/2 with different type of binaries.";
+%% Test hash/2 with different type of binaries.
t_hash(Config) when is_list(Config) ->
test_hash([]),
test_hash([253]),
@@ -396,36 +392,34 @@ test_hash(List) ->
Bin = list_to_binary(List),
Sbin = make_sub_binary(List),
Unaligned = make_unaligned_sub_binary(Sbin),
- ?line test_hash_1(Bin, Sbin, Unaligned, fun erlang:hash/2),
- ?line test_hash_1(Bin, Sbin, Unaligned, fun erlang:phash/2),
- ?line test_hash_1(Bin, Sbin, Unaligned, fun erlang:phash2/2).
+ test_hash_1(Bin, Sbin, Unaligned, fun erlang:hash/2),
+ test_hash_1(Bin, Sbin, Unaligned, fun erlang:phash/2),
+ test_hash_1(Bin, Sbin, Unaligned, fun erlang:phash2/2).
test_hash_1(Bin, Sbin, Unaligned, Hash) when is_function(Hash, 2) ->
N = 65535,
case {Hash(Bin, N),Hash(Sbin, N),Hash(Unaligned, N)} of
{H,H,H} -> ok;
{H1,H2,H3} ->
- io:format("Different hash values: ~p, ~p, ~p\n", [H1,H2,H3]),
- ?t:fail()
+ ct:fail("Different hash values: ~p, ~p, ~p\n", [H1,H2,H3])
end.
-bad_size(doc) -> "Try bad arguments to size/1.";
-bad_size(suite) -> [];
+%% Try bad arguments to size/1.
bad_size(Config) when is_list(Config) ->
- ?line {'EXIT',{badarg,_}} = (catch size(fun(X) -> X + 33 end)),
+ {'EXIT',{badarg,_}} = (catch size(fun(X) -> X + 33 end)),
ok.
bad_term_to_binary(Config) when is_list(Config) ->
T = id({a,b,c}),
- ?line {'EXIT',{badarg,_}} = (catch term_to_binary(T, not_a_list)),
- ?line {'EXIT',{badarg,_}} = (catch term_to_binary(T, [blurf])),
- ?line {'EXIT',{badarg,_}} = (catch term_to_binary(T, [{compressed,-1}])),
- ?line {'EXIT',{badarg,_}} = (catch term_to_binary(T, [{compressed,10}])),
- ?line {'EXIT',{badarg,_}} = (catch term_to_binary(T, [{compressed,cucumber}])),
- ?line {'EXIT',{badarg,_}} = (catch term_to_binary(T, [{compressed}])),
- ?line {'EXIT',{badarg,_}} = (catch term_to_binary(T, [{version,1}|bad_tail])),
- ?line {'EXIT',{badarg,_}} = (catch term_to_binary(T, [{minor_version,-1}])),
- ?line {'EXIT',{badarg,_}} = (catch term_to_binary(T, [{minor_version,x}])),
+ {'EXIT',{badarg,_}} = (catch term_to_binary(T, not_a_list)),
+ {'EXIT',{badarg,_}} = (catch term_to_binary(T, [blurf])),
+ {'EXIT',{badarg,_}} = (catch term_to_binary(T, [{compressed,-1}])),
+ {'EXIT',{badarg,_}} = (catch term_to_binary(T, [{compressed,10}])),
+ {'EXIT',{badarg,_}} = (catch term_to_binary(T, [{compressed,cucumber}])),
+ {'EXIT',{badarg,_}} = (catch term_to_binary(T, [{compressed}])),
+ {'EXIT',{badarg,_}} = (catch term_to_binary(T, [{version,1}|bad_tail])),
+ {'EXIT',{badarg,_}} = (catch term_to_binary(T, [{minor_version,-1}])),
+ {'EXIT',{badarg,_}} = (catch term_to_binary(T, [{minor_version,x}])),
ok.
@@ -464,7 +458,7 @@ terms(Config) when is_list(Config) ->
UnalignedC = make_unaligned_sub_binary(BinC),
Term = binary_to_term_stress(UnalignedC)
end,
- ?line test_terms(TestFun),
+ test_terms(TestFun),
ok.
terms_compression_levels(Term, UncompressedSz, Level) when Level < 10 ->
@@ -476,7 +470,7 @@ terms_compression_levels(Term, UncompressedSz, Level) when Level < 10 ->
terms_compression_levels(_, _, _) -> ok.
terms_float(Config) when is_list(Config) ->
- ?line test_floats(fun(Term) ->
+ test_floats(fun(Term) ->
Bin0 = term_to_binary(Term, [{minor_version,0}]),
Term = binary_to_term_stress(Bin0),
Bin1 = term_to_binary(Term),
@@ -492,22 +486,21 @@ terms_float(Config) when is_list(Config) ->
float_middle_endian(Config) when is_list(Config) ->
%% Testing for roundtrip is not enough.
- ?line <<131,70,63,240,0,0,0,0,0,0>> = term_to_binary(1.0, [{minor_version,1}]),
- ?line 1.0 = binary_to_term_stress(<<131,70,63,240,0,0,0,0,0,0>>).
+ <<131,70,63,240,0,0,0,0,0,0>> = term_to_binary(1.0, [{minor_version,1}]),
+ 1.0 = binary_to_term_stress(<<131,70,63,240,0,0,0,0,0,0>>).
external_size(Config) when is_list(Config) ->
%% Build a term whose external size only fits in a big num (on 32-bit CPU).
- ?line external_size_1(16#11111111111111117777777777777777888889999, 0, 16#FFFFFFF),
+ external_size_1(16#11111111111111117777777777777777888889999, 0, 16#FFFFFFF),
%% Test that the same binary aligned and unaligned has the same external size.
- ?line Bin = iolist_to_binary([1,2,3,96]),
- ?line Unaligned = make_unaligned_sub_binary(Bin),
+ Bin = iolist_to_binary([1,2,3,96]),
+ Unaligned = make_unaligned_sub_binary(Bin),
case {erlang:external_size(Bin),erlang:external_size(Unaligned)} of
{X,X} -> ok;
{Sz1,Sz2} ->
- io:format(" Aligned size: ~p\n", [Sz1]),
- io:format("Unaligned size: ~p\n", [Sz2]),
- ?line ?t:fail()
+ ct:fail(" Aligned size: ~p\n"
+ "Unaligned size: ~p\n", [Sz1,Sz2])
end,
true = (erlang:external_size(Bin) =:= erlang:external_size(Bin, [{minor_version, 1}])),
true = (erlang:external_size(Unaligned) =:= erlang:external_size(Unaligned, [{minor_version, 1}])).
@@ -582,33 +575,32 @@ build_iolist(N0, Base) ->
end.
-bad_binary_to_term_2(doc) -> "OTP-4053.";
-bad_binary_to_term_2(suite) -> [];
+%% OTP-4053
bad_binary_to_term_2(Config) when is_list(Config) ->
- ?line {ok, N} = test_server:start_node(plopp, slave, []),
- ?line R = rpc:call(N, erlang, binary_to_term, [<<131,111,255,255,255,0>>]),
- ?line case R of
+ {ok, N} = test_server:start_node(plopp, slave, []),
+ R = rpc:call(N, erlang, binary_to_term, [<<131,111,255,255,255,0>>]),
+ case R of
{badrpc, {'EXIT', _}} ->
ok;
_Other ->
- test_server:fail({rpcresult, R})
+ ct:fail({rpcresult, R})
end,
- ?line test_server:stop_node(N),
+ test_server:stop_node(N),
ok.
-bad_binary_to_term(doc) -> "Try bad input to binary_to_term/1.";
+%% Try bad input to binary_to_term/1.
bad_binary_to_term(Config) when is_list(Config) ->
- ?line bad_bin_to_term(an_atom),
- ?line bad_bin_to_term({an,tuple}),
- ?line bad_bin_to_term({a,list}),
- ?line bad_bin_to_term(fun() -> self() end),
- ?line bad_bin_to_term(fun(X) -> 42*X end),
- ?line bad_bin_to_term(fun(X, Y) -> {X,Y} end),
- ?line bad_bin_to_term(fun(X, Y, Z) -> {X,Y,Z} end),
- ?line bad_bin_to_term(bit_sized_binary(term_to_binary({you,should,'not',see,this,term}))),
+ bad_bin_to_term(an_atom),
+ bad_bin_to_term({an,tuple}),
+ bad_bin_to_term({a,list}),
+ bad_bin_to_term(fun() -> self() end),
+ bad_bin_to_term(fun(X) -> 42*X end),
+ bad_bin_to_term(fun(X, Y) -> {X,Y} end),
+ bad_bin_to_term(fun(X, Y, Z) -> {X,Y,Z} end),
+ bad_bin_to_term(bit_sized_binary(term_to_binary({you,should,'not',see,this,term}))),
%% Bad float.
- ?line bad_bin_to_term(<<131,70,-1:64>>),
+ bad_bin_to_term(<<131,70,-1:64>>),
ok.
bad_bin_to_term(BadBin) ->
@@ -617,25 +609,24 @@ bad_bin_to_term(BadBin) ->
bad_bin_to_term(BadBin,Opts) ->
{'EXIT',{badarg,_}} = (catch binary_to_term_stress(BadBin,Opts)).
-safe_binary_to_term2(doc) -> "Test safety options for binary_to_term/2";
+%% Test safety options for binary_to_term/2
safe_binary_to_term2(Config) when is_list(Config) ->
- ?line bad_bin_to_term(<<131,100,0,14,"undefined_atom">>, [safe]),
- ?line bad_bin_to_term(<<131,100,0,14,"other_bad_atom">>, [safe]),
+ bad_bin_to_term(<<131,100,0,14,"undefined_atom">>, [safe]),
+ bad_bin_to_term(<<131,100,0,14,"other_bad_atom">>, [safe]),
BadHostAtom = <<100,0,14,"badguy@badhost">>,
Empty = <<0,0,0,0>>,
BadRef = <<131,114,0,3,BadHostAtom/binary,0,<<0,0,0,255>>/binary,
Empty/binary,Empty/binary>>,
- ?line bad_bin_to_term(BadRef, [safe]), % good ref, with a bad atom
- ?line fullsweep_after = binary_to_term_stress(<<131,100,0,15,"fullsweep_after">>, [safe]), % should be a good atom
+ bad_bin_to_term(BadRef, [safe]), % good ref, with a bad atom
+ fullsweep_after = binary_to_term_stress(<<131,100,0,15,"fullsweep_after">>, [safe]), % should be a good atom
BadExtFun = <<131,113,100,0,4,98,108,117,101,100,0,4,109,111,111,110,97,3>>,
- ?line bad_bin_to_term(BadExtFun, [safe]),
+ bad_bin_to_term(BadExtFun, [safe]),
ok.
%% Tests bad input to binary_to_term/1.
-bad_terms(suite) -> [];
bad_terms(Config) when is_list(Config) ->
- ?line test_terms(fun corrupter/1),
+ test_terms(fun corrupter/1),
{'EXIT',{badarg,_}} = (catch binary_to_term(<<131,$M,3:32,0,11,22,33>>)),
{'EXIT',{badarg,_}} = (catch binary_to_term(<<131,$M,3:32,9,11,22,33>>)),
{'EXIT',{badarg,_}} = (catch binary_to_term(<<131,$M,0:32,1,11,22,33>>)),
@@ -668,7 +659,7 @@ corrupter(Term) ->
corrupter0(Term).
corrupter0(Term) ->
- ?line try
+ try
S = io_lib:format("About to corrupt: ~P", [Term,12]),
io:put_chars(S)
catch
@@ -676,42 +667,41 @@ corrupter0(Term) ->
io:format("About to corrupt: <<bit-level-binary:~p",
[bit_size(Term)])
end,
- ?line Bin = term_to_binary(Term),
- ?line corrupter(Bin, size(Bin)-1),
- ?line CompressedBin = term_to_binary(Term, [compressed]),
- ?line corrupter(CompressedBin, size(CompressedBin)-1).
+ Bin = term_to_binary(Term),
+ corrupter(Bin, size(Bin)-1),
+ CompressedBin = term_to_binary(Term, [compressed]),
+ corrupter(CompressedBin, size(CompressedBin)-1).
corrupter(Bin, Pos) when Pos >= 0 ->
- ?line {ShorterBin, Rest} = split_binary(Bin, Pos),
- ?line catch binary_to_term_stress(ShorterBin), %% emulator shouldn't crash
- ?line MovedBin = list_to_binary([ShorterBin]),
- ?line catch binary_to_term_stress(MovedBin), %% emulator shouldn't crash
+ {ShorterBin, Rest} = split_binary(Bin, Pos),
+ catch binary_to_term_stress(ShorterBin), %% emulator shouldn't crash
+ MovedBin = list_to_binary([ShorterBin]),
+ catch binary_to_term_stress(MovedBin), %% emulator shouldn't crash
%% Bit faults, shouldn't crash
<<Byte,Tail/binary>> = Rest,
Fun = fun(M) -> FaultyByte = Byte bxor M,
catch binary_to_term_stress(<<ShorterBin/binary,
FaultyByte, Tail/binary>>) end,
- ?line lists:foreach(Fun,[1,2,4,8,16,32,64,128,255]),
- ?line corrupter(Bin, Pos-1);
+ lists:foreach(Fun,[1,2,4,8,16,32,64,128,255]),
+ corrupter(Bin, Pos-1);
corrupter(_Bin, _) ->
ok.
-more_bad_terms(suite) -> [];
more_bad_terms(Config) when is_list(Config) ->
- ?line Data = ?config(data_dir, Config),
- ?line BadFile = filename:join(Data, "bad_binary"),
- ?line ok = io:format("File: ~s\n", [BadFile]),
- ?line case file:read_file(BadFile) of
+ Data = proplists:get_value(data_dir, Config),
+ BadFile = filename:join(Data, "bad_binary"),
+ ok = io:format("File: ~s\n", [BadFile]),
+ case file:read_file(BadFile) of
{ok,Bin} ->
- ?line {'EXIT',{badarg,_}} = (catch binary_to_term_stress(Bin)),
+ {'EXIT',{badarg,_}} = (catch binary_to_term_stress(Bin)),
ok;
Other ->
- ?line ?t:fail(Other)
+ ct:fail(Other)
end.
otp_5484(Config) when is_list(Config) ->
- ?line {'EXIT',_} =
+ {'EXIT',_} =
(catch
binary_to_term_stress(
<<131,
@@ -724,7 +714,7 @@ otp_5484(Config) when is_list(Config) ->
255,
106>>)),
- ?line {'EXIT',_} =
+ {'EXIT',_} =
(catch
binary_to_term_stress(
<<131,
@@ -736,13 +726,13 @@ otp_5484(Config) when is_list(Config) ->
2,
106>>)),
- ?line {'EXIT',_} =
+ {'EXIT',_} =
(catch
binary_to_term_stress(
%% A old-type fun in a list containing a bad creator pid.
<<131,108,0,0,0,1,117,0,0,0,0,103,100,0,13,110,111,110,111,100,101,64,110,111,104,111,115,116,255,255,0,25,255,0,0,0,0,100,0,1,116,97,0,98,6,142,121,72,106>>)),
- ?line {'EXIT',_} =
+ {'EXIT',_} =
(catch
binary_to_term_stress(
%% A new-type fun in a list containing a bad creator pid.
@@ -754,7 +744,7 @@ otp_5484(Config) when is_list(Config) ->
106, %[] instead of an atom.
0,0,0,27,0,0,0,0,0,106>>)),
- ?line {'EXIT',_} =
+ {'EXIT',_} =
(catch
binary_to_term_stress(
%% A new-type fun in a list containing a bad module.
@@ -765,7 +755,7 @@ otp_5484(Config) when is_list(Config) ->
107,0,1,64, %String instead of atom (same length).
97,0,98,6,64,82,230,103,100,0,13,110,111,110,111,100,101,64,110,111,104,111,115,116,0,0,0,48,0,0,0,0,0,97,42,97,7,106>>)),
- ?line {'EXIT',_} =
+ {'EXIT',_} =
(catch
binary_to_term_stress(
%% A new-type fun in a list containing a bad index.
@@ -777,7 +767,7 @@ otp_5484(Config) when is_list(Config) ->
104,0, %Tuple {} instead of integer.
98,6,64,82,230,103,100,0,13,110,111,110,111,100,101,64,110,111,104,111,115,116,0,0,0,48,0,0,0,0,0,97,42,97,7,106>>)),
- ?line {'EXIT',_} =
+ {'EXIT',_} =
(catch
binary_to_term_stress(
%% A new-type fun in a list containing a bad unique value.
@@ -791,46 +781,46 @@ otp_5484(Config) when is_list(Config) ->
103,100,0,13,110,111,110,111,100,101,64,110,111,104,111,115,116,0,0,0,48,0,0,0,0,0,97,42,97,7,106>>)),
%% An absurdly large atom.
- ?line {'EXIT',_} =
+ {'EXIT',_} =
(catch binary_to_term_stress(iolist_to_binary([<<131,100,65000:16>>|
lists:duplicate(65000, 42)]))),
%% Longer than 255 characters.
- ?line {'EXIT',_} =
+ {'EXIT',_} =
(catch binary_to_term_stress(iolist_to_binary([<<131,100,256:16>>|
lists:duplicate(256, 42)]))),
%% OTP-7218. Thanks to Matthew Dempsky. Also make sure that we
%% cover the other error cases for external funs (EXPORT_EXT).
- ?line {'EXIT',_} =
+ {'EXIT',_} =
(catch binary_to_term_stress(
<<131,
113, %EXPORT_EXP
97,13, %Integer: 13
97,13, %Integer: 13
97,13>>)), %Integer: 13
- ?line {'EXIT',_} =
+ {'EXIT',_} =
(catch binary_to_term_stress(
<<131,
113, %EXPORT_EXP
100,0,1,64, %Atom: '@'
97,13, %Integer: 13
97,13>>)), %Integer: 13
- ?line {'EXIT',_} =
+ {'EXIT',_} =
(catch binary_to_term_stress(
<<131,
113, %EXPORT_EXP
100,0,1,64, %Atom: '@'
100,0,1,64, %Atom: '@'
106>>)), %NIL
- ?line {'EXIT',_} =
+ {'EXIT',_} =
(catch binary_to_term_stress(
<<131,
113, %EXPORT_EXP
100,0,1,64, %Atom: '@'
100,0,1,64, %Atom: '@'
98,255,255,255,255>>)), %Integer: -1
- ?line {'EXIT',_} =
+ {'EXIT',_} =
(catch binary_to_term_stress(
<<131,
113, %EXPORT_EXP
@@ -839,7 +829,7 @@ otp_5484(Config) when is_list(Config) ->
113,97,13,97,13,97,13>>)), %fun 13:13/13
%% Bad funs.
- ?line {'EXIT',_} = (catch binary_to_term_stress(fake_fun(0, lists:seq(0, 256)))),
+ {'EXIT',_} = (catch binary_to_term_stress(fake_fun(0, lists:seq(0, 256)))),
ok.
fake_fun(Arity, Env0) ->
@@ -862,9 +852,9 @@ fake_fun(Arity, Env0) ->
%% More bad terms submitted by Matthias Lang.
otp_5933(Config) when is_list(Config) ->
- ?line try_bad_lengths(<<131,$m>>), %binary
- ?line try_bad_lengths(<<131,$n>>), %bignum
- ?line try_bad_lengths(<<131,$o>>), %huge bignum
+ try_bad_lengths(<<131,$m>>), %binary
+ try_bad_lengths(<<131,$n>>), %bignum
+ try_bad_lengths(<<131,$o>>), %huge bignum
ok.
try_bad_lengths(B) ->
@@ -883,7 +873,7 @@ otp_6817(Config) when is_list(Config) ->
%% Floats are only validated when the heap fragment has been allocated.
BadFloat = <<131,99,53,46,48,$X,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,101,45,48,49,0,0,0,0,0>>,
- ?line otp_6817_try_bin(BadFloat),
+ otp_6817_try_bin(BadFloat),
%% {Binary,BadFloat}: When the error in float is discovered, a refc-binary
%% has been allocated and the list of refc-binaries goes through the
@@ -903,7 +893,7 @@ otp_6817(Config) when is_list(Config) ->
230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,
249,250,251,252,253,254,255,99,51,46,49,52,$B,$l,$u,$r,$f,48,48,48,48,48,48,
48,48,49,50,52,51,52,101,43,48,48,0,0,0,0,0>>,
- ?line otp_6817_try_bin(BinAndFloat),
+ otp_6817_try_bin(BinAndFloat),
%% {Fun,BadFloat}
FunAndFloat =
@@ -911,14 +901,14 @@ otp_6817(Config) when is_list(Config) ->
71,8,0,0,0,0,0,0,0,0,100,0,1,116,97,0,98,5,175,169,123,103,100,0,13,110,111,
110,111,100,101,64,110,111,104,111,115,116,0,0,0,41,0,0,0,0,0,99,50,46,55,48,
$Y,57,57,57,57,57,57,57,57,57,57,57,57,57,54,52,52,55,101,43,48,48,0,0,0,0,0>>,
- ?line otp_6817_try_bin(FunAndFloat),
+ otp_6817_try_bin(FunAndFloat),
%% [ExternalPid|BadFloat]
ExtPidAndFloat =
<<131,108,0,0,0,1,103,100,0,13,107,97,108,108,101,64,115,116,114,105,100,101,
114,0,0,0,36,0,0,0,0,2,99,48,46,$@,48,48,48,48,48,48,48,48,48,48,48,48,48,48,
48,48,48,48,48,101,43,48,48,0,0,0,0,0>>,
- ?line otp_6817_try_bin(ExtPidAndFloat),
+ otp_6817_try_bin(ExtPidAndFloat),
ok.
otp_6817_try_bin(Bin) ->
@@ -936,8 +926,7 @@ otp_6817_try_bin(Bin) ->
%% Will crash if the bug is present.
erlang:garbage_collect().
-otp_8117(doc) -> "Some bugs in binary_to_term when 32-bit integers are negative.";
-otp_8117(suite) -> [];
+%% Some bugs in binary_to_term when 32-bit integers are negative.
otp_8117(Config) when is_list(Config) ->
[otp_8117_do(Op,-(1 bsl N)) || Op <- ['fun',named_fun,list,tuple],
N <- lists:seq(0,31)],
@@ -946,23 +935,22 @@ otp_8117(Config) when is_list(Config) ->
otp_8117_do('fun',Neg) ->
% Fun with negative num_free
FunBin = term_to_binary(fun() -> ok end),
- ?line <<B1:27/binary,_NumFree:32,Rest/binary>> = FunBin,
- ?line bad_bin_to_term(<<B1/binary,Neg:32,Rest/binary>>);
+ <<B1:27/binary,_NumFree:32,Rest/binary>> = FunBin,
+ bad_bin_to_term(<<B1/binary,Neg:32,Rest/binary>>);
otp_8117_do(named_fun,Neg) ->
% Named fun with negative num_free
FunBin = term_to_binary(fun F() -> F end),
- ?line <<B1:27/binary,_NumFree:32,Rest/binary>> = FunBin,
- ?line bad_bin_to_term(<<B1/binary,Neg:32,Rest/binary>>);
+ <<B1:27/binary,_NumFree:32,Rest/binary>> = FunBin,
+ bad_bin_to_term(<<B1/binary,Neg:32,Rest/binary>>);
otp_8117_do(list,Neg) ->
%% List with negative length
- ?line bad_bin_to_term(<<131,104,2,108,Neg:32,97,11,104,1,97,12,97,13,106,97,14>>);
+ bad_bin_to_term(<<131,104,2,108,Neg:32,97,11,104,1,97,12,97,13,106,97,14>>);
otp_8117_do(tuple,Neg) ->
%% Tuple with negative arity
- ?line bad_bin_to_term(<<131,104,2,105,Neg:32,97,11,97,12,97,13,97,14>>).
+ bad_bin_to_term(<<131,104,2,105,Neg:32,97,11,97,12,97,13,97,14>>).
-ordering(doc) -> "Tests ordering of binaries.";
-ordering(suite) -> [];
+%% Tests ordering of binaries.
ordering(Config) when is_list(Config) ->
B1 = list_to_binary([7,8,9]),
B2 = make_sub_binary([1,2,3,4]),
@@ -971,54 +959,54 @@ ordering(Config) when is_list(Config) ->
%% From R8 binaries are compared as strings.
- ?line false = B1 == B2,
- ?line false = B1 =:= B2,
- ?line true = B1 /= B2,
- ?line true = B1 =/= B2,
+ false = B1 == B2,
+ false = B1 =:= B2,
+ true = B1 /= B2,
+ true = B1 =/= B2,
- ?line true = B1 > B2,
- ?line true = B2 < B3,
- ?line true = B2 =< B1,
- ?line true = B2 =< B3,
+ true = B1 > B2,
+ true = B2 < B3,
+ true = B2 =< B1,
+ true = B2 =< B3,
- ?line true = B2 =:= Unaligned,
- ?line true = B2 == Unaligned,
- ?line true = Unaligned < B3,
- ?line true = Unaligned =< B3,
+ true = B2 =:= Unaligned,
+ true = B2 == Unaligned,
+ true = Unaligned < B3,
+ true = Unaligned =< B3,
%% Binaries are greater than all other terms.
- ?line true = B1 > 0,
- ?line true = B1 > 39827491247298471289473333333333333333333333333333,
- ?line true = B1 > -3489274937438742190467869234328742398347,
- ?line true = B1 > 3.14,
- ?line true = B1 > [],
- ?line true = B1 > [a],
- ?line true = B1 > {a},
- ?line true = B1 > self(),
- ?line true = B1 > make_ref(),
- ?line true = B1 > xxx,
- ?line true = B1 > fun() -> 1 end,
- ?line true = B1 > fun erlang:send/2,
-
- ?line Path = ?config(priv_dir, Config),
- ?line AFile = filename:join(Path, "vanilla_file"),
- ?line Port = open_port(AFile, [out]),
- ?line true = B1 > Port,
-
- ?line true = B1 >= 0,
- ?line true = B1 >= 39827491247298471289473333333333333333333333333333,
- ?line true = B1 >= -3489274937438742190467869234328742398347,
- ?line true = B1 >= 3.14,
- ?line true = B1 >= [],
- ?line true = B1 >= [a],
- ?line true = B1 >= {a},
- ?line true = B1 >= self(),
- ?line true = B1 >= make_ref(),
- ?line true = B1 >= xxx,
- ?line true = B1 >= fun() -> 1 end,
- ?line true = B1 >= fun erlang:send/2,
- ?line true = B1 >= Port,
+ true = B1 > 0,
+ true = B1 > 39827491247298471289473333333333333333333333333333,
+ true = B1 > -3489274937438742190467869234328742398347,
+ true = B1 > 3.14,
+ true = B1 > [],
+ true = B1 > [a],
+ true = B1 > {a},
+ true = B1 > self(),
+ true = B1 > make_ref(),
+ true = B1 > xxx,
+ true = B1 > fun() -> 1 end,
+ true = B1 > fun erlang:send/2,
+
+ Path = proplists:get_value(priv_dir, Config),
+ AFile = filename:join(Path, "vanilla_file"),
+ Port = open_port(AFile, [out]),
+ true = B1 > Port,
+
+ true = B1 >= 0,
+ true = B1 >= 39827491247298471289473333333333333333333333333333,
+ true = B1 >= -3489274937438742190467869234328742398347,
+ true = B1 >= 3.14,
+ true = B1 >= [],
+ true = B1 >= [a],
+ true = B1 >= {a},
+ true = B1 >= self(),
+ true = B1 >= make_ref(),
+ true = B1 >= xxx,
+ true = B1 >= fun() -> 1 end,
+ true = B1 >= fun erlang:send/2,
+ true = B1 >= Port,
ok.
@@ -1031,153 +1019,153 @@ unaligned_order(Config) when is_list(Config) ->
test_unaligned_order(I, J) ->
Align = {I,J},
io:format("~p ~p", [I,J]),
- ?line true = test_unaligned_order_1('=:=', <<1,2,3,16#AA,16#7C,4,16#5F,5,16#5A>>,
+ true = test_unaligned_order_1('=:=', <<1,2,3,16#AA,16#7C,4,16#5F,5,16#5A>>,
<<1,2,3,16#AA,16#7C,4,16#5F,5,16#5A>>,
Align),
- ?line false = test_unaligned_order_1('=/=', <<1,2,3>>, <<1,2,3>>, Align),
- ?line true = test_unaligned_order_1('==', <<4,5,6>>, <<4,5,6>>, Align),
- ?line false = test_unaligned_order_1('/=', <<1,2,3>>, <<1,2,3>>, Align),
+ false = test_unaligned_order_1('=/=', <<1,2,3>>, <<1,2,3>>, Align),
+ true = test_unaligned_order_1('==', <<4,5,6>>, <<4,5,6>>, Align),
+ false = test_unaligned_order_1('/=', <<1,2,3>>, <<1,2,3>>, Align),
- ?line true = test_unaligned_order_1('<', <<1,2>>, <<1,2,3>>, Align),
- ?line true = test_unaligned_order_1('=<', <<1,2>>, <<1,2,3>>, Align),
- ?line true = test_unaligned_order_1('=<', <<1,2,7,8>>, <<1,2,7,8>>, Align),
+ true = test_unaligned_order_1('<', <<1,2>>, <<1,2,3>>, Align),
+ true = test_unaligned_order_1('=<', <<1,2>>, <<1,2,3>>, Align),
+ true = test_unaligned_order_1('=<', <<1,2,7,8>>, <<1,2,7,8>>, Align),
ok.
test_unaligned_order_1(Op, A, B, {Aa,Ba}) ->
erlang:Op(unaligned_sub_bin(A, Aa), unaligned_sub_bin(B, Ba)).
test_terms(Test_Func) ->
- ?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),
+ 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,
+ 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]),
- ?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>>}},
+ 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}}),
- ?line Test_Func(1),
- ?line Test_Func(42),
- ?line Test_Func(-23),
- ?line Test_Func(256),
- ?line Test_Func(25555),
- ?line Test_Func(-3333),
+ Test_Func(1),
+ Test_Func(42),
+ Test_Func(-23),
+ Test_Func(256),
+ Test_Func(25555),
+ Test_Func(-3333),
- ?line Test_Func(1.0),
+ Test_Func(1.0),
- ?line Test_Func(183749783987483978498378478393874),
- ?line Test_Func(-37894183749783987483978498378478393874),
+ Test_Func(183749783987483978498378478393874),
+ Test_Func(-37894183749783987483978498378478393874),
Very_Big = very_big_num(),
- ?line Test_Func(Very_Big),
- ?line Test_Func(-Very_Big+1),
-
- ?line Test_Func([]),
- ?line Test_Func("abcdef"),
- ?line Test_Func([a, b, 1, 2]),
- ?line 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))),
-
- ?line Test_Func(make_ref()),
- ?line Test_Func([make_ref(), make_ref()]),
-
- ?line Test_Func(make_port()),
-
- ?line Test_Func(make_pid()),
-
- ?line Test_Func(Bin0 = list_to_binary(lists:seq(0, 14))),
- ?line Test_Func(Bin1 = list_to_binary(lists:seq(0, ?heap_binary_size))),
- ?line Test_Func(Bin2 = list_to_binary(lists:seq(0, ?heap_binary_size+1))),
- ?line Test_Func(Bin3 = list_to_binary(lists:seq(0, 255))),
-
- ?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(Very_Big),
+ Test_Func(-Very_Big+1),
+
+ Test_Func([]),
+ Test_Func("abcdef"),
+ Test_Func([a, b, 1, 2]),
+ Test_Func([a|b]),
+
+ 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))),
+
+ Test_Func(make_ref()),
+ Test_Func([make_ref(), make_ref()]),
+
+ Test_Func(make_port()),
+
+ Test_Func(make_pid()),
+
+ Test_Func(Bin0 = list_to_binary(lists:seq(0, 14))),
+ Test_Func(Bin1 = list_to_binary(lists:seq(0, ?heap_binary_size))),
+ Test_Func(Bin2 = list_to_binary(lists:seq(0, ?heap_binary_size+1))),
+ Test_Func(Bin3 = list_to_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/0),
- ?line Test_Func(lists:duplicate(32, FF)),
+ Test_Func(FF = fun binary_SUITE:all/0),
+ Test_Func(lists:duplicate(32, FF)),
ok.
test_floats(Test_Func) ->
- ?line Test_Func(5.5),
- ?line Test_Func(-15.32),
- ?line Test_Func(1.2435e25),
- ?line Test_Func(1.2333e-20),
- ?line Test_Func(199.0e+15),
+ Test_Func(5.5),
+ Test_Func(-15.32),
+ Test_Func(1.2435e25),
+ Test_Func(1.2333e-20),
+ Test_Func(199.0e+15),
ok.
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.
%% Test that binaries are garbage collected properly.
@@ -1217,7 +1205,7 @@ gc_test1(Pid) ->
receive
{Pid,done} -> ok
after 10000 ->
- ?line ?t:fail()
+ ct:fail("timeout")
end.
%% Like split binary, but returns REFC binaries. Only useful for gc_test/1.
@@ -1236,7 +1224,7 @@ gc() ->
gc1() -> ok.
bit_sized_binary_sizes(Config) when is_list(Config) ->
- ?line [bsbs_1(A) || A <- lists:seq(1, 8)],
+ [bsbs_1(A) || A <- lists:seq(1, 8)],
ok.
bsbs_1(A) ->
@@ -1278,13 +1266,13 @@ obsolete_funs(Config) when is_list(Config) ->
X = id({1,2,3}),
Y = id([a,b,c,d]),
Z = id({x,y,z}),
- ?line obsolete_fun(fun() -> ok end),
- ?line obsolete_fun(fun() -> X end),
- ?line obsolete_fun(fun(A) -> {A,X} end),
- ?line obsolete_fun(fun() -> {X,Y} end),
- ?line obsolete_fun(fun() -> {X,Y,Z} end),
+ obsolete_fun(fun() -> ok end),
+ obsolete_fun(fun() -> X end),
+ obsolete_fun(fun(A) -> {A,X} end),
+ obsolete_fun(fun() -> {X,Y} end),
+ obsolete_fun(fun() -> {X,Y,Z} end),
- ?line obsolete_fun(fun ?MODULE:all/1),
+ obsolete_fun(fun ?MODULE:all/1),
erts_debug:set_internal_state(available_internal_state, false),
ok.
@@ -1311,41 +1299,41 @@ no_fun_roundtrip(Term) ->
%% but recognized by binary_to_term/1.
robustness(Config) when is_list(Config) ->
- ?line [] = binary_to_term_stress(<<131,107,0,0>>), %Empty string.
- ?line [] = binary_to_term_stress(<<131,108,0,0,0,0,106>>), %Zero-length list.
+ [] = binary_to_term_stress(<<131,107,0,0>>), %Empty string.
+ [] = binary_to_term_stress(<<131,108,0,0,0,0,106>>), %Zero-length list.
%% {[],a} where [] is a zero-length list.
- ?line {[],a} = binary_to_term_stress(<<131,104,2,108,0,0,0,0,106,100,0,1,97>>),
+ {[],a} = binary_to_term_stress(<<131,104,2,108,0,0,0,0,106,100,0,1,97>>),
%% {42,a} where 42 is a zero-length list with 42 in the tail.
- ?line {42,a} = binary_to_term_stress(<<131,104,2,108,0,0,0,0,97,42,100,0,1,97>>),
+ {42,a} = binary_to_term_stress(<<131,104,2,108,0,0,0,0,97,42,100,0,1,97>>),
%% {{x,y},a} where {x,y} is a zero-length list with {x,y} in the tail.
- ?line {{x,y},a} = binary_to_term_stress(<<131,104,2,108,0,0,0,0,
+ {{x,y},a} = binary_to_term_stress(<<131,104,2,108,0,0,0,0,
104,2,100,0,1,120,100,0,1,
121,100,0,1,97>>),
%% Bignums fitting in 32 bits.
- ?line 16#7FFFFFFF = binary_to_term_stress(<<131,98,127,255,255,255>>),
- ?line -1 = binary_to_term_stress(<<131,98,255,255,255,255>>),
+ 16#7FFFFFFF = binary_to_term_stress(<<131,98,127,255,255,255>>),
+ -1 = binary_to_term_stress(<<131,98,255,255,255,255>>),
ok.
%% OTP-8180: Test several terms that have been known to crash the emulator.
%% (Thanks to Scott Lystig Fritchie.)
otp_8180(Config) when is_list(Config) ->
- ?line Data = ?config(data_dir, Config),
- ?line Wc = filename:join(Data, "zzz.*"),
+ Data = proplists:get_value(data_dir, Config),
+ Wc = filename:join(Data, "zzz.*"),
Files = filelib:wildcard(Wc),
[run_otp_8180(F) || F <- Files],
ok.
run_otp_8180(Name) ->
io:format("~s", [Name]),
- ?line {ok,Bins} = file:consult(Name),
+ {ok,Bins} = file:consult(Name),
[begin
io:format("~p\n", [Bin]),
- ?line {'EXIT',{badarg,_}} = (catch binary_to_term_stress(Bin))
+ {'EXIT',{badarg,_}} = (catch binary_to_term_stress(Bin))
end || Bin <- Bins],
ok.
@@ -1517,7 +1505,7 @@ cmp_old_impl(Config) when is_list(Config) ->
false ->
{skipped, "No "++Rel++" available"};
true ->
- {ok, Node} = ?t:start_node(list_to_atom(atom_to_list(?MODULE)++"_"++Rel),
+ {ok, Node} = test_server:start_node(list_to_atom(atom_to_list(?MODULE)++"_"++Rel),
peer,
[{args, " -setcookie "++Cookie},
{erl, [{release, Rel}]}]),
@@ -1559,7 +1547,7 @@ cmp_old_impl(Config) when is_list(Config) ->
cmp_node(Node, {erlang, bitstring_to_list, [list_to_bitstring(list2bitstrlist(mk_list(1000000)))]}),
cmp_node(Node, {erlang, bitstring_to_list, [list_to_bitstring(list2bitstrlist(mk_list(10000000)))]}),
- ?t:stop_node(Node),
+ test_server:stop_node(Node),
ok
end.
diff --git a/erts/emulator/test/bs_bincomp_SUITE.erl b/erts/emulator/test/bs_bincomp_SUITE.erl
index 8836fe40ae..c481e93e41 100644
--- a/erts/emulator/test/bs_bincomp_SUITE.erl
+++ b/erts/emulator/test/bs_bincomp_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/erts/emulator/test/bs_bit_binaries_SUITE.erl b/erts/emulator/test/bs_bit_binaries_SUITE.erl
index 0896fad8ed..d393bc5b91 100644
--- a/erts/emulator/test/bs_bit_binaries_SUITE.erl
+++ b/erts/emulator/test/bs_bit_binaries_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.
@@ -57,9 +57,9 @@ end_per_group(_GroupName, Config) ->
misc(Config) when is_list(Config) ->
- ?line <<1:100>> = id(<<1:100>>),
- ?line {ok,ok} = {match(7),match(9)},
- ?line {ok,ok} = {match1(15),match1(31)},
+ <<1:100>> = id(<<1:100>>),
+ {ok,ok} = {match(7),match(9)},
+ {ok,ok} = {match1(15),match1(31)},
ok.
@@ -76,70 +76,70 @@ match1(N) ->
ok.
test_bit_size(Config) when is_list(Config) ->
- ?line 101 = bit_size(<<1:101>>),
- ?line 1001 = bit_size(<<1:1001>>),
- ?line 80 = bit_size(<<1:80>>),
- ?line 800 = 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 = bit_size(<<1:101>>),
+ 1001 = bit_size(<<1:1001>>),
+ 80 = bit_size(<<1:80>>),
+ 800 = 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 = bit_size(HugeBin),
- ?line 0 = bit_size(<<>>),
+ 0 = 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>> = 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:800,2,3,4,1:1>> = list_to_bitstring(bitstring_to_list(<<1:800,2,3,4,1:1>>)),
+ [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
+ Pid ! {self(),<<1:7,8:5,Bin/bitstring>>},
+ receive
ok ->
ok
end.
@@ -176,8 +176,8 @@ receiver_alot(Bin) ->
append(Config) when is_list(Config) ->
cs_init(),
- ?line <<(-1):256/signed-unit:8>> = cs(do_append(id(<<>>), 256*8)),
- ?line <<(-1):256/signed-unit:8>> = cs(do_append2(id(<<>>), 256*4)),
+ <<(-1):256/signed-unit:8>> = cs(do_append(id(<<>>), 256*8)),
+ <<(-1):256/signed-unit:8>> = cs(do_append2(id(<<>>), 256*4)),
<<(-1):256/signed-unit:8>> = cs(do_append3(id(<<>>), 256*8)),
cs_end().
diff --git a/erts/emulator/test/bs_construct_SUITE.erl b/erts/emulator/test/bs_construct_SUITE.erl
index 1fa7353252..941cb435f7 100644
--- a/erts/emulator/test/bs_construct_SUITE.erl
+++ b/erts/emulator/test/bs_construct_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,8 +22,7 @@
-module(bs_construct_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,
test1/1, test2/1, test3/1, test4/1, test5/1, testf/1,
not_used/1, in_guard/1,
mem_leak/1, coerce_to_float/1, bjorn/1,
@@ -33,7 +32,9 @@
-include_lib("common_test/include/ct.hrl").
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap, {seconds, 10}}].
all() ->
[test1, test2, test3, test4, test5, testf, not_used,
@@ -42,21 +43,6 @@ all() ->
copy_writable_binary, kostis, dynamic, bs_add, otp_7422, zero_width,
bad_append, bs_add_overflow].
-groups() ->
- [].
-
-init_per_suite(Config) ->
- Config.
-
-end_per_suite(_Config) ->
- ok.
-
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
-
big(1) ->
57285702734876389752897683.
@@ -68,9 +54,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) ->
[
@@ -189,7 +175,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 ->
@@ -197,7 +183,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]),
@@ -218,7 +204,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
@@ -253,23 +239,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_13 = i(13),
+ I_big1 = big(1),
+ Vars = [{'I_13', I_13},
{'I_big1', I_big1}],
- ?line lists:foreach(fun one_test/1, eval_list(l(I_13, I_big1), Vars)).
+ lists:foreach(fun one_test/1, eval_list(l(I_13, I_big1), Vars)).
%%% Misc
@@ -285,10 +270,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;
@@ -313,10 +297,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)>>)].
@@ -324,10 +307,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;
@@ -345,11 +327,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;
@@ -363,47 +344,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>>,
+ ?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(<<<<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.
@@ -413,14 +393,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) ->
@@ -436,11 +415,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),
@@ -454,16 +433,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) ->
@@ -477,18 +456,18 @@ make_bin(0, Acc) -> Acc;
make_bin(N, Acc) -> make_bin(N-1, <<Acc/binary,Acc/binary>>).
-define(COF(Int0),
- ?line (fun(Int) ->
+ (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>>).
+ true = <<Int0:32/float>> =:= <<(float(Int0)):32/float>>,
+ true = <<Int0:64/float>> =:= <<(float(Int0)):64/float>>).
-define(COF64(Int0),
- ?line (fun(Int) ->
+ (fun(Int) ->
true = <<Int:64/float>> =:= <<(float(Int)):64/float>>
end)(nonliteral(Int0)),
- ?line true = <<Int0:64/float>> =:= <<(float(Int0)):64/float>>).
+ true = <<Int0:64/float>> =:= <<(float(Int0)):64/float>>).
nonliteral(X) -> X.
@@ -507,7 +486,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() ->
@@ -535,46 +514,47 @@ 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))>>),
- ?line garbage_collect(),
+ ct:timetrap({seconds, 30}),
+ 16777216 = size(<<0:(id(1 bsl 26)),(-1):(id(1 bsl 26))>>),
+ garbage_collect(),
{Shift,Return} = case free_mem() of
undefined ->
%% This test has to be inlined inside the case to
%% use a literal Shift
- ?line garbage_collect(),
- ?line id(<<0:((1 bsl 32)-1)>>),
+ garbage_collect(),
+ id(<<0:((1 bsl 32)-1)>>),
{32,ok};
Mb when Mb > 600 ->
- ?line garbage_collect(),
- ?line id(<<0:((1 bsl 32)-1)>>),
+ garbage_collect(),
+ id(<<0:((1 bsl 32)-1)>>),
{32,ok};
Mb when Mb > 300 ->
- ?line garbage_collect(),
- ?line id(<<0:((1 bsl 31)-1)>>),
+ garbage_collect(),
+ id(<<0:((1 bsl 31)-1)>>),
{31,"Limit huge binaries to 256 Mb"};
_ ->
- ?line garbage_collect(),
- ?line id(<<0:((1 bsl 30)-1)>>),
+ garbage_collect(),
+ id(<<0:((1 bsl 30)-1)>>),
{30,"Limit huge binary to 128 Mb"}
end,
- ?line garbage_collect(),
- ?line id(<<0:((1 bsl Shift)-1)>>),
- ?line garbage_collect(),
- ?line id(<<0:(id((1 bsl Shift)-1))>>),
- ?line garbage_collect(),
+ garbage_collect(),
+ id(<<0:((1 bsl Shift)-1)>>),
+ garbage_collect(),
+ id(<<0:(id((1 bsl Shift)-1))>>),
+ garbage_collect(),
case Return of
ok -> ok;
Comment -> {comment, Comment}
@@ -609,16 +589,16 @@ free_mem() ->
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))>>),
%% Would fail to load.
- ?line {'EXIT',{system_limit,_}} = (catch <<0:(1 bsl 67)>>),
- ?line {'EXIT',{system_limit,_}} = (catch <<0:((1 bsl 64)+1)>>),
+ {'EXIT',{system_limit,_}} = (catch <<0:(1 bsl 67)>>),
+ {'EXIT',{system_limit,_}} = (catch <<0:((1 bsl 64)+1)>>),
case WordSize of
4 ->
@@ -628,60 +608,59 @@ 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>>),
%% The size would be silently truncated, resulting in a crash.
- ?line {'EXIT',{system_limit,_}} = (catch <<0:(1 bsl 35)>>),
- ?line {'EXIT',{system_limit,_}} = (catch <<0:((1 bsl 32)+1)>>),
+ {'EXIT',{system_limit,_}} = (catch <<0:(1 bsl 35)>>),
+ {'EXIT',{system_limit,_}} = (catch <<0:((1 bsl 32)+1)>>),
%% Would fail to load.
- ?line {'EXIT',{system_limit,_}} = (catch <<0:(1 bsl 43)>>),
- ?line {'EXIT',{system_limit,_}} = (catch <<0:((1 bsl 40)+1)>>),
+ {'EXIT',{system_limit,_}} = (catch <<0:(1 bsl 43)>>),
+ {'EXIT',{system_limit,_}} = (catch <<0:((1 bsl 40)+1)>>),
ok.
badarg(Config) when is_list(Config) ->
- ?line {'EXIT',{badarg,_}} =
+ {'EXIT',{badarg,_}} =
(catch <<0:(id(1 bsl 100)),0:(id(-1))>>),
- ?line {'EXIT',{badarg,_}} =
+ {'EXIT',{badarg,_}} =
(catch <<0:(id(1 bsl 100)),0:(id(-(1 bsl 70)))>>),
- ?line {'EXIT',{badarg,_}} =
+ {'EXIT',{badarg,_}} =
(catch <<0:(id(-(1 bsl 70))),0:(id(1 bsl 100))>>),
- ?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() ->
+ 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),
- ?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),
+ 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("Unexpected message: ~p", [Other])
end,
ok.
@@ -722,8 +701,8 @@ have_250_terabytes_of_ram() -> false.
%% give the same result.
dynamic(Config) when is_list(Config) ->
- ?line dynamic_1(fun dynamic_big/5),
- ?line dynamic_1(fun dynamic_little/5),
+ dynamic_1(fun dynamic_big/5),
+ dynamic_1(fun dynamic_little/5),
ok.
dynamic_1(Dynamic) ->
@@ -802,32 +781,32 @@ bs_add(Config) when is_list(Config) ->
return],
%% Write assembly file and assemble it.
- ?line PrivDir = ?config(priv_dir, Config),
- ?line RootName = filename:join(PrivDir, atom_to_list(Mod)),
- ?line AsmFile = RootName ++ ".S",
- ?line {ok,Fd} = file:open(AsmFile, [write]),
- ?line [io:format(Fd, "~p. \n", [T]) || T <- Code],
- ?line ok = file:close(Fd),
- ?line {ok,Mod} = compile:file(AsmFile, [from_asm,report,{outdir,PrivDir}]),
- ?line LoadRc = code:load_abs(RootName),
- ?line {module,_Module} = LoadRc,
+ PrivDir = proplists:get_value(priv_dir, Config),
+ RootName = filename:join(PrivDir, atom_to_list(Mod)),
+ AsmFile = RootName ++ ".S",
+ {ok,Fd} = file:open(AsmFile, [write]),
+ [io:format(Fd, "~p. \n", [T]) || T <- Code],
+ ok = file:close(Fd),
+ {ok,Mod} = compile:file(AsmFile, [from_asm,report,{outdir,PrivDir}]),
+ LoadRc = code:load_abs(RootName),
+ {module,_Module} = LoadRc,
%% Find smallest positive bignum.
- ?line SmallestBig = smallest_big(),
- ?line io:format("~p\n", [SmallestBig]),
- ?line Expected = SmallestBig + N,
+ SmallestBig = smallest_big(),
+ io:format("~p\n", [SmallestBig]),
+ Expected = SmallestBig + N,
DoTest = fun() ->
exit(Mod:bs_add(SmallestBig, -SmallestBig))
end,
- ?line {Pid,Mref} = spawn_monitor(DoTest),
+ {Pid,Mref} = spawn_monitor(DoTest),
receive
{'DOWN',Mref,process,Pid,Res} -> ok
end,
- ?line Expected = Res,
+ Expected = Res,
%% Clean up.
- ?line ok = file:delete(AsmFile),
- ?line ok = file:delete(code:which(Mod)),
+ ok = file:delete(AsmFile),
+ ok = file:delete(code:which(Mod)),
ok.
@@ -868,17 +847,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>>,
+ <<>> = <<Small:Z>>,
+ <<>> = <<Small:0>>,
+ <<>> = <<Big:Z>>,
+ <<>> = <<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>>),
+ {'EXIT',{badarg,_}} = (catch <<not_a_number:0>>),
+ {'EXIT',{badarg,_}} = (catch <<(id(not_a_number)):Z>>),
+ {'EXIT',{badarg,_}} = (catch <<(id(not_a_number)):0>>),
ok.
@@ -935,8 +914,8 @@ bs_add_overflow(Config) ->
Large = <<0:((1 bsl 30)-1)>>,
{'EXIT',{system_limit,_}} =
(catch <<Large/bits, Large/bits, Large/bits, Large/bits,
- Large/bits, Large/bits, Large/bits, Large/bits,
- Large/bits>>),
+ Large/bits, Large/bits, Large/bits, Large/bits,
+ Large/bits>>),
ok
end.
diff --git a/erts/emulator/test/bs_match_bin_SUITE.erl b/erts/emulator/test/bs_match_bin_SUITE.erl
index 2185e43498..f5c996ae9e 100644
--- a/erts/emulator/test/bs_match_bin_SUITE.erl
+++ b/erts/emulator/test/bs_match_bin_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.
@@ -47,33 +47,33 @@ end_per_group(_GroupName, Config) ->
Config.
-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,
+ bit_split_binary1(Fun, erlang:md5(<<1,2,3>>)),
+ bit_split_binary1(Fun,
make_unaligned_sub_binary(erlang:md5(<<1,2,3>>))),
ok.
@@ -119,19 +119,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/erts/emulator/test/bs_match_int_SUITE.erl b/erts/emulator/test/bs_match_int_SUITE.erl
index 48c2b4644e..a7bd4b8ac3 100644
--- a/erts/emulator/test/bs_match_int_SUITE.erl
+++ b/erts/emulator/test/bs_match_int_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.
@@ -51,22 +51,22 @@ end_per_group(_GroupName, Config) ->
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) ->
@@ -89,13 +89,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
@@ -130,7 +130,7 @@ 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.
@@ -139,7 +139,7 @@ more_dynamic(Config) when is_list(Config) ->
<<_:SkipBef,Int:N,_:SkipAft>> = Bin,
Int = make_int(List, N, 0)
end,
- ?line more_dynamic1(Unsigned, erlang:md5(mkbin([42]))),
+ more_dynamic1(Unsigned, erlang:md5(mkbin([42]))),
%% Signed big-endian numbers.
Signed = fun(Bin, List, SkipBef, N) ->
@@ -151,10 +151,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(signed_big_endian_fail)
end
end,
- ?line more_dynamic1(Signed, erlang:md5(mkbin([43]))),
+ more_dynamic1(Signed, erlang:md5(mkbin([43]))),
%% Unsigned little-endian numbers.
UnsLittle = fun(Bin, List, SkipBef, N) ->
@@ -162,7 +162,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, erlang:md5(mkbin([44]))),
+ more_dynamic1(UnsLittle, erlang:md5(mkbin([44]))),
%% Signed little-endian numbers.
SignLittle = fun(Bin, List, SkipBef, N) ->
@@ -171,7 +171,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, erlang:md5(mkbin([45]))),
+ more_dynamic1(SignLittle, erlang:md5(mkbin([45]))),
ok.
@@ -227,23 +227,23 @@ mkbin(L) when is_list(L) -> list_to_binary(L).
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
@@ -251,15 +251,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
+ 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),
+ ok = overflow_huge_int_unit128(Bin, Sizes),
ok.
@@ -326,19 +326,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/erts/emulator/test/bs_match_misc_SUITE.erl b/erts/emulator/test/bs_match_misc_SUITE.erl
index b161d9544e..17759d78f3 100644
--- a/erts/emulator/test/bs_match_misc_SUITE.erl
+++ b/erts/emulator/test/bs_match_misc_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,8 +19,7 @@
%%
-module(bs_match_misc_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,
bound_var/1,bound_tail/1,t_float/1,little_float/1,sean/1,
kenneth/1,encode_binary/1,native/1,happi/1,
size_var/1,wiger/1,x0_context/1,huge_float_field/1,
@@ -29,7 +28,9 @@
-include_lib("common_test/include/ct.hrl").
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap, {seconds, 10}}].
all() ->
[bound_var, bound_tail, t_float, little_float, sean,
@@ -37,39 +38,24 @@ all() ->
x0_context, huge_float_field, writable_binary_matched,
otp_7198, unordered_bindings, float_middle_endian].
-groups() ->
- [].
-init_per_suite(Config) ->
- Config.
-
-end_per_suite(_Config) ->
- ok.
-
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
-
-
-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;
@@ -79,26 +65,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.
@@ -115,15 +101,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.
@@ -151,16 +137,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;
@@ -292,28 +278,28 @@ getBase64Char(_Else) ->
-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) ->
@@ -334,16 +320,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.
@@ -359,11 +345,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->
@@ -396,24 +382,24 @@ x0_2(_, Bin) ->
x0_3(_, Bin) ->
case Bin of
- <<_:72,7:8,_/binary>> ->
- ?line ?t:fail();
- <<_:64,0:16,_/binary>> ->
- ?line ?t:fail();
- <<_:64,42:16,123456:32,_/binary>> ->
- ok
+ <<_:72,7:8,_/binary>> ->
+ ct:fail(bs_matched_1);
+ <<_:64,0:16,_/binary>> ->
+ ct:fail(bs_matched_2);
+ <<_:64,42:16,123456:32,_/binary>> ->
+ ok
end.
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
@@ -455,15 +441,15 @@ overflow_huge_float(_, []) -> ok.
overflow_huge_float_unit128(Bin, [Sz0|Sizes]) ->
Sz = id(1 bsl Sz0),
case Bin of
- <<_:Sz/float-unit:128,0,_/binary>> ->
- {error,Sz};
- _ ->
- case Bin of
- <<Var:Sz/float-unit:128,0,_/binary>> ->
- {error,Sz,Var};
- _ ->
- overflow_huge_float_unit128(Bin, Sizes)
- end
+ <<_:Sz/float-unit:128,0,_/binary>> ->
+ {error,Sz};
+ _ ->
+ case Bin of
+ <<Var:Sz/float-unit:128,0,_/binary>> ->
+ {error,Sz,Var};
+ _ ->
+ overflow_huge_float_unit128(Bin, Sizes)
+ end
end;
overflow_huge_float_unit128(_, []) -> ok.
@@ -473,25 +459,24 @@ 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)
+ if N =:= 0 -> ok;
+ true ->
+ put(grow_heap, [N|get(grow_heap)]),
+ 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() ->
@@ -502,7 +487,7 @@ otp_7198(Config) when is_list(Config) ->
%% 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) ->
@@ -512,8 +497,7 @@ do_otp_7198(FillerSize) ->
{'DOWN',Ref,process,Pid,normal} ->
ok;
{'DOWN',Ref,process,Pid,Reason} ->
- io:format("unexpected: ~p", [Reason]),
- ?line ?t:fail()
+ ct:fail("unexpected: ~p", [Reason])
end.
do_otp_7198_test(_) ->
@@ -540,27 +524,27 @@ otp_7198_scan(<<>>, 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]);
+ otp_7198_scan(<<Z, Rest/binary>>, ['AND' | TokAcc]);
otp_7198_scan(<<D>>, TokAcc) when
(D =:= $D) or (D =:= $d) ->
- otp_7198_scan(<<>>, ['AND' | TokAcc]);
+ 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]);
+ 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.
+ 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>>} =
diff --git a/erts/emulator/test/bs_match_tail_SUITE.erl b/erts/emulator/test/bs_match_tail_SUITE.erl
index baa86e6d4a..cbebc554c7 100644
--- a/erts/emulator/test/bs_match_tail_SUITE.erl
+++ b/erts/emulator/test/bs_match_tail_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,8 +21,8 @@
-module(bs_match_tail_SUITE).
-author('[email protected]').
--export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
- init_per_group/2,end_per_group/2,aligned/1,unaligned/1,zero_tail/1]).
+-export([all/0, suite/0,
+ aligned/1,unaligned/1,zero_tail/1]).
-include_lib("common_test/include/ct.hrl").
@@ -31,51 +31,36 @@ suite() -> [{ct_hooks,[ts_install_cth]}].
all() ->
[aligned, unaligned, zero_tail].
-groups() ->
- [].
-init_per_suite(Config) ->
- Config.
-
-end_per_suite(_Config) ->
- ok.
-
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
-
-
-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}.
@@ -90,11 +75,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.
@@ -102,7 +87,3 @@ test_zero_tail(<<A:8>>) -> A.
test_zero_tail2(<<_A:4,_B:4>>) -> ok.
mkbin(L) when is_list(L) -> list_to_binary(L).
-
-
-
-
diff --git a/erts/emulator/test/bs_utf_SUITE.erl b/erts/emulator/test/bs_utf_SUITE.erl
index 91e4e30dd2..a344f5c456 100644
--- a/erts/emulator/test/bs_utf_SUITE.erl
+++ b/erts/emulator/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.
@@ -20,9 +20,7 @@
-module(bs_utf_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,
utf8_roundtrip/1,utf16_roundtrip/1,utf32_roundtrip/1,
utf8_illegal_sequences/1,utf16_illegal_sequences/1,
utf32_illegal_sequences/1,
@@ -30,42 +28,20 @@
-include_lib("common_test/include/ct.hrl").
--define(FAIL(Expr), ?line fail_check(catch Expr, ??Expr, [])).
+-define(FAIL(Expr), fail_check(catch Expr, ??Expr, [])).
-init_per_testcase(Func, Config) when is_atom(Func), is_list(Config) ->
- Dog = ?t:timetrap(?t:minutes(6)),
- [{watchdog,Dog}|Config].
-
-end_per_testcase(_Func, Config) ->
- Dog = ?config(watchdog, Config),
- ?t:timetrap_cancel(Dog).
-
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap, {minutes, 6}}].
all() ->
[utf8_roundtrip, utf16_roundtrip, utf32_roundtrip,
utf8_illegal_sequences, utf16_illegal_sequences,
utf32_illegal_sequences, bad_construction].
-groups() ->
- [].
-
-init_per_suite(Config) ->
- Config.
-
-end_per_suite(_Config) ->
- ok.
-
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
-
-
utf8_roundtrip(Config) when is_list(Config) ->
- ?line utf8_roundtrip(0, 16#D7FF),
- ?line utf8_roundtrip(16#E000, 16#10FFFF),
+ utf8_roundtrip(0, 16#D7FF),
+ utf8_roundtrip(16#E000, 16#10FFFF),
ok.
utf8_roundtrip(First, Last) when First =< Last ->
@@ -83,10 +59,9 @@ utf16_roundtrip(Config) when is_list(Config) ->
Big = fun utf16_big_roundtrip/1,
Little = fun utf16_little_roundtrip/1,
PidRefs = [spawn_monitor(fun() ->
- do_utf16_roundtrip(Fun)
- end) || Fun <- [Big,Little]],
- [receive {'DOWN',Ref,process,Pid,Reason} -> normal=Reason end ||
- {Pid,Ref} <- PidRefs],
+ do_utf16_roundtrip(Fun)
+ end) || Fun <- [Big,Little]],
+ [receive {'DOWN',Ref,process,Pid,Reason} -> normal=Reason end || {Pid,Ref} <- PidRefs],
ok.
do_utf16_roundtrip(Fun) ->
@@ -154,20 +129,20 @@ utf32_little_roundtrip(Char) ->
ok.
utf8_illegal_sequences(Config) when is_list(Config) ->
- ?line fail_range(16#10FFFF+1, 16#10FFFF+512), %Too large.
- ?line fail_range(16#D800, 16#DFFF), %Reserved for UTF-16.
+ fail_range(16#10FFFF+1, 16#10FFFF+512), %Too large.
+ fail_range(16#D800, 16#DFFF), %Reserved for UTF-16.
%% Illegal first character.
- ?line [fail(<<I,16#8F,16#8F,16#8F>>) || I <- lists:seq(16#80, 16#BF)],
+ [fail(<<I,16#8F,16#8F,16#8F>>) || I <- lists:seq(16#80, 16#BF)],
%% Short sequences.
- ?line short_sequences(16#80, 16#10FFFF),
+ short_sequences(16#80, 16#10FFFF),
%% Overlong sequences. (Using more bytes than necessary
%% is not allowed.)
- ?line overlong(0, 127, 2),
- ?line overlong(128, 16#7FF, 3),
- ?line overlong(16#800, 16#FFFF, 4),
+ overlong(0, 127, 2),
+ overlong(128, 16#7FF, 3),
+ overlong(16#800, 16#FFFF, 4),
ok.
fail_range(Char, End) when Char =< End ->
@@ -187,9 +162,9 @@ short_sequences(Char, End) ->
short_sequences_1(Char, Step, End) when Char =< End ->
CharEnd = lists:min([Char+Step-1,End]),
[spawn_monitor(fun() ->
- io:format("~p - ~p\n", [Char,CharEnd]),
- do_short_sequences(Char, CharEnd)
- end)|short_sequences_1(Char+Step, Step, End)];
+ io:format("~p - ~p\n", [Char,CharEnd]),
+ do_short_sequences(Char, CharEnd)
+ end)|short_sequences_1(Char+Step, Step, End)];
short_sequences_1(_, _, _) -> [].
do_short_sequences(Char, End) when Char =< End ->
@@ -228,9 +203,9 @@ overlong(_, _, _) -> ok.
overlong(Char, NumBytes) when NumBytes < 5 ->
case int_to_utf8(Char, NumBytes) of
<<Char/utf8>>=Bin ->
- ?t:fail({illegal_encoding_accepted,Bin,Char});
+ ct:fail({illegal_encoding_accepted,Bin,Char});
<<OtherChar/utf8>>=Bin ->
- ?t:fail({illegal_encoding_accepted,Bin,Char,OtherChar});
+ ct:fail({illegal_encoding_accepted,Bin,Char,OtherChar});
_ -> ok
end,
overlong(Char, NumBytes+1);
@@ -241,16 +216,16 @@ fail(Bin) ->
fail_1(make_unaligned(Bin)).
fail_1(<<Char/utf8>>=Bin) ->
- ?t:fail({illegal_encoding_accepted,Bin,Char});
+ ct:fail({illegal_encoding_accepted,Bin,Char});
fail_1(_) -> ok.
utf16_illegal_sequences(Config) when is_list(Config) ->
- ?line utf16_fail_range(16#10FFFF+1, 16#10FFFF+512), %Too large.
- ?line utf16_fail_range(16#D800, 16#DFFF), %Reserved for UTF-16.
+ utf16_fail_range(16#10FFFF+1, 16#10FFFF+512), %Too large.
+ utf16_fail_range(16#D800, 16#DFFF), %Reserved for UTF-16.
- ?line lonely_hi_surrogate(16#D800, 16#DFFF),
- ?line leading_lo_surrogate(16#DC00, 16#DFFF),
+ lonely_hi_surrogate(16#D800, 16#DFFF),
+ leading_lo_surrogate(16#DC00, 16#DFFF),
ok.
@@ -265,9 +240,9 @@ lonely_hi_surrogate(Char, End) when Char =< End ->
BinLittle = <<Char:16/little>>,
case {BinBig,BinLittle} of
{<<Bad/big-utf16>>,_} ->
- ?t:fail({lonely_hi_surrogate_accepted,Bad});
+ ct:fail({lonely_hi_surrogate_accepted,Bad});
{_,<<Bad/little-utf16>>} ->
- ?t:fail({lonely_hi_surrogate_accepted,Bad});
+ ct:fail({lonely_hi_surrogate_accepted,Bad});
{_,_} ->
ok
end,
@@ -284,9 +259,9 @@ leading_lo_surrogate(HiSurr, LoSurr, End) when LoSurr =< End ->
BinLittle = <<HiSurr:16/little,LoSurr:16/little>>,
case {BinBig,BinLittle} of
{<<Bad/big-utf16,_/bits>>,_} ->
- ?t:fail({leading_lo_surrogate_accepted,Bad});
+ ct:fail({leading_lo_surrogate_accepted,Bad});
{_,<<Bad/little-utf16,_/bits>>} ->
- ?t:fail({leading_lo_surrogate_accepted,Bad});
+ ct:fail({leading_lo_surrogate_accepted,Bad});
{_,_} ->
ok
end,
@@ -294,20 +269,20 @@ leading_lo_surrogate(HiSurr, LoSurr, End) when LoSurr =< End ->
leading_lo_surrogate(_, _, _) -> ok.
utf32_illegal_sequences(Config) when is_list(Config) ->
- ?line utf32_fail_range(16#10FFFF+1, 16#10FFFF+512), %Too large.
- ?line utf32_fail_range(16#D800, 16#DFFF), %Reserved for UTF-16.
- ?line utf32_fail_range(-100, -1),
+ utf32_fail_range(16#10FFFF+1, 16#10FFFF+512), %Too large.
+ utf32_fail_range(16#D800, 16#DFFF), %Reserved for UTF-16.
+ utf32_fail_range(-100, -1),
ok.
utf32_fail_range(Char, End) when Char =< End ->
{'EXIT',_} = (catch <<Char/big-utf32>>),
{'EXIT',_} = (catch <<Char/little-utf32>>),
case {<<Char:32>>,<<Char:32/little>>} of
- {<<Unexpected/utf32>>,_} ->
- ?line ?t:fail(Unexpected);
- {_,<<Unexpected/little-utf32>>} ->
- ?line ?t:fail(Unexpected);
- {_,_} -> ok
+ {<<Unexpected/utf32>>,_} ->
+ ct:fail(Unexpected);
+ {_,<<Unexpected/little-utf32>>} ->
+ ct:fail(Unexpected);
+ {_,_} -> ok
end,
utf32_fail_range(Char+1, End);
utf32_fail_range(_, _) -> ok.
@@ -387,14 +362,14 @@ 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).
evaluate(Str, Vars) ->
{ok,Tokens,_} =
@@ -406,4 +381,3 @@ evaluate(Str, Vars) ->
end.
id(I) -> I.
-
diff --git a/erts/emulator/test/busy_port_SUITE.erl b/erts/emulator/test/busy_port_SUITE.erl
index 0e81141907..bb0632ae08 100644
--- a/erts/emulator/test/busy_port_SUITE.erl
+++ b/erts/emulator/test/busy_port_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,8 +20,7 @@
-module(busy_port_SUITE).
--export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
- init_per_group/2,end_per_group/2,end_per_testcase/2,
+-export([all/0, suite/0, end_per_testcase/2,
io_to_busy/1, message_order/1, send_3/1,
system_monitor/1, no_trap_exit/1,
no_trap_exit_unlinked/1, trap_exit/1, multiple_writers/1,
@@ -34,7 +33,9 @@
%% Internal exports.
-export([init/2]).
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap, {minutes, 4}}].
all() ->
[io_to_busy, message_order, send_3, system_monitor,
@@ -43,21 +44,6 @@ all() ->
scheduling_delay_busy,scheduling_delay_busy_nosuspend,
scheduling_busy_link].
-groups() ->
- [].
-
-init_per_suite(Config) ->
- Config.
-
-end_per_suite(_Config) ->
- ok.
-
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
-
end_per_testcase(_Case, Config) when is_list(Config) ->
case whereis(busy_drv_server) of
undefined ->
@@ -76,17 +62,14 @@ end_per_testcase(_Case, Config) when is_list(Config) ->
%% Tests I/O operations to a busy port, to make sure a suspended send
%% operation is correctly restarted. This used to crash Beam.
-io_to_busy(suite) -> [];
io_to_busy(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(30)),
+ ct:timetrap({seconds, 30}),
- ?line start_busy_driver(Config),
- ?line process_flag(trap_exit, true),
- ?line Writer = fun_spawn(fun writer/0),
- ?line Generator = fun_spawn(fun() -> generator(100, Writer) end),
- ?line wait_for([Writer, Generator]),
-
- ?line test_server:timetrap_cancel(Dog),
+ start_busy_driver(Config),
+ process_flag(trap_exit, true),
+ Writer = fun_spawn(fun writer/0),
+ Generator = fun_spawn(fun() -> generator(100, Writer) end),
+ wait_for([Writer, Generator]),
ok.
generator(N, Writer) ->
@@ -130,27 +113,24 @@ forget(_) ->
%% Test the interaction of busy ports and message sending.
%% This used to cause the wrong message to be received.
-message_order(suite) -> {req, dynamic_loading};
message_order(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(10)),
-
- ?line start_busy_driver(Config),
- ?line Self = self(),
- ?line Busy = fun_spawn(fun () -> send_to_busy_1(Self) end),
- ?line receive after 1000 -> ok end,
- ?line Busy ! first,
- ?line Busy ! second,
- ?line receive after 1 -> ok end,
- ?line unlock_slave(),
- ?line Busy ! third,
- ?line receive
- {Busy, first} ->
- ok;
- Other ->
- test_server:fail({unexpected_message, Other})
- end,
-
- ?line test_server:timetrap_cancel(Dog),
+ ct:timetrap({seconds, 10}),
+
+ start_busy_driver(Config),
+ Self = self(),
+ Busy = fun_spawn(fun () -> send_to_busy_1(Self) end),
+ receive after 1000 -> ok end,
+ Busy ! first,
+ Busy ! second,
+ receive after 1 -> ok end,
+ unlock_slave(),
+ Busy ! third,
+ receive
+ {Busy, first} ->
+ ok;
+ Other ->
+ ct:fail({unexpected_message, Other})
+ end,
ok.
send_to_busy_1(Parent) ->
@@ -164,80 +144,64 @@ send_to_busy_1(Parent) ->
end.
%% Test the bif send/3
-send_3(suite) -> {req,dynamic_loading};
-send_3(doc) -> ["Test the BIF send/3"];
send_3(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(10)),
+ ct:timetrap({seconds, 10}),
%%
- ?line start_busy_driver(Config),
- ?line {Owner,Slave} = get_slave(),
- ?line ok = erlang:send(Slave, {Owner,{command,"set busy"}},
- [nosuspend]),
+ start_busy_driver(Config),
+ {Owner,Slave} = get_slave(),
+ ok = erlang:send(Slave, {Owner,{command,"set busy"}}, [nosuspend]),
receive after 100 -> ok end, % ensure command reached port
- ?line nosuspend = erlang:send(Slave, {Owner,{command,"busy"}},
- [nosuspend]),
- ?line unlock_slave(),
- ?line ok = erlang:send(Slave, {Owner,{command,"not busy"}},
- [nosuspend]),
- ?line ok = command(stop),
- %%
- ?line test_server:timetrap_cancel(Dog),
+ nosuspend = erlang:send(Slave, {Owner,{command,"busy"}}, [nosuspend]),
+ unlock_slave(),
+ ok = erlang:send(Slave, {Owner,{command,"not busy"}}, [nosuspend]),
+ ok = command(stop),
ok.
%% Test the erlang:system_monitor(Pid, [busy_port])
-system_monitor(suite) -> {req,dynamic_loading};
-system_monitor(doc) -> ["Test erlang:system_monitor({Pid,[busy_port]})."];
system_monitor(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(10)),
- ?line Self = self(),
+ ct:timetrap({seconds, 10}),
+ Self = self(),
%%
- ?line OldMonitor = erlang:system_monitor(Self, [busy_port]),
- ?line {Self,[busy_port]} = erlang:system_monitor(),
- ?line Void = make_ref(),
- ?line start_busy_driver(Config),
- ?line {Owner,Slave} = get_slave(),
- ?line Master = command(get_master),
- ?line Parent = self(),
- ?line Busy =
- spawn_link(
- fun() ->
- (catch port_command(Slave, "set busy")),
- receive {Parent,alpha} -> ok end,
- (catch port_command(Slave, "busy")),
- (catch port_command(Slave, "free")),
- Parent ! {self(),alpha},
- command(lock),
- receive {Parent,beta} -> ok end,
- command({port_command,"busy"}),
- command({port_command,"free"}),
- Parent ! {self(),beta}
- end),
- ?line Void = rec(Void),
- ?line Busy ! {self(),alpha},
- ?line {monitor,Busy,busy_port,Slave} = rec(Void),
- ?line unlock_slave(),
- ?line {Busy,alpha} = rec(Void),
- ?line Void = rec(Void),
- ?line Busy ! {self(), beta},
- ?line {monitor,Owner,busy_port,Slave} = rec(Void),
- ?line port_command(Master, "u"),
- ?line {Busy,beta} = rec(Void),
- ?line Void = rec(Void),
- ?line _NewMonitor = erlang:system_monitor(OldMonitor),
- ?line OldMonitor = erlang:system_monitor(),
- ?line OldMonitor = erlang:system_monitor(OldMonitor),
- %%
- ?line test_server:timetrap_cancel(Dog),
+ OldMonitor = erlang:system_monitor(Self, [busy_port]),
+ {Self,[busy_port]} = erlang:system_monitor(),
+ Void = make_ref(),
+ start_busy_driver(Config),
+ {Owner,Slave} = get_slave(),
+ Master = command(get_master),
+ Parent = self(),
+ Busy = spawn_link(
+ fun() ->
+ (catch port_command(Slave, "set busy")),
+ receive {Parent,alpha} -> ok end,
+ (catch port_command(Slave, "busy")),
+ (catch port_command(Slave, "free")),
+ Parent ! {self(),alpha},
+ command(lock),
+ receive {Parent,beta} -> ok end,
+ command({port_command,"busy"}),
+ command({port_command,"free"}),
+ Parent ! {self(),beta}
+ end),
+ Void = rec(Void),
+ Busy ! {self(),alpha},
+ {monitor,Busy,busy_port,Slave} = rec(Void),
+ unlock_slave(),
+ {Busy,alpha} = rec(Void),
+ Void = rec(Void),
+ Busy ! {self(), beta},
+ {monitor,Owner,busy_port,Slave} = rec(Void),
+ port_command(Master, "u"),
+ {Busy,beta} = rec(Void),
+ Void = rec(Void),
+ _NewMonitor = erlang:system_monitor(OldMonitor),
+ OldMonitor = erlang:system_monitor(),
+ OldMonitor = erlang:system_monitor(OldMonitor),
ok.
-
-
rec(Tag) ->
receive X -> X after 1000 -> Tag end.
-
-
%% Assuming the following scenario,
%%
%% +---------------+ +-----------+
@@ -248,65 +212,59 @@ rec(Tag) ->
%%
%% tests that the suspended process is killed if the port is killed.
-no_trap_exit(suite) -> [];
no_trap_exit(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(10)),
- ?line process_flag(trap_exit, true),
- ?line Pid = fun_spawn(fun no_trap_exit_process/3,
- [self(), linked, Config]),
- ?line receive
- {Pid, port_created, Port} ->
- io:format("Process ~w created port ~w", [Pid, Port]),
- ?line exit(Port, die);
- Other1 ->
- test_server:fail({unexpected_message, Other1})
- end,
- ?line receive
- {'EXIT', Pid, die} ->
- ok;
- Other2 ->
- test_server:fail({unexpected_message, Other2})
- end,
-
- ?line test_server:timetrap_cancel(Dog),
+ ct:timetrap({seconds, 10}),
+ process_flag(trap_exit, true),
+ Pid = fun_spawn(fun no_trap_exit_process/3, [self(), linked, Config]),
+ receive
+ {Pid, port_created, Port} ->
+ io:format("Process ~w created port ~w", [Pid, Port]),
+ exit(Port, die);
+ Other1 ->
+ ct:fail({unexpected_message, Other1})
+ end,
+ receive
+ {'EXIT', Pid, die} ->
+ ok;
+ Other2 ->
+ ct:fail({unexpected_message, Other2})
+ end,
ok.
%% The same scenario as above, but the port has been explicitly
%% unlinked from the process.
-no_trap_exit_unlinked(suite) -> [];
no_trap_exit_unlinked(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(10)),
- ?line process_flag(trap_exit, true),
- ?line Pid = fun_spawn(fun no_trap_exit_process/3,
- [self(), unlink, Config]),
- ?line receive
- {Pid, port_created, Port} ->
- io:format("Process ~w created port ~w", [Pid, Port]),
- ?line exit(Port, die);
- Other1 ->
- test_server:fail({unexpected_message, Other1})
- end,
- ?line receive
- {'EXIT', Pid, normal} ->
- ok;
- Other2 ->
- test_server:fail({unexpected_message, Other2})
- end,
- ?line test_server:timetrap_cancel(Dog),
+ ct:timetrap({seconds, 10}),
+ process_flag(trap_exit, true),
+ Pid = fun_spawn(fun no_trap_exit_process/3,
+ [self(), unlink, Config]),
+ receive
+ {Pid, port_created, Port} ->
+ io:format("Process ~w created port ~w", [Pid, Port]),
+ exit(Port, die);
+ Other1 ->
+ ct:fail({unexpected_message, Other1})
+ end,
+ receive
+ {'EXIT', Pid, normal} ->
+ ok;
+ Other2 ->
+ ct:fail({unexpected_message, Other2})
+ end,
ok.
no_trap_exit_process(ResultTo, Link, Config) ->
- ?line load_busy_driver(Config),
- ?line _Master = open_port({spawn, "busy_drv master"}, [eof]),
- ?line Slave = open_port({spawn, "busy_drv slave"}, [eof]),
- ?line case Link of
- linked -> ok;
- unlink -> unlink(Slave)
- end,
- ?line (catch port_command(Slave, "lock port")),
- ?line ResultTo ! {self(), port_created, Slave},
- ?line (catch port_command(Slave, "suspend me")),
+ load_busy_driver(Config),
+ _Master = open_port({spawn, "busy_drv master"}, [eof]),
+ Slave = open_port({spawn, "busy_drv slave"}, [eof]),
+ case Link of
+ linked -> ok;
+ unlink -> unlink(Slave)
+ end,
+ (catch port_command(Slave, "lock port")),
+ ResultTo ! {self(), port_created, Slave},
+ (catch port_command(Slave, "suspend me")),
ok.
%% Assuming the following scenario,
@@ -320,36 +278,34 @@ no_trap_exit_process(ResultTo, Link, Config) ->
%% tests that the suspended process is scheduled runnable and
%% receives an 'EXIT' message if the port is killed.
-trap_exit(suite) -> [];
trap_exit(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(10)),
- ?line Pid = fun_spawn(fun busy_port_exit_process/2, [self(), Config]),
- ?line receive
+ ct:timetrap({seconds, 10}),
+ Pid = fun_spawn(fun busy_port_exit_process/2, [self(), Config]),
+ receive
{Pid, port_created, Port} ->
io:format("Process ~w created port ~w", [Pid, Port]),
- ?line unlink(Pid),
- ?line {status, suspended} = process_info(Pid, status),
- ?line exit(Port, die);
+ unlink(Pid),
+ {status, suspended} = process_info(Pid, status),
+ exit(Port, die);
Other1 ->
- test_server:fail({unexpected_message, Other1})
+ ct:fail({unexpected_message, Other1})
end,
- ?line receive
+ receive
{Pid, ok} ->
ok;
Other2 ->
- test_server:fail({unexpected_message, Other2})
+ ct:fail({unexpected_message, Other2})
end,
- ?line test_server:timetrap_cancel(Dog),
ok.
busy_port_exit_process(ResultTo, Config) ->
- ?line process_flag(trap_exit, true),
- ?line load_busy_driver(Config),
- ?line _Master = open_port({spawn, "busy_drv master"}, [eof]),
- ?line Slave = open_port({spawn, "busy_drv slave"}, [eof]),
- ?line (catch port_command(Slave, "lock port")),
- ?line ResultTo ! {self(), port_created, Slave},
- ?line (catch port_command(Slave, "suspend me")),
+ process_flag(trap_exit, true),
+ load_busy_driver(Config),
+ _Master = open_port({spawn, "busy_drv master"}, [eof]),
+ Slave = open_port({spawn, "busy_drv slave"}, [eof]),
+ (catch port_command(Slave, "lock port")),
+ ResultTo ! {self(), port_created, Slave},
+ (catch port_command(Slave, "suspend me")),
receive
{'EXIT', Slave, die} ->
ResultTo ! {self(), ok};
@@ -362,19 +318,18 @@ busy_port_exit_process(ResultTo, Config) ->
%% This should work even if some of the processes have terminated
%% in the meantime.
-multiple_writers(suite) -> [];
multiple_writers(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(10)),
- ?line start_busy_driver(Config),
- ?line process_flag(trap_exit, true),
+ ct:timetrap({seconds, 10}),
+ start_busy_driver(Config),
+ process_flag(trap_exit, true),
%% Start the waiters and make sure they have blocked.
- ?line W1 = fun_spawn(fun quick_writer/0),
- ?line W2 = fun_spawn(fun quick_writer/0),
- ?line W3 = fun_spawn(fun quick_writer/0),
- ?line W4 = fun_spawn(fun quick_writer/0),
- ?line W5 = fun_spawn(fun quick_writer/0),
- ?line test_server:sleep(500), % Make sure writers have blocked.
+ W1 = fun_spawn(fun quick_writer/0),
+ W2 = fun_spawn(fun quick_writer/0),
+ W3 = fun_spawn(fun quick_writer/0),
+ W4 = fun_spawn(fun quick_writer/0),
+ W5 = fun_spawn(fun quick_writer/0),
+ test_server:sleep(500), % Make sure writers have blocked.
%% Kill two of the processes.
exit(W1, kill),
@@ -383,10 +338,8 @@ multiple_writers(Config) when is_list(Config) ->
receive {'EXIT', W3, killed} -> ok end,
%% Unlock the port. The surviving processes should be become runnable.
- ?line unlock_slave(),
- ?line wait_for([W2, W4, W5]),
-
- ?line test_server:timetrap_cancel(Dog),
+ unlock_slave(),
+ wait_for([W2, W4, W5]),
ok.
quick_writer() ->
@@ -402,205 +355,193 @@ soft_busy_driver(Config) when is_list(Config) ->
hs_test(Config, false).
hs_test(Config, HardBusy) when is_list(Config) ->
- ?line DrvName = case HardBusy of
- true -> 'hard_busy_drv';
- false -> 'soft_busy_drv'
- end,
- ?line erl_ddll:start(),
- ?line Path = ?config(data_dir, Config),
+ DrvName = case HardBusy of
+ true -> 'hard_busy_drv';
+ false -> 'soft_busy_drv'
+ end,
+ erl_ddll:start(),
+ Path = proplists:get_value(data_dir, Config),
case erl_ddll:load_driver(Path, DrvName) of
- ok -> ok;
- {error, Error} ->
- io:format("~s\n", [erl_ddll:format_error(Error)]),
- ?line ?t:fail()
+ ok -> ok;
+ {error, Error} ->
+ ct:fail(erl_ddll:format_error(Error))
end,
- ?line Port = open_port({spawn, DrvName}, []),
-
+ Port = open_port({spawn, DrvName}, []),
+
NotSuspended = fun (Proc) ->
- chk_not_value({status,suspended},
- process_info(Proc, status))
- end,
+ chk_not_value({status,suspended},
+ process_info(Proc, status))
+ end,
NotBusyEnd = fun (Proc, Res, Time) ->
- receive
- {Port, caller, Proc} -> ok
- after
- 500 -> exit(missing_caller_message)
- end,
- chk_value({return, true}, Res),
- chk_range(0, Time, 100)
- end,
+ receive
+ {Port, caller, Proc} -> ok
+ after
+ 500 -> exit(missing_caller_message)
+ end,
+ chk_value({return, true}, Res),
+ chk_range(0, Time, 100)
+ end,
ForceEnd = fun (Proc, Res, Time) ->
- case HardBusy of
- false ->
- NotBusyEnd(Proc, Res, Time);
- true ->
- chk_value({error, notsup}, Res),
- chk_range(0, Time, 100),
- receive
- Msg -> exit({unexpected_msg, Msg})
- after
- 500 -> ok
- end
- end
- end,
+ case HardBusy of
+ false ->
+ NotBusyEnd(Proc, Res, Time);
+ true ->
+ chk_value({error, notsup}, Res),
+ chk_range(0, Time, 100),
+ receive
+ Msg -> exit({unexpected_msg, Msg})
+ after
+ 500 -> ok
+ end
+ end
+ end,
BadArg = fun (_Proc, Res, Time) ->
- chk_value({error, badarg}, Res),
- chk_range(0, Time, 100)
- end,
+ chk_value({error, badarg}, Res),
+ chk_range(0, Time, 100)
+ end,
%% Not busy
%% Not busy; nosuspend option
- ?line hs_busy_pcmd(Port, [nosuspend], NotSuspended, NotBusyEnd),
+ hs_busy_pcmd(Port, [nosuspend], NotSuspended, NotBusyEnd),
%% Not busy; force option
- ?line hs_busy_pcmd(Port, [force], NotSuspended, ForceEnd),
+ hs_busy_pcmd(Port, [force], NotSuspended, ForceEnd),
%% Not busy; force and nosuspend option
- ?line hs_busy_pcmd(Port, [force, nosuspend], NotSuspended, ForceEnd),
+ hs_busy_pcmd(Port, [force, nosuspend], NotSuspended, ForceEnd),
%% Not busy; no option
- ?line hs_busy_pcmd(Port, [], NotSuspended, NotBusyEnd),
+ hs_busy_pcmd(Port, [], NotSuspended, NotBusyEnd),
%% Not busy; bad option
- ?line hs_busy_pcmd(Port, [bad_option], NotSuspended, BadArg),
+ hs_busy_pcmd(Port, [bad_option], NotSuspended, BadArg),
%% Make busy
- ?line erlang:port_control(Port, $B, []),
+ erlang:port_control(Port, $B, []),
%% Busy; nosuspend option
- ?line hs_busy_pcmd(Port, [nosuspend], NotSuspended,
- fun (_Proc, Res, Time) ->
- chk_value({return, false}, Res),
- chk_range(0, Time, 100),
- receive
- Msg -> exit({unexpected_msg, Msg})
- after
- 500 -> ok
- end
- end),
+ hs_busy_pcmd(Port, [nosuspend], NotSuspended,
+ fun (_Proc, Res, Time) ->
+ chk_value({return, false}, Res),
+ chk_range(0, Time, 100),
+ receive
+ Msg -> exit({unexpected_msg, Msg})
+ after
+ 500 -> ok
+ end
+ end),
%% Busy; force option
- ?line hs_busy_pcmd(Port, [force], NotSuspended, ForceEnd),
+ hs_busy_pcmd(Port, [force], NotSuspended, ForceEnd),
%% Busy; force and nosuspend option
- ?line hs_busy_pcmd(Port, [force, nosuspend], NotSuspended, ForceEnd),
+ hs_busy_pcmd(Port, [force, nosuspend], NotSuspended, ForceEnd),
%% Busy; bad option
- ?line hs_busy_pcmd(Port, [bad_option], NotSuspended, BadArg),
+ hs_busy_pcmd(Port, [bad_option], NotSuspended, BadArg),
%% no option on busy port
- ?line hs_busy_pcmd(Port, [],
- fun (Proc) ->
- receive after 1000 -> ok end,
- chk_value({status,suspended},
- process_info(Proc, status)),
-
- %% Make not busy
- erlang:port_control(Port, $N, [])
- end,
- fun (_Proc, Res, Time) ->
- chk_value({return, true}, Res),
- chk_range(1000, Time, 2000)
- end),
-
- ?line true = erlang:port_close(Port),
- ?line ok = erl_ddll:unload_driver(DrvName),
- ?line ok = erl_ddll:stop(),
- ?line ok.
+ hs_busy_pcmd(Port, [],
+ fun (Proc) ->
+ receive after 1000 -> ok end,
+ chk_value({status,suspended},
+ process_info(Proc, status)),
+
+ %% Make not busy
+ erlang:port_control(Port, $N, [])
+ end,
+ fun (_Proc, Res, Time) ->
+ chk_value({return, true}, Res),
+ chk_range(1000, Time, 2000)
+ end),
+
+ true = erlang:port_close(Port),
+ ok = erl_ddll:unload_driver(DrvName),
+ ok = erl_ddll:stop(),
+ ok.
hs_busy_pcmd(Prt, Opts, StartFun, EndFun) ->
Tester = self(),
P = spawn_link(fun () ->
- erlang:yield(),
- Tester ! {self(), doing_port_command},
- Start = erlang:monotonic_time(micro_seconds),
- Res = try {return,
- port_command(Prt, [], Opts)}
- catch Exception:Error -> {Exception, Error}
- end,
- End = erlang:monotonic_time(micro_seconds),
- Time = round((End - Start)/1000),
- Tester ! {self(), port_command_result, Res, Time}
- end),
+ erlang:yield(),
+ Tester ! {self(), doing_port_command},
+ Start = erlang:monotonic_time(micro_seconds),
+ Res = try {return,
+ port_command(Prt, [], Opts)}
+ catch Exception:Error -> {Exception, Error}
+ end,
+ End = erlang:monotonic_time(micro_seconds),
+ Time = round((End - Start)/1000),
+ Tester ! {self(), port_command_result, Res, Time}
+ end),
receive
- {P, doing_port_command} ->
- ok
+ {P, doing_port_command} ->
+ ok
end,
StartFun(P),
receive
- {P, port_command_result, Res, Time} ->
- EndFun(P, Res, Time)
+ {P, port_command_result, Res, Time} ->
+ EndFun(P, Res, Time)
end.
scheduling_delay_busy(Config) ->
-
- Scenario =
- [{1,{spawn,[{var,drvname},undefined]}},
- {2,{call,[{var,1},open_port]}},
- {3,{spawn,[{var,2},{var,1}]}},
- {0,{ack,[{var,1},{busy,1,250}]}},
- {0,{cast,[{var,3},{command,2}]}},
- [{0,{cast,[{var,3},{command,I}]}}
- || I <- lists:seq(3,50)],
- {0,{cast,[{var,3},take_control]}},
- {0,{cast,[{var,1},{new_owner,{var,3}}]}},
- {0,{cast,[{var,3},close]}},
- {0,{timer,sleep,[300]}},
- {0,{erlang,port_command,[{var,2},<<$N>>,[force]]}},
- [{0,{cast,[{var,1},{command,I}]}}
- || I <- lists:seq(101,127)]
- ,{10,{call,[{var,3},get_data]}}
- ],
+ Scenario = [{1,{spawn,[{var,drvname},undefined]}},
+ {2,{call,[{var,1},open_port]}},
+ {3,{spawn,[{var,2},{var,1}]}},
+ {0,{ack,[{var,1},{busy,1,250}]}},
+ {0,{cast,[{var,3},{command,2}]}},
+ [{0,{cast,[{var,3},{command,I}]}} || I <- lists:seq(3,50)],
+ {0,{cast,[{var,3},take_control]}},
+ {0,{cast,[{var,1},{new_owner,{var,3}}]}},
+ {0,{cast,[{var,3},close]}},
+ {0,{timer,sleep,[300]}},
+ {0,{erlang,port_command,[{var,2},<<$N>>,[force]]}},
+ [{0,{cast,[{var,1},{command,I}]}} || I <- lists:seq(101,127)],
+ {10,{call,[{var,3},get_data]}}],
Validation = [{seq,10,lists:seq(1,50)}],
- port_scheduling(Scenario,Validation,?config(data_dir,Config)).
+ port_scheduling(Scenario,Validation,proplists:get_value(data_dir,Config)).
scheduling_delay_busy_nosuspend(Config) ->
-
- Scenario =
- [{1,{spawn,[{var,drvname},undefined]}},
- {2,{call,[{var,1},open_port]}},
- {0,{cast,[{var,1},{command,1,100}]}},
- {0,{cast,[{var,1},{busy,2}]}},
- {0,{timer,sleep,[200]}}, % ensure reached port
- {10,{call,[{var,1},{command,3,[nosuspend]}]}},
- {0,{timer,sleep,[200]}},
- {0,{erlang,port_command,[{var,2},<<$N>>,[force]]}},
- {0,{cast,[{var,1},close]}},
- {20,{call,[{var,1},get_data]}}
- ],
+ Scenario = [{1,{spawn,[{var,drvname},undefined]}},
+ {2,{call,[{var,1},open_port]}},
+ {0,{cast,[{var,1},{command,1,100}]}},
+ {0,{cast,[{var,1},{busy,2}]}},
+ {0,{timer,sleep,[200]}}, % ensure reached port
+ {10,{call,[{var,1},{command,3,[nosuspend]}]}},
+ {0,{timer,sleep,[200]}},
+ {0,{erlang,port_command,[{var,2},<<$N>>,[force]]}},
+ {0,{cast,[{var,1},close]}},
+ {20,{call,[{var,1},get_data]}}],
Validation = [{eq,10,nosuspend},{seq,20,[1,2]}],
- port_scheduling(Scenario,Validation,?config(data_dir,Config)).
+ port_scheduling(Scenario,Validation,proplists:get_value(data_dir,Config)).
scheduling_busy_link(Config) ->
-
- Scenario =
- [{1,{spawn,[{var,drvname},undefined]}},
- {2,{call,[{var,1},open_port]}},
- {3,{spawn,[{var,2},{var,1}]}},
- {0,{cast,[{var,1},unlink]}},
- {0,{cast,[{var,1},{busy,1}]}},
- {0,{cast,[{var,1},{command,2}]}},
- {0,{cast,[{var,1},link]}},
- {0,{timer,sleep,[1000]}},
- {0,{ack,[{var,3},take_control]}},
- {0,{cast,[{var,1},{new_owner,{var,3}}]}},
- {0,{cast,[{var,3},close]}},
- {10,{call,[{var,3},get_data]}},
- {20,{call,[{var,1},get_exit]}}
- ],
+ Scenario = [{1,{spawn,[{var,drvname},undefined]}},
+ {2,{call,[{var,1},open_port]}},
+ {3,{spawn,[{var,2},{var,1}]}},
+ {0,{cast,[{var,1},unlink]}},
+ {0,{cast,[{var,1},{busy,1}]}},
+ {0,{cast,[{var,1},{command,2}]}},
+ {0,{cast,[{var,1},link]}},
+ {0,{timer,sleep,[1000]}},
+ {0,{ack,[{var,3},take_control]}},
+ {0,{cast,[{var,1},{new_owner,{var,3}}]}},
+ {0,{cast,[{var,3},close]}},
+ {10,{call,[{var,3},get_data]}},
+ {20,{call,[{var,1},get_exit]}}],
Validation = [{seq,10,[1]},
{seq,20,[{'EXIT',noproc}]}],
- port_scheduling(Scenario,Validation,?config(data_dir,Config)).
+ port_scheduling(Scenario,Validation,proplists:get_value(data_dir,Config)).
process_init(DrvName,Owner) ->
process_flag(trap_exit,true),
@@ -699,11 +640,11 @@ handle_msg(close,Port,Owner,_Data) ->
handle_msg(get_data,Port,_Owner,{[],_Exit}) ->
%% Wait for data if it has not arrived yet
receive
- {Port,{data,Data}} ->
- Data
+ {Port,{data,Data}} ->
+ Data
after 2000 ->
- pal("~p",[erlang:process_info(self())]),
- exit(did_not_get_port_data)
+ pal("~p",[erlang:process_info(self())]),
+ exit(did_not_get_port_data)
end;
handle_msg(get_data,_Port,Owner,{Data,Exit}) ->
pal("GetData",[]),
@@ -753,8 +694,7 @@ port_scheduling(Scenario,Validation,Path) ->
case erl_ddll:load_driver(Path, DrvName) of
ok -> ok;
{error, Error} ->
- io:format("~s\n", [erl_ddll:format_error(Error)]),
- ?line ?t:fail()
+ ct:fail(erl_ddll:format_error(Error))
end,
Data = run_scenario(lists:flatten(Scenario),[{drvname,DrvName}]),
@@ -860,7 +800,7 @@ wait_for(Pids) ->
{'EXIT', Pid, normal} ->
wait_for(lists:delete(Pid, Pids));
Other ->
- test_server:fail({bad_exit, Other})
+ ct:fail({bad_exit, Other})
end.
fun_spawn(Fun) ->
@@ -896,39 +836,38 @@ fun_spawn(Fun, Args) ->
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
load_busy_driver(Config) when is_list(Config) ->
- ?line DataDir = ?config(data_dir, Config),
- ?line erl_ddll:start(),
+ DataDir = proplists:get_value(data_dir, Config),
+ erl_ddll:start(),
case erl_ddll:load_driver(DataDir, "busy_drv") of
ok -> ok;
{error, Error} ->
- io:format("~s\n", [erl_ddll:format_error(Error)]),
- ?line ?t:fail()
+ ct:fail(erl_ddll:format_error(Error))
end.
%%% Interface functions.
start_busy_driver(Config) when is_list(Config) ->
- ?line Pid = spawn_link(?MODULE, init, [Config, self()]),
- ?line receive
+ Pid = spawn_link(?MODULE, init, [Config, self()]),
+ receive
{Pid, started} ->
ok;
Other ->
- test_server:fail({unexpected_message, Other})
+ ct:fail({unexpected_message, Other})
end.
unlock_slave() ->
command(unlock).
get_slave() ->
- ?line command(get_slave).
+ command(get_slave).
%% Internal functions.
command(Msg) ->
- ?line whereis(busy_drv_server) ! {self(), Msg},
- ?line receive
- {busy_drv_reply, Reply} ->
- Reply
+ whereis(busy_drv_server) ! {self(), Msg},
+ receive
+ {busy_drv_reply, Reply} ->
+ Reply
end.
%%% Server.
diff --git a/erts/emulator/test/busy_port_SUITE_data/Makefile.src b/erts/emulator/test/busy_port_SUITE_data/Makefile.src
index 0f2842e515..ae6378a6ff 100644
--- a/erts/emulator/test/busy_port_SUITE_data/Makefile.src
+++ b/erts/emulator/test/busy_port_SUITE_data/Makefile.src
@@ -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/erts/emulator/test/busy_port_SUITE_data/hard_busy_drv.c b/erts/emulator/test/busy_port_SUITE_data/hard_busy_drv.c
index f83fa1eeaa..c4e0f13f06 100644
--- a/erts/emulator/test/busy_port_SUITE_data/hard_busy_drv.c
+++ b/erts/emulator/test/busy_port_SUITE_data/hard_busy_drv.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/erts/emulator/test/busy_port_SUITE_data/hs_busy_drv.c b/erts/emulator/test/busy_port_SUITE_data/hs_busy_drv.c
index be913cf56e..ffaca18e90 100644
--- a/erts/emulator/test/busy_port_SUITE_data/hs_busy_drv.c
+++ b/erts/emulator/test/busy_port_SUITE_data/hs_busy_drv.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/erts/emulator/test/busy_port_SUITE_data/scheduling_drv.c b/erts/emulator/test/busy_port_SUITE_data/scheduling_drv.c
index 40e42b6ac2..296b3f21de 100644
--- a/erts/emulator/test/busy_port_SUITE_data/scheduling_drv.c
+++ b/erts/emulator/test/busy_port_SUITE_data/scheduling_drv.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/erts/emulator/test/busy_port_SUITE_data/soft_busy_drv.c b/erts/emulator/test/busy_port_SUITE_data/soft_busy_drv.c
index 3c5bafb451..8a98f050f1 100644
--- a/erts/emulator/test/busy_port_SUITE_data/soft_busy_drv.c
+++ b/erts/emulator/test/busy_port_SUITE_data/soft_busy_drv.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/erts/emulator/test/call_trace_SUITE.erl b/erts/emulator/test/call_trace_SUITE.erl
index b9f8fe52f3..6ba6301c7c 100644
--- a/erts/emulator/test/call_trace_SUITE.erl
+++ b/erts/emulator/test/call_trace_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.
@@ -21,66 +21,46 @@
-module(call_trace_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,
- hipe/1,process_specs/1,basic/1,flags/1,errors/1,pam/1,change_pam/1,
- return_trace/1,exception_trace/1,on_load/1,deep_exception/1,
- upgrade/1,
- exception_nocatch/1,bit_syntax/1]).
+-export([all/0, suite/0,
+ init_per_testcase/2,end_per_testcase/2,
+ hipe/1,process_specs/1,basic/1,flags/1,errors/1,pam/1,change_pam/1,
+ return_trace/1,exception_trace/1,on_load/1,deep_exception/1,
+ upgrade/1,
+ exception_nocatch/1,bit_syntax/1]).
%% Helper functions.
-export([bar/0,foo/0,foo/1,foo/2,expect/1,worker_foo/1,pam_foo/2,nasty/0,
- id/1,deep/3,deep_1/3,deep_2/2,deep_3/2,deep_4/1,deep_5/1,
- bs_sum_a/2,bs_sum_b/2]).
+ id/1,deep/3,deep_1/3,deep_2/2,deep_3/2,deep_4/1,deep_5/1,
+ bs_sum_a/2,bs_sum_b/2]).
%% Debug
-export([abbr/1,abbr/2]).
-
-include_lib("common_test/include/ct.hrl").
-define(P, 20).
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap, {seconds, 30}}].
all() ->
Common = [errors, on_load],
NotHipe = [process_specs, basic, flags, pam, change_pam,
- upgrade,
- return_trace, exception_trace, deep_exception,
- exception_nocatch, bit_syntax],
+ upgrade,
+ return_trace, exception_trace, deep_exception,
+ exception_nocatch, bit_syntax],
Hipe = [hipe],
case test_server:is_native(call_trace_SUITE) of
- true -> Hipe ++ Common;
- false -> NotHipe ++ Common
+ true -> Hipe ++ Common;
+ false -> NotHipe ++ Common
end.
-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(Func, Config) when is_atom(Func), is_list(Config) ->
- Dog = ?t:timetrap(?t:seconds(30)),
- [{watchdog, Dog}|Config].
+ Config.
end_per_testcase(_Func, Config) ->
- Dog = ?config(watchdog, Config),
- ?t:timetrap_cancel(Dog),
-
%% Reloading the module will clear all trace patterns, and
%% in a debug-compiled emulator run assertions of the counters
%% for the number of traced exported functions in this module.
@@ -88,51 +68,63 @@ end_per_testcase(_Func, Config) ->
c:l(?MODULE).
hipe(Config) when is_list(Config) ->
- ?line 0 = erlang:trace_pattern({?MODULE,worker_foo,1}, true),
- ?line 0 = erlang:trace_pattern({?MODULE,worker_foo,1}, true, [local]),
- ?line AllFuncs = erlang:trace_pattern({'_','_','_'}, true),
+ 0 = erlang:trace_pattern({?MODULE,worker_foo,1}, true),
+ 0 = erlang:trace_pattern({?MODULE,worker_foo,1}, true, [local]),
+ AllFuncs = erlang:trace_pattern({'_','_','_'}, true),
%% Make sure that a traced, exported function can still be found.
- ?line true = erlang:function_exported(error_handler, undefined_function, 3),
- ?line AllFuncs = erlang:trace_pattern({'_','_','_'}, false),
+ true = erlang:function_exported(error_handler, undefined_function, 3),
+ AllFuncs = erlang:trace_pattern({'_','_','_'}, false),
ok.
-process_specs(doc) ->
- "Tests 'all', 'new', and 'existing' for specifying processes.";
-process_specs(suite) -> [];
+%% Tests 'all', 'new', and 'existing' for specifying processes.
process_specs(Config) when is_list(Config) ->
- ?line Tracer = start_tracer(),
- ?line {flags,[call]} = trace_info(self(), flags),
- ?line {tracer,Tracer} = trace_info(self(), tracer),
- ?line trace_func({?MODULE,worker_foo,1}, []),
-
- %% Test the 'new' flag.
-
- ?line {Work1A,Work1B} = start_and_trace(new, [1,2,3], A1B={3,2,1}),
- {flags,[]} = trace_info(Work1A, flags),
- {tracer,[]} = trace_info(Work1A, tracer),
- {tracer,Tracer} = trace_info(Work1B, tracer),
- {flags,[call]} = trace_info(Work1B, flags),
- ?line expect({trace,Work1B,call,{?MODULE,worker_foo,[A1B]}}),
- ?line unlink(Work1B),
- ?line Mref = erlang:monitor(process, Work1B),
- ?line exit(Work1B, kill),
- receive
- {'DOWN',Mref,_,_,_} -> ok
- end,
- ?line undefined = trace_info(Work1B, flags),
- ?line {flags,[]} = trace_info(new, flags),
- ?line {tracer,[]} = trace_info(new, tracer),
-
- %% Test the 'existing' flag.
- ?line {Work2A,_Work2B} = start_and_trace(existing, A2A=[5,6,7], [7,6,5]),
- ?line expect({trace,Work2A,call,{?MODULE,worker_foo,[A2A]}}),
-
- %% Test the 'all' flag.
- ?line {Work3A,Work3B} = start_and_trace(all, A3A=[12,13], A3B=[13,12]),
- ?line expect({trace,Work3A,call,{?MODULE,worker_foo,[A3A]}}),
- ?line expect({trace,Work3B,call,{?MODULE,worker_foo,[A3B]}}),
-
+ Tracer = start_tracer(),
+ {flags,[call]} = trace_info(self(), flags),
+ {tracer,Tracer} = trace_info(self(), tracer),
+ trace_func({?MODULE,worker_foo,1}, []),
+
+ %% Test the 'new' and 'new_processes' flags.
+
+ New = fun(Flag) ->
+ {Work1A,Work1B} = start_and_trace(Flag, [1,2,3], A1B={3,2,1}),
+ {flags,[]} = trace_info(Work1A, flags),
+ {tracer,[]} = trace_info(Work1A, tracer),
+ {tracer,Tracer} = trace_info(Work1B, tracer),
+ {flags,[call]} = trace_info(Work1B, flags),
+ expect({trace,Work1B,call,{?MODULE,worker_foo,[A1B]}}),
+ unlink(Work1B),
+ Mref = erlang:monitor(process, Work1B),
+ exit(Work1B, kill),
+ receive
+ {'DOWN',Mref,_,_,_} -> ok
+ end,
+ undefined = trace_info(Work1B, flags),
+ {flags,[]} = trace_info(Flag, flags),
+ {tracer,[]} = trace_info(Flag, tracer)
+ end,
+ New(new),
+ New(new_processes),
+
+ %% Test the 'existing' and 'existing_processes' flags.
+ Existing =
+ fun(Flag) ->
+ {Work2A,_Work2B} = start_and_trace(Flag, A2A=[5,6,7], [7,6,5]),
+ expect({trace,Work2A,call,{?MODULE,worker_foo,[A2A]}})
+ end,
+ Existing(existing),
+ Existing(existing_processes),
+
+ %% Test the 'all' and 'processes' flags.
+ All =
+ fun(Flag) ->
+ {Work3A,Work3B} = start_and_trace(Flag, A3A=[12,13], A3B=[13,12]),
+ expect({trace,Work3A,call,{?MODULE,worker_foo,[A3A]}}),
+ expect({trace,Work3B,call,{?MODULE,worker_foo,[A3B]}})
+ end,
+ All(all),
+ All(processes),
+
ok.
start_and_trace(Flag, A1, A2) ->
@@ -142,33 +134,33 @@ start_and_trace(Flag, A1, A2) ->
call_worker(W1, A1),
call_worker(W2, A2),
case Flag of
- new ->
- {flags,[call]} = trace_info(new, flags),
- {tracer,_} = trace_info(new, tracer);
- _Other ->
- ok
+ new ->
+ {flags,[call]} = trace_info(new, flags),
+ {tracer,_} = trace_info(new, tracer);
+ _Other ->
+ ok
end,
trace_pid(Flag, false, [call]),
{W1,W2}.
start_worker() ->
- ?line spawn(fun worker_loop/0).
+ spawn(fun worker_loop/0).
call_worker(Pid, Arg) ->
Pid ! {self(),{call,Arg}},
receive
- {result,Res} -> Res
+ {result,Res} -> Res
after 5000 ->
- ?line ?t:fail(no_answer_from_worker)
+ ct:fail(no_answer_from_worker)
end.
worker_loop() ->
receive
- {From,{call,Arg}} ->
- From ! {result,?MODULE:worker_foo(Arg)},
- worker_loop();
- Other ->
- exit({unexpected_message,Other})
+ {From,{call,Arg}} ->
+ From ! {result,?MODULE:worker_foo(Arg)},
+ worker_loop();
+ Other ->
+ exit({unexpected_message,Other})
end.
worker_foo(_Arg) ->
@@ -177,98 +169,98 @@ worker_foo(_Arg) ->
%% Basic test of the call tracing (we trace one process).
basic(_Config) ->
case test_server:is_native(lists) of
- true -> {skip,"lists is native"};
- false -> basic()
+ true -> {skip,"lists is native"};
+ false -> basic()
end.
basic() ->
- ?line start_tracer(),
- ?line trace_info(self(), flags),
- ?line trace_info(self(), tracer),
- ?line 0 = trace_func({?MODULE,no_such_function,0}, []),
- ?line {traced,undefined} =
- trace_info({?MODULE,no_such_function,0}, traced),
- ?line {match_spec, undefined} =
- trace_info({?MODULE,no_such_function,0}, match_spec),
+ start_tracer(),
+ trace_info(self(), flags),
+ trace_info(self(), tracer),
+ 0 = trace_func({?MODULE,no_such_function,0}, []),
+ {traced,undefined} =
+ trace_info({?MODULE,no_such_function,0}, traced),
+ {match_spec, undefined} =
+ trace_info({?MODULE,no_such_function,0}, match_spec),
%% Trace some functions...
- ?line trace_func({lists,'_','_'}, []),
+ trace_func({lists,'_','_'}, []),
%% Make sure that tracing the same functions more than once
%% does not cause any problems.
- ?line 3 = trace_func({?MODULE,foo,'_'}, true),
- ?line 3 = trace_func({?MODULE,foo,'_'}, true),
- ?line 1 = trace_func({?MODULE,bar,0}, true),
- ?line 1 = trace_func({?MODULE,bar,0}, true),
- ?line {traced,global} = trace_info({?MODULE,bar,0}, traced),
- ?line 1 = trace_func({erlang,list_to_integer,1}, true),
- ?line {traced,global} = trace_info({erlang,list_to_integer,1}, traced),
+ 3 = trace_func({?MODULE,foo,'_'}, true),
+ 3 = trace_func({?MODULE,foo,'_'}, true),
+ 1 = trace_func({?MODULE,bar,0}, true),
+ 1 = trace_func({?MODULE,bar,0}, true),
+ {traced,global} = trace_info({?MODULE,bar,0}, traced),
+ 1 = trace_func({erlang,list_to_integer,1}, true),
+ {traced,global} = trace_info({erlang,list_to_integer,1}, traced),
%% ... and call them...
- ?line AList = [x,y,z],
- ?line true = lists:member(y, AList),
- ?line foo0 = ?MODULE:foo(),
- ?line 4 = ?MODULE:foo(3),
- ?line 11 = ?MODULE:foo(7, 4),
- ?line ok = ?MODULE:bar(),
- ?line 42 = list_to_integer(non_literal("42")),
+ AList = [x,y,z],
+ true = lists:member(y, AList),
+ foo0 = ?MODULE:foo(),
+ 4 = ?MODULE:foo(3),
+ 11 = ?MODULE:foo(7, 4),
+ ok = ?MODULE:bar(),
+ 42 = list_to_integer(non_literal("42")),
%% ... make sure the we got trace messages (but not for ?MODULE:expect/1).
- ?line Self = self(),
- ?line ?MODULE:expect({trace,Self,call,{lists,member,[y,AList]}}),
- ?line ?MODULE:expect({trace,Self,call,{?MODULE,foo,[]}}),
- ?line ?MODULE:expect({trace,Self,call,{?MODULE,foo,[3]}}),
- ?line ?MODULE:expect({trace,Self,call,{?MODULE,foo,[7,4]}}),
- ?line ?MODULE:expect({trace,Self,call,{?MODULE,bar,[]}}),
- ?line ?MODULE:expect({trace,Self,call,{erlang,list_to_integer,["42"]}}),
+ Self = self(),
+ ?MODULE:expect({trace,Self,call,{lists,member,[y,AList]}}),
+ ?MODULE:expect({trace,Self,call,{?MODULE,foo,[]}}),
+ ?MODULE:expect({trace,Self,call,{?MODULE,foo,[3]}}),
+ ?MODULE:expect({trace,Self,call,{?MODULE,foo,[7,4]}}),
+ ?MODULE:expect({trace,Self,call,{?MODULE,bar,[]}}),
+ ?MODULE:expect({trace,Self,call,{erlang,list_to_integer,["42"]}}),
%% Turn off trace for this module and call functions...
- ?line trace_func({?MODULE,'_','_'}, false),
- ?line {traced,false} = trace_info({?MODULE,bar,0}, traced),
- ?line foo0 = ?MODULE:foo(),
- ?line 4 = ?MODULE:foo(3),
- ?line 11 = ?MODULE:foo(7, 4),
- ?line ok = ?MODULE:bar(),
- ?line [1,2,3,4,5,6,7,8,9,10] = lists:seq(1, 10),
- ?line 777 = list_to_integer(non_literal("777")),
+ trace_func({?MODULE,'_','_'}, false),
+ {traced,false} = trace_info({?MODULE,bar,0}, traced),
+ foo0 = ?MODULE:foo(),
+ 4 = ?MODULE:foo(3),
+ 11 = ?MODULE:foo(7, 4),
+ ok = ?MODULE:bar(),
+ [1,2,3,4,5,6,7,8,9,10] = lists:seq(1, 10),
+ 777 = list_to_integer(non_literal("777")),
%% ... turn on all trace messages...
- ?line trace_func({'_','_','_'}, false),
- ?line [b,a] = lists:reverse([a,b]),
+ trace_func({'_','_','_'}, false),
+ [b,a] = lists:reverse([a,b]),
%% Read out the remaing trace messages.
- ?line ?MODULE:expect({trace,Self,call,{lists,seq,[1,10]}}),
- ?line ?MODULE:expect({trace,Self,call,{erlang,list_to_integer,["777"]}}),
+ ?MODULE:expect({trace,Self,call,{lists,seq,[1,10]}}),
+ ?MODULE:expect({trace,Self,call,{erlang,list_to_integer,["777"]}}),
receive
- Any ->
- ?line ?t:fail({unexpected_message,Any})
+ Any ->
+ ct:fail({unexpected_message,Any})
after 1 ->
- ok
+ ok
end,
%% Turn on and then off tracing on all external functions.
%% This might cause the emulator to crasch later if it doesn't
%% restore all export entries properly.
- ?line AllFuncs = trace_func({'_','_','_'}, true),
+ AllFuncs = trace_func({'_','_','_'}, true),
io:format("AllFuncs = ~p", [AllFuncs]),
%% Make sure that a traced, exported function can still be found.
- ?line true = erlang:function_exported(error_handler, undefined_function, 3),
- ?line AllFuncs = trace_func({'_','_','_'}, false),
- ?line erlang:trace_delivered(all),
+ true = erlang:function_exported(error_handler, undefined_function, 3),
+ AllFuncs = trace_func({'_','_','_'}, false),
+ erlang:trace_delivered(all),
receive
- {trace_delivered,_,_} -> ok
+ {trace_delivered,_,_} -> ok
end,
c:flush(), % Print the traces messages.
c:flush(), % Print the traces messages.
- ?line {traced,false} = trace_info({erlang,list_to_integer,1}, traced),
+ {traced,false} = trace_info({erlang,list_to_integer,1}, traced),
ok.
@@ -287,8 +279,8 @@ foo(X, Y) -> X+Y.
%% This test case was written to verify that we do not change
%% any behaviour with the introduction of "block-free" upgrade in R16.
%% In short: Do not refer to this test case as an authority of how it must work.
-upgrade(doc) ->
- "Test tracing on module being upgraded";
+
+%% Test tracing on module being upgraded
upgrade(Config) when is_list(Config) ->
V1 = compile_version(my_upgrade_test, 1, Config),
V2 = compile_version(my_upgrade_test, 2, Config),
@@ -304,8 +296,8 @@ upgrade_do(V1, V2, TraceLocalVersion) ->
trace_func({my_upgrade_test,'_','_'}, [], [global]),
case TraceLocalVersion of
- true -> trace_func({my_upgrade_test,local_version,0}, [], [local]);
- _ -> ok
+ true -> trace_func({my_upgrade_test,local_version,0}, [], [local]);
+ _ -> ok
end,
1 = my_upgrade_test:version(),
1 = my_upgrade_test:do_local(),
@@ -320,15 +312,15 @@ upgrade_do(V1, V2, TraceLocalVersion) ->
expect({trace,Self,call,{my_upgrade_test,do_local,[]}}),
expect({trace,Self,call,{my_upgrade_test,do_real_local,[]}}),
case TraceLocalVersion of
- true -> expect({trace,Self,call,{my_upgrade_test,local_version,[]}});
- _ -> ok
+ true -> expect({trace,Self,call,{my_upgrade_test,local_version,[]}});
+ _ -> ok
end,
expect({trace,Self,call,{my_upgrade_test,make_fun_exp,[]}}),
expect({trace,Self,call,{my_upgrade_test,make_fun_local,[]}}),
expect({trace,Self,call,{my_upgrade_test,version,[]}}), % F1_exp
case TraceLocalVersion of
- true -> expect({trace,Self,call,{my_upgrade_test,local_version,[]}}); % F1_loc
- _ -> ok
+ true -> expect({trace,Self,call,{my_upgrade_test,local_version,[]}}); % F1_loc
+ _ -> ok
end,
{module,my_upgrade_test} = erlang:load_module(my_upgrade_test, V2),
@@ -350,8 +342,8 @@ upgrade_do(V1, V2, TraceLocalVersion) ->
trace_func({my_upgrade_test,'_','_'}, [], [global]),
case TraceLocalVersion of
- true -> trace_func({my_upgrade_test,local_version,0}, [], [local]);
- _ -> ok
+ true -> trace_func({my_upgrade_test,local_version,0}, [], [local]);
+ _ -> ok
end,
2 = my_upgrade_test:version(),
2 = my_upgrade_test:do_local(),
@@ -363,13 +355,13 @@ upgrade_do(V1, V2, TraceLocalVersion) ->
expect({trace,Self,call,{my_upgrade_test,do_local,[]}}),
expect({trace,Self,call,{my_upgrade_test,do_real_local,[]}}),
case TraceLocalVersion of
- true -> expect({trace,Self,call,{my_upgrade_test,local_version,[]}});
- _ -> ok
+ true -> expect({trace,Self,call,{my_upgrade_test,local_version,[]}});
+ _ -> ok
end,
expect({trace,Self,call,{my_upgrade_test,version,[]}}), % F2_exp
case TraceLocalVersion of
- true -> expect({trace,Self,call,{my_upgrade_test,local_version,[]}}); % F2_loc
- _ -> ok
+ true -> expect({trace,Self,call,{my_upgrade_test,local_version,[]}}); % F2_loc
+ _ -> ok
end,
true = erlang:delete_module(my_upgrade_test),
@@ -385,10 +377,10 @@ upgrade_do(V1, V2, TraceLocalVersion) ->
ok.
compile_version(Module, Version, Config) ->
- Data = ?config(data_dir, Config),
+ Data = proplists:get_value(data_dir, Config),
File = filename:join(Data, atom_to_list(Module)),
{ok,Module,Bin} = compile:file(File, [{d,'VERSION',Version},
- binary,report]),
+ binary,report]),
Bin.
@@ -397,162 +389,157 @@ compile_version(Module, Version, Config) ->
%% Also, test the '{tracer,Pid}' option.
flags(_Config) ->
case test_server:is_native(filename) of
- true -> {skip,"filename is native"};
- false -> flags()
+ true -> {skip,"filename is native"};
+ false -> flags()
end.
flags() ->
- ?line Tracer = start_tracer_loop(),
- ?line trace_pid(self(), true, [call,{tracer,Tracer}]),
+ Tracer = start_tracer_loop(),
+ trace_pid(self(), true, [call,{tracer,Tracer}]),
%% Trace some functions...
- ?line trace_func({filename,'_','_'}, true),
+ trace_func({filename,'_','_'}, true),
%% ... and call them...
- ?line Self = self(),
- ?line filename:absname("nisse"),
- ?line ?MODULE:expect({trace,Self,call,{filename,absname,["nisse"]}}),
- ?line trace_pid(Self, true, [call,arity]),
- ?line filename:absname("kalle"),
- ?line filename:absname("kalle", "/root"),
- ?line ?MODULE:expect({trace,Self,call,{filename,absname,1}}),
- ?line ?MODULE:expect({trace,Self,call,{filename,absname,2}}),
- ?line trace_info(Self, flags),
+ Self = self(),
+ filename:absname("nisse"),
+ ?MODULE:expect({trace,Self,call,{filename,absname,["nisse"]}}),
+ trace_pid(Self, true, [call,arity]),
+ filename:absname("kalle"),
+ filename:absname("kalle", "/root"),
+ ?MODULE:expect({trace,Self,call,{filename,absname,1}}),
+ ?MODULE:expect({trace,Self,call,{filename,absname,2}}),
+ trace_info(Self, flags),
%% Timestamp + arity.
flag_test(fun() ->
- ?line trace_pid(Self, true, [timestamp]),
- ?line "dum" = filename:basename("/abcd/dum"),
- ?line Ts = expect({trace_ts,Self,call,{filename,basename,1},ts}),
- ?line trace_info(Self, flags),
- Ts
- end),
+ trace_pid(Self, true, [timestamp]),
+ "dum" = filename:basename("/abcd/dum"),
+ Ts = expect({trace_ts,Self,call,{filename,basename,1},ts}),
+ trace_info(Self, flags),
+ Ts
+ end),
%% Timestamp.
- ?line AnArg = "/abcd/hejsan",
+ AnArg = "/abcd/hejsan",
flag_test(fun() ->
- ?line trace_pid(Self, false, [arity]),
- ?line "hejsan" = filename:basename(AnArg),
- ?line Ts = expect({trace_ts,Self,call,
- {filename,basename,[AnArg]},ts}),
- ?line trace_info(Self, flags),
- Ts
- end),
+ trace_pid(Self, false, [arity]),
+ "hejsan" = filename:basename(AnArg),
+ Ts = expect({trace_ts,Self,call,
+ {filename,basename,[AnArg]},ts}),
+ trace_info(Self, flags),
+ Ts
+ end),
%% All flags turned off.
- ?line trace_pid(Self, false, [timestamp]),
- ?line AnotherArg = filename:join(AnArg, "hoppsan"),
- ?line "hoppsan" = filename:basename(AnotherArg),
- ?line expect({trace,Self,call,{filename,join,[AnArg,"hoppsan"]}}),
- ?line expect({trace,Self,call,{filename,basename,[AnotherArg]}}),
- ?line trace_info(Self, flags),
-
+ trace_pid(Self, false, [timestamp]),
+ AnotherArg = filename:join(AnArg, "hoppsan"),
+ "hoppsan" = filename:basename(AnotherArg),
+ expect({trace,Self,call,{filename,join,[AnArg,"hoppsan"]}}),
+ expect({trace,Self,call,{filename,basename,[AnotherArg]}}),
+ trace_info(Self, flags),
+
ok.
flag_test(Test) ->
Now = now(),
Ts = Test(),
case timer:now_diff(Ts, Now) of
- Time when Time < 5*1000000 ->
- %% Reasonable short time.
- ok;
- _Diff ->
- %% Too large difference.
- io:format("Now = ~p\n", [Now]),
- io:format("Ts = ~p\n", [Ts]),
- ?line ?t:fail()
+ Time when Time < 5*1000000 ->
+ %% Reasonable short time.
+ ok;
+ _Diff ->
+ %% Too large difference.
+ ct:fail("Now = ~p, Ts = ~p", [Now, Ts])
end,
flag_test_cpu_timestamp(Test).
flag_test_cpu_timestamp(Test) ->
try erlang:trace(all, true, [cpu_timestamp]) of
- _ ->
- io:format("CPU timestamps"),
- Ts = Test(),
- erlang:trace(all, false, [cpu_timestamp]),
- Origin = {0,0,0},
- Hour = 3600*1000000,
- case timer:now_diff(Ts, Origin) of
- Diff when Diff < 4*Hour ->
- %% In the worst case, CPU timestamps count from when this
- %% Erlang emulator was started. The above test is a conservative
- %% test that all CPU timestamps should pass.
- ok;
- _Time ->
- io:format("Strange CPU timestamp: ~p", [Ts]),
- ?line ?t:fail()
- end,
- io:format("Turned off CPU timestamps")
+ _ ->
+ io:format("CPU timestamps"),
+ Ts = Test(),
+ erlang:trace(all, false, [cpu_timestamp]),
+ Origin = {0,0,0},
+ Hour = 3600*1000000,
+ case timer:now_diff(Ts, Origin) of
+ Diff when Diff < 4*Hour ->
+ %% In the worst case, CPU timestamps count from when this
+ %% Erlang emulator was started. The above test is a conservative
+ %% test that all CPU timestamps should pass.
+ ok;
+ _Time ->
+ ct:fail("Strange CPU timestamp: ~p", [Ts])
+ end,
+ io:format("Turned off CPU timestamps")
catch
- error:badarg -> ok
+ error:badarg -> ok
end.
-errors(doc) -> "Test bad arguments for trace/3 and trace_pattern/3.";
-errors(suite) -> [];
+%% Test bad arguments for trace/3 and trace_pattern/3.
errors(Config) when is_list(Config) ->
- ?line expect_badarg_pid(aaa, true, []),
- ?line expect_badarg_pid({pid,dum}, false, []),
- ?line expect_badarg_func({'_','_',1}, []),
- ?line expect_badarg_func({'_',gosh,1}, []),
- ?line expect_badarg_func({xxx,'_',2}, []),
- ?line expect_badarg_func({xxx,yyy,b}, glurp),
+ expect_badarg_pid(aaa, true, []),
+ expect_badarg_pid({pid,dum}, false, []),
+ expect_badarg_func({'_','_',1}, []),
+ expect_badarg_func({'_',gosh,1}, []),
+ expect_badarg_func({xxx,'_',2}, []),
+ expect_badarg_func({xxx,yyy,b}, glurp),
ok.
expect_badarg_pid(What, How, Flags) ->
case catch erlang:trace(What, How, Flags) of
- {'EXIT',{badarg,Where}} ->
- io:format("trace(~p, ~p, ~p) ->\n {'EXIT',{badarg,~p}}",
- [What,How,Flags,Where]),
- ok;
- Other ->
- io:format("trace(~p, ~p, ~p) -> ~p",
- [What,How,Flags,Other]),
- ?t:fail({unexpected,Other})
+ {'EXIT',{badarg,Where}} ->
+ io:format("trace(~p, ~p, ~p) ->\n {'EXIT',{badarg,~p}}",
+ [What,How,Flags,Where]),
+ ok;
+ Other ->
+ io:format("trace(~p, ~p, ~p) -> ~p",
+ [What,How,Flags,Other]),
+ ct:fail({unexpected,Other})
end.
expect_badarg_func(MFA, Pattern) ->
case catch erlang:trace_pattern(MFA, Pattern) of
- {'EXIT',{badarg,Where}} ->
- io:format("trace_pattern(~p, ~p) ->\n {'EXIT',{badarg,~p}}",
- [MFA,Pattern,Where]),
- ok;
- Other ->
- io:format("trace_pattern(~p, ~p) -> ~p",
- [MFA, Pattern, Other]),
- ?t:fail({unexpected,Other})
+ {'EXIT',{badarg,Where}} ->
+ io:format("trace_pattern(~p, ~p) ->\n {'EXIT',{badarg,~p}}",
+ [MFA,Pattern,Where]),
+ ok;
+ Other ->
+ io:format("trace_pattern(~p, ~p) -> ~p",
+ [MFA, Pattern, Other]),
+ ct:fail({unexpected,Other})
end.
-pam(doc) -> "Basic test of PAM.";
-pam(suite) -> [];
+%% Basic test of PAM.
pam(Config) when is_list(Config) ->
- ?line start_tracer(),
- ?line Self = self(),
+ start_tracer(),
+ Self = self(),
%% Build the match program.
- ?line Prog1 = {[{a,tuple},'$1'],[],[]},
- ?line Prog2 = {[{a,bigger,tuple},'$1'],[],[{message,'$1'}]},
- ?line MatchProg = [Prog1,Prog2],
- ?line pam_trace(MatchProg),
+ Prog1 = {[{a,tuple},'$1'],[],[]},
+ Prog2 = {[{a,bigger,tuple},'$1'],[],[{message,'$1'}]},
+ MatchProg = [Prog1,Prog2],
+ pam_trace(MatchProg),
%% Do some calls.
- ?line ?MODULE:pam_foo(not_a_tuple, [a,b]),
- ?line ?MODULE:pam_foo({a,tuple}, [a,list]),
- ?line ?MODULE:pam_foo([this,one,will,'not',match], dummy_arg),
- ?line LongList = lists:seq(1,10),
- ?line ?MODULE:pam_foo({a,bigger,tuple}, LongList),
+ ?MODULE:pam_foo(not_a_tuple, [a,b]),
+ ?MODULE:pam_foo({a,tuple}, [a,list]),
+ ?MODULE:pam_foo([this,one,will,'not',match], dummy_arg),
+ LongList = lists:seq(1,10),
+ ?MODULE:pam_foo({a,bigger,tuple}, LongList),
%% Check that we get the correct trace messages.
- ?line expect({trace,Self,call,{?MODULE,pam_foo,[{a,tuple},[a,list]]}}),
- ?line expect({trace,Self,call,
- {?MODULE,pam_foo,[{a,bigger,tuple},LongList]},
- LongList}),
+ expect({trace,Self,call,{?MODULE,pam_foo,[{a,tuple},[a,list]]}}),
+ expect({trace,Self,call,
+ {?MODULE,pam_foo,[{a,bigger,tuple},LongList]},
+ LongList}),
- ?line trace_func({?MODULE,pam_foo,'_'}, false),
+ trace_func({?MODULE,pam_foo,'_'}, false),
ok.
pam_trace(Prog) ->
@@ -567,38 +554,38 @@ pam_foo(A, B) ->
%% Test changing PAM programs for a function.
change_pam(_Config) ->
case test_server:is_native(lists) of
- true -> {skip,"lists is native"};
- false -> change_pam()
+ true -> {skip,"lists is native"};
+ false -> change_pam()
end.
change_pam() ->
- ?line start_tracer(),
- ?line Self = self(),
+ start_tracer(),
+ Self = self(),
%% Install the first match program.
%% Test using timestamp at the same time.
- ?line trace_pid(Self, true, [call,arity,timestamp]),
- ?line Prog1 = [{['$1','$2'],[],[{message,'$1'}]}],
- ?line change_pam_trace(Prog1),
- ?line [x,y] = lists:append(id([x]), id([y])),
- ?line {heap_size,_} = erlang:process_info(Self, heap_size),
- ?line expect({trace_ts,Self,call,{lists,append,2},[x],ts}),
- ?line expect({trace_ts,Self,call,{erlang,process_info,2},Self,ts}),
+ trace_pid(Self, true, [call,arity,timestamp]),
+ Prog1 = [{['$1','$2'],[],[{message,'$1'}]}],
+ change_pam_trace(Prog1),
+ [x,y] = lists:append(id([x]), id([y])),
+ {heap_size,_} = erlang:process_info(Self, heap_size),
+ expect({trace_ts,Self,call,{lists,append,2},[x],ts}),
+ expect({trace_ts,Self,call,{erlang,process_info,2},Self,ts}),
%% Install a new PAM program.
- ?line Prog2 = [{['$1','$2'],[],[{message,'$2'}]}],
- ?line change_pam_trace(Prog2),
- ?line [xx,yy] = lists:append(id([xx]), id([yy])),
- ?line {current_function,_} = erlang:process_info(Self, current_function),
- ?line expect({trace_ts,Self,call,{lists,append,2},[yy],ts}),
- ?line expect({trace_ts,Self,call,{erlang,process_info,2},current_function,ts}),
+ Prog2 = [{['$1','$2'],[],[{message,'$2'}]}],
+ change_pam_trace(Prog2),
+ [xx,yy] = lists:append(id([xx]), id([yy])),
+ {current_function,_} = erlang:process_info(Self, current_function),
+ expect({trace_ts,Self,call,{lists,append,2},[yy],ts}),
+ expect({trace_ts,Self,call,{erlang,process_info,2},current_function,ts}),
- ?line 1 = trace_func({lists,append,2}, false),
- ?line 1 = trace_func({erlang,process_info,2}, false),
- ?line {match_spec,false} = trace_info({lists,append,2}, match_spec),
- ?line {match_spec,false} = trace_info({erlang,process_info,2}, match_spec),
+ 1 = trace_func({lists,append,2}, false),
+ 1 = trace_func({erlang,process_info,2}, false),
+ {match_spec,false} = trace_info({lists,append,2}, match_spec),
+ {match_spec,false} = trace_info({erlang,process_info,2}, match_spec),
ok.
@@ -611,71 +598,71 @@ change_pam_trace(Prog) ->
return_trace(_Config) ->
case test_server:is_native(lists) of
- true -> {skip,"lists is native"};
- false -> return_trace()
+ true -> {skip,"lists is native"};
+ false -> return_trace()
end.
return_trace() ->
X = {save,me},
- ?line start_tracer(),
- ?line Self = self(),
+ start_tracer(),
+ Self = self(),
%% Test call and return trace and timestamp.
- ?line trace_pid(Self, true, [call,timestamp]),
+ trace_pid(Self, true, [call,timestamp]),
Stupid = {pointless,tuple},
- ?line Prog1 = [{['$1','$2'],[],[{return_trace},{message,{Stupid}}]}],
- ?line 1 = trace_func({lists,append,2}, Prog1),
- ?line 1 = trace_func({erlang,process_info,2}, Prog1),
- ?line {match_spec,Prog1} = trace_info({lists,append,2}, match_spec),
- ?line {match_spec,Prog1} = trace_info({erlang,process_info,2}, match_spec),
+ Prog1 = [{['$1','$2'],[],[{return_trace},{message,{Stupid}}]}],
+ 1 = trace_func({lists,append,2}, Prog1),
+ 1 = trace_func({erlang,process_info,2}, Prog1),
+ {match_spec,Prog1} = trace_info({lists,append,2}, match_spec),
+ {match_spec,Prog1} = trace_info({erlang,process_info,2}, match_spec),
- ?line [x,y] = lists:append(id([x]), id([y])),
+ [x,y] = lists:append(id([x]), id([y])),
Current = {current_function,{?MODULE,return_trace,0}},
- ?line Current = erlang:process_info(Self, current_function),
- ?line expect({trace_ts,Self,call,{lists,append,[[x],[y]]},Stupid,ts}),
- ?line expect({trace_ts,Self,return_from,{lists,append,2},[x,y],ts}),
- ?line expect({trace_ts,Self,call,{erlang,process_info,[Self,current_function]},
- Stupid,ts}),
- ?line expect({trace_ts,Self,return_from,{erlang,process_info,2},Current,ts}),
+ Current = erlang:process_info(Self, current_function),
+ expect({trace_ts,Self,call,{lists,append,[[x],[y]]},Stupid,ts}),
+ expect({trace_ts,Self,return_from,{lists,append,2},[x,y],ts}),
+ expect({trace_ts,Self,call,{erlang,process_info,[Self,current_function]},
+ Stupid,ts}),
+ expect({trace_ts,Self,return_from,{erlang,process_info,2},Current,ts}),
%% Try catch/exit.
- ?line 1 = trace_func({?MODULE,nasty,0}, [{[],[],[{return_trace},{message,false}]}]),
- ?line {'EXIT',good_bye} = (catch ?MODULE:nasty()),
- ?line 1 = trace_func({?MODULE,nasty,0}, false),
+ 1 = trace_func({?MODULE,nasty,0}, [{[],[],[{return_trace},{message,false}]}]),
+ {'EXIT',good_bye} = (catch ?MODULE:nasty()),
+ 1 = trace_func({?MODULE,nasty,0}, false),
%% Turn off trace.
- ?line 1 = trace_func({lists,append,2}, false),
- ?line 1 = trace_func({erlang,process_info,2}, false),
- ?line {match_spec,false} = trace_info({lists,append,2}, match_spec),
- ?line {match_spec,false} = trace_info({erlang,process_info,2}, match_spec),
+ 1 = trace_func({lists,append,2}, false),
+ 1 = trace_func({erlang,process_info,2}, false),
+ {match_spec,false} = trace_info({lists,append,2}, match_spec),
+ {match_spec,false} = trace_info({erlang,process_info,2}, match_spec),
%% No timestamp, no trace message for call.
- ?line trace_pid(Self, false, [timestamp]),
- ?line Prog2 = [{['$1','$2'],[],[{return_trace},{message,false}]},
- {['$1'],[],[{return_trace},{message,false}]}],
- ?line 1 = trace_func({lists,seq,2}, Prog2),
- ?line 1 = trace_func({erlang,atom_to_list,1}, Prog2),
- ?line {match_spec,Prog2} = trace_info({lists,seq,2}, match_spec),
- ?line {match_spec,Prog2} = trace_info({erlang,atom_to_list,1}, match_spec),
+ trace_pid(Self, false, [timestamp]),
+ Prog2 = [{['$1','$2'],[],[{return_trace},{message,false}]},
+ {['$1'],[],[{return_trace},{message,false}]}],
+ 1 = trace_func({lists,seq,2}, Prog2),
+ 1 = trace_func({erlang,atom_to_list,1}, Prog2),
+ {match_spec,Prog2} = trace_info({lists,seq,2}, match_spec),
+ {match_spec,Prog2} = trace_info({erlang,atom_to_list,1}, match_spec),
- ?line lists:seq(2, 7),
- ?line _ = atom_to_list(non_literal(nisse)),
- ?line expect({trace,Self,return_from,{lists,seq,2},[2,3,4,5,6,7]}),
- ?line expect({trace,Self,return_from,{erlang,atom_to_list,1},"nisse"}),
+ lists:seq(2, 7),
+ _ = atom_to_list(non_literal(nisse)),
+ expect({trace,Self,return_from,{lists,seq,2},[2,3,4,5,6,7]}),
+ expect({trace,Self,return_from,{erlang,atom_to_list,1},"nisse"}),
%% Turn off trace.
- ?line 1 = trace_func({lists,seq,2}, false),
- ?line 1 = trace_func({erlang,atom_to_list,1}, false),
- ?line {match_spec,false} = trace_info({lists,seq,2}, match_spec),
- ?line {match_spec,false} = trace_info({erlang,atom_to_list,1}, match_spec),
+ 1 = trace_func({lists,seq,2}, false),
+ 1 = trace_func({erlang,atom_to_list,1}, false),
+ {match_spec,false} = trace_info({lists,seq,2}, match_spec),
+ {match_spec,false} = trace_info({erlang,atom_to_list,1}, match_spec),
+
+ {save,me} = X,
- ?line {save,me} = X,
-
ok.
nasty() ->
@@ -683,396 +670,393 @@ nasty() ->
exception_trace(_Config) ->
case test_server:is_native(lists) of
- true -> {skip,"lists is native"};
- false -> exception_trace()
+ true -> {skip,"lists is native"};
+ false -> exception_trace()
end.
exception_trace() ->
X = {save,me},
- ?line start_tracer(),
- ?line Self = self(),
+ start_tracer(),
+ Self = self(),
%% Test call and return trace and timestamp.
- ?line trace_pid(Self, true, [call,timestamp]),
+ trace_pid(Self, true, [call,timestamp]),
Stupid = {pointless,tuple},
- ?line Prog1 = [{['$1','$2'],[],[{exception_trace},{message,{Stupid}}]}],
- ?line 1 = trace_func({lists,append,2}, Prog1),
- ?line 1 = trace_func({erlang,process_info,2}, Prog1),
- ?line {match_spec,Prog1} = trace_info({lists,append,2}, match_spec),
- ?line {match_spec,Prog1} =
- trace_info({erlang,process_info,2}, match_spec),
-
- ?line [x,y] = lists:append(id([x]), id([y])),
+ Prog1 = [{['$1','$2'],[],[{exception_trace},{message,{Stupid}}]}],
+ 1 = trace_func({lists,append,2}, Prog1),
+ 1 = trace_func({erlang,process_info,2}, Prog1),
+ {match_spec,Prog1} = trace_info({lists,append,2}, match_spec),
+ {match_spec,Prog1} =
+ trace_info({erlang,process_info,2}, match_spec),
+
+ [x,y] = lists:append(id([x]), id([y])),
Current = {current_function,{?MODULE,exception_trace,0}},
- ?line Current = erlang:process_info(Self, current_function),
- ?line expect({trace_ts,Self,call,{lists,append,[[x],[y]]},Stupid,ts}),
- ?line expect({trace_ts,Self,return_from,{lists,append,2},[x,y],ts}),
- ?line expect({trace_ts,Self,call,{erlang,process_info,
- [Self,current_function]},
- Stupid,ts}),
- ?line expect({trace_ts,Self,return_from,
- {erlang,process_info,2},Current,ts}),
+ Current = erlang:process_info(Self, current_function),
+ expect({trace_ts,Self,call,{lists,append,[[x],[y]]},Stupid,ts}),
+ expect({trace_ts,Self,return_from,{lists,append,2},[x,y],ts}),
+ expect({trace_ts,Self,call,{erlang,process_info,
+ [Self,current_function]},
+ Stupid,ts}),
+ expect({trace_ts,Self,return_from,
+ {erlang,process_info,2},Current,ts}),
%% Try catch/exit.
- ?line 1 = trace_func({?MODULE,nasty,0},
- [{[],[],[{exception_trace},{message,false}]}]),
- ?line {'EXIT',good_bye} = (catch ?MODULE:nasty()),
- ?line expect({trace_ts,Self,exception_from,
- {?MODULE,nasty,0},{exit,good_bye},ts}),
- ?line 1 = trace_func({?MODULE,nasty,0}, false),
+ 1 = trace_func({?MODULE,nasty,0},
+ [{[],[],[{exception_trace},{message,false}]}]),
+ {'EXIT',good_bye} = (catch ?MODULE:nasty()),
+ expect({trace_ts,Self,exception_from,
+ {?MODULE,nasty,0},{exit,good_bye},ts}),
+ 1 = trace_func({?MODULE,nasty,0}, false),
%% Turn off trace.
- ?line 1 = trace_func({lists,append,2}, false),
- ?line 1 = trace_func({erlang,process_info,2}, false),
- ?line {match_spec,false} = trace_info({lists,append,2}, match_spec),
- ?line {match_spec,false} =
- trace_info({erlang,process_info,2}, match_spec),
+ 1 = trace_func({lists,append,2}, false),
+ 1 = trace_func({erlang,process_info,2}, false),
+ {match_spec,false} = trace_info({lists,append,2}, match_spec),
+ {match_spec,false} =
+ trace_info({erlang,process_info,2}, match_spec),
%% No timestamp, no trace message for call.
- ?line trace_pid(Self, false, [timestamp]),
- ?line Prog2 = [{['$1','$2'],[],[{exception_trace},{message,false}]},
- {['$1'],[],[{exception_trace},{message,false}]}],
- ?line 1 = trace_func({lists,seq,2}, Prog2),
- ?line 1 = trace_func({erlang,atom_to_list,1}, Prog2),
- ?line {match_spec,Prog2} = trace_info({lists,seq,2}, match_spec),
- ?line {match_spec,Prog2} =
- trace_info({erlang,atom_to_list,1}, match_spec),
+ trace_pid(Self, false, [timestamp]),
+ Prog2 = [{['$1','$2'],[],[{exception_trace},{message,false}]},
+ {['$1'],[],[{exception_trace},{message,false}]}],
+ 1 = trace_func({lists,seq,2}, Prog2),
+ 1 = trace_func({erlang,atom_to_list,1}, Prog2),
+ {match_spec,Prog2} = trace_info({lists,seq,2}, match_spec),
+ {match_spec,Prog2} =
+ trace_info({erlang,atom_to_list,1}, match_spec),
- ?line lists:seq(2, 7),
- ?line _ = atom_to_list(non_literal(nisse)),
- ?line expect({trace,Self,return_from,{lists,seq,2},[2,3,4,5,6,7]}),
- ?line expect({trace,Self,return_from,{erlang,atom_to_list,1},"nisse"}),
+ lists:seq(2, 7),
+ _ = atom_to_list(non_literal(nisse)),
+ expect({trace,Self,return_from,{lists,seq,2},[2,3,4,5,6,7]}),
+ expect({trace,Self,return_from,{erlang,atom_to_list,1},"nisse"}),
%% Turn off trace.
- ?line 1 = trace_func({lists,seq,2}, false),
- ?line 1 = trace_func({erlang,atom_to_list,1}, false),
- ?line {match_spec,false} = trace_info({lists,seq,2}, match_spec),
- ?line {match_spec,false} =
- trace_info({erlang,atom_to_list,1}, match_spec),
+ 1 = trace_func({lists,seq,2}, false),
+ 1 = trace_func({erlang,atom_to_list,1}, false),
+ {match_spec,false} = trace_info({lists,seq,2}, match_spec),
+ {match_spec,false} =
+ trace_info({erlang,atom_to_list,1}, match_spec),
- ?line expect(),
- ?line {save,me} = X,
+ expect(),
+ {save,me} = X,
ok.
-on_load(doc) -> "Test the on_load argument for trace_pattern/3.";
-on_load(suite) -> [];
+%% Test the on_load argument for trace_pattern/3.
on_load(Config) when is_list(Config) ->
- ?line 0 = erlang:trace_pattern(on_load, []),
- ?line {traced,global} = erlang:trace_info(on_load, traced),
- ?line {match_spec,[]} = erlang:trace_info(on_load, match_spec),
+ 0 = erlang:trace_pattern(on_load, []),
+ {traced,global} = erlang:trace_info(on_load, traced),
+ {match_spec,[]} = erlang:trace_info(on_load, match_spec),
- ?line 0 = erlang:trace_pattern(on_load, true, [local]),
- ?line {traced,local} = erlang:trace_info(on_load, traced),
- ?line {match_spec,[]} = erlang:trace_info(on_load, match_spec),
+ 0 = erlang:trace_pattern(on_load, true, [local]),
+ {traced,local} = erlang:trace_info(on_load, traced),
+ {match_spec,[]} = erlang:trace_info(on_load, match_spec),
- ?line 0 = erlang:trace_pattern(on_load, false, [local]),
- ?line {traced,false} = erlang:trace_info(on_load, traced),
- ?line {match_spec,false} = erlang:trace_info(on_load, match_spec),
+ 0 = erlang:trace_pattern(on_load, false, [local]),
+ {traced,false} = erlang:trace_info(on_load, traced),
+ {match_spec,false} = erlang:trace_info(on_load, match_spec),
- ?line Pam1 = [{[],[],[{message,false}]}],
- ?line 0 = erlang:trace_pattern(on_load, Pam1),
- ?line {traced,global} = erlang:trace_info(on_load, traced),
- ?line {match_spec,Pam1} = erlang:trace_info(on_load, match_spec),
+ Pam1 = [{[],[],[{message,false}]}],
+ 0 = erlang:trace_pattern(on_load, Pam1),
+ {traced,global} = erlang:trace_info(on_load, traced),
+ {match_spec,Pam1} = erlang:trace_info(on_load, match_spec),
- ?line 0 = erlang:trace_pattern(on_load, true, [local]),
- ?line 0 = erlang:trace_pattern(on_load, false, [local]),
+ 0 = erlang:trace_pattern(on_load, true, [local]),
+ 0 = erlang:trace_pattern(on_load, false, [local]),
ok.
-deep_exception(doc) -> "Test the new exception trace.";
-deep_exception(suite) -> [];
+%% Test the new exception trace.
deep_exception(Config) when is_list(Config) ->
deep_exception().
deep_exception() ->
- ?line start_tracer(),
- ?line Self = self(),
- ?line N = 200000,
- ?line LongImproperList = seq(1, N-1, N),
-
+ start_tracer(),
+ Self = self(),
+ N = 200000,
+ LongImproperList = seq(1, N-1, N),
+
Prog = [{'_',[],[{exception_trace}]}],
-%% ?line 1 = trace_pid(Self, true, [call]),
- ?line 1 = trace_func({?MODULE,deep,'_'}, Prog),
- ?line 1 = trace_func({?MODULE,deep_1,'_'}, Prog),
- ?line 1 = trace_func({?MODULE,deep_2,'_'}, Prog),
- ?line 1 = trace_func({?MODULE,deep_3,'_'}, Prog),
- ?line 1 = trace_func({?MODULE,deep_4,'_'}, Prog),
- ?line 1 = trace_func({?MODULE,deep_5,'_'}, Prog),
- ?line 1 = trace_func({?MODULE,id,'_'}, Prog),
- ?line 1 = trace_func({erlang,'++','_'}, Prog),
- ?line 1 = trace_func({erlang,exit,1}, Prog),
- ?line 1 = trace_func({erlang,throw,1}, Prog),
- ?line 2 = trace_func({erlang,error,'_'}, Prog),
- ?line 1 = trace_func({lists,reverse,2}, Prog),
-
- ?line deep_exception(?LINE, exit, [paprika], 1,
- [{trace,Self,call,{erlang,exit,[paprika]}},
- {trace,Self,exception_from,{erlang,exit,1},
- {exit,paprika}}],
- exception_from, {exit,paprika}),
- ?line deep_exception(?LINE, throw, [3.14], 2,
- [{trace,Self,call,{erlang,throw,[3.14]}},
- {trace,Self,exception_from,{erlang,throw,1},
- {throw,3.14}}],
- exception_from, {throw,3.14}),
- ?line deep_exception(?LINE, error, [{paprika}], 3,
- [{trace,Self,call,{erlang,error,[{paprika}]}},
- {trace,Self,exception_from,{erlang,error,1},
- {error,{paprika}}}],
- exception_from, {error,{paprika}}),
- ?line deep_exception(?LINE, error, ["{paprika}",[]], 3,
- [{trace,Self,call,{erlang,error,["{paprika}",[]]}},
- {trace,Self,exception_from,{erlang,error,2},
- {error,"{paprika}"}}],
- exception_from, {error,"{paprika}"}),
- ?line deep_exception(?LINE, id, [broccoli], 4, [],
- return_from, broccoli),
- ?line deep_exception(
- ?LINE, append, [1,2], 5,
- [{trace,Self,call,{erlang,'++',[1,2]}},
- {trace,Self,exception_from,{erlang,'++',2},{error,badarg}}],
- exception_from, {error,badarg}),
- ?line deep_exception(?LINE, '=', [1,2], 6, [],
- exception_from, {error,{badmatch,2}}),
+ %% 1 = trace_pid(Self, true, [call]),
+ 1 = trace_func({?MODULE,deep,'_'}, Prog),
+ 1 = trace_func({?MODULE,deep_1,'_'}, Prog),
+ 1 = trace_func({?MODULE,deep_2,'_'}, Prog),
+ 1 = trace_func({?MODULE,deep_3,'_'}, Prog),
+ 1 = trace_func({?MODULE,deep_4,'_'}, Prog),
+ 1 = trace_func({?MODULE,deep_5,'_'}, Prog),
+ 1 = trace_func({?MODULE,id,'_'}, Prog),
+ 1 = trace_func({erlang,'++','_'}, Prog),
+ 1 = trace_func({erlang,exit,1}, Prog),
+ 1 = trace_func({erlang,throw,1}, Prog),
+ 2 = trace_func({erlang,error,'_'}, Prog),
+ 1 = trace_func({lists,reverse,2}, Prog),
+
+ deep_exception(?LINE, exit, [paprika], 1,
+ [{trace,Self,call,{erlang,exit,[paprika]}},
+ {trace,Self,exception_from,{erlang,exit,1},
+ {exit,paprika}}],
+ exception_from, {exit,paprika}),
+ deep_exception(?LINE, throw, [3.14], 2,
+ [{trace,Self,call,{erlang,throw,[3.14]}},
+ {trace,Self,exception_from,{erlang,throw,1},
+ {throw,3.14}}],
+ exception_from, {throw,3.14}),
+ deep_exception(?LINE, error, [{paprika}], 3,
+ [{trace,Self,call,{erlang,error,[{paprika}]}},
+ {trace,Self,exception_from,{erlang,error,1},
+ {error,{paprika}}}],
+ exception_from, {error,{paprika}}),
+ deep_exception(?LINE, error, ["{paprika}",[]], 3,
+ [{trace,Self,call,{erlang,error,["{paprika}",[]]}},
+ {trace,Self,exception_from,{erlang,error,2},
+ {error,"{paprika}"}}],
+ exception_from, {error,"{paprika}"}),
+ deep_exception(?LINE, id, [broccoli], 4, [],
+ return_from, broccoli),
+ deep_exception(
+ ?LINE, append, [1,2], 5,
+ [{trace,Self,call,{erlang,'++',[1,2]}},
+ {trace,Self,exception_from,{erlang,'++',2},{error,badarg}}],
+ exception_from, {error,badarg}),
+ deep_exception(?LINE, '=', [1,2], 6, [],
+ exception_from, {error,{badmatch,2}}),
%%
- ?line io:format("== Subtest: ~w", [?LINE]),
- ?line try lists:reverse(LongImproperList, []) of
- R1 -> test_server:fail({returned,abbr(R1)})
- catch error:badarg -> ok
- end,
- ?line expect(fun ({trace,S,call,{lists,reverse,[L1,L2]}})
- when is_list(L1), is_list(L2), S == Self ->
- next;
- ({trace,S,exception_from,
- {lists,reverse,2},{error,badarg}})
- when S == Self ->
- expected;
- ('_') ->
- {trace,Self,exception_from,
- {lists,reverse,2},{error,badarg}};
- (_) ->
- {unexpected,
- {trace,Self,exception_from,
- {lists,reverse,2},{error,badarg}}}
- end),
- ?line deep_exception(?LINE, deep_5, [1,2], 7,
- [{trace,Self,call,{erlang,error,[undef]}},
- {trace,Self,exception_from,{erlang,error,1},
- {error,undef}}],
- exception_from, {error,undef}),
- ?line deep_exception(?LINE, deep_5, [undef], 8,
- [{trace,Self,call,{?MODULE,deep_5,[undef]}},
- {trace,Self,exception_from,{?MODULE,deep_5,1},
- {error,function_clause}}],
- exception_from, {error,function_clause}),
-
+ io:format("== Subtest: ~w", [?LINE]),
+ try lists:reverse(LongImproperList, []) of
+ R1 -> ct:fail({returned,abbr(R1)})
+ catch error:badarg -> ok
+ end,
+ expect(fun ({trace,S,call,{lists,reverse,[L1,L2]}})
+ when is_list(L1), is_list(L2), S == Self ->
+ next;
+ ({trace,S,exception_from,
+ {lists,reverse,2},{error,badarg}})
+ when S == Self ->
+ expected;
+ ('_') ->
+ {trace,Self,exception_from,
+ {lists,reverse,2},{error,badarg}};
+ (_) ->
+ {unexpected,
+ {trace,Self,exception_from,
+ {lists,reverse,2},{error,badarg}}}
+ end),
+ deep_exception(?LINE, deep_5, [1,2], 7,
+ [{trace,Self,call,{erlang,error,[undef]}},
+ {trace,Self,exception_from,{erlang,error,1},
+ {error,undef}}],
+ exception_from, {error,undef}),
+ deep_exception(?LINE, deep_5, [undef], 8,
+ [{trace,Self,call,{?MODULE,deep_5,[undef]}},
+ {trace,Self,exception_from,{?MODULE,deep_5,1},
+ {error,function_clause}}],
+ exception_from, {error,function_clause}),
+
%% Apply
%%
- ?line deep_exception(?LINE, apply, [erlang,error,[[mo|rot]]], 1,
- [{trace,Self,call,{erlang,error,[[mo|rot]]}},
- {trace,Self,exception_from,{erlang,error,1},
- {error,[mo|rot]}}],
- exception_from, {error,[mo|rot]}),
- ?line deep_exception(?LINE, apply, [erlang,error,[[mo|"rot"],[]]], 1,
- [{trace,Self,call,{erlang,error,[[mo|"rot"],[]]}},
- {trace,Self,exception_from,{erlang,error,2},
- {error,[mo|"rot"]}}],
- exception_from, {error,[mo|"rot"]}),
- ?line Morot = make_ref(),
- ?line deep_exception(?LINE, apply, [erlang,throw,[Morot]], 3,
- [{trace,Self,call,{erlang,throw,[Morot]}},
- {trace,Self,exception_from,{erlang,throw,1},
- {throw,Morot}}],
- exception_from, {throw,Morot}),
- ?line deep_exception(?LINE, apply, [erlang,exit,[["morot"|Morot]]], 2,
- [{trace,Self,call,{erlang,exit,[["morot"|Morot]]}},
- {trace,Self,exception_from,{erlang,exit,1},
- {exit,["morot"|Morot]}}],
- exception_from, {exit,["morot"|Morot]}),
- ?line deep_exception(
- ?LINE, apply, [?MODULE,id,[spenat]], 4,
- [{trace,Self,call,{?MODULE,id,[spenat]}},
- {trace,Self,return_from,{?MODULE,id,1},spenat}],
- return_from, spenat),
- ?line deep_exception(
- ?LINE, apply, [erlang,'++',[1,2]], 5,
- [{trace,Self,call,{erlang,'++',[1,2]}},
- {trace,Self,exception_from,{erlang,'++',2},{error,badarg}}],
- exception_from, {error,badarg}),
- ?line io:format("== Subtest: ~w", [?LINE]),
- ?line try apply(lists, reverse, [LongImproperList, []]) of
- R2 -> test_server:fail({returned,abbr(R2)})
- catch error:badarg -> ok
- end,
- ?line expect(fun ({trace,S,call,{lists,reverse,[L1,L2]}})
- when is_list(L1), is_list(L2), S == Self ->
- next;
- ({trace,S,exception_from,
- {lists,reverse,2},{error,badarg}})
- when S == Self ->
- expected;
- ('_') ->
- {trace,Self,exception_from,
- {lists,reverse,2},{error,badarg}};
- (_) ->
- {unexpected,
- {trace,Self,exception_from,
- {lists,reverse,2},{error,badarg}}}
- end),
- ?line deep_exception(?LINE, apply, [?MODULE,deep_5,[1,2]], 7,
- [{trace,Self,call,{erlang,error,[undef]}},
- {trace,Self,exception_from,{erlang,error,1},
- {error,undef}}],
- exception_from, {error,undef}),
- ?line deep_exception(?LINE, apply, [?MODULE,deep_5,[undef]], 8,
- [{trace,Self,call,{?MODULE,deep_5,[undef]}},
- {trace,Self,exception_from,{?MODULE,deep_5,1},
- {error,function_clause}}],
- exception_from, {error,function_clause}),
+ deep_exception(?LINE, apply, [erlang,error,[[mo|rot]]], 1,
+ [{trace,Self,call,{erlang,error,[[mo|rot]]}},
+ {trace,Self,exception_from,{erlang,error,1},
+ {error,[mo|rot]}}],
+ exception_from, {error,[mo|rot]}),
+ deep_exception(?LINE, apply, [erlang,error,[[mo|"rot"],[]]], 1,
+ [{trace,Self,call,{erlang,error,[[mo|"rot"],[]]}},
+ {trace,Self,exception_from,{erlang,error,2},
+ {error,[mo|"rot"]}}],
+ exception_from, {error,[mo|"rot"]}),
+ Morot = make_ref(),
+ deep_exception(?LINE, apply, [erlang,throw,[Morot]], 3,
+ [{trace,Self,call,{erlang,throw,[Morot]}},
+ {trace,Self,exception_from,{erlang,throw,1},
+ {throw,Morot}}],
+ exception_from, {throw,Morot}),
+ deep_exception(?LINE, apply, [erlang,exit,[["morot"|Morot]]], 2,
+ [{trace,Self,call,{erlang,exit,[["morot"|Morot]]}},
+ {trace,Self,exception_from,{erlang,exit,1},
+ {exit,["morot"|Morot]}}],
+ exception_from, {exit,["morot"|Morot]}),
+ deep_exception(
+ ?LINE, apply, [?MODULE,id,[spenat]], 4,
+ [{trace,Self,call,{?MODULE,id,[spenat]}},
+ {trace,Self,return_from,{?MODULE,id,1},spenat}],
+ return_from, spenat),
+ deep_exception(
+ ?LINE, apply, [erlang,'++',[1,2]], 5,
+ [{trace,Self,call,{erlang,'++',[1,2]}},
+ {trace,Self,exception_from,{erlang,'++',2},{error,badarg}}],
+ exception_from, {error,badarg}),
+ io:format("== Subtest: ~w", [?LINE]),
+ try apply(lists, reverse, [LongImproperList, []]) of
+ R2 -> ct:fail({returned,abbr(R2)})
+ catch error:badarg -> ok
+ end,
+ expect(fun ({trace,S,call,{lists,reverse,[L1,L2]}})
+ when is_list(L1), is_list(L2), S == Self ->
+ next;
+ ({trace,S,exception_from,
+ {lists,reverse,2},{error,badarg}})
+ when S == Self ->
+ expected;
+ ('_') ->
+ {trace,Self,exception_from,
+ {lists,reverse,2},{error,badarg}};
+ (_) ->
+ {unexpected,
+ {trace,Self,exception_from,
+ {lists,reverse,2},{error,badarg}}}
+ end),
+ deep_exception(?LINE, apply, [?MODULE,deep_5,[1,2]], 7,
+ [{trace,Self,call,{erlang,error,[undef]}},
+ {trace,Self,exception_from,{erlang,error,1},
+ {error,undef}}],
+ exception_from, {error,undef}),
+ deep_exception(?LINE, apply, [?MODULE,deep_5,[undef]], 8,
+ [{trace,Self,call,{?MODULE,deep_5,[undef]}},
+ {trace,Self,exception_from,{?MODULE,deep_5,1},
+ {error,function_clause}}],
+ exception_from, {error,function_clause}),
%% Apply of fun
%%
- ?line deep_exception(?LINE, apply,
- [fun () ->
- erlang:error([{"palsternacka",3.14},17])
- end, []], 1,
- [{trace,Self,call,
- {erlang,error,[[{"palsternacka",3.14},17]]}},
- {trace,Self,exception_from,{erlang,error,1},
- {error,[{"palsternacka",3.14},17]}}],
- exception_from, {error,[{"palsternacka",3.14},17]}),
- ?line deep_exception(?LINE, apply,
- [fun () ->
- erlang:error(["palsternacka",17], [])
- end, []], 1,
- [{trace,Self,call,
- {erlang,error,[["palsternacka",17],[]]}},
- {trace,Self,exception_from,{erlang,error,2},
- {error,["palsternacka",17]}}],
- exception_from, {error,["palsternacka",17]}),
- ?line deep_exception(?LINE, apply,
- [fun () -> erlang:throw(Self) end, []], 2,
- [{trace,Self,call,{erlang,throw,[Self]}},
- {trace,Self,exception_from,{erlang,throw,1},
- {throw,Self}}],
- exception_from, {throw,Self}),
- ?line deep_exception(?LINE, apply,
- [fun () ->
- erlang:exit({1,2,3,4,[5,palsternacka]})
- end, []], 3,
- [{trace,Self,call,
- {erlang,exit,[{1,2,3,4,[5,palsternacka]}]}},
- {trace,Self,exception_from,{erlang,exit,1},
- {exit,{1,2,3,4,[5,palsternacka]}}}],
- exception_from, {exit,{1,2,3,4,[5,palsternacka]}}),
- ?line deep_exception(?LINE, apply,
- [fun () -> ?MODULE:id(bladsallad) end, []], 4,
- [{trace,Self,call,{?MODULE,id,[bladsallad]}},
- {trace,Self,return_from,{?MODULE,id,1},bladsallad}],
- return_from, bladsallad),
- ?line deep_exception(?LINE, apply,
- [fun (A, B) -> A ++ B end, [1,2]], 5,
- [{trace,Self,call,{erlang,'++',[1,2]}},
- {trace,Self,exception_from,
- {erlang,'++',2},{error,badarg}}],
- exception_from, {error,badarg}),
- ?line deep_exception(?LINE, apply, [fun (A, B) -> A = B end, [1,2]], 6,
- [],
- exception_from, {error,{badmatch,2}}),
- ?line io:format("== Subtest: ~w", [?LINE]),
- ?line try apply(fun() -> lists:reverse(LongImproperList, []) end, []) of
- R3 -> test_server:fail({returned,abbr(R3)})
- catch error:badarg -> ok
- end,
- ?line expect(fun ({trace,S,call,{lists,reverse,[L1,L2]}})
- when is_list(L1), is_list(L2), S == Self ->
- next;
- ({trace,S,exception_from,
- {lists,reverse,2},{error,badarg}})
- when S == Self ->
- expected;
- ('_') ->
- {trace,Self,exception_from,
- {lists,reverse,2},{error,badarg}};
- (_) ->
- {unexpected,
- {trace,Self,exception_from,
- {lists,reverse,2},{error,badarg}}}
- end),
- ?line deep_exception(?LINE, apply,
- [fun () -> ?MODULE:deep_5(1,2) end, []], 7,
- [{trace,Self,call,{erlang,error,[undef]}},
- {trace,Self,exception_from,{erlang,error,1},
- {error,undef}}],
- exception_from, {error,undef}),
- ?line deep_exception(?LINE, apply,
- [fun () -> ?MODULE:deep_5(undef) end, []], 8,
- [{trace,Self,call,{?MODULE,deep_5,[undef]}},
- {trace,Self,exception_from,{?MODULE,deep_5,1},
- {error,function_clause}}],
- exception_from, {error,function_clause}),
-
- ?line trace_func({?MODULE,'_','_'}, false),
- ?line trace_func({erlang,'_','_'}, false),
- ?line trace_func({lists,'_','_'}, false),
- ?line expect(),
- ?line ok.
+ deep_exception(?LINE, apply,
+ [fun () ->
+ erlang:error([{"palsternacka",3.14},17])
+ end, []], 1,
+ [{trace,Self,call,
+ {erlang,error,[[{"palsternacka",3.14},17]]}},
+ {trace,Self,exception_from,{erlang,error,1},
+ {error,[{"palsternacka",3.14},17]}}],
+ exception_from, {error,[{"palsternacka",3.14},17]}),
+ deep_exception(?LINE, apply,
+ [fun () ->
+ erlang:error(["palsternacka",17], [])
+ end, []], 1,
+ [{trace,Self,call,
+ {erlang,error,[["palsternacka",17],[]]}},
+ {trace,Self,exception_from,{erlang,error,2},
+ {error,["palsternacka",17]}}],
+ exception_from, {error,["palsternacka",17]}),
+ deep_exception(?LINE, apply,
+ [fun () -> erlang:throw(Self) end, []], 2,
+ [{trace,Self,call,{erlang,throw,[Self]}},
+ {trace,Self,exception_from,{erlang,throw,1},
+ {throw,Self}}],
+ exception_from, {throw,Self}),
+ deep_exception(?LINE, apply,
+ [fun () ->
+ erlang:exit({1,2,3,4,[5,palsternacka]})
+ end, []], 3,
+ [{trace,Self,call,
+ {erlang,exit,[{1,2,3,4,[5,palsternacka]}]}},
+ {trace,Self,exception_from,{erlang,exit,1},
+ {exit,{1,2,3,4,[5,palsternacka]}}}],
+ exception_from, {exit,{1,2,3,4,[5,palsternacka]}}),
+ deep_exception(?LINE, apply,
+ [fun () -> ?MODULE:id(bladsallad) end, []], 4,
+ [{trace,Self,call,{?MODULE,id,[bladsallad]}},
+ {trace,Self,return_from,{?MODULE,id,1},bladsallad}],
+ return_from, bladsallad),
+ deep_exception(?LINE, apply,
+ [fun (A, B) -> A ++ B end, [1,2]], 5,
+ [{trace,Self,call,{erlang,'++',[1,2]}},
+ {trace,Self,exception_from,
+ {erlang,'++',2},{error,badarg}}],
+ exception_from, {error,badarg}),
+ deep_exception(?LINE, apply, [fun (A, B) -> A = B end, [1,2]], 6,
+ [],
+ exception_from, {error,{badmatch,2}}),
+ io:format("== Subtest: ~w", [?LINE]),
+ try apply(fun() -> lists:reverse(LongImproperList, []) end, []) of
+ R3 -> ct:fail({returned,abbr(R3)})
+ catch error:badarg -> ok
+ end,
+ expect(fun ({trace,S,call,{lists,reverse,[L1,L2]}})
+ when is_list(L1), is_list(L2), S == Self ->
+ next;
+ ({trace,S,exception_from,
+ {lists,reverse,2},{error,badarg}})
+ when S == Self ->
+ expected;
+ ('_') ->
+ {trace,Self,exception_from,
+ {lists,reverse,2},{error,badarg}};
+ (_) ->
+ {unexpected,
+ {trace,Self,exception_from,
+ {lists,reverse,2},{error,badarg}}}
+ end),
+ deep_exception(?LINE, apply,
+ [fun () -> ?MODULE:deep_5(1,2) end, []], 7,
+ [{trace,Self,call,{erlang,error,[undef]}},
+ {trace,Self,exception_from,{erlang,error,1},
+ {error,undef}}],
+ exception_from, {error,undef}),
+ deep_exception(?LINE, apply,
+ [fun () -> ?MODULE:deep_5(undef) end, []], 8,
+ [{trace,Self,call,{?MODULE,deep_5,[undef]}},
+ {trace,Self,exception_from,{?MODULE,deep_5,1},
+ {error,function_clause}}],
+ exception_from, {error,function_clause}),
+
+ trace_func({?MODULE,'_','_'}, false),
+ trace_func({erlang,'_','_'}, false),
+ trace_func({lists,'_','_'}, false),
+ expect(),
+ ok.
deep_exception(Line, B, Q, N, Extra, Tag, R) ->
- ?line Self = self(),
- ?line io:format("== Subtest: ~w", [Line]),
- ?line Result = ?MODULE:deep(N, B, Q),
- ?line Result = deep_expect(Self, B, Q, N, Extra, Tag, R).
+ Self = self(),
+ io:format("== Subtest: ~w", [Line]),
+ Result = ?MODULE:deep(N, B, Q),
+ Result = deep_expect(Self, B, Q, N, Extra, Tag, R).
deep_expect(Self, B, Q, N, Extra, Tag, R) ->
- ?line expect({trace,Self,call,{?MODULE,deep,[N,B,Q]}}),
- ?line Result = deep_expect_N(Self, B, Q, N, Extra, Tag, R),
- ?line expect({trace,Self,return_from,{?MODULE,deep,3},Result}),
- ?line Result.
+ expect({trace,Self,call,{?MODULE,deep,[N,B,Q]}}),
+ Result = deep_expect_N(Self, B, Q, N, Extra, Tag, R),
+ expect({trace,Self,return_from,{?MODULE,deep,3},Result}),
+ Result.
deep_expect_N(Self, B, Q, N, Extra, Tag, R) ->
deep_expect_N(Self, B, Q, N, Extra, Tag, R, N).
deep_expect_N(Self, B, Q, N, Extra, Tag, R, J) when J > 0 ->
- ?line expect({trace,Self,call,{?MODULE,deep_1,[J,B,Q]}}),
- ?line deep_expect_N(Self, B, Q, N, Extra, Tag, R, J-1);
+ expect({trace,Self,call,{?MODULE,deep_1,[J,B,Q]}}),
+ deep_expect_N(Self, B, Q, N, Extra, Tag, R, J-1);
deep_expect_N(Self, B, Q, N, Extra, Tag, R, 0) ->
- ?line expect({trace,Self,call,{?MODULE,deep_2,[B,Q]}}),
- ?line expect({trace,Self,call,{?MODULE,deep_3,[B,Q]}}),
- ?line expect({trace,Self,return_from,{?MODULE,deep_3,2},{B,Q}}),
- ?line expect({trace,Self,call,{?MODULE,deep_4,[{B,Q}]}}),
- ?line expect({trace,Self,call,{?MODULE,id,[{B,Q}]}}),
- ?line expect({trace,Self,return_from,{?MODULE,id,1},{B,Q}}),
- ?line deep_expect_Extra(Self, N, Extra, Tag, R),
- ?line expect({trace,Self,Tag,{?MODULE,deep_4,1},R}),
- ?line expect({trace,Self,Tag,{?MODULE,deep_2,2},R}),
- ?line deep_expect_N(Self, N, Tag, R).
+ expect({trace,Self,call,{?MODULE,deep_2,[B,Q]}}),
+ expect({trace,Self,call,{?MODULE,deep_3,[B,Q]}}),
+ expect({trace,Self,return_from,{?MODULE,deep_3,2},{B,Q}}),
+ expect({trace,Self,call,{?MODULE,deep_4,[{B,Q}]}}),
+ expect({trace,Self,call,{?MODULE,id,[{B,Q}]}}),
+ expect({trace,Self,return_from,{?MODULE,id,1},{B,Q}}),
+ deep_expect_Extra(Self, N, Extra, Tag, R),
+ expect({trace,Self,Tag,{?MODULE,deep_4,1},R}),
+ expect({trace,Self,Tag,{?MODULE,deep_2,2},R}),
+ deep_expect_N(Self, N, Tag, R).
deep_expect_Extra(Self, N, [E|Es], Tag, R) ->
- ?line expect(E),
- ?line deep_expect_Extra(Self, N, Es, Tag, R);
+ expect(E),
+ deep_expect_Extra(Self, N, Es, Tag, R);
deep_expect_Extra(_Self, _N, [], _Tag, _R) ->
- ?line ok.
+ ok.
deep_expect_N(Self, N, Tag, R) when N > 0 ->
- ?line expect({trace,Self,Tag,{?MODULE,deep_1,3},R}),
- ?line deep_expect_N(Self, N-1, Tag, R);
+ expect({trace,Self,Tag,{?MODULE,deep_1,3},R}),
+ deep_expect_N(Self, N-1, Tag, R);
deep_expect_N(_Self, 0, return_from, R) ->
- ?line {value,R};
+ {value,R};
deep_expect_N(_Self, 0, exception_from, R) ->
- ?line R.
+ R.
-exception_nocatch(doc) -> "Test the new exception trace.";
-exception_nocatch(suite) -> [];
+%% Test the new exception trace.
exception_nocatch(Config) when is_list(Config) ->
exception_nocatch().
@@ -1082,78 +1066,78 @@ exception_nocatch() ->
Deep4LocBadmatch = get_deep_4_loc({'=',[a,b]}),
Prog = [{'_',[],[{exception_trace}]}],
- ?line 1 = erlang:trace_pattern({?MODULE,deep_1,'_'}, Prog),
- ?line 1 = erlang:trace_pattern({?MODULE,deep_2,'_'}, Prog),
- ?line 1 = erlang:trace_pattern({?MODULE,deep_3,'_'}, Prog),
- ?line 1 = erlang:trace_pattern({?MODULE,deep_4,'_'}, Prog),
- ?line 1 = erlang:trace_pattern({?MODULE,deep_5,'_'}, Prog),
- ?line 1 = erlang:trace_pattern({?MODULE,id,'_'}, Prog),
- ?line 1 = erlang:trace_pattern({erlang,exit,1}, Prog),
- ?line 1 = erlang:trace_pattern({erlang,throw,1}, Prog),
- ?line 2 = erlang:trace_pattern({erlang,error,'_'}, Prog),
- ?line Q1 = {make_ref(),Prog},
- ?line T1 =
- exception_nocatch(?LINE, exit, [Q1], 3,
- [{trace,t1,call,{erlang,exit,[Q1]}},
- {trace,t1,exception_from,{erlang,exit,1},
- {exit,Q1}}],
- exception_from, {exit,Q1}),
- ?line expect({trace,T1,exit,Q1}),
- ?line Q2 = {cake,14.125},
- ?line T2 =
- exception_nocatch(?LINE, throw, [Q2], 2,
- [{trace,t2,call,{erlang,throw,[Q2]}},
- {trace,t2,exception_from,{erlang,throw,1},
- {error,{nocatch,Q2}}}],
- exception_from, {error,{nocatch,Q2}}),
- ?line expect({trace,T2,exit,{{nocatch,Q2},[{erlang,throw,[Q2],[]},
- {?MODULE,deep_4,1,
- Deep4LocThrow}]}}),
- ?line Q3 = {dump,[dump,{dump}]},
- ?line T3 =
- exception_nocatch(?LINE, error, [Q3], 4,
- [{trace,t3,call,{erlang,error,[Q3]}},
- {trace,t3,exception_from,{erlang,error,1},
- {error,Q3}}],
- exception_from, {error,Q3}),
- ?line expect({trace,T3,exit,{Q3,[{erlang,error,[Q3],[]},
- {?MODULE,deep_4,1,Deep4LocError}]}}),
- ?line T4 =
- exception_nocatch(?LINE, '=', [17,4711], 5, [],
- exception_from, {error,{badmatch,4711}}),
- ?line expect({trace,T4,exit,{{badmatch,4711},
- [{?MODULE,deep_4,1,Deep4LocBadmatch}]}}),
+ 1 = erlang:trace_pattern({?MODULE,deep_1,'_'}, Prog),
+ 1 = erlang:trace_pattern({?MODULE,deep_2,'_'}, Prog),
+ 1 = erlang:trace_pattern({?MODULE,deep_3,'_'}, Prog),
+ 1 = erlang:trace_pattern({?MODULE,deep_4,'_'}, Prog),
+ 1 = erlang:trace_pattern({?MODULE,deep_5,'_'}, Prog),
+ 1 = erlang:trace_pattern({?MODULE,id,'_'}, Prog),
+ 1 = erlang:trace_pattern({erlang,exit,1}, Prog),
+ 1 = erlang:trace_pattern({erlang,throw,1}, Prog),
+ 2 = erlang:trace_pattern({erlang,error,'_'}, Prog),
+ Q1 = {make_ref(),Prog},
+ T1 =
+ exception_nocatch(?LINE, exit, [Q1], 3,
+ [{trace,t1,call,{erlang,exit,[Q1]}},
+ {trace,t1,exception_from,{erlang,exit,1},
+ {exit,Q1}}],
+ exception_from, {exit,Q1}),
+ expect({trace,T1,exit,Q1}),
+ Q2 = {cake,14.125},
+ T2 =
+ exception_nocatch(?LINE, throw, [Q2], 2,
+ [{trace,t2,call,{erlang,throw,[Q2]}},
+ {trace,t2,exception_from,{erlang,throw,1},
+ {error,{nocatch,Q2}}}],
+ exception_from, {error,{nocatch,Q2}}),
+ expect({trace,T2,exit,{{nocatch,Q2},[{erlang,throw,[Q2],[]},
+ {?MODULE,deep_4,1,
+ Deep4LocThrow}]}}),
+ Q3 = {dump,[dump,{dump}]},
+ T3 =
+ exception_nocatch(?LINE, error, [Q3], 4,
+ [{trace,t3,call,{erlang,error,[Q3]}},
+ {trace,t3,exception_from,{erlang,error,1},
+ {error,Q3}}],
+ exception_from, {error,Q3}),
+ expect({trace,T3,exit,{Q3,[{erlang,error,[Q3],[]},
+ {?MODULE,deep_4,1,Deep4LocError}]}}),
+ T4 =
+ exception_nocatch(?LINE, '=', [17,4711], 5, [],
+ exception_from, {error,{badmatch,4711}}),
+ expect({trace,T4,exit,{{badmatch,4711},
+ [{?MODULE,deep_4,1,Deep4LocBadmatch}]}}),
%%
- ?line erlang:trace_pattern({?MODULE,'_','_'}, false),
- ?line erlang:trace_pattern({erlang,'_','_'}, false),
- ?line expect(),
- ?line ok.
+ erlang:trace_pattern({?MODULE,'_','_'}, false),
+ erlang:trace_pattern({erlang,'_','_'}, false),
+ expect(),
+ ok.
get_deep_4_loc(Arg) ->
try
- deep_4(Arg),
- ?t:fail(should_not_return_to_here)
+ deep_4(Arg),
+ ct:fail(should_not_return_to_here)
catch
- _:_ ->
- [{?MODULE,deep_4,1,Loc0}|_] = erlang:get_stacktrace(),
- Loc0
+ _:_ ->
+ [{?MODULE,deep_4,1,Loc0}|_] = erlang:get_stacktrace(),
+ Loc0
end.
exception_nocatch(Line, B, Q, N, Extra, Tag, R) ->
- ?line io:format("== Subtest: ~w", [Line]),
- ?line Go = make_ref(),
- ?line Tracee =
- spawn(fun () ->
- receive
- Go ->
- deep_1(N, B, Q)
- end
- end),
- ?line 1 = erlang:trace(Tracee, true, [call,return_to,procs]),
- ?line Tracee ! Go,
- ?line deep_expect_N(Tracee, B, Q, N-1,
- [setelement(2, T, Tracee) || T <- Extra], Tag, R),
- ?line Tracee.
+ io:format("== Subtest: ~w", [Line]),
+ Go = make_ref(),
+ Tracee =
+ spawn(fun () ->
+ receive
+ Go ->
+ deep_1(N, B, Q)
+ end
+ end),
+ 1 = erlang:trace(Tracee, true, [call,return_to,procs]),
+ Tracee ! Go,
+ deep_expect_N(Tracee, B, Q, N-1,
+ [setelement(2, T, Tracee) || T <- Extra], Tag, R),
+ Tracee.
%% Make sure that code that uses the optimized bit syntax matching
%% can be traced without crashing the emulator. (Actually, it seems
@@ -1161,22 +1145,22 @@ exception_nocatch(Line, B, Q, N, Extra, Tag, R) ->
%% will keep the test case anyway.)
bit_syntax(Config) when is_list(Config) ->
- ?line start_tracer(),
- ?line 1 = trace_func({?MODULE,bs_sum_a,'_'}, []),
- ?line 1 = trace_func({?MODULE,bs_sum_b,'_'}, []),
+ start_tracer(),
+ 1 = trace_func({?MODULE,bs_sum_a,'_'}, []),
+ 1 = trace_func({?MODULE,bs_sum_b,'_'}, []),
- ?line 6 = call_bs_sum_a(<<1,2,3>>),
- ?line 10 = call_bs_sum_b(<<1,2,3,4>>),
+ 6 = call_bs_sum_a(<<1,2,3>>),
+ 10 = call_bs_sum_b(<<1,2,3,4>>),
- ?line trace_func({?MODULE,'_','_'}, false),
- ?line erlang:trace_delivered(all),
+ trace_func({?MODULE,'_','_'}, false),
+ erlang:trace_delivered(all),
receive
- {trace_delivered,_,_} -> ok
+ {trace_delivered,_,_} -> ok
end,
-
+
Self = self(),
- ?line expect({trace,Self,call,{?MODULE,bs_sum_a,[<<2,3>>,1]}}),
- ?line expect({trace,Self,call,{?MODULE,bs_sum_b,[1,<<2,3,4>>]}}),
+ expect({trace,Self,call,{?MODULE,bs_sum_a,[<<2,3>>,1]}}),
+ expect({trace,Self,call,{?MODULE,bs_sum_b,[1,<<2,3,4>>]}}),
ok.
@@ -1191,7 +1175,7 @@ bs_sum_a(<<>>, Acc) -> Acc.
bs_sum_b(Acc, <<H,T/binary>>) -> bs_sum_b(H+Acc, T);
bs_sum_b(Acc, <<>>) -> Acc.
-
+
@@ -1199,98 +1183,98 @@ bs_sum_b(Acc, <<>>) -> Acc.
expect() ->
case flush() of
- [] -> ok;
- Msgs ->
- test_server:fail({unexpected,abbr(Msgs)})
+ [] -> ok;
+ Msgs ->
+ ct:fail({unexpected,abbr(Msgs)})
end.
expect({trace_ts,Pid,Type,MFA,Term,ts}=Message) ->
receive
- M ->
- case M of
- {trace_ts,Pid,Type,MFA,Term,Ts}=MessageTs ->
- ok = io:format("Expected and got ~p", [abbr(MessageTs)]),
- Ts;
- _ ->
- io:format("Expected ~p; got ~p", [abbr(Message),abbr(M)]),
- test_server:fail({unexpected,abbr([M|flush()])})
- end
+ M ->
+ case M of
+ {trace_ts,Pid,Type,MFA,Term,Ts}=MessageTs ->
+ ok = io:format("Expected and got ~p", [abbr(MessageTs)]),
+ Ts;
+ _ ->
+ io:format("Expected ~p; got ~p", [abbr(Message),abbr(M)]),
+ ct:fail({unexpected,abbr([M|flush()])})
+ end
after 5000 ->
- io:format("Expected ~p; got nothing", [abbr(Message)]),
- test_server:fail(no_trace_message)
+ io:format("Expected ~p; got nothing", [abbr(Message)]),
+ ct:fail(no_trace_message)
end;
expect({trace_ts,Pid,Type,MFA,ts}=Message) ->
receive
- M ->
- case M of
- {trace_ts,Pid,Type,MFA,Ts} ->
- ok = io:format("Expected and got ~p", [abbr(M)]),
- Ts;
- _ ->
- io:format("Expected ~p; got ~p", [abbr(Message),abbr(M)]),
- test_server:fail({unexpected,abbr([M|flush()])})
- end
+ M ->
+ case M of
+ {trace_ts,Pid,Type,MFA,Ts} ->
+ ok = io:format("Expected and got ~p", [abbr(M)]),
+ Ts;
+ _ ->
+ io:format("Expected ~p; got ~p", [abbr(Message),abbr(M)]),
+ ct:fail({unexpected,abbr([M|flush()])})
+ end
after 5000 ->
- io:format("Expected ~p; got nothing", [abbr(Message)]),
- test_server:fail(no_trace_message)
+ io:format("Expected ~p; got nothing", [abbr(Message)]),
+ ct:fail(no_trace_message)
end;
expect(Validator) when is_function(Validator) ->
receive
- M ->
- case Validator(M) of
- expected ->
- ok = io:format("Expected and got ~p", [abbr(M)]);
- next ->
- ok = io:format("Expected and got ~p", [abbr(M)]),
- expect(Validator);
- {unexpected,Message} ->
- io:format("Expected ~p; got ~p", [abbr(Message),abbr(M)]),
- test_server:fail({unexpected,abbr([M|flush()])})
- end
+ M ->
+ case Validator(M) of
+ expected ->
+ ok = io:format("Expected and got ~p", [abbr(M)]);
+ next ->
+ ok = io:format("Expected and got ~p", [abbr(M)]),
+ expect(Validator);
+ {unexpected,Message} ->
+ io:format("Expected ~p; got ~p", [abbr(Message),abbr(M)]),
+ ct:fail({unexpected,abbr([M|flush()])})
+ end
after 5000 ->
- io:format("Expected ~p; got nothing", [abbr(Validator('_'))]),
- test_server:fail(no_trace_message)
+ io:format("Expected ~p; got nothing", [abbr(Validator('_'))]),
+ ct:fail(no_trace_message)
end;
expect(Message) ->
receive
- M ->
- case M of
- Message ->
- ok = io:format("Expected and got ~p", [abbr(Message)]);
- Other ->
- io:format("Expected ~p; got ~p",
- [abbr(Message),abbr(Other)]),
- test_server:fail({unexpected,abbr([Other|flush()])})
- end
+ M ->
+ case M of
+ Message ->
+ ok = io:format("Expected and got ~p", [abbr(Message)]);
+ Other ->
+ io:format("Expected ~p; got ~p",
+ [abbr(Message),abbr(Other)]),
+ ct:fail({unexpected,abbr([Other|flush()])})
+ end
after 5000 ->
- io:format("Expected ~p; got nothing", [abbr(Message)]),
- test_server:fail(no_trace_message)
+ io:format("Expected ~p; got nothing", [abbr(Message)]),
+ ct:fail(no_trace_message)
end.
trace_info(What, Key) ->
get(tracer) ! {apply,self(),{erlang,trace_info,[What,Key]}},
Res = receive
- {apply_result,Result} -> Result
- end,
+ {apply_result,Result} -> Result
+ end,
ok = io:format("erlang:trace_info(~p, ~p) -> ~p",
- [What,Key,Res]),
+ [What,Key,Res]),
Res.
-
+
trace_func(MFA, MatchSpec) ->
trace_func(MFA, MatchSpec, []).
trace_func(MFA, MatchSpec, Flags) ->
get(tracer) ! {apply,self(),{erlang,trace_pattern,[MFA, MatchSpec, Flags]}},
Res = receive
- {apply_result,Result} -> Result
- end,
+ {apply_result,Result} -> Result
+ end,
ok = io:format("trace_pattern(~p, ~p, ~p) -> ~p", [MFA,MatchSpec,Flags,Res]),
Res.
trace_pid(Pid, On, Flags) ->
get(tracer) ! {apply,self(),{erlang,trace,[Pid,On,Flags]}},
Res = receive
- {apply_result,Result} -> Result
- end,
+ {apply_result,Result} -> Result
+ end,
ok = io:format("trace(~p, ~p, ~p) -> ~p", [Pid,On,Flags,Res]),
Res.
@@ -1310,19 +1294,19 @@ tracer(RelayTo) ->
tracer_loop(RelayTo) ->
receive
- {apply,From,{M,F,A}} ->
- From ! {apply_result,apply(M, F, A)},
- tracer_loop(RelayTo);
- Msg ->
- RelayTo ! Msg,
- tracer_loop(RelayTo)
+ {apply,From,{M,F,A}} ->
+ From ! {apply_result,apply(M, F, A)},
+ tracer_loop(RelayTo);
+ Msg ->
+ RelayTo ! Msg,
+ tracer_loop(RelayTo)
end.
id(I) -> I.
deep(N, Class, Reason) ->
try ?MODULE:deep_1(N, Class, Reason) of
- Value -> {value,Value}
+ Value -> {value,Value}
catch C:R -> {C,R}
end.
@@ -1339,30 +1323,30 @@ deep_3(Class, Reason) ->
deep_4(CR) ->
case ?MODULE:id(CR) of
- {exit,[Reason]} ->
- erlang:exit(Reason);
- {throw,[Reason]} ->
- erlang:throw(Reason);
- {error,[Reason,Arglist]} ->
- erlang:error(Reason, Arglist);
- {error,[Reason]} ->
- erlang:error(Reason);
- {id,[Reason]} ->
- Reason;
- {reverse,[A,B]} ->
- lists:reverse(A, B);
- {append,[A,B]} ->
- A ++ B;
- {apply,[Fun,Args]} ->
- erlang:apply(Fun, Args);
- {apply,[M,F,Args]} ->
- erlang:apply(M, F, Args);
- {deep_5,[A,B]} ->
- ?MODULE:deep_5(A, B);
- {deep_5,[A]} ->
- ?MODULE:deep_5(A);
- {'=',[A,B]} ->
- A = B
+ {exit,[Reason]} ->
+ erlang:exit(Reason);
+ {throw,[Reason]} ->
+ erlang:throw(Reason);
+ {error,[Reason,Arglist]} ->
+ erlang:error(Reason, Arglist);
+ {error,[Reason]} ->
+ erlang:error(Reason);
+ {id,[Reason]} ->
+ Reason;
+ {reverse,[A,B]} ->
+ lists:reverse(A, B);
+ {append,[A,B]} ->
+ A ++ B;
+ {apply,[Fun,Args]} ->
+ erlang:apply(Fun, Args);
+ {apply,[M,F,Args]} ->
+ erlang:apply(M, F, Args);
+ {deep_5,[A,B]} ->
+ ?MODULE:deep_5(A, B);
+ {deep_5,[A]} ->
+ ?MODULE:deep_5(A);
+ {'=',[A,B]} ->
+ A = B
end.
deep_5(A) when is_integer(A) ->
@@ -1370,9 +1354,9 @@ deep_5(A) when is_integer(A) ->
flush() ->
receive X ->
- [X|flush()]
+ [X|flush()]
after 1000 ->
- []
+ []
end.
%% Abbreviate large complex terms
@@ -1395,10 +1379,10 @@ abbr_tuple(_, _, _, R) ->
%%
abbr_list(_, 0, R) ->
case io_lib:printable_list(R) of
- true ->
- reverse(R, "...");
- false ->
- reverse(R, '...')
+ true ->
+ reverse(R, "...");
+ false ->
+ reverse(R, '...')
end;
abbr_list([H|T], N, R) ->
M = N-1,
diff --git a/erts/emulator/test/code_SUITE.erl b/erts/emulator/test/code_SUITE.erl
index 3d2cc000a8..2347a3d4ef 100644
--- a/erts/emulator/test/code_SUITE.erl
+++ b/erts/emulator/test/code_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.
@@ -19,15 +19,14 @@
%%
-module(code_SUITE).
--export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
- init_per_group/2,end_per_group/2,
- versions/1,new_binary_types/1,
- t_check_process_code/1,t_check_old_code/1,
- t_check_process_code_ets/1,
- external_fun/1,get_chunk/1,module_md5/1,make_stub/1,
- make_stub_many_funs/1,constant_pools/1,constant_refc_binaries/1,
- false_dependency/1,coverage/1,fun_confusion/1,
- t_copy_literals/1]).
+-export([all/0, suite/0, init_per_suite/1, end_per_suite/1,
+ versions/1,new_binary_types/1,
+ t_check_process_code/1,t_check_old_code/1,
+ t_check_process_code_ets/1,
+ external_fun/1,get_chunk/1,module_md5/1,make_stub/1,
+ make_stub_many_funs/1,constant_pools/1,constant_refc_binaries/1,
+ false_dependency/1,coverage/1,fun_confusion/1,
+ t_copy_literals/1, t_copy_literals_frags/1]).
-define(line_trace, 1).
-include_lib("common_test/include/ct.hrl").
@@ -39,10 +38,7 @@ all() ->
t_check_process_code_ets, t_check_old_code, external_fun, get_chunk,
module_md5, make_stub, make_stub_many_funs,
constant_pools, constant_refc_binaries, false_dependency,
- coverage, fun_confusion, t_copy_literals].
-
-groups() ->
- [].
+ coverage, fun_confusion, t_copy_literals, t_copy_literals_frags].
init_per_suite(Config) ->
erts_debug:set_internal_state(available_internal_state, true),
@@ -52,12 +48,6 @@ end_per_suite(_Config) ->
catch erts_debug:set_internal_state(available_internal_state, false),
ok.
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
-
%% Make sure that only two versions of a module can be loaded.
versions(Config) when is_list(Config) ->
V1 = compile_version(1, Config),
@@ -78,10 +68,10 @@ versions(Config) when is_list(Config) ->
_ = monitor(process, P1),
_ = monitor(process, P2),
receive
- {'DOWN',_,process,P1,normal} -> ok
+ {'DOWN',_,process,P1,normal} -> ok
end,
receive
- {'DOWN',_,process,P2,normal} -> ok
+ {'DOWN',_,process,P2,normal} -> ok
end,
true = erlang:purge_module(versions),
true = erlang:delete_module(versions),
@@ -89,84 +79,84 @@ versions(Config) when is_list(Config) ->
ok.
compile_version(Version, Config) ->
- Data = ?config(data_dir, Config),
+ Data = proplists:get_value(data_dir, Config),
File = filename:join(Data, "versions"),
{ok,versions,Bin} = compile:file(File, [{d,'VERSION',Version},
- binary,report]),
+ binary,report]),
Bin.
load_version(Code, Ver) ->
case erlang:load_module(versions, Code) of
- {module,versions} ->
- Pid = spawn_link(versions, loop, []),
- Ver = versions:version(),
- Ver = check_version(Pid),
- {ok,Pid,Ver};
- Error ->
- Error
+ {module,versions} ->
+ Pid = spawn_link(versions, loop, []),
+ Ver = versions:version(),
+ Ver = check_version(Pid),
+ {ok,Pid,Ver};
+ Error ->
+ Error
end.
check_version(Pid) ->
Pid ! {self(),version},
receive
- {Pid,version,Version} ->
- Version
+ {Pid,version,Version} ->
+ Version
end.
new_binary_types(Config) when is_list(Config) ->
- ?line Data = ?config(data_dir, Config),
- ?line File = filename:join(Data, "my_code_test"),
- ?line {ok,my_code_test,Bin} = compile:file(File, [binary]),
- ?line {module,my_code_test} = erlang:load_module(my_code_test,
- make_sub_binary(Bin)),
- ?line true = erlang:delete_module(my_code_test),
- ?line true = erlang:purge_module(my_code_test),
-
- ?line {module,my_code_test} = erlang:load_module(my_code_test,
- make_unaligned_sub_binary(Bin)),
- ?line true = erlang:delete_module(my_code_test),
- ?line true = erlang:purge_module(my_code_test),
+ Data = proplists:get_value(data_dir, Config),
+ File = filename:join(Data, "my_code_test"),
+ {ok,my_code_test,Bin} = compile:file(File, [binary]),
+ {module,my_code_test} = erlang:load_module(my_code_test,
+ make_sub_binary(Bin)),
+ true = erlang:delete_module(my_code_test),
+ true = erlang:purge_module(my_code_test),
+
+ {module,my_code_test} = erlang:load_module(my_code_test,
+ make_unaligned_sub_binary(Bin)),
+ true = erlang:delete_module(my_code_test),
+ true = erlang:purge_module(my_code_test),
%% Try heap binaries and bad binaries.
- ?line {error,badfile} = erlang:load_module(my_code_test, <<1,2>>),
- ?line {error,badfile} = erlang:load_module(my_code_test,
- make_sub_binary(<<1,2>>)),
- ?line {error,badfile} = erlang:load_module(my_code_test,
- make_unaligned_sub_binary(<<1,2>>)),
- ?line {'EXIT',{badarg,_}} = (catch erlang:load_module(my_code_test,
- bit_sized_binary(Bin))),
+ {error,badfile} = erlang:load_module(my_code_test, <<1,2>>),
+ {error,badfile} = erlang:load_module(my_code_test,
+ make_sub_binary(<<1,2>>)),
+ {error,badfile} = erlang:load_module(my_code_test,
+ make_unaligned_sub_binary(<<1,2>>)),
+ {'EXIT',{badarg,_}} = (catch erlang:load_module(my_code_test,
+ bit_sized_binary(Bin))),
ok.
t_check_process_code(Config) when is_list(Config) ->
- ?line Priv = ?config(priv_dir, Config),
- ?line Data = ?config(data_dir, Config),
- ?line File = filename:join(Data, "my_code_test"),
- ?line Code = filename:join(Priv, "my_code_test"),
+ Priv = proplists:get_value(priv_dir, Config),
+ Data = proplists:get_value(data_dir, Config),
+ File = filename:join(Data, "my_code_test"),
+ Code = filename:join(Priv, "my_code_test"),
- ?line {ok,my_code_test} = c:c(File, [{outdir,Priv}]),
+ {ok,my_code_test} = c:c(File, [{outdir,Priv}]),
- ?line MyFun = fun(X, Y) -> X + Y end, %Confuse things.
- ?line F = my_code_test:make_fun(42),
- ?line 2 = fun_refc(F),
- ?line MyFun2 = fun(X, Y) -> X * Y end, %Confuse things.
- ?line 44 = F(2),
+ MyFun = fun(X, Y) -> X + Y end, %Confuse things.
+ F = my_code_test:make_fun(42),
+ 2 = fun_refc(F),
+ MyFun2 = fun(X, Y) -> X * Y end, %Confuse things.
+ 44 = F(2),
%% Delete the module and call the fun again.
- ?line true = erlang:delete_module(my_code_test),
- ?line 2 = fun_refc(F),
- ?line 45 = F(3),
- ?line {'EXIT',{undef,_}} = (catch my_code_test:make_fun(33)),
+ true = erlang:delete_module(my_code_test),
+ 2 = fun_refc(F),
+ 45 = F(3),
+ {'EXIT',{undef,_}} = (catch my_code_test:make_fun(33)),
%% The fun should still be there, preventing purge.
- ?line true = erlang:check_process_code(self(), my_code_test),
+ true = erlang:check_process_code(self(), my_code_test),
gc(),
gc(), %Place funs on the old heap.
- ?line true = erlang:check_process_code(self(), my_code_test),
+ true = erlang:check_process_code(self(), my_code_test),
%% Using the funs here guarantees that they will not be prematurely garbed.
- ?line 48 = F(6),
- ?line 3 = MyFun(1, 2),
- ?line 12 = MyFun2(3, 4),
+ 48 = F(6),
+ 3 = MyFun(1, 2),
+ 12 = MyFun2(3, 4),
%% Kill all funs.
t_check_process_code1(Code, []).
@@ -174,64 +164,64 @@ t_check_process_code(Config) when is_list(Config) ->
%% The real fun was killed, but we have some fakes which look similar.
t_check_process_code1(Code, Fakes) ->
- ?line MyFun = fun(X, Y) -> X + Y + 1 end, %Confuse things.
- ?line false = erlang:check_process_code(self(), my_code_test),
- ?line 4 = MyFun(1, 2),
+ MyFun = fun(X, Y) -> X + Y + 1 end, %Confuse things.
+ false = erlang:check_process_code(self(), my_code_test),
+ 4 = MyFun(1, 2),
t_check_process_code2(Code, Fakes).
t_check_process_code2(Code, _) ->
- ?line false = erlang:check_process_code(self(), my_code_test),
- ?line true = erlang:purge_module(my_code_test),
+ false = erlang:check_process_code(self(), my_code_test),
+ true = erlang:purge_module(my_code_test),
%% In the next test we will load the same module twice.
- ?line {module,my_code_test} = code:load_abs(Code),
- ?line F = my_code_test:make_fun(37),
- ?line 2 = fun_refc(F),
- ?line false = erlang:check_process_code(self(), my_code_test),
- ?line {module,my_code_test} = code:load_abs(Code),
- ?line 2 = fun_refc(F),
+ {module,my_code_test} = code:load_abs(Code),
+ F = my_code_test:make_fun(37),
+ 2 = fun_refc(F),
+ false = erlang:check_process_code(self(), my_code_test),
+ {module,my_code_test} = code:load_abs(Code),
+ 2 = fun_refc(F),
%% Still false because the fun with the same identify is found
%% in the current code.
- ?line false = erlang:check_process_code(self(), my_code_test),
-
+ false = erlang:check_process_code(self(), my_code_test),
+
%% Some fake funs in the same module should not do any difference.
- ?line false = erlang:check_process_code(self(), my_code_test),
+ false = erlang:check_process_code(self(), my_code_test),
38 = F(1),
t_check_process_code3(Code, F, []).
t_check_process_code3(Code, F, Fakes) ->
Pid = spawn_link(fun() -> body(F, Fakes) end),
- ?line true = erlang:purge_module(my_code_test),
- ?line false = erlang:check_process_code(self(), my_code_test),
- ?line false = erlang:check_process_code(Pid, my_code_test),
+ true = erlang:purge_module(my_code_test),
+ false = erlang:check_process_code(self(), my_code_test),
+ false = erlang:check_process_code(Pid, my_code_test),
- ?line true = erlang:delete_module(my_code_test),
- ?line true = erlang:check_process_code(self(), my_code_test),
- ?line true = erlang:check_process_code(Pid, my_code_test),
+ true = erlang:delete_module(my_code_test),
+ true = erlang:check_process_code(self(), my_code_test),
+ true = erlang:check_process_code(Pid, my_code_test),
39 = F(2),
t_check_process_code4(Code, Pid).
t_check_process_code4(_Code, Pid) ->
Pid ! drop_funs,
receive after 1 -> ok end,
- ?line false = erlang:check_process_code(Pid, my_code_test),
+ false = erlang:check_process_code(Pid, my_code_test),
ok.
body(F, Fakes) ->
receive
- jog ->
- 40 = F(3),
- erlang:garbage_collect(),
- body(F, Fakes);
- drop_funs ->
- dropped_body()
+ jog ->
+ 40 = F(3),
+ erlang:garbage_collect(),
+ body(F, Fakes);
+ drop_funs ->
+ dropped_body()
end.
dropped_body() ->
receive
- X -> exit(X)
+ X -> exit(X)
end.
gc() ->
@@ -239,61 +229,60 @@ gc() ->
gc1().
gc1() -> ok.
-t_check_process_code_ets(doc) ->
- "Test check_process_code/2 in combination with a fun obtained from an ets table.";
+%% Test check_process_code/2 in combination with a fun obtained from an ets table.
t_check_process_code_ets(Config) when is_list(Config) ->
case test_server:is_native(?MODULE) of
- true ->
- {skip,"Native code"};
- false ->
- do_check_process_code_ets(Config)
+ true ->
+ {skip,"Native code"};
+ false ->
+ do_check_process_code_ets(Config)
end.
do_check_process_code_ets(Config) ->
- ?line Priv = ?config(priv_dir, Config),
- ?line Data = ?config(data_dir, Config),
- ?line File = filename:join(Data, "my_code_test"),
-
- ?line erlang:purge_module(my_code_test),
- ?line erlang:delete_module(my_code_test),
- ?line {ok,my_code_test} = c:c(File, [{outdir,Priv}]),
-
- ?line T = ets:new(my_code_test, []),
- ?line ets:insert(T, {7,my_code_test:make_fun(107)}),
- ?line ets:insert(T, {8,my_code_test:make_fun(108)}),
- ?line erlang:delete_module(my_code_test),
- ?line false = erlang:check_process_code(self(), my_code_test),
+ Priv = proplists:get_value(priv_dir, Config),
+ Data = proplists:get_value(data_dir, Config),
+ File = filename:join(Data, "my_code_test"),
+
+ erlang:purge_module(my_code_test),
+ erlang:delete_module(my_code_test),
+ {ok,my_code_test} = c:c(File, [{outdir,Priv}]),
+
+ T = ets:new(my_code_test, []),
+ ets:insert(T, {7,my_code_test:make_fun(107)}),
+ ets:insert(T, {8,my_code_test:make_fun(108)}),
+ erlang:delete_module(my_code_test),
+ false = erlang:check_process_code(self(), my_code_test),
Body = fun() ->
- [{7,F1}] = ets:lookup(T, 7),
- [{8,F2}] = ets:lookup(T, 8),
- IdleLoop = fun() -> receive _X -> ok end end,
- RecLoop = fun(Again) ->
- receive
- call -> 110 = F1(3),
- 100 = F2(-8),
- Again(Again);
- {drop_funs,To} ->
- To ! funs_dropped,
- IdleLoop()
- end
- end,
- true = erlang:check_process_code(self(), my_code_test),
- RecLoop(RecLoop)
- end,
- ?line Pid = spawn_link(Body),
+ [{7,F1}] = ets:lookup(T, 7),
+ [{8,F2}] = ets:lookup(T, 8),
+ IdleLoop = fun() -> receive _X -> ok end end,
+ RecLoop = fun(Again) ->
+ receive
+ call -> 110 = F1(3),
+ 100 = F2(-8),
+ Again(Again);
+ {drop_funs,To} ->
+ To ! funs_dropped,
+ IdleLoop()
+ end
+ end,
+ true = erlang:check_process_code(self(), my_code_test),
+ RecLoop(RecLoop)
+ end,
+ Pid = spawn_link(Body),
receive after 1 -> ok end,
- ?line true = erlang:check_process_code(Pid, my_code_test),
+ true = erlang:check_process_code(Pid, my_code_test),
Pid ! call,
Pid ! {drop_funs,self()},
receive
- funs_dropped -> ok;
- Other -> ?t:fail({unexpected,Other})
+ funs_dropped -> ok;
+ Other -> ct:fail({unexpected,Other})
after 10000 ->
- ?line ?t:fail(no_funs_dropped_answer)
+ ct:fail(no_funs_dropped_answer)
end,
- ?line false = erlang:check_process_code(Pid, my_code_test),
+ false = erlang:check_process_code(Pid, my_code_test),
ok.
fun_refc(F) ->
@@ -303,89 +292,89 @@ fun_refc(F) ->
%% Test the erlang:check_old_code/1 BIF.
t_check_old_code(Config) when is_list(Config) ->
- ?line Data = ?config(data_dir, Config),
- ?line File = filename:join(Data, "my_code_test"),
+ Data = proplists:get_value(data_dir, Config),
+ File = filename:join(Data, "my_code_test"),
+
+ erlang:purge_module(my_code_test),
+ erlang:delete_module(my_code_test),
+ catch erlang:purge_module(my_code_test),
- ?line erlang:purge_module(my_code_test),
- ?line erlang:delete_module(my_code_test),
- ?line catch erlang:purge_module(my_code_test),
+ false = erlang:check_old_code(my_code_test),
- ?line false = erlang:check_old_code(my_code_test),
+ {ok,my_code_test,Code} = compile:file(File, [binary]),
+ {module,my_code_test} = code:load_binary(my_code_test, File, Code),
- ?line {ok,my_code_test,Code} = compile:file(File, [binary]),
- ?line {module,my_code_test} = code:load_binary(my_code_test, File, Code),
-
- ?line false = erlang:check_old_code(my_code_test),
- ?line {module,my_code_test} = code:load_binary(my_code_test, File, Code),
- ?line true = erlang:check_old_code(my_code_test),
+ false = erlang:check_old_code(my_code_test),
+ {module,my_code_test} = code:load_binary(my_code_test, File, Code),
+ true = erlang:check_old_code(my_code_test),
- ?line true = erlang:purge_module(my_code_test),
- ?line true = erlang:delete_module(my_code_test),
- ?line true = erlang:purge_module(my_code_test),
+ true = erlang:purge_module(my_code_test),
+ true = erlang:delete_module(my_code_test),
+ true = erlang:purge_module(my_code_test),
+
+ {'EXIT',_} = (catch erlang:check_old_code([])),
- ?line {'EXIT',_} = (catch erlang:check_old_code([])),
-
ok.
external_fun(Config) when is_list(Config) ->
- ?line false = erlang:function_exported(another_code_test, x, 1),
+ false = erlang:function_exported(another_code_test, x, 1),
AnotherCodeTest = id(another_code_test),
ExtFun = fun AnotherCodeTest:x/1,
- ?line {'EXIT',{undef,_}} = (catch ExtFun(answer)),
- ?line false = erlang:function_exported(another_code_test, x, 1),
- ?line false = lists:member(another_code_test, erlang:loaded()),
- ?line Data = ?config(data_dir, Config),
- ?line File = filename:join(Data, "another_code_test"),
- ?line {ok,another_code_test,Code} = compile:file(File, [binary,report]),
- ?line {module,another_code_test} = erlang:load_module(another_code_test, Code),
- ?line 42 = ExtFun(answer),
+ {'EXIT',{undef,_}} = (catch ExtFun(answer)),
+ false = erlang:function_exported(another_code_test, x, 1),
+ false = lists:member(another_code_test, erlang:loaded()),
+ Data = proplists:get_value(data_dir, Config),
+ File = filename:join(Data, "another_code_test"),
+ {ok,another_code_test,Code} = compile:file(File, [binary,report]),
+ {module,another_code_test} = erlang:load_module(another_code_test, Code),
+ 42 = ExtFun(answer),
ok.
get_chunk(Config) when is_list(Config) ->
- ?line Data = ?config(data_dir, Config),
- ?line File = filename:join(Data, "my_code_test"),
- ?line {ok,my_code_test,Code} = compile:file(File, [binary]),
+ Data = proplists:get_value(data_dir, Config),
+ File = filename:join(Data, "my_code_test"),
+ {ok,my_code_test,Code} = compile:file(File, [binary]),
%% Should work.
- ?line Chunk = get_chunk_ok("Atom", Code),
- ?line Chunk = get_chunk_ok("Atom", make_sub_binary(Code)),
- ?line Chunk = get_chunk_ok("Atom", make_unaligned_sub_binary(Code)),
+ Chunk = get_chunk_ok("Atom", Code),
+ Chunk = get_chunk_ok("Atom", make_sub_binary(Code)),
+ Chunk = get_chunk_ok("Atom", make_unaligned_sub_binary(Code)),
%% Should fail.
- ?line {'EXIT',{badarg,_}} = (catch code:get_chunk(bit_sized_binary(Code), "Atom")),
- ?line {'EXIT',{badarg,_}} = (catch code:get_chunk(Code, "bad chunk id")),
+ {'EXIT',{badarg,_}} = (catch code:get_chunk(bit_sized_binary(Code), "Atom")),
+ {'EXIT',{badarg,_}} = (catch code:get_chunk(Code, "bad chunk id")),
%% Invalid beam code or missing chunk should return 'undefined'.
- ?line undefined = code:get_chunk(<<"not a beam module">>, "Atom"),
- ?line undefined = code:get_chunk(Code, "XXXX"),
+ undefined = code:get_chunk(<<"not a beam module">>, "Atom"),
+ undefined = code:get_chunk(Code, "XXXX"),
ok.
get_chunk_ok(Chunk, Code) ->
case code:get_chunk(Code, Chunk) of
- Bin when is_binary(Bin) -> Bin
+ Bin when is_binary(Bin) -> Bin
end.
module_md5(Config) when is_list(Config) ->
- ?line Data = ?config(data_dir, Config),
- ?line File = filename:join(Data, "my_code_test"),
- ?line {ok,my_code_test,Code} = compile:file(File, [binary]),
+ Data = proplists:get_value(data_dir, Config),
+ File = filename:join(Data, "my_code_test"),
+ {ok,my_code_test,Code} = compile:file(File, [binary]),
%% Should work.
- ?line Chunk = module_md5_ok(Code),
- ?line Chunk = module_md5_ok(make_sub_binary(Code)),
- ?line Chunk = module_md5_ok(make_unaligned_sub_binary(Code)),
+ Chunk = module_md5_ok(Code),
+ Chunk = module_md5_ok(make_sub_binary(Code)),
+ Chunk = module_md5_ok(make_unaligned_sub_binary(Code)),
%% Should fail.
- ?line {'EXIT',{badarg,_}} = (catch code:module_md5(bit_sized_binary(Code))),
+ {'EXIT',{badarg,_}} = (catch code:module_md5(bit_sized_binary(Code))),
%% Invalid beam code should return 'undefined'.
- ?line undefined = code:module_md5(<<"not a beam module">>),
+ undefined = code:module_md5(<<"not a beam module">>),
ok.
-
+
module_md5_ok(Code) ->
case code:module_md5(Code) of
- Bin when is_binary(Bin), size(Bin) =:= 16 -> Bin
+ Bin when is_binary(Bin), size(Bin) =:= 16 -> Bin
end.
@@ -393,106 +382,106 @@ make_stub(Config) when is_list(Config) ->
catch erlang:purge_module(my_code_test),
MD5 = erlang:md5(<<>>),
- ?line Data = ?config(data_dir, Config),
- ?line File = filename:join(Data, "my_code_test"),
- ?line {ok,my_code_test,Code} = compile:file(File, [binary]),
+ Data = proplists:get_value(data_dir, Config),
+ File = filename:join(Data, "my_code_test"),
+ {ok,my_code_test,Code} = compile:file(File, [binary]),
- ?line my_code_test = code:make_stub_module(my_code_test, Code, {[],[],MD5}),
- ?line true = erlang:delete_module(my_code_test),
- ?line true = erlang:purge_module(my_code_test),
+ my_code_test = code:make_stub_module(my_code_test, Code, {[],[],MD5}),
+ true = erlang:delete_module(my_code_test),
+ true = erlang:purge_module(my_code_test),
- ?line my_code_test = code:make_stub_module(my_code_test,
- make_unaligned_sub_binary(Code),
- {[],[],MD5}),
- ?line true = erlang:delete_module(my_code_test),
- ?line true = erlang:purge_module(my_code_test),
+ my_code_test = code:make_stub_module(my_code_test,
+ make_unaligned_sub_binary(Code),
+ {[],[],MD5}),
+ true = erlang:delete_module(my_code_test),
+ true = erlang:purge_module(my_code_test),
- ?line my_code_test = code:make_stub_module(my_code_test, zlib:gzip(Code),
- {[],[],MD5}),
- ?line true = erlang:delete_module(my_code_test),
- ?line true = erlang:purge_module(my_code_test),
+ my_code_test = code:make_stub_module(my_code_test, zlib:gzip(Code),
+ {[],[],MD5}),
+ true = erlang:delete_module(my_code_test),
+ true = erlang:purge_module(my_code_test),
%% Should fail.
- ?line {'EXIT',{badarg,_}} =
- (catch code:make_stub_module(my_code_test, <<"bad">>, {[],[],MD5})),
- ?line {'EXIT',{badarg,_}} =
- (catch code:make_stub_module(my_code_test,
- bit_sized_binary(Code),
- {[],[],MD5})),
- ?line {'EXIT',{badarg,_}} =
- (catch code:make_stub_module(my_code_test_with_wrong_name,
- Code, {[],[],MD5})),
+ {'EXIT',{badarg,_}} =
+ (catch code:make_stub_module(my_code_test, <<"bad">>, {[],[],MD5})),
+ {'EXIT',{badarg,_}} =
+ (catch code:make_stub_module(my_code_test,
+ bit_sized_binary(Code),
+ {[],[],MD5})),
+ {'EXIT',{badarg,_}} =
+ (catch code:make_stub_module(my_code_test_with_wrong_name,
+ Code, {[],[],MD5})),
ok.
make_stub_many_funs(Config) when is_list(Config) ->
catch erlang:purge_module(many_funs),
MD5 = erlang:md5(<<>>),
- ?line Data = ?config(data_dir, Config),
- ?line File = filename:join(Data, "many_funs"),
- ?line {ok,many_funs,Code} = compile:file(File, [binary]),
+ Data = proplists:get_value(data_dir, Config),
+ File = filename:join(Data, "many_funs"),
+ {ok,many_funs,Code} = compile:file(File, [binary]),
- ?line many_funs = code:make_stub_module(many_funs, Code, {[],[],MD5}),
- ?line true = erlang:delete_module(many_funs),
- ?line true = erlang:purge_module(many_funs),
- ?line many_funs = code:make_stub_module(many_funs,
- make_unaligned_sub_binary(Code),
- {[],[],MD5}),
- ?line true = erlang:delete_module(many_funs),
- ?line true = erlang:purge_module(many_funs),
+ many_funs = code:make_stub_module(many_funs, Code, {[],[],MD5}),
+ true = erlang:delete_module(many_funs),
+ true = erlang:purge_module(many_funs),
+ many_funs = code:make_stub_module(many_funs,
+ make_unaligned_sub_binary(Code),
+ {[],[],MD5}),
+ true = erlang:delete_module(many_funs),
+ true = erlang:purge_module(many_funs),
%% Should fail.
- ?line {'EXIT',{badarg,_}} =
- (catch code:make_stub_module(many_funs, <<"bad">>, {[],[],MD5})),
- ?line {'EXIT',{badarg,_}} =
- (catch code:make_stub_module(many_funs,
- bit_sized_binary(Code),
- {[],[],MD5})),
+ {'EXIT',{badarg,_}} =
+ (catch code:make_stub_module(many_funs, <<"bad">>, {[],[],MD5})),
+ {'EXIT',{badarg,_}} =
+ (catch code:make_stub_module(many_funs,
+ bit_sized_binary(Code),
+ {[],[],MD5})),
ok.
constant_pools(Config) when is_list(Config) ->
- ?line Data = ?config(data_dir, Config),
- ?line File = filename:join(Data, "literals"),
- ?line {ok,literals,Code} = compile:file(File, [report,binary]),
- ?line {module,literals} = erlang:load_module(literals,
- make_sub_binary(Code)),
+ Data = proplists:get_value(data_dir, Config),
+ File = filename:join(Data, "literals"),
+ {ok,literals,Code} = compile:file(File, [report,binary]),
+ {module,literals} = erlang:load_module(literals,
+ make_sub_binary(Code)),
%% Initialize.
- ?line A = literals:a(),
- ?line B = literals:b(),
- ?line C = literals:huge_bignum(),
- ?line process_flag(trap_exit, true),
+ A = literals:a(),
+ B = literals:b(),
+ C = literals:huge_bignum(),
+ process_flag(trap_exit, true),
Self = self(),
%% Have a process WITHOUT old heap that references the literals
%% in the 'literals' module.
- ?line NoOldHeap = spawn_link(fun() -> no_old_heap(Self) end),
+ NoOldHeap = spawn_link(fun() -> no_old_heap(Self) end),
receive go -> ok end,
- ?line true = erlang:delete_module(literals),
- ?line false = erlang:check_process_code(NoOldHeap, literals),
- ?line erlang:check_process_code(self(), literals),
- ?line true = erlang:purge_module(literals),
- ?line NoOldHeap ! done,
- ?line receive
- {'EXIT',NoOldHeap,{A,B,C}} ->
- ok;
- Other ->
- ?line ?t:fail({unexpected,Other})
- end,
- ?line {module,literals} = erlang:load_module(literals, Code),
+ true = erlang:delete_module(literals),
+ false = erlang:check_process_code(NoOldHeap, literals),
+ erlang:check_process_code(self(), literals),
+ true = erlang:purge_module(literals),
+ NoOldHeap ! done,
+ receive
+ {'EXIT',NoOldHeap,{A,B,C}} ->
+ ok;
+ Other ->
+ ct:fail({unexpected,Other})
+ end,
+ {module,literals} = erlang:load_module(literals, Code),
%% Have a process WITH an old heap that references the literals
%% in the 'literals' module.
- ?line OldHeap = spawn_link(fun() -> old_heap(Self) end),
+ OldHeap = spawn_link(fun() -> old_heap(Self) end),
receive go -> ok end,
- ?line true = erlang:delete_module(literals),
- ?line false = erlang:check_process_code(OldHeap, literals),
- ?line erlang:check_process_code(self(), literals),
- ?line erlang:purge_module(literals),
- ?line OldHeap ! done,
+ true = erlang:delete_module(literals),
+ false = erlang:check_process_code(OldHeap, literals),
+ erlang:check_process_code(self(), literals),
+ erlang:purge_module(literals),
+ OldHeap ! done,
receive
- {'EXIT',OldHeap,{A,B,C,[1,2,3|_]=Seq}} when length(Seq) =:= 16 ->
- ok
+ {'EXIT',OldHeap,{A,B,C,[1,2,3|_]=Seq}} when length(Seq) =:= 16 ->
+ ok
end.
no_old_heap(Parent) ->
@@ -501,8 +490,8 @@ no_old_heap(Parent) ->
Res = {A,B,literals:huge_bignum()},
Parent ! go,
receive
- done ->
- exit(Res)
+ done ->
+ exit(Res)
end.
old_heap(Parent) ->
@@ -512,16 +501,16 @@ old_heap(Parent) ->
create_old_heap(),
Parent ! go,
receive
- done ->
- exit(Res)
+ done ->
+ exit(Res)
end.
create_old_heap() ->
case process_info(self(), [heap_size,total_heap_size]) of
- [{heap_size,Sz},{total_heap_size,Total}] when Sz < Total ->
- ok;
- _ ->
- create_old_heap()
+ [{heap_size,Sz},{total_heap_size,Total}] when Sz < Total ->
+ ok;
+ _ ->
+ create_old_heap()
end.
constant_refc_binaries(Config) when is_list(Config) ->
@@ -530,7 +519,7 @@ constant_refc_binaries(Config) when is_list(Config) ->
io:format("Binary data (bytes) before test: ~p\n", [Bef]),
%% Compile the the literals module.
- Data = ?config(data_dir, Config),
+ Data = proplists:get_value(data_dir, Config),
File = filename:join(Data, "literals"),
{ok,literals,Code} = compile:file(File, [report,binary]),
@@ -555,29 +544,29 @@ constant_refc_binaries(Config) when is_list(Config) ->
io:format("Binary data (bytes) after test: ~p", [Aft]),
Diff = Aft - Bef,
if
- Diff < 0 ->
- io:format("~p less bytes", [abs(Diff)]);
- Diff > 0 ->
- io:format("~p more bytes", [Diff]);
- true ->
- ok
+ Diff < 0 ->
+ io:format("~p less bytes", [abs(Diff)]);
+ Diff > 0 ->
+ io:format("~p more bytes", [Diff]);
+ true ->
+ ok
end,
%% Test for leaks. We must accept some natural variations in
%% the size of allocated binaries.
if
- Diff > 64*1024 ->
- ?t:fail(binary_leak);
- true ->
- ok
+ Diff > 64*1024 ->
+ ct:fail(binary_leak);
+ true ->
+ ok
end.
memory_binary() ->
try
- erlang:memory(binary)
+ erlang:memory(binary)
catch
- error:notsup ->
- 0
+ error:notsup ->
+ 0
end.
provoke_mem_leak(0, _, _) -> ok;
@@ -587,19 +576,19 @@ provoke_mem_leak(N, Code, Check) ->
%% Create several processes with references to the literal binary.
Self = self(),
Pids = [spawn_link(fun() ->
- create_binaries(Self, NumRefs, Check)
- end) || NumRefs <- lists:seq(1, 10)],
+ create_binaries(Self, NumRefs, Check)
+ end) || NumRefs <- lists:seq(1, 10)],
[receive {started,Pid} -> ok end || Pid <- Pids],
%% Make the code old and remove references to the constant pool
%% in all processes.
true = erlang:delete_module(literals),
Ms = [spawn_monitor(fun() ->
- false = erlang:check_process_code(Pid, literals)
- end) || Pid <- Pids],
+ false = erlang:check_process_code(Pid, literals)
+ end) || Pid <- Pids],
[receive
- {'DOWN',R,process,P,normal} ->
- ok
+ {'DOWN',R,process,P,normal} ->
+ ok
end || {P,R} <- Ms],
%% Purge the code.
@@ -607,14 +596,14 @@ provoke_mem_leak(N, Code, Check) ->
%% Tell the processes that the code has been purged.
[begin
- monitor(process, Pid),
- Pid ! purged
+ monitor(process, Pid),
+ Pid ! purged
end || Pid <- Pids],
%% Wait for all processes to terminate.
[receive
- {'DOWN',_,process,Pid,normal} ->
- ok
+ {'DOWN',_,process,Pid,normal} ->
+ ok
end || Pid <- Pids],
%% We now expect that the binary has been deallocated.
@@ -626,112 +615,112 @@ create_binaries(Parent, NumRefs, Check) ->
{bits,Bits} = literals:bits(),
Parent ! {started,self()},
receive
- purged ->
- %% The code has been purged. Now make sure that
- %% the binaries haven't been corrupted.
- Check = erlang:md5(Bin),
- [Bin = B || B <- Bins],
- <<42:13,Bin/binary>> = Bits,
-
- %% Remove all references to the binaries
- %% Doing it explicitly like this ensures that
- %% the binaries are gone when the parent process
- %% receives the 'DOWN' message.
- erlang:garbage_collect()
+ purged ->
+ %% The code has been purged. Now make sure that
+ %% the binaries haven't been corrupted.
+ Check = erlang:md5(Bin),
+ [Bin = B || B <- Bins],
+ <<42:13,Bin/binary>> = Bits,
+
+ %% Remove all references to the binaries
+ %% Doing it explicitly like this ensures that
+ %% the binaries are gone when the parent process
+ %% receives the 'DOWN' message.
+ erlang:garbage_collect()
end.
wait_for_memory_deallocations() ->
try
- erts_debug:set_internal_state(wait, deallocations)
+ erts_debug:set_internal_state(wait, deallocations)
catch
- error:undef ->
- erts_debug:set_internal_state(available_internal_state, true),
- wait_for_memory_deallocations()
+ error:undef ->
+ erts_debug:set_internal_state(available_internal_state, true),
+ wait_for_memory_deallocations()
end.
%% OTP-7559: c_p->cp could contain garbage and create a false dependency
%% to a module in a process. (Thanks to Richard Carlsson.)
false_dependency(Config) when is_list(Config) ->
- ?line Data = ?config(data_dir, Config),
- ?line File = filename:join(Data, "cpbugx"),
- ?line {ok,cpbugx,Code} = compile:file(File, [binary,report]),
+ Data = proplists:get_value(data_dir, Config),
+ File = filename:join(Data, "cpbugx"),
+ {ok,cpbugx,Code} = compile:file(File, [binary,report]),
do_false_dependency(fun cpbugx:before/0, Code),
do_false_dependency(fun cpbugx:before2/0, Code),
do_false_dependency(fun cpbugx:before3/0, Code),
-%% %% Spawn process. Make sure it has called cpbugx:before/0 and returned.
-%% Parent = self(),
-%% ?line Pid = spawn_link(fun() -> false_dependency_loop(Parent) end),
-%% ?line receive initialized -> ok end,
+ %% %% Spawn process. Make sure it has called cpbugx:before/0 and returned.
+ %% Parent = self(),
+ %% Pid = spawn_link(fun() -> false_dependency_loop(Parent) end),
+ %% receive initialized -> ok end,
+
+ %% %% Reload the module. Make sure the process is still alive.
+ %% {module,cpbugx} = erlang:load_module(cpbugx, Bin),
+ %% io:put_chars(binary_to_list(element(2, process_info(Pid, backtrace)))),
+ %% true = is_process_alive(Pid),
-%% %% Reload the module. Make sure the process is still alive.
-%% ?line {module,cpbugx} = erlang:load_module(cpbugx, Bin),
-%% ?line io:put_chars(binary_to_list(element(2, process_info(Pid, backtrace)))),
-%% ?line true = is_process_alive(Pid),
+ %% %% There should not be any dependency to cpbugx.
+ %% false = erlang:check_process_code(Pid, cpbugx),
-%% %% There should not be any dependency to cpbugx.
-%% ?line false = erlang:check_process_code(Pid, cpbugx),
-
-%% %% Kill the process.
-%% ?line unlink(Pid), exit(Pid, kill),
+ %% %% Kill the process.
+ %% unlink(Pid), exit(Pid, kill),
ok.
do_false_dependency(Init, Code) ->
- ?line {module,cpbugx} = erlang:load_module(cpbugx, Code),
+ {module,cpbugx} = erlang:load_module(cpbugx, Code),
%% Spawn process. Make sure it has the appropriate init function
%% and returned. CP should not contain garbage after the return.
Parent = self(),
- ?line Pid = spawn_link(fun() -> false_dependency_loop(Parent, Init, true) end),
- ?line receive initialized -> ok end,
+ Pid = spawn_link(fun() -> false_dependency_loop(Parent, Init, true) end),
+ receive initialized -> ok end,
%% Reload the module. Make sure the process is still alive.
- ?line {module,cpbugx} = erlang:load_module(cpbugx, Code),
- ?line io:put_chars(binary_to_list(element(2, process_info(Pid, backtrace)))),
- ?line true = is_process_alive(Pid),
+ {module,cpbugx} = erlang:load_module(cpbugx, Code),
+ io:put_chars(binary_to_list(element(2, process_info(Pid, backtrace)))),
+ true = is_process_alive(Pid),
%% There should not be any dependency to cpbugx.
- ?line false = erlang:check_process_code(Pid, cpbugx),
+ false = erlang:check_process_code(Pid, cpbugx),
%% Kill the process and completely unload the code.
- ?line unlink(Pid), exit(Pid, kill),
- ?line true = erlang:purge_module(cpbugx),
- ?line true = erlang:delete_module(cpbugx),
- ?line code:is_module_native(cpbugx), % test is_module_native on deleted code
- ?line true = erlang:purge_module(cpbugx),
- ?line code:is_module_native(cpbugx), % test is_module_native on purged code
+ unlink(Pid), exit(Pid, kill),
+ true = erlang:purge_module(cpbugx),
+ true = erlang:delete_module(cpbugx),
+ code:is_module_native(cpbugx), % test is_module_native on deleted code
+ true = erlang:purge_module(cpbugx),
+ code:is_module_native(cpbugx), % test is_module_native on purged code
ok.
-
+
false_dependency_loop(Parent, Init, SendInitAck) ->
Init(),
case SendInitAck of
- true -> Parent ! initialized;
- false -> void
- %% Just send one init-ack. I guess the point of this test
- %% wasn't to fill parents msg-queue (?). Seen to cause
- %% out-of-mem (on halfword-vm for some reason) by
- %% 91 million msg in queue. /sverker
+ true -> Parent ! initialized;
+ false -> void
+ %% Just send one init-ack. I guess the point of this test
+ %% wasn't to fill parents msg-queue (?). Seen to cause
+ %% out-of-mem (on halfword-vm for some reason) by
+ %% 91 million msg in queue. /sverker
end,
receive
- _ -> false_dependency_loop(Parent, Init, false)
+ _ -> false_dependency_loop(Parent, Init, false)
end.
coverage(Config) when is_list(Config) ->
- ?line code:is_module_native(?MODULE),
- ?line {'EXIT',{badarg,_}} = (catch erlang:purge_module({a,b,c})),
- ?line {'EXIT',{badarg,_}} = (catch code:is_module_native({a,b,c})),
- ?line {'EXIT',{badarg,_}} = (catch erlang:check_process_code(not_a_pid, ?MODULE)),
- ?line {'EXIT',{badarg,_}} = (catch erlang:check_process_code(self(), [not_a_module])),
- ?line {'EXIT',{badarg,_}} = (catch erlang:delete_module([a,b,c])),
- ?line {'EXIT',{badarg,_}} = (catch erlang:module_loaded(42)),
+ code:is_module_native(?MODULE),
+ {'EXIT',{badarg,_}} = (catch erlang:purge_module({a,b,c})),
+ {'EXIT',{badarg,_}} = (catch code:is_module_native({a,b,c})),
+ {'EXIT',{badarg,_}} = (catch erlang:check_process_code(not_a_pid, ?MODULE)),
+ {'EXIT',{badarg,_}} = (catch erlang:check_process_code(self(), [not_a_module])),
+ {'EXIT',{badarg,_}} = (catch erlang:delete_module([a,b,c])),
+ {'EXIT',{badarg,_}} = (catch erlang:module_loaded(42)),
ok.
fun_confusion(Config) when is_list(Config) ->
- Data = ?config(data_dir, Config),
+ Data = proplists:get_value(data_dir, Config),
Src = filename:join(Data, "fun_confusion"),
Mod = fun_confusion,
@@ -757,7 +746,7 @@ compile_load(Mod, Src, Ver) ->
t_copy_literals(Config) when is_list(Config) ->
%% Compile the the literals module.
- Data = ?config(data_dir, Config),
+ Data = proplists:get_value(data_dir, Config),
File = filename:join(Data, "literals"),
{ok,literals,Code} = compile:file(File, [report,binary]),
{module,literals} = erlang:load_module(literals, Code),
@@ -777,6 +766,134 @@ t_copy_literals(Config) when is_list(Config) ->
ok = flush(),
ok.
+-define(mod, t_copy_literals_frags).
+t_copy_literals_frags(Config) when is_list(Config) ->
+ Bin = gen_lit(?mod,[{a,{1,2,3,4,5,6,7}},
+ {b,"hello world"},
+ {c, <<"hello world">>},
+ {d, {"hello world", {1.0, 2.0, <<"some">>, "string"}}},
+ {e, <<"off heap", 0, 1, 2, 3, 4, 5, 6, 7,
+ 8, 9,10,11,12,13,14,15,
+ 0, 1, 2, 3, 4, 5, 6, 7,
+ 8, 9,10,11,12,13,14,15,
+ 0, 1, 2, 3, 4, 5, 6, 7,
+ 8, 9,10,11,12,13,14,15,
+ 0, 1, 2, 3, 4, 5, 6, 7,
+ 8, 9,10,11,12,13,14,15>>}]),
+
+ {module, ?mod} = erlang:load_module(?mod, Bin),
+ N = 6000,
+ Recv = spawn_opt(fun() -> receive
+ read ->
+ io:format("reading"),
+ literal_receiver()
+ end
+ end, [link,{min_heap_size, 10000}]),
+ Switcher = spawn_link(fun() -> literal_switcher() end),
+ Pids = [spawn_opt(fun() -> receive
+ {Pid, go, Recv, N} ->
+ io:format("sender batch (~w) start ~w~n",[N,self()]),
+ literal_sender(N,Recv),
+ Pid ! {self(), ok}
+ end
+ end, [link,{min_heap_size,800}]) || _ <- lists:seq(1,100)],
+ _ = [Pid ! {self(), go, Recv, N} || Pid <- Pids],
+ %% don't read immediately
+ timer:sleep(5),
+ Recv ! read,
+ Switcher ! {switch,?mod,Bin,[Recv|Pids],200},
+ _ = [receive {Pid, ok} -> ok end || Pid <- Pids],
+ Switcher ! {self(), done},
+ receive {Switcher, ok} -> ok end,
+ Recv ! {self(), done},
+ receive {Recv, ok} -> ok end,
+ ok.
+
+literal_receiver() ->
+ receive
+ {Pid, done} ->
+ io:format("reader_done~n"),
+ Pid ! {self(), ok};
+ {_Pid, msg, [A,B,C,D,E]} ->
+ A = ?mod:a(),
+ B = ?mod:b(),
+ C = ?mod:c(),
+ D = ?mod:d(),
+ E = ?mod:e(),
+ literal_receiver();
+ {Pid, sender_confirm} ->
+ io:format("sender confirm ~w~n", [Pid]),
+ Pid ! {self(), ok},
+ literal_receiver()
+ end.
+
+literal_sender(0, Recv) ->
+ Recv ! {self(), sender_confirm},
+ receive {Recv, ok} -> ok end;
+literal_sender(N, Recv) ->
+ Recv ! {self(), msg, [?mod:a(),
+ ?mod:b(),
+ ?mod:c(),
+ ?mod:d(),
+ ?mod:e()]},
+ literal_sender(N - 1, Recv).
+
+literal_switcher() ->
+ receive
+ {switch,Mod,Bin,Pids,Tmo} ->
+ literal_switcher(Mod,Bin,Pids,Tmo)
+ end.
+literal_switcher(Mod,Bin,Pids,Tmo) ->
+ receive
+ {Pid,done} ->
+ Pid ! {self(),ok}
+ after Tmo ->
+ io:format("load module ~w~n", [Mod]),
+ {module, Mod} = erlang:load_module(Mod,Bin),
+ ok = check_and_purge(Pids,Mod),
+ io:format("purge complete ~w~n", [Mod]),
+ literal_switcher(Mod,Bin,Pids,Tmo+Tmo)
+ end.
+
+check_and_purge([],Mod) ->
+ erlang:purge_module(Mod),
+ ok;
+check_and_purge(Pids,Mod) ->
+ io:format("purge ~w~n", [Mod]),
+ Tag = make_ref(),
+ _ = [begin
+ erlang:check_process_code(Pid,Mod,[{async,{Tag,Pid}}])
+ end || Pid <- Pids],
+ Retry = check_and_purge_receive(Pids,Tag,[]),
+ check_and_purge(Retry,Mod).
+
+check_and_purge_receive([Pid|Pids],Tag,Retry) ->
+ receive
+ {check_process_code, {Tag, Pid}, false} ->
+ check_and_purge_receive(Pids,Tag,Retry);
+ {check_process_code, {Tag, Pid}, true} ->
+ check_and_purge_receive(Pids,Tag,[Pid|Retry])
+ end;
+check_and_purge_receive([],_,Retry) ->
+ Retry.
+
+
+gen_lit(Module,Terms) ->
+ FunStrings = [lists:flatten(io_lib:format("~w() -> ~w.~n", [F,Term]))||{F,Term}<-Terms],
+ FunForms = function_forms(FunStrings),
+ Forms = [{attribute,erl_anno:new(1),module,Module},
+ {attribute,erl_anno:new(2),export,[FA || {FA,_} <- FunForms]}] ++
+ [Function || {_, Function} <- FunForms],
+ {ok, Module, Bin} = compile:forms(Forms),
+ Bin.
+
+function_forms([]) -> [];
+function_forms([S|Ss]) ->
+ {ok, Ts,_} = erl_scan:string(S),
+ {ok, Form} = erl_parse:parse_form(Ts),
+ Fun = element(3, Form),
+ Arity = element(4, Form),
+ [{{Fun,Arity}, Form}|function_forms(Ss)].
chase_msg(0, Pid) ->
chase_loop(Pid);
diff --git a/erts/emulator/test/code_SUITE_data/another_code_test.erl b/erts/emulator/test/code_SUITE_data/another_code_test.erl
index f6f9e32996..5708ec682c 100644
--- a/erts/emulator/test/code_SUITE_data/another_code_test.erl
+++ b/erts/emulator/test/code_SUITE_data/another_code_test.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/erts/emulator/test/code_SUITE_data/cpbugx.erl b/erts/emulator/test/code_SUITE_data/cpbugx.erl
index ea01ce411b..ae2075c867 100644
--- a/erts/emulator/test/code_SUITE_data/cpbugx.erl
+++ b/erts/emulator/test/code_SUITE_data/cpbugx.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/erts/emulator/test/code_SUITE_data/fun_confusion.erl b/erts/emulator/test/code_SUITE_data/fun_confusion.erl
index 8d42937d3c..35279f241d 100644
--- a/erts/emulator/test/code_SUITE_data/fun_confusion.erl
+++ b/erts/emulator/test/code_SUITE_data/fun_confusion.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/erts/emulator/test/code_SUITE_data/literals.erl b/erts/emulator/test/code_SUITE_data/literals.erl
index a36bfe09dd..7c3b0ebe73 100644
--- a/erts/emulator/test/code_SUITE_data/literals.erl
+++ b/erts/emulator/test/code_SUITE_data/literals.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/erts/emulator/test/code_SUITE_data/many_funs.erl b/erts/emulator/test/code_SUITE_data/many_funs.erl
index e832f271d0..ada570feee 100644
--- a/erts/emulator/test/code_SUITE_data/many_funs.erl
+++ b/erts/emulator/test/code_SUITE_data/many_funs.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/erts/emulator/test/code_SUITE_data/my_code_test.erl b/erts/emulator/test/code_SUITE_data/my_code_test.erl
index 57d867a5ac..d2386157d6 100644
--- a/erts/emulator/test/code_SUITE_data/my_code_test.erl
+++ b/erts/emulator/test/code_SUITE_data/my_code_test.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/erts/emulator/test/code_SUITE_data/versions.erl b/erts/emulator/test/code_SUITE_data/versions.erl
index 0e2d92c8f1..56407e877a 100644
--- a/erts/emulator/test/code_SUITE_data/versions.erl
+++ b/erts/emulator/test/code_SUITE_data/versions.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/erts/emulator/test/code_parallel_load_SUITE.erl b/erts/emulator/test/code_parallel_load_SUITE.erl
index 3998d27d04..827add71e5 100644
--- a/erts/emulator/test/code_parallel_load_SUITE.erl
+++ b/erts/emulator/test/code_parallel_load_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.
@@ -19,49 +19,34 @@
%%
-module(code_parallel_load_SUITE).
--export([
- all/0,
- suite/0,
- init_per_suite/1,
- end_per_suite/1,
- init_per_testcase/2,
- end_per_testcase/2
- ]).
-
--export([
- multiple_load_check_purge_repeat/1,
- many_load_distributed_only_once/1
- ]).
+-export([all/0,
+ suite/0,
+ init_per_testcase/2,
+ end_per_testcase/2]).
+
+-export([multiple_load_check_purge_repeat/1,
+ many_load_distributed_only_once/1]).
-define(model, code_parallel_load_SUITE_model).
-define(interval, 50).
-define(number_of_processes, 160).
-define(passes, 4).
-
-include_lib("common_test/include/ct.hrl").
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap, {minutes, 4}}].
all() ->
- [
- multiple_load_check_purge_repeat,
- many_load_distributed_only_once
- ].
-
-
-init_per_suite(Config) ->
- Config.
-
-end_per_suite(_Config) ->
- ok.
+ [ multiple_load_check_purge_repeat,
+ many_load_distributed_only_once ].
init_per_testcase(Func, Config) when is_atom(Func), is_list(Config) ->
- Dog=?t:timetrap(?t:minutes(3)),
- [{watchdog, Dog}|Config].
+ Config.
end_per_testcase(_Func, Config) ->
- SConf = ?config(save_config, Config),
+ SConf = proplists:get_value(save_config, Config),
Pids = proplists:get_value(purge_pids, SConf),
case check_old_code(?model) of
@@ -72,9 +57,7 @@ end_per_testcase(_Func, Config) ->
true -> check_and_purge_processes_code(Pids, ?model);
_ -> ok
end,
- Dog=?config(watchdog, Config),
- ?t:timetrap_cancel(Dog).
-
+ ok.
multiple_load_check_purge_repeat(_Conf) ->
Ts = [v1,v2,v3,v4,v5,v6],
diff --git a/erts/emulator/test/crypto_SUITE.erl b/erts/emulator/test/crypto_SUITE.erl
index 41fe6a226c..afb1be7332 100644
--- a/erts/emulator/test/crypto_SUITE.erl
+++ b/erts/emulator/test/crypto_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.
@@ -22,63 +22,42 @@
-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_md5/1,t_md5_update/1,error/1,unaligned_context/1,random_lists/1,
- misc_errors/1]).
+-export([all/0, suite/0,
+ t_md5/1,t_md5_update/1,error/1,unaligned_context/1,random_lists/1,
+ misc_errors/1]).
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]}].
all() ->
[t_md5, t_md5_update, error, unaligned_context,
random_lists, misc_errors].
-groups() ->
- [].
-
-init_per_suite(Config) ->
- Config.
-
-end_per_suite(_Config) ->
- ok.
-
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
-
-
-
-misc_errors(doc) ->
- ["Test crc32, adler32 and md5 error cases not covered by other tests"];
-misc_errors(suite) ->
- [];
+%% Test crc32, adler32 and md5 error cases not covered by other tests"
misc_errors(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:minutes(2)),
- ?line 1 = erlang:adler32([]),
- ?line L = lists:duplicate(600,3),
- ?line 1135871753 = erlang:adler32(L),
- ?line L2 = lists:duplicate(22000,3),
- ?line 1100939744 = erlang:adler32(L2),
- ?line {'EXIT', {badarg,_}} = (catch erlang:adler32(L++[a])),
- ?line {'EXIT', {badarg,_}} = (catch erlang:crc32(L++[a])),
- ?line {'EXIT', {badarg,_}} = (catch erlang:crc32([1,2,3|<<25:7>>])),
- ?line {'EXIT', {badarg,_}} = (catch erlang:crc32([1,2,3|4])),
- ?line Big = 111111111111111111111111111111,
- ?line {'EXIT', {badarg,_}} = (catch erlang:crc32(Big,<<"hej">>)),
- ?line {'EXIT', {badarg,_}} = (catch erlang:crc32(25,[1,2,3|4])),
- ?line {'EXIT', {badarg,_}} = (catch erlang:crc32_combine(Big,3,3)),
- ?line {'EXIT', {badarg,_}} = (catch erlang:crc32_combine(3,Big,3)),
- ?line {'EXIT', {badarg,_}} = (catch erlang:crc32_combine(3,3,Big)),
- ?line {'EXIT', {badarg,_}} = (catch erlang:adler32(Big,<<"hej">>)),
- ?line {'EXIT', {badarg,_}} = (catch erlang:adler32(25,[1,2,3|4])),
- ?line {'EXIT', {badarg,_}} = (catch erlang:adler32_combine(Big,3,3)),
- ?line {'EXIT', {badarg,_}} = (catch erlang:adler32_combine(3,Big,3)),
- ?line {'EXIT', {badarg,_}} = (catch erlang:adler32_combine(3,3,Big)),
- ?line {'EXIT', {badarg,_}} = (catch erlang:md5_update(<<"hej">>,<<"hej">>)),
- ?line {'EXIT', {badarg,_}} = (catch erlang:md5_final(<<"hej">>)),
- ?line test_server:timetrap_cancel(Dog),
+ ct:timetrap({minutes, 2}),
+ 1 = erlang:adler32([]),
+ L = lists:duplicate(600,3),
+ 1135871753 = erlang:adler32(L),
+ L2 = lists:duplicate(22000,3),
+ 1100939744 = erlang:adler32(L2),
+ {'EXIT', {badarg,_}} = (catch erlang:adler32(L++[a])),
+ {'EXIT', {badarg,_}} = (catch erlang:crc32(L++[a])),
+ {'EXIT', {badarg,_}} = (catch erlang:crc32([1,2,3|<<25:7>>])),
+ {'EXIT', {badarg,_}} = (catch erlang:crc32([1,2,3|4])),
+ Big = 111111111111111111111111111111,
+ {'EXIT', {badarg,_}} = (catch erlang:crc32(Big,<<"hej">>)),
+ {'EXIT', {badarg,_}} = (catch erlang:crc32(25,[1,2,3|4])),
+ {'EXIT', {badarg,_}} = (catch erlang:crc32_combine(Big,3,3)),
+ {'EXIT', {badarg,_}} = (catch erlang:crc32_combine(3,Big,3)),
+ {'EXIT', {badarg,_}} = (catch erlang:crc32_combine(3,3,Big)),
+ {'EXIT', {badarg,_}} = (catch erlang:adler32(Big,<<"hej">>)),
+ {'EXIT', {badarg,_}} = (catch erlang:adler32(25,[1,2,3|4])),
+ {'EXIT', {badarg,_}} = (catch erlang:adler32_combine(Big,3,3)),
+ {'EXIT', {badarg,_}} = (catch erlang:adler32_combine(3,Big,3)),
+ {'EXIT', {badarg,_}} = (catch erlang:adler32_combine(3,3,Big)),
+ {'EXIT', {badarg,_}} = (catch erlang:md5_update(<<"hej">>,<<"hej">>)),
+ {'EXIT', {badarg,_}} = (catch erlang:md5_final(<<"hej">>)),
ok.
@@ -93,7 +72,7 @@ nicesplit(N,L) ->
nicesplit(0,Tail,Acc) ->
{lists:reverse(Acc),Tail};
nicesplit(_,[],Acc) ->
- {lists:reverse(Acc),[]};
+ {lists:reverse(Acc),[]};
nicesplit(N,[H|Tail],Acc) ->
nicesplit(N-1,Tail,[H|Acc]).
@@ -102,17 +81,17 @@ run_in_para([],_) ->
run_in_para(FunList,Schedulers) ->
{ThisTime,NextTime} = nicesplit(Schedulers,FunList),
case length(ThisTime) of
- 1 ->
- [{L,Fun}] = ThisTime,
- try
- Fun()
+ 1 ->
+ [{L,Fun}] = ThisTime,
+ try
+ Fun()
catch
- _:Reason ->
- exit({error_at_line,L,Reason})
- end;
+ _:Reason ->
+ exit({error_at_line,L,Reason})
+ end;
_ ->
- These = [ {L,erlang:spawn_monitor(F)} || {L,F} <- ThisTime ],
- collect_workers(These)
+ These = [ {L,erlang:spawn_monitor(F)} || {L,F} <- ThisTime ],
+ collect_workers(These)
end,
run_in_para(NextTime,Schedulers).
@@ -120,159 +99,147 @@ collect_workers([]) ->
ok;
collect_workers([{L,{Pid,Ref}}|T]) ->
receive
- {'DOWN',Ref,process,Pid,normal} ->
- collect_workers(T);
- {'DOWN',Ref,process,Pid,Other} ->
- exit({error_at_line,L,Other})
+ {'DOWN',Ref,process,Pid,normal} ->
+ collect_workers(T);
+ {'DOWN',Ref,process,Pid,Other} ->
+ exit({error_at_line,L,Other})
end.
-random_lists(doc) ->
- ["Test crc32, adler32 and md5 on a number of pseudo-randomly generated "
- "lists."];
-random_lists(suite) ->
- [];
+%% Test crc32, adler32 and md5 on a number of pseudo-randomly generated lists.
random_lists(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:minutes(5)),
- ?line Num = erlang:system_info(schedulers_online),
- ?line B = list_to_binary(
- lists:duplicate(
- (erlang:system_info(context_reductions)*10) - 50,$!)),
- ?line CRC32_1 = fun(L) -> erlang:crc32(L) end,
- ?line CRC32_2 = fun(L) -> ?REF:crc32(L) end,
- ?line ADLER32_1 = fun(L) -> erlang:adler32(L) end,
- ?line ADLER32_2 = fun(L) -> ?REF:adler32(L) end,
- ?line MD5_1 = fun(L) -> erlang:md5(L) end,
- ?line MD5_2 = fun(L) -> ?REF:md5_final(
- ?REF:md5_update(?REF:md5_init(),L)) end,
- ?line MD5_3 = fun(L) -> erlang:md5_final(
- erlang:md5_update(erlang:md5_init(),L)) end,
- ?line CRC32_1_L = fun(L) -> erlang:crc32([B|L]) end,
- ?line CRC32_2_L = fun(L) -> ?REF:crc32([B|L]) end,
- ?line ADLER32_1_L = fun(L) -> erlang:adler32([B|L]) end,
- ?line ADLER32_2_L = fun(L) -> ?REF:adler32([B|L]) end,
- ?line MD5_1_L = fun(L) -> erlang:md5([B|L]) end,
- ?line MD5_2_L = fun(L) -> ?REF:md5_final(
- ?REF:md5_update(?REF:md5_init(),[B|L])) end,
- ?line MD5_3_L = fun(L) -> erlang:md5_final(
- erlang:md5_update(
- erlang:md5_init(),[B|L])) end,
- ?line Wlist0 =
- [{?LINE, fun() -> random_iolist:run(150, CRC32_1, CRC32_2) end},
- {?LINE, fun() -> random_iolist:run(150, ADLER32_1, ADLER32_2) end},
- {?LINE, fun() -> random_iolist:run(150,MD5_1,MD5_2) end},
- {?LINE, fun() -> random_iolist:run(150,MD5_1,MD5_3) end},
- {?LINE, fun() -> random_iolist:run(150, CRC32_1_L, CRC32_2_L) end},
- {?LINE,
- fun() -> random_iolist:run(150, ADLER32_1_L, ADLER32_2_L) end},
- {?LINE, fun() -> random_iolist:run(150,MD5_1_L,MD5_2_L) end},
- {?LINE, fun() -> random_iolist:run(150,MD5_1_L,MD5_3_L) end}],
- ?line run_in_para(Wlist0,Num),
- ?line CRC32_1_2 = fun(L1,L2) -> erlang:crc32([L1,L2]) end,
- ?line CRC32_2_2 = fun(L1,L2) -> erlang:crc32(erlang:crc32(L1),L2) end,
- ?line CRC32_3_2 = fun(L1,L2) -> erlang:crc32_combine(
- erlang:crc32(L1),
- erlang:crc32(L2),
- erlang:iolist_size(L2))
- end,
- ?line ADLER32_1_2 = fun(L1,L2) -> erlang:adler32([L1,L2]) end,
- ?line ADLER32_2_2 = fun(L1,L2) -> erlang:adler32(
- erlang:adler32(L1),L2) end,
- ?line ADLER32_3_2 = fun(L1,L2) -> erlang:adler32_combine(
- erlang:adler32(L1),
- erlang:adler32(L2),
- erlang:iolist_size(L2))
- end,
- ?line MD5_1_2 = fun(L1,L2) -> erlang:md5([L1,L2]) end,
- ?line MD5_2_2 = fun(L1,L2) ->
- erlang:md5_final(
- erlang:md5_update(
- erlang:md5_update(
- erlang:md5_init(),
- L1),
- L2))
- end,
- ?line CRC32_1_L_2 = fun(L1,L2) -> erlang:crc32([[B|L1],[B|L2]]) end,
- ?line CRC32_2_L_2 = fun(L1,L2) -> erlang:crc32(
- erlang:crc32([B|L1]),[B|L2]) end,
- ?line CRC32_3_L_2 = fun(L1,L2) -> erlang:crc32_combine(
- erlang:crc32([B|L1]),
- erlang:crc32([B|L2]),
- erlang:iolist_size([B|L2]))
- end,
- ?line ADLER32_1_L_2 = fun(L1,L2) -> erlang:adler32([[B|L1],[B|L2]]) end,
- ?line ADLER32_2_L_2 = fun(L1,L2) -> erlang:adler32(
- erlang:adler32([B|L1]),
- [B|L2])
- end,
- ?line ADLER32_3_L_2 = fun(L1,L2) -> erlang:adler32_combine(
- erlang:adler32([B|L1]),
- erlang:adler32([B|L2]),
- erlang:iolist_size([B|L2]))
- end,
- ?line MD5_1_L_2 = fun(L1,L2) -> erlang:md5([[B|L1],[B|L2]]) end,
- ?line MD5_2_L_2 = fun(L1,L2) ->
- erlang:md5_final(
- erlang:md5_update(
- erlang:md5_update(
- erlang:md5_init(),
- [B|L1]),
- [B|L2]))
- end,
- ?line Wlist1 =
- [{?LINE, fun() -> random_iolist:run2(150,CRC32_1_2,CRC32_2_2) end},
- {?LINE, fun() -> random_iolist:run2(150,CRC32_1_2,CRC32_3_2) end},
- {?LINE, fun() -> random_iolist:run2(150,ADLER32_1_2,ADLER32_2_2) end},
- {?LINE, fun() -> random_iolist:run2(150,ADLER32_1_2,ADLER32_3_2) end},
- {?LINE, fun() -> random_iolist:run2(150,MD5_1_2,MD5_2_2) end},
- {?LINE, fun() -> random_iolist:run2(150,CRC32_1_L_2,CRC32_2_L_2) end},
- {?LINE, fun() -> random_iolist:run2(150,CRC32_1_L_2,CRC32_3_L_2) end},
- {?LINE,
- fun() -> random_iolist:run2(150,ADLER32_1_L_2,ADLER32_2_L_2) end},
- {?LINE,
- fun() -> random_iolist:run2(150,ADLER32_1_L_2,ADLER32_3_L_2) end},
- {?LINE, fun() -> random_iolist:run2(150,MD5_1_L_2,MD5_2_L_2) end}],
- ?line run_in_para(Wlist1,Num),
- ?line test_server:timetrap_cancel(Dog),
+ ct:timetrap({minutes, 5}),
+ Num = erlang:system_info(schedulers_online),
+ B = list_to_binary(
+ lists:duplicate(
+ (erlang:system_info(context_reductions)*10) - 50,$!)),
+ CRC32_1 = fun(L) -> erlang:crc32(L) end,
+ CRC32_2 = fun(L) -> ?REF:crc32(L) end,
+ ADLER32_1 = fun(L) -> erlang:adler32(L) end,
+ ADLER32_2 = fun(L) -> ?REF:adler32(L) end,
+ MD5_1 = fun(L) -> erlang:md5(L) end,
+ MD5_2 = fun(L) -> ?REF:md5_final(
+ ?REF:md5_update(?REF:md5_init(),L)) end,
+ MD5_3 = fun(L) -> erlang:md5_final(
+ erlang:md5_update(erlang:md5_init(),L)) end,
+ CRC32_1_L = fun(L) -> erlang:crc32([B|L]) end,
+ CRC32_2_L = fun(L) -> ?REF:crc32([B|L]) end,
+ ADLER32_1_L = fun(L) -> erlang:adler32([B|L]) end,
+ ADLER32_2_L = fun(L) -> ?REF:adler32([B|L]) end,
+ MD5_1_L = fun(L) -> erlang:md5([B|L]) end,
+ MD5_2_L = fun(L) -> ?REF:md5_final(
+ ?REF:md5_update(?REF:md5_init(),[B|L])) end,
+ MD5_3_L = fun(L) -> erlang:md5_final(
+ erlang:md5_update(
+ erlang:md5_init(),[B|L])) end,
+ Wlist0 =
+ [{?LINE, fun() -> random_iolist:run(150, CRC32_1, CRC32_2) end},
+ {?LINE, fun() -> random_iolist:run(150, ADLER32_1, ADLER32_2) end},
+ {?LINE, fun() -> random_iolist:run(150,MD5_1,MD5_2) end},
+ {?LINE, fun() -> random_iolist:run(150,MD5_1,MD5_3) end},
+ {?LINE, fun() -> random_iolist:run(150, CRC32_1_L, CRC32_2_L) end},
+ {?LINE,
+ fun() -> random_iolist:run(150, ADLER32_1_L, ADLER32_2_L) end},
+ {?LINE, fun() -> random_iolist:run(150,MD5_1_L,MD5_2_L) end},
+ {?LINE, fun() -> random_iolist:run(150,MD5_1_L,MD5_3_L) end}],
+ run_in_para(Wlist0,Num),
+ CRC32_1_2 = fun(L1,L2) -> erlang:crc32([L1,L2]) end,
+ CRC32_2_2 = fun(L1,L2) -> erlang:crc32(erlang:crc32(L1),L2) end,
+ CRC32_3_2 = fun(L1,L2) -> erlang:crc32_combine(
+ erlang:crc32(L1),
+ erlang:crc32(L2),
+ erlang:iolist_size(L2))
+ end,
+ ADLER32_1_2 = fun(L1,L2) -> erlang:adler32([L1,L2]) end,
+ ADLER32_2_2 = fun(L1,L2) -> erlang:adler32(
+ erlang:adler32(L1),L2) end,
+ ADLER32_3_2 = fun(L1,L2) -> erlang:adler32_combine(
+ erlang:adler32(L1),
+ erlang:adler32(L2),
+ erlang:iolist_size(L2))
+ end,
+ MD5_1_2 = fun(L1,L2) -> erlang:md5([L1,L2]) end,
+ MD5_2_2 = fun(L1,L2) ->
+ erlang:md5_final(
+ erlang:md5_update(
+ erlang:md5_update(
+ erlang:md5_init(),
+ L1),
+ L2))
+ end,
+ CRC32_1_L_2 = fun(L1,L2) -> erlang:crc32([[B|L1],[B|L2]]) end,
+ CRC32_2_L_2 = fun(L1,L2) -> erlang:crc32(
+ erlang:crc32([B|L1]),[B|L2]) end,
+ CRC32_3_L_2 = fun(L1,L2) -> erlang:crc32_combine(
+ erlang:crc32([B|L1]),
+ erlang:crc32([B|L2]),
+ erlang:iolist_size([B|L2]))
+ end,
+ ADLER32_1_L_2 = fun(L1,L2) -> erlang:adler32([[B|L1],[B|L2]]) end,
+ ADLER32_2_L_2 = fun(L1,L2) -> erlang:adler32(
+ erlang:adler32([B|L1]),
+ [B|L2])
+ end,
+ ADLER32_3_L_2 = fun(L1,L2) -> erlang:adler32_combine(
+ erlang:adler32([B|L1]),
+ erlang:adler32([B|L2]),
+ erlang:iolist_size([B|L2]))
+ end,
+ MD5_1_L_2 = fun(L1,L2) -> erlang:md5([[B|L1],[B|L2]]) end,
+ MD5_2_L_2 = fun(L1,L2) ->
+ erlang:md5_final(
+ erlang:md5_update(
+ erlang:md5_update(
+ erlang:md5_init(),
+ [B|L1]),
+ [B|L2]))
+ end,
+ Wlist1 =
+ [{?LINE, fun() -> random_iolist:run2(150,CRC32_1_2,CRC32_2_2) end},
+ {?LINE, fun() -> random_iolist:run2(150,CRC32_1_2,CRC32_3_2) end},
+ {?LINE, fun() -> random_iolist:run2(150,ADLER32_1_2,ADLER32_2_2) end},
+ {?LINE, fun() -> random_iolist:run2(150,ADLER32_1_2,ADLER32_3_2) end},
+ {?LINE, fun() -> random_iolist:run2(150,MD5_1_2,MD5_2_2) end},
+ {?LINE, fun() -> random_iolist:run2(150,CRC32_1_L_2,CRC32_2_L_2) end},
+ {?LINE, fun() -> random_iolist:run2(150,CRC32_1_L_2,CRC32_3_L_2) end},
+ {?LINE,
+ fun() -> random_iolist:run2(150,ADLER32_1_L_2,ADLER32_2_L_2) end},
+ {?LINE,
+ fun() -> random_iolist:run2(150,ADLER32_1_L_2,ADLER32_3_L_2) end},
+ {?LINE, fun() -> random_iolist:run2(150,MD5_1_L_2,MD5_2_L_2) end}],
+ run_in_para(Wlist1,Num),
ok.
-%%
-%%
-t_md5(doc) ->
- ["Generate MD5 message digests and check the result. Examples are "
- "from RFC-1321."];
+%% Generate MD5 message digests and check the result. Examples are from RFC-1321.
t_md5(Config) when is_list(Config) ->
- ?line t_md5_test("", "d41d8cd98f00b204e9800998ecf8427e"),
- ?line t_md5_test("a", "0cc175b9c0f1b6a831c399e269772661"),
- ?line t_md5_test("abc", "900150983cd24fb0d6963f7d28e17f72"),
- ?line t_md5_test(["message ","digest"], "f96b697d7cb7938d525a2f31aaf161d0"),
- ?line t_md5_test(["message ",unaligned_sub_bin(<<"digest">>)],
- "f96b697d7cb7938d525a2f31aaf161d0"),
- ?line t_md5_test("abcdefghijklmnopqrstuvwxyz",
- "c3fcd3d76192e4007dfb496cca67e13b"),
- ?line t_md5_test("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
- "0123456789",
- "d174ab98d277d9f5a5611c2c9f419d9f"),
- ?line t_md5_test("12345678901234567890123456789012345678901234567890"
- "123456789012345678901234567890",
- "57edf4a22be3c955ac49da2e2107b67a"),
+ t_md5_test("", "d41d8cd98f00b204e9800998ecf8427e"),
+ t_md5_test("a", "0cc175b9c0f1b6a831c399e269772661"),
+ t_md5_test("abc", "900150983cd24fb0d6963f7d28e17f72"),
+ t_md5_test(["message ","digest"], "f96b697d7cb7938d525a2f31aaf161d0"),
+ t_md5_test(["message ",unaligned_sub_bin(<<"digest">>)],
+ "f96b697d7cb7938d525a2f31aaf161d0"),
+ t_md5_test("abcdefghijklmnopqrstuvwxyz",
+ "c3fcd3d76192e4007dfb496cca67e13b"),
+ t_md5_test("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
+ "0123456789",
+ "d174ab98d277d9f5a5611c2c9f419d9f"),
+ t_md5_test("12345678901234567890123456789012345678901234567890"
+ "123456789012345678901234567890",
+ "57edf4a22be3c955ac49da2e2107b67a"),
ok.
-%%
-%%
-t_md5_update(doc) ->
- ["Generate MD5 message using md5_init, md5_update, and md5_final, and"
- "check the result. Examples are from RFC-1321."];
+%% Generate MD5 message using md5_init, md5_update, and md5_final, and
+%% check the result. Examples are from RFC-1321.
t_md5_update(Config) when is_list(Config) ->
- ?line t_md5_update_1(fun(Str) -> Str end),
- ?line t_md5_update_1(fun(Str) -> list_to_binary(Str) end),
- ?line t_md5_update_1(fun(Str) -> unaligned_sub_bin(list_to_binary(Str)) end),
+ t_md5_update_1(fun(Str) -> Str end),
+ t_md5_update_1(fun(Str) -> list_to_binary(Str) end),
+ t_md5_update_1(fun(Str) -> unaligned_sub_bin(list_to_binary(Str)) end),
ok.
t_md5_update_1(Tr) when is_function(Tr, 1) ->
Ctx = erlang:md5_init(),
Ctx1 = erlang:md5_update(Ctx, Tr("ABCDEFGHIJKLMNOPQRSTUVWXYZ")),
Ctx2 = erlang:md5_update(Ctx1, Tr("abcdefghijklmnopqrstuvwxyz"
- "0123456789")),
+ "0123456789")),
m(erlang:md5_final(Ctx2),
hexstr2bin("d174ab98d277d9f5a5611c2c9f419d9f")),
ok.
@@ -280,28 +247,28 @@ t_md5_update_1(Tr) when is_function(Tr, 1) ->
%%
%%
error(Config) when is_list(Config) ->
- ?line {'EXIT',{badarg,_}} = (catch erlang:md5(bit_sized_binary(<<"abc">>))),
- ?line Ctx0 = erlang:md5_init(),
- ?line {'EXIT',{badarg,_}} =
- (catch erlang:md5_update(Ctx0, bit_sized_binary(<<"abcfjldjd">>))),
- ?line {'EXIT',{badarg,_}} =
- (catch erlang:md5_update(Ctx0, ["something",bit_sized_binary(<<"abcfjldjd">>)])),
- ?line {'EXIT',{badarg,_}} =
- (catch erlang:md5_update(bit_sized_binary(Ctx0), "something")),
- ?line {'EXIT',{badarg,_}} = (catch erlang:md5_final(bit_sized_binary(Ctx0))),
- ?line m(erlang:md5_final(Ctx0), hexstr2bin("d41d8cd98f00b204e9800998ecf8427e")),
+ {'EXIT',{badarg,_}} = (catch erlang:md5(bit_sized_binary(<<"abc">>))),
+ Ctx0 = erlang:md5_init(),
+ {'EXIT',{badarg,_}} =
+ (catch erlang:md5_update(Ctx0, bit_sized_binary(<<"abcfjldjd">>))),
+ {'EXIT',{badarg,_}} =
+ (catch erlang:md5_update(Ctx0, ["something",bit_sized_binary(<<"abcfjldjd">>)])),
+ {'EXIT',{badarg,_}} =
+ (catch erlang:md5_update(bit_sized_binary(Ctx0), "something")),
+ {'EXIT',{badarg,_}} = (catch erlang:md5_final(bit_sized_binary(Ctx0))),
+ m(erlang:md5_final(Ctx0), hexstr2bin("d41d8cd98f00b204e9800998ecf8427e")),
ok.
%%
%%
unaligned_context(Config) when is_list(Config) ->
- ?line Ctx0 = erlang:md5_init(),
- ?line Ctx1 = erlang:md5_update(unaligned_sub_bin(Ctx0), "ABCDEFGHIJKLMNOPQRSTUVWXYZ"),
- ?line Ctx = erlang:md5_update(unaligned_sub_bin(Ctx1),
- "abcdefghijklmnopqrstuvwxyz0123456789"),
- ?line m(erlang:md5_final(unaligned_sub_bin(Ctx)),
- hexstr2bin("d174ab98d277d9f5a5611c2c9f419d9f")),
+ Ctx0 = erlang:md5_init(),
+ Ctx1 = erlang:md5_update(unaligned_sub_bin(Ctx0), "ABCDEFGHIJKLMNOPQRSTUVWXYZ"),
+ Ctx = erlang:md5_update(unaligned_sub_bin(Ctx1),
+ "abcdefghijklmnopqrstuvwxyz0123456789"),
+ m(erlang:md5_final(unaligned_sub_bin(Ctx)),
+ hexstr2bin("d174ab98d277d9f5a5611c2c9f419d9f")),
ok.
%%
@@ -347,5 +314,3 @@ bit_sized_binary(Bin0) ->
Bin.
id(I) -> I.
-
-
diff --git a/erts/emulator/test/crypto_reference.erl b/erts/emulator/test/crypto_reference.erl
index 7797eacd75..950b0c1560 100644
--- a/erts/emulator/test/crypto_reference.erl
+++ b/erts/emulator/test/crypto_reference.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/erts/emulator/test/ddll_SUITE.erl b/erts/emulator/test/ddll_SUITE.erl
index 7ff727bcf5..93b6f2d956 100644
--- a/erts/emulator/test/ddll_SUITE.erl
+++ b/erts/emulator/test/ddll_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.
@@ -31,21 +31,20 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
- init_per_group/2,end_per_group/2, ddll_test/1, errors/1,
- reference_count/1,
- kill_port/1, dont_kill_port/1]).
+-export([all/0, suite/0,
+ ddll_test/1, errors/1, reference_count/1,
+ kill_port/1, dont_kill_port/1]).
-export([unload_on_process_exit/1, delayed_unload_with_ports/1,
- unload_due_to_process_exit/1,
- no_unload_due_to_process_exit/1, no_unload_due_to_process_exit_2/1,
- unload_reload_thingie/1, unload_reload_thingie_2/1,
- unload_reload_thingie_3/1, reload_pending/1, reload_pending_kill/1,
- load_fail_init/1,
- reload_pending_fail_init/1,
- more_error_codes/1, forced_port_killing/1,
- no_trap_exit_and_kill_ports/1,
- monitor_demonitor/1, monitor_demonitor_load/1, new_interface/1,
- lock_driver/1]).
+ unload_due_to_process_exit/1,
+ no_unload_due_to_process_exit/1, no_unload_due_to_process_exit_2/1,
+ unload_reload_thingie/1, unload_reload_thingie_2/1,
+ unload_reload_thingie_3/1, reload_pending/1, reload_pending_kill/1,
+ load_fail_init/1,
+ reload_pending_fail_init/1,
+ more_error_codes/1, forced_port_killing/1,
+ no_trap_exit_and_kill_ports/1,
+ monitor_demonitor/1, monitor_demonitor_load/1, new_interface/1,
+ lock_driver/1]).
% Private exports
-export([echo_loader/2, nice_echo_loader/2 ,properties/1, load_and_unload/1]).
@@ -54,7 +53,9 @@
-include_lib("common_test/include/ct.hrl").
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap, {seconds, 10}}].
all() ->
[ddll_test, errors, reference_count, kill_port,
@@ -70,1057 +71,931 @@ all() ->
no_trap_exit_and_kill_ports, monitor_demonitor,
monitor_demonitor_load, new_interface, lock_driver].
-groups() ->
- [].
-
-init_per_suite(Config) ->
- Config.
-
-end_per_suite(_Config) ->
- ok.
-
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
-
-
-unload_on_process_exit(suite) ->
- [];
-unload_on_process_exit(doc) ->
- ["Check that the driver is unloaded on process exit"];
+%% Check that the driver is unloaded on process exit
unload_on_process_exit(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(10)),
- ?line Path = ?config(data_dir, Config),
- ?line false = lists:member("echo_drv",element(2,erl_ddll:loaded_drivers())),
+ Path = proplists:get_value(data_dir, Config),
+ false = lists:member("echo_drv",element(2,erl_ddll:loaded_drivers())),
Parent = self(),
- ?line Pid = spawn(fun() ->
- receive go -> ok end,
- erl_ddll:try_load(Path, echo_drv, []),
- Parent ! gone,
- receive go -> ok end,
- erl_ddll:loaded_drivers(),
- exit(banan)
- end),
- ?line Ref = erlang:monitor(process,Pid),
- ?line false = lists:member("echo_drv",element(2,erl_ddll:loaded_drivers())),
+ Pid = spawn(fun() ->
+ receive go -> ok end,
+ erl_ddll:try_load(Path, echo_drv, []),
+ Parent ! gone,
+ receive go -> ok end,
+ erl_ddll:loaded_drivers(),
+ exit(banan)
+ end),
+ Ref = erlang:monitor(process,Pid),
+ false = lists:member("echo_drv",element(2,erl_ddll:loaded_drivers())),
Pid ! go,
- ?line receive
- gone -> ok
+ receive
+ gone -> ok
end,
- ?line true = lists:member("echo_drv",element(2,erl_ddll:loaded_drivers())),
+ true = lists:member("echo_drv",element(2,erl_ddll:loaded_drivers())),
Pid ! go,
- ?line receive
- {'DOWN', Ref, process, Pid, banan} ->
- ok
+ receive
+ {'DOWN', Ref, process, Pid, banan} ->
+ ok
end,
receive after 500 -> ok end,
- ?line false = lists:member("echo_drv",element(2,erl_ddll:loaded_drivers())),
- ?line test_server:timetrap_cancel(Dog),
+ false = lists:member("echo_drv",element(2,erl_ddll:loaded_drivers())),
ok.
-delayed_unload_with_ports(suite) ->
- [];
-delayed_unload_with_ports(doc) ->
- ["Check that the driver is unloaded when the last port is closed"];
+%% Check that the driver is unloaded when the last port is closed
delayed_unload_with_ports(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(10)),
- ?line Path = ?config(data_dir, Config),
- ?line erl_ddll:try_load(Path, echo_drv, []),
- ?line erl_ddll:try_load(Path, echo_drv, []),
- ?line Port = open_port({spawn, echo_drv}, [eof]),
- ?line 1 = erl_ddll:info(echo_drv, port_count),
- ?line Port2 = open_port({spawn, echo_drv}, [eof]),
- ?line 2 = erl_ddll:info(echo_drv, port_count),
- ?line {ok,pending_process} = erl_ddll:try_unload(echo_drv,[{monitor, pending_driver}]),
- ?line {ok,pending_driver,Ref} = erl_ddll:try_unload(echo_drv,[{monitor, pending_driver}]),
- ?line ok = receive _ -> false after 0 -> ok end,
- ?line Port ! {self(), close},
- ?line ok = receive {Port,closed} -> ok after 1000 -> false end,
- ?line 1 = erl_ddll:info(echo_drv, port_count),
- ?line Port2 ! {self(), close},
- ?line ok = receive {Port2,closed} -> ok after 1000 -> false end,
- ?line ok = receive {'DOWN', Ref, driver, echo_drv, unloaded} -> ok after 1000 -> false end,
- ?line test_server:timetrap_cancel(Dog),
+ Path = proplists:get_value(data_dir, Config),
+ erl_ddll:try_load(Path, echo_drv, []),
+ erl_ddll:try_load(Path, echo_drv, []),
+ Port = open_port({spawn, echo_drv}, [eof]),
+ 1 = erl_ddll:info(echo_drv, port_count),
+ Port2 = open_port({spawn, echo_drv}, [eof]),
+ 2 = erl_ddll:info(echo_drv, port_count),
+ {ok,pending_process} = erl_ddll:try_unload(echo_drv,[{monitor, pending_driver}]),
+ {ok,pending_driver,Ref} = erl_ddll:try_unload(echo_drv,[{monitor, pending_driver}]),
+ ok = receive _ -> false after 0 -> ok end,
+ Port ! {self(), close},
+ ok = receive {Port,closed} -> ok after 1000 -> false end,
+ 1 = erl_ddll:info(echo_drv, port_count),
+ Port2 ! {self(), close},
+ ok = receive {Port2,closed} -> ok after 1000 -> false end,
+ ok = receive {'DOWN', Ref, driver, echo_drv, unloaded} -> ok after 1000 -> false end,
ok.
-unload_due_to_process_exit(suite) ->
- [];
-unload_due_to_process_exit(doc) ->
- ["Check that the driver with ports is unloaded on process exit"];
+%% Check that the driver with ports is unloaded on process exit
unload_due_to_process_exit(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(10)),
- ?line Path = ?config(data_dir, Config),
- ?line Parent = self(),
- ?line F3 = fun() ->
- Parent ! erl_ddll:monitor(driver,{echo_drv,unloaded}),
- receive X -> Parent ! {got,X} end
- end,
- ?line Pid = spawn(fun() ->
- receive go -> ok end,
- {ok, loaded} = erl_ddll:try_load(Path, echo_drv, []),
- spawn(F3),
- receive go -> ok end,
- _Port = open_port({spawn, echo_drv}, [eof]),
- _Port2 = open_port({spawn, echo_drv}, [eof]),
- exit(banan)
- end),
- ?line Ref = erlang:monitor(process,Pid),
+ Path = proplists:get_value(data_dir, Config),
+ Parent = self(),
+ F3 = fun() ->
+ Parent ! erl_ddll:monitor(driver,{echo_drv,unloaded}),
+ receive X -> Parent ! {got,X} end
+ end,
+ Pid = spawn(fun() ->
+ receive go -> ok end,
+ {ok, loaded} = erl_ddll:try_load(Path, echo_drv, []),
+ spawn(F3),
+ receive go -> ok end,
+ _Port = open_port({spawn, echo_drv}, [eof]),
+ _Port2 = open_port({spawn, echo_drv}, [eof]),
+ exit(banan)
+ end),
+ Ref = erlang:monitor(process,Pid),
Pid ! go,
- ?line {ok,Ref2} = receive
- R when is_reference(R) -> {ok,R};
- Other -> {error, Other}
- after 500 -> {error, timeout}
- end,
+ {ok,Ref2} = receive
+ R when is_reference(R) -> {ok,R};
+ Other -> {error, Other}
+ after 500 -> {error, timeout}
+ end,
Pid ! go,
- ?line ok = receive {'DOWN', Ref, process, Pid, banan} -> ok after 300 -> error end,
- ?line ok = receive {got,{'DOWN', Ref2, driver, echo_drv, unloaded}} -> ok after 300 -> error end,
- ?line test_server:timetrap_cancel(Dog),
+ ok = receive {'DOWN', Ref, process, Pid, banan} -> ok after 300 -> error end,
+ ok = receive {got,{'DOWN', Ref2, driver, echo_drv, unloaded}} -> ok after 300 -> error end,
ok.
-no_unload_due_to_process_exit(suite) ->
- [];
-no_unload_due_to_process_exit(doc) ->
- ["Check that a driver with driver loaded in another process is not unloaded on process exit"];
+%% Check that a driver with driver loaded in another process is not unloaded on process exit
no_unload_due_to_process_exit(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(10)),
- ?line Path = ?config(data_dir, Config),
- ?line Parent = self(),
- ?line F3 = fun() ->
- Parent ! erl_ddll:monitor(driver,{echo_drv,unloaded}),
- receive X -> Parent ! {got,X} end
- end,
- ?line Pid = spawn(fun() ->
- receive go -> ok end,
- {ok, loaded} = erl_ddll:try_load(Path, echo_drv, []),
- spawn(F3),
- receive go -> ok end,
- _Port = open_port({spawn, echo_drv}, [eof]),
- _Port2 = open_port({spawn, echo_drv}, [eof]),
- exit(banan)
- end),
- ?line Ref = erlang:monitor(process,Pid),
+ Path = proplists:get_value(data_dir, Config),
+ Parent = self(),
+ F3 = fun() ->
+ Parent ! erl_ddll:monitor(driver,{echo_drv,unloaded}),
+ receive X -> Parent ! {got,X} end
+ end,
+ Pid = spawn(fun() ->
+ receive go -> ok end,
+ {ok, loaded} = erl_ddll:try_load(Path, echo_drv, []),
+ spawn(F3),
+ receive go -> ok end,
+ _Port = open_port({spawn, echo_drv}, [eof]),
+ _Port2 = open_port({spawn, echo_drv}, [eof]),
+ exit(banan)
+ end),
+ Ref = erlang:monitor(process,Pid),
Pid ! go,
- ?line {ok,Ref2} = receive
- R when is_reference(R) -> {ok,R};
- Other -> {error, Other}
- after 500 -> {error, timeout}
- end,
- ?line {ok, already_loaded} = erl_ddll:try_load(Path, echo_drv, []),
+ {ok,Ref2} = receive
+ R when is_reference(R) -> {ok,R};
+ Other -> {error, Other}
+ after 500 -> {error, timeout}
+ end,
+ {ok, already_loaded} = erl_ddll:try_load(Path, echo_drv, []),
Pid ! go,
- ?line ok = receive {'DOWN', Ref, process, Pid, banan} -> ok after 300 -> error end,
- ?line ok = receive X -> {error, X} after 300 -> ok end,
- ?line ok = unload_expect_fast(echo_drv,[]),
- ?line ok = receive {got,{'DOWN', Ref2, driver, echo_drv, unloaded}} -> ok after 300 -> error end,
- ?line test_server:timetrap_cancel(Dog),
+ ok = receive {'DOWN', Ref, process, Pid, banan} -> ok after 300 -> error end,
+ ok = receive X -> {error, X} after 300 -> ok end,
+ ok = unload_expect_fast(echo_drv,[]),
+ ok = receive {got,{'DOWN', Ref2, driver, echo_drv, unloaded}} -> ok after 300 -> error end,
ok.
-no_unload_due_to_process_exit_2(suite) ->
- [];
-no_unload_due_to_process_exit_2(doc) ->
- ["Check that a driver with open ports in another process is not unloaded on process exit"];
+%% Check that a driver with open ports in another process is not unloaded on process exit
no_unload_due_to_process_exit_2(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(10)),
- ?line Path = ?config(data_dir, Config),
- ?line Parent = self(),
- ?line F3 = fun() ->
- Parent ! erl_ddll:monitor(driver,{echo_drv,unloaded}),
- receive X -> Parent ! {got,X} end
- end,
- ?line Pid = spawn(fun() ->
- receive go -> ok end,
- {ok, loaded} = erl_ddll:try_load(Path, echo_drv, []),
- spawn(F3),
- receive go -> ok end,
- _Port = open_port({spawn, echo_drv}, [eof]),
- _Port2 = open_port({spawn, echo_drv}, [eof]),
- exit(banan)
- end),
- ?line Ref = erlang:monitor(process,Pid),
+ Path = proplists:get_value(data_dir, Config),
+ Parent = self(),
+ F3 = fun() ->
+ Parent ! erl_ddll:monitor(driver,{echo_drv,unloaded}),
+ receive X -> Parent ! {got,X} end
+ end,
+ Pid = spawn(fun() ->
+ receive go -> ok end,
+ {ok, loaded} = erl_ddll:try_load(Path, echo_drv, []),
+ spawn(F3),
+ receive go -> ok end,
+ _Port = open_port({spawn, echo_drv}, [eof]),
+ _Port2 = open_port({spawn, echo_drv}, [eof]),
+ exit(banan)
+ end),
+ Ref = erlang:monitor(process,Pid),
Pid ! go,
- ?line {ok,Ref2} = receive
- R when is_reference(R) -> {ok,R};
- Other -> {error, Other}
- after 500 -> {error, timeout}
- end,
- ?line Port = open_port({spawn, echo_drv}, [eof]),
+ {ok,Ref2} = receive
+ R when is_reference(R) -> {ok,R};
+ Other -> {error, Other}
+ after 500 -> {error, timeout}
+ end,
+ Port = open_port({spawn, echo_drv}, [eof]),
Pid ! go,
- ?line ok = receive {'DOWN', Ref, process, Pid, banan} -> ok after 300 -> error end,
- ?line ok = receive X -> {error, X} after 300 -> ok end,
- ?line erlang:port_close(Port),
- ?line ok = receive {got,{'DOWN', Ref2, driver, echo_drv, unloaded}} -> ok after 300 -> error end,
- ?line test_server:timetrap_cancel(Dog),
+ ok = receive {'DOWN', Ref, process, Pid, banan} -> ok after 300 -> error end,
+ ok = receive X -> {error, X} after 300 -> ok end,
+ erlang:port_close(Port),
+ ok = receive {got,{'DOWN', Ref2, driver, echo_drv, unloaded}} -> ok after 300 -> error end,
ok.
-unload_reload_thingie(suite) ->
- [];
-unload_reload_thingie(doc) ->
- ["Check delayed unload and reload"];
+%% Check delayed unload and reload
unload_reload_thingie(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(10)),
- ?line Path = ?config(data_dir, Config),
- ?line Parent = self(),
- ?line {ok, loaded} = erl_ddll:try_load(Path, echo_drv, []),
- ?line F3 = fun() ->
- Parent ! erl_ddll:monitor(driver,{echo_drv,unloaded_only}),
- receive X -> Parent ! {got,X} end
- end,
- ?line Pid = spawn(fun() ->
- receive go -> ok end,
- _Port = open_port({spawn, echo_drv}, [eof]),
- spawn(F3),
- receive go -> ok end,
- exit(banan)
- end),
- ?line Ref = erlang:monitor(process,Pid),
+ Path = proplists:get_value(data_dir, Config),
+ Parent = self(),
+ {ok, loaded} = erl_ddll:try_load(Path, echo_drv, []),
+ F3 = fun() ->
+ Parent ! erl_ddll:monitor(driver,{echo_drv,unloaded_only}),
+ receive X -> Parent ! {got,X} end
+ end,
+ Pid = spawn(fun() ->
+ receive go -> ok end,
+ _Port = open_port({spawn, echo_drv}, [eof]),
+ spawn(F3),
+ receive go -> ok end,
+ exit(banan)
+ end),
+ Ref = erlang:monitor(process,Pid),
+ Pid ! go,
+ {ok,Ref2} = receive
+ R when is_reference(R) -> {ok,R};
+ Other -> {error, Other}
+ after 500 -> {error, timeout}
+ end,
+ {ok,pending_driver,Ref3} = erl_ddll:try_unload(echo_drv,[{monitor,pending}]),
+ Ref4 = erl_ddll:monitor(driver,{echo_drv,loaded}),
+ ok = receive {'DOWN',Ref4, driver,echo_drv,load_cancelled} -> ok after 1000 -> false end,
+ {ok,already_loaded} = erl_ddll:try_load(Path, echo_drv, []),
+ ok = receive {'UP',Ref3, driver,echo_drv,unload_cancelled} -> ok after 1000 -> false end,
Pid ! go,
- ?line {ok,Ref2} = receive
- R when is_reference(R) -> {ok,R};
- Other -> {error, Other}
- after 500 -> {error, timeout}
- end,
- ?line {ok,pending_driver,Ref3} = erl_ddll:try_unload(echo_drv,[{monitor,pending}]),
- ?line Ref4 = erl_ddll:monitor(driver,{echo_drv,loaded}),
- ?line ok = receive {'DOWN',Ref4, driver,echo_drv,load_cancelled} -> ok after 1000 -> false end,
- ?line {ok,already_loaded} = erl_ddll:try_load(Path, echo_drv, []),
- ?line ok = receive {'UP',Ref3, driver,echo_drv,unload_cancelled} -> ok after 1000 -> false end,
- ?line Pid ! go,
- ?line ok = receive {'DOWN', Ref, process, Pid, banan} -> ok after 300 -> error end,
- ?line [{Parent,1}] = erl_ddll:info(echo_drv, processes),
- ?line 0 = erl_ddll:info(echo_drv, port_count),
- ?line ok = unload_expect_fast(echo_drv,[{monitor,pending}]),
- ?line ok = receive
- {got,{'DOWN', Ref2, driver, echo_drv, unloaded}} -> ok
- after 300 -> error
- end,
- ?line ok = receive X -> {error, X} after 300 -> ok end,
- ?line test_server:timetrap_cancel(Dog),
+ ok = receive {'DOWN', Ref, process, Pid, banan} -> ok after 300 -> error end,
+ [{Parent,1}] = erl_ddll:info(echo_drv, processes),
+ 0 = erl_ddll:info(echo_drv, port_count),
+ ok = unload_expect_fast(echo_drv,[{monitor,pending}]),
+ ok = receive
+ {got,{'DOWN', Ref2, driver, echo_drv, unloaded}} -> ok
+ after 300 -> error
+ end,
+ ok = receive X -> {error, X} after 300 -> ok end,
ok.
-unload_reload_thingie_2(suite) ->
- [];
-unload_reload_thingie_2(doc) ->
- ["Check delayed unload and reload"];
+%% Check delayed unload and reload
unload_reload_thingie_2(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(10)),
- ?line Path = ?config(data_dir, Config),
- ?line Parent = self(),
- ?line {ok, loaded} = erl_ddll:try_load(Path, echo_drv, []),
- ?line F3 = fun() ->
- Parent ! erl_ddll:monitor(driver,{echo_drv,unloaded_only}),
- receive X -> Parent ! {got,X} end
- end,
- ?line Pid = spawn(fun() ->
- receive go -> ok end,
- _Port = open_port({spawn, echo_drv}, [eof]),
- spawn(F3),
- receive go -> ok end,
- exit(banan)
- end),
- ?line Ref = erlang:monitor(process,Pid),
+ Path = proplists:get_value(data_dir, Config),
+ Parent = self(),
+ {ok, loaded} = erl_ddll:try_load(Path, echo_drv, []),
+ F3 = fun() ->
+ Parent ! erl_ddll:monitor(driver,{echo_drv,unloaded_only}),
+ receive X -> Parent ! {got,X} end
+ end,
+ Pid = spawn(fun() ->
+ receive go -> ok end,
+ _Port = open_port({spawn, echo_drv}, [eof]),
+ spawn(F3),
+ receive go -> ok end,
+ exit(banan)
+ end),
+ Ref = erlang:monitor(process,Pid),
+ Pid ! go,
+ {ok,Ref2} = receive
+ R when is_reference(R) -> {ok,R};
+ Other -> {error, Other}
+ after 500 -> {error, timeout}
+ end,
+ {ok,pending_driver,Ref3} = erl_ddll:try_load(Path, echo_drv,
+ [{monitor,pending_driver},{reload,pending_driver}]),
+ Ref4 = erl_ddll:monitor(driver,{echo_drv,unloaded}),
Pid ! go,
- ?line {ok,Ref2} = receive
- R when is_reference(R) -> {ok,R};
- Other -> {error, Other}
- after 500 -> {error, timeout}
- end,
- ?line {ok,pending_driver,Ref3} = erl_ddll:try_load(Path,echo_drv,[{monitor,pending_driver},{reload,pending_driver}]),
- ?line Ref4 = erl_ddll:monitor(driver,{echo_drv,unloaded}),
- ?line Pid ! go,
- ?line ok = receive {'DOWN', Ref, process, Pid, banan} -> ok after 300 -> error end,
- ?line ok = receive {'DOWN',Ref4, driver,echo_drv,unloaded} -> ok after 1000 -> false end,
- ?line ok = receive {'UP',Ref3, driver,echo_drv,loaded} -> ok after 1000 -> false end,
- ?line [{Parent,1}] = erl_ddll:info(echo_drv, processes),
- ?line 0 = erl_ddll:info(echo_drv, port_count),
- ?line ok = receive
- {got,{'DOWN', Ref2, driver, echo_drv, unloaded}} -> ok
- after 300 -> error
- end,
- ?line ok = unload_expect_fast(echo_drv,[{monitor,pending}]),
- ?line ok = receive X -> {error, X} after 300 -> ok end,
- ?line test_server:timetrap_cancel(Dog),
+ ok = receive {'DOWN', Ref, process, Pid, banan} -> ok after 300 -> error end,
+ ok = receive {'DOWN',Ref4, driver,echo_drv,unloaded} -> ok after 1000 -> false end,
+ ok = receive {'UP',Ref3, driver,echo_drv,loaded} -> ok after 1000 -> false end,
+ [{Parent,1}] = erl_ddll:info(echo_drv, processes),
+ 0 = erl_ddll:info(echo_drv, port_count),
+ ok = receive
+ {got,{'DOWN', Ref2, driver, echo_drv, unloaded}} -> ok
+ after 300 -> error
+ end,
+ ok = unload_expect_fast(echo_drv,[{monitor,pending}]),
+ ok = receive X -> {error, X} after 300 -> ok end,
ok.
-unload_reload_thingie_3(suite) ->
- [];
-unload_reload_thingie_3(doc) ->
- ["Check delayed unload and reload failure"];
+%% Check delayed unload and reload failure
unload_reload_thingie_3(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(10)),
- ?line Path = ?config(data_dir, Config),
- ?line Parent = self(),
- ?line {ok, loaded} = erl_ddll:try_load(Path, echo_drv, []),
- ?line F3 = fun() ->
- Parent ! erl_ddll:monitor(driver,{echo_drv,unloaded}),
- receive X -> Parent ! {got,X} end
- end,
- ?line Pid = spawn(fun() ->
- receive go -> ok end,
- _Port = open_port({spawn, echo_drv}, [eof]),
- spawn(F3),
- receive go -> ok end,
- exit(banan)
- end),
- ?line Ref = erlang:monitor(process,Pid),
+ Path = proplists:get_value(data_dir, Config),
+ Parent = self(),
+ {ok, loaded} = erl_ddll:try_load(Path, echo_drv, []),
+ F3 = fun() ->
+ Parent ! erl_ddll:monitor(driver,{echo_drv,unloaded}),
+ receive X -> Parent ! {got,X} end
+ end,
+ Pid = spawn(fun() ->
+ receive go -> ok end,
+ _Port = open_port({spawn, echo_drv}, [eof]),
+ spawn(F3),
+ receive go -> ok end,
+ exit(banan)
+ end),
+ Ref = erlang:monitor(process,Pid),
+ Pid ! go,
+ {ok,Ref2} = receive
+ R when is_reference(R) -> {ok,R};
+ Other -> {error, Other}
+ after 500 -> {error, timeout}
+ end,
+ {ok,pending_driver,Ref3} = erl_ddll:try_load(filename:join([Path,"skrumpf"]), echo_drv,
+ [{monitor,pending_driver},{reload,pending_driver}]),
+ Ref4 = erl_ddll:monitor(driver,{echo_drv,unloaded}),
Pid ! go,
- ?line {ok,Ref2} = receive
- R when is_reference(R) -> {ok,R};
- Other -> {error, Other}
- after 500 -> {error, timeout}
- end,
- ?line {ok,pending_driver,Ref3} = erl_ddll:try_load(filename:join([Path,"skrumpf"]),echo_drv,[{monitor,pending_driver},{reload,pending_driver}]),
- ?line Ref4 = erl_ddll:monitor(driver,{echo_drv,unloaded}),
- ?line Pid ! go,
- ?line ok = receive {'DOWN', Ref, process, Pid, banan} -> ok after 300 -> error end,
- ?line ok = receive
- {got,{'DOWN', Ref2, driver, echo_drv, unloaded}} -> ok
- after 300 -> error
- end,
- ?line ok = receive {'DOWN',Ref4,driver,echo_drv,unloaded} -> ok after 300 -> false end,
- ?line ok = receive
- {'DOWN',Ref3, driver,echo_drv,{load_failure,_}} -> ok
- after 1000 -> false
- end,
- ?line {'EXIT',_} = (catch erl_ddll:info(echo_drv, port_count)),
- ?line {error, not_loaded} = erl_ddll:try_unload(echo_drv,[{monitor,pending}]),
- ?line ok = receive X -> {error, X} after 300 -> ok end,
- ?line test_server:timetrap_cancel(Dog),
+ ok = receive {'DOWN', Ref, process, Pid, banan} -> ok after 300 -> error end,
+ ok = receive
+ {got,{'DOWN', Ref2, driver, echo_drv, unloaded}} -> ok
+ after 300 -> error
+ end,
+ ok = receive {'DOWN',Ref4,driver,echo_drv,unloaded} -> ok after 300 -> false end,
+ ok = receive
+ {'DOWN',Ref3, driver,echo_drv,{load_failure,_}} -> ok
+ after 1000 -> false
+ end,
+ {'EXIT',_} = (catch erl_ddll:info(echo_drv, port_count)),
+ {error, not_loaded} = erl_ddll:try_unload(echo_drv,[{monitor,pending}]),
+ ok = receive X -> {error, X} after 300 -> ok end,
ok.
-reload_pending(suite) -> [];
-reload_pending(doc) -> ["Reload a driver that is pending on a user"];
+%% Reload a driver that is pending on a user
reload_pending(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(10)),
- ?line Path = ?config(data_dir, Config),
- ?line Parent = self(),
- ?line F3 = fun() ->
- Parent ! erl_ddll:monitor(driver,{echo_drv,unloaded}),
- receive X -> Parent ! {got,X} end
- end,
- ?line Pid = spawn(fun() ->
- receive go -> ok end,
- {ok, loaded} = erl_ddll:try_load(Path, echo_drv, []),
- spawn(F3),
- receive go -> ok end,
- _Port = open_port({spawn, echo_drv}, [eof]),
- _Port2 = open_port({spawn, echo_drv}, [eof]),
- Parent ! opened,
- receive go -> ok end,
- exit(banan)
- end),
- ?line Ref = erlang:monitor(process,Pid),
+ Path = proplists:get_value(data_dir, Config),
+ Parent = self(),
+ F3 = fun() ->
+ Parent ! erl_ddll:monitor(driver,{echo_drv,unloaded}),
+ receive X -> Parent ! {got,X} end
+ end,
+ Pid = spawn(fun() ->
+ receive go -> ok end,
+ {ok, loaded} = erl_ddll:try_load(Path, echo_drv, []),
+ spawn(F3),
+ receive go -> ok end,
+ _Port = open_port({spawn, echo_drv}, [eof]),
+ _Port2 = open_port({spawn, echo_drv}, [eof]),
+ Parent ! opened,
+ receive go -> ok end,
+ exit(banan)
+ end),
+ Ref = erlang:monitor(process,Pid),
Pid ! go,
- ?line {ok,Ref2} = receive
- R when is_reference(R) -> {ok,R};
- Other -> {error, Other}
- after 500 -> {error, timeout}
- end,
- ?line {ok, already_loaded} = erl_ddll:try_load(Path, echo_drv, []),
- ?line Port = open_port({spawn, echo_drv}, [eof]),
+ {ok,Ref2} = receive
+ R when is_reference(R) -> {ok,R};
+ Other -> {error, Other}
+ after 500 -> {error, timeout}
+ end,
+ {ok, already_loaded} = erl_ddll:try_load(Path, echo_drv, []),
+ Port = open_port({spawn, echo_drv}, [eof]),
Pid ! go,
- ?line receive opened -> ok end,
- ?line {error, pending_process} =
- erl_ddll:try_load(Path, echo_drv,
- [{reload,pending_driver},
- {monitor,pending_driver}]),
- ?line {ok, pending_process, Ref3} =
- erl_ddll:try_load(Path, echo_drv,
- [{reload,pending},
- {monitor,pending}]),
- ?line ok = receive X -> {error, X} after 300 -> ok end,
+ receive opened -> ok end,
+ {error, pending_process} =
+ erl_ddll:try_load(Path, echo_drv,
+ [{reload,pending_driver},
+ {monitor,pending_driver}]),
+ {ok, pending_process, Ref3} =
+ erl_ddll:try_load(Path, echo_drv,
+ [{reload,pending},
+ {monitor,pending}]),
+ ok = receive X -> {error, X} after 300 -> ok end,
Pid ! go,
- ?line ok = receive {'DOWN', Ref, process, Pid, banan} -> ok after 300 -> error end,
- ?line ok = receive Y -> {error, Y} after 300 -> ok end,
- ?line erlang:port_close(Port),
- ?line ok = receive {got,{'DOWN', Ref2, driver, echo_drv, unloaded}} -> ok after 300 -> error end,
- ?line ok = receive {'UP', Ref3, driver, echo_drv, loaded} -> ok after 300 -> error end,
+ ok = receive {'DOWN', Ref, process, Pid, banan} -> ok after 300 -> error end,
+ ok = receive Y -> {error, Y} after 300 -> ok end,
+ erlang:port_close(Port),
+ ok = receive {got,{'DOWN', Ref2, driver, echo_drv, unloaded}} -> ok after 300 -> error end,
+ ok = receive {'UP', Ref3, driver, echo_drv, loaded} -> ok after 300 -> error end,
[{Parent,1}] = erl_ddll:info(echo_drv,processes),
- ?line ok = receive Z -> {error, Z} after 300 -> ok end,
- ?line test_server:timetrap_cancel(Dog),
+ ok = receive Z -> {error, Z} after 300 -> ok end,
ok.
-load_fail_init(suite) -> [];
-load_fail_init(doc) -> ["Tests failure in the init in driver struct."];
+%% Tests failure in the init in driver struct.
load_fail_init(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(10)),
- ?line Path = ?config(data_dir, Config),
- ?line PathFailing = ?config(priv_dir, Config),
- ?line [_|_] = AllFailInits = filelib:wildcard("echo_drv_fail_init.*",Path),
- ?line lists:foreach(fun(Name) ->
- Src = filename:join([Path,Name]),
- Ext = filename:extension(Name),
- Dst =filename:join([PathFailing,"echo_drv"++Ext]),
- file:delete(Dst),
- {ok,_} = file:copy(Src,Dst)
- end,
- AllFailInits),
- ?line [_|_] = filelib:wildcard("echo_drv.*",PathFailing),
- ?line {error, driver_init_failed} = erl_ddll:try_load(PathFailing,
- echo_drv,
- [{monitor,pending}]),
- ?line ok = receive XX ->
- {unexpected,XX}
- after 300 ->
- ok
- end,
- ?line test_server:timetrap_cancel(Dog),
+ Path = proplists:get_value(data_dir, Config),
+ PathFailing = proplists:get_value(priv_dir, Config),
+ [_|_] = AllFailInits = filelib:wildcard("echo_drv_fail_init.*",Path),
+ lists:foreach(fun(Name) ->
+ Src = filename:join([Path,Name]),
+ Ext = filename:extension(Name),
+ Dst =filename:join([PathFailing,"echo_drv"++Ext]),
+ file:delete(Dst),
+ {ok,_} = file:copy(Src,Dst)
+ end,
+ AllFailInits),
+ [_|_] = filelib:wildcard("echo_drv.*",PathFailing),
+ {error, driver_init_failed} = erl_ddll:try_load(PathFailing,
+ echo_drv,
+ [{monitor,pending}]),
+ ok = receive XX ->
+ {unexpected,XX}
+ after 300 ->
+ ok
+ end,
ok.
-reload_pending_fail_init(suite) -> [];
-reload_pending_fail_init(doc) -> ["Reload a driver that is pending but init fails"];
+%% Reload a driver that is pending but init fails
reload_pending_fail_init(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(10)),
- ?line Path = ?config(data_dir, Config),
- ?line PathFailing = ?config(priv_dir, Config),
- ?line [_|_] = AllFailInits = filelib:wildcard("echo_drv_fail_init.*",Path),
- ?line lists:foreach(fun(Name) ->
- Src = filename:join([Path,Name]),
- Ext = filename:extension(Name),
- Dst =filename:join([PathFailing,"echo_drv"++Ext]),
- file:delete(Dst),
- {ok,_} = file:copy(Src,Dst)
- end,
- AllFailInits),
- ?line [_|_] = filelib:wildcard("echo_drv.*",PathFailing),
- ?line Parent = self(),
- ?line F3 = fun() ->
- Parent ! erl_ddll:monitor(driver,{echo_drv,unloaded}),
- receive X -> Parent ! {got,X} end
- end,
- ?line Pid = spawn(fun() ->
- receive go -> ok end,
- {ok, loaded} = erl_ddll:try_load(Path, echo_drv, []),
- spawn(F3),
- receive go -> ok end,
- _Port = open_port({spawn, echo_drv}, [eof]),
- _Port2 = open_port({spawn, echo_drv}, [eof]),
- Parent ! opened,
- receive go -> ok end,
- exit(banan)
- end),
- ?line Ref = erlang:monitor(process,Pid),
+ Path = proplists:get_value(data_dir, Config),
+ PathFailing = proplists:get_value(priv_dir, Config),
+ [_|_] = AllFailInits = filelib:wildcard("echo_drv_fail_init.*",Path),
+ lists:foreach(fun(Name) ->
+ Src = filename:join([Path,Name]),
+ Ext = filename:extension(Name),
+ Dst =filename:join([PathFailing,"echo_drv"++Ext]),
+ file:delete(Dst),
+ {ok,_} = file:copy(Src,Dst)
+ end,
+ AllFailInits),
+ [_|_] = filelib:wildcard("echo_drv.*",PathFailing),
+ Parent = self(),
+ F3 = fun() ->
+ Parent ! erl_ddll:monitor(driver,{echo_drv,unloaded}),
+ receive X -> Parent ! {got,X} end
+ end,
+ Pid = spawn(fun() ->
+ receive go -> ok end,
+ {ok, loaded} = erl_ddll:try_load(Path, echo_drv, []),
+ spawn(F3),
+ receive go -> ok end,
+ _Port = open_port({spawn, echo_drv}, [eof]),
+ _Port2 = open_port({spawn, echo_drv}, [eof]),
+ Parent ! opened,
+ receive go -> ok end,
+ exit(banan)
+ end),
+ Ref = erlang:monitor(process,Pid),
Pid ! go,
- ?line {ok,Ref2} = receive
- R when is_reference(R) -> {ok,R};
- Other -> {error, Other}
- after 500 -> {error, timeout}
- end,
- ?line {ok, already_loaded} = erl_ddll:try_load(Path, echo_drv, []),
- ?line Port = open_port({spawn, echo_drv}, [eof]),
+ {ok,Ref2} = receive
+ R when is_reference(R) -> {ok,R};
+ Other -> {error, Other}
+ after 500 -> {error, timeout}
+ end,
+ {ok, already_loaded} = erl_ddll:try_load(Path, echo_drv, []),
+ Port = open_port({spawn, echo_drv}, [eof]),
Pid ! go,
- ?line receive opened -> ok end,
- ?line {ok, pending_process, Ref3} =
- erl_ddll:try_load(PathFailing, echo_drv,
- [{reload,pending},
- {monitor,pending}]),
- ?line ok = receive X -> {error, X} after 300 -> ok end,
+ receive opened -> ok end,
+ {ok, pending_process, Ref3} =
+ erl_ddll:try_load(PathFailing, echo_drv,
+ [{reload,pending},
+ {monitor,pending}]),
+ ok = receive X -> {error, X} after 300 -> ok end,
Pid ! go,
- ?line ok = receive {'DOWN', Ref, process, Pid, banan} -> ok after 300 -> error end,
- ?line ok = receive Y -> {error, Y} after 300 -> ok end,
- ?line erlang:port_close(Port),
- ?line ok = receive {got,{'DOWN', Ref2, driver, echo_drv, unloaded}} -> ok after 300 -> error end,
- ?line ok = receive {'DOWN', Ref3, driver, echo_drv, {load_failure,driver_init_failed}} -> ok after 300 -> error end,
- ?line {'EXIT',{badarg,_}} = (catch erl_ddll:info(echo_drv,processes)),
-
- ?line ok = receive Z -> {error, Z} after 300 -> ok end,
- ?line test_server:timetrap_cancel(Dog),
+ ok = receive {'DOWN', Ref, process, Pid, banan} -> ok after 300 -> error end,
+ ok = receive Y -> {error, Y} after 300 -> ok end,
+ erlang:port_close(Port),
+ ok = receive {got,{'DOWN', Ref2, driver, echo_drv, unloaded}} -> ok after 300 -> error end,
+ ok = receive {'DOWN', Ref3, driver, echo_drv, {load_failure,driver_init_failed}} -> ok after 300 -> error end,
+ {'EXIT',{badarg,_}} = (catch erl_ddll:info(echo_drv,processes)),
+
+ ok = receive Z -> {error, Z} after 300 -> ok end,
ok.
-reload_pending_kill(suite) -> [];
-reload_pending_kill(doc) -> ["Reload a driver with kill_ports option "
- "that is pending on a user"];
+%% Reload a driver with kill_ports option that is pending on a user
reload_pending_kill(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(10)),
- ?line OldFlag = process_flag(trap_exit,true),
- ?line Path = ?config(data_dir, Config),
- ?line Parent = self(),
- ?line F3 = fun() ->
- Parent ! erl_ddll:monitor(driver,{echo_drv,unloaded}),
- receive X -> Parent ! {got,X} end
- end,
- ?line Pid = spawn(fun() ->
- process_flag(trap_exit,true),
- receive go -> ok end,
- {ok, loaded} = erl_ddll:try_load(Path, echo_drv, [{driver_options,[kill_ports]}]),
- spawn(F3),
- receive go -> ok end,
- Port = open_port({spawn, echo_drv}, [eof]),
- Port2 = open_port({spawn, echo_drv}, [eof]),
- Parent ! opened,
- receive go -> ok end,
- receive
- {'EXIT', Port2, driver_unloaded} ->
- Parent ! first_exit
- end,
- receive
- {'EXIT', Port, driver_unloaded} ->
- Parent ! second_exit
- end,
- receive go -> ok end,
- exit(banan)
- end),
- ?line Ref = erlang:monitor(process,Pid),
+ OldFlag = process_flag(trap_exit,true),
+ Path = proplists:get_value(data_dir, Config),
+ Parent = self(),
+ F3 = fun() ->
+ Parent ! erl_ddll:monitor(driver,{echo_drv,unloaded}),
+ receive X -> Parent ! {got,X} end
+ end,
+ Pid = spawn(fun() ->
+ process_flag(trap_exit,true),
+ receive go -> ok end,
+ {ok, loaded} = erl_ddll:try_load(Path, echo_drv, [{driver_options,[kill_ports]}]),
+ spawn(F3),
+ receive go -> ok end,
+ Port = open_port({spawn, echo_drv}, [eof]),
+ Port2 = open_port({spawn, echo_drv}, [eof]),
+ Parent ! opened,
+ receive go -> ok end,
+ receive
+ {'EXIT', Port2, driver_unloaded} ->
+ Parent ! first_exit
+ end,
+ receive
+ {'EXIT', Port, driver_unloaded} ->
+ Parent ! second_exit
+ end,
+ receive go -> ok end,
+ exit(banan)
+ end),
+ Ref = erlang:monitor(process,Pid),
Pid ! go,
- ?line {ok,Ref2} = receive
- R when is_reference(R) -> {ok,R};
- Other -> {error, Other}
- after 500 -> {error, timeout}
- end,
- ?line {ok, already_loaded} = erl_ddll:try_load(Path, echo_drv, [{driver_options,[kill_ports]}]),
- ?line {error,inconsistent} = erl_ddll:try_load(Path, echo_drv, []),
- ?line Port = open_port({spawn, echo_drv}, [eof]),
+ {ok,Ref2} = receive
+ R when is_reference(R) -> {ok,R};
+ Other -> {error, Other}
+ after 500 -> {error, timeout}
+ end,
+ {ok, already_loaded} = erl_ddll:try_load(Path, echo_drv, [{driver_options,[kill_ports]}]),
+ {error,inconsistent} = erl_ddll:try_load(Path, echo_drv, []),
+ Port = open_port({spawn, echo_drv}, [eof]),
Pid ! go,
- ?line receive opened -> ok end,
- ?line {error, pending_process} =
- erl_ddll:try_load(Path, echo_drv,
- [{driver_options,[kill_ports]},
- {reload,pending_driver},
- {monitor,pending_driver}]),
- ?line {ok, pending_process, Ref3} =
- erl_ddll:try_load(Path, echo_drv,
- [{driver_options,[kill_ports]},
- {reload,pending},
- {monitor,pending}]),
- ?line ok = receive
- {'EXIT', Port, driver_unloaded} ->
- ok
- after 300 -> error
- end,
+ receive opened -> ok end,
+ {error, pending_process} =
+ erl_ddll:try_load(Path, echo_drv,
+ [{driver_options,[kill_ports]},
+ {reload,pending_driver},
+ {monitor,pending_driver}]),
+ {ok, pending_process, Ref3} =
+ erl_ddll:try_load(Path, echo_drv,
+ [{driver_options,[kill_ports]},
+ {reload,pending},
+ {monitor,pending}]),
+ ok = receive
+ {'EXIT', Port, driver_unloaded} ->
+ ok
+ after 300 -> error
+ end,
Pid ! go,
- ?line ok = receive {got,{'DOWN', Ref2, driver, echo_drv, unloaded}} -> ok after 300 -> error end,
- ?line ok = receive {'UP', Ref3, driver, echo_drv, loaded} -> ok after 300 -> error end,
- ?line [_,_] = erl_ddll:info(echo_drv,processes),
- ?line ok = receive first_exit -> ok after 300 -> error end,
- ?line ok = receive second_exit -> ok after 300 -> error end,
- ?line 0 = erl_ddll:info(echo_drv,port_count),
- ?line ok = receive X -> {error, X} after 300 -> ok end,
+ ok = receive {got,{'DOWN', Ref2, driver, echo_drv, unloaded}} -> ok after 300 -> error end,
+ ok = receive {'UP', Ref3, driver, echo_drv, loaded} -> ok after 300 -> error end,
+ [_,_] = erl_ddll:info(echo_drv,processes),
+ ok = receive first_exit -> ok after 300 -> error end,
+ ok = receive second_exit -> ok after 300 -> error end,
+ 0 = erl_ddll:info(echo_drv,port_count),
+ ok = receive X -> {error, X} after 300 -> ok end,
Pid ! go,
- ?line ok = receive {'DOWN', Ref, process, Pid, banan} -> ok after 300 -> error end,
- ?line ok = receive Y -> {error, Y} after 300 -> ok end,
- ?line Port2 = open_port({spawn, echo_drv}, [eof]),
- ?line true = is_port(Port2),
+ ok = receive {'DOWN', Ref, process, Pid, banan} -> ok after 300 -> error end,
+ ok = receive Y -> {error, Y} after 300 -> ok end,
+ Port2 = open_port({spawn, echo_drv}, [eof]),
+ true = is_port(Port2),
[{Parent,1}] = erl_ddll:info(echo_drv,processes),
- ?line 1 = erl_ddll:info(echo_drv,port_count),
- ?line erlang:port_close(Port2),
- ?line ok = receive {'EXIT', Port2, normal} -> ok after 300 -> error end,
- ?line 0 = erl_ddll:info(echo_drv,port_count),
- ?line [{Parent,1}] = erl_ddll:info(echo_drv,processes),
- ?line Port3 = open_port({spawn, echo_drv}, [eof]),
- ?line {ok, pending_driver, Ref4} =
- erl_ddll:try_unload(echo_drv,[{monitor,pending_driver}]),
- ?line ok = receive
- {'EXIT', Port3, driver_unloaded} ->
- ok
- after 300 -> error
- end,
- ?line ok = receive {'DOWN', Ref4, driver, echo_drv, unloaded} -> ok after 300 -> error end,
+ 1 = erl_ddll:info(echo_drv,port_count),
+ erlang:port_close(Port2),
+ ok = receive {'EXIT', Port2, normal} -> ok after 300 -> error end,
+ 0 = erl_ddll:info(echo_drv,port_count),
+ [{Parent,1}] = erl_ddll:info(echo_drv,processes),
+ Port3 = open_port({spawn, echo_drv}, [eof]),
+ {ok, pending_driver, Ref4} =
+ erl_ddll:try_unload(echo_drv,[{monitor,pending_driver}]),
+ ok = receive
+ {'EXIT', Port3, driver_unloaded} ->
+ ok
+ after 300 -> error
+ end,
+ ok = receive {'DOWN', Ref4, driver, echo_drv, unloaded} -> ok after 300 -> error end,
io:format("Port = ~w, Port2 = ~w, Port3 = ~w~n",[Port,Port2,Port3]),
- ?line ok = receive Z -> {error, Z} after 300 -> ok end,
- ?line process_flag(trap_exit,OldFlag),
- ?line test_server:timetrap_cancel(Dog),
+ ok = receive Z -> {error, Z} after 300 -> ok end,
+ process_flag(trap_exit,OldFlag),
ok.
-more_error_codes(suite) ->
- [];
-more_error_codes(doc) ->
- ["Some more error code checking"];
+%% Some more error code checking
more_error_codes(Config) when is_list(Config) ->
- ?line {error,Err} = erl_ddll:try_load("./echo_dr",echo_dr,[]),
- ?line true = is_list(erl_ddll:format_error(Err)),
- ?line true = is_list(erl_ddll:format_error(not_loaded)),
+ {error,Err} = erl_ddll:try_load("./echo_dr",echo_dr,[]),
+ true = is_list(erl_ddll:format_error(Err)),
+ true = is_list(erl_ddll:format_error(not_loaded)),
ok.
-forced_port_killing(suite) ->
- [];
-forced_port_killing(doc) ->
- ["Check kill_ports option to try_unload "];
+%% Check kill_ports option to try_unload
forced_port_killing(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(10)),
- ?line Path = ?config(data_dir, Config),
- ?line OldFlag=process_flag(trap_exit,true),
- ?line Parent = self(),
- ?line F3 = fun() ->
- Parent ! erl_ddll:monitor(driver,{echo_drv,unloaded}),
- receive X -> Parent ! {got,X} end
- end,
- ?line {ok, loaded} = erl_ddll:try_load(Path, echo_drv, []),
- ?line spawn(F3),
- ?line {ok,Ref2} = receive
- R when is_reference(R) -> {ok,R};
- Other -> {error, Other}
- after 500 -> {error, timeout}
- end,
- ?line Port = open_port({spawn, echo_drv}, [eof]),
- ?line Port2 = open_port({spawn, echo_drv}, [eof]),
- ?line {ok, pending_driver, Ref1} =
- erl_ddll:try_unload(echo_drv,[{monitor,pending_driver},kill_ports]),
- ?line ok = receive
- {got,{'DOWN', Ref2, driver, echo_drv, unloaded}} -> ok
- after 300 -> error
- end,
- ?line ok = receive {'EXIT',Port,driver_unloaded} -> ok after 300 -> false end,
- ?line ok = receive {'EXIT',Port2,driver_unloaded} -> ok after 300 -> false end,
- ?line ok = receive {'DOWN',Ref1, driver, echo_drv, unloaded} -> ok after 300 -> false end,
- ?line process_flag(trap_exit,OldFlag),
- ?line ok = receive X -> {error, X} after 300 -> ok end,
- ?line test_server:timetrap_cancel(Dog),
+ Path = proplists:get_value(data_dir, Config),
+ OldFlag=process_flag(trap_exit,true),
+ Parent = self(),
+ F3 = fun() ->
+ Parent ! erl_ddll:monitor(driver,{echo_drv,unloaded}),
+ receive X -> Parent ! {got,X} end
+ end,
+ {ok, loaded} = erl_ddll:try_load(Path, echo_drv, []),
+ spawn(F3),
+ {ok,Ref2} = receive
+ R when is_reference(R) -> {ok,R};
+ Other -> {error, Other}
+ after 500 -> {error, timeout}
+ end,
+ Port = open_port({spawn, echo_drv}, [eof]),
+ Port2 = open_port({spawn, echo_drv}, [eof]),
+ {ok, pending_driver, Ref1} =
+ erl_ddll:try_unload(echo_drv,[{monitor,pending_driver},kill_ports]),
+ ok = receive
+ {got,{'DOWN', Ref2, driver, echo_drv, unloaded}} -> ok
+ after 300 -> error
+ end,
+ ok = receive {'EXIT',Port,driver_unloaded} -> ok after 300 -> false end,
+ ok = receive {'EXIT',Port2,driver_unloaded} -> ok after 300 -> false end,
+ ok = receive {'DOWN',Ref1, driver, echo_drv, unloaded} -> ok after 300 -> false end,
+ process_flag(trap_exit,OldFlag),
+ ok = receive X -> {error, X} after 300 -> ok end,
ok.
-no_trap_exit_and_kill_ports(suite) ->
- [];
-no_trap_exit_and_kill_ports(doc) ->
- ["Check delayed unload and reload with no trap_exit"];
+%% Check delayed unload and reload with no trap_exit
no_trap_exit_and_kill_ports(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(10)),
- ?line Path = ?config(data_dir, Config),
- ?line Parent = self(),
- ?line OldFlag=process_flag(trap_exit,true),
- ?line F3 = fun() ->
- Parent ! erl_ddll:monitor(driver,{echo_drv,unloaded}),
- receive X -> Parent ! {got,X} end
- end,
- ?line Pid = spawn(fun() ->
- process_flag(trap_exit,false),
- receive go -> ok end,
- {ok, loaded} = erl_ddll:try_load(Path, echo_drv,
- [{driver_options,[kill_ports]}]),
- spawn(F3),
- receive go -> ok end,
- _Port = open_port({spawn, echo_drv}, [eof]),
- _Port2 = open_port({spawn, echo_drv}, [eof]),
- exit(banan)
- end),
- ?line Ref = erlang:monitor(process,Pid),
+ Path = proplists:get_value(data_dir, Config),
+ Parent = self(),
+ OldFlag=process_flag(trap_exit,true),
+ F3 = fun() ->
+ Parent ! erl_ddll:monitor(driver,{echo_drv,unloaded}),
+ receive X -> Parent ! {got,X} end
+ end,
+ Pid = spawn(fun() ->
+ process_flag(trap_exit,false),
+ receive go -> ok end,
+ {ok, loaded} = erl_ddll:try_load(Path, echo_drv,
+ [{driver_options,[kill_ports]}]),
+ spawn(F3),
+ receive go -> ok end,
+ _Port = open_port({spawn, echo_drv}, [eof]),
+ _Port2 = open_port({spawn, echo_drv}, [eof]),
+ exit(banan)
+ end),
+ Ref = erlang:monitor(process,Pid),
Pid ! go,
- ?line {ok,Ref2} = receive
- R when is_reference(R) -> {ok,R};
- Other -> {error, Other}
- after 500 -> {error, timeout}
- end,
- ?line {error, inconsistent} = erl_ddll:try_load(Path, echo_drv, []),
- ?line MyPort = open_port({spawn, echo_drv}, [eof]),
+ {ok,Ref2} = receive
+ R when is_reference(R) -> {ok,R};
+ Other -> {error, Other}
+ after 500 -> {error, timeout}
+ end,
+ {error, inconsistent} = erl_ddll:try_load(Path, echo_drv, []),
+ MyPort = open_port({spawn, echo_drv}, [eof]),
Pid ! go,
- ?line ok = receive {'DOWN', Ref, process, Pid, banan} -> ok after 300 -> error end,
- ?line ok = receive {got,{'DOWN', Ref2, driver, echo_drv, unloaded}} -> ok after 300 -> error end,
- ?line ok = receive {'EXIT',MyPort,driver_unloaded} -> ok after 300 -> error end,
- ?line process_flag(trap_exit,OldFlag),
- ?line test_server:timetrap_cancel(Dog),
+ ok = receive {'DOWN', Ref, process, Pid, banan} -> ok after 300 -> error end,
+ ok = receive {got,{'DOWN', Ref2, driver, echo_drv, unloaded}} -> ok after 300 -> error end,
+ ok = receive {'EXIT',MyPort,driver_unloaded} -> ok after 300 -> error end,
+ process_flag(trap_exit,OldFlag),
ok.
-monitor_demonitor(suite) ->
- [];
-monitor_demonitor(doc) ->
- ["Check monitor and demonitor of drivers"];
+%% Check monitor and demonitor of drivers
monitor_demonitor(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(10)),
- ?line Path = ?config(data_dir, Config),
- ?line erl_ddll:try_load(Path, echo_drv, []),
- ?line Ref = erl_ddll:monitor(driver,{echo_drv,unloaded}),
- ?line Self = self(),
- ?line [{Self,1}] = erl_ddll:info(echo_drv,awaiting_unload),
- ?line true = erl_ddll:demonitor(Ref),
- ?line [] = erl_ddll:info(echo_drv,awaiting_unload),
- ?line erl_ddll:try_unload(echo_drv,[]),
- ?line ok = receive _ -> error after 300 -> ok end,
- ?line test_server:timetrap_cancel(Dog),
+ Path = proplists:get_value(data_dir, Config),
+ erl_ddll:try_load(Path, echo_drv, []),
+ Ref = erl_ddll:monitor(driver,{echo_drv,unloaded}),
+ Self = self(),
+ [{Self,1}] = erl_ddll:info(echo_drv,awaiting_unload),
+ true = erl_ddll:demonitor(Ref),
+ [] = erl_ddll:info(echo_drv,awaiting_unload),
+ erl_ddll:try_unload(echo_drv,[]),
+ ok = receive _ -> error after 300 -> ok end,
ok.
-monitor_demonitor_load(suite) ->
- [];
-monitor_demonitor_load(doc) ->
- ["Check monitor/demonitor of driver loading"];
+%% Check monitor/demonitor of driver loading
monitor_demonitor_load(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(10)),
- ?line Path = ?config(data_dir, Config),
- ?line {ok,loaded} = erl_ddll:try_load(Path, echo_drv, []),
- ?line Port = open_port({spawn, echo_drv}, [eof]),
- ?line Ref = erl_ddll:monitor(driver,{echo_drv,loaded}),
- ?line ok = receive {'UP',Ref,driver,echo_drv,loaded} -> ok after 500 -> error end,
- ?line {ok, pending_driver} = erl_ddll:try_unload(echo_drv,[]),
- ?line Ref2 = erl_ddll:monitor(driver,{echo_drv,loaded}),
- ?line ok = receive {'DOWN',Ref2,driver,echo_drv,load_cancelled} -> ok after 0 -> error end,
- ?line {ok,already_loaded} = erl_ddll:try_load(Path, echo_drv, []),
- ?line {ok, pending_driver} =
- erl_ddll:try_load(Path, echo_drv, [{reload,pending_driver}]),
- ?line Ref3 = erl_ddll:monitor(driver,{echo_drv,loaded}),
- ?line Ref4 = erl_ddll:monitor(driver,{echo_drv,unloaded}),
- ?line ok = receive _ -> error after 300 -> ok end,
- ?line Self = self(),
- ?line [{Self,1}] = erl_ddll:info(echo_drv,awaiting_load),
- ?line true = erl_ddll:demonitor(Ref3),
- ?line [] = erl_ddll:info(echo_drv,awaiting_load),
- ?line erlang:port_close(Port),
- ?line ok = receive {'DOWN',Ref4,driver,echo_drv,unloaded} -> ok after 300 -> error end,
- ?line ok = receive _ -> error after 300 -> ok end,
- ?line ok = unload_expect_fast(echo_drv,[]),
- ?line test_server:timetrap_cancel(Dog),
+ Path = proplists:get_value(data_dir, Config),
+ {ok,loaded} = erl_ddll:try_load(Path, echo_drv, []),
+ Port = open_port({spawn, echo_drv}, [eof]),
+ Ref = erl_ddll:monitor(driver,{echo_drv,loaded}),
+ ok = receive {'UP',Ref,driver,echo_drv,loaded} -> ok after 500 -> error end,
+ {ok, pending_driver} = erl_ddll:try_unload(echo_drv,[]),
+ Ref2 = erl_ddll:monitor(driver,{echo_drv,loaded}),
+ ok = receive {'DOWN',Ref2,driver,echo_drv,load_cancelled} -> ok after 0 -> error end,
+ {ok,already_loaded} = erl_ddll:try_load(Path, echo_drv, []),
+ {ok, pending_driver} =
+ erl_ddll:try_load(Path, echo_drv, [{reload,pending_driver}]),
+ Ref3 = erl_ddll:monitor(driver,{echo_drv,loaded}),
+ Ref4 = erl_ddll:monitor(driver,{echo_drv,unloaded}),
+ ok = receive _ -> error after 300 -> ok end,
+ Self = self(),
+ [{Self,1}] = erl_ddll:info(echo_drv,awaiting_load),
+ true = erl_ddll:demonitor(Ref3),
+ [] = erl_ddll:info(echo_drv,awaiting_load),
+ erlang:port_close(Port),
+ ok = receive {'DOWN',Ref4,driver,echo_drv,unloaded} -> ok after 300 -> error end,
+ ok = receive _ -> error after 300 -> ok end,
+ ok = unload_expect_fast(echo_drv,[]),
ok.
-new_interface(suite) ->
- [];
-new_interface(doc) ->
- ["Test the new load/unload/reload interface"];
+%% Test the new load/unload/reload interface
new_interface(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(10)),
- ?line Path = ?config(data_dir, Config),
+ Path = proplists:get_value(data_dir, Config),
% Typical scenario
- ?line ok = erl_ddll:load(Path, echo_drv),
- ?line Port = open_port({spawn, echo_drv}, [eof]),
- ?line ok = erl_ddll:unload(echo_drv),
- ?line Port ! {self(), {command, "text"}},
- ?line ok = receive
- {Port, {data, "text"}} -> ok;
- _ -> error
- after
- 1000 -> error
- end,
- ?line Ref = erl_ddll:monitor(driver,{echo_drv,unloaded}),
- ?line ok = receive X -> {error, X} after 300 -> ok end,
- ?line erlang:port_close(Port),
- ?line ok = receive {'DOWN', Ref, driver, echo_drv, unloaded} -> ok after 300 -> error end,
+ ok = erl_ddll:load(Path, echo_drv),
+ Port = open_port({spawn, echo_drv}, [eof]),
+ ok = erl_ddll:unload(echo_drv),
+ Port ! {self(), {command, "text"}},
+ ok = receive
+ {Port, {data, "text"}} -> ok;
+ _ -> error
+ after
+ 1000 -> error
+ end,
+ Ref = erl_ddll:monitor(driver,{echo_drv,unloaded}),
+ ok = receive X -> {error, X} after 300 -> ok end,
+ erlang:port_close(Port),
+ ok = receive {'DOWN', Ref, driver, echo_drv, unloaded} -> ok after 300 -> error end,
% More than one user
- ?line ok = erl_ddll:load(Path, echo_drv),
- ?line Ref2 = erl_ddll:monitor(driver,{echo_drv,unloaded}),
- ?line ok = erl_ddll:load(Path, echo_drv),
- ?line ok = erl_ddll:load(Path, echo_drv),
- ?line Port2 = open_port({spawn, echo_drv}, [eof]),
- ?line ok = erl_ddll:unload(echo_drv),
- ?line Port2 ! {self(), {command, "text"}},
- ?line ok = receive
- {Port2, {data, "text"}} -> ok;
- _ -> error
- after
- 1000 -> error
- end,
- ?line ok = erl_ddll:unload(echo_drv),
- ?line Port2 ! {self(), {command, "text"}},
- ?line ok = receive
- {Port2, {data, "text"}} -> ok;
- _ -> error
- after
- 1000 -> error
- end,
- ?line ok = erl_ddll:unload(echo_drv),
- ?line Port2 ! {self(), {command, "text"}},
- ?line ok = receive
- {Port2, {data, "text"}} -> ok;
- _ -> error
- after
- 1000 -> error
- end,
- ?line ok = receive X2 -> {error, X2} after 300 -> ok end,
- ?line ok = erl_ddll:load(Path, echo_drv),
- ?line ok = receive {'UP', Ref2, driver, echo_drv, unload_cancelled} -> ok after 300 -> error end,
- ?line Ref3 = erl_ddll:monitor(driver,{echo_drv,unloaded_only}),
- ?line erlang:port_close(Port2),
- ?line ok = receive X3 -> {error, X3} after 300 -> ok end,
- ?line ok = erl_ddll:unload(echo_drv),
- ?line ok = receive {'DOWN', Ref3, driver, echo_drv, unloaded} -> ok after 300 -> error end,
- ?line test_server:timetrap_cancel(Dog),
+ ok = erl_ddll:load(Path, echo_drv),
+ Ref2 = erl_ddll:monitor(driver,{echo_drv,unloaded}),
+ ok = erl_ddll:load(Path, echo_drv),
+ ok = erl_ddll:load(Path, echo_drv),
+ Port2 = open_port({spawn, echo_drv}, [eof]),
+ ok = erl_ddll:unload(echo_drv),
+ Port2 ! {self(), {command, "text"}},
+ ok = receive
+ {Port2, {data, "text"}} -> ok;
+ _ -> error
+ after
+ 1000 -> error
+ end,
+ ok = erl_ddll:unload(echo_drv),
+ Port2 ! {self(), {command, "text"}},
+ ok = receive
+ {Port2, {data, "text"}} -> ok;
+ _ -> error
+ after
+ 1000 -> error
+ end,
+ ok = erl_ddll:unload(echo_drv),
+ Port2 ! {self(), {command, "text"}},
+ ok = receive
+ {Port2, {data, "text"}} -> ok;
+ _ -> error
+ after
+ 1000 -> error
+ end,
+ ok = receive X2 -> {error, X2} after 300 -> ok end,
+ ok = erl_ddll:load(Path, echo_drv),
+ ok = receive {'UP', Ref2, driver, echo_drv, unload_cancelled} -> ok after 300 -> error end,
+ Ref3 = erl_ddll:monitor(driver,{echo_drv,unloaded_only}),
+ erlang:port_close(Port2),
+ ok = receive X3 -> {error, X3} after 300 -> ok end,
+ ok = erl_ddll:unload(echo_drv),
+ ok = receive {'DOWN', Ref3, driver, echo_drv, unloaded} -> ok after 300 -> error end,
ok.
-
-
+
+
ddll_test(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(10)),
- ?line Path = ?config(data_dir, Config),
+ Path = proplists:get_value(data_dir, Config),
- %?line {error,{already_started,ErlDdllPid}} = erl_ddll:start(),
- %?line ErlDdllPid = whereis(ddll_server),
+ %{error,{already_started,ErlDdllPid}} = erl_ddll:start(),
+ %ErlDdllPid = whereis(ddll_server),
%% Load the echo driver and verify that it was loaded.
{ok,L1,L2}=load_echo_driver(Path),
%% Verify that the driver works.
- ?line Port = open_port({spawn, echo_drv}, [eof]),
- ?line {hej, "hopp",4711,123445567436543653} =
- erlang:port_call(Port,{hej, "hopp",4711,123445567436543653}),
- ?line {hej, "hopp",4711,123445567436543653} =
- erlang:port_call(Port,47,{hej, "hopp",4711,123445567436543653}),
- ?line Port ! {self(), {command, "text"}},
- ?line 1 = receive
- {Port, {data, "text"}} -> 1;
- _Other -> 2
- after
- 1000 -> 2
- end,
- ?line Port ! {self(), close},
- ?line receive {Port, closed} -> ok end,
-
-%% %% Unload the driver and verify that it was unloaded.
- ok = unload_echo_driver(L1,L2),
-
-%% %?line {error, {already_started, _}} = erl_ddll:start(),
-
- ?line test_server:timetrap_cancel(Dog),
+ Port = open_port({spawn, echo_drv}, [eof]),
+ {hej, "hopp",4711,123445567436543653} =
+ erlang:port_call(Port,{hej, "hopp",4711,123445567436543653}),
+ {hej, "hopp",4711,123445567436543653} =
+ erlang:port_call(Port,47,{hej, "hopp",4711,123445567436543653}),
+ Port ! {self(), {command, "text"}},
+ 1 = receive
+ {Port, {data, "text"}} -> 1;
+ _Other -> 2
+ after
+ 1000 -> 2
+ end,
+ Port ! {self(), close},
+ receive {Port, closed} -> ok end,
+
+ %% %% Unload the driver and verify that it was unloaded.
+ ok = unload_echo_driver(L1,L2),
+
+ %% %{error, {already_started, _}} = erl_ddll:start(),
ok.
%% Tests errors having to do with bad drivers.
errors(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(10)),
- ?line Path = ?config(data_dir, Config),
+ Path = proplists:get_value(data_dir, Config),
- ?line {ok, L1} = erl_ddll:loaded_drivers(),
+ {ok, L1} = erl_ddll:loaded_drivers(),
- ?line {error, {open_error, _}} = erl_ddll:load_driver(Path, bad_name),
- ?line {error, driver_init_failed} = erl_ddll:load_driver(Path, initfail_drv),
- ?line {error, bad_driver_name} = erl_ddll:load_driver(Path, wrongname_drv),
+ {error, {open_error, _}} = erl_ddll:load_driver(Path, bad_name),
+ {error, driver_init_failed} = erl_ddll:load_driver(Path, initfail_drv),
+ {error, bad_driver_name} = erl_ddll:load_driver(Path, wrongname_drv),
%% We assume that there is a statically linked driver named "ddll":
- ?line {error, linked_in_driver} = erl_ddll:unload_driver(efile),
- ?line {error, not_loaded} = erl_ddll:unload_driver("__pucko_driver__"),
-
+ {error, linked_in_driver} = erl_ddll:unload_driver(efile),
+ {error, not_loaded} = erl_ddll:unload_driver("__pucko_driver__"),
+
case os:type() of
- {unix, _} ->
- ?line {error, no_driver_init} =
- erl_ddll:load_driver(Path, noinit_drv);
- _ ->
- ok
+ {unix, _} ->
+ {error, no_driver_init} =
+ erl_ddll:load_driver(Path, noinit_drv);
+ _ ->
+ ok
end,
- ?line {ok, L1} = erl_ddll:loaded_drivers(),
-
- ?line test_server:timetrap_cancel(Dog),
+ {ok, L1} = erl_ddll:loaded_drivers(),
ok.
-reference_count(doc) ->
- ["Check that drivers are unloaded when their reference count ",
- "reaches zero, and that they cannot be unloaded while ",
- "they are still referenced."];
+%% Check that drivers are unloaded when their reference count
+%% reaches zero, and that they cannot be unloaded while
+%% they are still referenced.
reference_count(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(10)),
- ?line Path = ?config(data_dir, Config),
+ Path = proplists:get_value(data_dir, Config),
%% Spawn a process that loads the driver (and holds a reference
%% to it).
Pid1=spawn_link(?MODULE, echo_loader, [Path, self()]),
receive
- {Pid1, echo_loaded} -> ok
- after 2000 -> test_server:fail("echo_loader failed to start.")
+ {Pid1, echo_loaded} -> ok
+ after 2000 -> ct:fail("echo_loader failed to start.")
end,
Pid1 ! {self(), die},
- ?line test_server:sleep(200), % Give time to unload.
+ test_server:sleep(200), % Give time to unload.
% Verify that the driver was automaticly unloaded when the
% process died.
- ?line {error, not_loaded}=erl_ddll:unload_driver(echo_drv),
-
- ?line test_server:timetrap_cancel(Dog),
+ {error, not_loaded}=erl_ddll:unload_driver(echo_drv),
ok.
% Loads the echo driver, send msg to started, sits and waits to
% get a signal to die, then unloads the driver and terminates.
echo_loader(Path, Starter) ->
- ?line {ok, L1, L2}=load_echo_driver(Path),
- ?line Starter ! {self(), echo_loaded},
+ {ok, L1, L2}=load_echo_driver(Path),
+ Starter ! {self(), echo_loaded},
receive
- {Starter, die} ->
- ?line unload_echo_driver(L1,L2)
+ {Starter, die} ->
+ unload_echo_driver(L1,L2)
end.
% Loads the echo driver, send msg to started, sits and waits to
% get a signal to die, then unloads the driver and terminates.
nice_echo_loader(Path, Starter) ->
- ?line {ok, L1, L2}=load_nice_echo_driver(Path),
- ?line Starter ! {self(), echo_loaded},
+ {ok, L1, L2}=load_nice_echo_driver(Path),
+ Starter ! {self(), echo_loaded},
receive
- {Starter, die} ->
- ?line unload_echo_driver(L1,L2)
+ {Starter, die} ->
+ unload_echo_driver(L1,L2)
end.
-kill_port(doc) ->
- ["Test that a port that uses a driver is killed when the ",
- "process that loaded the driver dies."];
+%% Test that a port that uses a driver is killed when the
+%% process that loaded the driver dies.
kill_port(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(10)),
- ?line Path = ?config(data_dir, Config),
+ Path = proplists:get_value(data_dir, Config),
%% Spawn a process that loads the driver (and holds a reference
%% to it).
- ?line Pid1=spawn(?MODULE, echo_loader, [Path, self()]),
- ?line receive
- {Pid1, echo_loaded} ->
- ok
- after 3000 ->
- ?line exit(Pid1, kill),
- ?line test_server:fail("echo_loader failed to start.")
- end,
+ Pid1=spawn(?MODULE, echo_loader, [Path, self()]),
+ receive
+ {Pid1, echo_loaded} ->
+ ok
+ after 3000 ->
+ exit(Pid1, kill),
+ ct:fail("echo_loader failed to start.")
+ end,
% Spawn off a port that uses the driver.
- ?line Port = open_port({spawn, echo_drv}, [eof]),
+ Port = open_port({spawn, echo_drv}, [eof]),
% Kill the process / unload the driver.
- ?line process_flag(trap_exit, true),
- ?line exit(Pid1, kill),
- ?line test_server:sleep(200), % Give some time to unload.
- ?line {error, not_loaded} = erl_ddll:unload_driver(echo_drv),
+ process_flag(trap_exit, true),
+ exit(Pid1, kill),
+ test_server:sleep(200), % Give some time to unload.
+ {error, not_loaded} = erl_ddll:unload_driver(echo_drv),
% See if the port is killed.
receive
- {'EXIT', Port, Reason} ->
- io:format("Port exited with reason ~w", [Reason])
+ {'EXIT', Port, Reason} ->
+ io:format("Port exited with reason ~w", [Reason])
after 5000 ->
- ?line test_server:fail("Echo port did not terminate.")
+ ct:fail("Echo port did not terminate.")
end,
-
- %% Cleanup and exit.
- ?line test_server:timetrap_cancel(Dog),
ok.
-dont_kill_port(doc) ->
- ["Test that a port that uses a driver is not killed when the ",
- "process that loaded the driver dies and it's nicely opened."];
+%% Test that a port that uses a driver is not killed when the
+%% process that loaded the driver dies and it's nicely opened.
dont_kill_port(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(10)),
- ?line Path = ?config(data_dir, Config),
+ Path = proplists:get_value(data_dir, Config),
%% Spawn a process that loads the driver (and holds a reference
%% to it).
- ?line Pid1=spawn(?MODULE, nice_echo_loader, [Path, self()]),
- ?line receive
- {Pid1, echo_loaded} ->
- ok
- after 3000 ->
- ?line exit(Pid1, kill),
- ?line test_server:fail("echo_loader failed to start.")
- end,
+ Pid1=spawn(?MODULE, nice_echo_loader, [Path, self()]),
+ receive
+ {Pid1, echo_loaded} ->
+ ok
+ after 3000 ->
+ exit(Pid1, kill),
+ ct:fail("echo_loader failed to start.")
+ end,
% Spawn off a port that uses the driver.
- ?line Port = open_port({spawn, echo_drv}, [eof]),
+ Port = open_port({spawn, echo_drv}, [eof]),
% Kill the process / unload the driver.
- ?line process_flag(trap_exit, true),
- ?line exit(Pid1, kill),
- ?line test_server:sleep(200), % Give some time to unload.
- ?line {hej, "hopp",4711,123445567436543653} =
- erlang:port_call(Port,{hej, "hopp",4711,123445567436543653}),
- ?line [] = erl_ddll:info(echo_drv,processes),
+ process_flag(trap_exit, true),
+ exit(Pid1, kill),
+ test_server:sleep(200), % Give some time to unload.
+ {hej, "hopp",4711,123445567436543653} =
+ erlang:port_call(Port,{hej, "hopp",4711,123445567436543653}),
+ [] = erl_ddll:info(echo_drv,processes),
%% unload should work with no owner
- ?line ok = erl_ddll:unload_driver(echo_drv), %Kill ports while at it
+ ok = erl_ddll:unload_driver(echo_drv), %Kill ports while at it
% See if the port is killed.
receive
- {'EXIT', Port, Reason} ->
- io:format("Port exited with reason ~w", [Reason])
+ {'EXIT', Port, Reason} ->
+ io:format("Port exited with reason ~w", [Reason])
after 5000 ->
- ?line test_server:fail("Echo port did not terminate.")
+ ct:fail("Echo port did not terminate.")
end,
-
- %% Cleanup and exit.
- ?line test_server:timetrap_cancel(Dog),
ok.
-properties(doc) -> ["Test that a process that loaded a driver ",
- "is the only process that can unload it."];
+%% Test that a process that loaded a driver
+%% is the only process that can unload it.
properties(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(10)),
- ?line Path = ?config(data_dir, Config),
+ Path = proplists:get_value(data_dir, Config),
% Let another process load the echo driver.
Pid=spawn_link(?MODULE, echo_loader, [Path, self()]),
receive
- {Pid, echo_loaded} -> ok
- after 2000 -> test_server:fail("echo_loader failed to start.")
+ {Pid, echo_loaded} -> ok
+ after 2000 -> ct:fail("echo_loader failed to start.")
end,
% Try to unload the driver from this process (the wrong one).
- ?line {error, _} = erl_ddll:unload_driver(echo_drv),
- ?line {ok, Drivers} = erl_ddll:loaded_drivers(),
- ?line case lists:member("echo_drv", Drivers) of
- true ->
- ok;
- false ->
- test_server:fail("Unload from wrong process "
- "succeeded.")
- end,
+ {error, _} = erl_ddll:unload_driver(echo_drv),
+ {ok, Drivers} = erl_ddll:loaded_drivers(),
+ case lists:member("echo_drv", Drivers) of
+ true ->
+ ok;
+ false ->
+ ct:fail("Unload from wrong process succeeded.")
+ end,
% Unload the driver and terminate dummy process.
- ?line Pid ! {self(), die},
- ?line test_server:sleep(200), % Give time to unload.
- ?line test_server:timetrap_cancel(Dog),
+ Pid ! {self(), die},
+ test_server:sleep(200), % Give time to unload.
ok.
-load_and_unload(doc) -> ["Load two drivers and unload them in load order."];
+%% Load two drivers and unload them in load order.
load_and_unload(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(60)),
- ?line Path = ?config(data_dir, Config),
- ?line {ok, Loaded_drivers1} = erl_ddll:loaded_drivers(),
- ?line ok = erl_ddll:load_driver(Path, echo_drv),
- ?line ok = erl_ddll:load_driver(Path, dummy_drv),
- ?line ok = erl_ddll:unload_driver(echo_drv),
- ?line ok = erl_ddll:unload_driver(dummy_drv),
- ?line {ok, Loaded_drivers2} = erl_ddll:loaded_drivers(),
- ?line Set1 = ordsets:from_list(Loaded_drivers1),
- ?line Set2 = ordsets:from_list(Loaded_drivers2),
- ?line io:format("~p == ~p\n", [Loaded_drivers1, Loaded_drivers2]),
- ?line [] = ordsets:to_list(ordsets:subtract(Set2, Set1)),
-
- ?line test_server:timetrap_cancel(Dog),
+ Path = proplists:get_value(data_dir, Config),
+ {ok, Loaded_drivers1} = erl_ddll:loaded_drivers(),
+ ok = erl_ddll:load_driver(Path, echo_drv),
+ ok = erl_ddll:load_driver(Path, dummy_drv),
+ ok = erl_ddll:unload_driver(echo_drv),
+ ok = erl_ddll:unload_driver(dummy_drv),
+ {ok, Loaded_drivers2} = erl_ddll:loaded_drivers(),
+ Set1 = ordsets:from_list(Loaded_drivers1),
+ Set2 = ordsets:from_list(Loaded_drivers2),
+ io:format("~p == ~p\n", [Loaded_drivers1, Loaded_drivers2]),
+ [] = ordsets:to_list(ordsets:subtract(Set2, Set1)),
ok.
-lock_driver(suite) ->
- [];
-lock_driver(doc) ->
- ["Check multiple calls to driver_lock_driver"];
+%% Check multiple calls to driver_lock_driver
lock_driver(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(10)),
- ?line Path = ?config(data_dir, Config),
- ?line {ok, _} = erl_ddll:try_load(Path, lock_drv, []),
- ?line Port1 = open_port({spawn, lock_drv}, [eof]),
- ?line Port2 = open_port({spawn, lock_drv}, [eof]),
- ?line true = erl_ddll:info(lock_drv,permanent),
- ?line erlang:port_close(Port1),
- ?line erlang:port_close(Port2),
- ?line test_server:timetrap_cancel(Dog),
+ Path = proplists:get_value(data_dir, Config),
+ {ok, _} = erl_ddll:try_load(Path, lock_drv, []),
+ Port1 = open_port({spawn, lock_drv}, [eof]),
+ Port2 = open_port({spawn, lock_drv}, [eof]),
+ true = erl_ddll:info(lock_drv,permanent),
+ erlang:port_close(Port1),
+ erlang:port_close(Port2),
ok.
-
+
% Load and unload the echo_drv driver.
% Make sure that the driver doesn't exist before we load it,
% and that it exists before we unload it.
load_echo_driver(Path) ->
- ?line {ok, L1} = erl_ddll:loaded_drivers(),
- ?line ok = erl_ddll:load_driver(Path, echo_drv),
- ?line {ok, L2} = erl_ddll:loaded_drivers(),
- ?line ["echo_drv"] = ordsets:to_list(subtract(ordsets:from_list(L2),
- ordsets:from_list(L1))),
+ {ok, L1} = erl_ddll:loaded_drivers(),
+ ok = erl_ddll:load_driver(Path, echo_drv),
+ {ok, L2} = erl_ddll:loaded_drivers(),
+ ["echo_drv"] = ordsets:to_list(subtract(ordsets:from_list(L2),
+ ordsets:from_list(L1))),
{ok,L1,L2}.
load_nice_echo_driver(Path) ->
- ?line {ok, L1} = erl_ddll:loaded_drivers(),
- ?line ok = erl_ddll:load(Path, echo_drv),
- ?line {ok, L2} = erl_ddll:loaded_drivers(),
- ?line ["echo_drv"] = ordsets:to_list(subtract(ordsets:from_list(L2),
- ordsets:from_list(L1))),
+ {ok, L1} = erl_ddll:loaded_drivers(),
+ ok = erl_ddll:load(Path, echo_drv),
+ {ok, L2} = erl_ddll:loaded_drivers(),
+ ["echo_drv"] = ordsets:to_list(subtract(ordsets:from_list(L2),
+ ordsets:from_list(L1))),
{ok,L1,L2}.
unload_echo_driver(L1,L2) ->
- ?line {ok, L2} = erl_ddll:loaded_drivers(),
- ?line ok = erl_ddll:unload_driver(echo_drv),
- ?line {ok, L3} = erl_ddll:loaded_drivers(),
- ?line [] = ordsets:to_list(subtract(ordsets:from_list(L3),
- ordsets:from_list(L1))),
+ {ok, L2} = erl_ddll:loaded_drivers(),
+ ok = erl_ddll:unload_driver(echo_drv),
+ {ok, L3} = erl_ddll:loaded_drivers(),
+ [] = ordsets:to_list(subtract(ordsets:from_list(L3),
+ ordsets:from_list(L1))),
ok.
unload_expect_fast(Driver,XFlags) ->
{ok, pending_driver, Ref} =
- erl_ddll:try_unload(Driver,
- [{monitor,pending_driver}]++XFlags),
+ erl_ddll:try_unload(Driver,
+ [{monitor,pending_driver}]++XFlags),
receive
- {'DOWN', Ref, driver, Driver, unloaded} ->
- case lists:member(atom_to_list(Driver),element(2,erl_ddll:loaded_drivers())) of
- true ->
- {error, {still_there, Driver}};
- false ->
- ok
- end
+ {'DOWN', Ref, driver, Driver, unloaded} ->
+ case lists:member(atom_to_list(Driver),element(2,erl_ddll:loaded_drivers())) of
+ true ->
+ {error, {still_there, Driver}};
+ false ->
+ ok
+ end
after 1000 ->
- {error,{unable_to_unload, Driver}}
+ {error,{unable_to_unload, Driver}}
end.
diff --git a/erts/emulator/test/decode_packet_SUITE.erl b/erts/emulator/test/decode_packet_SUITE.erl
index 58a8d390f0..54ee4d5567 100644
--- a/erts/emulator/test/decode_packet_SUITE.erl
+++ b/erts/emulator/test/decode_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.
@@ -24,13 +24,14 @@
-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,
- basic/1, packet_size/1, neg/1, http/1, line/1, ssl/1, otp_8536/1,
+-export([all/0, suite/0,groups/0,
+ init_per_testcase/2,end_per_testcase/2,
+ basic/1, packet_size/1, neg/1, http/1, line/1, ssl/1, otp_8536/1,
otp_9389/1, otp_9389_line/1]).
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap, {minutes, 1}}].
all() ->
[basic, packet_size, neg, http, line, ssl, otp_8536,
@@ -39,66 +40,49 @@ all() ->
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(Func, Config) when is_atom(Func), is_list(Config) ->
rand:seed(exsplus),
io:format("*** SEED: ~p ***\n", [rand:export_seed()]),
- Dog=?t:timetrap(?t:minutes(1)),
- [{watchdog, Dog}|Config].
+ Config.
-end_per_testcase(_Func, Config) ->
- Dog=?config(watchdog, Config),
- ?t:timetrap_cancel(Dog).
+end_per_testcase(_Func, _Config) ->
+ ok.
-basic(doc) -> [];
-basic(suite) -> [];
basic(Config) when is_list(Config) ->
- ?line Packet = <<101,22,203,54,175>>,
- ?line Rest = <<123,34,0,250>>,
- ?line Bin = <<Packet/binary,Rest/binary>>,
- ?line {ok, Bin, <<>>} = decode_pkt(raw,Bin),
+ Packet = <<101,22,203,54,175>>,
+ Rest = <<123,34,0,250>>,
+ Bin = <<Packet/binary,Rest/binary>>,
+ {ok, Bin, <<>>} = decode_pkt(raw,Bin),
- ?line {more, 5+1} = decode_pkt(1,<<5,1,2,3,4>>),
- ?line {more, 5+2} = decode_pkt(2,<<0,5,1,2,3,4>>),
- ?line {more, 5+4} = decode_pkt(4,<<0,0,0,5,1,2,3,4>>),
+ {more, 5+1} = decode_pkt(1,<<5,1,2,3,4>>),
+ {more, 5+2} = decode_pkt(2,<<0,5,1,2,3,4>>),
+ {more, 5+4} = decode_pkt(4,<<0,0,0,5,1,2,3,4>>),
- ?line {more, undefined} = decode_pkt(1,<<>>),
- ?line {more, undefined} = decode_pkt(2,<<0>>),
- ?line {more, undefined} = decode_pkt(4,<<0,0,0>>),
+ {more, undefined} = decode_pkt(1,<<>>),
+ {more, undefined} = decode_pkt(2,<<0>>),
+ {more, undefined} = decode_pkt(4,<<0,0,0>>),
Types = [1,2,4,asn1,sunrm,cdr,fcgi,tpkt,ssl_tls],
%% Run tests for different header types and bit offsets.
lists:foreach(fun({Type,Bits})->basic_pack(Type,Packet,Rest,Bits),
- more_length(Type,Packet,Bits) end,
- [{T,B} || T<-Types, B<-lists:seq(0,32)]),
+ more_length(Type,Packet,Bits) end,
+ [{T,B} || T<-Types, B<-lists:seq(0,32)]),
ok.
basic_pack(Type,Body,Rest,BitOffs) ->
- ?line {Bin,Unpacked,_} = pack(Type,Body,Rest,BitOffs),
- ?line {ok, Unpacked, Rest} = decode_pkt(Type,Bin),
+ {Bin,Unpacked,_} = pack(Type,Body,Rest,BitOffs),
+ {ok, Unpacked, Rest} = decode_pkt(Type,Bin),
case Rest of
- <<>> -> ok;
- _ ->
- ?line <<_:1,NRest/bits>> = Rest,
- basic_pack(Type,Body,NRest,BitOffs)
+ <<>> -> ok;
+ _ ->
+ <<_:1,NRest/bits>> = Rest,
+ basic_pack(Type,Body,NRest,BitOffs)
end.
more_length(Type,Body,BitOffs) ->
- ?line {Bin,_,_} = pack(Type,Body,<<>>,BitOffs),
+ {Bin,_,_} = pack(Type,Body,<<>>,BitOffs),
HdrSize = byte_size(Bin) - byte_size(Body),
more_length_do(Type,HdrSize,Bin,byte_size(Bin)).
@@ -107,17 +91,17 @@ more_length_do(_,_,_,0) ->
more_length_do(Type,HdrSize,Bin,Size) ->
TrySize = (Size*3) div 4,
NSize = if TrySize < HdrSize -> Size - 1;
- true -> TrySize
- end,
+ true -> TrySize
+ end,
{B1,_} = split_binary(Bin,NSize),
- ?line {more, Length} = decode_pkt(Type,B1),
+ {more, Length} = decode_pkt(Type,B1),
case Length of
- L when L=:=byte_size(Bin) -> ok;
- undefined when NSize<HdrSize -> ok
+ L when L=:=byte_size(Bin) -> ok;
+ undefined when NSize<HdrSize -> ok
end,
more_length_do(Type,HdrSize,Bin,NSize).
-
+
pack(Type,Packet,Rest) ->
{Bin,Unpacked} = pack(Type,Packet),
@@ -149,28 +133,28 @@ pack(4,Bin) ->
{<<Psz:32,Bin/binary>>, Bin};
pack(asn1,Bin) ->
Ident = case rand:uniform(3) of
- 1 -> <<17>>;
- 2 -> <<16#1f,16#81,17>>;
- 3 -> <<16#1f,16#81,16#80,16#80,17>>
- end,
+ 1 -> <<17>>;
+ 2 -> <<16#1f,16#81,17>>;
+ 3 -> <<16#1f,16#81,16#80,16#80,17>>
+ end,
Psz = byte_size(Bin),
Length = case rand:uniform(4) of
- 1 when Psz < 128 ->
- <<Psz:8>>;
- R when R=<2 andalso Psz < 16#10000 ->
- <<16#82,Psz:16>>;
- R when R=<3 andalso Psz < 16#1000000 ->
- <<16#83,Psz:24>>;
- _ when Psz < 16#100000000 ->
- <<16#84,Psz:32>>
- end,
+ 1 when Psz < 128 ->
+ <<Psz:8>>;
+ R when R=<2 andalso Psz < 16#10000 ->
+ <<16#82,Psz:16>>;
+ R when R=<3 andalso Psz < 16#1000000 ->
+ <<16#83,Psz:24>>;
+ _ when Psz < 16#100000000 ->
+ <<16#84,Psz:32>>
+ end,
Res = <<Ident/binary,Length/binary,Bin/binary>>,
{Res,Res};
pack(sunrm,Bin) ->
Psz = byte_size(Bin),
Res = if Psz < 16#80000000 ->
- <<Psz:32,Bin/binary>>
- end,
+ <<Psz:32,Bin/binary>>
+ end,
{Res,Res};
pack(cdr,Bin) ->
GIOP = <<"GIOP">>,
@@ -179,9 +163,9 @@ pack(cdr,Bin) ->
MType = rand:uniform(256) - 1,
Psz = byte_size(Bin),
Res = case rand:uniform(2) of
- 1 -> <<GIOP/binary,Major:8,Minor:8,0:8,MType:8,Psz:32/big,Bin/binary>>;
- 2 -> <<GIOP/binary,Major:8,Minor:8,1:8,MType:8,Psz:32/little,Bin/binary>>
- end,
+ 1 -> <<GIOP/binary,Major:8,Minor:8,0:8,MType:8,Psz:32/big,Bin/binary>>;
+ 2 -> <<GIOP/binary,Major:8,Minor:8,1:8,MType:8,Psz:32/little,Bin/binary>>
+ end,
{Res,Res};
pack(fcgi,Bin) ->
Ver = 1,
@@ -191,10 +175,10 @@ pack(fcgi,Bin) ->
Psz = byte_size(Bin),
Reserv = rand:uniform(256) - 1,
Padd = case PaddSz of
- 0 -> <<>>;
- _ -> list_to_binary([rand:uniform(256)-1
- || _<- lists:seq(1,PaddSz)])
- end,
+ 0 -> <<>>;
+ _ -> list_to_binary([rand:uniform(256)-1
+ || _<- lists:seq(1,PaddSz)])
+ end,
Res = <<Ver:8,Type:8,Id:16,Psz:16/big,PaddSz:8,Reserv:8,Bin/binary>>,
{<<Res/binary,Padd/binary>>, Res};
pack(tpkt,Bin) ->
@@ -205,155 +189,149 @@ pack(tpkt,Bin) ->
{Res, Res};
pack(ssl_tls,Bin) ->
Content = case (rand:uniform(256) - 1) of
- C when C<128 -> C;
- _ -> v2hello
- end,
+ C when C<128 -> C;
+ _ -> v2hello
+ end,
Major = rand:uniform(256) - 1,
Minor = rand:uniform(256) - 1,
pack_ssl(Content,Major,Minor,Bin).
pack_ssl(Content, Major, Minor, Body) ->
case Content of
- v2hello ->
- Size = byte_size(Body),
- Res = <<1:1,(Size+3):15, 1:8, Major:8, Minor:8, Body/binary>>,
- C = 22,
- Data = <<1:8, (Size+2):24, Major:8, Minor:8, Body/binary>>;
- C when is_integer(C) ->
- Size = byte_size(Body),
- Res = <<Content:8, Major:8, Minor:8, Size:16, Body/binary>>,
- Data = Body
+ v2hello ->
+ Size = byte_size(Body),
+ Res = <<1:1,(Size+3):15, 1:8, Major:8, Minor:8, Body/binary>>,
+ C = 22,
+ Data = <<1:8, (Size+2):24, Major:8, Minor:8, Body/binary>>;
+ C when is_integer(C) ->
+ Size = byte_size(Body),
+ Res = <<Content:8, Major:8, Minor:8, Size:16, Body/binary>>,
+ Data = Body
end,
{Res, {ssl_tls,[],C,{Major,Minor}, Data}}.
-packet_size(doc) -> [];
-packet_size(suite) -> [];
packet_size(Config) when is_list(Config) ->
- ?line Packet = <<101,22,203,54,175>>,
- ?line Rest = <<123,34,0,250>>,
+ Packet = <<101,22,203,54,175>>,
+ Rest = <<123,34,0,250>>,
F = fun({Type,Max})->
- ?line {Bin,Unpacked} = pack(Type,Packet,Rest),
- ?line case decode_pkt(Type,Bin,[{packet_size,Max}]) of
- {ok,Unpacked,Rest} when Max=:=0; Max>=byte_size(Packet) ->
- ok;
- {error,_} when Max<byte_size(Packet), Max=/=0 ->
- ok;
- {error,_} when Type=:=fcgi, Max=/=0 ->
- %% packet includes random amount of padding
- ok
- end
- end,
- ?line lists:foreach(F, [{T,D} || T<-[1,2,4,asn1,sunrm,cdr,fcgi,tpkt,ssl_tls],
- D<-lists:seq(0, byte_size(Packet)*2)]),
+ {Bin,Unpacked} = pack(Type,Packet,Rest),
+ case decode_pkt(Type,Bin,[{packet_size,Max}]) of
+ {ok,Unpacked,Rest} when Max=:=0; Max>=byte_size(Packet) ->
+ ok;
+ {error,_} when Max<byte_size(Packet), Max=/=0 ->
+ ok;
+ {error,_} when Type=:=fcgi, Max=/=0 ->
+ %% packet includes random amount of padding
+ ok
+ end
+ end,
+ lists:foreach(F, [{T,D} || T<-[1,2,4,asn1,sunrm,cdr,fcgi,tpkt,ssl_tls],
+ D<-lists:seq(0, byte_size(Packet)*2)]),
%% Test OTP-8102, "negative" 4-byte sizes.
lists:foreach(fun(Size) ->
- ?line {error,_} = decode_pkt(4,<<Size:32,Packet/binary>>)
- end,
- lists:seq(-10,-1)),
+ {error,_} = decode_pkt(4,<<Size:32,Packet/binary>>)
+ end,
+ lists:seq(-10,-1)),
%% Test OTP-9389, long HTTP header lines.
Opts = [{packet_size, 128}],
Pkt = list_to_binary(["GET / HTTP/1.1\r\nHost: localhost\r\nLink: /",
string:chars($Y, 64), "\r\n\r\n"]),
<<Pkt1:50/binary, Pkt2/binary>> = Pkt,
- ?line {ok, {http_request,'GET',{abs_path,"/"},{1,1}}, Rest1} =
- erlang:decode_packet(http, Pkt1, Opts),
- ?line {ok, {http_header,_,'Host',_,"localhost"}, Rest2} =
- erlang:decode_packet(httph, Rest1, Opts),
- ?line {more, undefined} = erlang:decode_packet(httph, Rest2, Opts),
- ?line {ok, {http_header,_,"Link",_,_}, _} =
- erlang:decode_packet(httph, list_to_binary([Rest2, Pkt2]), Opts),
+ {ok, {http_request,'GET',{abs_path,"/"},{1,1}}, Rest1} =
+ erlang:decode_packet(http, Pkt1, Opts),
+ {ok, {http_header,_,'Host',_,"localhost"}, Rest2} =
+ erlang:decode_packet(httph, Rest1, Opts),
+ {more, undefined} = erlang:decode_packet(httph, Rest2, Opts),
+ {ok, {http_header,_,"Link",_,_}, _} =
+ erlang:decode_packet(httph, list_to_binary([Rest2, Pkt2]), Opts),
Pkt3 = list_to_binary(["GET / HTTP/1.1\r\nHost: localhost\r\nLink: /",
string:chars($Y, 129), "\r\n\r\n"]),
- ?line {ok, {http_request,'GET',{abs_path,"/"},{1,1}}, Rest3} =
- erlang:decode_packet(http, Pkt3, Opts),
- ?line {ok, {http_header,_,'Host',_,"localhost"}, Rest4} =
- erlang:decode_packet(httph, Rest3, Opts),
- ?line {error, invalid} = erlang:decode_packet(httph, Rest4, Opts),
+ {ok, {http_request,'GET',{abs_path,"/"},{1,1}}, Rest3} =
+ erlang:decode_packet(http, Pkt3, Opts),
+ {ok, {http_header,_,'Host',_,"localhost"}, Rest4} =
+ erlang:decode_packet(httph, Rest3, Opts),
+ {error, invalid} = erlang:decode_packet(httph, Rest4, Opts),
ok.
-neg(doc) -> [];
-neg(suite) -> [];
neg(Config) when is_list(Config) ->
- ?line Bin = <<"dummy">>,
+ Bin = <<"dummy">>,
Fun = fun()->dummy end,
-
+
BadargF = fun(T,B,Opts)-> {'EXIT',{badarg,_}} = (catch decode_pkt(T,B,Opts)) end,
%% Invalid Type args
lists:foreach(fun(T)-> BadargF(T,Bin,[]) end,
- [3,-1,5,2.0,{2},unknown,[],"line",Bin,Fun,self()]),
+ [3,-1,5,2.0,{2},unknown,[],"line",Bin,Fun,self()]),
%% Invalid Bin args
lists:foreach(fun(B)-> BadargF(0,B,[]) end,
- [3,2.0,unknown,[],"Bin",[Bin],{Bin},Fun,self()]),
+ [3,2.0,unknown,[],"Bin",[Bin],{Bin},Fun,self()]),
%% Invalid options
InvOpts = [2,false,self(),Bin,"Options",Fun,
- packet_size,{packet_size},{packet_size,0,false},
- {packet_size,-1},{packet_size,100.0},{packet_size,false},
- {line_length,-1},{line_length,100.0},{line_length,false}],
+ packet_size,{packet_size},{packet_size,0,false},
+ {packet_size,-1},{packet_size,100.0},{packet_size,false},
+ {line_length,-1},{line_length,100.0},{line_length,false}],
lists:foreach(fun(Opt)-> BadargF(0,Bin,Opt),
- BadargF(0,Bin,[Opt]),
- BadargF(0,Bin,[Opt,{packet_size,1000}]),
- BadargF(0,Bin,[{packet_size,1000},Opt]) end,
- InvOpts),
+ BadargF(0,Bin,[Opt]),
+ BadargF(0,Bin,[Opt,{packet_size,1000}]),
+ BadargF(0,Bin,[{packet_size,1000},Opt]) end,
+ InvOpts),
ok.
-http(doc) -> [];
-http(suite) -> [];
http(Config) when is_list(Config) ->
- ?line <<"foo">> = http_do(http_request("foo")),
- ?line <<" bar">> = http_do(http_request(" bar")),
- ?line <<"Hello!">> = http_do(http_response("Hello!")),
+ <<"foo">> = http_do(http_request("foo")),
+ <<" bar">> = http_do(http_request(" bar")),
+ <<"Hello!">> = http_do(http_response("Hello!")),
%% Test all known header atoms
Val = "dummy value",
ValB = list_to_binary(Val),
Rest = <<"Rest">>,
HdrF = fun(Str,N) ->
- ?line StrA = list_to_atom(Str),
- ?line StrB = list_to_binary(Str),
- ?line Bin = <<StrB/binary,": ",ValB/binary,"\r\n",Rest/binary>>,
- ?line {ok, {http_header,N,StrA,undefined,Val}, Rest} = decode_pkt(httph,Bin),
- ?line {ok, {http_header,N,StrA,undefined,ValB}, Rest} = decode_pkt(httph_bin,Bin),
- ?line N + 1
- end,
- ?line lists:foldl(HdrF, 1, http_hdr_strings()),
+ StrA = list_to_atom(Str),
+ StrB = list_to_binary(Str),
+ Bin = <<StrB/binary,": ",ValB/binary,"\r\n",Rest/binary>>,
+ {ok, {http_header,N,StrA,undefined,Val}, Rest} = decode_pkt(httph,Bin),
+ {ok, {http_header,N,StrA,undefined,ValB}, Rest} = decode_pkt(httph_bin,Bin),
+ N + 1
+ end,
+ lists:foldl(HdrF, 1, http_hdr_strings()),
%% Test all known method atoms
MethF = fun(Meth) ->
- ?line MethA = list_to_atom(Meth),
- ?line MethB = list_to_binary(Meth),
- ?line Bin = <<MethB/binary," /invalid/url HTTP/1.0\r\n",Rest/binary>>,
- ?line {ok, {http_request,MethA,{abs_path,"/invalid/url"},{1,0}},
- Rest} = decode_pkt(http,Bin),
- ?line {ok, {http_request,MethA,{abs_path,<<"/invalid/url">>},{1,0}},
- Rest} = decode_pkt(http_bin,Bin)
- end,
- ?line lists:foreach(MethF, http_meth_strings()),
+ MethA = list_to_atom(Meth),
+ MethB = list_to_binary(Meth),
+ Bin = <<MethB/binary," /invalid/url HTTP/1.0\r\n",Rest/binary>>,
+ {ok, {http_request,MethA,{abs_path,"/invalid/url"},{1,0}},
+ Rest} = decode_pkt(http,Bin),
+ {ok, {http_request,MethA,{abs_path,<<"/invalid/url">>},{1,0}},
+ Rest} = decode_pkt(http_bin,Bin)
+ end,
+ lists:foreach(MethF, http_meth_strings()),
%% Test all uri variants
UriF = fun({Str,ResL,ResB}) ->
- Bin = <<"GET ",(list_to_binary(Str))/binary," HTTP/1.1\r\n",Rest/binary>>,
- {ok, {http_request, 'GET', ResL, {1,1}}, Rest} = decode_pkt(http,Bin),
- {ok, {http_request, 'GET', ResB, {1,1}}, Rest} = decode_pkt(http_bin,Bin)
- end,
+ Bin = <<"GET ",(list_to_binary(Str))/binary," HTTP/1.1\r\n",Rest/binary>>,
+ {ok, {http_request, 'GET', ResL, {1,1}}, Rest} = decode_pkt(http,Bin),
+ {ok, {http_request, 'GET', ResB, {1,1}}, Rest} = decode_pkt(http_bin,Bin)
+ end,
lists:foreach(UriF, http_uri_variants()),
%% Response with empty phrase
- ?line {ok,{http_response,{1,1},200,[]},<<>>} = decode_pkt(http, <<"HTTP/1.1 200\r\n">>, []),
- ?line {ok,{http_response,{1,1},200,<<>>},<<>>} = decode_pkt(http_bin, <<"HTTP/1.1 200\r\n">>, []),
+ {ok,{http_response,{1,1},200,[]},<<>>} = decode_pkt(http, <<"HTTP/1.1 200\r\n">>, []),
+ {ok,{http_response,{1,1},200,<<>>},<<>>} = decode_pkt(http_bin, <<"HTTP/1.1 200\r\n">>, []),
ok.
-
+
http_with_bin(http) ->
http_bin;
http_with_bin(httph) ->
@@ -364,8 +342,8 @@ http_do(Tup) ->
http_do({Bin, []}, _) ->
Bin;
http_do({Bin,[{_Line,PL,PB}|Tail]}, Type) ->
- ?line {ok, PL, Rest} = decode_pkt(Type,Bin),
- ?line {ok, PB, Rest} = decode_pkt(http_with_bin(Type),Bin),
+ {ok, PL, Rest} = decode_pkt(Type,Bin),
+ {ok, PB, Rest} = decode_pkt(http_with_bin(Type),Bin),
%% Same tests again but as SubBin
PreLen = rand:uniform(64),
@@ -375,77 +353,77 @@ http_do({Bin,[{_Line,PL,PB}|Tail]}, Type) ->
Orig = <<Prefix:PreLen, Bin/bits, Suffix:SufLen>>,
BinLen = bit_size(Bin),
<<_:PreLen, SubBin:BinLen/bits, _/bits>> = Orig, % Make SubBin
- ?line SubBin = Bin, % just to make sure
+ SubBin = Bin, % just to make sure
- ?line {ok, PL, Rest} = decode_pkt(Type,SubBin),
- ?line {ok, PB, Rest} = decode_pkt(http_with_bin(Type),SubBin),
+ {ok, PL, Rest} = decode_pkt(Type,SubBin),
+ {ok, PB, Rest} = decode_pkt(http_with_bin(Type),SubBin),
http_do({Rest, Tail}, httph).
http_request(Msg) ->
QnA = [{"POST /invalid/url HTTP/1.1\r\n",
- {http_request, 'POST', {abs_path, "/invalid/url" }, {1,1}},
- {http_request, 'POST', {abs_path,<<"/invalid/url">>}, {1,1}}},
- {"Connection: close\r\n",
- {http_header,2,'Connection',undefined, "close"},
- {http_header,2,'Connection',undefined,<<"close">>}},
- {"Host\t : localhost:8000\r\n", % white space before :
- {http_header,14,'Host',undefined, "localhost:8000"},
- {http_header,14,'Host',undefined,<<"localhost:8000">>}},
- {"User-Agent: perl post\r\n",
- {http_header,24,'User-Agent',undefined, "perl post"},
- {http_header,24,'User-Agent',undefined,<<"perl post">>}},
- {"Content-Length: 4\r\n",
- {http_header,38,'Content-Length',undefined, "4"},
- {http_header,38,'Content-Length',undefined,<<"4">>}},
- {"Content-Type: text/xml; charset=utf-8\r\n",
- {http_header,42,'Content-Type',undefined, "text/xml; charset=utf-8"},
- {http_header,42,'Content-Type',undefined,<<"text/xml; charset=utf-8">>}},
- {"Other-Field: with some text\r\n",
- {http_header,0, "Other-Field" ,undefined, "with some text"},
- {http_header,0,<<"Other-Field">>,undefined,<<"with some text">>}},
- {"Make-sure-a-LONG-HEaDer-fIeLd-is-fORMATTED-NicelY: with some text\r\n",
- {http_header,0, "Make-Sure-A-Long-Header-Field-Is-Formatted-Nicely" ,undefined, "with some text"},
- {http_header,0,<<"Make-Sure-A-Long-Header-Field-Is-Formatted-Nicely">>,undefined,<<"with some text">>}},
- {"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",
- {http_header,0, "Multi-Line" ,undefined, "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."},
- {http_header,0,<<"Multi-Line">>,undefined,<<"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",
- http_eoh,
- http_eoh}],
+ {http_request, 'POST', {abs_path, "/invalid/url" }, {1,1}},
+ {http_request, 'POST', {abs_path,<<"/invalid/url">>}, {1,1}}},
+ {"Connection: close\r\n",
+ {http_header,2,'Connection',undefined, "close"},
+ {http_header,2,'Connection',undefined,<<"close">>}},
+ {"Host\t : localhost:8000\r\n", % white space before :
+ {http_header,14,'Host',undefined, "localhost:8000"},
+ {http_header,14,'Host',undefined,<<"localhost:8000">>}},
+ {"User-Agent: perl post\r\n",
+ {http_header,24,'User-Agent',undefined, "perl post"},
+ {http_header,24,'User-Agent',undefined,<<"perl post">>}},
+ {"Content-Length: 4\r\n",
+ {http_header,38,'Content-Length',undefined, "4"},
+ {http_header,38,'Content-Length',undefined,<<"4">>}},
+ {"Content-Type: text/xml; charset=utf-8\r\n",
+ {http_header,42,'Content-Type',undefined, "text/xml; charset=utf-8"},
+ {http_header,42,'Content-Type',undefined,<<"text/xml; charset=utf-8">>}},
+ {"Other-Field: with some text\r\n",
+ {http_header,0, "Other-Field" ,undefined, "with some text"},
+ {http_header,0,<<"Other-Field">>,undefined,<<"with some text">>}},
+ {"Make-sure-a-LONG-HEaDer-fIeLd-is-fORMATTED-NicelY: with some text\r\n",
+ {http_header,0, "Make-Sure-A-Long-Header-Field-Is-Formatted-Nicely" ,undefined, "with some text"},
+ {http_header,0,<<"Make-Sure-A-Long-Header-Field-Is-Formatted-Nicely">>,undefined,<<"with some text">>}},
+ {"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",
+ {http_header,0, "Multi-Line" ,undefined, "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."},
+ {http_header,0,<<"Multi-Line">>,undefined,<<"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",
+ http_eoh,
+ http_eoh}],
Bin = lists:foldl(fun({Line,_,_},Acc) -> LineBin = list_to_binary(Line),
- <<Acc/binary,LineBin/binary>> end,
- <<"">>, QnA),
+ <<Acc/binary,LineBin/binary>> end,
+ <<"">>, QnA),
MsgBin = list_to_binary(Msg),
{<<Bin/binary,MsgBin/binary>>, QnA}.
http_response(Msg) ->
QnA = [{"HTTP/1.0 404 Object Not Found\r\n",
- {http_response, {1,0}, 404, "Object Not Found"},
- {http_response, {1,0}, 404, <<"Object Not Found">>}},
- {"Server: inets/4.7.16\r\n",
- {http_header, 30, 'Server', undefined, "inets/4.7.16"},
- {http_header, 30, 'Server', undefined, <<"inets/4.7.16">>}},
- {"Date: Fri, 04 Jul 2008 17:16:22 GMT\r\n",
- {http_header, 3, 'Date', undefined, "Fri, 04 Jul 2008 17:16:22 GMT"},
- {http_header, 3, 'Date', undefined, <<"Fri, 04 Jul 2008 17:16:22 GMT">>}},
- {"Content-Type: text/html\r\n",
- {http_header, 42, 'Content-Type', undefined, "text/html"},
- {http_header, 42, 'Content-Type', undefined, <<"text/html">>}},
- {"Content-Length: 207\r\n",
- {http_header, 38, 'Content-Length', undefined, "207"},
- {http_header, 38, 'Content-Length', undefined, <<"207">>}},
- {"\r\n",
- http_eoh,
- http_eoh}],
+ {http_response, {1,0}, 404, "Object Not Found"},
+ {http_response, {1,0}, 404, <<"Object Not Found">>}},
+ {"Server: inets/4.7.16\r\n",
+ {http_header, 30, 'Server', undefined, "inets/4.7.16"},
+ {http_header, 30, 'Server', undefined, <<"inets/4.7.16">>}},
+ {"Date: Fri, 04 Jul 2008 17:16:22 GMT\r\n",
+ {http_header, 3, 'Date', undefined, "Fri, 04 Jul 2008 17:16:22 GMT"},
+ {http_header, 3, 'Date', undefined, <<"Fri, 04 Jul 2008 17:16:22 GMT">>}},
+ {"Content-Type: text/html\r\n",
+ {http_header, 42, 'Content-Type', undefined, "text/html"},
+ {http_header, 42, 'Content-Type', undefined, <<"text/html">>}},
+ {"Content-Length: 207\r\n",
+ {http_header, 38, 'Content-Length', undefined, "207"},
+ {http_header, 38, 'Content-Length', undefined, <<"207">>}},
+ {"\r\n",
+ http_eoh,
+ http_eoh}],
Bin = lists:foldl(fun({Line,_,_},Acc) -> LineBin = list_to_binary(Line),
- <<Acc/binary,LineBin/binary>> end,
- <<"">>, QnA),
+ <<Acc/binary,LineBin/binary>> end,
+ <<"">>, QnA),
MsgBin = list_to_binary(Msg),
{<<Bin/binary,MsgBin/binary>>, QnA}.
@@ -486,60 +464,56 @@ http_uri_variants() ->
{"something_else", "something_else", <<"something_else">>}].
-line(doc) -> [];
-line(suite) -> [];
line(Config) when is_list(Config) ->
Text = <<"POST /invalid/url HTTP/1.1\r\n"
- "Connection: close\r\n"
- "Host\t : 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"
- "\r\nThe residue">>,
+ "Connection: close\r\n"
+ "Host\t : 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"
+ "\r\nThe residue">>,
lists:foreach(fun(MaxLen) -> line_do(Text,MaxLen) end,
- [0,7,19,29,37]),
+ [0,7,19,29,37]),
ok.
line_do(Bin,MaxLen) ->
Res = decode_pkt(line,Bin,[{line_length,MaxLen}]),
MyRes = decode_line(Bin,MaxLen),
- ?line MyRes = Res,
+ MyRes = Res,
case Res of
- {ok,_,Rest} ->
- line_do(Rest,MaxLen);
- {more,undefined} ->
- ok
+ {ok,_,Rest} ->
+ line_do(Rest,MaxLen);
+ {more,undefined} ->
+ ok
end.
-
+
% Emulates decode_packet(line,Bin,[{line_length,MaxLen}])
decode_line(Bin,MaxLen) ->
- ?line case find_in_binary($\n,Bin) of
- notfound when MaxLen>0 andalso byte_size(Bin) >= MaxLen ->
- {LineB,Rest} = split_binary(Bin,MaxLen),
- {ok,LineB,Rest};
- notfound ->
- {more,undefined};
- Pos when MaxLen>0 andalso Pos > MaxLen ->
- {LineB,Rest} = split_binary(Bin,MaxLen),
- {ok,LineB,Rest};
- Pos ->
- {LineB,Rest} = split_binary(Bin,Pos),
- {ok,LineB,Rest}
+ case find_in_binary($\n,Bin) of
+ notfound when MaxLen>0 andalso byte_size(Bin) >= MaxLen ->
+ {LineB,Rest} = split_binary(Bin,MaxLen),
+ {ok,LineB,Rest};
+ notfound ->
+ {more,undefined};
+ Pos when MaxLen>0 andalso Pos > MaxLen ->
+ {LineB,Rest} = split_binary(Bin,MaxLen),
+ {ok,LineB,Rest};
+ Pos ->
+ {LineB,Rest} = split_binary(Bin,Pos),
+ {ok,LineB,Rest}
end.
find_in_binary(Byte, Bin) ->
case string:chr(binary_to_list(Bin),Byte) of
- 0 -> notfound;
- P -> P
+ 0 -> notfound;
+ P -> P
end.
-ssl(doc) -> [];
-ssl(suite) -> [];
ssl(Config) when is_list(Config) ->
Major = 34,
Minor = 17,
@@ -547,15 +521,15 @@ ssl(Config) when is_list(Config) ->
Rest = <<23,123,203,12,234>>,
F = fun(Content) ->
- {Packet,Unpacked} = pack_ssl(Content, Major, Minor, Body),
- Bin = <<Packet/binary,Rest/binary>>,
- ?line {ok, Unpacked, Rest} = decode_pkt(ssl_tls, Bin)
- end,
+ {Packet,Unpacked} = pack_ssl(Content, Major, Minor, Body),
+ Bin = <<Packet/binary,Rest/binary>>,
+ {ok, Unpacked, Rest} = decode_pkt(ssl_tls, Bin)
+ end,
F(25),
F(v2hello),
ok.
-otp_8536(doc) -> ["Corrupt sub-binary-strings from httph_bin"];
+%% Corrupt sub-binary-strings from httph_bin
otp_8536(Config) when is_list(Config) ->
lists:foreach(fun otp_8536_do/1, lists:seq(1,50)),
ok.
@@ -568,7 +542,7 @@ otp_8536_do(N) ->
Bin = <<Hdr/binary, ": ", Data/binary, "\r\n\r\n">>,
io:format("Bin='~p'\n",[Bin]),
- ?line {ok,{http_header,0,Hdr2,undefined,Data2},<<"\r\n">>} = decode_pkt(httph_bin, Bin, []),
+ {ok,{http_header,0,Hdr2,undefined,Data2},<<"\r\n">>} = decode_pkt(httph_bin, Bin, []),
%% Do something to trash the C-stack, how about another decode_packet:
decode_pkt(httph_bin,<<Letters/binary, ": ", Data/binary, "\r\n\r\n">>, []),
@@ -584,8 +558,7 @@ decode_pkt(Type,Bin,Opts) ->
%%io:format(" -> ~p\n",[Res]),
Res.
-otp_9389(doc) -> ["Verify line_length works correctly for HTTP headers"];
-otp_9389(suite) -> [];
+%% Verify line_length works correctly for HTTP headers
otp_9389(Config) when is_list(Config) ->
Opts = [{packet_size, 16384}, {line_length, 3000}],
Pkt = list_to_binary(["GET / HTTP/1.1\r\nHost: localhost\r\nLink: /",
@@ -593,26 +566,25 @@ otp_9389(Config) when is_list(Config) ->
"\r\nContent-Length: 0\r\n\r\n"]),
<<Pkt1:5000/binary, Pkt2/binary>> = Pkt,
{ok, {http_request,'GET',{abs_path,"/"},{1,1}}, Rest1} =
- erlang:decode_packet(http, Pkt1, Opts),
+ erlang:decode_packet(http, Pkt1, Opts),
{ok, {http_header,_,'Host',_,"localhost"}, Rest2} =
- erlang:decode_packet(httph, Rest1, Opts),
+ erlang:decode_packet(httph, Rest1, Opts),
{more, undefined} = erlang:decode_packet(httph, Rest2, Opts),
{ok, {http_header,_,"Link",_,Link}, Rest3} =
- erlang:decode_packet(httph, list_to_binary([Rest2, Pkt2]), Opts),
+ erlang:decode_packet(httph, list_to_binary([Rest2, Pkt2]), Opts),
true = (length(Link) > 8000),
{ok, {http_header,_,'Content-Length',_,"0"}, <<"\r\n">>} =
- erlang:decode_packet(httph, Rest3, Opts),
+ erlang:decode_packet(httph, Rest3, Opts),
ok.
-otp_9389_line(doc) -> ["Verify packet_size works correctly for line mode"];
-otp_9389_line(suite) -> [];
+%% Verify packet_size works correctly for line mode
otp_9389_line(Config) when is_list(Config) ->
Opts = [{packet_size, 20}],
Line1 = <<"0123456789012345678\n">>,
Line2 = <<"0123456789\n">>,
Line3 = <<"01234567890123456789\n">>,
Pkt = list_to_binary([Line1, Line2, Line3]),
- ?line {ok, Line1, Rest1} = erlang:decode_packet(line, Pkt, Opts),
- ?line {ok, Line2, Rest2} = erlang:decode_packet(line, Rest1, Opts),
- ?line {error, invalid} = erlang:decode_packet(line, Rest2, Opts),
+ {ok, Line1, Rest1} = erlang:decode_packet(line, Pkt, Opts),
+ {ok, Line2, Rest2} = erlang:decode_packet(line, Rest1, Opts),
+ {error, invalid} = erlang:decode_packet(line, Rest2, Opts),
ok.
diff --git a/erts/emulator/test/dgawd_handler.erl b/erts/emulator/test/dgawd_handler.erl
index bba69ef87e..52cdd26427 100644
--- a/erts/emulator/test/dgawd_handler.erl
+++ b/erts/emulator/test/dgawd_handler.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/erts/emulator/test/dirty_nif_SUITE.erl b/erts/emulator/test/dirty_nif_SUITE.erl
new file mode 100644
index 0000000000..c3afbc0803
--- /dev/null
+++ b/erts/emulator/test/dirty_nif_SUITE.erl
@@ -0,0 +1,327 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2010-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(dirty_nif_SUITE).
+
+%%-define(line_trace,true).
+-define(CHECK(Exp,Got), check(Exp,Got,?LINE)).
+%%-define(CHECK(Exp,Got), Exp = Got).
+
+-include_lib("common_test/include/ct.hrl").
+
+-export([all/0, suite/0,
+ init_per_suite/1, end_per_suite/1,
+ init_per_testcase/2, end_per_testcase/2,
+ dirty_nif/1, dirty_nif_send/1,
+ dirty_nif_exception/1, call_dirty_nif_exception/1,
+ dirty_scheduler_exit/1, dirty_call_while_terminated/1,
+ dirty_heap_access/1]).
+
+-define(nif_stub,nif_stub_error(?LINE)).
+
+suite() -> [{ct_hooks,[ts_install_cth]}].
+
+all() ->
+ [dirty_nif,
+ dirty_nif_send,
+ dirty_nif_exception,
+ dirty_scheduler_exit,
+ dirty_call_while_terminated,
+ dirty_heap_access].
+
+init_per_suite(Config) ->
+ try erlang:system_info(dirty_cpu_schedulers) of
+ N when is_integer(N), N > 0 ->
+ case lib_loaded() of
+ false ->
+ ok = erlang:load_nif(
+ filename:join(?config(data_dir, Config),
+ "dirty_nif_SUITE"), []);
+ true ->
+ ok
+ end,
+ Config
+ catch _:_ ->
+ {skipped, "No dirty scheduler support"}
+ end.
+
+end_per_suite(_Config) ->
+ ok.
+
+init_per_testcase(Case, Config) ->
+ [{testcase, Case} | Config].
+
+end_per_testcase(_Case, _Config) ->
+ ok.
+
+dirty_nif(Config) when is_list(Config) ->
+ Val1 = 42,
+ Val2 = "Erlang",
+ Val3 = list_to_binary([Val2, 0]),
+ {Val1, Val2, Val3} = call_dirty_nif(Val1, Val2, Val3),
+ LargeArray = lists:duplicate(1000, ok),
+ LargeArray = call_dirty_nif_zero_args(),
+ ok.
+
+dirty_nif_send(Config) when is_list(Config) ->
+ Parent = self(),
+ Pid = spawn_link(fun() ->
+ Self = self(),
+ {ok, Self} = receive_any(),
+ Parent ! {ok, Self}
+ end),
+ {ok, Pid} = send_from_dirty_nif(Pid),
+ {ok, Pid} = receive_any(),
+ ok.
+
+dirty_nif_exception(Config) when is_list(Config) ->
+ try
+ %% this checks that the expected exception occurs when the
+ %% dirty NIF returns the result of enif_make_badarg
+ %% directly
+ call_dirty_nif_exception(1),
+ ct:fail(expected_badarg)
+ catch
+ error:badarg ->
+ [{?MODULE,call_dirty_nif_exception,[1],_}|_] =
+ erlang:get_stacktrace(),
+ ok
+ end,
+ try
+ %% this checks that the expected exception occurs when the
+ %% dirty NIF calls enif_make_badarg at some point but then
+ %% returns a value that isn't an exception
+ call_dirty_nif_exception(0),
+ ct:fail(expected_badarg)
+ catch
+ error:badarg ->
+ [{?MODULE,call_dirty_nif_exception,[0],_}|_] =
+ erlang:get_stacktrace(),
+ ok
+ end,
+ %% this checks that a dirty NIF can raise various terms as
+ %% exceptions
+ ok = nif_raise_exceptions(call_dirty_nif_exception).
+
+nif_raise_exceptions(NifFunc) ->
+ ExcTerms = [{error, test}, "a string", <<"a binary">>,
+ 42, [1,2,3,4,5], [{p,1},{p,2},{p,3}]],
+ lists:foldl(fun(Term, ok) ->
+ try
+ erlang:apply(?MODULE,NifFunc,[Term]),
+ ct:fail({expected,Term})
+ catch
+ error:Term ->
+ [{?MODULE,NifFunc,[Term],_}|_] = erlang:get_stacktrace(),
+ ok
+ end
+ end, ok, ExcTerms).
+
+dirty_scheduler_exit(Config) when is_list(Config) ->
+ {ok, Node} = start_node(Config, "+SDio 1"),
+ Path = proplists:get_value(data_dir, Config),
+ NifLib = filename:join(Path, atom_to_list(?MODULE)),
+ [ok] = mcall(Node,
+ [fun() ->
+ ok = erlang:load_nif(NifLib, []),
+ Start = erlang:monotonic_time(milli_seconds),
+ ok = test_dirty_scheduler_exit(),
+ End = erlang:monotonic_time(milli_seconds),
+ io:format("Time=~p ms~n", [End-Start]),
+ ok
+ end]),
+ stop_node(Node),
+ ok.
+
+test_dirty_scheduler_exit() ->
+ process_flag(trap_exit,true),
+ test_dse(10,[]).
+test_dse(0,Pids) ->
+ timer:sleep(100),
+ kill_dse(Pids,[]);
+test_dse(N,Pids) ->
+ Pid = spawn_link(fun dirty_sleeper/0),
+ test_dse(N-1,[Pid|Pids]).
+
+kill_dse([],Killed) ->
+ wait_dse(Killed);
+kill_dse([Pid|Pids],AlreadyKilled) ->
+ exit(Pid,kill),
+ kill_dse(Pids,[Pid|AlreadyKilled]).
+
+wait_dse([]) ->
+ ok;
+wait_dse([Pid|Pids]) ->
+ receive
+ {'EXIT',Pid,Reason} ->
+ killed = Reason
+ end,
+ wait_dse(Pids).
+
+dirty_call_while_terminated(Config) when is_list(Config) ->
+ Me = self(),
+ Bin = list_to_binary(lists:duplicate(4711, $r)),
+ {value, {BinAddr, 4711, 1}} = lists:keysearch(4711, 2,
+ element(2,
+ process_info(self(),
+ binary))),
+ {Dirty, DM} = spawn_opt(fun () ->
+ dirty_call_while_terminated_nif(Me),
+ blipp:blupp(Bin)
+ end,
+ [monitor,link]),
+ receive {dirty_alive, Pid} -> ok end,
+ {value, {BinAddr, 4711, 2}} = lists:keysearch(4711, 2,
+ element(2,
+ process_info(self(),
+ binary))),
+ Reason = die_dirty_process,
+ OT = process_flag(trap_exit, true),
+ exit(Dirty, Reason),
+ receive
+ {'DOWN', DM, process, Dirty, R0} ->
+ R0 = Reason
+ end,
+ receive
+ {'EXIT', Dirty, R1} ->
+ R1 = Reason
+ end,
+ undefined = process_info(Dirty),
+ undefined = process_info(Dirty, status),
+ false = erlang:is_process_alive(Dirty),
+ false = lists:member(Dirty, processes()),
+ %% Binary still refered by Dirty process not yet cleaned up
+ %% since the dirty nif has not yet returned...
+ {value, {BinAddr, 4711, 2}} = lists:keysearch(4711, 2,
+ element(2,
+ process_info(self(),
+ binary))),
+ receive after 2000 -> ok end,
+ receive
+ Msg ->
+ ct:fail({unexpected_message, Msg})
+ after
+ 0 ->
+ ok
+ end,
+ {value, {BinAddr, 4711, 1}} = lists:keysearch(4711, 2,
+ element(2,
+ process_info(self(),
+ binary))),
+ process_flag(trap_exit, OT),
+ ok.
+
+dirty_heap_access(Config) when is_list(Config) ->
+ {ok, Node} = start_node(Config),
+ Me = self(),
+ RGL = rpc:call(Node,erlang,whereis,[init]),
+ Ref = rpc:call(Node,erlang,make_ref,[]),
+ Dirty = spawn_link(fun () ->
+ Res = dirty_heap_access_nif(Ref),
+ garbage_collect(),
+ Me ! {self(), Res},
+ receive after infinity -> ok end
+ end),
+ {N, R} = access_dirty_heap(Dirty, RGL, 0, 0),
+ receive
+ {Pid, Res} ->
+ 1000 = length(Res),
+ lists:foreach(fun (X) -> Ref = X end, Res)
+ end,
+ unlink(Dirty),
+ exit(Dirty, kill),
+ stop_node(Node),
+ {comment, integer_to_list(N) ++ " GL change loops; "
+ ++ integer_to_list(R) ++ " while running dirty"}.
+
+access_dirty_heap(Dirty, RGL, N, R) ->
+ case process_info(Dirty, status) of
+ {status, waiting} ->
+ {N, R};
+ {status, Status} ->
+ {group_leader, GL} = process_info(Dirty, group_leader),
+ true = group_leader(RGL, Dirty),
+ {group_leader, RGL} = process_info(Dirty, group_leader),
+ true = group_leader(GL, Dirty),
+ {group_leader, GL} = process_info(Dirty, group_leader),
+ access_dirty_heap(Dirty, RGL, N+1, case Status of
+ running ->
+ R+1;
+ _ ->
+ R
+ end)
+ end.
+
+%%
+%% Internal...
+%%
+
+receive_any() ->
+ receive M -> M end.
+
+start_node(Config) ->
+ start_node(Config, "").
+
+start_node(Config, Args) when is_list(Config) ->
+ Pa = filename:dirname(code:which(?MODULE)),
+ Name = list_to_atom(atom_to_list(?MODULE)
+ ++ "-"
+ ++ atom_to_list(proplists:get_value(testcase, Config))
+ ++ "-"
+ ++ integer_to_list(erlang:system_time(seconds))
+ ++ "-"
+ ++ integer_to_list(erlang:unique_integer([positive]))),
+ test_server:start_node(Name, slave, [{args, "-pa "++Pa++" "++Args}]).
+
+stop_node(Node) ->
+ test_server:stop_node(Node).
+
+mcall(Node, Funs) ->
+ Parent = self(),
+ Refs = lists:map(fun (Fun) ->
+ Ref = make_ref(),
+ spawn_link(Node,
+ fun () ->
+ Res = Fun(),
+ unlink(Parent),
+ Parent ! {Ref, Res}
+ end),
+ Ref
+ end, Funs),
+ lists:map(fun (Ref) ->
+ receive
+ {Ref, Res} ->
+ Res
+ end
+ end, Refs).
+
+%% The NIFs:
+lib_loaded() -> false.
+call_nif_schedule(_,_) -> ?nif_stub.
+call_dirty_nif(_,_,_) -> ?nif_stub.
+send_from_dirty_nif(_) -> ?nif_stub.
+call_dirty_nif_exception(_) -> ?nif_stub.
+call_dirty_nif_zero_args() -> ?nif_stub.
+dirty_call_while_terminated_nif(_) -> ?nif_stub.
+dirty_sleeper() -> ?nif_stub.
+dirty_heap_access_nif(_) -> ?nif_stub.
+
+nif_stub_error(Line) ->
+ exit({nif_not_loaded,module,?MODULE,line,Line}).
diff --git a/erts/emulator/test/dirty_nif_SUITE_data/Makefile.src b/erts/emulator/test/dirty_nif_SUITE_data/Makefile.src
new file mode 100644
index 0000000000..e9301753b0
--- /dev/null
+++ b/erts/emulator/test/dirty_nif_SUITE_data/Makefile.src
@@ -0,0 +1,6 @@
+
+NIF_LIBS = dirty_nif_SUITE@dll@
+
+all: $(NIF_LIBS)
+
+@SHLIB_RULES@
diff --git a/erts/emulator/test/dirty_nif_SUITE_data/dirty_nif_SUITE.c b/erts/emulator/test/dirty_nif_SUITE_data/dirty_nif_SUITE.c
new file mode 100644
index 0000000000..2013c88167
--- /dev/null
+++ b/erts/emulator/test/dirty_nif_SUITE_data/dirty_nif_SUITE.c
@@ -0,0 +1,223 @@
+/*
+ * %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 <assert.h>
+#ifndef __WIN32__
+#include <unistd.h>
+#endif
+
+static int load(ErlNifEnv* env, void** priv_data, ERL_NIF_TERM load_info)
+{
+ return 0;
+}
+
+static ERL_NIF_TERM lib_loaded(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+{
+ return enif_make_atom(env, "true");
+}
+
+static int have_dirty_schedulers(void)
+{
+ ErlNifSysInfo si;
+ enif_system_info(&si, sizeof(si));
+ return si.dirty_scheduler_support;
+}
+
+static ERL_NIF_TERM dirty_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+{
+ int n;
+ char s[10];
+ ErlNifBinary b;
+ if (have_dirty_schedulers()) {
+ assert(enif_is_on_dirty_scheduler(env));
+ }
+ assert(argc == 3);
+ enif_get_int(env, argv[0], &n);
+ enif_get_string(env, argv[1], s, sizeof s, ERL_NIF_LATIN1);
+ enif_inspect_binary(env, argv[2], &b);
+ return enif_make_tuple3(env,
+ enif_make_int(env, n),
+ enif_make_string(env, s, ERL_NIF_LATIN1),
+ enif_make_binary(env, &b));
+}
+
+static ERL_NIF_TERM call_dirty_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+{
+ int n;
+ char s[10];
+ ErlNifBinary b;
+ assert(!enif_is_on_dirty_scheduler(env));
+ if (argc != 3)
+ return enif_make_badarg(env);
+ if (have_dirty_schedulers()) {
+ if (enif_get_int(env, argv[0], &n) &&
+ enif_get_string(env, argv[1], s, sizeof s, ERL_NIF_LATIN1) &&
+ enif_inspect_binary(env, argv[2], &b))
+ return enif_schedule_nif(env, "call_dirty_nif", ERL_NIF_DIRTY_JOB_CPU_BOUND, dirty_nif, argc, argv);
+ else
+ return enif_make_badarg(env);
+ } else {
+ return dirty_nif(env, argc, argv);
+ }
+}
+
+static ERL_NIF_TERM send_from_dirty_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+{
+ ERL_NIF_TERM result;
+ ErlNifPid pid;
+ ErlNifEnv* menv;
+ int res;
+
+ if (!enif_get_local_pid(env, argv[0], &pid))
+ return enif_make_badarg(env);
+ result = enif_make_tuple2(env, enif_make_atom(env, "ok"), enif_make_pid(env, &pid));
+ menv = enif_alloc_env();
+ res = enif_send(env, &pid, menv, result);
+ enif_free_env(menv);
+ if (!res)
+ return enif_make_badarg(env);
+ else
+ return result;
+}
+
+static ERL_NIF_TERM call_dirty_nif_exception(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+{
+ switch (argc) {
+ case 1: {
+ int arg;
+ if (enif_get_int(env, argv[0], &arg) && arg < 2) {
+ ERL_NIF_TERM args[255];
+ int i;
+ args[0] = argv[0];
+ for (i = 1; i < 255; i++)
+ args[i] = enif_make_int(env, i);
+ return enif_schedule_nif(env, "call_dirty_nif_exception", ERL_NIF_DIRTY_JOB_CPU_BOUND,
+ call_dirty_nif_exception, 255, args);
+ } else {
+ return enif_raise_exception(env, argv[0]);
+ }
+ }
+ case 2: {
+ int return_badarg_directly;
+ enif_get_int(env, argv[0], &return_badarg_directly);
+ assert(return_badarg_directly == 1 || return_badarg_directly == 0);
+ if (return_badarg_directly)
+ return enif_make_badarg(env);
+ else {
+ /* ignore return value */ enif_make_badarg(env);
+ return enif_make_atom(env, "ok");
+ }
+ }
+ default:
+ return enif_schedule_nif(env, "call_dirty_nif_exception", ERL_NIF_DIRTY_JOB_CPU_BOUND,
+ call_dirty_nif_exception, argc-1, argv);
+ }
+}
+
+static ERL_NIF_TERM call_dirty_nif_zero_args(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+{
+ int i;
+ ERL_NIF_TERM result[1000];
+ ERL_NIF_TERM ok = enif_make_atom(env, "ok");
+ assert(argc == 0);
+ for (i = 0; i < sizeof(result)/sizeof(*result); i++) {
+ result[i] = ok;
+ }
+ return enif_make_list_from_array(env, result, i);
+}
+
+static ERL_NIF_TERM
+dirty_sleeper(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+{
+ assert(enif_is_on_dirty_scheduler(env));
+#ifdef __WIN32__
+ Sleep(6000);
+#else
+ sleep(6);
+#endif
+ return enif_make_atom(env, "ok");
+}
+
+static ERL_NIF_TERM dirty_call_while_terminated_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+{
+ ErlNifPid self;
+ ERL_NIF_TERM result, self_term;
+ ErlNifPid to;
+ ErlNifEnv* menv;
+ int res;
+
+ if (!enif_get_local_pid(env, argv[0], &to))
+ return enif_make_badarg(env);
+
+ if (!enif_self(env, &self))
+ return enif_make_badarg(env);
+
+ self_term = enif_make_pid(env, &self);
+
+ result = enif_make_tuple2(env, enif_make_atom(env, "dirty_alive"), self_term);
+ menv = enif_alloc_env();
+ res = enif_send(env, &to, menv, result);
+ enif_free_env(menv);
+ if (!res)
+ return enif_make_badarg(env);
+
+ /* Wait until we have been killed */
+ while (enif_is_process_alive(env, &self))
+ ;
+
+ result = enif_make_tuple2(env, enif_make_atom(env, "dirty_dead"), self_term);
+ menv = enif_alloc_env();
+ res = enif_send(env, &to, menv, result);
+ enif_free_env(menv);
+
+#ifdef __WIN32__
+ Sleep(1000);
+#else
+ sleep(1);
+#endif
+
+ return enif_make_atom(env, "ok");
+}
+
+static ERL_NIF_TERM dirty_heap_access_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+{
+ ERL_NIF_TERM res = enif_make_list(env, 0);
+ int i;
+ assert(enif_is_on_dirty_scheduler(env));
+ for (i = 0; i < 1000; i++)
+ res = enif_make_list_cell(env, enif_make_copy(env, argv[0]), res);
+
+ return res;
+}
+
+
+static ErlNifFunc nif_funcs[] =
+{
+ {"lib_loaded", 0, lib_loaded},
+ {"call_dirty_nif", 3, call_dirty_nif},
+ {"send_from_dirty_nif", 1, send_from_dirty_nif, ERL_NIF_DIRTY_JOB_CPU_BOUND},
+ {"call_dirty_nif_exception", 1, call_dirty_nif_exception, ERL_NIF_DIRTY_JOB_IO_BOUND},
+ {"call_dirty_nif_zero_args", 0, call_dirty_nif_zero_args, ERL_NIF_DIRTY_JOB_CPU_BOUND},
+ {"dirty_sleeper", 0, dirty_sleeper, ERL_NIF_DIRTY_JOB_IO_BOUND},
+ {"dirty_call_while_terminated_nif", 1, dirty_call_while_terminated_nif, ERL_NIF_DIRTY_JOB_CPU_BOUND},
+ {"dirty_heap_access_nif", 1, dirty_heap_access_nif, ERL_NIF_DIRTY_JOB_CPU_BOUND}
+};
+
+ERL_NIF_INIT(dirty_nif_SUITE,nif_funcs,load,NULL,NULL,NULL)
diff --git a/erts/emulator/test/distribution_SUITE.erl b/erts/emulator/test/distribution_SUITE.erl
index 7a33dbbb36..d0096fb1bc 100644
--- a/erts/emulator/test/distribution_SUITE.erl
+++ b/erts/emulator/test/distribution_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.
@@ -35,39 +35,38 @@
-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,
- ping/1, bulk_send_small/1,
- bulk_send_big/1, bulk_send_bigbig/1,
- local_send_small/1, local_send_big/1,
- local_send_legal/1, link_to_busy/1, exit_to_busy/1,
- lost_exit/1, link_to_dead/1, link_to_dead_new_node/1,
- applied_monitor_node/1, ref_port_roundtrip/1, nil_roundtrip/1,
- trap_bif_1/1, trap_bif_2/1, trap_bif_3/1,
- stop_dist/1,
- dist_auto_connect_never/1, dist_auto_connect_once/1,
- dist_parallel_send/1,
- atom_roundtrip/1,
- unicode_atom_roundtrip/1,
- atom_roundtrip_r15b/1,
- contended_atom_cache_entry/1,
- contended_unicode_atom_cache_entry/1,
- bad_dist_structure/1,
- bad_dist_ext_receive/1,
- bad_dist_ext_process_info/1,
- bad_dist_ext_control/1,
- bad_dist_ext_connection_id/1]).
-
--export([init_per_testcase/2, end_per_testcase/2]).
+-export([all/0, suite/0, groups/0,
+ ping/1, bulk_send_small/1,
+ bulk_send_big/1, bulk_send_bigbig/1,
+ local_send_small/1, local_send_big/1,
+ local_send_legal/1, link_to_busy/1, exit_to_busy/1,
+ lost_exit/1, link_to_dead/1, link_to_dead_new_node/1,
+ applied_monitor_node/1, ref_port_roundtrip/1, nil_roundtrip/1,
+ trap_bif_1/1, trap_bif_2/1, trap_bif_3/1,
+ stop_dist/1,
+ dist_auto_connect_never/1, dist_auto_connect_once/1,
+ dist_parallel_send/1,
+ atom_roundtrip/1,
+ unicode_atom_roundtrip/1,
+ atom_roundtrip_r15b/1,
+ contended_atom_cache_entry/1,
+ contended_unicode_atom_cache_entry/1,
+ bad_dist_structure/1,
+ bad_dist_ext_receive/1,
+ bad_dist_ext_process_info/1,
+ bad_dist_ext_control/1,
+ bad_dist_ext_connection_id/1]).
%% Internal exports.
-export([sender/3, receiver2/2, dummy_waiter/0, dead_process/0,
- roundtrip/1, bounce/1, do_dist_auto_connect/1, inet_rpc_server/1,
- dist_parallel_sender/3, dist_parallel_receiver/0,
- dist_evil_parallel_receiver/0,
+ roundtrip/1, bounce/1, do_dist_auto_connect/1, inet_rpc_server/1,
+ dist_parallel_sender/3, dist_parallel_receiver/0,
+ dist_evil_parallel_receiver/0,
sendersender/4, sendersender2/4]).
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap, {minutes, 4}}].
all() ->
[ping, {group, bulk_send}, {group, local_send},
@@ -90,81 +89,55 @@ groups() ->
[bad_dist_ext_receive, bad_dist_ext_process_info,
bad_dist_ext_control, bad_dist_ext_connection_id]}].
-init_per_suite(Config) ->
- Config.
-
-end_per_suite(_Config) ->
- ok.
-
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
-
--define(DEFAULT_TIMETRAP, 4*60*1000).
-
-init_per_testcase(Func, Config) when is_atom(Func), is_list(Config) ->
- Dog=?t:timetrap(?DEFAULT_TIMETRAP),
- [{watchdog, Dog},{testcase, Func}|Config].
-
-end_per_testcase(Func, Config) when is_atom(Func), is_list(Config) ->
- Dog=?config(watchdog, Config),
- ?t:timetrap_cancel(Dog).
-
-ping(doc) ->
- ["Tests pinging a node in different ways."];
+%% Tests pinging a node in different ways.
ping(Config) when is_list(Config) ->
Times = 1024,
%% Ping a non-existing node many times. This used to crash the emulator
%% on Windows.
- ?line Host = hostname(),
- ?line BadName = list_to_atom("__pucko__@" ++ Host),
- ?line io:format("Pinging ~s (assumed to not exist)", [BadName]),
- ?line test_server:do_times(Times, fun() -> pang = net_adm:ping(BadName)
- end),
+ Host = hostname(),
+ BadName = list_to_atom("__pucko__@" ++ Host),
+ io:format("Pinging ~s (assumed to not exist)", [BadName]),
+ test_server:do_times(Times, fun() -> pang = net_adm:ping(BadName)
+ end),
%% Pings another node.
- ?line {ok, OtherNode} = start_node(distribution_SUITE_other),
- ?line io:format("Pinging ~s (assumed to exist)", [OtherNode]),
- ?line test_server:do_times(Times, fun() -> pong = net_adm:ping(OtherNode) end),
- ?line stop_node(OtherNode),
+ {ok, OtherNode} = start_node(distribution_SUITE_other),
+ io:format("Pinging ~s (assumed to exist)", [OtherNode]),
+ test_server:do_times(Times, fun() -> pong = net_adm:ping(OtherNode) end),
+ stop_node(OtherNode),
%% Pings our own node many times.
- ?line Node = node(),
- ?line io:format("Pinging ~s (the same node)", [Node]),
- ?line test_server:do_times(Times, fun() -> pong = net_adm:ping(Node) end),
+ Node = node(),
+ io:format("Pinging ~s (the same node)", [Node]),
+ test_server:do_times(Times, fun() -> pong = net_adm:ping(Node) end),
ok.
bulk_send_small(Config) when is_list(Config) ->
- ?line bulk_send(64, 32).
+ bulk_send(64, 32).
bulk_send_big(Config) when is_list(Config) ->
- ?line bulk_send(32, 64).
+ bulk_send(32, 64).
bulk_send_bigbig(Config) when is_list(Config) ->
- ?line bulk_sendsend(32*5, 4).
+ bulk_sendsend(32*5, 4).
bulk_send(Terms, BinSize) ->
- ?line Dog = test_server:timetrap(test_server:seconds(30)),
-
- ?line io:format("Sending ~w binaries, each of size ~w K",
- [Terms, BinSize]),
- ?line {ok, Node} = start_node(bulk_receiver),
- ?line Recv = spawn(Node, erlang, apply, [fun receiver/2, [0, 0]]),
- ?line Bin = list_to_binary(lists:duplicate(BinSize*1024, 253)),
- ?line Size = Terms*size(Bin),
- ?line {Elapsed, {Terms, Size}} = test_server:timecall(?MODULE, sender,
- [Recv, Bin, Terms]),
- ?line stop_node(Node),
-
- ?line test_server:timetrap_cancel(Dog),
- {comment, integer_to_list(trunc(Size/1024/Elapsed+0.5)) ++ " K/s"}.
+ ct:timetrap({seconds, 30}),
+
+ io:format("Sending ~w binaries, each of size ~w K", [Terms, BinSize]),
+ {ok, Node} = start_node(bulk_receiver),
+ Recv = spawn(Node, erlang, apply, [fun receiver/2, [0, 0]]),
+ Bin = list_to_binary(lists:duplicate(BinSize*1024, 253)),
+ Size = Terms*size(Bin),
+ {Elapsed, {Terms, Size}} = test_server:timecall(?MODULE, sender,
+ [Recv, Bin, Terms]),
+ stop_node(Node),
+ {comment, integer_to_list(trunc(Size/1024/max(1,Elapsed)+0.5)) ++ " K/s"}.
bulk_sendsend(Terms, BinSize) ->
{Rate1, MonitorCount1} = bulk_sendsend2(Terms, BinSize, 5),
@@ -173,29 +146,29 @@ bulk_sendsend(Terms, BinSize) ->
true -> MonitorCount1 / MonitorCount2
end,
Comment = integer_to_list(Rate1) ++ " K/s, " ++
- integer_to_list(Rate2) ++ " K/s, " ++
- integer_to_list(MonitorCount1) ++ " monitor msgs, " ++
- integer_to_list(MonitorCount2) ++ " monitor msgs, " ++
- float_to_list(Ratio) ++ " monitor ratio",
+ integer_to_list(Rate2) ++ " K/s, " ++
+ integer_to_list(MonitorCount1) ++ " monitor msgs, " ++
+ integer_to_list(MonitorCount2) ++ " monitor msgs, " ++
+ float_to_list(Ratio) ++ " monitor ratio",
if
- %% A somewhat arbitrary ratio, but hopefully one that will
- %% accommodate a wide range of CPU speeds.
- Ratio > 8.0 ->
- {comment,Comment};
- true ->
- io:put_chars(Comment),
- ?line ?t:fail(ratio_too_low)
+ %% A somewhat arbitrary ratio, but hopefully one that will
+ %% accommodate a wide range of CPU speeds.
+ Ratio > 8.0 ->
+ {comment,Comment};
+ true ->
+ io:put_chars(Comment),
+ ct:fail(ratio_too_low)
end.
bulk_sendsend2(Terms, BinSize, BusyBufSize) ->
- ?line Dog = test_server:timetrap(test_server:seconds(30)),
+ ct:timetrap({seconds, 30}),
- ?line io:format("Sending ~w binaries, each of size ~w K",
- [Terms, BinSize]),
- ?line {ok, NodeRecv} = start_node(bulk_receiver),
- ?line Recv = spawn(NodeRecv, erlang, apply, [fun receiver/2, [0, 0]]),
- ?line Bin = list_to_binary(lists:duplicate(BinSize*1024, 253)),
- %%?line Size = Terms*size(Bin),
+ io:format("Sending ~w binaries, each of size ~w K",
+ [Terms, BinSize]),
+ {ok, NodeRecv} = start_node(bulk_receiver),
+ Recv = spawn(NodeRecv, erlang, apply, [fun receiver/2, [0, 0]]),
+ Bin = list_to_binary(lists:duplicate(BinSize*1024, 253)),
+ %%Size = Terms*size(Bin),
%% SLF LEFT OFF HERE.
%% When the caller uses small hunks, like 4k via
@@ -206,23 +179,21 @@ bulk_sendsend2(Terms, BinSize, BusyBufSize) ->
%% default busy size and "+zdbbl 5", and if the 5 case gets
%% "many many more" monitor messages, then we know we're working.
- ?line {ok, NodeSend} = start_node(bulk_sender, "+zdbbl " ++ integer_to_list(BusyBufSize)),
- ?line _Send = spawn(NodeSend, erlang, apply, [fun sendersender/4, [self(), Recv, Bin, Terms]]),
- ?line {Elapsed, {_TermsN, SizeN}, MonitorCount} =
- receive {sendersender, BigRes} ->
+ {ok, NodeSend} = start_node(bulk_sender, "+zdbbl " ++ integer_to_list(BusyBufSize)),
+ _Send = spawn(NodeSend, erlang, apply, [fun sendersender/4, [self(), Recv, Bin, Terms]]),
+ {Elapsed, {_TermsN, SizeN}, MonitorCount} =
+ receive {sendersender, BigRes} ->
BigRes
- end,
- ?line stop_node(NodeRecv),
- ?line stop_node(NodeSend),
-
- ?line test_server:timetrap_cancel(Dog),
+ end,
+ stop_node(NodeRecv),
+ stop_node(NodeSend),
{trunc(SizeN/1024/Elapsed+0.5), MonitorCount}.
sender(To, _Bin, 0) ->
To ! {done, self()},
receive
- Any ->
- Any
+ Any ->
+ Any
end;
sender(To, Bin, Left) ->
To ! {term, Bin},
@@ -233,9 +204,9 @@ sender(To, Bin, Left) ->
sendersender(Parent, To, Bin, Left) ->
erlang:system_monitor(self(), [busy_dist_port]),
[spawn(fun() -> sendersender2(To, Bin, Left, false) end) ||
- _ <- lists:seq(1,1)],
+ _ <- lists:seq(1,1)],
{USec, {Res, MonitorCount}} =
- timer:tc(?MODULE, sendersender2, [To, Bin, Left, true]),
+ timer:tc(?MODULE, sendersender2, [To, Bin, Left, true]),
Parent ! {sendersender, {USec/1000000, Res, MonitorCount}}.
sendersender2(To, Bin, Left, SendDone) ->
@@ -243,22 +214,22 @@ sendersender2(To, Bin, Left, SendDone) ->
sendersender3(To, _Bin, 0, SendDone, MonitorCount) ->
if SendDone ->
- To ! {done, self()};
+ To ! {done, self()};
true ->
- ok
+ ok
end,
receive
{monitor, _Pid, _Type, _Info} ->
sendersender3(To, _Bin, 0, SendDone, MonitorCount + 1)
after 0 ->
- if SendDone ->
- receive
- Any when is_tuple(Any), size(Any) == 2 ->
- {Any, MonitorCount}
- end;
- true ->
- exit(normal)
- end
+ if SendDone ->
+ receive
+ Any when is_tuple(Any), size(Any) == 2 ->
+ {Any, MonitorCount}
+ end;
+ true ->
+ exit(normal)
+ end
end;
sendersender3(To, Bin, Left, SendDone, MonitorCount) ->
To ! {term, Bin},
@@ -269,80 +240,74 @@ sendersender3(To, Bin, Left, SendDone, MonitorCount) ->
receiver(Terms, Size) ->
receive
- {term, Bin} ->
- receiver(Terms+1, Size+size(Bin));
- {done, ReplyTo} ->
- ReplyTo ! {Terms, Size}
+ {term, Bin} ->
+ receiver(Terms+1, Size+size(Bin));
+ {done, ReplyTo} ->
+ ReplyTo ! {Terms, Size}
end.
-local_send_big(doc) ->
- ["Sends several big message to an non-registered process on ",
- "the local node."];
+%% Sends several big message to an non-registered process on the local node.
local_send_big(Config) when is_list(Config) ->
- Data0=local_send_big(doc)++
- ["Tests sending small and big messages to a non-existing ",
- "local registered process."],
+ Data0= ["Tests sending small and big messages to a non-existing ",
+ "local registered process."],
Data1=[Data0,[Data0, Data0, [Data0], Data0],Data0],
Data2=Data0++lists:flatten(Data1)++
- list_to_binary(lists:flatten(Data1)),
+ list_to_binary(lists:flatten(Data1)),
Func=fun() -> Data2= {arbitrary_name, node()} ! Data2 end,
- ?line test_server:do_times(4096, Func),
+ test_server:do_times(4096, Func),
ok.
-local_send_small(doc) ->
- ["Sends a small message to an non-registered process on the ",
- "local node."];
+%% Sends a small message to an non-registered process on the local node.
local_send_small(Config) when is_list(Config) ->
Data={some_stupid, "arbitrary", 'Data'},
Func=fun() -> Data= {unregistered_name, node()} ! Data end,
- ?line test_server:do_times(4096, Func),
+ test_server:do_times(4096, Func),
ok.
-local_send_legal(doc) ->
- ["Sends data to a registered process on the local node, ",
- "as if it was on another node."];
+%% Sends data to a registered process on the local node, as if it was on another node.
local_send_legal(Config) when is_list(Config) ->
Times=16384,
- Data={local_send_legal(doc), local_send_legal(doc)},
+ Txt = "Some Not so random Data",
+ Data={[Txt,Txt,Txt], [Txt,Txt,Txt]},
Pid=spawn(?MODULE,receiver2, [0, 0]) ,
- ?line true=register(registered_process, Pid),
+ true=register(registered_process, Pid),
Func=fun() -> Data={registered_process, node()} ! Data end,
TotalSize=size(Data)*Times,
- ?line test_server:do_times(Times, Func),
+ test_server:do_times(Times, Func),
% Check that all msgs really came through.
Me=self(),
- ?line {done, Me}=
- {registered_process, node()} ! {done, Me},
+ {done, Me}=
+ {registered_process, node()} ! {done, Me},
receive
- {Times, TotalSize} ->
- ok;
- _ ->
- test_server:fail("Wrong number of msgs received.")
+ {Times, TotalSize} ->
+ ok;
+ _ ->
+ ct:fail("Wrong number of msgs received.")
end,
ok.
receiver2(Num, TotSize) ->
receive
- {done, ReplyTo} ->
- ReplyTo ! {Num, TotSize};
- Stuff ->
- receiver2(Num+1, TotSize+size(Stuff))
+ {done, ReplyTo} ->
+ ReplyTo ! {Num, TotSize};
+ Stuff ->
+ receiver2(Num+1, TotSize+size(Stuff))
end.
-link_to_busy(doc) -> "Test that link/1 to a busy distribution port works.";
+%% Test that link/1 to a busy distribution port works.
link_to_busy(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(60)),
- ?line {ok, Node} = start_node(link_to_busy),
- ?line Recv = spawn(Node, erlang, apply, [fun sink/1, [link_to_busy_sink]]),
+ ct:timetrap({seconds, 60}),
+ {ok, Node} = start_node(link_to_busy),
+ Recv = spawn(Node, erlang, apply, [fun sink/1, [link_to_busy_sink]]),
Tracer = case os:getenv("TRACE_BUSY_DIST_PORT") of
- "true" -> start_busy_dist_port_tracer();
- _ -> false
- end,
+ "true" -> start_busy_dist_port_tracer();
+ _ -> false
+ end,
%% We will spawn off a process which will try to link to the other
%% node. The linker process will not actually run until this
@@ -351,20 +316,19 @@ link_to_busy(Config) when is_list(Config) ->
%% process will block, too, because of the because busy port,
%% and will later be restarted.
- ?line do_busy_test(Node, fun () -> linker(Recv) end),
+ do_busy_test(Node, fun () -> linker(Recv) end),
%% Same thing, but we apply link/1 instead of calling it directly.
- ?line do_busy_test(Node, fun () -> applied_linker(Recv) end),
+ do_busy_test(Node, fun () -> applied_linker(Recv) end),
%% Same thing again, but we apply link/1 in the tail of a function.
- ?line do_busy_test(Node, fun () -> tail_applied_linker(Recv) end),
+ do_busy_test(Node, fun () -> tail_applied_linker(Recv) end),
%% Done.
- ?line stop_node(Node),
- ?line stop_busy_dist_port_tracer(Tracer),
- ?line test_server:timetrap_cancel(Dog),
+ stop_node(Node),
+ stop_busy_dist_port_tracer(Tracer),
ok.
linker(Pid) ->
@@ -379,16 +343,16 @@ applied_linker(Pid) ->
tail_applied_linker(Pid) ->
apply(erlang, link, [Pid]).
-
-exit_to_busy(doc) -> "Test that exit/2 to a busy distribution port works.";
+
+%% Test that exit/2 to a busy distribution port works.
exit_to_busy(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(60)),
- ?line {ok, Node} = start_node(exit_to_busy),
+ ct:timetrap({seconds, 60}),
+ {ok, Node} = start_node(exit_to_busy),
Tracer = case os:getenv("TRACE_BUSY_DIST_PORT") of
- "true" -> start_busy_dist_port_tracer();
- _ -> false
- end,
+ "true" -> start_busy_dist_port_tracer();
+ _ -> false
+ end,
%% We will spawn off a process which will try to exit a process on
%% the other node. That process will not actually run until this
@@ -397,59 +361,58 @@ exit_to_busy(Config) when is_list(Config) ->
%% too, because of the busy distribution port, and will be allowed
%% to continue when the port becomes non-busy.
- ?line Recv1 = spawn(Node, fun () -> sink(exit_to_busy_sink) end),
- ?line M1 = erlang:monitor(process, Recv1),
- ?line do_busy_test(Node, fun () -> joey_killer(Recv1) end),
- ?line receive
- {'DOWN', M1, process, Recv1, R1} ->
- ?line joey_said_die = R1
- end,
+ Recv1 = spawn(Node, fun () -> sink(exit_to_busy_sink) end),
+ M1 = erlang:monitor(process, Recv1),
+ do_busy_test(Node, fun () -> joey_killer(Recv1) end),
+ receive
+ {'DOWN', M1, process, Recv1, R1} ->
+ joey_said_die = R1
+ end,
%% Same thing, but tail call to exit/2.
- ?line Recv2 = spawn(Node, fun () -> sink(exit_to_busy_sink) end),
- ?line M2 = erlang:monitor(process, Recv2),
- ?line do_busy_test(Node, fun () -> tail_joey_killer(Recv2) end),
- ?line receive
- {'DOWN', M2, process, Recv2, R2} ->
- ?line joey_said_die = R2
- end,
+ Recv2 = spawn(Node, fun () -> sink(exit_to_busy_sink) end),
+ M2 = erlang:monitor(process, Recv2),
+ do_busy_test(Node, fun () -> tail_joey_killer(Recv2) end),
+ receive
+ {'DOWN', M2, process, Recv2, R2} ->
+ joey_said_die = R2
+ end,
%% Same thing, but we apply exit/2 instead of calling it directly.
- ?line Recv3 = spawn(Node, fun () -> sink(exit_to_busy_sink) end),
- ?line M3 = erlang:monitor(process, Recv3),
- ?line do_busy_test(Node, fun () -> applied_joey_killer(Recv3) end),
- ?line receive
- {'DOWN', M3, process, Recv3, R3} ->
- ?line joey_said_die = R3
- end,
+ Recv3 = spawn(Node, fun () -> sink(exit_to_busy_sink) end),
+ M3 = erlang:monitor(process, Recv3),
+ do_busy_test(Node, fun () -> applied_joey_killer(Recv3) end),
+ receive
+ {'DOWN', M3, process, Recv3, R3} ->
+ joey_said_die = R3
+ end,
%% Same thing again, but we apply exit/2 in the tail of a function.
- ?line Recv4 = spawn(Node, fun () -> sink(exit_to_busy_sink) end),
- ?line M4 = erlang:monitor(process, Recv4),
- ?line do_busy_test(Node, fun () -> tail_applied_joey_killer(Recv4) end),
- ?line receive
- {'DOWN', M4, process, Recv4, R4} ->
- ?line joey_said_die = R4
- end,
-
+ Recv4 = spawn(Node, fun () -> sink(exit_to_busy_sink) end),
+ M4 = erlang:monitor(process, Recv4),
+ do_busy_test(Node, fun () -> tail_applied_joey_killer(Recv4) end),
+ receive
+ {'DOWN', M4, process, Recv4, R4} ->
+ joey_said_die = R4
+ end,
+
%% Done.
- ?line stop_node(Node),
- ?line stop_busy_dist_port_tracer(Tracer),
- ?line test_server:timetrap_cancel(Dog),
+ stop_node(Node),
+ stop_busy_dist_port_tracer(Tracer),
ok.
make_busy_data() ->
Size = 1024*1024,
Key = '__busy__port__data__',
case get(Key) of
- undefined ->
- Data = list_to_binary(lists:duplicate(Size, 253)),
- put(Key, Data),
- Data;
- Data ->
- true = is_binary(Data),
- true = size(Data) == Size,
- Data
+ undefined ->
+ Data = list_to_binary(lists:duplicate(Size, 253)),
+ put(Key, Data),
+ Data;
+ Data ->
+ true = is_binary(Data),
+ true = size(Data) == Size,
+ Data
end.
make_busy(Node, Time) when is_integer(Time) ->
@@ -458,27 +421,27 @@ make_busy(Node, Time) when is_integer(Time) ->
Data = make_busy_data(),
%% first make port busy
Pid = spawn_link(fun () ->
- forever(fun () ->
- dport_reg_send(Node,
- '__noone__',
- Data)
- end)
- end),
+ forever(fun () ->
+ dport_reg_send(Node,
+ '__noone__',
+ Data)
+ end)
+ end),
receive after Own -> ok end,
until(fun () ->
- case process_info(Pid, status) of
- {status, suspended} -> true;
- _ -> false
- end
- end),
+ case process_info(Pid, status) of
+ {status, suspended} -> true;
+ _ -> false
+ end
+ end),
%% then dist entry
make_busy(Node, [nosuspend], Data),
Pid.
make_busy(Node, Opts, Data) ->
case erlang:send({'__noone__', Node}, Data, Opts) of
- nosuspend -> nosuspend;
- _ -> make_busy(Node, Opts, Data)
+ nosuspend -> nosuspend;
+ _ -> make_busy(Node, Opts, Data)
end.
unmake_busy(Pid) ->
@@ -491,29 +454,29 @@ do_busy_test(Node, Fun) ->
receive after 100 -> ok end,
Pinfo = process_info(P, [status, current_function]),
unmake_busy(Busy),
- ?t:format("~p : ~p~n", [P, Pinfo]),
+ io:format("~p : ~p~n", [P, Pinfo]),
case Pinfo of
- undefined ->
- receive
- {'DOWN', M, process, P, Reason} ->
- ?t:format("~p died with exit reason ~p~n", [P, Reason])
- end,
- ?t:fail(premature_death);
- _ ->
- %% Don't match arity; it is different in debug and
- %% optimized emulator
- [{status, suspended},
- {current_function, {erlang, bif_return_trap, _}}] = Pinfo,
- receive
- {'DOWN', M, process, P, Reason} ->
- ?t:format("~p died with exit reason ~p~n", [P, Reason]),
- normal = Reason
- end
+ undefined ->
+ receive
+ {'DOWN', M, process, P, Reason} ->
+ io:format("~p died with exit reason ~p~n", [P, Reason])
+ end,
+ ct:fail(premature_death);
+ _ ->
+ %% Don't match arity; it is different in debug and
+ %% optimized emulator
+ [{status, suspended},
+ {current_function, {erlang, bif_return_trap, _}}] = Pinfo,
+ receive
+ {'DOWN', M, process, P, Reason} ->
+ io:format("~p died with exit reason ~p~n", [P, Reason]),
+ normal = Reason
+ end
end.
remote_is_process_alive(Pid) ->
rpc:call(node(Pid), erlang, is_process_alive,
- [Pid]).
+ [Pid]).
joey_killer(Pid) ->
exit(Pid, joey_said_die),
@@ -535,234 +498,227 @@ sink(Name) ->
sink1() ->
receive
- _Any -> sink1()
+ _Any -> sink1()
end.
-lost_exit(doc) ->
- "Test that EXIT and DOWN messages send to another node are not lost if "
- "the distribution port is busy.";
+%% Test that EXIT and DOWN messages send to another node are not lost if
+%% the distribution port is busy.
lost_exit(Config) when is_list(Config) ->
- ?line {ok, Node} = start_node(lost_exit),
+ {ok, Node} = start_node(lost_exit),
Tracer = case os:getenv("TRACE_BUSY_DIST_PORT") of
- "true" -> start_busy_dist_port_tracer();
- _ -> false
- end,
+ "true" -> start_busy_dist_port_tracer();
+ _ -> false
+ end,
Self = self(),
Die = make_ref(),
- ?line R1 = spawn(fun () -> receive after infinity -> ok end end),
- ?line MR1 = erlang:monitor(process, R1),
-
- ?line {L1, ML1} = spawn_monitor(fun() ->
- link(R1),
- Self ! {self(), linked},
- receive
- Die ->
- exit(controlled_suicide)
- end
- end),
-
- ?line R2 = spawn(fun () ->
- M = erlang:monitor(process, L1),
- receive
- {'DOWN', M, process, L1, R} ->
- Self ! {self(), got_down_message, L1, R}
- end
- end),
-
- ?line receive {L1, linked} -> ok end,
-
+ R1 = spawn(fun () -> receive after infinity -> ok end end),
+ MR1 = erlang:monitor(process, R1),
+
+ {L1, ML1} = spawn_monitor(fun() ->
+ link(R1),
+ Self ! {self(), linked},
+ receive
+ Die ->
+ exit(controlled_suicide)
+ end
+ end),
+
+ R2 = spawn(fun () ->
+ M = erlang:monitor(process, L1),
+ receive
+ {'DOWN', M, process, L1, R} ->
+ Self ! {self(), got_down_message, L1, R}
+ end
+ end),
+
+ receive {L1, linked} -> ok end,
+
Busy = make_busy(Node, 2000),
receive after 100 -> ok end,
L1 ! Die,
- ?line receive
- {'DOWN', ML1, process, L1, RL1} ->
- ?line controlled_suicide = RL1
- end,
+ receive
+ {'DOWN', ML1, process, L1, RL1} ->
+ controlled_suicide = RL1
+ end,
receive after 500 -> ok end,
unmake_busy(Busy),
- ?line receive
- {'DOWN', MR1, process, R1, RR1} ->
- ?line controlled_suicide = RR1
- end,
-
- ?line receive
- {R2, got_down_message, L1, RR2} ->
- ?line controlled_suicide = RR2
- end,
+ receive
+ {'DOWN', MR1, process, R1, RR1} ->
+ controlled_suicide = RR1
+ end,
+
+ receive
+ {R2, got_down_message, L1, RR2} ->
+ controlled_suicide = RR2
+ end,
%% Done.
- ?line stop_busy_dist_port_tracer(Tracer),
- ?line stop_node(Node),
+ stop_busy_dist_port_tracer(Tracer),
+ stop_node(Node),
ok.
dummy_waiter() ->
receive
after infinity ->
- ok
+ ok
end.
-link_to_dead(doc) ->
- ["Test that linking to a dead remote process gives an EXIT message ",
- "AND that the link is teared down."];
+%% Test that linking to a dead remote process gives an EXIT message
+%% AND that the link is teared down.
link_to_dead(Config) when is_list(Config) ->
- ?line process_flag(trap_exit, true),
- ?line {ok, Node} = start_node(link_to_dead),
-% ?line monitor_node(Node, true),
- ?line net_adm:ping(Node), %% Ts_cross_server workaround.
- ?line Pid = spawn(Node, ?MODULE, dead_process, []),
+ process_flag(trap_exit, true),
+ {ok, Node} = start_node(link_to_dead),
+ % monitor_node(Node, true),
+ net_adm:ping(Node), %% Ts_cross_server workaround.
+ Pid = spawn(Node, ?MODULE, dead_process, []),
receive
after 5000 -> ok
end,
- ?line link(Pid),
- ?line receive
- {'EXIT', Pid, noproc} ->
- ok;
- Other ->
- ?line test_server:fail({unexpected_message, Other})
- after 5000 ->
- ?line test_server:fail(nothing_received)
- end,
- ?line {links, Links} = process_info(self(), links),
- ?line io:format("Pid=~p, links=~p", [Pid, Links]),
- ?line false = lists:member(Pid, Links),
- ?line stop_node(Node),
- ?line receive
- Message ->
- ?line test_server:fail({unexpected_message, Message})
- after 3000 ->
- ok
- end,
+ link(Pid),
+ receive
+ {'EXIT', Pid, noproc} ->
+ ok;
+ Other ->
+ ct:fail({unexpected_message, Other})
+ after 5000 ->
+ ct:fail(nothing_received)
+ end,
+ {links, Links} = process_info(self(), links),
+ io:format("Pid=~p, links=~p", [Pid, Links]),
+ false = lists:member(Pid, Links),
+ stop_node(Node),
+ receive
+ Message ->
+ ct:fail({unexpected_message, Message})
+ after 3000 ->
+ ok
+ end,
ok.
-
+
dead_process() ->
erlang:error(die).
-link_to_dead_new_node(doc) ->
- ["Test that linking to a pid on node that has gone and restarted gives ",
- "the correct EXIT message (OTP-2304)."];
+%% Test that linking to a pid on node that has gone and restarted gives
+%% the correct EXIT message (OTP-2304).
link_to_dead_new_node(Config) when is_list(Config) ->
- ?line process_flag(trap_exit, true),
+ process_flag(trap_exit, true),
%% Start the node, get a Pid and stop the node again.
- ?line {ok, Node} = start_node(link_to_dead_new_node),
- ?line Pid = spawn(Node, ?MODULE, dead_process, []),
- ?line stop_node(Node),
+ {ok, Node} = start_node(link_to_dead_new_node),
+ Pid = spawn(Node, ?MODULE, dead_process, []),
+ stop_node(Node),
%% Start a new node with the same name.
- ?line {ok, Node} = start_node(link_to_dead_new_node),
- ?line link(Pid),
- ?line receive
- {'EXIT', Pid, noproc} ->
- ok;
- Other ->
- ?line test_server:fail({unexpected_message, Other})
- after 5000 ->
- ?line test_server:fail(nothing_received)
- end,
+ {ok, Node} = start_node(link_to_dead_new_node),
+ link(Pid),
+ receive
+ {'EXIT', Pid, noproc} ->
+ ok;
+ Other ->
+ ct:fail({unexpected_message, Other})
+ after 5000 ->
+ ct:fail(nothing_received)
+ end,
%% Make sure that the link wasn't created.
- ?line {links, Links} = process_info(self(), links),
- ?line io:format("Pid=~p, links=~p", [Pid, Links]),
- ?line false = lists:member(Pid, Links),
- ?line stop_node(Node),
- ?line receive
- Message ->
- ?line test_server:fail({unexpected_message, Message})
- after 3000 ->
- ok
- end,
+ {links, Links} = process_info(self(), links),
+ io:format("Pid=~p, links=~p", [Pid, Links]),
+ false = lists:member(Pid, Links),
+ stop_node(Node),
+ receive
+ Message ->
+ ct:fail({unexpected_message, Message})
+ after 3000 ->
+ ok
+ end,
ok.
-applied_monitor_node(doc) ->
- "Test that monitor_node/2 works when applied.";
+%% Test that monitor_node/2 works when applied.
applied_monitor_node(Config) when is_list(Config) ->
- ?line NonExisting = list_to_atom("__non_existing__@" ++ hostname()),
+ NonExisting = list_to_atom("__non_existing__@" ++ hostname()),
%% Tail-recursive call to apply (since the node is non-existing,
%% there will be a trap).
- ?line true = tail_apply(erlang, monitor_node, [NonExisting, true]),
- ?line [{nodedown, NonExisting}] = test_server:messages_get(),
+ true = tail_apply(erlang, monitor_node, [NonExisting, true]),
+ [{nodedown, NonExisting}] = test_server:messages_get(),
%% Ordinary call (with trap).
- ?line true = apply(erlang, monitor_node, [NonExisting, true]),
- ?line [{nodedown, NonExisting}] = test_server:messages_get(),
-
+ true = apply(erlang, monitor_node, [NonExisting, true]),
+ [{nodedown, NonExisting}] = test_server:messages_get(),
+
ok.
tail_apply(M, F, A) ->
apply(M, F, A).
-ref_port_roundtrip(doc) ->
- "Test that sending a port or reference to another node and back again "
- "doesn't correct them in any way.";
+%% Test that sending a port or reference to another node and back again
+%% doesn't correct them in any way.
ref_port_roundtrip(Config) when is_list(Config) ->
- ?line process_flag(trap_exit, true),
- ?line Port = open_port({spawn, efile}, []),
- ?line Ref = make_ref(),
- ?line {ok, Node} = start_node(ref_port_roundtrip),
- ?line net_adm:ping(Node),
- ?line Term = {Port, Ref},
- ?line io:format("Term before: ~p", [show_term(Term)]),
- ?line Pid = spawn_link(Node, ?MODULE, roundtrip, [Term]),
- ?line receive after 5000 -> ok end,
- ?line stop_node(Node),
- ?line receive
- {'EXIT', Pid, {Port, Ref}} ->
- ?line io:format("Term after: ~p", [show_term(Term)]),
- ok;
- Other ->
- ?line io:format("Term after: ~p", [show_term(Term)]),
- ?line test_server:fail({unexpected, Other})
- after 10000 ->
- ?line test_server:fail(timeout)
- end,
+ process_flag(trap_exit, true),
+ Port = open_port({spawn, efile}, []),
+ Ref = make_ref(),
+ {ok, Node} = start_node(ref_port_roundtrip),
+ net_adm:ping(Node),
+ Term = {Port, Ref},
+ io:format("Term before: ~p", [show_term(Term)]),
+ Pid = spawn_link(Node, ?MODULE, roundtrip, [Term]),
+ receive after 5000 -> ok end,
+ stop_node(Node),
+ receive
+ {'EXIT', Pid, {Port, Ref}} ->
+ io:format("Term after: ~p", [show_term(Term)]),
+ ok;
+ Other ->
+ io:format("Term after: ~p", [show_term(Term)]),
+ ct:fail({unexpected, Other})
+ after 10000 ->
+ ct:fail(timeout)
+ end,
ok.
roundtrip(Term) ->
exit(Term).
-nil_roundtrip(doc) ->
- "Test that the smallest external term [] aka NIL can be sent to "
- "another node node and back again.";
+%% Test that the smallest external term [] aka NIL can be sent to
+%% another node node and back again.
nil_roundtrip(Config) when is_list(Config) ->
- ?line process_flag(trap_exit, true),
- ?line {ok, Node} = start_node(nil_roundtrip),
- ?line net_adm:ping(Node),
- ?line Pid = spawn_link(Node, ?MODULE, bounce, [self()]),
- ?line Pid ! [],
- ?line receive
- [] ->
- ?line receive
- {'EXIT', Pid, []} ->
- ?line stop_node(Node),
- ok
- end
- end.
+ process_flag(trap_exit, true),
+ {ok, Node} = start_node(nil_roundtrip),
+ net_adm:ping(Node),
+ Pid = spawn_link(Node, ?MODULE, bounce, [self()]),
+ Pid ! [],
+ receive
+ [] ->
+ receive
+ {'EXIT', Pid, []} ->
+ stop_node(Node),
+ ok
+ end
+ end.
bounce(Dest) ->
receive Msg ->
- Dest ! Msg,
- exit(Msg)
+ Dest ! Msg,
+ exit(Msg)
end.
show_term(Term) ->
binary_to_list(term_to_binary(Term)).
-stop_dist(doc) ->
- ["Tests behaviour after net_kernel:stop (OTP-2586)."];
+%% Tests behaviour after net_kernel:stop (OTP-2586).
stop_dist(Config) when is_list(Config) ->
- ?line Str = os:cmd(atom_to_list(lib:progname())
- ++ " -noshell -pa "
- ++ ?config(data_dir, Config)
- ++ " -s run"),
+ Str = os:cmd(atom_to_list(lib:progname())
+ ++ " -noshell -pa "
+ ++ proplists:get_value(data_dir, Config)
+ ++ " -s run"),
%% The "true" may be followed by an error report, so ignore anything that
%% follows it.
- ?line "true\n"++_ = Str,
+ "true\n"++_ = Str,
%% "May fail on FreeBSD due to differently configured name lookup - ask Arndt",
%% if you can find him.
@@ -770,37 +726,31 @@ stop_dist(Config) when is_list(Config) ->
ok.
-trap_bif_1(doc) ->
- [""];
trap_bif_1(Config) when is_list(Config) ->
- ?line {true} = tr1(),
+ {true} = tr1(),
ok.
-trap_bif_2(doc) ->
- [""];
trap_bif_2(Config) when is_list(Config) ->
- ?line {true} = tr2(),
+ {true} = tr2(),
ok.
-trap_bif_3(doc) ->
- [""];
trap_bif_3(Config) when is_list(Config) ->
- ?line {hoo} = tr3(),
+ {hoo} = tr3(),
ok.
tr1() ->
- ?line NonExisting = 'abc@boromir',
- ?line X = erlang:monitor_node(NonExisting, true),
+ NonExisting = 'abc@boromir',
+ X = erlang:monitor_node(NonExisting, true),
{X}.
tr2() ->
- ?line NonExisting = 'abc@boromir',
- ?line X = apply(erlang, monitor_node, [NonExisting, true]),
+ NonExisting = 'abc@boromir',
+ X = apply(erlang, monitor_node, [NonExisting, true]),
{X}.
tr3() ->
- ?line NonExisting = 'abc@boromir',
- ?line X = {NonExisting, glirp} ! hoo,
+ NonExisting = 'abc@boromir',
+ X = {NonExisting, glirp} ! hoo,
{X}.
@@ -821,60 +771,61 @@ tr3() ->
% * n2 gets pang when pinging n1
% * n2 forces connection by using net_kernel:connect_node (ovverrides)
% * n2 gets pong when pinging n1.
-dist_auto_connect_once(doc) -> "Test the dist_auto_connect once kernel parameter";
+
+%% Test the dist_auto_connect once kernel parameter
dist_auto_connect_once(Config) when is_list(Config) ->
- ?line Sock = start_relay_node(dist_auto_connect_relay_node,[]),
- ?line NN = inet_rpc_nodename(Sock),
- ?line Sock2 = start_relay_node(dist_auto_connect_once_node,
- "-kernel dist_auto_connect once"),
- ?line NN2 = inet_rpc_nodename(Sock2),
- ?line {ok,[]} = do_inet_rpc(Sock,erlang,nodes,[]),
- ?line {ok, pong} = do_inet_rpc(Sock2,net_adm,ping,[NN]),
- ?line {ok,[NN2]} = do_inet_rpc(Sock,erlang,nodes,[]),
- ?line {ok,[NN]} = do_inet_rpc(Sock2,erlang,nodes,[]),
- ?line [_,HostPartPeer] = string:tokens(atom_to_list(NN),"@"),
- ?line [_,MyHostPart] = string:tokens(atom_to_list(node()),"@"),
+ Sock = start_relay_node(dist_auto_connect_relay_node,[]),
+ NN = inet_rpc_nodename(Sock),
+ Sock2 = start_relay_node(dist_auto_connect_once_node,
+ "-kernel dist_auto_connect once"),
+ NN2 = inet_rpc_nodename(Sock2),
+ {ok,[]} = do_inet_rpc(Sock,erlang,nodes,[]),
+ {ok, pong} = do_inet_rpc(Sock2,net_adm,ping,[NN]),
+ {ok,[NN2]} = do_inet_rpc(Sock,erlang,nodes,[]),
+ {ok,[NN]} = do_inet_rpc(Sock2,erlang,nodes,[]),
+ [_,HostPartPeer] = string:tokens(atom_to_list(NN),"@"),
+ [_,MyHostPart] = string:tokens(atom_to_list(node()),"@"),
% Give net_kernel a chance to change the state of the node to up to.
- ?line receive after 1000 -> ok end,
+ receive after 1000 -> ok end,
case HostPartPeer of
- MyHostPart ->
- ?line ok = stop_relay_node(Sock),
- ?line {ok,pang} = do_inet_rpc(Sock2,net_adm,ping,[NN]);
- _ ->
- ?line {ok, true} = do_inet_rpc(Sock,net_kernel,disconnect,[NN2]),
- receive
- after 500 -> ok
- end
+ MyHostPart ->
+ ok = stop_relay_node(Sock),
+ {ok,pang} = do_inet_rpc(Sock2,net_adm,ping,[NN]);
+ _ ->
+ {ok, true} = do_inet_rpc(Sock,net_kernel,disconnect,[NN2]),
+ receive
+ after 500 -> ok
+ end
end,
- ?line {ok, []} = do_inet_rpc(Sock2,erlang,nodes,[]),
+ {ok, []} = do_inet_rpc(Sock2,erlang,nodes,[]),
Sock3 = case HostPartPeer of
- MyHostPart ->
- ?line start_relay_node(dist_auto_connect_relay_node,[]);
- _ ->
- Sock
- end,
- ?line TS1 = timestamp(),
- ?line {ok, pang} = do_inet_rpc(Sock2,net_adm,ping,[NN]),
- ?line TS2 = timestamp(),
+ MyHostPart ->
+ start_relay_node(dist_auto_connect_relay_node,[]);
+ _ ->
+ Sock
+ end,
+ TS1 = timestamp(),
+ {ok, pang} = do_inet_rpc(Sock2,net_adm,ping,[NN]),
+ TS2 = timestamp(),
RefT = net_kernel:connecttime() - 1000,
- ?line true = ((TS2 - TS1) < RefT),
- ?line TS3 = timestamp(),
- ?line {ok, true} = do_inet_rpc(Sock2,erlang,monitor_node,
- [NN,true,[allow_passive_connect]]),
- ?line TS4 = timestamp(),
- ?line true = ((TS4 - TS3) > RefT),
- ?line {ok, pong} = do_inet_rpc(Sock3,net_adm,ping,[NN2]),
- ?line {ok, pong} = do_inet_rpc(Sock2,net_adm,ping,[NN]),
- ?line {ok, true} = do_inet_rpc(Sock3,net_kernel,disconnect,[NN2]),
+ true = ((TS2 - TS1) < RefT),
+ TS3 = timestamp(),
+ {ok, true} = do_inet_rpc(Sock2,erlang,monitor_node,
+ [NN,true,[allow_passive_connect]]),
+ TS4 = timestamp(),
+ true = ((TS4 - TS3) > RefT),
+ {ok, pong} = do_inet_rpc(Sock3,net_adm,ping,[NN2]),
+ {ok, pong} = do_inet_rpc(Sock2,net_adm,ping,[NN]),
+ {ok, true} = do_inet_rpc(Sock3,net_kernel,disconnect,[NN2]),
receive
after 500 -> ok
end,
- ?line {ok, pang} = do_inet_rpc(Sock2,net_adm,ping,[NN]),
- ?line {ok, true} = do_inet_rpc(Sock2,net_kernel,connect_node,[NN]),
- ?line {ok, pong} = do_inet_rpc(Sock2,net_adm,ping,[NN]),
- ?line stop_relay_node(Sock3),
- ?line stop_relay_node(Sock2).
-
+ {ok, pang} = do_inet_rpc(Sock2,net_adm,ping,[NN]),
+ {ok, true} = do_inet_rpc(Sock2,net_kernel,connect_node,[NN]),
+ {ok, pong} = do_inet_rpc(Sock2,net_adm,ping,[NN]),
+ stop_relay_node(Sock3),
+ stop_relay_node(Sock2).
+
%% Start a relay node and a lonely (dist_auto_connect never) node.
@@ -883,51 +834,51 @@ dist_auto_connect_once(Config) when is_list(Config) ->
%% Result is sent here through relay node.
dist_auto_connect_never(Config) when is_list(Config) ->
Self = self(),
- ?line {ok, RelayNode} =
- start_node(dist_auto_connect_relay),
- ?line spawn(RelayNode,
- fun() ->
- register(dist_auto_connect_relay, self()),
- dist_auto_connect_relay(Self)
- end),
- ?line {ok, Handle} = dist_auto_connect_start(dist_auto_connect, never),
- ?line Result =
- receive
- {do_dist_auto_connect, ok} ->
- ok;
- {do_dist_auto_connect, Error} ->
- {error, Error};
- Other ->
- {error, Other}
- after 32000 ->
- timeout
- end,
- ?line stop_node(RelayNode),
- ?line Stopped = dist_auto_connect_stop(Handle),
- ?line Junk =
- receive
- {do_dist_auto_connect, _} = J ->
- J
- after 0 ->
- ok
- end,
- ?line {ok, ok, ok} = {Result, Stopped, Junk},
+ {ok, RelayNode} =
+ start_node(dist_auto_connect_relay),
+ spawn(RelayNode,
+ fun() ->
+ register(dist_auto_connect_relay, self()),
+ dist_auto_connect_relay(Self)
+ end),
+ {ok, Handle} = dist_auto_connect_start(dist_auto_connect, never),
+ Result =
+ receive
+ {do_dist_auto_connect, ok} ->
+ ok;
+ {do_dist_auto_connect, Error} ->
+ {error, Error};
+ Other ->
+ {error, Other}
+ after 32000 ->
+ timeout
+ end,
+ stop_node(RelayNode),
+ Stopped = dist_auto_connect_stop(Handle),
+ Junk =
+ receive
+ {do_dist_auto_connect, _} = J ->
+ J
+ after 0 ->
+ ok
+ end,
+ {ok, ok, ok} = {Result, Stopped, Junk},
ok.
do_dist_auto_connect([never]) ->
Node = list_to_atom("dist_auto_connect_relay@" ++ hostname()),
io:format("~p:do_dist_auto_connect([false]) Node=~p~n",
- [?MODULE, Node]),
+ [?MODULE, Node]),
Ping = net_adm:ping(Node),
io:format("~p:do_dist_auto_connect([false]) Ping=~p~n",
- [?MODULE, Ping]),
+ [?MODULE, Ping]),
Result = case Ping of
- pang -> ok;
- _ -> {error, Ping}
- end,
+ pang -> ok;
+ _ -> {error, Ping}
+ end,
io:format("~p:do_dist_auto_connect([false]) Result=~p~n",
- [?MODULE, Result]),
+ [?MODULE, Result]),
net_kernel:connect_node(Node),
catch {dist_auto_connect_relay, Node} ! {do_dist_auto_connect, Result};
% receive after 1000 -> ok end,
@@ -935,10 +886,10 @@ do_dist_auto_connect([never]) ->
do_dist_auto_connect(Arg) ->
io:format("~p:do_dist_auto_connect(~p)~n",
- [?MODULE, Arg]),
+ [?MODULE, Arg]),
receive after 10000 -> ok end,
halt().
-
+
dist_auto_connect_start(Name, Value) when is_atom(Name) ->
dist_auto_connect_start(atom_to_list(Name), Value);
@@ -948,16 +899,16 @@ dist_auto_connect_start(Name, Value) when is_list(Name), is_atom(Value) ->
ValueStr = atom_to_list(Value),
Cookie = atom_to_list(erlang:get_cookie()),
Cmd = lists:concat(
- [%"xterm -e ",
- atom_to_list(lib:progname()),
-% " -noinput ",
- " -detached ",
- long_or_short(), " ", Name,
- " -setcookie ", Cookie,
- " -pa ", ModuleDir,
- " -s ", atom_to_list(?MODULE),
- " do_dist_auto_connect ", ValueStr,
- " -kernel dist_auto_connect ", ValueStr]),
+ [%"xterm -e ",
+ atom_to_list(lib:progname()),
+ % " -noinput ",
+ " -detached ",
+ long_or_short(), " ", Name,
+ " -setcookie ", Cookie,
+ " -pa ", ModuleDir,
+ " -s ", atom_to_list(?MODULE),
+ " do_dist_auto_connect ", ValueStr,
+ " -kernel dist_auto_connect ", ValueStr]),
io:format("~p:dist_auto_connect_start() cmd: ~p~n", [?MODULE, Cmd]),
Port = open_port({spawn, Cmd}, [stream]),
{ok, {Port, Node}}.
@@ -975,102 +926,83 @@ dist_auto_connect_stop(Port, _Node, Pid, N) when is_integer(N), N =< 0 ->
Result;
dist_auto_connect_stop(Port, Node, Pid, N) when is_integer(N) ->
case net_adm:ping(Node) of
- pong ->
- receive after 100 -> ok end,
- dist_auto_connect_stop(Port, Node, Pid, N-100);
- pang ->
- exit(Pid, normal),
- catch erlang:port_close(Port),
- io:format("~p:dist_auto_connect_stop() ok~n", [?MODULE]),
- ok
+ pong ->
+ receive after 100 -> ok end,
+ dist_auto_connect_stop(Port, Node, Pid, N-100);
+ pang ->
+ exit(Pid, normal),
+ catch erlang:port_close(Port),
+ io:format("~p:dist_auto_connect_stop() ok~n", [?MODULE]),
+ ok
end.
dist_auto_connect_relay(Parent) ->
receive X ->
- catch Parent ! X
+ catch Parent ! X
end,
dist_auto_connect_relay(Parent).
-dist_parallel_send(doc) ->
- [];
-dist_parallel_send(suite) ->
- [];
dist_parallel_send(Config) when is_list(Config) ->
- ?line {ok, RNode} = start_node(dist_parallel_receiver),
- ?line {ok, SNode} = start_node(dist_parallel_sender),
- ?line WatchDog = spawn_link(
- fun () ->
- TRef = erlang:start_timer((?DEFAULT_TIMETRAP
- div 2),
- self(),
- oops),
- receive
- {timeout, TRef, _ } ->
- spawn(SNode,
- fun () ->
- abort(timeout)
- end),
- spawn(RNode,
- fun () ->
- abort(timeout)
- end)
-%% rpc:cast(SNode, erlang, halt,
-%% ["Timetrap (sender)"]),
-%% rpc:cast(RNode, erlang, halt,
-%% ["Timetrap (receiver)"])
- end
- end),
- ?line MkSndrs = fun (Receiver) ->
- lists:map(fun (_) ->
- spawn_link(SNode,
- ?MODULE,
- dist_parallel_sender,
- [self(),
- Receiver,
- 1000])
- end,
- lists:seq(1, 64))
- end,
- ?line SndrsStart = fun (Sndrs) ->
- Parent = self(),
- spawn_link(
- SNode,
- fun () ->
- lists:foreach(fun (P) ->
- P ! {go, Parent}
- end,
- Sndrs)
- end)
- end,
- ?line SndrsWait = fun (Sndrs) ->
- lists:foreach(fun (P) ->
- receive {P, done} -> ok end
- end,
- Sndrs)
- end,
- ?line DPR = spawn_link(RNode, ?MODULE, dist_parallel_receiver, []),
- ?line Sndrs1 = MkSndrs(DPR),
- ?line SndrsStart(Sndrs1),
- ?line SndrsWait(Sndrs1),
- ?line unlink(DPR),
- ?line exit(DPR, bang),
-
- ?line DEPR = spawn_link(RNode, ?MODULE, dist_evil_parallel_receiver, []),
- ?line Sndrs2 = MkSndrs(DEPR),
- ?line SndrsStart(Sndrs2),
- ?line SndrsWait(Sndrs2),
- ?line unlink(DEPR),
- ?line exit(DEPR, bang),
-
- ?line unlink(WatchDog),
- ?line exit(WatchDog, bang),
-
- ?line stop_node(RNode),
- ?line stop_node(SNode),
-
- ?line ok.
+ {ok, RNode} = start_node(dist_parallel_receiver),
+ {ok, SNode} = start_node(dist_parallel_sender),
+ WatchDog = spawn_link(
+ fun () ->
+ TRef = erlang:start_timer((2*60*1000), self(), oops),
+ receive
+ {timeout, TRef, _ } ->
+ spawn(SNode, fun () -> abort(timeout) end),
+ spawn(RNode, fun () -> abort(timeout) end)
+ %% rpc:cast(SNode, erlang, halt,
+ %% ["Timetrap (sender)"]),
+ %% rpc:cast(RNode, erlang, halt,
+ %% ["Timetrap (receiver)"])
+ end
+ end),
+ MkSndrs = fun (Receiver) ->
+ lists:map(fun (_) ->
+ spawn_link(SNode,
+ ?MODULE,
+ dist_parallel_sender,
+ [self(), Receiver, 1000])
+ end, lists:seq(1, 64))
+ end,
+ SndrsStart = fun (Sndrs) ->
+ Parent = self(),
+ spawn_link(SNode,
+ fun () ->
+ lists:foreach(fun (P) ->
+ P ! {go, Parent}
+ end, Sndrs)
+ end)
+ end,
+ SndrsWait = fun (Sndrs) ->
+ lists:foreach(fun (P) ->
+ receive {P, done} -> ok end
+ end, Sndrs)
+ end,
+ DPR = spawn_link(RNode, ?MODULE, dist_parallel_receiver, []),
+ Sndrs1 = MkSndrs(DPR),
+ SndrsStart(Sndrs1),
+ SndrsWait(Sndrs1),
+ unlink(DPR),
+ exit(DPR, bang),
+
+ DEPR = spawn_link(RNode, ?MODULE, dist_evil_parallel_receiver, []),
+ Sndrs2 = MkSndrs(DEPR),
+ SndrsStart(Sndrs2),
+ SndrsWait(Sndrs2),
+ unlink(DEPR),
+ exit(DEPR, bang),
+
+ unlink(WatchDog),
+ exit(WatchDog, bang),
+
+ stop_node(RNode),
+ stop_node(SNode),
+
+ ok.
do_dist_parallel_sender(Parent, _Receiver, 0) ->
Parent ! {self(), done};
@@ -1092,71 +1024,72 @@ dist_evil_parallel_receiver() ->
dist_evil_parallel_receiver().
atom_roundtrip(Config) when is_list(Config) ->
- ?line AtomData = atom_data(),
- ?line verify_atom_data(AtomData),
- ?line {ok, Node} = start_node(Config),
- ?line do_atom_roundtrip(Node, AtomData),
- ?line stop_node(Node),
- ?line ok.
+ AtomData = atom_data(),
+ verify_atom_data(AtomData),
+ {ok, Node} = start_node(Config),
+ do_atom_roundtrip(Node, AtomData),
+ stop_node(Node),
+ ok.
atom_roundtrip_r15b(Config) when is_list(Config) ->
- case ?t:is_release_available("r15b") of
- true ->
- ?line AtomData = atom_data(),
- ?line verify_atom_data(AtomData),
- ?line {ok, Node} = start_node(Config, [], "r15b"),
- ?line do_atom_roundtrip(Node, AtomData),
- ?line stop_node(Node),
- ?line ok;
- false ->
- ?line {skip,"No OTP R15B available"}
+ case test_server:is_release_available("r15b") of
+ true ->
+ ct:timetrap({minutes, 6}),
+ AtomData = atom_data(),
+ verify_atom_data(AtomData),
+ {ok, Node} = start_node(Config, [], "r15b"),
+ do_atom_roundtrip(Node, AtomData),
+ stop_node(Node),
+ ok;
+ false ->
+ {skip,"No OTP R15B available"}
end.
unicode_atom_roundtrip(Config) when is_list(Config) ->
- ?line AtomData = unicode_atom_data(),
- ?line verify_atom_data(AtomData),
- ?line {ok, Node} = start_node(Config),
- ?line do_atom_roundtrip(Node, AtomData),
- ?line stop_node(Node),
- ?line ok.
+ AtomData = unicode_atom_data(),
+ verify_atom_data(AtomData),
+ {ok, Node} = start_node(Config),
+ do_atom_roundtrip(Node, AtomData),
+ stop_node(Node),
+ ok.
do_atom_roundtrip(Node, AtomData) ->
- ?line Parent = self(),
- ?line Proc = spawn_link(Node, fun () -> verify_atom_data_loop(Parent) end),
- ?line Proc ! {self(), AtomData},
- ?line receive {Proc, AD1} -> AtomData = AD1 end,
- ?line Proc ! {self(), AtomData},
- ?line receive {Proc, AD2} -> AtomData = AD2 end,
- ?line RevAtomData = lists:reverse(AtomData),
- ?line Proc ! {self(), RevAtomData},
- ?line receive {Proc, RAD1} -> RevAtomData = RAD1 end,
- ?line unlink(Proc),
- ?line exit(Proc, bang),
- ?line ok.
+ Parent = self(),
+ Proc = spawn_link(Node, fun () -> verify_atom_data_loop(Parent) end),
+ Proc ! {self(), AtomData},
+ receive {Proc, AD1} -> AtomData = AD1 end,
+ Proc ! {self(), AtomData},
+ receive {Proc, AD2} -> AtomData = AD2 end,
+ RevAtomData = lists:reverse(AtomData),
+ Proc ! {self(), RevAtomData},
+ receive {Proc, RAD1} -> RevAtomData = RAD1 end,
+ unlink(Proc),
+ exit(Proc, bang),
+ ok.
verify_atom_data_loop(From) ->
receive
- {From, AtomData} ->
- verify_atom_data(AtomData),
- From ! {self(), AtomData},
- verify_atom_data_loop(From)
+ {From, AtomData} ->
+ verify_atom_data(AtomData),
+ From ! {self(), AtomData},
+ verify_atom_data_loop(From)
end.
atom_data() ->
lists:map(fun (N) ->
- ATxt = "a"++integer_to_list(N),
- {list_to_atom(ATxt), ATxt}
- end,
- lists:seq(1, 2000)).
+ ATxt = "a"++integer_to_list(N),
+ {list_to_atom(ATxt), ATxt}
+ end,
+ lists:seq(1, 2000)).
verify_atom_data(AtomData) ->
lists:foreach(fun ({Atom, AtomTxt}) when is_atom(Atom) ->
- AtomTxt = atom_to_list(Atom);
- ({PPR, AtomTxt}) ->
- % Pid, Port, or Ref
- AtomTxt = atom_to_list(node(PPR))
- end,
- AtomData).
+ AtomTxt = atom_to_list(Atom);
+ ({PPR, AtomTxt}) ->
+ % Pid, Port, or Ref
+ AtomTxt = atom_to_list(node(PPR))
+ end,
+ AtomData).
uc_atom_tup(ATxt) ->
Atom = string_to_atom(ATxt),
@@ -1209,9 +1142,8 @@ unicode_atom_data() ->
uc_atom_tup(lists:seq(65500, 65754)),
uc_atom_tup(lists:seq(65500, 65563))
| lists:map(fun (N) ->
- uc_atom_tup(lists:seq(64000+N, 64254+N))
- end,
- lists:seq(1, 2000))].
+ uc_atom_tup(lists:seq(64000+N, 64254+N))
+ end, lists:seq(1, 2000))].
contended_atom_cache_entry(Config) when is_list(Config) ->
contended_atom_cache_entry_test(Config, latin1).
@@ -1220,79 +1152,77 @@ contended_unicode_atom_cache_entry(Config) when is_list(Config) ->
contended_atom_cache_entry_test(Config, unicode).
contended_atom_cache_entry_test(Config, Type) ->
- ?line TestServer = self(),
- ?line ProcessPairs = 10,
- ?line Msgs = 100000,
- ?line {ok, SNode} = start_node(Config),
- ?line {ok, RNode} = start_node(Config),
- ?line Success = make_ref(),
- ?line spawn_link(
- SNode,
- fun () ->
- erts_debug:set_internal_state(available_internal_state,
- true),
- Master = self(),
- CIX = get_cix(),
- TestAtoms = case Type of
- latin1 ->
- get_conflicting_atoms(CIX,
- ProcessPairs);
- unicode ->
- get_conflicting_unicode_atoms(CIX,
- ProcessPairs)
- end,
- io:format("Testing with the following atoms all using "
- "cache index ~p:~n ~w~n",
- [CIX, TestAtoms]),
- Ps = lists:map(
- fun (A) ->
- Ref = make_ref(),
- R = spawn_link(
- RNode,
- fun () ->
- Atom = receive
- {Ref, txt, ATxt} ->
- case Type of
- latin1 ->
- list_to_atom(ATxt);
- unicode ->
- string_to_atom(ATxt)
- end
- end,
- receive_ref_atom(Ref,
- Atom,
- Msgs),
- Master ! {self(), success}
- end),
- S = spawn_link(
- SNode,
- fun () ->
- receive go -> ok end,
- R ! {Ref,
- txt,
- atom_to_list(A)},
- send_ref_atom(R, Ref, A, Msgs)
- end),
- {S, R}
- end,
- TestAtoms),
- lists:foreach(fun ({S, _}) ->
- S ! go
- end,
- Ps),
- lists:foreach(fun ({_, R}) ->
- receive {R, success} -> ok end
- end,
- Ps),
- TestServer ! Success
- end),
- ?line receive
- Success ->
- ok
- end,
- ?line stop_node(SNode),
- ?line stop_node(RNode),
- ?line ok.
+ TestServer = self(),
+ ProcessPairs = 10,
+ Msgs = 100000,
+ {ok, SNode} = start_node(Config),
+ {ok, RNode} = start_node(Config),
+ Success = make_ref(),
+ spawn_link(
+ SNode,
+ fun () ->
+ erts_debug:set_internal_state(available_internal_state,
+ true),
+ Master = self(),
+ CIX = get_cix(),
+ TestAtoms = case Type of
+ latin1 ->
+ get_conflicting_atoms(CIX,
+ ProcessPairs);
+ unicode ->
+ get_conflicting_unicode_atoms(CIX,
+ ProcessPairs)
+ end,
+ io:format("Testing with the following atoms all using "
+ "cache index ~p:~n ~w~n",
+ [CIX, TestAtoms]),
+ Ps = lists:map(
+ fun (A) ->
+ Ref = make_ref(),
+ R = spawn_link(RNode,
+ fun () ->
+ Atom = receive
+ {Ref, txt, ATxt} ->
+ case Type of
+ latin1 ->
+ list_to_atom(ATxt);
+ unicode ->
+ string_to_atom(ATxt)
+ end
+ end,
+ receive_ref_atom(Ref,
+ Atom,
+ Msgs),
+ Master ! {self(), success}
+ end),
+ S = spawn_link(SNode,
+ fun () ->
+ receive go -> ok end,
+ R ! {Ref,
+ txt,
+ atom_to_list(A)},
+ send_ref_atom(R, Ref, A, Msgs)
+ end),
+ {S, R}
+ end,
+ TestAtoms),
+ lists:foreach(fun ({S, _}) ->
+ S ! go
+ end,
+ Ps),
+ lists:foreach(fun ({_, R}) ->
+ receive {R, success} -> ok end
+ end,
+ Ps),
+ TestServer ! Success
+ end),
+ receive
+ Success ->
+ ok
+ end,
+ stop_node(SNode),
+ stop_node(RNode),
+ ok.
send_ref_atom(_To, _Ref, _Atom, 0) ->
ok;
@@ -1304,11 +1234,11 @@ receive_ref_atom(_Ref, _Atom, 0) ->
ok;
receive_ref_atom(Ref, Atom, N) ->
receive
- {Ref, Value} ->
- Atom = Value
+ {Ref, Value} ->
+ Atom = Value
end,
receive_ref_atom(Ref, Atom, N-1).
-
+
get_cix() ->
get_cix(1000).
@@ -1316,34 +1246,34 @@ get_cix(CIX) when is_integer(CIX), CIX < 0 ->
get_cix(0);
get_cix(CIX) when is_integer(CIX) ->
get_cix(CIX,
- unwanted_cixs(),
- erts_debug:get_internal_state(max_atom_out_cache_index)).
+ unwanted_cixs(),
+ erts_debug:get_internal_state(max_atom_out_cache_index)).
get_cix(CIX, Unwanted, MaxCIX) when CIX > MaxCIX ->
get_cix(0, Unwanted, MaxCIX);
get_cix(CIX, Unwanted, MaxCIX) ->
case lists:member(CIX, Unwanted) of
- true -> get_cix(CIX+1, Unwanted, MaxCIX);
- false -> CIX
+ true -> get_cix(CIX+1, Unwanted, MaxCIX);
+ false -> CIX
end.
unwanted_cixs() ->
lists:map(fun (Node) ->
- erts_debug:get_internal_state({atom_out_cache_index,
- Node})
- end,
- nodes()).
-
-
+ erts_debug:get_internal_state({atom_out_cache_index,
+ Node})
+ end,
+ nodes()).
+
+
get_conflicting_atoms(_CIX, 0) ->
[];
get_conflicting_atoms(CIX, N) ->
Atom = list_to_atom("atom" ++ integer_to_list(erlang:unique_integer([positive]))),
case erts_debug:get_internal_state({atom_out_cache_index, Atom}) of
- CIX ->
- [Atom|get_conflicting_atoms(CIX, N-1)];
- _ ->
- get_conflicting_atoms(CIX, N)
+ CIX ->
+ [Atom|get_conflicting_atoms(CIX, N-1)];
+ _ ->
+ get_conflicting_atoms(CIX, N)
end.
get_conflicting_unicode_atoms(_CIX, 0) ->
@@ -1351,10 +1281,10 @@ get_conflicting_unicode_atoms(_CIX, 0) ->
get_conflicting_unicode_atoms(CIX, N) ->
Atom = string_to_atom([16#1f608] ++ "atom" ++ integer_to_list(erlang:unique_integer([positive]))),
case erts_debug:get_internal_state({atom_out_cache_index, Atom}) of
- CIX ->
- [Atom|get_conflicting_unicode_atoms(CIX, N-1)];
- _ ->
- get_conflicting_unicode_atoms(CIX, N)
+ CIX ->
+ [Atom|get_conflicting_unicode_atoms(CIX, N-1)];
+ _ ->
+ get_conflicting_unicode_atoms(CIX, N)
end.
-define(COOKIE, '').
@@ -1376,482 +1306,474 @@ get_conflicting_unicode_atoms(CIX, N) ->
-define(DOP_MONITOR_P_EXIT, 21).
start_monitor(Offender,P) ->
- ?line Parent = self(),
- ?line Q = spawn(Offender,
- fun () ->
- Ref = erlang:monitor(process,P),
- Parent ! {self(),ref,Ref},
- receive
- just_stay_alive -> ok
- end
- end),
- ?line Ref = receive
- {Q,ref,R} ->
- R
- after 5000 ->
- error
- end,
+ Parent = self(),
+ Q = spawn(Offender,
+ fun () ->
+ Ref = erlang:monitor(process,P),
+ Parent ! {self(),ref,Ref},
+ receive
+ just_stay_alive -> ok
+ end
+ end),
+ Ref = receive
+ {Q,ref,R} ->
+ R
+ after 5000 ->
+ error
+ end,
io:format("Ref is ~p~n",[Ref]),
ok.
start_link(Offender,P) ->
- ?line Parent = self(),
- ?line Q = spawn(Offender,
- fun () ->
- process_flag(trap_exit,true),
- link(P),
- Parent ! {self(),ref,P},
- receive
- just_stay_alive -> ok
- end
- end),
- ?line Ref = receive
- {Q,ref,R} ->
- R
- after 5000 ->
- error
- end,
+ Parent = self(),
+ Q = spawn(Offender,
+ fun () ->
+ process_flag(trap_exit,true),
+ link(P),
+ Parent ! {self(),ref,P},
+ receive
+ just_stay_alive -> ok
+ end
+ end),
+ Ref = receive
+ {Q,ref,R} ->
+ R
+ after 5000 ->
+ error
+ end,
io:format("Ref is ~p~n",[Ref]),
ok.
-bad_dist_structure(suite) ->
- [];
-bad_dist_structure(doc) ->
- ["Test dist messages with valid structure (binary to term ok) but malformed"
- "control content"];
+%% Test dist messages with valid structure (binary to term ok) but malformed control content
bad_dist_structure(Config) when is_list(Config) ->
- %process_flag(trap_exit,true),
- ODog = ?config(watchdog, Config),
- ?t:timetrap_cancel(ODog),
- Dog = ?t:timetrap(?t:seconds(15)),
-
- ?line {ok, Offender} = start_node(bad_dist_structure_offender),
- ?line {ok, Victim} = start_node(bad_dist_structure_victim),
- ?line start_node_monitors([Offender,Victim]),
- ?line Parent = self(),
- ?line P = spawn(Victim,
- fun () ->
- process_flag(trap_exit,true),
- Parent ! {self(), started},
- receive check_msgs -> ok end,
- bad_dist_struct_check_msgs([one,
- two]),
- Parent ! {self(), messages_checked},
- receive done -> ok end
- end),
- ?line receive {P, started} -> ok end,
- ?line pong = rpc:call(Victim, net_adm, ping, [Offender]),
- ?line verify_up(Offender, Victim),
- ?line true = lists:member(Offender, rpc:call(Victim, erlang, nodes, [])),
- ?line start_monitor(Offender,P),
- ?line P ! one,
- ?line send_bad_structure(Offender, P,{?DOP_MONITOR_P_EXIT,'replace',P,normal},2),
- ?line pong = rpc:call(Victim, net_adm, ping, [Offender]),
- ?line start_monitor(Offender,P),
- ?line send_bad_structure(Offender, P,{?DOP_MONITOR_P_EXIT,'replace',P,normal,normal},2),
- ?line pong = rpc:call(Victim, net_adm, ping, [Offender]),
- ?line start_link(Offender,P),
- ?line send_bad_structure(Offender, P,{?DOP_LINK},0),
- ?line pong = rpc:call(Victim, net_adm, ping, [Offender]),
- ?line start_link(Offender,P),
- ?line send_bad_structure(Offender, P,{?DOP_UNLINK,'replace'},2),
- ?line pong = rpc:call(Victim, net_adm, ping, [Offender]),
- ?line start_link(Offender,P),
- ?line send_bad_structure(Offender, P,{?DOP_UNLINK,'replace',make_ref()},2),
- ?line pong = rpc:call(Victim, net_adm, ping, [Offender]),
- ?line start_link(Offender,P),
- ?line send_bad_structure(Offender, P,{?DOP_UNLINK,make_ref(),P},0),
- ?line pong = rpc:call(Victim, net_adm, ping, [Offender]),
- ?line start_link(Offender,P),
- ?line send_bad_structure(Offender, P,{?DOP_UNLINK,normal,normal},0),
- ?line pong = rpc:call(Victim, net_adm, ping, [Offender]),
- ?line start_monitor(Offender,P),
- ?line send_bad_structure(Offender, P,{?DOP_MONITOR_P,'replace',P},2),
- ?line pong = rpc:call(Victim, net_adm, ping, [Offender]),
- ?line start_monitor(Offender,P),
- ?line send_bad_structure(Offender, P,{?DOP_MONITOR_P,'replace',P,normal},2),
- ?line pong = rpc:call(Victim, net_adm, ping, [Offender]),
- ?line start_monitor(Offender,P),
- ?line send_bad_structure(Offender, P,{?DOP_DEMONITOR_P,'replace',P},2),
- ?line pong = rpc:call(Victim, net_adm, ping, [Offender]),
- ?line start_monitor(Offender,P),
- ?line send_bad_structure(Offender, P,{?DOP_DEMONITOR_P,'replace',P,normal},2),
- ?line pong = rpc:call(Victim, net_adm, ping, [Offender]),
- ?line send_bad_structure(Offender, P,{?DOP_EXIT,'replace',P},2),
- ?line pong = rpc:call(Victim, net_adm, ping, [Offender]),
- ?line send_bad_structure(Offender, P,{?DOP_EXIT,make_ref(),normal,normal},0),
- ?line pong = rpc:call(Victim, net_adm, ping, [Offender]),
- ?line send_bad_structure(Offender, P,{?DOP_EXIT_TT,'replace',token,P},2),
- ?line pong = rpc:call(Victim, net_adm, ping, [Offender]),
- ?line send_bad_structure(Offender, P,{?DOP_EXIT_TT,make_ref(),token,normal,normal},0),
- ?line pong = rpc:call(Victim, net_adm, ping, [Offender]),
- ?line send_bad_structure(Offender, P,{?DOP_EXIT2,'replace',P},2),
- ?line pong = rpc:call(Victim, net_adm, ping, [Offender]),
- ?line send_bad_structure(Offender, P,{?DOP_EXIT2,make_ref(),normal,normal},0),
- ?line pong = rpc:call(Victim, net_adm, ping, [Offender]),
- ?line send_bad_structure(Offender, P,{?DOP_EXIT2_TT,'replace',token,P},2),
- ?line pong = rpc:call(Victim, net_adm, ping, [Offender]),
- ?line send_bad_structure(Offender, P,{?DOP_EXIT2_TT,make_ref(),token,normal,normal},0),
- ?line pong = rpc:call(Victim, net_adm, ping, [Offender]),
- ?line send_bad_structure(Offender, P,{?DOP_GROUP_LEADER,'replace'},2),
- ?line pong = rpc:call(Victim, net_adm, ping, [Offender]),
- ?line send_bad_structure(Offender, P,{?DOP_GROUP_LEADER,'replace','atomic'},2),
- ?line pong = rpc:call(Victim, net_adm, ping, [Offender]),
- ?line send_bad_structure(Offender, P,{?DOP_GROUP_LEADER,'replace',P},0),
- ?line pong = rpc:call(Victim, net_adm, ping, [Offender]),
- ?line send_bad_structure(Offender, P,{?DOP_REG_SEND_TT,'replace','',name},2,{message}),
- ?line pong = rpc:call(Victim, net_adm, ping, [Offender]),
- ?line send_bad_structure(Offender, P,{?DOP_REG_SEND_TT,'replace','',name,token},0,{message}),
- ?line pong = rpc:call(Victim, net_adm, ping, [Offender]),
- ?line send_bad_structure(Offender, P,{?DOP_REG_SEND,'replace',''},2,{message}),
- ?line pong = rpc:call(Victim, net_adm, ping, [Offender]),
- ?line send_bad_structure(Offender, P,{?DOP_REG_SEND,'replace','',P},0,{message}),
- ?line pong = rpc:call(Victim, net_adm, ping, [Offender]),
- ?line send_bad_structure(Offender, P,{?DOP_REG_SEND,'replace','',name},0,{message}),
- ?line pong = rpc:call(Victim, net_adm, ping, [Offender]),
- ?line send_bad_structure(Offender, P,{?DOP_REG_SEND,'replace','',name,{token}},2,{message}),
- ?line pong = rpc:call(Victim, net_adm, ping, [Offender]),
- ?line send_bad_structure(Offender, P,{?DOP_SEND_TT,'',P},0,{message}),
- ?line pong = rpc:call(Victim, net_adm, ping, [Offender]),
- ?line send_bad_structure(Offender, P,{?DOP_SEND_TT,'',name,token},0,{message}),
- ?line pong = rpc:call(Victim, net_adm, ping, [Offender]),
- ?line send_bad_structure(Offender, P,{?DOP_SEND,''},0,{message}),
- ?line pong = rpc:call(Victim, net_adm, ping, [Offender]),
- ?line send_bad_structure(Offender, P,{?DOP_SEND,'',name},0,{message}),
- ?line pong = rpc:call(Victim, net_adm, ping, [Offender]),
- ?line send_bad_structure(Offender, P,{?DOP_SEND,'',P,{token}},0,{message}),
- ?line pong = rpc:call(Victim, net_adm, ping, [Offender]),
- ?line P ! two,
- ?line P ! check_msgs,
- ?line receive
- {P, messages_checked} -> ok
- after 5000 ->
- exit(victim_is_dead)
- end,
-
- ?line {message_queue_len, 0}
- = rpc:call(Victim, erlang, process_info, [P, message_queue_len]),
-
- ?line unlink(P),
- ?line P ! done,
- ?line stop_node(Offender),
- ?line stop_node(Victim),
- ?t:timetrap_cancel(Dog),
+ ct:timetrap({seconds, 15}),
+
+ {ok, Offender} = start_node(bad_dist_structure_offender),
+ {ok, Victim} = start_node(bad_dist_structure_victim),
+ start_node_monitors([Offender,Victim]),
+ Parent = self(),
+ P = spawn(Victim,
+ fun () ->
+ process_flag(trap_exit,true),
+ Parent ! {self(), started},
+ receive check_msgs -> ok end,
+ bad_dist_struct_check_msgs([one,
+ two]),
+ Parent ! {self(), messages_checked},
+ receive done -> ok end
+ end),
+ receive {P, started} -> ok end,
+ pong = rpc:call(Victim, net_adm, ping, [Offender]),
+ verify_up(Offender, Victim),
+ true = lists:member(Offender, rpc:call(Victim, erlang, nodes, [])),
+ start_monitor(Offender,P),
+ P ! one,
+ send_bad_structure(Offender, P,{?DOP_MONITOR_P_EXIT,'replace',P,normal},2),
+ pong = rpc:call(Victim, net_adm, ping, [Offender]),
+ start_monitor(Offender,P),
+ send_bad_structure(Offender, P,{?DOP_MONITOR_P_EXIT,'replace',P,normal,normal},2),
+ pong = rpc:call(Victim, net_adm, ping, [Offender]),
+ start_link(Offender,P),
+ send_bad_structure(Offender, P,{?DOP_LINK},0),
+ pong = rpc:call(Victim, net_adm, ping, [Offender]),
+ start_link(Offender,P),
+ send_bad_structure(Offender, P,{?DOP_UNLINK,'replace'},2),
+ pong = rpc:call(Victim, net_adm, ping, [Offender]),
+ start_link(Offender,P),
+ send_bad_structure(Offender, P,{?DOP_UNLINK,'replace',make_ref()},2),
+ pong = rpc:call(Victim, net_adm, ping, [Offender]),
+ start_link(Offender,P),
+ send_bad_structure(Offender, P,{?DOP_UNLINK,make_ref(),P},0),
+ pong = rpc:call(Victim, net_adm, ping, [Offender]),
+ start_link(Offender,P),
+ send_bad_structure(Offender, P,{?DOP_UNLINK,normal,normal},0),
+ pong = rpc:call(Victim, net_adm, ping, [Offender]),
+ start_monitor(Offender,P),
+ send_bad_structure(Offender, P,{?DOP_MONITOR_P,'replace',P},2),
+ pong = rpc:call(Victim, net_adm, ping, [Offender]),
+ start_monitor(Offender,P),
+ send_bad_structure(Offender, P,{?DOP_MONITOR_P,'replace',P,normal},2),
+ pong = rpc:call(Victim, net_adm, ping, [Offender]),
+ start_monitor(Offender,P),
+ send_bad_structure(Offender, P,{?DOP_DEMONITOR_P,'replace',P},2),
+ pong = rpc:call(Victim, net_adm, ping, [Offender]),
+ start_monitor(Offender,P),
+ send_bad_structure(Offender, P,{?DOP_DEMONITOR_P,'replace',P,normal},2),
+ pong = rpc:call(Victim, net_adm, ping, [Offender]),
+ send_bad_structure(Offender, P,{?DOP_EXIT,'replace',P},2),
+ pong = rpc:call(Victim, net_adm, ping, [Offender]),
+ send_bad_structure(Offender, P,{?DOP_EXIT,make_ref(),normal,normal},0),
+ pong = rpc:call(Victim, net_adm, ping, [Offender]),
+ send_bad_structure(Offender, P,{?DOP_EXIT_TT,'replace',token,P},2),
+ pong = rpc:call(Victim, net_adm, ping, [Offender]),
+ send_bad_structure(Offender, P,{?DOP_EXIT_TT,make_ref(),token,normal,normal},0),
+ pong = rpc:call(Victim, net_adm, ping, [Offender]),
+ send_bad_structure(Offender, P,{?DOP_EXIT2,'replace',P},2),
+ pong = rpc:call(Victim, net_adm, ping, [Offender]),
+ send_bad_structure(Offender, P,{?DOP_EXIT2,make_ref(),normal,normal},0),
+ pong = rpc:call(Victim, net_adm, ping, [Offender]),
+ send_bad_structure(Offender, P,{?DOP_EXIT2_TT,'replace',token,P},2),
+ pong = rpc:call(Victim, net_adm, ping, [Offender]),
+ send_bad_structure(Offender, P,{?DOP_EXIT2_TT,make_ref(),token,normal,normal},0),
+ pong = rpc:call(Victim, net_adm, ping, [Offender]),
+ send_bad_structure(Offender, P,{?DOP_GROUP_LEADER,'replace'},2),
+ pong = rpc:call(Victim, net_adm, ping, [Offender]),
+ send_bad_structure(Offender, P,{?DOP_GROUP_LEADER,'replace','atomic'},2),
+ pong = rpc:call(Victim, net_adm, ping, [Offender]),
+ send_bad_structure(Offender, P,{?DOP_GROUP_LEADER,'replace',P},0),
+ pong = rpc:call(Victim, net_adm, ping, [Offender]),
+ send_bad_structure(Offender, P,{?DOP_REG_SEND_TT,'replace','',name},2,{message}),
+ pong = rpc:call(Victim, net_adm, ping, [Offender]),
+ send_bad_structure(Offender, P,{?DOP_REG_SEND_TT,'replace','',name,token},0,{message}),
+ pong = rpc:call(Victim, net_adm, ping, [Offender]),
+ send_bad_structure(Offender, P,{?DOP_REG_SEND,'replace',''},2,{message}),
+ pong = rpc:call(Victim, net_adm, ping, [Offender]),
+ send_bad_structure(Offender, P,{?DOP_REG_SEND,'replace','',P},0,{message}),
+ pong = rpc:call(Victim, net_adm, ping, [Offender]),
+ send_bad_structure(Offender, P,{?DOP_REG_SEND,'replace','',name},0,{message}),
+ pong = rpc:call(Victim, net_adm, ping, [Offender]),
+ send_bad_structure(Offender, P,{?DOP_REG_SEND,'replace','',name,{token}},2,{message}),
+ pong = rpc:call(Victim, net_adm, ping, [Offender]),
+ send_bad_structure(Offender, P,{?DOP_SEND_TT,'',P},0,{message}),
+ pong = rpc:call(Victim, net_adm, ping, [Offender]),
+ send_bad_structure(Offender, P,{?DOP_SEND_TT,'',name,token},0,{message}),
+ pong = rpc:call(Victim, net_adm, ping, [Offender]),
+ send_bad_structure(Offender, P,{?DOP_SEND,''},0,{message}),
+ pong = rpc:call(Victim, net_adm, ping, [Offender]),
+ send_bad_structure(Offender, P,{?DOP_SEND,'',name},0,{message}),
+ pong = rpc:call(Victim, net_adm, ping, [Offender]),
+ send_bad_structure(Offender, P,{?DOP_SEND,'',P,{token}},0,{message}),
+ pong = rpc:call(Victim, net_adm, ping, [Offender]),
+ P ! two,
+ P ! check_msgs,
+ receive
+ {P, messages_checked} -> ok
+ after 5000 ->
+ exit(victim_is_dead)
+ end,
+
+ {message_queue_len, 0}
+ = rpc:call(Victim, erlang, process_info, [P, message_queue_len]),
+
+ unlink(P),
+ P ! done,
+ stop_node(Offender),
+ stop_node(Victim),
ok.
bad_dist_ext_receive(Config) when is_list(Config) ->
- ?line {ok, Offender} = start_node(bad_dist_ext_receive_offender),
- ?line {ok, Victim} = start_node(bad_dist_ext_receive_victim),
- ?line start_node_monitors([Offender,Victim]),
-
- ?line Parent = self(),
-
- ?line P = spawn_link(Victim,
- fun () ->
- Parent ! {self(), started},
- receive check_msgs -> ok end,
- bad_dist_ext_check_msgs([one,
- two,
- three]),
- Parent ! {self(), messages_checked},
- receive done -> ok end
- end),
-
- ?line receive {P, started} -> ok end,
- ?line pong = rpc:call(Victim, net_adm, ping, [Offender]),
- ?line verify_up(Offender, Victim),
- ?line true = lists:member(Offender, rpc:call(Victim, erlang, nodes, [])),
- ?line P ! one,
- ?line send_bad_msg(Offender, P),
- ?line P ! two,
- ?line verify_down(Offender, connection_closed, Victim, killed),
- ?line {message_queue_len, 2}
- = rpc:call(Victim, erlang, process_info, [P, message_queue_len]),
-
- ?line Suspended = make_ref(),
- ?line S = spawn(Victim,
- fun () ->
- erlang:suspend_process(P),
- Parent ! Suspended,
- receive after infinity -> ok end
- end),
- ?line MS = erlang:monitor(process, S),
- ?line receive Suspended -> ok end,
- ?line pong = rpc:call(Victim, net_adm, ping, [Offender]),
- ?line verify_up(Offender, Victim),
- ?line true = lists:member(Offender, rpc:call(Victim, erlang, nodes, [])),
- ?line send_bad_msgs(Offender, P, 5),
- ?line true = lists:member(Offender, rpc:call(Victim, erlang, nodes, [])),
- ?line P ! three,
- ?line send_bad_msgs(Offender, P, 5),
+ {ok, Offender} = start_node(bad_dist_ext_receive_offender),
+ {ok, Victim} = start_node(bad_dist_ext_receive_victim),
+ start_node_monitors([Offender,Victim]),
+
+ Parent = self(),
+
+ P = spawn_link(Victim,
+ fun () ->
+ Parent ! {self(), started},
+ receive check_msgs -> ok end,
+ bad_dist_ext_check_msgs([one,
+ two,
+ three]),
+ Parent ! {self(), messages_checked},
+ receive done -> ok end
+ end),
+
+ receive {P, started} -> ok end,
+ pong = rpc:call(Victim, net_adm, ping, [Offender]),
+ verify_up(Offender, Victim),
+ true = lists:member(Offender, rpc:call(Victim, erlang, nodes, [])),
+ P ! one,
+ send_bad_msg(Offender, P),
+ P ! two,
+ verify_down(Offender, connection_closed, Victim, killed),
+ {message_queue_len, 2}
+ = rpc:call(Victim, erlang, process_info, [P, message_queue_len]),
+
+ Suspended = make_ref(),
+ S = spawn(Victim,
+ fun () ->
+ erlang:suspend_process(P),
+ Parent ! Suspended,
+ receive after infinity -> ok end
+ end),
+ MS = erlang:monitor(process, S),
+ receive Suspended -> ok end,
+ pong = rpc:call(Victim, net_adm, ping, [Offender]),
+ verify_up(Offender, Victim),
+ true = lists:member(Offender, rpc:call(Victim, erlang, nodes, [])),
+ send_bad_msgs(Offender, P, 5),
+ true = lists:member(Offender, rpc:call(Victim, erlang, nodes, [])),
+ P ! three,
+ send_bad_msgs(Offender, P, 5),
%% Make sure bad msgs has reached Victim
- ?line rpc:call(Offender, rpc, call, [Victim, erlang, node, []]),
-
- ?line verify_still_up(Offender, Victim),
- ?line {message_queue_len, 13}
- = rpc:call(Victim, erlang, process_info, [P, message_queue_len]),
-
- ?line exit(S, bang),
- ?line receive {'DOWN', MS, process, S, bang} -> ok end,
- ?line verify_down(Offender, connection_closed, Victim, killed),
- ?line {message_queue_len, 3}
- = rpc:call(Victim, erlang, process_info, [P, message_queue_len]),
-
- ?line P ! check_msgs,
- ?line receive {P, messages_checked} -> ok end,
-
- ?line {message_queue_len, 0}
- = rpc:call(Victim, erlang, process_info, [P, message_queue_len]),
-
- ?line P ! done,
- ?line unlink(P),
- ?line verify_no_down(Offender, Victim),
- ?line stop_node(Offender),
- ?line stop_node(Victim).
+ rpc:call(Offender, rpc, call, [Victim, erlang, node, []]),
+
+ verify_still_up(Offender, Victim),
+ {message_queue_len, 13}
+ = rpc:call(Victim, erlang, process_info, [P, message_queue_len]),
+
+ exit(S, bang),
+ receive {'DOWN', MS, process, S, bang} -> ok end,
+ verify_down(Offender, connection_closed, Victim, killed),
+ {message_queue_len, 3}
+ = rpc:call(Victim, erlang, process_info, [P, message_queue_len]),
+
+ P ! check_msgs,
+ receive {P, messages_checked} -> ok end,
+
+ {message_queue_len, 0}
+ = rpc:call(Victim, erlang, process_info, [P, message_queue_len]),
+
+ P ! done,
+ unlink(P),
+ verify_no_down(Offender, Victim),
+ stop_node(Offender),
+ stop_node(Victim).
bad_dist_ext_process_info(Config) when is_list(Config) ->
- ?line {ok, Offender} = start_node(bad_dist_ext_process_info_offender),
- ?line {ok, Victim} = start_node(bad_dist_ext_process_info_victim),
- ?line start_node_monitors([Offender,Victim]),
-
- ?line Parent = self(),
- ?line P = spawn_link(Victim,
- fun () ->
- Parent ! {self(), started},
- receive check_msgs -> ok end,
- bad_dist_ext_check_msgs([one, two]),
- Parent ! {self(), messages_checked},
- receive done -> ok end
- end),
-
- ?line receive {P, started} -> ok end,
- ?line P ! one,
-
- ?line Suspended = make_ref(),
- ?line S = spawn(Victim,
- fun () ->
- erlang:suspend_process(P),
- Parent ! Suspended,
- receive after infinity -> ok end
- end),
-
- ?line receive Suspended -> ok end,
- ?line pong = rpc:call(Victim, net_adm, ping, [Offender]),
- ?line verify_up(Offender, Victim),
- ?line send_bad_msgs(Offender, P, 5),
-
- ?line P ! two,
- ?line send_bad_msgs(Offender, P, 5),
+ {ok, Offender} = start_node(bad_dist_ext_process_info_offender),
+ {ok, Victim} = start_node(bad_dist_ext_process_info_victim),
+ start_node_monitors([Offender,Victim]),
+
+ Parent = self(),
+ P = spawn_link(Victim,
+ fun () ->
+ Parent ! {self(), started},
+ receive check_msgs -> ok end,
+ bad_dist_ext_check_msgs([one, two]),
+ Parent ! {self(), messages_checked},
+ receive done -> ok end
+ end),
+
+ receive {P, started} -> ok end,
+ P ! one,
+
+ Suspended = make_ref(),
+ S = spawn(Victim,
+ fun () ->
+ erlang:suspend_process(P),
+ Parent ! Suspended,
+ receive after infinity -> ok end
+ end),
+
+ receive Suspended -> ok end,
+ pong = rpc:call(Victim, net_adm, ping, [Offender]),
+ verify_up(Offender, Victim),
+ send_bad_msgs(Offender, P, 5),
+
+ P ! two,
+ send_bad_msgs(Offender, P, 5),
%% Make sure bad msgs has reached Victim
- ?line rpc:call(Offender, rpc, call, [Victim, erlang, node, []]),
-
- ?line verify_still_up(Offender, Victim),
- ?line {message_queue_len, 12}
- = rpc:call(Victim, erlang, process_info, [P, message_queue_len]),
- ?line verify_still_up(Offender, Victim),
- ?line [{message_queue_len, 2},
- {messages, [one, two]}]
- = rpc:call(Victim, erlang, process_info, [P, [message_queue_len,
- messages]]),
- ?line verify_down(Offender, connection_closed, Victim, killed),
-
- ?line P ! check_msgs,
- ?line exit(S, bang),
- ?line receive {P, messages_checked} -> ok end,
-
- ?line {message_queue_len, 0}
- = rpc:call(Victim, erlang, process_info, [P, message_queue_len]),
-
- ?line P ! done,
- ?line unlink(P),
- ?line verify_no_down(Offender, Victim),
- ?line stop_node(Offender),
- ?line stop_node(Victim).
+ rpc:call(Offender, rpc, call, [Victim, erlang, node, []]),
+
+ verify_still_up(Offender, Victim),
+ {message_queue_len, 12}
+ = rpc:call(Victim, erlang, process_info, [P, message_queue_len]),
+ verify_still_up(Offender, Victim),
+ [{message_queue_len, 2},
+ {messages, [one, two]}]
+ = rpc:call(Victim, erlang, process_info, [P, [message_queue_len,
+ messages]]),
+ verify_down(Offender, connection_closed, Victim, killed),
+
+ P ! check_msgs,
+ exit(S, bang),
+ receive {P, messages_checked} -> ok end,
+
+ {message_queue_len, 0}
+ = rpc:call(Victim, erlang, process_info, [P, message_queue_len]),
+
+ P ! done,
+ unlink(P),
+ verify_no_down(Offender, Victim),
+ stop_node(Offender),
+ stop_node(Victim).
bad_dist_ext_control(Config) when is_list(Config) ->
- ?line {ok, Offender} = start_node(bad_dist_ext_control_offender),
- ?line {ok, Victim} = start_node(bad_dist_ext_control_victim),
- ?line start_node_monitors([Offender,Victim]),
+ {ok, Offender} = start_node(bad_dist_ext_control_offender),
+ {ok, Victim} = start_node(bad_dist_ext_control_victim),
+ start_node_monitors([Offender,Victim]),
- ?line pong = rpc:call(Victim, net_adm, ping, [Offender]),
- ?line verify_up(Offender, Victim),
- ?line send_bad_dhdr(Offender, Victim),
- ?line verify_down(Offender, connection_closed, Victim, killed),
+ pong = rpc:call(Victim, net_adm, ping, [Offender]),
+ verify_up(Offender, Victim),
+ send_bad_dhdr(Offender, Victim),
+ verify_down(Offender, connection_closed, Victim, killed),
- ?line pong = rpc:call(Victim, net_adm, ping, [Offender]),
- ?line verify_up(Offender, Victim),
- ?line send_bad_ctl(Offender, Victim),
- ?line verify_down(Offender, connection_closed, Victim, killed),
+ pong = rpc:call(Victim, net_adm, ping, [Offender]),
+ verify_up(Offender, Victim),
+ send_bad_ctl(Offender, Victim),
+ verify_down(Offender, connection_closed, Victim, killed),
- ?line verify_no_down(Offender, Victim),
- ?line stop_node(Offender),
- ?line stop_node(Victim).
+ verify_no_down(Offender, Victim),
+ stop_node(Offender),
+ stop_node(Victim).
bad_dist_ext_connection_id(Config) when is_list(Config) ->
- ?line {ok, Offender} = start_node(bad_dist_ext_connection_id_offender),
- ?line {ok, Victim} = start_node(bad_dist_ext_connection_id_victim),
- ?line start_node_monitors([Offender,Victim]),
-
- ?line Parent = self(),
- ?line P = spawn_link(Victim,
- fun () ->
- Parent ! {self(), started},
- receive check_msgs -> ok end,
- bad_dist_ext_check_msgs([]),
- Parent ! {self(), messages_checked},
- receive done -> ok end
- end),
-
- ?line receive {P, started} -> ok end,
- ?line Suspended = make_ref(),
- ?line S = spawn(Victim,
- fun () ->
- erlang:suspend_process(P),
- Parent ! Suspended,
- receive after infinity -> ok end
- end),
- ?line MS = erlang:monitor(process, S),
- ?line receive Suspended -> ok end,
- ?line pong = rpc:call(Victim, net_adm, ping, [Offender]),
- ?line verify_up(Offender, Victim),
- ?line send_bad_msg(Offender, P),
+ {ok, Offender} = start_node(bad_dist_ext_connection_id_offender),
+ {ok, Victim} = start_node(bad_dist_ext_connection_id_victim),
+ start_node_monitors([Offender,Victim]),
+
+ Parent = self(),
+ P = spawn_link(Victim,
+ fun () ->
+ Parent ! {self(), started},
+ receive check_msgs -> ok end,
+ bad_dist_ext_check_msgs([]),
+ Parent ! {self(), messages_checked},
+ receive done -> ok end
+ end),
+
+ receive {P, started} -> ok end,
+ Suspended = make_ref(),
+ S = spawn(Victim,
+ fun () ->
+ erlang:suspend_process(P),
+ Parent ! Suspended,
+ receive after infinity -> ok end
+ end),
+ MS = erlang:monitor(process, S),
+ receive Suspended -> ok end,
+ pong = rpc:call(Victim, net_adm, ping, [Offender]),
+ verify_up(Offender, Victim),
+ send_bad_msg(Offender, P),
%% Make sure bad msg has reached Victim
- ?line rpc:call(Offender, rpc, call, [Victim, erlang, node, []]),
+ rpc:call(Offender, rpc, call, [Victim, erlang, node, []]),
- ?line {message_queue_len, 1}
- = rpc:call(Victim, erlang, process_info, [P, message_queue_len]),
+ {message_queue_len, 1}
+ = rpc:call(Victim, erlang, process_info, [P, message_queue_len]),
- ?line true = rpc:call(Offender, net_kernel, disconnect, [Victim]),
- ?line verify_down(Offender, disconnect, Victim, connection_closed),
- ?line pong = rpc:call(Offender, net_adm, ping, [Victim]),
+ true = rpc:call(Offender, net_kernel, disconnect, [Victim]),
+ verify_down(Offender, disconnect, Victim, connection_closed),
+ pong = rpc:call(Offender, net_adm, ping, [Victim]),
- ?line verify_up(Offender, Victim),
+ verify_up(Offender, Victim),
%% We have a new connection between Offender and Victim, bad message
%% should not bring it down.
- ?line {message_queue_len, 1}
- = rpc:call(Victim, erlang, process_info, [P, message_queue_len]),
+ {message_queue_len, 1}
+ = rpc:call(Victim, erlang, process_info, [P, message_queue_len]),
- ?line exit(S, bang),
- ?line receive {'DOWN', MS, process, S, bang} -> ok end,
+ exit(S, bang),
+ receive {'DOWN', MS, process, S, bang} -> ok end,
%% Wait for a while (if the connection is taken down it might take a
%% while).
- ?line receive after 2000 -> ok end,
- ?line verify_still_up(Offender, Victim),
+ receive after 2000 -> ok end,
+ verify_still_up(Offender, Victim),
+
+ P ! check_msgs,
+ receive {P, messages_checked} -> ok end,
- ?line P ! check_msgs,
- ?line receive {P, messages_checked} -> ok end,
+ {message_queue_len, 0}
+ = rpc:call(Victim, erlang, process_info, [P, message_queue_len]),
- ?line {message_queue_len, 0}
- = rpc:call(Victim, erlang, process_info, [P, message_queue_len]),
-
- ?line verify_still_up(Offender, Victim),
- ?line P ! done,
- ?line unlink(P),
- ?line verify_no_down(Offender, Victim),
- ?line stop_node(Offender),
- ?line stop_node(Victim).
+ verify_still_up(Offender, Victim),
+ P ! done,
+ unlink(P),
+ verify_no_down(Offender, Victim),
+ stop_node(Offender),
+ stop_node(Victim).
bad_dist_struct_check_msgs([]) ->
receive
- Msg ->
- exit({unexpected_message, Msg})
+ Msg ->
+ exit({unexpected_message, Msg})
after 0 ->
- ok
+ ok
end;
bad_dist_struct_check_msgs([M|Ms]) ->
receive
- {'EXIT',_,_} = EM ->
- io:format("Ignoring exit message: ~p~n",[EM]),
- bad_dist_struct_check_msgs([M|Ms]);
- Msg ->
- M = Msg,
- bad_dist_struct_check_msgs(Ms)
+ {'EXIT',_,_} = EM ->
+ io:format("Ignoring exit message: ~p~n",[EM]),
+ bad_dist_struct_check_msgs([M|Ms]);
+ Msg ->
+ M = Msg,
+ bad_dist_struct_check_msgs(Ms)
end.
bad_dist_ext_check_msgs([]) ->
receive
- Msg ->
- exit({unexpected_message, Msg})
+ Msg ->
+ exit({unexpected_message, Msg})
after 0 ->
- ok
+ ok
end;
bad_dist_ext_check_msgs([M|Ms]) ->
receive
- Msg ->
- M = Msg,
- bad_dist_ext_check_msgs(Ms)
+ Msg ->
+ M = Msg,
+ bad_dist_ext_check_msgs(Ms)
end.
-
+
dport_reg_send(Node, Name, Msg) ->
DPrt = case dport(Node) of
- undefined ->
- pong = net_adm:ping(Node),
- dport(Node);
- Prt ->
- Prt
- end,
+ undefined ->
+ pong = net_adm:ping(Node),
+ dport(Node);
+ Prt ->
+ Prt
+ end,
port_command(DPrt, [dmsg_hdr(),
- dmsg_ext({?DOP_REG_SEND,
- self(),
- ?COOKIE,
- Name}),
- dmsg_ext(Msg)]).
+ dmsg_ext({?DOP_REG_SEND,
+ self(),
+ ?COOKIE,
+ Name}),
+ dmsg_ext(Msg)]).
dport_send(To, Msg) ->
Node = node(To),
DPrt = case dport(Node) of
- undefined ->
- pong = net_adm:ping(Node),
- dport(Node);
- Prt ->
- Prt
- end,
+ undefined ->
+ pong = net_adm:ping(Node),
+ dport(Node);
+ Prt ->
+ Prt
+ end,
port_command(DPrt, [dmsg_hdr(),
- dmsg_ext({?DOP_SEND,
- ?COOKIE,
- To}),
- dmsg_ext(Msg)]).
+ dmsg_ext({?DOP_SEND,
+ ?COOKIE,
+ To}),
+ dmsg_ext(Msg)]).
send_bad_structure(Offender,Victim,Bad,WhereToPutSelf) ->
send_bad_structure(Offender,Victim,Bad,WhereToPutSelf,[]).
send_bad_structure(Offender,Victim,Bad,WhereToPutSelf,PayLoad) ->
Parent = self(),
Done = make_ref(),
spawn(Offender,
- fun () ->
- Node = node(Victim),
- pong = net_adm:ping(Node),
- DPrt = dport(Node),
- Bad1 = case WhereToPutSelf of
- 0 ->
- Bad;
- N when N > 0 ->
- setelement(N,Bad,self())
- end,
- DData = [dmsg_hdr(),
- dmsg_ext(Bad1)] ++
- case PayLoad of
- [] -> [];
- _Other -> [dmsg_ext(PayLoad)]
- end,
- port_command(DPrt, DData),
- Parent ! {DData,Done}
- end),
+ fun () ->
+ Node = node(Victim),
+ pong = net_adm:ping(Node),
+ DPrt = dport(Node),
+ Bad1 = case WhereToPutSelf of
+ 0 ->
+ Bad;
+ N when N > 0 ->
+ setelement(N,Bad,self())
+ end,
+ DData = [dmsg_hdr(),
+ dmsg_ext(Bad1)] ++
+ case PayLoad of
+ [] -> [];
+ _Other -> [dmsg_ext(PayLoad)]
+ end,
+ port_command(DPrt, DData),
+ Parent ! {DData,Done}
+ end),
receive
- {WhatSent,Done} ->
- io:format("Offender sent ~p~n",[WhatSent]),
- ok
+ {WhatSent,Done} ->
+ io:format("Offender sent ~p~n",[WhatSent]),
+ ok
after 5000 ->
- exit(unable_to_send)
+ exit(unable_to_send)
end.
-
+
%% send_bad_msgs():
%% Send a valid distribution header and control message
@@ -1861,21 +1783,21 @@ send_bad_msg(BadNode, To) ->
send_bad_msgs(BadNode, To, 1).
send_bad_msgs(BadNode, To, Repeat) when is_atom(BadNode),
- is_pid(To),
- is_integer(Repeat) ->
+ is_pid(To),
+ is_integer(Repeat) ->
Parent = self(),
Done = make_ref(),
spawn_link(BadNode,
- fun () ->
- Node = node(To),
- pong = net_adm:ping(Node),
- DPrt = dport(Node),
- DData = [dmsg_hdr(),
- dmsg_ext({?DOP_SEND, ?COOKIE, To}),
- dmsg_bad_atom_cache_ref()],
- repeat(fun () -> port_command(DPrt, DData) end, Repeat),
- Parent ! Done
- end),
+ fun () ->
+ Node = node(To),
+ pong = net_adm:ping(Node),
+ DPrt = dport(Node),
+ DData = [dmsg_hdr(),
+ dmsg_ext({?DOP_SEND, ?COOKIE, To}),
+ dmsg_bad_atom_cache_ref()],
+ repeat(fun () -> port_command(DPrt, DData) end, Repeat),
+ Parent ! Done
+ end),
receive Done -> ok end.
%% send_bad_ctl():
@@ -1884,24 +1806,24 @@ send_bad_ctl(BadNode, ToNode) when is_atom(BadNode), is_atom(ToNode) ->
Parent = self(),
Done = make_ref(),
spawn_link(BadNode,
- fun () ->
- pong = net_adm:ping(ToNode),
- %% We creat a valid ctl msg and replace an
- %% atom with an invalid atom cache reference
- <<131,Replace/binary>> = term_to_binary(replace),
- Ctl = dmsg_ext({?DOP_REG_SEND,
- self(),
- ?COOKIE,
- replace}),
- CtlBeginSize = size(Ctl) - size(Replace),
- <<CtlBegin:CtlBeginSize/binary, Replace/binary>> = Ctl,
- port_command(dport(ToNode),
- [dmsg_fake_hdr2(),
- CtlBegin,
- dmsg_bad_atom_cache_ref(),
- dmsg_ext({a, message})]),
- Parent ! Done
- end),
+ fun () ->
+ pong = net_adm:ping(ToNode),
+ %% We creat a valid ctl msg and replace an
+ %% atom with an invalid atom cache reference
+ <<131,Replace/binary>> = term_to_binary(replace),
+ Ctl = dmsg_ext({?DOP_REG_SEND,
+ self(),
+ ?COOKIE,
+ replace}),
+ CtlBeginSize = size(Ctl) - size(Replace),
+ <<CtlBegin:CtlBeginSize/binary, Replace/binary>> = Ctl,
+ port_command(dport(ToNode),
+ [dmsg_fake_hdr2(),
+ CtlBegin,
+ dmsg_bad_atom_cache_ref(),
+ dmsg_ext({a, message})]),
+ Parent ! Done
+ end),
receive Done -> ok end.
%% send_bad_dhr():
@@ -1910,17 +1832,17 @@ send_bad_dhdr(BadNode, ToNode) when is_atom(BadNode), is_atom(ToNode) ->
Parent = self(),
Done = make_ref(),
spawn_link(BadNode,
- fun () ->
- pong = net_adm:ping(ToNode),
- port_command(dport(ToNode), dmsg_bad_hdr()),
- Parent ! Done
- end),
+ fun () ->
+ pong = net_adm:ping(ToNode),
+ port_command(dport(ToNode), dmsg_bad_hdr()),
+ Parent ! Done
+ end),
receive Done -> ok end.
dport(Node) when is_atom(Node) ->
case catch erts_debug:get_internal_state(available_internal_state) of
- true -> true;
- _ -> erts_debug:set_internal_state(available_internal_state, true)
+ true -> true;
+ _ -> erts_debug:set_internal_state(available_internal_state, true)
end,
erts_debug:get_internal_state({dist_port, Node}).
@@ -1933,7 +1855,7 @@ dmsg_bad_hdr() ->
[131, % Version Magic
$D, % Dist header
255]. % 255 atom references
-
+
%% dmsg_fake_hdr1() ->
%% A = <<"fake header atom 1">>,
@@ -1974,21 +1896,21 @@ start_node(Name, Args, Rel) when is_atom(Name), is_list(Rel) ->
Pa = filename:dirname(code:which(?MODULE)),
Cookie = atom_to_list(erlang:get_cookie()),
RelArg = case Rel of
- [] -> [];
- _ -> [{erl,[{release,Rel}]}]
- end,
+ [] -> [];
+ _ -> [{erl,[{release,Rel}]}]
+ end,
test_server:start_node(Name, slave,
- [{args,
- Args++" -setcookie "++Cookie++" -pa \""++Pa++"\""}
- | RelArg]);
+ [{args,
+ Args++" -setcookie "++Cookie++" -pa \""++Pa++"\""}
+ | RelArg]);
start_node(Config, Args, Rel) when is_list(Config), is_list(Rel) ->
Name = list_to_atom((atom_to_list(?MODULE)
- ++ "-"
- ++ atom_to_list(?config(testcase, Config))
- ++ "-"
- ++ integer_to_list(erlang:system_time(seconds))
- ++ "-"
- ++ integer_to_list(erlang:unique_integer([positive])))),
+ ++ "-"
+ ++ atom_to_list(proplists:get_value(testcase, Config))
+ ++ "-"
+ ++ integer_to_list(erlang:system_time(seconds))
+ ++ "-"
+ ++ integer_to_list(erlang:unique_integer([positive])))),
start_node(Name, Args, Rel).
stop_node(Node) ->
@@ -1999,13 +1921,13 @@ freeze_node(Node, MS) ->
DoingIt = make_ref(),
Freezer = self(),
spawn_link(Node,
- fun () ->
- erts_debug:set_internal_state(available_internal_state,
- true),
- dport_send(Freezer, DoingIt),
- receive after Own -> ok end,
- erts_debug:set_internal_state(block, MS+Own)
- end),
+ fun () ->
+ erts_debug:set_internal_state(available_internal_state,
+ true),
+ dport_send(Freezer, DoingIt),
+ receive after Own -> ok end,
+ erts_debug:set_internal_state(block, MS+Own)
+ end),
receive DoingIt -> ok end,
receive after Own -> ok end.
@@ -2016,46 +1938,46 @@ do_inet_rpc({_,_,Sock},M,F,A) ->
Bin = term_to_binary({M,F,A}),
gen_tcp:send(Sock,Bin),
case gen_tcp:recv(Sock,0) of
- {ok, Bin2} ->
- T = binary_to_term(Bin2),
- {ok,T};
- Else ->
- {error, Else}
+ {ok, Bin2} ->
+ T = binary_to_term(Bin2),
+ {ok,T};
+ Else ->
+ {error, Else}
end.
inet_rpc_server([Host, PortList]) ->
Port = list_to_integer(PortList),
{ok, Sock} = gen_tcp:connect(Host, Port,[binary, {packet, 4},
- {active, false}]),
+ {active, false}]),
inet_rpc_server_loop(Sock).
inet_rpc_server_loop(Sock) ->
case gen_tcp:recv(Sock,0) of
- {ok, Bin} ->
- {M,F,A} = binary_to_term(Bin),
- Res = (catch apply(M,F,A)),
- RB = term_to_binary(Res),
- gen_tcp:send(Sock,RB),
- inet_rpc_server_loop(Sock);
- _ ->
- erlang:halt()
+ {ok, Bin} ->
+ {M,F,A} = binary_to_term(Bin),
+ Res = (catch apply(M,F,A)),
+ RB = term_to_binary(Res),
+ gen_tcp:send(Sock,RB),
+ inet_rpc_server_loop(Sock);
+ _ ->
+ erlang:halt()
end.
-
+
start_relay_node(Node, Args) ->
Pa = filename:dirname(code:which(?MODULE)),
Cookie = "NOT"++atom_to_list(erlang:get_cookie()),
{ok, LSock} = gen_tcp:listen(0, [binary, {packet, 4},
- {active, false}]),
+ {active, false}]),
{ok, Port} = inet:port(LSock),
{ok, Host} = inet:gethostname(),
RunArg = "-run " ++ atom_to_list(?MODULE) ++ " inet_rpc_server " ++
- Host ++ " " ++ integer_to_list(Port),
+ Host ++ " " ++ integer_to_list(Port),
{ok, NN} =
- test_server:start_node(Node, peer,
- [{args, Args ++
- " -setcookie "++Cookie++" -pa "++Pa++" "++
- RunArg}]),
+ test_server:start_node(Node, peer,
+ [{args, Args ++
+ " -setcookie "++Cookie++" -pa "++Pa++" "++
+ RunArg}]),
[N,H] = string:tokens(atom_to_list(NN),"@"),
{ok, Sock} = gen_tcp:accept(LSock),
pang = net_adm:ping(NN),
@@ -2070,28 +1992,28 @@ wait_dead(N,H,0) ->
{error,{not_dead,N,H}};
wait_dead(N,H,X) ->
case erl_epmd:port_please(N,H) of
- {port,_,_} ->
- receive
- after 1000 ->
- ok
- end,
- wait_dead(N,H,X-1);
- noport ->
- ok;
- Else ->
- {error, {unexpected, Else}}
+ {port,_,_} ->
+ receive
+ after 1000 ->
+ ok
+ end,
+ wait_dead(N,H,X-1);
+ noport ->
+ ok;
+ Else ->
+ {error, {unexpected, Else}}
end.
-
+
start_node_monitors(Nodes) ->
Master = self(),
lists:foreach(fun (Node) ->
- spawn(Node,
- fun () ->
- node_monitor(Master)
- end)
- end,
- Nodes),
+ spawn(Node,
+ fun () ->
+ node_monitor(Master)
+ end)
+ end,
+ Nodes),
ok.
node_monitor(Master) ->
@@ -2100,42 +2022,42 @@ node_monitor(Master) ->
net_kernel:monitor_nodes(true, Opts),
Nodes1 = nodes(connected),
case lists:sort(Nodes0) == lists:sort(Nodes1) of
- true ->
- lists:foreach(fun (Node) ->
- Master ! {nodeup, node(), Node}
- end,
- Nodes0),
- ?t:format("~p ~p: ~p~n", [node(), erlang:system_time(micro_seconds), Nodes0]),
- node_monitor_loop(Master);
- false ->
- net_kernel:monitor_nodes(false, Opts),
- flush_node_changes(),
- node_monitor(Master)
+ true ->
+ lists:foreach(fun (Node) ->
+ Master ! {nodeup, node(), Node}
+ end,
+ Nodes0),
+ io:format("~p ~p: ~p~n", [node(), erlang:system_time(micro_seconds), Nodes0]),
+ node_monitor_loop(Master);
+ false ->
+ net_kernel:monitor_nodes(false, Opts),
+ flush_node_changes(),
+ node_monitor(Master)
end.
flush_node_changes() ->
receive
- {NodeChange, _Node, _InfoList} when NodeChange == nodeup;
- NodeChange == nodedown ->
- flush_node_changes()
+ {NodeChange, _Node, _InfoList} when NodeChange == nodeup;
+ NodeChange == nodedown ->
+ flush_node_changes()
after 0 ->
- ok
+ ok
end.
node_monitor_loop(Master) ->
receive
- {nodeup, Node, _InfoList} = Msg ->
- Master ! {nodeup, node(), Node},
- ?t:format("~p ~p: ~p~n", [node(), erlang:system_time(micro_seconds), Msg]),
- node_monitor_loop(Master);
- {nodedown, Node, InfoList} = Msg ->
- Reason = case lists:keysearch(nodedown_reason, 1, InfoList) of
- {value, {nodedown_reason, R}} -> R;
- _ -> undefined
- end,
- Master ! {nodedown, node(), Node, Reason},
- ?t:format("~p ~p: ~p~n", [node(), erlang:system_time(micro_seconds), Msg]),
- node_monitor_loop(Master)
+ {nodeup, Node, _InfoList} = Msg ->
+ Master ! {nodeup, node(), Node},
+ io:format("~p ~p: ~p~n", [node(), erlang:system_time(micro_seconds), Msg]),
+ node_monitor_loop(Master);
+ {nodedown, Node, InfoList} = Msg ->
+ Reason = case lists:keysearch(nodedown_reason, 1, InfoList) of
+ {value, {nodedown_reason, R}} -> R;
+ _ -> undefined
+ end,
+ Master ! {nodedown, node(), Node, Reason},
+ io:format("~p ~p: ~p~n", [node(), erlang:system_time(micro_seconds), Msg]),
+ node_monitor_loop(Master)
end.
verify_up(A, B) ->
@@ -2149,16 +2071,16 @@ verify_still_up(A, B) ->
verify_no_down(A, B) ->
receive
- {nodedown, A, B, _} = Msg0 ->
- ?t:fail(Msg0)
+ {nodedown, A, B, _} = Msg0 ->
+ ct:fail(Msg0)
after 0 ->
- ok
+ ok
end,
receive
- {nodedown, B, A, _} = Msg1 ->
- ?t:fail(Msg1)
+ {nodedown, B, A, _} = Msg1 ->
+ ct:fail(Msg1)
after 0 ->
- ok
+ ok
end.
%% verify_down(A, B) ->
@@ -2167,12 +2089,12 @@ verify_no_down(A, B) ->
verify_down(A, ReasonA, B, ReasonB) ->
receive
- {nodedown, A, B, _} = Msg0 ->
- {nodedown, A, B, ReasonA} = Msg0
+ {nodedown, A, B, _} = Msg0 ->
+ {nodedown, A, B, ReasonA} = Msg0
end,
receive
- {nodedown, B, A, _} = Msg1 ->
- {nodedown, B, A, ReasonB} = Msg1
+ {nodedown, B, A, _} = Msg1 ->
+ {nodedown, B, A, ReasonB} = Msg1
end,
ok.
@@ -2192,17 +2114,17 @@ from(_, []) -> [].
long_or_short() ->
case net_kernel:longnames() of
- true -> " -name ";
- false -> " -sname "
+ true -> " -name ";
+ false -> " -sname "
end.
until(Fun) ->
case Fun() of
- true ->
- ok;
- false ->
- receive after 10 -> ok end,
- until(Fun)
+ true ->
+ ok;
+ false ->
+ receive after 10 -> ok end,
+ until(Fun)
end.
forever(Fun) ->
@@ -2227,9 +2149,9 @@ stop_busy_dist_port_tracer(_) ->
busy_dist_port_tracer() ->
receive
- {monitor, _SuspendedProcess, busy_dist_port, _Port} = M ->
- erlang:display(M),
- busy_dist_port_tracer()
+ {monitor, _SuspendedProcess, busy_dist_port, _Port} = M ->
+ erlang:display(M),
+ busy_dist_port_tracer()
end.
repeat(_Fun, 0) ->
@@ -2242,38 +2164,38 @@ string_to_atom_ext(String) ->
Utf8List = string_to_utf8_list(String),
Len = length(Utf8List),
case Len < 256 of
- true ->
- [?SMALL_ATOM_UTF8_EXT, Len | Utf8List];
- false ->
- [?ATOM_UTF8_EXT, Len bsr 8, Len band 16#ff | Utf8List]
+ true ->
+ [?SMALL_ATOM_UTF8_EXT, Len | Utf8List];
+ false ->
+ [?ATOM_UTF8_EXT, Len bsr 8, Len band 16#ff | Utf8List]
end.
string_to_atom(String) ->
binary_to_term(list_to_binary([?VERSION_MAGIC
- | string_to_atom_ext(String)])).
+ | string_to_atom_ext(String)])).
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)),
@@ -2283,47 +2205,47 @@ string_to_utf8_list([CP|CPs]) when is_integer(CP),
utf8_list_to_string([]) ->
[];
utf8_list_to_string([B|Bs]) when is_integer(B),
- 0 =< B,
- B =< 16#7F ->
+ 0 =< B,
+ B =< 16#7F ->
[B | utf8_list_to_string(Bs)];
utf8_list_to_string([B0, B1 | Bs]) when is_integer(B0),
- 16#C0 =< B0,
- B0 =< 16#DF,
- is_integer(B1),
- 16#80 =< B1,
- B1 =< 16#BF ->
+ 16#C0 =< B0,
+ B0 =< 16#DF,
+ is_integer(B1),
+ 16#80 =< B1,
+ B1 =< 16#BF ->
[(((B0 band 16#1F) bsl 6)
- bor (B1 band 16#3F))
+ bor (B1 band 16#3F))
| utf8_list_to_string(Bs)];
utf8_list_to_string([B0, B1, B2 | Bs]) when is_integer(B0),
- 16#E0 =< B0,
- B0 =< 16#EF,
- is_integer(B1),
- 16#80 =< B1,
- B1 =< 16#BF,
- is_integer(B2),
- 16#80 =< B2,
- B2 =< 16#BF ->
+ 16#E0 =< B0,
+ B0 =< 16#EF,
+ is_integer(B1),
+ 16#80 =< B1,
+ B1 =< 16#BF,
+ is_integer(B2),
+ 16#80 =< B2,
+ B2 =< 16#BF ->
[(((B0 band 16#F) bsl 12)
- bor ((B1 band 16#3F) bsl 6)
- bor (B2 band 16#3F))
+ bor ((B1 band 16#3F) bsl 6)
+ bor (B2 band 16#3F))
| utf8_list_to_string(Bs)];
utf8_list_to_string([B0, B1, B2, B3 | Bs]) when is_integer(B0),
- 16#F0 =< B0,
- B0 =< 16#F7,
- is_integer(B1),
- 16#80 =< B1,
- B1 =< 16#BF,
- is_integer(B2),
- 16#80 =< B2,
- B2 =< 16#BF,
- is_integer(B3),
- 16#80 =< B3,
- B3 =< 16#BF ->
+ 16#F0 =< B0,
+ B0 =< 16#F7,
+ is_integer(B1),
+ 16#80 =< B1,
+ B1 =< 16#BF,
+ is_integer(B2),
+ 16#80 =< B2,
+ B2 =< 16#BF,
+ is_integer(B3),
+ 16#80 =< B3,
+ B3 =< 16#BF ->
[(((B0 band 16#7) bsl 18)
- bor ((B1 band 16#3F) bsl 12)
- bor ((B2 band 16#3F) bsl 6)
- bor (B3 band 16#3F))
+ bor ((B1 band 16#3F) bsl 12)
+ bor ((B2 band 16#3F) bsl 6)
+ bor (B3 band 16#3F))
| utf8_list_to_string(Bs)].
mk_pid({NodeName, Creation}, Number, Serial) when is_atom(NodeName) ->
@@ -2331,17 +2253,17 @@ 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 when is_pid(Pid) ->
- Pid;
- {'EXIT', {badarg, _}} ->
- exit({badarg, mk_pid, [{NodeNameExt, Creation}, Number, Serial]});
- Other ->
- exit({unexpected_binary_to_term_result, Other})
+ ?PID_EXT,
+ NodeNameExt,
+ uint32_be(Number),
+ uint32_be(Serial),
+ uint8(Creation)])) of
+ Pid when is_pid(Pid) ->
+ Pid;
+ {'EXIT', {badarg, _}} ->
+ exit({badarg, mk_pid, [{NodeNameExt, Creation}, Number, Serial]});
+ Other ->
+ exit({unexpected_binary_to_term_result, Other})
end.
mk_port({NodeName, Creation}, Number) when is_atom(NodeName) ->
@@ -2349,59 +2271,59 @@ mk_port({NodeName, Creation}, Number) when is_atom(NodeName) ->
mk_port({NodeNameExt, Creation}, Number);
mk_port({NodeNameExt, Creation}, Number) ->
case catch binary_to_term(list_to_binary([?VERSION_MAGIC,
- ?PORT_EXT,
- NodeNameExt,
- uint32_be(Number),
- uint8(Creation)])) of
- Port when is_port(Port) ->
- Port;
- {'EXIT', {badarg, _}} ->
- exit({badarg, mk_port, [{NodeNameExt, Creation}, Number]});
- Other ->
- exit({unexpected_binary_to_term_result, Other})
+ ?PORT_EXT,
+ NodeNameExt,
+ uint32_be(Number),
+ uint8(Creation)])) of
+ Port when is_port(Port) ->
+ Port;
+ {'EXIT', {badarg, _}} ->
+ exit({badarg, mk_port, [{NodeNameExt, Creation}, Number]});
+ Other ->
+ exit({unexpected_binary_to_term_result, Other})
end.
mk_ref({NodeName, Creation}, [Number] = NL) when is_atom(NodeName),
- is_integer(Creation),
- is_integer(Number) ->
+ 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),
- is_integer(Number) ->
+ 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({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}, Numbers) when is_integer(Creation),
- is_list(Numbers) ->
+ is_list(Numbers) ->
case catch binary_to_term(list_to_binary([?VERSION_MAGIC,
- ?NEW_REFERENCE_EXT,
- uint16_be(length(Numbers)),
- NodeNameExt,
- uint8(Creation),
- lists:map(fun (N) ->
- uint32_be(N)
- end,
- Numbers)])) of
- Ref when is_reference(Ref) ->
- Ref;
- {'EXIT', {badarg, _}} ->
- exit({badarg, mk_ref, [{NodeNameExt, Creation}, Numbers]});
- Other ->
- exit({unexpected_binary_to_term_result, Other})
+ ?NEW_REFERENCE_EXT,
+ uint16_be(length(Numbers)),
+ NodeNameExt,
+ uint8(Creation),
+ lists:map(fun (N) ->
+ uint32_be(N)
+ end,
+ Numbers)])) of
+ Ref when is_reference(Ref) ->
+ Ref;
+ {'EXIT', {badarg, _}} ->
+ exit({badarg, mk_ref, [{NodeNameExt, Creation}, Numbers]});
+ Other ->
+ exit({unexpected_binary_to_term_result, Other})
end.
diff --git a/erts/emulator/test/distribution_SUITE_data/run.erl b/erts/emulator/test/distribution_SUITE_data/run.erl
index d5ed139369..f574b2c02c 100644
--- a/erts/emulator/test/distribution_SUITE_data/run.erl
+++ b/erts/emulator/test/distribution_SUITE_data/run.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/erts/emulator/test/driver_SUITE.erl b/erts/emulator/test/driver_SUITE.erl
index 8eb555a5b7..f134a197aa 100644
--- a/erts/emulator/test/driver_SUITE.erl
+++ b/erts/emulator/test/driver_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.
@@ -29,60 +29,60 @@
-module(driver_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,
-
- a_test/1,
- outputv_echo/1,
- timer_measure/1,
- timer_cancel/1,
- timer_change/1,
- timer_delay/1,
- queue_echo/1,
- outputv_errors/1,
- driver_unloaded/1,
- io_ready_exit/1,
- use_fallback_pollset/1,
- bad_fd_in_pollset/1,
- driver_event/1,
- fd_change/1,
- steal_control/1,
- otp_6602/1,
- driver_system_info_base_ver/1,
- driver_system_info_prev_ver/1,
- driver_system_info_current_ver/1,
- driver_monitor/1,
-
- ioq_exit_ready_input/1,
- ioq_exit_ready_output/1,
- ioq_exit_timeout/1,
- ioq_exit_ready_async/1,
- ioq_exit_event/1,
- ioq_exit_ready_input_async/1,
- ioq_exit_ready_output_async/1,
- ioq_exit_timeout_async/1,
- ioq_exit_event_async/1,
- zero_extended_marker_garb_drv/1,
- invalid_extended_marker_drv/1,
- larger_major_vsn_drv/1,
- larger_minor_vsn_drv/1,
- smaller_major_vsn_drv/1,
- smaller_minor_vsn_drv/1,
- peek_non_existing_queue/1,
- otp_6879/1,
- caller/1,
- many_events/1,
- missing_callbacks/1,
- smp_select/1,
- driver_select_use/1,
- thread_mseg_alloc_cache_clean/1,
- otp_9302/1,
- thr_free_drv/1,
- async_blast/1,
- thr_msg_blast/1,
- consume_timeslice/1,
- z_test/1]).
+ end_per_suite/1, init_per_group/2,end_per_group/2,
+ init_per_testcase/2,
+ end_per_testcase/2,
+
+ a_test/1,
+ outputv_echo/1,
+ timer_measure/1,
+ timer_cancel/1,
+ timer_change/1,
+ timer_delay/1,
+ queue_echo/1,
+ outputv_errors/1,
+ driver_unloaded/1,
+ io_ready_exit/1,
+ use_fallback_pollset/1,
+ bad_fd_in_pollset/1,
+ driver_event/1,
+ fd_change/1,
+ steal_control/1,
+ otp_6602/1,
+ driver_system_info_base_ver/1,
+ driver_system_info_prev_ver/1,
+ driver_system_info_current_ver/1,
+ driver_monitor/1,
+
+ ioq_exit_ready_input/1,
+ ioq_exit_ready_output/1,
+ ioq_exit_timeout/1,
+ ioq_exit_ready_async/1,
+ ioq_exit_event/1,
+ ioq_exit_ready_input_async/1,
+ ioq_exit_ready_output_async/1,
+ ioq_exit_timeout_async/1,
+ ioq_exit_event_async/1,
+ zero_extended_marker_garb_drv/1,
+ invalid_extended_marker_drv/1,
+ larger_major_vsn_drv/1,
+ larger_minor_vsn_drv/1,
+ smaller_major_vsn_drv/1,
+ smaller_minor_vsn_drv/1,
+ peek_non_existing_queue/1,
+ otp_6879/1,
+ caller/1,
+ many_events/1,
+ missing_callbacks/1,
+ smp_select/1,
+ driver_select_use/1,
+ thread_mseg_alloc_cache_clean/1,
+ otp_9302/1,
+ thr_free_drv/1,
+ async_blast/1,
+ thr_msg_blast/1,
+ consume_timeslice/1,
+ z_test/1]).
-export([bin_prefix/2]).
@@ -119,22 +119,22 @@
-define(heap_binary_size, 64).
init_per_testcase(Case, Config) when is_atom(Case), is_list(Config) ->
- Dog=?t:timetrap(?t:minutes(2)),
case catch erts_debug:get_internal_state(available_internal_state) of
- true -> ok;
- _ -> erts_debug:set_internal_state(available_internal_state, true)
+ true -> ok;
+ _ -> erts_debug:set_internal_state(available_internal_state, true)
end,
erlang:display({init_per_testcase, Case}),
- ?line 0 = element(1, erts_debug:get_internal_state(check_io_debug)),
- [{watchdog, Dog},{testcase, Case}|Config].
+ 0 = element(1, erts_debug:get_internal_state(check_io_debug)),
+ [{testcase, Case}|Config].
end_per_testcase(Case, Config) ->
- Dog = ?config(watchdog, Config),
erlang:display({end_per_testcase, Case}),
- ?line 0 = element(1, erts_debug:get_internal_state(check_io_debug)),
- ?t:timetrap_cancel(Dog).
+ 0 = element(1, erts_debug:get_internal_state(check_io_debug)),
+ ok.
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap, {minutes, 1}}].
all() -> %% Keep a_test first and z_test last...
[a_test, outputv_errors, outputv_echo, queue_echo, {group, timer},
@@ -179,42 +179,42 @@ init_per_group(_GroupName, Config) ->
end_per_group(_GroupName, Config) ->
Config.
-outputv_errors(doc) -> "Test sending bad types to port with an outputv-capable driver.";
+%% Test sending bad types to port with an outputv-capable driver.
outputv_errors(Config) when is_list(Config) ->
- ?line Path = ?config(data_dir, Config),
- ?line erl_ddll:start(),
- ?line ok = load_driver(Path, outputv_drv),
+ Path = proplists:get_value(data_dir, Config),
+ erl_ddll:start(),
+ ok = load_driver(Path, outputv_drv),
outputv_bad_types(fun(T) ->
- ?line outputv_errors_1(T),
- ?line outputv_errors_1([1|T]),
- ?line L = [1,2,3],
- ?line outputv_errors_1([L,T]),
- ?line outputv_errors_1([L|T])
- end),
+ outputv_errors_1(T),
+ outputv_errors_1([1|T]),
+ L = [1,2,3],
+ outputv_errors_1([L,T]),
+ outputv_errors_1([L|T])
+ end),
outputv_errors_1(42),
%% Test iolists that do not fit in the address space.
%% Unfortunately, it would be too slow to test in a 64-bit emulator.
case erlang:system_info(wordsize) of
- 4 -> outputv_huge_iolists();
- _ -> ok
+ 4 -> outputv_huge_iolists();
+ _ -> ok
end.
outputv_bad_types(Test) ->
Types = [-1,256,atom,42.0,{a,b,c},make_ref(),fun() -> 42 end,
- [1|2],<<1:1>>,<<1:9>>,<<1:15>>],
+ [1|2],<<1:1>>,<<1:9>>,<<1:15>>],
_ = [Test(Type) || Type <- Types],
ok.
outputv_huge_iolists() ->
FourGigs = 1 bsl 32,
- ?line Sizes = [FourGigs+N || N <- lists:seq(0, 64)] ++
- [1 bsl N || N <- lists:seq(33, 37)],
- ?line Base = <<0:(1 bsl 20)/unit:8>>,
+ Sizes = [FourGigs+N || N <- lists:seq(0, 64)] ++
+ [1 bsl N || N <- lists:seq(33, 37)],
+ Base = <<0:(1 bsl 20)/unit:8>>,
[begin
- ?line L = build_iolist(Sz, Base),
- ?line outputv_errors_1(L)
+ L = build_iolist(Sz, Base),
+ outputv_errors_1(L)
end || Sz <- Sizes],
ok.
@@ -225,94 +225,93 @@ outputv_errors_1(Term) ->
build_iolist(N, Base) when N < 16 ->
case rand:uniform(3) of
- 1 ->
- <<Bin:N/binary,_/binary>> = Base,
- Bin;
- _ ->
- lists:seq(1, N)
+ 1 ->
+ <<Bin:N/binary,_/binary>> = Base,
+ Bin;
+ _ ->
+ lists:seq(1, N)
end;
build_iolist(N, Base) when N =< byte_size(Base) ->
case rand:uniform(3) of
- 1 ->
- <<Bin:N/binary,_/binary>> = Base,
- Bin;
- 2 ->
- <<Bin:N/binary,_/binary>> = Base,
- [Bin];
- 3 ->
- case N rem 2 of
- 0 ->
- L = build_iolist(N div 2, Base),
- [L,L];
- 1 ->
- L = build_iolist(N div 2, Base),
- [L,L,45]
- end
+ 1 ->
+ <<Bin:N/binary,_/binary>> = Base,
+ Bin;
+ 2 ->
+ <<Bin:N/binary,_/binary>> = Base,
+ [Bin];
+ 3 ->
+ case N rem 2 of
+ 0 ->
+ L = build_iolist(N div 2, Base),
+ [L,L];
+ 1 ->
+ L = build_iolist(N div 2, Base),
+ [L,L,45]
+ end
end;
build_iolist(N0, Base) ->
Small = rand:uniform(15),
Seq = lists:seq(1, Small),
N = N0 - Small,
case N rem 2 of
- 0 ->
- L = build_iolist(N div 2, Base),
- [L,L|Seq];
- 1 ->
- L = build_iolist(N div 2, Base),
- [47,L,L|Seq]
+ 0 ->
+ L = build_iolist(N div 2, Base),
+ [L,L|Seq];
+ 1 ->
+ L = build_iolist(N div 2, Base),
+ [47,L,L|Seq]
end.
-outputv_echo(doc) -> ["Test echoing data with a driver that supports outputv."];
+%% Test echoing data with a driver that supports outputv.
outputv_echo(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:minutes(10)),
+ ct:timetrap({minutes, 10}),
Name = 'outputv_drv',
P = start_driver(Config, Name, true),
- ?line ov_test(P, {bin,0}),
- ?line ov_test(P, {bin,1}),
- ?line ov_test(P, {bin,2}),
- ?line ov_test(P, {bin,3}),
- ?line ov_test(P, {bin,4}),
- ?line ov_test(P, {bin,5}),
- ?line ov_test(P, {bin,6}),
- ?line ov_test(P, {bin,7}),
- ?line ov_test(P, {bin,8}),
- ?line ov_test(P, {bin,15}),
- ?line ov_test(P, {bin,16}),
- ?line ov_test(P, {bin,17}),
-
- ?line ov_test(P, {list,0}),
- ?line ov_test(P, {list,1}),
- ?line ov_test(P, {list,2}),
- ?line ov_test(P, [int,int,{list,0},int]),
- ?line ov_test(P, [int,int,{list,1},int]),
- ?line ov_test(P, [int,int,{list,2}]),
- ?line ov_test(P, [{list,3},int,int,{list,2}]),
- ?line ov_test(P, {list,33}),
-
- ?line ov_test(P, [{bin,0}]),
- ?line ov_test(P, [{bin,1}]),
- ?line ov_test(P, [{bin,2}]),
- ?line ov_test(P, [{bin,3}]),
- ?line ov_test(P, [{bin,4}]),
- ?line ov_test(P, [{bin,5}]),
- ?line ov_test(P, [{bin,6},int]),
- ?line ov_test(P, [int,{bin,3}]),
- ?line ov_test(P, [int|{bin,4}]),
- ?line ov_test(P, [{bin,17},int,{bin,13}|{bin,3}]),
-
- ?line ov_test(P, [int,{bin,17},int,{bin,?heap_binary_size+1}|{bin,3}]),
+ ov_test(P, {bin,0}),
+ ov_test(P, {bin,1}),
+ ov_test(P, {bin,2}),
+ ov_test(P, {bin,3}),
+ ov_test(P, {bin,4}),
+ ov_test(P, {bin,5}),
+ ov_test(P, {bin,6}),
+ ov_test(P, {bin,7}),
+ ov_test(P, {bin,8}),
+ ov_test(P, {bin,15}),
+ ov_test(P, {bin,16}),
+ ov_test(P, {bin,17}),
+
+ ov_test(P, {list,0}),
+ ov_test(P, {list,1}),
+ ov_test(P, {list,2}),
+ ov_test(P, [int,int,{list,0},int]),
+ ov_test(P, [int,int,{list,1},int]),
+ ov_test(P, [int,int,{list,2}]),
+ ov_test(P, [{list,3},int,int,{list,2}]),
+ ov_test(P, {list,33}),
+
+ ov_test(P, [{bin,0}]),
+ ov_test(P, [{bin,1}]),
+ ov_test(P, [{bin,2}]),
+ ov_test(P, [{bin,3}]),
+ ov_test(P, [{bin,4}]),
+ ov_test(P, [{bin,5}]),
+ ov_test(P, [{bin,6},int]),
+ ov_test(P, [int,{bin,3}]),
+ ov_test(P, [int|{bin,4}]),
+ ov_test(P, [{bin,17},int,{bin,13}|{bin,3}]),
+
+ ov_test(P, [int,{bin,17},int,{bin,?heap_binary_size+1}|{bin,3}]),
stop_driver(P, Name),
- ?line test_server:timetrap_cancel(Dog),
ok.
ov_test(Port, Template) ->
Self = self(),
spawn_opt(erlang, apply, [fun () -> ov_test(Self, Port, Template) end,[]],
- [link,{fullsweep_after,0}]),
+ [link,{fullsweep_after,0}]),
receive
- done -> ok
+ done -> ok
end.
ov_test(Parent, Port, Template) ->
@@ -354,21 +353,20 @@ ov_send_and_test(Port, Data, ExpectedResult) ->
io:format("~p ! ~P", [Port,Data,12]),
Port ! {self(),{command,Data}},
receive
- {Port,{data,ReturnData}} ->
- io:format("~p returned ~P", [Port,ReturnData,12]),
- compare(ReturnData, ExpectedResult);
- {Port,{data,OtherData}} ->
- io:format("~p returned WRONG data ~p", [Port,OtherData]),
- ?line test_server:fail();
- Wrong ->
- ?line test_server:fail({unexpected_port_or_data,Wrong})
+ {Port,{data,ReturnData}} ->
+ io:format("~p returned ~P", [Port,ReturnData,12]),
+ compare(ReturnData, ExpectedResult);
+ {Port,{data,OtherData}} ->
+ ct:fail("~p returned WRONG data ~p", [Port,OtherData]);
+ Wrong ->
+ ct:fail({unexpected_port_or_data,Wrong})
end.
compare(Got, Expected) ->
case {list_to_binary([Got]),list_to_binary([Expected])} of
- {B,B} -> ok;
- {_Gb,_Eb} ->
- ?t:fail(got_bad_data)
+ {B,B} -> ok;
+ {_Gb,_Eb} ->
+ ct:fail(got_bad_data)
end.
@@ -377,146 +375,138 @@ compare(Got, Expected) ->
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-timer_measure(doc) -> ["Check that timers time out in good time."];
+%% Check that timers time out in good time.
timer_measure(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:minutes(1)),
Name = 'timer_drv',
- ?line Port = start_driver(Config, Name, false),
+ Port = start_driver(Config, Name, false),
- ?line try_timeouts(Port, 8997),
+ try_timeouts(Port, 8997),
- ?line stop_driver(Port, Name),
- ?line test_server:timetrap_cancel(Dog),
+ stop_driver(Port, Name),
ok.
try_timeouts(_, 0) -> ok;
try_timeouts(Port, Timeout) ->
- ?line TimeBefore = erlang:monotonic_time(),
- ?line erlang:port_command(Port, <<?START_TIMER,Timeout:32>>),
+ TimeBefore = erlang:monotonic_time(),
+ erlang:port_command(Port, <<?START_TIMER,Timeout:32>>),
receive
- {Port,{data,[?TIMER]}} ->
- ?line Elapsed = erl_millisecs() - erl_millisecs(TimeBefore),
- io:format("Elapsed: ~p Timeout: ~p\n", [Elapsed, Timeout]),
- if
- Elapsed < Timeout ->
- ?line ?t:fail(too_short);
- Elapsed > Timeout + ?delay ->
- ?line ?t:fail(too_long);
- true ->
- try_timeouts(Port, Timeout div 2)
- end
+ {Port,{data,[?TIMER]}} ->
+ Elapsed = erl_millisecs() - erl_millisecs(TimeBefore),
+ io:format("Elapsed: ~p Timeout: ~p\n", [Elapsed, Timeout]),
+ if
+ Elapsed < Timeout ->
+ ct:fail(too_short);
+ Elapsed > Timeout + ?delay ->
+ ct:fail(too_long);
+ true ->
+ try_timeouts(Port, Timeout div 2)
+ end
after Timeout + ?delay ->
- ?line test_server:fail("driver failed to timeout")
+ ct:fail("driver failed to timeout")
end.
-timer_cancel(doc) -> ["Try cancelling timers set in a driver."];
+%% Try cancelling timers set in a driver.
timer_cancel(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:minutes(1)),
Name = 'timer_drv',
- ?line Port = start_driver(Config, Name, false),
+ Port = start_driver(Config, Name, false),
- ?line try_cancel(Port, 10000),
+ try_cancel(Port, 10000),
- ?line stop_driver(Port, Name),
- ?line test_server:timetrap_cancel(Dog),
+ stop_driver(Port, Name),
ok.
-
+
try_cancel(Port, Timeout) ->
- ?line T_before = erl_millisecs(),
+ T_before = erl_millisecs(),
Port ! {self(),{command,<<?START_TIMER,(Timeout + ?delay):32>>}},
receive
- {Port, {data, [?TIMER]}} ->
- ?line test_server:fail("driver timed out before cancelling it")
+ {Port, {data, [?TIMER]}} ->
+ ct:fail("driver timed out before cancelling it")
after Timeout ->
- Port ! {self(), {command, [?CANCEL_TIMER]}},
- receive
- {Port, {data, [?TIMER]}} ->
- ?line test_server:fail("driver timed out after cancelling it");
- {Port, {data, [?CANCELLED]}} ->
- ?line Time_milli_secs = erl_millisecs() - T_before,
-
- io:format("Time_milli_secs: ~p Timeout: ~p\n",
- [Time_milli_secs, Timeout]),
- if
- Time_milli_secs > (Timeout + ?delay) ->
- ?line test_server:fail("too long real time");
- Timeout == 0 -> ok;
- true -> try_cancel(Port, Timeout div 2)
- end
- after ?delay ->
- test_server:fail("No message from driver")
- end
+ Port ! {self(), {command, [?CANCEL_TIMER]}},
+ receive
+ {Port, {data, [?TIMER]}} ->
+ ct:fail("driver timed out after cancelling it");
+ {Port, {data, [?CANCELLED]}} ->
+ Time_milli_secs = erl_millisecs() - T_before,
+
+ io:format("Time_milli_secs: ~p Timeout: ~p\n",
+ [Time_milli_secs, Timeout]),
+ if
+ Time_milli_secs > (Timeout + ?delay) ->
+ ct:fail("too long real time");
+ Timeout == 0 -> ok;
+ true -> try_cancel(Port, Timeout div 2)
+ end
+ after ?delay ->
+ ct:fail("No message from driver")
+ end
end.
%% Test that timers don't time out too early if we do a sleep
%% before setting a timer.
timer_delay(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:minutes(1)),
Name = 'timer_drv',
- ?line Port = start_driver(Config, Name, false),
+ Port = start_driver(Config, Name, false),
- ?line TimeBefore = erlang:monotonic_time(),
+ TimeBefore = erlang:monotonic_time(),
Timeout0 = 350,
- ?line erlang:port_command(Port, <<?DELAY_START_TIMER,Timeout0:32>>),
+ erlang:port_command(Port, <<?DELAY_START_TIMER,Timeout0:32>>),
Timeout = Timeout0 +
- case os:type() of
- {win32,_} -> 0; %Driver doesn't sleep on Windows.
- _ -> 1000
- end,
+ case os:type() of
+ {win32,_} -> 0; %Driver doesn't sleep on Windows.
+ _ -> 1000
+ end,
receive
- {Port,{data,[?TIMER]}} ->
- ?line Elapsed = erl_millisecs() - erl_millisecs(TimeBefore),
- io:format("Elapsed time: ~p Timeout: ~p\n",
- [Elapsed,Timeout]),
- if
- Elapsed < Timeout ->
- ?line ?t:fail(too_short);
- Elapsed > Timeout + ?delay ->
- ?line ?t:fail(too_long);
- true ->
- ok
- end
+ {Port,{data,[?TIMER]}} ->
+ Elapsed = erl_millisecs() - erl_millisecs(TimeBefore),
+ io:format("Elapsed time: ~p Timeout: ~p\n",
+ [Elapsed,Timeout]),
+ if
+ Elapsed < Timeout ->
+ ct:fail(too_short);
+ Elapsed > Timeout + ?delay ->
+ ct:fail(too_long);
+ true ->
+ ok
+ end
end,
- ?line stop_driver(Port, Name),
- ?line test_server:timetrap_cancel(Dog),
+ stop_driver(Port, Name),
ok.
%% Test that driver_set_timer with new timout really changes
%% the timer (ticket OTP-5942), it didn't work before
timer_change(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:minutes(1)),
Name = 'timer_drv',
- ?line Port = start_driver(Config, Name, false),
+ Port = start_driver(Config, Name, false),
- ?line try_change_timer(Port, 10000),
+ try_change_timer(Port, 10000),
- ?line stop_driver(Port, Name),
- ?line test_server:timetrap_cancel(Dog),
+ stop_driver(Port, Name),
ok.
-
+
try_change_timer(_Port, 0) -> ok;
try_change_timer(Port, Timeout) ->
- ?line Timeout_3 = Timeout*3,
- ?line TimeBefore = erlang:monotonic_time(),
- ?line erlang:port_command(Port, <<?START_TIMER,Timeout_3:32>>),
- ?line erlang:port_command(Port, <<?START_TIMER,Timeout:32>>),
+ Timeout_3 = Timeout*3,
+ TimeBefore = erlang:monotonic_time(),
+ erlang:port_command(Port, <<?START_TIMER,Timeout_3:32>>),
+ erlang:port_command(Port, <<?START_TIMER,Timeout:32>>),
receive
- {Port,{data,[?TIMER]}} ->
- ?line Elapsed = erl_millisecs() - erl_millisecs(TimeBefore),
- io:format("Elapsed: ~p Timeout: ~p\n", [Elapsed,Timeout]),
- if
- Elapsed < Timeout ->
- ?line ?t:fail(too_short);
- Elapsed > Timeout + ?delay ->
- ?line ?t:fail(too_long);
- true ->
- try_timeouts(Port, Timeout div 2)
- end
+ {Port,{data,[?TIMER]}} ->
+ Elapsed = erl_millisecs() - erl_millisecs(TimeBefore),
+ io:format("Elapsed: ~p Timeout: ~p\n", [Elapsed,Timeout]),
+ if
+ Elapsed < Timeout ->
+ ct:fail(too_short);
+ Elapsed > Timeout + ?delay ->
+ ct:fail(too_long);
+ true ->
+ try_timeouts(Port, Timeout div 2)
+ end
after Timeout + ?delay ->
- ?line test_server:fail("driver failed to timeout")
+ ct:fail("driver failed to timeout")
end.
@@ -524,49 +514,47 @@ try_change_timer(Port, Timeout) ->
%% Queue test suites
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-queue_echo(doc) ->
- ["1) Queue up data in a driver that uses the full driver_queue API to do this."
- "2) Get the data back, a random amount at a time."];
+%% 1) Queue up data in a driver that uses the full driver_queue API to do this.
+%% 2) Get the data back, a random amount at a time.
queue_echo(Config) when is_list(Config) ->
- case ?t:is_native(?MODULE) of
- true -> exit(crashes_native_code);
- false -> queue_echo_1(Config)
+ case test_server:is_native(?MODULE) of
+ true -> exit(crashes_native_code);
+ false -> queue_echo_1(Config)
end.
queue_echo_1(Config) ->
- ?line Dog = test_server:timetrap(test_server:minutes(10)),
+ ct:timetrap({minutes, 10}),
Name = 'queue_drv',
- ?line P = start_driver(Config, Name, true),
-
- ?line q_echo(P, [{?ENQ, {list,1}},
- {?ENQ, {list,0}},
- {?ENQ, {bin,0}},
- {?ENQ, {bin,1}},
- {?ENQ, {bin,2}},
- {?ENQ, {bin,3}},
- {?ENQ, {bin,4}},
- {?ENQ, {bin,5}},
- {?ENQ, {bin,600}},
- {?PUSHQ, {list,0}},
- {?PUSHQ, {list,1}},
- {?PUSHQ, {bin,0}},
- {?PUSHQ, {bin,1}},
- {?PUSHQ, {bin,888}},
- {?ENQ_BIN, {bin,0}},
- {?ENQ_BIN, {bin,1}},
- {?ENQ_BIN, {bin,2}},
- {?ENQ_BIN, {bin,3}},
- {?ENQ_BIN, {bin,4}},
- {?ENQ_BIN, {bin,777}},
- {?PUSHQ_BIN, {bin,0}},
- {?PUSHQ_BIN, {bin,1}},
- {?PUSHQ_BIN, {bin,334}},
- {?ENQV, [{bin,0},{list,1},{bin,1},{bin,555}]},
- {?ENQV, [{bin,0},{list,1},{bin,1}]},
- {?PUSHQV, [{bin,0},{list,1},{bin,1},{bin,319}]}]),
-
- ?line stop_driver(P, Name),
- ?line test_server:timetrap_cancel(Dog),
+ P = start_driver(Config, Name, true),
+
+ q_echo(P, [{?ENQ, {list,1}},
+ {?ENQ, {list,0}},
+ {?ENQ, {bin,0}},
+ {?ENQ, {bin,1}},
+ {?ENQ, {bin,2}},
+ {?ENQ, {bin,3}},
+ {?ENQ, {bin,4}},
+ {?ENQ, {bin,5}},
+ {?ENQ, {bin,600}},
+ {?PUSHQ, {list,0}},
+ {?PUSHQ, {list,1}},
+ {?PUSHQ, {bin,0}},
+ {?PUSHQ, {bin,1}},
+ {?PUSHQ, {bin,888}},
+ {?ENQ_BIN, {bin,0}},
+ {?ENQ_BIN, {bin,1}},
+ {?ENQ_BIN, {bin,2}},
+ {?ENQ_BIN, {bin,3}},
+ {?ENQ_BIN, {bin,4}},
+ {?ENQ_BIN, {bin,777}},
+ {?PUSHQ_BIN, {bin,0}},
+ {?PUSHQ_BIN, {bin,1}},
+ {?PUSHQ_BIN, {bin,334}},
+ {?ENQV, [{bin,0},{list,1},{bin,1},{bin,555}]},
+ {?ENQV, [{bin,0},{list,1},{bin,1}]},
+ {?PUSHQV, [{bin,0},{list,1},{bin,1},{bin,319}]}]),
+
+ stop_driver(P, Name),
ok.
q_echo(Port, SpecList) ->
@@ -606,7 +594,7 @@ q_echo(Port, SpecList) ->
feed_and_dequeue(Port, HeapData, 2),
feed_and_dequeue(Port, HeapData, 3),
feed_and_dequeue(Port, HeapData, 4),
-
+
io:format("\n").
feed_and_dequeue(Port, Data, DeqSize) ->
@@ -626,9 +614,9 @@ feed_driver(Port, [], ExpectedInPort, Qb) ->
{ExpectedInPort,Qb};
feed_driver(Port, [{Method0,Data}|T], Expected_return, Qb_before) ->
Method = case Method0 of
- ?RANDOM -> uniform(6)-1;
- Other -> Other
- end,
+ ?RANDOM -> uniform(6)-1;
+ Other -> Other
+ end,
Size = size(list_to_binary([Data])),
%% ***********************************************************************
@@ -643,22 +631,21 @@ feed_driver(Port, [{Method0,Data}|T], Expected_return, Qb_before) ->
Qb_in_driver = bytes_queued(Port),
case Qb_before + Size of
- Qb_in_driver -> ok;
- Sum ->
- io:format("Qb_before: ~p\n"
- "Qb_before+Size: ~p\n"
- "Qb_in_driver: ~p",
- [Qb_before,Sum,Qb_in_driver]),
- ?t:fail()
+ Qb_in_driver -> ok;
+ Sum ->
+ ct:fail("Qb_before: ~p\n"
+ "Qb_before+Size: ~p\n"
+ "Qb_in_driver: ~p",
+ [Qb_before,Sum,Qb_in_driver])
end,
X_return = case Method of
- ?ENQ -> list_to_binary([Expected_return,Data]);
- ?PUSHQ -> list_to_binary([Data,Expected_return]);
- ?PUSHQ_BIN -> list_to_binary([Data,Expected_return]);
- ?ENQ_BIN -> list_to_binary([Expected_return,Data]);
- ?PUSHQV -> list_to_binary([Data,Expected_return]);
- ?ENQV -> list_to_binary([Expected_return,Data])
- end,
+ ?ENQ -> list_to_binary([Expected_return,Data]);
+ ?PUSHQ -> list_to_binary([Data,Expected_return]);
+ ?PUSHQ_BIN -> list_to_binary([Data,Expected_return]);
+ ?ENQ_BIN -> list_to_binary([Expected_return,Data]);
+ ?PUSHQV -> list_to_binary([Data,Expected_return]);
+ ?ENQV -> list_to_binary([Expected_return,Data])
+ end,
feed_driver(Port, T, X_return, Qb_before + Size).
%% method_name(0) -> pushq;
@@ -676,26 +663,22 @@ compare_return(Port, _Data_list, 0, _Back_len) ->
0 = bytes_queued(Port);
compare_return(Port, QueuedInPort0, Len_to_get, DeqSize) ->
case bytes_queued(Port) of
- Len_to_get -> ok;
- BytesInQueue ->
- io:format("Len_to_get: ~p", [Len_to_get]),
- io:format("Bytes in queue: ~p", [BytesInQueue]),
- ?line test_server:fail()
+ Len_to_get -> ok;
+ BytesInQueue ->
+ ct:fail("Len_to_get: ~p\nBytes in queue: ~p", [Len_to_get,BytesInQueue])
end,
BytesToDequeue = if (DeqSize > Len_to_get) -> Len_to_get;
- true -> DeqSize
- end,
+ true -> DeqSize
+ end,
Dequeued = read_head(Port, BytesToDequeue),
case bin_prefix(Dequeued, QueuedInPort0) of
- true ->
- deq(Port, BytesToDequeue),
- <<_:BytesToDequeue/binary,QueuedInPort/binary>> = QueuedInPort0,
- compare_return(Port, QueuedInPort, Len_to_get - BytesToDequeue, DeqSize);
- false ->
- io:format("Bytes to dequeue: ~p", [BytesToDequeue]),
- io:format("Dequeued: ~p", [Dequeued]),
- io:format("Queued in port: ~P", [QueuedInPort0,12]),
- ?t:fail()
+ true ->
+ deq(Port, BytesToDequeue),
+ <<_:BytesToDequeue/binary,QueuedInPort/binary>> = QueuedInPort0,
+ compare_return(Port, QueuedInPort, Len_to_get - BytesToDequeue, DeqSize);
+ false ->
+ ct:fail("Bytes to dequeue: ~p\nDequeued: ~p\nQueued in port: ~P",
+ [BytesToDequeue, Dequeued, QueuedInPort0,12])
end.
%% bin_prefix(PrefixBinary, Binary)
@@ -713,8 +696,8 @@ queue_op(Port, Method, Data) ->
bytes_queued(Port) ->
case erlang:port_control(Port, ?BYTES_QUEUED, []) of
- <<I:32>> -> I;
- Bad -> ?t:fail({bad_result,Bad})
+ <<I:32>> -> I;
+ Bad -> ct:fail({bad_result,Bad})
end.
deq(Port, Size) ->
@@ -724,83 +707,77 @@ read_head(Port, Size) ->
erlang:port_control(Port, ?READ_HEAD, <<Size:32>>).
-driver_unloaded(doc) ->
- [];
-driver_unloaded(suite) ->
- [];
driver_unloaded(Config) when is_list(Config) ->
- ?line process_flag(trap_exit, true),
- ?line Drv = timer_drv,
- ?line User = self(),
- ?line Loaded = make_ref(),
- ?line Die = make_ref(),
- ?line Loader = spawn(fun () ->
- erl_ddll:start(),
- ok = load_driver(?config(data_dir,
- Config),
- Drv),
- User ! Loaded,
- receive Die -> exit(bye) end
- end),
- ?line receive Loaded -> ok end,
- ?line Port = open_port({spawn, Drv}, []),
- ?line Loader ! Die,
- ?line receive
- {'EXIT', Port, Reason} ->
- ?line driver_unloaded = Reason
- %% Reason used to be -1
- end.
-
-
-io_ready_exit(doc) -> [];
-io_ready_exit(suite) -> [];
+ process_flag(trap_exit, true),
+ Drv = timer_drv,
+ User = self(),
+ Loaded = make_ref(),
+ Die = make_ref(),
+ Loader = spawn(fun () ->
+ erl_ddll:start(),
+ ok = load_driver(proplists:get_value(data_dir,
+ Config),
+ Drv),
+ User ! Loaded,
+ receive Die -> exit(bye) end
+ end),
+ receive Loaded -> ok end,
+ Port = open_port({spawn, Drv}, []),
+ Loader ! Die,
+ receive
+ {'EXIT', Port, Reason} ->
+ driver_unloaded = Reason
+ %% Reason used to be -1
+ end.
+
+
io_ready_exit(Config) when is_list(Config) ->
- ?line OTE = process_flag(trap_exit, true),
- ?line Test = self(),
- ?line Dgawd = spawn(fun () ->
- ok = dgawd_handler:install(),
- Mon = erlang:monitor(process, Test),
- Test ! dgawd_handler_started,
- receive
- {'DOWN', Mon, _, _, _} -> ok;
- stop_dgawd_handler -> ok
- end,
- dgawd_handler:restore(),
- Test ! dgawd_handler_stopped
- end),
- ?line receive dgawd_handler_started -> ok end,
- ?line Drv = io_ready_exit_drv,
- ?line erl_ddll:start(),
- ?line ok = load_driver(?config(data_dir, Config), Drv),
- ?line Port = open_port({spawn, Drv}, []),
- ?line case erlang:port_control(Port, 0, "") of
- "ok" ->
- receive
- {'EXIT', Port, Reason} ->
- ?line case Reason of
- ready_output_driver_failure ->
- ?t:format("Exited in output_ready()~n"),
- ?line ok;
- ready_input_driver_failure ->
- ?t:format("Exited in input_ready()~n"),
- ?line ok;
- Error -> ?line ?t:fail(Error)
- end
- end,
- receive after 2000 -> ok end,
- ?line false = dgawd_handler:got_dgawd_report(),
- ?line Dgawd ! stop_dgawd_handler,
- ?line receive dgawd_handler_stopped -> ok end,
- ?line process_flag(trap_exit, OTE),
- ?line ok;
- "nyiftos" ->
- ?line process_flag(trap_exit, OTE),
- ?line {skipped, "Not yet implemented for this OS"};
- Error ->
- ?line process_flag(trap_exit, OTE),
- ?line ?t:fail({unexpected_control_result, Error})
- end.
-
+ OTE = process_flag(trap_exit, true),
+ Test = self(),
+ Dgawd = spawn(fun () ->
+ ok = dgawd_handler:install(),
+ Mon = erlang:monitor(process, Test),
+ Test ! dgawd_handler_started,
+ receive
+ {'DOWN', Mon, _, _, _} -> ok;
+ stop_dgawd_handler -> ok
+ end,
+ dgawd_handler:restore(),
+ Test ! dgawd_handler_stopped
+ end),
+ receive dgawd_handler_started -> ok end,
+ Drv = io_ready_exit_drv,
+ erl_ddll:start(),
+ ok = load_driver(proplists:get_value(data_dir, Config), Drv),
+ Port = open_port({spawn, Drv}, []),
+ case erlang:port_control(Port, 0, "") of
+ "ok" ->
+ receive
+ {'EXIT', Port, Reason} ->
+ case Reason of
+ ready_output_driver_failure ->
+ io:format("Exited in output_ready()~n"),
+ ok;
+ ready_input_driver_failure ->
+ io:format("Exited in input_ready()~n"),
+ ok;
+ Error -> ct:fail(Error)
+ end
+ end,
+ receive after 2000 -> ok end,
+ false = dgawd_handler:got_dgawd_report(),
+ Dgawd ! stop_dgawd_handler,
+ receive dgawd_handler_stopped -> ok end,
+ process_flag(trap_exit, OTE),
+ ok;
+ "nyiftos" ->
+ process_flag(trap_exit, OTE),
+ {skipped, "Not yet implemented for this OS"};
+ Error ->
+ process_flag(trap_exit, OTE),
+ ct:fail({unexpected_control_result, Error})
+ end.
+
-define(CHKIO_STOP, 0).
-define(CHKIO_USE_FALLBACK_POLLSET, 1).
@@ -812,138 +789,128 @@ io_ready_exit(Config) when is_list(Config) ->
-define(CHKIO_SMP_SELECT, 7).
-define(CHKIO_DRV_USE, 8).
-use_fallback_pollset(doc) -> [];
-use_fallback_pollset(suite) -> [];
use_fallback_pollset(Config) when is_list(Config) ->
FlbkFun = fun () ->
- ChkIoDuring = erlang:system_info(check_io),
- case lists:keysearch(fallback_poll_set_size,
- 1,
- ChkIoDuring) of
- {value,
- {fallback_poll_set_size, N}} when N > 0 ->
- ?line ok;
- Error ->
- ?line ?t:fail({failed_to_use_fallback, Error})
- end
- end,
- ?line {BckupTest, Handel, OkRes}
- = case chkio_test_init(Config) of
- {erts_poll_info, ChkIo} = Hndl ->
- case lists:keysearch(fallback, 1, ChkIo) of
- {value, {fallback, B}} when B =/= false ->
- ?line {FlbkFun, Hndl, ok};
- _ ->
- ?line {fun () -> ok end,
- Hndl,
- {comment,
- "This implementation does not use "
- "a fallback pollset"}}
- end;
- Skip ->
- {fun () -> ok end, Skip, ok}
- end,
- ?line case chkio_test_fini(chkio_test(Handel,
- ?CHKIO_USE_FALLBACK_POLLSET,
- fun () ->
- ?line sleep(1000),
- ?line BckupTest()
- end)) of
- {skipped, _} = Res -> ?line Res;
- _ -> ?line OkRes
- end.
-
-bad_fd_in_pollset(doc) -> [];
-bad_fd_in_pollset(suite) -> [];
+ ChkIoDuring = erlang:system_info(check_io),
+ case lists:keysearch(fallback_poll_set_size,
+ 1,
+ ChkIoDuring) of
+ {value,
+ {fallback_poll_set_size, N}} when N > 0 ->
+ ok;
+ Error ->
+ ct:fail({failed_to_use_fallback, Error})
+ end
+ end,
+ {BckupTest, Handel, OkRes}
+ = case chkio_test_init(Config) of
+ {erts_poll_info, ChkIo} = Hndl ->
+ case lists:keysearch(fallback, 1, ChkIo) of
+ {value, {fallback, B}} when B =/= false ->
+ {FlbkFun, Hndl, ok};
+ _ ->
+ {fun () -> ok end,
+ Hndl,
+ {comment,
+ "This implementation does not use "
+ "a fallback pollset"}}
+ end;
+ Skip ->
+ {fun () -> ok end, Skip, ok}
+ end,
+ case chkio_test_fini(chkio_test(Handel,
+ ?CHKIO_USE_FALLBACK_POLLSET,
+ fun () ->
+ sleep(1000),
+ BckupTest()
+ end)) of
+ {skipped, _} = Res -> Res;
+ _ -> OkRes
+ end.
+
bad_fd_in_pollset(Config) when is_list(Config) ->
- ?line chkio_test_fini(chkio_test(chkio_test_init(Config),
- ?CHKIO_BAD_FD_IN_POLLSET,
- fun () -> ?line sleep(1000) end)).
+ chkio_test_fini(chkio_test(chkio_test_init(Config),
+ ?CHKIO_BAD_FD_IN_POLLSET,
+ fun () -> sleep(1000) end)).
-driver_event(doc) -> [];
-driver_event(suite) -> [];
driver_event(Config) when is_list(Config) ->
- ?line chkio_test_fini(chkio_test(chkio_test_init(Config),
- ?CHKIO_DRIVER_EVENT,
- fun () -> ?line sleep(1000) end)).
+ chkio_test_fini(chkio_test(chkio_test_init(Config),
+ ?CHKIO_DRIVER_EVENT,
+ fun () -> sleep(1000) end)).
-fd_change(doc) -> [];
-fd_change(suite) -> [];
fd_change(Config) when is_list(Config) ->
- ?line chkio_test_fini(chkio_test(chkio_test_init(Config),
- ?CHKIO_FD_CHANGE,
- fun () -> ?line sleep(1000) end)).
+ chkio_test_fini(chkio_test(chkio_test_init(Config),
+ ?CHKIO_FD_CHANGE,
+ fun () -> sleep(1000) end)).
-steal_control(doc) -> [];
-steal_control(suite) -> [];
steal_control(Config) when is_list(Config) ->
- ?line chkio_test_fini(case chkio_test_init(Config) of
- {erts_poll_info, _} = Hndl ->
- ?line steal_control_test(Hndl);
- Skip ->
- ?line Skip
- end).
+ chkio_test_fini(case chkio_test_init(Config) of
+ {erts_poll_info, _} = Hndl ->
+ steal_control_test(Hndl);
+ Skip ->
+ Skip
+ end).
steal_control_test(Hndl = {erts_poll_info, Before}) ->
- ?line Port = open_chkio_port(),
- ?line case erlang:port_control(Port, ?CHKIO_STEAL_AUX, "") of
- [$f,$d,$s,$:| _] = FdList ->
- ?line chk_chkio_port(Port),
- sleep(500),
- ?line chk_chkio_port(Port),
- ?line Res = chkio_test(Hndl,
- ?CHKIO_STEAL,
- FdList,
- fun () ->
- ?line chk_chkio_port(Port),
- ?line sleep(500),
- ?line chk_chkio_port(Port)
- end),
- ?line case erlang:port_control(Port, ?CHKIO_STOP, "") of
- "ok" ->
- ?line chk_chkio_port(Port),
- ?line ok;
- StopErr ->
- ?line chk_chkio_port(Port),
- ?line ?t:fail({stop_error, StopErr})
- end,
- ?line close_chkio_port(Port),
- ?line Res;
- [$s,$k,$i,$p,$:,$\ |Skip] ->
- ?line chk_chkio_port(Port),
- ?line close_chkio_port(Port),
- {chkio_test_result,
- {skipped, Skip},
- Before};
- StartErr ->
- ?line chk_chkio_port(Port),
- ?line ?t:fail({start_error, StartErr})
- end.
+ Port = open_chkio_port(),
+ case erlang:port_control(Port, ?CHKIO_STEAL_AUX, "") of
+ [$f,$d,$s,$:| _] = FdList ->
+ chk_chkio_port(Port),
+ sleep(500),
+ chk_chkio_port(Port),
+ Res = chkio_test(Hndl,
+ ?CHKIO_STEAL,
+ FdList,
+ fun () ->
+ chk_chkio_port(Port),
+ sleep(500),
+ chk_chkio_port(Port)
+ end),
+ case erlang:port_control(Port, ?CHKIO_STOP, "") of
+ "ok" ->
+ chk_chkio_port(Port),
+ ok;
+ StopErr ->
+ chk_chkio_port(Port),
+ ct:fail({stop_error, StopErr})
+ end,
+ close_chkio_port(Port),
+ Res;
+ [$s,$k,$i,$p,$:,$\ |Skip] ->
+ chk_chkio_port(Port),
+ close_chkio_port(Port),
+ {chkio_test_result,
+ {skipped, Skip},
+ Before};
+ StartErr ->
+ chk_chkio_port(Port),
+ ct:fail({start_error, StartErr})
+ end.
chkio_test_init(Config) when is_list(Config) ->
- ?line ChkIo = get_stable_check_io_info(),
- ?line case catch lists:keysearch(name, 1, ChkIo) of
- {value, {name, erts_poll}} ->
- ?line ?t:format("Before test: ~p~n", [ChkIo]),
- ?line Path = ?config(data_dir, Config),
- ?line erl_ddll:start(),
- ?line ok = load_driver(Path, 'chkio_drv'),
- ?line process_flag(trap_exit, true),
- ?line {erts_poll_info, ChkIo};
- _ ->
- ?line {skipped, "Test written to test erts_poll() which isn't used"}
- end.
-
+ ChkIo = get_stable_check_io_info(),
+ case catch lists:keysearch(name, 1, ChkIo) of
+ {value, {name, erts_poll}} ->
+ io:format("Before test: ~p~n", [ChkIo]),
+ Path = proplists:get_value(data_dir, Config),
+ erl_ddll:start(),
+ ok = load_driver(Path, 'chkio_drv'),
+ process_flag(trap_exit, true),
+ {erts_poll_info, ChkIo};
+ _ ->
+ {skipped, "Test written to test erts_poll() which isn't used"}
+ end.
+
chkio_test_fini({skipped, _} = Res) ->
Res;
chkio_test_fini({chkio_test_result, Res, Before}) ->
- ?line ok = erl_ddll:unload_driver('chkio_drv'),
- ?line ok = erl_ddll:stop(),
- ?line After = get_stable_check_io_info(),
- ?line ?t:format("After test: ~p~n", [After]),
- ?line verify_chkio_state(Before, After),
- ?line Res.
+ ok = erl_ddll:unload_driver('chkio_drv'),
+ ok = erl_ddll:stop(),
+ After = get_stable_check_io_info(),
+ io:format("After test: ~p~n", [After]),
+ verify_chkio_state(Before, After),
+ Res.
open_chkio_port() ->
open_port({spawn, 'chkio_drv'}, []).
@@ -951,269 +918,255 @@ open_chkio_port() ->
close_chkio_port(Port) when is_port(Port) ->
true = erlang:port_close(Port),
receive
- {'EXIT', Port, normal} ->
- ok;
- {'EXIT', Port, Reason} ->
- ?t:fail({abnormal_port_exit, Port, Reason});
- {Port, Message} ->
- ?t:fail({strange_message_from_port, Message})
+ {'EXIT', Port, normal} ->
+ ok;
+ {'EXIT', Port, Reason} ->
+ ct:fail({abnormal_port_exit, Port, Reason});
+ {Port, Message} ->
+ ct:fail({strange_message_from_port, Message})
end.
chk_chkio_port(Port) ->
receive
- {'EXIT', Port, Reason} when Reason /= normal ->
- ?t:fail({port_exited, Port, Reason})
+ {'EXIT', Port, Reason} when Reason /= normal ->
+ ct:fail({port_exited, Port, Reason})
after 0 ->
- ok
+ ok
end.
-
+
chkio_test({skipped, _} = Res, _Test, _Fun) ->
- ?line Res;
+ Res;
chkio_test({erts_poll_info, _Before} = EPI, Test, Fun) when is_integer(Test) ->
chkio_test(EPI, Test, "", Fun).
chkio_test({skipped, _} = Res, _Test, _TestArgs, _Fun) ->
- ?line Res;
+ Res;
chkio_test({erts_poll_info, Before},
- Test,
- TestArgs,
- Fun) when is_integer(Test),
- is_list(TestArgs) ->
- ?line Port = open_chkio_port(),
- ?line case erlang:port_control(Port, Test, TestArgs) of
- "ok" ->
- ?line chk_chkio_port(Port),
- ?line Fun(),
- ?line During = erlang:system_info(check_io),
- ?line erlang:display(During),
- ?line 0 = element(1, erts_debug:get_internal_state(check_io_debug)),
- ?line ?t:format("During test: ~p~n", [During]),
- ?line chk_chkio_port(Port),
- ?line case erlang:port_control(Port, ?CHKIO_STOP, "") of
- Res when is_list(Res) ->
- ?line chk_chkio_port(Port),
- ?line ?t:format("~s", [Res]),
- ?line close_chkio_port(Port),
- ?line Res,
- ?line case Res of
- [$c,$o,$m,$m,$e,$n,$t,$:,$\ |Cmnt] ->
- ?line {chkio_test_result,
- {comment, Cmnt},
- Before};
- _ ->
- ?line {chkio_test_result,
- Res,
- Before}
- end;
- StopErr ->
- ?line chk_chkio_port(Port),
- ?line ?t:fail({stop_error, StopErr})
- end;
- [$s,$k,$i,$p,$:,$\ |Skip] ->
- ?line chk_chkio_port(Port),
- ?line close_chkio_port(Port),
- {chkio_test_result,
- {skipped, Skip},
- Before};
- StartErr ->
- ?line chk_chkio_port(Port),
- ?line ?t:fail({start_error, StartErr})
- end.
+ Test,
+ TestArgs,
+ Fun) when is_integer(Test),
+ is_list(TestArgs) ->
+ Port = open_chkio_port(),
+ case erlang:port_control(Port, Test, TestArgs) of
+ "ok" ->
+ chk_chkio_port(Port),
+ Fun(),
+ During = erlang:system_info(check_io),
+ erlang:display(During),
+ 0 = element(1, erts_debug:get_internal_state(check_io_debug)),
+ io:format("During test: ~p~n", [During]),
+ chk_chkio_port(Port),
+ case erlang:port_control(Port, ?CHKIO_STOP, "") of
+ Res when is_list(Res) ->
+ chk_chkio_port(Port),
+ io:format("~s", [Res]),
+ close_chkio_port(Port),
+ Res,
+ case Res of
+ [$c,$o,$m,$m,$e,$n,$t,$:,$\ |Cmnt] ->
+ {chkio_test_result,
+ {comment, Cmnt},
+ Before};
+ _ ->
+ {chkio_test_result,
+ Res,
+ Before}
+ end;
+ StopErr ->
+ chk_chkio_port(Port),
+ ct:fail({stop_error, StopErr})
+ end;
+ [$s,$k,$i,$p,$:,$\ |Skip] ->
+ chk_chkio_port(Port),
+ close_chkio_port(Port),
+ {chkio_test_result,
+ {skipped, Skip},
+ Before};
+ StartErr ->
+ chk_chkio_port(Port),
+ ct:fail({start_error, StartErr})
+ end.
verify_chkio_state(Before, After) ->
- ?line TotSetSize = lists:keysearch(total_poll_set_size, 1, Before),
- ?line TotSetSize = lists:keysearch(total_poll_set_size, 1, After),
- ?line case lists:keysearch(fallback, 1, Before) of
- {value,{fallback,false}} ->
- ?line ok;
- _ ->
- ?line BckupSetSize = lists:keysearch(fallback_poll_set_size,
- 1,
- Before),
- ?line BckupSetSize = lists:keysearch(fallback_poll_set_size,
- 1,
- After)
- end,
- ?line ok.
+ TotSetSize = lists:keysearch(total_poll_set_size, 1, Before),
+ TotSetSize = lists:keysearch(total_poll_set_size, 1, After),
+ case lists:keysearch(fallback, 1, Before) of
+ {value,{fallback,false}} ->
+ ok;
+ _ ->
+ BckupSetSize = lists:keysearch(fallback_poll_set_size,
+ 1,
+ Before),
+ BckupSetSize = lists:keysearch(fallback_poll_set_size,
+ 1,
+ After)
+ end,
+ ok.
get_stable_check_io_info() ->
ChkIo = erlang:system_info(check_io),
PendUpdNo = case lists:keysearch(pending_updates, 1, ChkIo) of
- {value, {pending_updates, PendNo}} ->
- PendNo;
- false ->
- 0
- end,
+ {value, {pending_updates, PendNo}} ->
+ PendNo;
+ false ->
+ 0
+ end,
{value, {active_fds, ActFds}} = lists:keysearch(active_fds, 1, ChkIo),
case {PendUpdNo, ActFds} of
- {0, 0} ->
- ChkIo;
- _ ->
- receive after 10 -> ok end,
- get_stable_check_io_info()
+ {0, 0} ->
+ ChkIo;
+ _ ->
+ receive after 10 -> ok end,
+ get_stable_check_io_info()
end.
-otp_6602(doc) -> ["Missed port lock when stealing control of fd from a "
- "driver that didn't use the same lock. The lock checker "
- "used to trigger on this and dump core."];
-otp_6602(suite) ->
- [];
+%% Missed port lock when stealing control of fd from a
+%% driver that didn't use the same lock. The lock checker
+%% used to trigger on this and dump core.
otp_6602(Config) when is_list(Config) ->
- ?line {ok, Node} = start_node(Config),
- ?line Done = make_ref(),
- ?line Parent = self(),
- ?line Tester = spawn_link(Node,
- fun () ->
- %% Inet driver use port locking...
- {ok, S} = gen_udp:open(0),
- {ok, Fd} = inet:getfd(S),
- %% Steal fd (lock checker used to
- %% trigger here).
- {ok, _S2} = gen_udp:open(0,[{fd,Fd}]),
- Parent ! Done
- end),
- ?line receive Done -> ok end,
- ?line unlink(Tester),
- ?line stop_node(Node),
- ?line ok.
+ {ok, Node} = start_node(Config),
+ Done = make_ref(),
+ Parent = self(),
+ Tester = spawn_link(Node,
+ fun () ->
+ %% Inet driver use port locking...
+ {ok, S} = gen_udp:open(0),
+ {ok, Fd} = inet:getfd(S),
+ %% Steal fd (lock checker used to
+ %% trigger here).
+ {ok, _S2} = gen_udp:open(0,[{fd,Fd}]),
+ Parent ! Done
+ end),
+ receive Done -> ok end,
+ unlink(Tester),
+ stop_node(Node),
+ ok.
-define(EXPECTED_SYSTEM_INFO_NAMES1,
- ["drv_drv_vsn",
- "emu_drv_vsn",
- "erts_vsn",
- "otp_vsn",
- "thread",
- "smp"]).
+ ["drv_drv_vsn",
+ "emu_drv_vsn",
+ "erts_vsn",
+ "otp_vsn",
+ "thread",
+ "smp"]).
-define(EXPECTED_SYSTEM_INFO_NAMES2,
- (?EXPECTED_SYSTEM_INFO_NAMES1 ++
- ["async_thrs",
- "sched_thrs"])).
+ (?EXPECTED_SYSTEM_INFO_NAMES1 ++
+ ["async_thrs",
+ "sched_thrs"])).
-define(EXPECTED_SYSTEM_INFO_NAMES3,
- (?EXPECTED_SYSTEM_INFO_NAMES2 ++
- ["emu_nif_vsn"])).
+ (?EXPECTED_SYSTEM_INFO_NAMES2 ++
+ ["emu_nif_vsn"])).
-define(EXPECTED_SYSTEM_INFO_NAMES4,
- (?EXPECTED_SYSTEM_INFO_NAMES3 ++
- ["dirty_sched"])).
+ (?EXPECTED_SYSTEM_INFO_NAMES3 ++
+ ["dirty_sched"])).
-define(EXPECTED_SYSTEM_INFO_NAMES, ?EXPECTED_SYSTEM_INFO_NAMES4).
-'driver_system_info_base_ver'(doc) ->
- [];
-'driver_system_info_base_ver'(suite) ->
- [];
'driver_system_info_base_ver'(Config) when is_list(Config) ->
- ?line driver_system_info_test(Config, sys_info_base_drv).
+ driver_system_info_test(Config, sys_info_base_drv).
-'driver_system_info_prev_ver'(doc) ->
- [];
-'driver_system_info_prev_ver'(suite) ->
- [];
'driver_system_info_prev_ver'(Config) when is_list(Config) ->
- ?line driver_system_info_test(Config, sys_info_prev_drv).
+ driver_system_info_test(Config, sys_info_prev_drv).
-driver_system_info_current_ver(doc) ->
- [];
-driver_system_info_current_ver(suite) ->
- [];
driver_system_info_current_ver(Config) when is_list(Config) ->
- ?line driver_system_info_test(Config, sys_info_curr_drv).
+ driver_system_info_test(Config, sys_info_curr_drv).
driver_system_info_test(Config, Name) ->
- ?line Port = start_driver(Config, Name, false),
- ?line case erlang:port_control(Port, 0, []) of
- [$o,$k,$:,_ | Result] ->
- ?line check_driver_system_info_result(Result);
- [$e,$r,$r,$o,$r,$:,_ | Error] ->
- ?line ?t:fail(Error);
- Unexpected ->
- ?line ?t:fail({unexpected_result, Unexpected})
- end,
- ?line stop_driver(Port, Name),
- ?line ok.
+ Port = start_driver(Config, Name, false),
+ case erlang:port_control(Port, 0, []) of
+ [$o,$k,$:,_ | Result] ->
+ check_driver_system_info_result(Result);
+ [$e,$r,$r,$o,$r,$:,_ | Error] ->
+ ct:fail(Error);
+ Unexpected ->
+ ct:fail({unexpected_result, Unexpected})
+ end,
+ stop_driver(Port, Name),
+ ok.
check_driver_system_info_result(Result) ->
- ?line ?t:format("All names: ~p~n", [?EXPECTED_SYSTEM_INFO_NAMES]),
- ?line ?t:format("Result: ~p~n", [Result]),
- ?line {[], Ns, DDVSN} = chk_sis(lists:map(fun (Str) ->
- string:tokens(Str, "=")
- end,
- string:tokens(Result, " ")),
- ?EXPECTED_SYSTEM_INFO_NAMES),
- ?line case {DDVSN,
- drv_vsn_str2tup(erlang:system_info(driver_version))} of
- {DDVSN, DDVSN} ->
- ?line [] = Ns;
- %% {{1, 0}, _} ->
- %% ?line ExpNs = lists:sort(?EXPECTED_SYSTEM_INFO_NAMES
- %% -- ?EXPECTED_SYSTEM_INFO_NAMES1),
- %% ?line ExpNs = lists:sort(Ns);
- %% {{1, 1}, _} ->
- %% ?line ExpNs = lists:sort(?EXPECTED_SYSTEM_INFO_NAMES
- %% -- ?EXPECTED_SYSTEM_INFO_NAMES2),
- %% ?line ExpNs = lists:sort(Ns);
- {{3, 0}, _} ->
- ?line ExpNs = lists:sort(?EXPECTED_SYSTEM_INFO_NAMES
- -- ?EXPECTED_SYSTEM_INFO_NAMES3),
- ?line ExpNs = lists:sort(Ns)
- end.
+ io:format("All names: ~p~n", [?EXPECTED_SYSTEM_INFO_NAMES]),
+ io:format("Result: ~p~n", [Result]),
+ {[], Ns, DDVSN} = chk_sis(lists:map(fun (Str) ->
+ string:tokens(Str, "=")
+ end,
+ string:tokens(Result, " ")),
+ ?EXPECTED_SYSTEM_INFO_NAMES),
+ case {DDVSN,
+ drv_vsn_str2tup(erlang:system_info(driver_version))} of
+ {DDVSN, DDVSN} ->
+ [] = Ns;
+ %% {{1, 0}, _} ->
+ %% ExpNs = lists:sort(?EXPECTED_SYSTEM_INFO_NAMES
+ %% -- ?EXPECTED_SYSTEM_INFO_NAMES1),
+ %% ExpNs = lists:sort(Ns);
+ %% {{1, 1}, _} ->
+ %% ExpNs = lists:sort(?EXPECTED_SYSTEM_INFO_NAMES
+ %% -- ?EXPECTED_SYSTEM_INFO_NAMES2),
+ %% ExpNs = lists:sort(Ns);
+ {{3, 0}, _} ->
+ ExpNs = lists:sort(?EXPECTED_SYSTEM_INFO_NAMES
+ -- ?EXPECTED_SYSTEM_INFO_NAMES3),
+ ExpNs = lists:sort(Ns)
+ end.
chk_sis(SIs, Ns) ->
chk_sis(SIs, Ns, unknown).
chk_sis(SIs, [], DDVSN) ->
- ?line {SIs, [], DDVSN};
+ {SIs, [], DDVSN};
chk_sis([], Ns, DDVSN) ->
- ?line {[], Ns, DDVSN};
+ {[], Ns, DDVSN};
chk_sis([[N, _] = SI| SIs], Ns, DDVSN) ->
- ?line true = lists:member(N, Ns),
- ?line case check_si_res(SI) of
- {driver_version, NewDDVSN} ->
- ?line chk_sis(SIs, lists:delete(N, Ns), NewDDVSN);
- _ ->
- ?line chk_sis(SIs, lists:delete(N, Ns), DDVSN)
- end.
+ true = lists:member(N, Ns),
+ case check_si_res(SI) of
+ {driver_version, NewDDVSN} ->
+ chk_sis(SIs, lists:delete(N, Ns), NewDDVSN);
+ _ ->
+ chk_sis(SIs, lists:delete(N, Ns), DDVSN)
+ end.
%% Data in first version of driver_system_info() (driver version 1.0)
check_si_res(["drv_drv_vsn", Value]) ->
- ?line DDVSN = drv_vsn_str2tup(Value),
- ?line {Major, DMinor} = DDVSN,
- ?line {Major, EMinor} = drv_vsn_str2tup(erlang:system_info(driver_version)),
- ?line true = DMinor =< EMinor,
- ?line {driver_version, DDVSN};
+ DDVSN = drv_vsn_str2tup(Value),
+ {Major, DMinor} = DDVSN,
+ {Major, EMinor} = drv_vsn_str2tup(erlang:system_info(driver_version)),
+ true = DMinor =< EMinor,
+ {driver_version, DDVSN};
check_si_res(["emu_drv_vsn", Value]) ->
- ?line Value = erlang:system_info(driver_version);
+ Value = erlang:system_info(driver_version);
check_si_res(["erts_vsn", Value]) ->
- ?line Value = erlang:system_info(version);
+ Value = erlang:system_info(version);
check_si_res(["otp_vsn", Value]) ->
- ?line Value = erlang:system_info(otp_release);
+ Value = erlang:system_info(otp_release);
check_si_res(["thread", "true"]) ->
- ?line true = erlang:system_info(threads);
+ true = erlang:system_info(threads);
check_si_res(["thread", "false"]) ->
- ?line false = erlang:system_info(threads);
+ false = erlang:system_info(threads);
check_si_res(["smp", "true"]) ->
- ?line true = erlang:system_info(smp_support);
+ true = erlang:system_info(smp_support);
check_si_res(["smp", "false"]) ->
- ?line false = erlang:system_info(smp_support);
+ false = erlang:system_info(smp_support);
%% Data added in second version of driver_system_info() (driver version 1.1)
check_si_res(["async_thrs", Value]) ->
- ?line Value = integer_to_list(erlang:system_info(thread_pool_size));
+ Value = integer_to_list(erlang:system_info(thread_pool_size));
check_si_res(["sched_thrs", Value]) ->
- ?line Value = integer_to_list(erlang:system_info(schedulers));
+ Value = integer_to_list(erlang:system_info(schedulers));
%% Data added in 3rd version of driver_system_info() (driver version 1.5)
check_si_res(["emu_nif_vsn", Value]) ->
- ?line Value = erlang:system_info(nif_version);
+ Value = erlang:system_info(nif_version);
%% Data added in 4th version of driver_system_info() (driver version 3.1)
check_si_res(["dirty_sched", _Value]) ->
true;
check_si_res(Unexpected) ->
- ?line ?t:fail({unexpected_result, Unexpected}).
+ ct:fail({unexpected_result, Unexpected}).
-define(MON_OP_I_AM_IPID,1).
-define(MON_OP_MONITOR_ME,2).
@@ -1221,171 +1174,168 @@ check_si_res(Unexpected) ->
-define(MON_OP_MONITOR_ME_LATER,4).
-define(MON_OP_DO_DELAYED_MONITOR,5).
-driver_monitor(suite) ->
- [];
-driver_monitor(doc) ->
- ["Test monitoring of processes from drivers"];
+%% Test monitoring of processes from drivers
driver_monitor(Config) when is_list(Config) ->
- ?line Name = monitor_drv,
- ?line Port = start_driver(Config, Name, false),
- ?line "ok" = port_control(Port,?MON_OP_I_AM_IPID,[]),
- ?line "ok" = port_control(Port,?MON_OP_MONITOR_ME,[]),
- ?line "ok" = port_control(Port,?MON_OP_DEMONITOR_ME,[]),
- ?line {monitors, []} = erlang:port_info(Port,monitors),
-
- ?line "ok:"++Id1 = port_control(Port,?MON_OP_MONITOR_ME_LATER,[]),
- ?line {monitored_by, []} = process_info(self(),monitored_by),
- ?line "ok" = port_control(Port,?MON_OP_DO_DELAYED_MONITOR,Id1),
- ?line {monitored_by, [Port]} = process_info(self(),monitored_by),
- ?line "ok" = port_control(Port,?MON_OP_DEMONITOR_ME,[]),
- ?line {monitored_by, []} = process_info(self(),monitored_by),
-
- ?line "ok" = port_control(Port,?MON_OP_MONITOR_ME,[]),
- ?line Me = self(),
- ?line {Pid1,Ref1} =
- spawn_monitor(fun() ->
- Me ! port_control(Port,?MON_OP_MONITOR_ME,[]),
- Me ! process_info(self(),monitored_by),
- Me ! erlang:port_info(Port,monitors)
- end),
- ?line ok = receive
- "ok" ->
- ok
- after 1000 ->
- timeout
- end,
- ?line ok = receive
- {monitored_by, L} ->
- L2 = lists:sort(L),
- L3 = lists:sort([Me,Port]),
- case L2 of
- L3 ->
- ok;
- _ ->
- mismatch
- end
- after 1000 ->
- timeout
- end,
- ?line ok = receive
- {monitors, LL} ->
- LL2 = lists:sort(LL),
- LL3 = lists:sort([{process,Me},{process,Pid1}]),
- case LL2 of
- LL3 ->
- ok;
- _ ->
- mismatch
- end
- after 1000 ->
- timeout
- end,
- ?line ok = receive
- {'DOWN', Ref1, process, Pid1, _} ->
- ok
- after 1000 ->
- timeout
- end,
- ?line ok = receive
- {monitor_fired,Port,Pid1} ->
- ok
- after 1000 ->
- timeout
- end,
- ?line "ok" = port_control(Port,?MON_OP_DEMONITOR_ME,[]),
- ?line {monitors,[]} = erlang:port_info(Port,monitors),
- ?line {monitored_by, []} = process_info(self(),monitored_by),
-
- ?line "ok" = port_control(Port,?MON_OP_MONITOR_ME,[]),
- ?line {Pid2,Ref2} =
- spawn_monitor(fun() ->
- receive go -> ok end,
- Me ! port_control(Port,?MON_OP_MONITOR_ME_LATER,[]),
- Me ! process_info(self(),monitored_by),
- Me ! erlang:port_info(Port,monitors)
- end),
- ?line Pid2 ! go,
- ?line {ok,Id2} = receive
- "ok:"++II ->
- {ok,II}
- after 1000 ->
- timeout
- end,
- ?line ok = receive
- {monitored_by, [Me]} ->
- ok
- after 1000 ->
- timeout
- end,
- ?line ok = receive
- {monitors, [{process,Me}]} ->
- ok
- after 1000 ->
- timeout
- end,
- ?line ok = receive
- {'DOWN', Ref2, process, Pid2, _} ->
- ok
- after 1000 ->
- timeout
- end,
- ?line "noproc" = port_control(Port,?MON_OP_DO_DELAYED_MONITOR,Id2),
- ?line {monitors,[{process,Me}]} = erlang:port_info(Port,monitors),
- ?line "ok" = port_control(Port,?MON_OP_DEMONITOR_ME,[]),
- ?line "not_monitored" = port_control(Port,?MON_OP_DEMONITOR_ME,[]),
- ?line {monitors,[]} = erlang:port_info(Port,monitors),
- ?line {monitored_by, []} = process_info(self(),monitored_by),
-
-
- ?line "ok" = port_control(Port,?MON_OP_MONITOR_ME,[]),
- ?line {Pid3,Ref3} =
- spawn_monitor(fun() ->
- receive go -> ok end,
- Me ! port_control(Port,?MON_OP_MONITOR_ME_LATER,[]),
- Me ! process_info(self(),monitored_by),
- Me ! erlang:port_info(Port,monitors) ,
- receive die -> ok end
- end),
- ?line Pid3 ! go,
- ?line {ok,Id3} = receive
- "ok:"++III ->
- {ok,III}
- after 1000 ->
- timeout
- end,
- ?line ok = receive
- {monitored_by, [Me]} ->
- ok
- after 1000 ->
- timeout
- end,
- ?line ok = receive
- {monitors, [{process,Me}]} ->
- ok
- after 1000 ->
- timeout
- end,
- ?line "ok" = port_control(Port,?MON_OP_DO_DELAYED_MONITOR,Id3),
- ?line LLL1 = lists:sort([{process,Me},{process,Pid3}]),
- ?line {monitors,LLL2} = erlang:port_info(Port,monitors),
- ?line LLL1 = lists:sort(LLL2),
- ?line "ok" = port_control(Port,?MON_OP_DEMONITOR_ME,[]),
- ?line {monitors,[{process,Pid3}]} = erlang:port_info(Port,monitors),
- ?line Pid3 ! die,
- ?line ok = receive
- {'DOWN', Ref3, process, Pid3, _} ->
- ok
- after 1000 ->
- timeout
- end,
- ?line "not_found" = port_control(Port,?MON_OP_DO_DELAYED_MONITOR,Id2),
- ?line {monitors,[]} = erlang:port_info(Port,monitors),
- ?line "not_monitored" = port_control(Port,?MON_OP_DEMONITOR_ME,[]),
- ?line {monitors,[]} = erlang:port_info(Port,monitors),
- ?line {monitored_by, []} = process_info(self(),monitored_by),
-
- ?line stop_driver(Port, Name),
- ?line ok.
+ Name = monitor_drv,
+ Port = start_driver(Config, Name, false),
+ "ok" = port_control(Port,?MON_OP_I_AM_IPID,[]),
+ "ok" = port_control(Port,?MON_OP_MONITOR_ME,[]),
+ "ok" = port_control(Port,?MON_OP_DEMONITOR_ME,[]),
+ {monitors, []} = erlang:port_info(Port,monitors),
+
+ "ok:"++Id1 = port_control(Port,?MON_OP_MONITOR_ME_LATER,[]),
+ {monitored_by, []} = process_info(self(),monitored_by),
+ "ok" = port_control(Port,?MON_OP_DO_DELAYED_MONITOR,Id1),
+ {monitored_by, [Port]} = process_info(self(),monitored_by),
+ "ok" = port_control(Port,?MON_OP_DEMONITOR_ME,[]),
+ {monitored_by, []} = process_info(self(),monitored_by),
+
+ "ok" = port_control(Port,?MON_OP_MONITOR_ME,[]),
+ Me = self(),
+ {Pid1,Ref1} =
+ spawn_monitor(fun() ->
+ Me ! port_control(Port,?MON_OP_MONITOR_ME,[]),
+ Me ! process_info(self(),monitored_by),
+ Me ! erlang:port_info(Port,monitors)
+ end),
+ ok = receive
+ "ok" ->
+ ok
+ after 1000 ->
+ timeout
+ end,
+ ok = receive
+ {monitored_by, L} ->
+ L2 = lists:sort(L),
+ L3 = lists:sort([Me,Port]),
+ case L2 of
+ L3 ->
+ ok;
+ _ ->
+ mismatch
+ end
+ after 1000 ->
+ timeout
+ end,
+ ok = receive
+ {monitors, LL} ->
+ LL2 = lists:sort(LL),
+ LL3 = lists:sort([{process,Me},{process,Pid1}]),
+ case LL2 of
+ LL3 ->
+ ok;
+ _ ->
+ mismatch
+ end
+ after 1000 ->
+ timeout
+ end,
+ ok = receive
+ {'DOWN', Ref1, process, Pid1, _} ->
+ ok
+ after 1000 ->
+ timeout
+ end,
+ ok = receive
+ {monitor_fired,Port,Pid1} ->
+ ok
+ after 1000 ->
+ timeout
+ end,
+ "ok" = port_control(Port,?MON_OP_DEMONITOR_ME,[]),
+ {monitors,[]} = erlang:port_info(Port,monitors),
+ {monitored_by, []} = process_info(self(),monitored_by),
+
+ "ok" = port_control(Port,?MON_OP_MONITOR_ME,[]),
+ {Pid2,Ref2} =
+ spawn_monitor(fun() ->
+ receive go -> ok end,
+ Me ! port_control(Port,?MON_OP_MONITOR_ME_LATER,[]),
+ Me ! process_info(self(),monitored_by),
+ Me ! erlang:port_info(Port,monitors)
+ end),
+ Pid2 ! go,
+ {ok,Id2} = receive
+ "ok:"++II ->
+ {ok,II}
+ after 1000 ->
+ timeout
+ end,
+ ok = receive
+ {monitored_by, [Me]} ->
+ ok
+ after 1000 ->
+ timeout
+ end,
+ ok = receive
+ {monitors, [{process,Me}]} ->
+ ok
+ after 1000 ->
+ timeout
+ end,
+ ok = receive
+ {'DOWN', Ref2, process, Pid2, _} ->
+ ok
+ after 1000 ->
+ timeout
+ end,
+ "noproc" = port_control(Port,?MON_OP_DO_DELAYED_MONITOR,Id2),
+ {monitors,[{process,Me}]} = erlang:port_info(Port,monitors),
+ "ok" = port_control(Port,?MON_OP_DEMONITOR_ME,[]),
+ "not_monitored" = port_control(Port,?MON_OP_DEMONITOR_ME,[]),
+ {monitors,[]} = erlang:port_info(Port,monitors),
+ {monitored_by, []} = process_info(self(),monitored_by),
+
+
+ "ok" = port_control(Port,?MON_OP_MONITOR_ME,[]),
+ {Pid3,Ref3} =
+ spawn_monitor(fun() ->
+ receive go -> ok end,
+ Me ! port_control(Port,?MON_OP_MONITOR_ME_LATER,[]),
+ Me ! process_info(self(),monitored_by),
+ Me ! erlang:port_info(Port,monitors) ,
+ receive die -> ok end
+ end),
+ Pid3 ! go,
+ {ok,Id3} = receive
+ "ok:"++III ->
+ {ok,III}
+ after 1000 ->
+ timeout
+ end,
+ ok = receive
+ {monitored_by, [Me]} ->
+ ok
+ after 1000 ->
+ timeout
+ end,
+ ok = receive
+ {monitors, [{process,Me}]} ->
+ ok
+ after 1000 ->
+ timeout
+ end,
+ "ok" = port_control(Port,?MON_OP_DO_DELAYED_MONITOR,Id3),
+ LLL1 = lists:sort([{process,Me},{process,Pid3}]),
+ {monitors,LLL2} = erlang:port_info(Port,monitors),
+ LLL1 = lists:sort(LLL2),
+ "ok" = port_control(Port,?MON_OP_DEMONITOR_ME,[]),
+ {monitors,[{process,Pid3}]} = erlang:port_info(Port,monitors),
+ Pid3 ! die,
+ ok = receive
+ {'DOWN', Ref3, process, Pid3, _} ->
+ ok
+ after 1000 ->
+ timeout
+ end,
+ "not_found" = port_control(Port,?MON_OP_DO_DELAYED_MONITOR,Id2),
+ {monitors,[]} = erlang:port_info(Port,monitors),
+ "not_monitored" = port_control(Port,?MON_OP_DEMONITOR_ME,[]),
+ {monitors,[]} = erlang:port_info(Port,monitors),
+ {monitored_by, []} = process_info(self(),monitored_by),
+
+ stop_driver(Port, Name),
+ ok.
-define(IOQ_EXIT_READY_INPUT, 1).
@@ -1399,716 +1349,663 @@ driver_monitor(Config) when is_list(Config) ->
-define(IOQ_EXIT_EVENT_ASYNC, 9).
ioq_exit_test(Config, TestNo) ->
- ?line Drv = ioq_exit_drv,
- ?line try
- begin
- ?line case load_driver(?config(data_dir, Config),
- Drv) of
- ok -> ?line ok;
- {error, permanent} -> ?line ok;
- LoadError -> ?line ?t:fail({load_error, LoadError})
- end,
- case open_port({spawn, Drv}, []) of
- Port when is_port(Port) ->
- try port_control(Port, TestNo, "") of
- "ok" ->
- ?line ok;
- "nyiftos" ->
- ?line throw({skipped,
- "Not yet implemented for "
- "this OS"});
- [$s,$k,$i,$p,$:,$ | Comment] ->
- ?line throw({skipped, Comment});
- [$e,$r,$r,$o,$r,$:,$ | Error] ->
- ?line ?t:fail(Error)
- after
- Port ! {self(), close},
- receive {Port, closed} -> ok end,
- false = lists:member(Port, erlang:ports()),
- ok
- end;
- Error ->
- ?line ?t:fail({open_port_failed, Error})
- end
- end
- catch
- throw:Term -> ?line Term
- after
- erl_ddll:unload_driver(Drv)
- end.
-
-ioq_exit_ready_input(doc) -> [];
-ioq_exit_ready_input(suite) -> [];
+ Drv = ioq_exit_drv,
+ try
+ begin
+ case load_driver(proplists:get_value(data_dir, Config),
+ Drv) of
+ ok -> ok;
+ {error, permanent} -> ok;
+ LoadError -> ct:fail({load_error, LoadError})
+ end,
+ case open_port({spawn, Drv}, []) of
+ Port when is_port(Port) ->
+ try port_control(Port, TestNo, "") of
+ "ok" ->
+ ok;
+ "nyiftos" ->
+ throw({skipped,
+ "Not yet implemented for "
+ "this OS"});
+ [$s,$k,$i,$p,$:,$ | Comment] ->
+ throw({skipped, Comment});
+ [$e,$r,$r,$o,$r,$:,$ | Error] ->
+ ct:fail(Error)
+ after
+ Port ! {self(), close},
+ receive {Port, closed} -> ok end,
+ false = lists:member(Port, erlang:ports()),
+ ok
+ end;
+ Error ->
+ ct:fail({open_port_failed, Error})
+ end
+ end
+ catch
+ throw:Term -> Term
+ after
+ erl_ddll:unload_driver(Drv)
+ end.
+
ioq_exit_ready_input(Config) when is_list(Config) ->
ioq_exit_test(Config, ?IOQ_EXIT_READY_INPUT).
-ioq_exit_ready_output(doc) -> [];
-ioq_exit_ready_output(suite) -> [];
ioq_exit_ready_output(Config) when is_list(Config) ->
ioq_exit_test(Config, ?IOQ_EXIT_READY_OUTPUT).
-ioq_exit_timeout(doc) -> [];
-ioq_exit_timeout(suite) -> [];
ioq_exit_timeout(Config) when is_list(Config) ->
ioq_exit_test(Config, ?IOQ_EXIT_TIMEOUT).
-ioq_exit_ready_async(doc) -> [];
-ioq_exit_ready_async(suite) -> [];
ioq_exit_ready_async(Config) when is_list(Config) ->
ioq_exit_test(Config, ?IOQ_EXIT_READY_ASYNC).
-ioq_exit_event(doc) -> [];
-ioq_exit_event(suite) -> [];
ioq_exit_event(Config) when is_list(Config) ->
ioq_exit_test(Config, ?IOQ_EXIT_EVENT).
-ioq_exit_ready_input_async(doc) -> [];
-ioq_exit_ready_input_async(suite) -> [];
ioq_exit_ready_input_async(Config) when is_list(Config) ->
ioq_exit_test(Config, ?IOQ_EXIT_READY_INPUT_ASYNC).
-ioq_exit_ready_output_async(doc) -> [];
-ioq_exit_ready_output_async(suite) -> [];
ioq_exit_ready_output_async(Config) when is_list(Config) ->
ioq_exit_test(Config, ?IOQ_EXIT_READY_OUTPUT_ASYNC).
-ioq_exit_timeout_async(doc) -> [];
-ioq_exit_timeout_async(suite) -> [];
ioq_exit_timeout_async(Config) when is_list(Config) ->
ioq_exit_test(Config, ?IOQ_EXIT_TIMEOUT_ASYNC).
-ioq_exit_event_async(doc) -> [];
-ioq_exit_event_async(suite) -> [];
ioq_exit_event_async(Config) when is_list(Config) ->
ioq_exit_test(Config, ?IOQ_EXIT_EVENT_ASYNC).
vsn_mismatch_test(Config, LoadResult) ->
- ?line Path = ?config(data_dir, Config),
- ?line DrvName = ?config(testcase, Config),
- ?line LoadResult = load_driver(Path, DrvName),
- ?line case LoadResult of
- ok ->
- ?line Port = open_port({spawn, DrvName}, []),
- ?line true = is_port(Port),
- ?line true = port_close(Port),
- ?line ok = erl_ddll:unload_driver(DrvName);
- _ ->
- ?line ok
- end.
-
-zero_extended_marker_garb_drv(doc) -> [];
-zero_extended_marker_garb_drv(suite) -> [];
+ Path = proplists:get_value(data_dir, Config),
+ DrvName = proplists:get_value(testcase, Config),
+ LoadResult = load_driver(Path, DrvName),
+ case LoadResult of
+ ok ->
+ Port = open_port({spawn, DrvName}, []),
+ true = is_port(Port),
+ true = port_close(Port),
+ ok = erl_ddll:unload_driver(DrvName);
+ _ ->
+ ok
+ end.
+
zero_extended_marker_garb_drv(Config) when is_list(Config) ->
vsn_mismatch_test(Config, {error, driver_incorrect_version}).
-invalid_extended_marker_drv(doc) -> [];
-invalid_extended_marker_drv(suite) -> [];
invalid_extended_marker_drv(Config) when is_list(Config) ->
vsn_mismatch_test(Config, {error, driver_incorrect_version}).
-larger_major_vsn_drv(doc) -> [];
-larger_major_vsn_drv(suite) -> [];
larger_major_vsn_drv(Config) when is_list(Config) ->
vsn_mismatch_test(Config, {error, driver_incorrect_version}).
-larger_minor_vsn_drv(doc) -> [];
-larger_minor_vsn_drv(suite) -> [];
larger_minor_vsn_drv(Config) when is_list(Config) ->
vsn_mismatch_test(Config, {error, driver_incorrect_version}).
-smaller_major_vsn_drv(doc) -> [];
-smaller_major_vsn_drv(suite) -> [];
smaller_major_vsn_drv(Config) when is_list(Config) ->
vsn_mismatch_test(Config, {error, driver_incorrect_version}).
-smaller_minor_vsn_drv(doc) -> [];
-smaller_minor_vsn_drv(suite) -> [];
smaller_minor_vsn_drv(Config) when is_list(Config) ->
DrvVsnStr = erlang:system_info(driver_version),
case drv_vsn_str2tup(DrvVsnStr) of
- {_, 0} ->
- {skipped,
- "Cannot perform test when minor driver version is 0. "
- "Current driver version is " ++ DrvVsnStr ++ "."};
- _ ->
- vsn_mismatch_test(Config, ok)
+ {_, 0} ->
+ {skipped,
+ "Cannot perform test when minor driver version is 0. "
+ "Current driver version is " ++ DrvVsnStr ++ "."};
+ _ ->
+ vsn_mismatch_test(Config, ok)
end.
-define(PEEK_NONXQ_TEST, 0).
-define(PEEK_NONXQ_WAIT, 1).
-peek_non_existing_queue(doc) -> [];
-peek_non_existing_queue(suite) -> [];
peek_non_existing_queue(Config) when is_list(Config) ->
- ?line OTE = process_flag(trap_exit, true),
- ?line Drv = peek_non_existing_queue_drv,
- ?line try
- begin
- ?line case load_driver(?config(data_dir, Config),
- Drv) of
- ok -> ?line ok;
- {error, permanent} -> ?line ok;
- LoadError -> ?line ?t:fail({load_error, LoadError})
- end,
- case open_port({spawn, Drv}, []) of
- Port1 when is_port(Port1) ->
- try port_control(Port1, ?PEEK_NONXQ_TEST, "") of
- "ok" ->
- ?line ok;
- [$s,$k,$i,$p,$p,$e,$d,$:,$ | SkipReason] ->
- ?line throw({skipped, SkipReason});
- [$e,$r,$r,$o,$r,$:,$ | Error1] ->
- ?line ?t:fail(Error1)
- after
- exit(Port1, kill),
- receive {'EXIT', Port1, _} -> ok end
- end;
- Error1 ->
- ?line ?t:fail({open_port1_failed, Error1})
- end,
- case open_port({spawn, Drv}, []) of
- Port2 when is_port(Port2) ->
- try port_control(Port2, ?PEEK_NONXQ_WAIT, "") of
- "ok" ->
- ?line ok;
- [$e,$r,$r,$o,$r,$:,$ | Error2] ->
- ?line ?t:fail(Error2)
- after
- receive {Port2, test_successful} -> ok end,
- Port2 ! {self(), close},
- receive {Port2, closed} -> ok end
- end;
- Error2 ->
- ?line ?t:fail({open_port2_failed, Error2})
- end
- end
- catch
- throw:Term -> ?line Term
- after
- process_flag(trap_exit, OTE),
- erl_ddll:unload_driver(Drv)
- end.
-
-otp_6879(doc) ->
- [];
-otp_6879(suite) ->
- [];
+ OTE = process_flag(trap_exit, true),
+ Drv = peek_non_existing_queue_drv,
+ try
+ begin
+ case load_driver(proplists:get_value(data_dir, Config),
+ Drv) of
+ ok -> ok;
+ {error, permanent} -> ok;
+ LoadError -> ct:fail({load_error, LoadError})
+ end,
+ case open_port({spawn, Drv}, []) of
+ Port1 when is_port(Port1) ->
+ try port_control(Port1, ?PEEK_NONXQ_TEST, "") of
+ "ok" ->
+ ok;
+ [$s,$k,$i,$p,$p,$e,$d,$:,$ | SkipReason] ->
+ throw({skipped, SkipReason});
+ [$e,$r,$r,$o,$r,$:,$ | Error1] ->
+ ct:fail(Error1)
+ after
+ exit(Port1, kill),
+ receive {'EXIT', Port1, _} -> ok end
+ end;
+ Error1 ->
+ ct:fail({open_port1_failed, Error1})
+ end,
+ case open_port({spawn, Drv}, []) of
+ Port2 when is_port(Port2) ->
+ try port_control(Port2, ?PEEK_NONXQ_WAIT, "") of
+ "ok" ->
+ ok;
+ [$e,$r,$r,$o,$r,$:,$ | Error2] ->
+ ct:fail(Error2)
+ after
+ receive {Port2, test_successful} -> ok end,
+ Port2 ! {self(), close},
+ receive {Port2, closed} -> ok end
+ end;
+ Error2 ->
+ ct:fail({open_port2_failed, Error2})
+ end
+ end
+ catch
+ throw:Term -> Term
+ after
+ process_flag(trap_exit, OTE),
+ erl_ddll:unload_driver(Drv)
+ end.
+
otp_6879(Config) when is_list(Config) ->
- ?line Drv = 'otp_6879_drv',
- ?line Parent = self(),
- ?line ok = load_driver(?config(data_dir, Config), Drv),
- ?line Procs = lists:map(
- fun (No) ->
- spawn_link(
- fun () ->
- case open_port({spawn, Drv}, []) of
- Port when is_port(Port) ->
- Res = otp_6879_call(Port, No, 10000),
- erlang:port_close(Port),
- Parent ! {self(), Res};
- _ ->
- Parent ! {self(),
- open_port_failed}
- end
- end)
- end,
- lists:seq(1,10)),
- ?line lists:foreach(fun (P) ->
- ?line receive
- {P, ok} ->
- ?line ok;
- {P, Error} ->
- ?line ?t:fail({P, Error})
- end
- end,
- Procs),
+ Drv = 'otp_6879_drv',
+ Parent = self(),
+ ok = load_driver(proplists:get_value(data_dir, Config), Drv),
+ Procs = lists:map(
+ fun (No) ->
+ spawn_link(
+ fun () ->
+ case open_port({spawn, Drv}, []) of
+ Port when is_port(Port) ->
+ Res = otp_6879_call(Port, No, 10000),
+ erlang:port_close(Port),
+ Parent ! {self(), Res};
+ _ ->
+ Parent ! {self(),
+ open_port_failed}
+ end
+ end)
+ end,
+ lists:seq(1,10)),
+ lists:foreach(fun (P) ->
+ receive
+ {P, ok} ->
+ ok;
+ {P, Error} ->
+ ct:fail({P, Error})
+ end
+ end,
+ Procs),
%% Also try it when input exceeds default buffer (256 bytes)
- ?line Data = lists:seq(1, 1000),
- ?line case open_port({spawn, Drv}, []) of
- Port when is_port(Port) ->
- ?line ok = otp_6879_call(Port, Data, 10),
- ?line erlang:port_close(Port);
- _ ->
- ?line ?t:fail(open_port_failed)
- end,
- ?line erl_ddll:unload_driver(Drv),
- ?line ok.
+ Data = lists:seq(1, 1000),
+ case open_port({spawn, Drv}, []) of
+ Port when is_port(Port) ->
+ ok = otp_6879_call(Port, Data, 10),
+ erlang:port_close(Port);
+ _ ->
+ ct:fail(open_port_failed)
+ end,
+ erl_ddll:unload_driver(Drv),
+ ok.
otp_6879_call(_Port, _Data, 0) ->
ok;
otp_6879_call(Port, Data, N) ->
case catch erlang:port_call(Port, 0, Data) of
- Data -> otp_6879_call(Port, Data, N-1);
- BadData -> {mismatch, Data, BadData}
+ Data -> otp_6879_call(Port, Data, N-1);
+ BadData -> {mismatch, Data, BadData}
end.
-caller(doc) ->
- [];
-caller(suite) ->
- [];
caller(Config) when is_list(Config) ->
- ?line run_caller_test(Config, false),
- ?line run_caller_test(Config, true).
-
+ run_caller_test(Config, false),
+ run_caller_test(Config, true).
+
run_caller_test(Config, Outputv) ->
- ?line Drv = 'caller_drv',
- ?line Cmd = case Outputv of
- true ->
- ?line os:putenv("CALLER_DRV_USE_OUTPUTV",
- "true"),
- outputv;
- false ->
- ?line os:putenv("CALLER_DRV_USE_OUTPUTV",
- "false"),
- output
- end,
- ?line ok = load_driver(?config(data_dir, Config), Drv),
- ?line Port = open_port({spawn, Drv}, []),
- ?line true = is_port(Port),
- ?line chk_caller(Port, start, self()),
- ?line chk_caller(Port,
- Cmd,
- spawn_link(
- fun () ->
- port_command(Port, "")
- end)),
- ?line Port ! {self(), {command, ""}},
- ?line chk_caller(Port, Cmd, self()),
- ?line chk_caller(Port,
- control,
- spawn_link(
- fun () ->
- port_control(Port, 0, "")
- end)),
- ?line chk_caller(Port,
- call,
- spawn_link(
- fun () ->
- erlang:port_call(Port, 0, "")
- end)),
- ?line true = port_close(Port),
- ?line erl_ddll:unload_driver(Drv),
- ?line ok.
+ Drv = 'caller_drv',
+ Cmd = case Outputv of
+ true ->
+ os:putenv("CALLER_DRV_USE_OUTPUTV",
+ "true"),
+ outputv;
+ false ->
+ os:putenv("CALLER_DRV_USE_OUTPUTV",
+ "false"),
+ output
+ end,
+ ok = load_driver(proplists:get_value(data_dir, Config), Drv),
+ Port = open_port({spawn, Drv}, []),
+ true = is_port(Port),
+ chk_caller(Port, start, self()),
+ chk_caller(Port,
+ Cmd,
+ spawn_link(
+ fun () ->
+ port_command(Port, "")
+ end)),
+ Port ! {self(), {command, ""}},
+ chk_caller(Port, Cmd, self()),
+ chk_caller(Port,
+ control,
+ spawn_link(
+ fun () ->
+ port_control(Port, 0, "")
+ end)),
+ chk_caller(Port,
+ call,
+ spawn_link(
+ fun () ->
+ erlang:port_call(Port, 0, "")
+ end)),
+ true = port_close(Port),
+ erl_ddll:unload_driver(Drv),
+ ok.
chk_caller(Port, Callback, ExpectedCaller) ->
receive
- {caller, Port, Callback, Caller} ->
- ExpectedCaller = Caller
+ {caller, Port, Callback, Caller} ->
+ ExpectedCaller = Caller
end.
-many_events(suite) ->
- [];
-many_events(doc) ->
- ["Check that many simultaneously signalled events work (win32)"];
+%% Check that many simultaneously signalled events work (win32)
many_events(Config) when is_list(Config) ->
- ?line Name = 'many_events_drv',
- ?line Port = start_driver(Config, Name, false),
+ Name = 'many_events_drv',
+ Port = start_driver(Config, Name, false),
Number = "1000",
Port ! {self(), {command, Number}},
receive
- {Port, {data,Number}} ->
- ?line receive %% Just to make sure the emulator does not crash
- %% after this case is run (if faulty)
- after 2000 ->
- ok
- end
+ {Port, {data,Number}} ->
+ receive %% Just to make sure the emulator does not crash
+ %% after this case is run (if faulty)
+ after 2000 ->
+ ok
+ end
after 1000 ->
- ?line exit(the_driver_does_not_respond)
+ exit(the_driver_does_not_respond)
end,
- ?line stop_driver(Port, Name),
- ?line ok.
-
-
-missing_callbacks(doc) ->
- [];
-missing_callbacks(suite) ->
- [];
+ stop_driver(Port, Name),
+ ok.
+
+
missing_callbacks(Config) when is_list(Config) ->
- ?line Name = 'missing_callback_drv',
- ?line Port = start_driver(Config, Name, false),
+ Name = 'missing_callback_drv',
+ Port = start_driver(Config, Name, false),
- ?line Port ! {self(), {command, "tjenix"}},
- ?line true = erlang:port_command(Port, "halloj"),
- ?line {'EXIT', {badarg, _}} = (catch erlang:port_control(Port, 4711, "mors")),
- ?line {'EXIT', {badarg, _}} = (catch erlang:port_call(Port, 17, "hej")),
+ Port ! {self(), {command, "tjenix"}},
+ true = erlang:port_command(Port, "halloj"),
+ {'EXIT', {badarg, _}} = (catch erlang:port_control(Port, 4711, "mors")),
+ {'EXIT', {badarg, _}} = (catch erlang:port_call(Port, 17, "hej")),
- ?line %% Give the (non-existing) ready_output(), ready_input(), event(),
- ?line %% and timeout() some time to be called.
- ?line receive after 1000 -> ok end,
+ %% Give the (non-existing) ready_output(), ready_input(), event(),
+ %% and timeout() some time to be called.
+ receive after 1000 -> ok end,
- ?line stop_driver(Port, Name),
- ?line ok.
+ stop_driver(Port, Name),
+ ok.
-smp_select(doc) ->
- ["Test concurrent calls to driver_select."];
-smp_select(suite) ->
- [];
+%% Test concurrent calls to driver_select.
smp_select(Config) when is_list(Config) ->
case os:type() of
- {win32,_} -> {skipped, "Test not implemented for this OS"};
- _ -> smp_select0(Config)
+ {win32,_} -> {skipped, "Test not implemented for this OS"};
+ _ -> smp_select0(Config)
end.
-
+
smp_select0(Config) ->
- ?line DrvName = 'chkio_drv',
- Path = ?config(data_dir, Config),
+ DrvName = 'chkio_drv',
+ Path = proplists:get_value(data_dir, Config),
erl_ddll:start(),
- ?line ok = load_driver(Path, DrvName),
+ ok = load_driver(Path, DrvName),
Master = self(),
ProcFun = fun()-> io:format("Worker ~p starting\n",[self()]),
- ?line Port = open_port({spawn, DrvName}, []),
- smp_select_loop(Port, 100000),
- sleep(1000), % wait for driver to handle pending events
- ?line true = erlang:port_close(Port),
- Master ! {ok,self()},
- io:format("Worker ~p finished\n",[self()])
- end,
- ?line Pids = lists:map(fun(_) -> spawn_link(ProcFun) end,
- lists:seq(1,4)),
+ Port = open_port({spawn, DrvName}, []),
+ smp_select_loop(Port, 100000),
+ sleep(1000), % wait for driver to handle pending events
+ true = erlang:port_close(Port),
+ Master ! {ok,self()},
+ io:format("Worker ~p finished\n",[self()])
+ end,
+ Pids = lists:map(fun(_) -> spawn_link(ProcFun) end,
+ lists:seq(1,4)),
TimeoutMsg = make_ref(),
{ok,TRef} = timer:send_after(5*1000, TimeoutMsg), % Limit test duration on slow machines
smp_select_wait(Pids, TimeoutMsg),
timer:cancel(TRef),
- ?line ok = erl_ddll:unload_driver(DrvName),
- ?line ok = erl_ddll:stop(),
+ ok = erl_ddll:unload_driver(DrvName),
+ ok = erl_ddll:stop(),
ok.
smp_select_loop(_, 0) ->
ok;
smp_select_loop(Port, N) ->
- ?line "ok" = erlang:port_control(Port, ?CHKIO_SMP_SELECT, []),
+ "ok" = erlang:port_control(Port, ?CHKIO_SMP_SELECT, []),
receive
- stop ->
- io:format("Worker ~p stopped with ~p laps left\n",[self(), N]),
- ok
+ stop ->
+ io:format("Worker ~p stopped with ~p laps left\n",[self(), N]),
+ ok
after 0 ->
- smp_select_loop(Port, N-1)
+ smp_select_loop(Port, N-1)
end.
smp_select_wait([], _) ->
ok;
smp_select_wait(Pids, TimeoutMsg) ->
receive
- {ok,Pid} when is_pid(Pid) ->
- smp_select_wait(lists:delete(Pid,Pids), TimeoutMsg);
- TimeoutMsg ->
- lists:foreach(fun(Pid)-> Pid ! stop end,
- Pids),
- smp_select_wait(Pids, TimeoutMsg)
+ {ok,Pid} when is_pid(Pid) ->
+ smp_select_wait(lists:delete(Pid,Pids), TimeoutMsg);
+ TimeoutMsg ->
+ lists:foreach(fun(Pid)-> Pid ! stop end,
+ Pids),
+ smp_select_wait(Pids, TimeoutMsg)
end.
-driver_select_use(doc) ->
- ["Test driver_select() with new ERL_DRV_USE flag."];
-driver_select_use(suite) ->
- [];
+%% Test driver_select() with new ERL_DRV_USE flag.
driver_select_use(Config) when is_list(Config) ->
case os:type() of
- {win32,_} -> {skipped, "Test not implemented for this OS"};
- _ -> driver_select_use0(Config)
+ {win32,_} -> {skipped, "Test not implemented for this OS"};
+ _ -> driver_select_use0(Config)
end.
-
+
driver_select_use0(Config) ->
- ?line DrvName = 'chkio_drv',
- Path = ?config(data_dir, Config),
+ DrvName = 'chkio_drv',
+ Path = proplists:get_value(data_dir, Config),
erl_ddll:start(),
- ?line ok = load_driver(Path, DrvName),
- ?line Port = open_port({spawn, DrvName}, []),
- ?line "ok" = erlang:port_control(Port, ?CHKIO_DRV_USE, []),
- ?line {Port,{data,"TheEnd"}} = receive Msg -> Msg
- after 10000 -> timeout end,
- ?line true = erlang:port_close(Port),
- ?line ok = erl_ddll:unload_driver(DrvName),
- ?line ok = erl_ddll:stop(),
+ ok = load_driver(Path, DrvName),
+ Port = open_port({spawn, DrvName}, []),
+ "ok" = erlang:port_control(Port, ?CHKIO_DRV_USE, []),
+ {Port,{data,"TheEnd"}} = receive Msg -> Msg
+ after 10000 -> timeout end,
+ true = erlang:port_close(Port),
+ ok = erl_ddll:unload_driver(DrvName),
+ ok = erl_ddll:stop(),
ok.
thread_mseg_alloc_cache_clean(Config) when is_list(Config) ->
case {erlang:system_info(threads),
- erlang:system_info({allocator,mseg_alloc}),
- driver_alloc_sbct()} of
- {_, false, _} ->
- ?line {skipped, "No mseg_alloc"};
- {false, _, _} ->
- ?line {skipped, "No threads"};
- {_, _, false} ->
- ?line {skipped, "driver_alloc() not using the alloc_util framework"};
- {_, _, SBCT} when is_integer(SBCT), SBCT > 10*1024*1024 ->
- ?line {skipped, "driver_alloc() using too large single block threshold"};
- {_, _, 0} ->
- ?line {skipped, "driver_alloc() using too low single block threshold"};
- {true, _MsegAllocInfo, SBCT} ->
- ?line DrvName = 'thr_alloc_drv',
- ?line Path = ?config(data_dir, Config),
- ?line erl_ddll:start(),
- ?line ok = load_driver(Path, DrvName),
- ?line Port = open_port({spawn, DrvName}, []),
- ?line CCI = 1000,
- ?line ?t:format("CCI = ~p~n", [CCI]),
- ?line CCC = mseg_alloc_ccc(),
- ?line ?t:format("CCC = ~p~n", [CCC]),
- ?line thread_mseg_alloc_cache_clean_test(Port,
- 10,
- CCI,
- SBCT+100),
- ?line true = erlang:port_close(Port),
- ?line ok = erl_ddll:unload_driver(DrvName),
- ?line ok = erl_ddll:stop(),
- ?line ok
+ erlang:system_info({allocator,mseg_alloc}),
+ driver_alloc_sbct()} of
+ {_, false, _} ->
+ {skipped, "No mseg_alloc"};
+ {false, _, _} ->
+ {skipped, "No threads"};
+ {_, _, false} ->
+ {skipped, "driver_alloc() not using the alloc_util framework"};
+ {_, _, SBCT} when is_integer(SBCT), SBCT > 10*1024*1024 ->
+ {skipped, "driver_alloc() using too large single block threshold"};
+ {_, _, 0} ->
+ {skipped, "driver_alloc() using too low single block threshold"};
+ {true, _MsegAllocInfo, SBCT} ->
+ DrvName = 'thr_alloc_drv',
+ Path = proplists:get_value(data_dir, Config),
+ erl_ddll:start(),
+ ok = load_driver(Path, DrvName),
+ Port = open_port({spawn, DrvName}, []),
+ CCI = 1000,
+ io:format("CCI = ~p~n", [CCI]),
+ CCC = mseg_alloc_ccc(),
+ io:format("CCC = ~p~n", [CCC]),
+ thread_mseg_alloc_cache_clean_test(Port,
+ 10,
+ CCI,
+ SBCT+100),
+ true = erlang:port_close(Port),
+ ok = erl_ddll:unload_driver(DrvName),
+ ok = erl_ddll:stop(),
+ ok
end.
mseg_alloc_cci(MsegAllocInfo) ->
- ?line {value,{options, OL}}
- = lists:keysearch(options, 1, MsegAllocInfo),
- ?line {value,{cci,CCI}} = lists:keysearch(cci,1,OL),
- ?line CCI.
+ {value,{options, OL}}
+ = lists:keysearch(options, 1, MsegAllocInfo),
+ {value,{cci,CCI}} = lists:keysearch(cci,1,OL),
+ CCI.
mseg_alloc_ccc() ->
mseg_alloc_ccc(mseg_inst_info(0)).
mseg_alloc_ccc(MsegAllocInfo) ->
- ?line {value,{memkind, MKL}} = lists:keysearch(memkind,1,MsegAllocInfo),
- ?line {value,{calls, CL}} = lists:keysearch(calls, 1, MKL),
- ?line {value,{mseg_check_cache, GigaCCC, CCC}}
- = lists:keysearch(mseg_check_cache, 1, CL),
- ?line GigaCCC*1000000000 + CCC.
+ {value,{memkind, MKL}} = lists:keysearch(memkind,1,MsegAllocInfo),
+ {value,{calls, CL}} = lists:keysearch(calls, 1, MKL),
+ {value,{mseg_check_cache, GigaCCC, CCC}}
+ = lists:keysearch(mseg_check_cache, 1, CL),
+ GigaCCC*1000000000 + CCC.
mseg_alloc_cached_segments() ->
mseg_alloc_cached_segments(mseg_inst_info(0)).
mseg_alloc_cached_segments(MsegAllocInfo) ->
MemName = "all memory",
- ?line [{memkind,DrvMem}]
- = lists:filter(fun(E) -> case E of
- {memkind, [{name, MemName} | _]} -> true;
- _ -> false
- end end, MsegAllocInfo),
- ?line {value,{status, SL}}
- = lists:keysearch(status, 1, DrvMem),
- ?line {value,{cached_segments, CS}}
- = lists:keysearch(cached_segments, 1, SL),
- ?line CS.
+ [{memkind,DrvMem}]
+ = lists:filter(fun(E) -> case E of
+ {memkind, [{name, MemName} | _]} -> true;
+ _ -> false
+ end end, MsegAllocInfo),
+ {value,{status, SL}}
+ = lists:keysearch(status, 1, DrvMem),
+ {value,{cached_segments, CS}}
+ = lists:keysearch(cached_segments, 1, SL),
+ CS.
mseg_inst_info(I) ->
{value, {instance, I, Value}}
- = lists:keysearch(I,
- 2,
- erlang:system_info({allocator,mseg_alloc})),
+ = lists:keysearch(I,
+ 2,
+ erlang:system_info({allocator,mseg_alloc})),
Value.
driver_alloc_sbct() ->
{_, _, _, As} = erlang:system_info(allocator),
case lists:keysearch(driver_alloc, 1, As) of
- {value,{driver_alloc,DAOPTs}} ->
- case lists:keysearch(sbct, 1, DAOPTs) of
- {value,{sbct,SBCT}} ->
- SBCT;
- _ ->
- false
- end;
- _ ->
- false
+ {value,{driver_alloc,DAOPTs}} ->
+ case lists:keysearch(sbct, 1, DAOPTs) of
+ {value,{sbct,SBCT}} ->
+ SBCT;
+ _ ->
+ false
+ end;
+ _ ->
+ false
end.
thread_mseg_alloc_cache_clean_test(_Port, 0, _CCI, _Size) ->
- ?line ok;
+ ok;
thread_mseg_alloc_cache_clean_test(Port, N, CCI, Size) ->
- ?line wait_until(fun () -> 0 == mseg_alloc_cached_segments() end),
- ?line receive after CCI+500 -> ok end,
- ?line OCCC = mseg_alloc_ccc(),
- ?line "ok" = erlang:port_control(Port, 0, integer_to_list(Size)),
- ?line receive after CCI+500 -> ok end,
- ?line CCC = mseg_alloc_ccc(),
- ?line ?t:format("CCC = ~p~n", [CCC]),
- ?line true = CCC > OCCC,
- ?line thread_mseg_alloc_cache_clean_test(Port, N-1, CCI, Size).
+ wait_until(fun () -> 0 == mseg_alloc_cached_segments() end),
+ receive after CCI+500 -> ok end,
+ OCCC = mseg_alloc_ccc(),
+ "ok" = erlang:port_control(Port, 0, integer_to_list(Size)),
+ receive after CCI+500 -> ok end,
+ CCC = mseg_alloc_ccc(),
+ io:format("CCC = ~p~n", [CCC]),
+ true = CCC > OCCC,
+ thread_mseg_alloc_cache_clean_test(Port, N-1, CCI, Size).
otp_9302(Config) when is_list(Config) ->
- ?line Path = ?config(data_dir, Config),
- ?line erl_ddll:start(),
- ?line ok = load_driver(Path, otp_9302_drv),
- ?line Port = open_port({spawn, otp_9302_drv}, []),
- ?line true = is_port(Port),
- ?line port_command(Port, ""),
- ?line {msg, block} = get_port_msg(Port, infinity),
- ?line {msg, job} = get_port_msg(Port, infinity),
- ?line C = case erlang:system_info(thread_pool_size) of
- 0 ->
- ?line {msg, cancel} = get_port_msg(Port, infinity),
- ?line {msg, job} = get_port_msg(Port, infinity),
- ?line false;
- _ ->
- case get_port_msg(Port, infinity) of
- {msg, cancel} -> %% Cancel always fail in Rel >= 15
- ?line {msg, job} = get_port_msg(Port, infinity),
- ?line false;
- {msg, job} ->
- ?line ok,
- ?line true
- end
- end,
- ?line {msg, end_of_jobs} = get_port_msg(Port, infinity),
- ?line no_msg = get_port_msg(Port, 2000),
- ?line port_close(Port),
- ?line case C of
- true ->
- ?line {comment, "Async job cancelled"};
- false ->
- ?line {comment, "Async job not cancelled"}
- end.
+ Path = proplists:get_value(data_dir, Config),
+ erl_ddll:start(),
+ ok = load_driver(Path, otp_9302_drv),
+ Port = open_port({spawn, otp_9302_drv}, []),
+ true = is_port(Port),
+ port_command(Port, ""),
+ {msg, block} = get_port_msg(Port, infinity),
+ {msg, job} = get_port_msg(Port, infinity),
+ C = case erlang:system_info(thread_pool_size) of
+ 0 ->
+ {msg, cancel} = get_port_msg(Port, infinity),
+ {msg, job} = get_port_msg(Port, infinity),
+ false;
+ _ ->
+ case get_port_msg(Port, infinity) of
+ {msg, cancel} -> %% Cancel always fail in Rel >= 15
+ {msg, job} = get_port_msg(Port, infinity),
+ false;
+ {msg, job} ->
+ ok,
+ true
+ end
+ end,
+ {msg, end_of_jobs} = get_port_msg(Port, infinity),
+ no_msg = get_port_msg(Port, 2000),
+ port_close(Port),
+ case C of
+ true ->
+ {comment, "Async job cancelled"};
+ false ->
+ {comment, "Async job not cancelled"}
+ end.
thr_free_drv(Config) when is_list(Config) ->
case erlang:system_info(threads) of
- false ->
- {skipped, "No thread support"};
- true ->
- thr_free_drv_do(Config)
+ false ->
+ {skipped, "No thread support"};
+ true ->
+ thr_free_drv_do(Config)
end.
thr_free_drv_do(Config) ->
- ?line Path = ?config(data_dir, Config),
- ?line erl_ddll:start(),
- ?line ok = load_driver(Path, thr_free_drv),
- ?line MemBefore = driver_alloc_size(),
-% io:format("SID=~p", [erlang:system_info(scheduler_id)]),
- ?line Port = open_port({spawn, thr_free_drv}, []),
- ?line MemPeek = driver_alloc_size(),
- ?line true = is_port(Port),
- ?line ok = thr_free_drv_control(Port, 0),
- ?line port_close(Port),
- ?line MemAfter = driver_alloc_size(),
- ?line io:format("MemPeek=~p~n", [MemPeek]),
- ?line io:format("MemBefore=~p, MemAfter=~p~n", [MemBefore, MemAfter]),
- ?line MemBefore = MemAfter,
- ?line case MemPeek of
- undefined -> ok;
- _ ->
- ?line true = MemPeek > MemBefore
- end,
- ?line ok.
+ Path = proplists:get_value(data_dir, Config),
+ erl_ddll:start(),
+ ok = load_driver(Path, thr_free_drv),
+ MemBefore = driver_alloc_size(),
+ % io:format("SID=~p", [erlang:system_info(scheduler_id)]),
+ Port = open_port({spawn, thr_free_drv}, []),
+ MemPeek = driver_alloc_size(),
+ true = is_port(Port),
+ ok = thr_free_drv_control(Port, 0),
+ port_close(Port),
+ MemAfter = driver_alloc_size(),
+ io:format("MemPeek=~p~n", [MemPeek]),
+ io:format("MemBefore=~p, MemAfter=~p~n", [MemBefore, MemAfter]),
+ MemBefore = MemAfter,
+ case MemPeek of
+ undefined -> ok;
+ _ ->
+ true = MemPeek > MemBefore
+ end,
+ ok.
thr_free_drv_control(Port, N) ->
case erlang:port_control(Port, 0, "") of
- "done" ->
- ok;
- "more" ->
- erlang:yield(),
-% io:format("N=~p, SID=~p", [N, erlang:system_info(scheduler_id)]),
- thr_free_drv_control(Port, N+1)
+ "done" ->
+ ok;
+ "more" ->
+ erlang:yield(),
+ % io:format("N=~p, SID=~p", [N, erlang:system_info(scheduler_id)]),
+ thr_free_drv_control(Port, N+1)
end.
-
+
async_blast(Config) when is_list(Config) ->
- ?line Path = ?config(data_dir, Config),
- ?line erl_ddll:start(),
- ?line ok = load_driver(Path, async_blast_drv),
- ?line SchedOnln = erlang:system_info(schedulers_online),
- ?line MemBefore = driver_alloc_size(),
- ?line Start = os:timestamp(),
- ?line Blast = fun () ->
- Port = open_port({spawn, async_blast_drv}, []),
- true = is_port(Port),
- port_command(Port, ""),
- receive
- {Port, done} ->
- ok
- end,
- port_close(Port)
- end,
- ?line Ps = lists:map(fun (N) ->
- spawn_opt(Blast,
- [{scheduler,
- (N rem SchedOnln)+ 1},
- monitor])
- end,
- lists:seq(1, 100)),
- ?line MemMid = driver_alloc_size(),
- ?line lists:foreach(fun ({Pid, Mon}) ->
- receive
- {'DOWN',Mon,process,Pid,_} -> ok
- end
- end, Ps),
- ?line End = os:timestamp(),
- ?line MemAfter = driver_alloc_size(),
- ?line io:format("MemBefore=~p, MemMid=~p, MemAfter=~p~n",
- [MemBefore, MemMid, MemAfter]),
- ?line AsyncBlastTime = timer:now_diff(End,Start)/1000000,
- ?line io:format("AsyncBlastTime=~p~n", [AsyncBlastTime]),
- ?line MemBefore = MemAfter,
- ?line erlang:display({async_blast_time, AsyncBlastTime}),
- ?line ok.
+ Path = proplists:get_value(data_dir, Config),
+ erl_ddll:start(),
+ ok = load_driver(Path, async_blast_drv),
+ SchedOnln = erlang:system_info(schedulers_online),
+ MemBefore = driver_alloc_size(),
+ Start = os:timestamp(),
+ Blast = fun () ->
+ Port = open_port({spawn, async_blast_drv}, []),
+ true = is_port(Port),
+ port_command(Port, ""),
+ receive
+ {Port, done} ->
+ ok
+ end,
+ port_close(Port)
+ end,
+ Ps = lists:map(fun (N) ->
+ spawn_opt(Blast,
+ [{scheduler,
+ (N rem SchedOnln)+ 1},
+ monitor])
+ end,
+ lists:seq(1, 100)),
+ MemMid = driver_alloc_size(),
+ lists:foreach(fun ({Pid, Mon}) ->
+ receive
+ {'DOWN',Mon,process,Pid,_} -> ok
+ end
+ end, Ps),
+ End = os:timestamp(),
+ MemAfter = driver_alloc_size(),
+ io:format("MemBefore=~p, MemMid=~p, MemAfter=~p~n",
+ [MemBefore, MemMid, MemAfter]),
+ AsyncBlastTime = timer:now_diff(End,Start)/1000000,
+ io:format("AsyncBlastTime=~p~n", [AsyncBlastTime]),
+ MemBefore = MemAfter,
+ erlang:display({async_blast_time, AsyncBlastTime}),
+ ok.
thr_msg_blast_receiver(_Port, N, N) ->
ok;
thr_msg_blast_receiver(Port, N, Max) ->
receive
- {Port, hi} ->
- thr_msg_blast_receiver(Port, N+1, Max)
+ {Port, hi} ->
+ thr_msg_blast_receiver(Port, N+1, Max)
end.
thr_msg_blast_receiver_proc(Port, Max, Parent, Done) ->
case port_control(Port, 0, "") of
- "receiver" ->
- spawn(fun () ->
- thr_msg_blast_receiver_proc(Port, Max+1, Parent, Done)
- end),
- thr_msg_blast_receiver(Port, 0, Max);
- "done" ->
- Parent ! Done
+ "receiver" ->
+ spawn(fun () ->
+ thr_msg_blast_receiver_proc(Port, Max+1, Parent, Done)
+ end),
+ thr_msg_blast_receiver(Port, 0, Max);
+ "done" ->
+ Parent ! Done
end.
thr_msg_blast(Config) when is_list(Config) ->
case erlang:system_info(smp_support) of
- false ->
- {skipped, "Non-SMP emulator; nothing to test..."};
- true ->
- Path = ?config(data_dir, Config),
- erl_ddll:start(),
- ok = load_driver(Path, thr_msg_blast_drv),
- MemBefore = driver_alloc_size(),
- Start = os:timestamp(),
- Port = open_port({spawn, thr_msg_blast_drv}, []),
- true = is_port(Port),
- Done = make_ref(),
- Me = self(),
- spawn(fun () ->
- thr_msg_blast_receiver_proc(Port, 1, Me, Done)
- end),
- receive
- Done -> ok
- end,
- ok = thr_msg_blast_receiver(Port, 0, 32*10000),
- port_close(Port),
- End = os:timestamp(),
- receive
- Garbage ->
- ?t:fail({received_garbage, Port, Garbage})
- after 2000 ->
- ok
- end,
- MemAfter = driver_alloc_size(),
- io:format("MemBefore=~p, MemAfter=~p~n",
- [MemBefore, MemAfter]),
- ThrMsgBlastTime = timer:now_diff(End,Start)/1000000,
- io:format("ThrMsgBlastTime=~p~n", [ThrMsgBlastTime]),
- MemBefore = MemAfter,
- Res = {thr_msg_blast_time, ThrMsgBlastTime},
- erlang:display(Res),
- Res
+ false ->
+ {skipped, "Non-SMP emulator; nothing to test..."};
+ true ->
+ Path = proplists:get_value(data_dir, Config),
+ erl_ddll:start(),
+ ok = load_driver(Path, thr_msg_blast_drv),
+ MemBefore = driver_alloc_size(),
+ Start = os:timestamp(),
+ Port = open_port({spawn, thr_msg_blast_drv}, []),
+ true = is_port(Port),
+ Done = make_ref(),
+ Me = self(),
+ spawn(fun () ->
+ thr_msg_blast_receiver_proc(Port, 1, Me, Done)
+ end),
+ receive
+ Done -> ok
+ end,
+ ok = thr_msg_blast_receiver(Port, 0, 32*10000),
+ port_close(Port),
+ End = os:timestamp(),
+ receive
+ Garbage ->
+ ct:fail({received_garbage, Port, Garbage})
+ after 2000 ->
+ ok
+ end,
+ MemAfter = driver_alloc_size(),
+ io:format("MemBefore=~p, MemAfter=~p~n",
+ [MemBefore, MemAfter]),
+ ThrMsgBlastTime = timer:now_diff(End,Start)/1000000,
+ io:format("ThrMsgBlastTime=~p~n", [ThrMsgBlastTime]),
+ MemBefore = MemAfter,
+ Res = {thr_msg_blast_time, ThrMsgBlastTime},
+ erlang:display(Res),
+ Res
end.
-define(IN_RANGE(LoW_, VaLuE_, HiGh_),
- case in_range(LoW_, VaLuE_, HiGh_) of
- true -> ok;
- false ->
- case erlang:system_info(lock_checking) of
- true ->
- ?t:format("~p:~p: Ignore bad sched count due to "
- "lock checking~n",
- [?MODULE,?LINE]);
- false ->
- ?t:fail({unexpected_sched_counts, VaLuE_})
- end
- end).
+ case in_range(LoW_, VaLuE_, HiGh_) of
+ true -> ok;
+ false ->
+ case erlang:system_info(lock_checking) of
+ true ->
+ io:format("~p:~p: Ignore bad sched count due to "
+ "lock checking~n",
+ [?MODULE,?LINE]);
+ false ->
+ ct:fail({unexpected_sched_counts, VaLuE_})
+ end
+ end).
consume_timeslice(Config) when is_list(Config) ->
@@ -2140,7 +2037,7 @@ consume_timeslice(Config) when is_list(Config) ->
%% the port instead.
%%
- Path = ?config(data_dir, Config),
+ Path = proplists:get_value(data_dir, Config),
erl_ddll:start(),
ok = load_driver(Path, consume_timeslice_drv),
Port = open_port({spawn, consume_timeslice_drv}, [{parallelism, false}]),
@@ -2150,18 +2047,18 @@ consume_timeslice(Config) when is_list(Config) ->
"enabled" = port_control(Port, $E, ""),
Proc1 = spawn_link(fun () ->
- receive Go -> ok end,
- Port ! {Parent, {command, ""}},
- Port ! {Parent, {command, ""}},
- Port ! {Parent, {command, ""}},
- Port ! {Parent, {command, ""}},
- Port ! {Parent, {command, ""}},
- Port ! {Parent, {command, ""}},
- Port ! {Parent, {command, ""}},
- Port ! {Parent, {command, ""}},
- Port ! {Parent, {command, ""}},
- Port ! {Parent, {command, ""}}
- end),
+ receive Go -> ok end,
+ Port ! {Parent, {command, ""}},
+ Port ! {Parent, {command, ""}},
+ Port ! {Parent, {command, ""}},
+ Port ! {Parent, {command, ""}},
+ Port ! {Parent, {command, ""}},
+ Port ! {Parent, {command, ""}},
+ Port ! {Parent, {command, ""}},
+ Port ! {Parent, {command, ""}},
+ Port ! {Parent, {command, ""}},
+ Port ! {Parent, {command, ""}}
+ end),
receive after 100 -> ok end,
count_pp_sched_start(),
Proc1 ! Go,
@@ -2172,18 +2069,18 @@ consume_timeslice(Config) when is_list(Config) ->
"disabled" = port_control(Port, $D, ""),
Proc2 = spawn_link(fun () ->
- receive Go -> ok end,
- Port ! {Parent, {command, ""}},
- Port ! {Parent, {command, ""}},
- Port ! {Parent, {command, ""}},
- Port ! {Parent, {command, ""}},
- Port ! {Parent, {command, ""}},
- Port ! {Parent, {command, ""}},
- Port ! {Parent, {command, ""}},
- Port ! {Parent, {command, ""}},
- Port ! {Parent, {command, ""}},
- Port ! {Parent, {command, ""}}
- end),
+ receive Go -> ok end,
+ Port ! {Parent, {command, ""}},
+ Port ! {Parent, {command, ""}},
+ Port ! {Parent, {command, ""}},
+ Port ! {Parent, {command, ""}},
+ Port ! {Parent, {command, ""}},
+ Port ! {Parent, {command, ""}},
+ Port ! {Parent, {command, ""}},
+ Port ! {Parent, {command, ""}},
+ Port ! {Parent, {command, ""}},
+ Port ! {Parent, {command, ""}}
+ end),
receive after 100 -> ok end,
count_pp_sched_start(),
Proc2 ! Go,
@@ -2194,18 +2091,18 @@ consume_timeslice(Config) when is_list(Config) ->
"enabled" = port_control(Port, $E, ""),
Proc3 = spawn_link(fun () ->
- receive Go -> ok end,
- port_command(Port, ""),
- port_command(Port, ""),
- port_command(Port, ""),
- port_command(Port, ""),
- port_command(Port, ""),
- port_command(Port, ""),
- port_command(Port, ""),
- port_command(Port, ""),
- port_command(Port, ""),
- port_command(Port, "")
- end),
+ receive Go -> ok end,
+ port_command(Port, ""),
+ port_command(Port, ""),
+ port_command(Port, ""),
+ port_command(Port, ""),
+ port_command(Port, ""),
+ port_command(Port, ""),
+ port_command(Port, ""),
+ port_command(Port, ""),
+ port_command(Port, ""),
+ port_command(Port, "")
+ end),
count_pp_sched_start(),
Proc3 ! Go,
wait_command_msgs(Port, 10),
@@ -2215,18 +2112,18 @@ consume_timeslice(Config) when is_list(Config) ->
"disabled" = port_control(Port, $D, ""),
Proc4 = spawn_link(fun () ->
- receive Go -> ok end,
- port_command(Port, ""),
- port_command(Port, ""),
- port_command(Port, ""),
- port_command(Port, ""),
- port_command(Port, ""),
- port_command(Port, ""),
- port_command(Port, ""),
- port_command(Port, ""),
- port_command(Port, ""),
- port_command(Port, "")
- end),
+ receive Go -> ok end,
+ port_command(Port, ""),
+ port_command(Port, ""),
+ port_command(Port, ""),
+ port_command(Port, ""),
+ port_command(Port, ""),
+ port_command(Port, ""),
+ port_command(Port, ""),
+ port_command(Port, ""),
+ port_command(Port, ""),
+ port_command(Port, "")
+ end),
count_pp_sched_start(),
Proc4 ! Go,
wait_command_msgs(Port, 10),
@@ -2238,43 +2135,43 @@ consume_timeslice(Config) when is_list(Config) ->
%% If only one scheduler use port with parallelism set to true,
%% in order to trigger scheduling of command signals
Port2 = case SOnl of
- 1 ->
- Port ! {self(), close},
- receive {Port, closed} -> ok end,
- open_port({spawn, consume_timeslice_drv},
- [{parallelism, true}]);
- _ ->
- process_flag(scheduler, 1),
- 1 = erlang:system_info(scheduler_id),
- Port
- end,
+ 1 ->
+ Port ! {self(), close},
+ receive {Port, closed} -> ok end,
+ open_port({spawn, consume_timeslice_drv},
+ [{parallelism, true}]);
+ _ ->
+ process_flag(scheduler, 1),
+ 1 = erlang:system_info(scheduler_id),
+ Port
+ end,
count_pp_sched_start(),
"enabled" = port_control(Port2, $E, ""),
W5 = case SOnl of
- 1 ->
- false;
- _ ->
- W1= spawn_opt(fun () ->
- 2 = erlang:system_info(scheduler_id),
- "sleeped" = port_control(Port2, $S, "")
- end, [link,{scheduler,2}]),
- receive after 100 -> ok end,
- W1
- end,
+ 1 ->
+ false;
+ _ ->
+ W1= spawn_opt(fun () ->
+ 2 = erlang:system_info(scheduler_id),
+ "sleeped" = port_control(Port2, $S, "")
+ end, [link,{scheduler,2}]),
+ receive after 100 -> ok end,
+ W1
+ end,
Proc5 = spawn_opt(fun () ->
- receive Go -> ok end,
- 1 = erlang:system_info(scheduler_id),
- Port2 ! {Parent, {command, ""}},
- Port2 ! {Parent, {command, ""}},
- Port2 ! {Parent, {command, ""}},
- Port2 ! {Parent, {command, ""}},
- Port2 ! {Parent, {command, ""}},
- Port2 ! {Parent, {command, ""}},
- Port2 ! {Parent, {command, ""}},
- Port2 ! {Parent, {command, ""}},
- Port2 ! {Parent, {command, ""}},
- Port2 ! {Parent, {command, ""}}
- end, [link,{scheduler,1}]),
+ receive Go -> ok end,
+ 1 = erlang:system_info(scheduler_id),
+ Port2 ! {Parent, {command, ""}},
+ Port2 ! {Parent, {command, ""}},
+ Port2 ! {Parent, {command, ""}},
+ Port2 ! {Parent, {command, ""}},
+ Port2 ! {Parent, {command, ""}},
+ Port2 ! {Parent, {command, ""}},
+ Port2 ! {Parent, {command, ""}},
+ Port2 ! {Parent, {command, ""}},
+ Port2 ! {Parent, {command, ""}},
+ Port2 ! {Parent, {command, ""}}
+ end, [link,{scheduler,1}]),
receive after 100 -> ok end,
Proc5 ! Go,
wait_procs_exit([W5, Proc5]),
@@ -2282,34 +2179,34 @@ consume_timeslice(Config) when is_list(Config) ->
[{Port2, Sprt5}, {Proc5, Sproc5}] = count_pp_sched_stop([Port2, Proc5]),
?IN_RANGE(2, Sproc5, 3),
?IN_RANGE(6, Sprt5, 20),
-
+
count_pp_sched_start(),
"disabled" = port_control(Port2, $D, ""),
W6 = case SOnl of
- 1 ->
- false;
- _ ->
- W2= spawn_opt(fun () ->
- 2 = erlang:system_info(scheduler_id),
- "sleeped" = port_control(Port2, $S, "")
- end, [link,{scheduler,2}]),
- receive after 100 -> ok end,
- W2
- end,
+ 1 ->
+ false;
+ _ ->
+ W2= spawn_opt(fun () ->
+ 2 = erlang:system_info(scheduler_id),
+ "sleeped" = port_control(Port2, $S, "")
+ end, [link,{scheduler,2}]),
+ receive after 100 -> ok end,
+ W2
+ end,
Proc6 = spawn_opt(fun () ->
- receive Go -> ok end,
- 1 = erlang:system_info(scheduler_id),
- Port2 ! {Parent, {command, ""}},
- Port2 ! {Parent, {command, ""}},
- Port2 ! {Parent, {command, ""}},
- Port2 ! {Parent, {command, ""}},
- Port2 ! {Parent, {command, ""}},
- Port2 ! {Parent, {command, ""}},
- Port2 ! {Parent, {command, ""}},
- Port2 ! {Parent, {command, ""}},
- Port2 ! {Parent, {command, ""}},
- Port2 ! {Parent, {command, ""}}
- end, [link,{scheduler,1}]),
+ receive Go -> ok end,
+ 1 = erlang:system_info(scheduler_id),
+ Port2 ! {Parent, {command, ""}},
+ Port2 ! {Parent, {command, ""}},
+ Port2 ! {Parent, {command, ""}},
+ Port2 ! {Parent, {command, ""}},
+ Port2 ! {Parent, {command, ""}},
+ Port2 ! {Parent, {command, ""}},
+ Port2 ! {Parent, {command, ""}},
+ Port2 ! {Parent, {command, ""}},
+ Port2 ! {Parent, {command, ""}},
+ Port2 ! {Parent, {command, ""}}
+ end, [link,{scheduler,1}]),
receive after 100 -> ok end,
Proc6 ! Go,
wait_procs_exit([W6, Proc6]),
@@ -2329,19 +2226,19 @@ wait_command_msgs(_, 0) ->
ok;
wait_command_msgs(Port, N) ->
receive
- {Port, command} ->
- wait_command_msgs(Port, N-1)
+ {Port, command} ->
+ wait_command_msgs(Port, N-1)
end.
in_range(Low, Val, High) when is_integer(Low),
- is_integer(Val),
- is_integer(High),
- Low =< Val,
- Val =< High ->
+ is_integer(Val),
+ is_integer(High),
+ Low =< Val,
+ Val =< High ->
true;
in_range(Low, Val, High) when is_integer(Low),
- is_integer(Val),
- is_integer(High) ->
+ is_integer(Val),
+ is_integer(High) ->
false.
count_pp_sched_start() ->
@@ -2354,7 +2251,7 @@ count_pp_sched_stop(Ps) ->
PNs = lists:map(fun (P) -> {P, 0} end, Ps),
receive {trace_delivered, all, Td} -> ok end,
Res = count_proc_sched(Ps, PNs),
- ?t:format("Scheduling counts: ~p~n", [Res]),
+ io:format("Scheduling counts: ~p~n", [Res]),
erlang:display({scheduling_counts, Res}),
Res.
@@ -2367,22 +2264,22 @@ do_inc_pn(P, [PN|PNs]) ->
inc_pn(P, PNs) ->
try
- do_inc_pn(P, PNs)
+ do_inc_pn(P, PNs)
catch
- throw:undefined -> PNs
+ throw:undefined -> PNs
end.
count_proc_sched(Ps, PNs) ->
receive
- TT when element(1, TT) == trace, element(3, TT) == in ->
-% erlang:display(TT),
- count_proc_sched(Ps, inc_pn(element(2, TT), PNs));
- TT when element(1, TT) == trace, element(3, TT) == out ->
- count_proc_sched(Ps, PNs)
+ TT when element(1, TT) == trace, element(3, TT) == in ->
+ % erlang:display(TT),
+ count_proc_sched(Ps, inc_pn(element(2, TT), PNs));
+ TT when element(1, TT) == trace, element(3, TT) == out ->
+ count_proc_sched(Ps, PNs)
after 0 ->
- PNs
+ PNs
end.
-
+
a_test(Config) when is_list(Config) ->
check_io_debug().
@@ -2396,7 +2293,7 @@ z_test(Config) when is_list(Config) ->
check_io_debug() ->
get_stable_check_io_info(),
{NoErrorFds, NoUsedFds, NoDrvSelStructs, NoDrvEvStructs} = CheckIoDebug
- = erts_debug:get_internal_state(check_io_debug),
+ = erts_debug:get_internal_state(check_io_debug),
HasGetHost = has_gethost(),
ct:log("check_io_debug: ~p~n"
"HasGetHost: ~p",[CheckIoDebug, HasGetHost]),
@@ -2438,26 +2335,26 @@ wait_procs_exit([]) ->
wait_procs_exit([P|Ps]) when is_pid(P) ->
Mon = erlang:monitor(process, P),
receive
- {'DOWN', Mon, process, P, _} ->
- wait_procs_exit(Ps)
+ {'DOWN', Mon, process, P, _} ->
+ wait_procs_exit(Ps)
end;
wait_procs_exit([_|Ps]) ->
wait_procs_exit(Ps).
get_port_msg(Port, Timeout) ->
receive
- {Port, What} ->
- {msg, What}
+ {Port, What} ->
+ {msg, What}
after Timeout ->
- no_msg
+ no_msg
end.
wait_until(Fun) ->
case Fun() of
- true -> ok;
- false ->
- receive after 100 -> ok end,
- wait_until(Fun)
+ true -> ok;
+ false ->
+ receive after 100 -> ok end,
+ wait_until(Fun)
end.
drv_vsn_str2tup(Str) ->
@@ -2488,11 +2385,11 @@ transform_bins(_Transform, Other) -> Other.
make_sub_binaries(Term) ->
MakeSub = fun(Bin0) ->
- Bin1 = <<243:8,0:3,Bin0/binary,31:5,19:8>>,
- Sz = size(Bin0),
- <<243:8,0:3,Bin:Sz/binary,31:5,19:8>> = id(Bin1),
- Bin
- end,
+ Bin1 = <<243:8,0:3,Bin0/binary,31:5,19:8>>,
+ Sz = size(Bin0),
+ <<243:8,0:3,Bin:Sz/binary,31:5,19:8>> = id(Bin1),
+ Bin
+ end,
transform_bins(MakeSub, Term).
id(I) -> I.
@@ -2534,7 +2431,7 @@ erl_millisecs(MonotonicTime) ->
%% Start/stop drivers.
start_driver(Config, Name, Binary) ->
- Path = ?config(data_dir, Config),
+ Path = proplists:get_value(data_dir, Config),
erl_ddll:start(),
%% Load the driver
@@ -2542,31 +2439,31 @@ start_driver(Config, Name, Binary) ->
%% open port.
case Binary of
- true ->
- open_port({spawn, Name}, [binary]);
- false ->
- open_port({spawn, Name}, [])
+ true ->
+ open_port({spawn, Name}, [binary]);
+ false ->
+ open_port({spawn, Name}, [])
end.
stop_driver(Port, Name) ->
- ?line true = erlang:port_close(Port),
+ true = erlang:port_close(Port),
receive
- {Port,Message} ->
- ?t:fail({strange_message_from_port,Message})
+ {Port,Message} ->
+ ct:fail({strange_message_from_port,Message})
after 0 ->
- ok
+ ok
end,
%% Unload the driver.
ok = erl_ddll:unload_driver(Name),
- ?line ok = erl_ddll:stop().
+ ok = erl_ddll:stop().
load_driver(Dir, Driver) ->
case erl_ddll:load_driver(Dir, Driver) of
- ok -> ok;
- {error, Error} = Res ->
- io:format("~s\n", [erl_ddll:format_error(Error)]),
- Res
+ ok -> ok;
+ {error, Error} = Res ->
+ io:format("~s\n", [erl_ddll:format_error(Error)]),
+ Res
end.
sleep() ->
@@ -2581,50 +2478,50 @@ sleep(Ms) when is_integer(Ms), Ms >= 0 ->
start_node(Config) when is_list(Config) ->
Pa = filename:dirname(code:which(?MODULE)),
Name = list_to_atom(atom_to_list(?MODULE)
- ++ "-"
- ++ atom_to_list(?config(testcase, Config))
- ++ "-"
- ++ integer_to_list(erlang:system_time(seconds))
- ++ "-"
- ++ integer_to_list(erlang:unique_integer([positive]))),
- ?t:start_node(Name, slave, [{args, "-pa "++Pa}]).
+ ++ "-"
+ ++ atom_to_list(proplists:get_value(testcase, Config))
+ ++ "-"
+ ++ integer_to_list(erlang:system_time(seconds))
+ ++ "-"
+ ++ integer_to_list(erlang:unique_integer([positive]))),
+ test_server:start_node(Name, slave, [{args, "-pa "++Pa}]).
stop_node(Node) ->
- ?t:stop_node(Node).
+ test_server:stop_node(Node).
wait_deallocations() ->
try
- erts_debug:set_internal_state(wait, deallocations)
+ erts_debug:set_internal_state(wait, deallocations)
catch error:undef ->
- erts_debug:set_internal_state(available_internal_state, true),
- wait_deallocations()
+ erts_debug:set_internal_state(available_internal_state, true),
+ wait_deallocations()
end.
driver_alloc_size() ->
case erlang:system_info(smp_support) of
- true ->
- ok;
- false ->
- %% driver_alloc also used by elements in lock-free queues,
- %% give these some time to be deallocated...
- receive after 100 -> ok end
+ true ->
+ ok;
+ false ->
+ %% driver_alloc also used by elements in lock-free queues,
+ %% give these some time to be deallocated...
+ receive after 100 -> ok end
end,
wait_deallocations(),
case erlang:system_info({allocator_sizes, driver_alloc}) of
- false ->
- undefined;
- MemInfo ->
- CS = lists:foldl(
- fun ({instance, _, L}, Acc) ->
- {value,{_,MBCS}} = lists:keysearch(mbcs, 1, L),
- {value,{_,SBCS}} = lists:keysearch(sbcs, 1, L),
- [MBCS,SBCS | Acc]
- end,
- [],
- MemInfo),
- lists:foldl(
- fun(L, Sz0) ->
- {value,{_,Sz,_,_}} = lists:keysearch(blocks_size, 1, L),
- Sz0+Sz
- end, 0, CS)
+ false ->
+ undefined;
+ MemInfo ->
+ CS = lists:foldl(
+ fun ({instance, _, L}, Acc) ->
+ {value,{_,MBCS}} = lists:keysearch(mbcs, 1, L),
+ {value,{_,SBCS}} = lists:keysearch(sbcs, 1, L),
+ [MBCS,SBCS | Acc]
+ end,
+ [],
+ MemInfo),
+ lists:foldl(
+ fun(L, Sz0) ->
+ {value,{_,Sz,_,_}} = lists:keysearch(blocks_size, 1, L),
+ Sz0+Sz
+ end, 0, CS)
end.
diff --git a/erts/emulator/test/driver_SUITE_data/async_blast_drv.c b/erts/emulator/test/driver_SUITE_data/async_blast_drv.c
index a1008afcae..1432bc42c1 100644
--- a/erts/emulator/test/driver_SUITE_data/async_blast_drv.c
+++ b/erts/emulator/test/driver_SUITE_data/async_blast_drv.c
@@ -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/erts/emulator/test/driver_SUITE_data/consume_timeslice_drv.c b/erts/emulator/test/driver_SUITE_data/consume_timeslice_drv.c
index 192ac02d3e..142ae46247 100644
--- a/erts/emulator/test/driver_SUITE_data/consume_timeslice_drv.c
+++ b/erts/emulator/test/driver_SUITE_data/consume_timeslice_drv.c
@@ -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/erts/emulator/test/driver_SUITE_data/ioq_exit_drv.c b/erts/emulator/test/driver_SUITE_data/ioq_exit_drv.c
index e2221b9e17..d87c2bec93 100644
--- a/erts/emulator/test/driver_SUITE_data/ioq_exit_drv.c
+++ b/erts/emulator/test/driver_SUITE_data/ioq_exit_drv.c
@@ -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/erts/emulator/test/driver_SUITE_data/otp_9302_drv.c b/erts/emulator/test/driver_SUITE_data/otp_9302_drv.c
index fdf8e4c0ad..37cb93fb3a 100644
--- a/erts/emulator/test/driver_SUITE_data/otp_9302_drv.c
+++ b/erts/emulator/test/driver_SUITE_data/otp_9302_drv.c
@@ -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/erts/emulator/test/driver_SUITE_data/thr_free_drv.c b/erts/emulator/test/driver_SUITE_data/thr_free_drv.c
index 54205f190e..48fe5fa435 100644
--- a/erts/emulator/test/driver_SUITE_data/thr_free_drv.c
+++ b/erts/emulator/test/driver_SUITE_data/thr_free_drv.c
@@ -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/erts/emulator/test/driver_SUITE_data/thr_msg_blast_drv.c b/erts/emulator/test/driver_SUITE_data/thr_msg_blast_drv.c
index f7a7cc2b8e..56183c9484 100644
--- a/erts/emulator/test/driver_SUITE_data/thr_msg_blast_drv.c
+++ b/erts/emulator/test/driver_SUITE_data/thr_msg_blast_drv.c
@@ -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/erts/emulator/test/efile_SUITE.erl b/erts/emulator/test/efile_SUITE.erl
index cb26e8e736..6bb8487c4e 100644
--- a/erts/emulator/test/efile_SUITE.erl
+++ b/erts/emulator/test/efile_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.
@@ -18,8 +18,7 @@
%% %CopyrightEnd%
-module(efile_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]).
-export([iter_max_files/1, async_dist/1]).
-export([do_iter_max_files/2, do_async_dist/1]).
@@ -31,21 +30,6 @@ suite() -> [{ct_hooks,[ts_install_cth]}].
all() ->
[iter_max_files, async_dist].
-groups() ->
- [].
-
-init_per_suite(Config) ->
- Config.
-
-end_per_suite(_Config) ->
- ok.
-
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
-
do_async_dist(Dir) ->
X = 100,
AT = erlang:system_info(thread_pool_size),
@@ -70,59 +54,58 @@ file_keys(Dir,Num,FdList,FnList) ->
Name = "dummy"++integer_to_list(Num),
FN = filename:join([Dir,Name]),
case file:open(FN,[write,raw]) of
- {ok,FD} ->
- {file_descriptor,prim_file,{Port,_}} = FD,
- <<X:32/integer-big>> =
- iolist_to_binary(erlang:port_control(Port,$K,[])),
- [X | file_keys(Dir,Num-1,[FD|FdList],[FN|FnList])];
- {error,_} ->
- % Try freeing up FD's if there are any
- case FdList of
- [] ->
- exit({cannot_open_file,FN});
- _ ->
- [ file:close(FD) || FD <- FdList ],
- [ file:delete(F) || F <- FnList ],
- file_keys(Dir,Num,[],[])
- end
+ {ok,FD} ->
+ {file_descriptor,prim_file,{Port,_}} = FD,
+ <<X:32/integer-big>> =
+ iolist_to_binary(erlang:port_control(Port,$K,[])),
+ [X | file_keys(Dir,Num-1,[FD|FdList],[FN|FnList])];
+ {error,_} ->
+ % Try freeing up FD's if there are any
+ case FdList of
+ [] ->
+ exit({cannot_open_file,FN});
+ _ ->
+ [ file:close(FD) || FD <- FdList ],
+ [ file:delete(F) || F <- FnList ],
+ file_keys(Dir,Num,[],[])
+ end
end.
-async_dist(doc) ->
- "Check that the distribution of files over async threads is fair";
+%% Check that the distribution of files over async threads is fair
async_dist(Config) when is_list(Config) ->
- DataDir = ?config(data_dir,Config),
+ DataDir = proplists:get_value(data_dir,Config),
TestFile = filename:join(DataDir, "existing_file"),
Dir = filename:dirname(code:which(?MODULE)),
AsyncSizes = [7,10,100,255,256,64,63,65],
Max = 0.5,
lists:foreach(fun(Size) ->
- {ok,Node} =
- test_server:start_node
- (test_iter_max_files,slave,
- [{args,
- "+A "++integer_to_list(Size)++
- " -pa " ++ Dir}]),
- {Distr,SD} = rpc:call(Node,?MODULE,do_async_dist,
- [DataDir]),
- test_server:stop_node(Node),
- if
- SD > Max ->
- io:format("Bad async queue distribution for "
- "~p async threads:~n"
- " Standard deviation is ~p~n"
- " Key distribution:~n ~lp~n",
- [Size,SD,Distr]),
- exit({bad_async_dist,Size,SD,Distr});
- true ->
- io:format("OK async queue distribution for "
- "~p async threads:~n"
- " Standard deviation is ~p~n"
- " Key distribution:~n ~lp~n",
- [Size,SD,Distr]),
- ok
- end
- end, AsyncSizes),
+ {ok,Node} =
+ test_server:start_node
+ (test_iter_max_files,slave,
+ [{args,
+ "+A "++integer_to_list(Size)++
+ " -pa " ++ Dir}]),
+ {Distr,SD} = rpc:call(Node,?MODULE,do_async_dist,
+ [DataDir]),
+ test_server:stop_node(Node),
+ if
+ SD > Max ->
+ io:format("Bad async queue distribution for "
+ "~p async threads:~n"
+ " Standard deviation is ~p~n"
+ " Key distribution:~n ~lp~n",
+ [Size,SD,Distr]),
+ exit({bad_async_dist,Size,SD,Distr});
+ true ->
+ io:format("OK async queue distribution for "
+ "~p async threads:~n"
+ " Standard deviation is ~p~n"
+ " Key distribution:~n ~lp~n",
+ [Size,SD,Distr]),
+ ok
+ end
+ end, AsyncSizes),
ok.
%%
@@ -130,54 +113,53 @@ async_dist(Config) when is_list(Config) ->
%% that we get the same number of files every time.
%%
-iter_max_files(suite) -> [];
iter_max_files(Config) when is_list(Config) ->
- DataDir = ?config(data_dir,Config),
+ DataDir = proplists:get_value(data_dir,Config),
TestFile = filename:join(DataDir, "existing_file"),
N = 10,
%% Run on a different node in order to set the max ports
Dir = filename:dirname(code:which(?MODULE)),
{ok,Node} = test_server:start_node(test_iter_max_files,slave,
- [{args,"+Q 1524 -pa " ++ Dir}]),
+ [{args,"+Q 1524 -pa " ++ Dir}]),
L = rpc:call(Node,?MODULE,do_iter_max_files,[N, TestFile]),
test_server:stop_node(Node),
io:format("Number of files opened in each test:~n~w\n", [L]),
all_equal(L),
Head = hd(L),
if Head >= 2 -> ok;
- true -> ?line test_server:fail(too_few_files)
+ true -> ct:fail(too_few_files)
end,
{comment, "Max files: " ++ integer_to_list(hd(L))}.
do_iter_max_files(N, Name) when N > 0 ->
- ?line [max_files(Name)| do_iter_max_files(N-1, Name)];
+ [max_files(Name)| do_iter_max_files(N-1, Name)];
do_iter_max_files(_, _) ->
[].
all_equal([E, E| T]) ->
- ?line all_equal([E| T]);
+ all_equal([E| T]);
all_equal([_]) ->
ok;
all_equal([]) ->
ok.
-
+
max_files(Name) ->
- ?line Fds = open_files(Name),
- ?line N = length(Fds),
- ?line close_files(Fds),
+ Fds = open_files(Name),
+ N = length(Fds),
+ close_files(Fds),
N.
close_files([Fd| Fds]) ->
- ?line file:close(Fd),
- ?line close_files(Fds);
+ file:close(Fd),
+ close_files(Fds);
close_files([]) ->
ok.
open_files(Name) ->
- ?line case file:open(Name, [read,raw]) of
- {ok, Fd} ->
- [Fd| open_files(Name)];
- {error, _Reason} ->
-% io:format("Error reason: ~p", [_Reason]),
- []
- end.
+ case file:open(Name, [read,raw]) of
+ {ok, Fd} ->
+ [Fd| open_files(Name)];
+ {error, _Reason} ->
+ % io:format("Error reason: ~p", [_Reason]),
+ []
+ end.
diff --git a/erts/emulator/test/erl_drv_thread_SUITE.erl b/erts/emulator/test/erl_drv_thread_SUITE.erl
index 26d00db7c0..f99c151936 100644
--- a/erts/emulator/test/erl_drv_thread_SUITE.erl
+++ b/erts/emulator/test/erl_drv_thread_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,8 +20,7 @@
-module(erl_drv_thread_SUITE).
-author('[email protected]').
--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]).
-export([basic/1, rwlock/1, tsd/1]).
@@ -34,38 +33,17 @@ suite() -> [{ct_hooks,[ts_install_cth]}].
all() ->
[basic, rwlock, tsd].
-groups() ->
- [].
-
-init_per_suite(Config) ->
- Config.
-
-end_per_suite(_Config) ->
- ok.
-
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
-
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% %%
%% Testcases %%
%% %%
-basic(suite) -> [];
-basic(doc) -> [];
-basic(Cfg) -> ?line drv_case(Cfg, basic).
+basic(Cfg) -> drv_case(Cfg, basic).
-rwlock(suite) -> [];
-rwlock(doc) -> [];
-rwlock(Cfg) -> ?line drv_case(Cfg, rwlock).
+rwlock(Cfg) -> drv_case(Cfg, rwlock).
-tsd(suite) -> [];
-tsd(doc) -> [];
-tsd(Cfg) -> ?line drv_case(Cfg, tsd).
+tsd(Cfg) -> drv_case(Cfg, tsd).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% %%
@@ -81,58 +59,54 @@ drv_case(Config, CaseName, Command) when is_list(Command) ->
drv_case(Config, CaseName, Command, ?DEFAULT_TIMETRAP_SECS).
drv_case(Config, CaseName, TimeTrap, Command) when is_list(Command),
- is_integer(TimeTrap) ->
+ is_integer(TimeTrap) ->
drv_case(Config, CaseName, Command, TimeTrap);
drv_case(Config, CaseName, Command, TimeTrap) when is_list(Config),
- is_atom(CaseName),
- is_list(Command),
- is_integer(TimeTrap) ->
- case ?t:os_type() of
- {Family, _} when Family == unix; Family == win32 ->
- ?line run_drv_case(Config, CaseName, Command, TimeTrap);
- SkipOs ->
- ?line {skipped,
- lists:flatten(["Not run on "
- | io_lib:format("~p",[SkipOs])])}
+ is_atom(CaseName),
+ is_list(Command),
+ is_integer(TimeTrap) ->
+ case os:type() of
+ {Family, _} when Family == unix; Family == win32 ->
+ run_drv_case(Config, CaseName, Command, TimeTrap);
+ SkipOs ->
+ {skipped, lists:flatten(["Not run on " | io_lib:format("~p",[SkipOs])])}
end.
run_drv_case(Config, CaseName, Command, TimeTrap) ->
- ?line Dog = test_server:timetrap(test_server:seconds(TimeTrap)),
- ?line DataDir = ?config(data_dir,Config),
+ ct:timetrap({seconds, TimeTrap}),
+ DataDir = proplists:get_value(data_dir,Config),
case erl_ddll:load_driver(DataDir, CaseName) of
- ok -> ok;
- {error, Error} ->
- io:format("~s\n", [erl_ddll:format_error(Error)]),
- ?line ?t:fail()
+ ok -> ok;
+ {error, Error} ->
+ ct:fail(erl_ddll:format_error(Error))
+ end,
+ Port = open_port({spawn, atom_to_list(CaseName)}, []),
+ true = is_port(Port),
+ Port ! {self(), {command, Command}},
+ Result = receive_drv_result(Port, CaseName),
+ Port ! {self(), close},
+ receive
+ {Port, closed} ->
+ ok
end,
- ?line Port = open_port({spawn, atom_to_list(CaseName)}, []),
- ?line true = is_port(Port),
- ?line Port ! {self(), {command, Command}},
- ?line Result = receive_drv_result(Port, CaseName),
- ?line Port ! {self(), close},
- ?line receive
- {Port, closed} ->
- ok
- end,
- ?line ok = erl_ddll:unload_driver(CaseName),
- ?line test_server:timetrap_cancel(Dog),
- ?line Result.
+ ok = erl_ddll:unload_driver(CaseName),
+ Result.
receive_drv_result(Port, CaseName) ->
- ?line receive
- {print, Port, CaseName, Str} ->
- ?line ?t:format("~s", [Str]),
- ?line receive_drv_result(Port, CaseName);
- {'EXIT', Port, Error} ->
- ?line ?t:fail(Error);
- {'EXIT', error, Error} ->
- ?line ?t:fail(Error);
- {failed, Port, CaseName, Comment} ->
- ?line ?t:fail(Comment);
- {skipped, Port, CaseName, Comment} ->
- ?line {skipped, Comment};
- {succeeded, Port, CaseName, ""} ->
- ?line succeeded;
- {succeeded, Port, CaseName, Comment} ->
- ?line {comment, Comment}
- end.
+ receive
+ {print, Port, CaseName, Str} ->
+ io:format("~s", [Str]),
+ receive_drv_result(Port, CaseName);
+ {'EXIT', Port, Error} ->
+ ct:fail(Error);
+ {'EXIT', error, Error} ->
+ ct:fail(Error);
+ {failed, Port, CaseName, Comment} ->
+ ct:fail(Comment);
+ {skipped, Port, CaseName, Comment} ->
+ {skipped, Comment};
+ {succeeded, Port, CaseName, ""} ->
+ succeeded;
+ {succeeded, Port, CaseName, Comment} ->
+ {comment, Comment}
+ end.
diff --git a/erts/emulator/test/erl_link_SUITE.erl b/erts/emulator/test/erl_link_SUITE.erl
index 56b2c9c6ee..93d2065ba3 100644
--- a/erts/emulator/test/erl_link_SUITE.erl
+++ b/erts/emulator/test/erl_link_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.
@@ -31,22 +31,21 @@
%-define(line_trace, 1).
-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([all/0, suite/0, init_per_suite/1, end_per_suite/1]).
% Test cases
-export([links/1,
- dist_links/1,
- monitor_nodes/1,
- process_monitors/1,
- dist_process_monitors/1,
- busy_dist_port_monitor/1,
- busy_dist_port_link/1,
- otp_5772_link/1,
- otp_5772_dist_link/1,
- otp_5772_monitor/1,
- otp_5772_dist_monitor/1,
- otp_7946/1]).
+ dist_links/1,
+ monitor_nodes/1,
+ process_monitors/1,
+ dist_process_monitors/1,
+ busy_dist_port_monitor/1,
+ busy_dist_port_link/1,
+ otp_5772_link/1,
+ otp_5772_dist_link/1,
+ otp_5772_monitor/1,
+ otp_5772_dist_monitor/1,
+ otp_7946/1]).
-export([init_per_testcase/2, end_per_testcase/2]).
@@ -65,21 +64,20 @@
-record(erl_link, {type = ?LINK_UNDEF,
- pid = [],
- targets = []}).
+ pid = [],
+ targets = []}).
% This is to be kept in sync with erl_bif_info.c (make_monitor_list)
--record(erl_monitor, {
- type, % MON_ORIGIN or MON_TARGET (1 or 3)
- ref,
- pid, % Process or nodename
- name = [] % registered name or []
- }).
+-record(erl_monitor, {type, % MON_ORIGIN or MON_TARGET (1 or 3)
+ ref,
+ pid, % Process or nodename
+ name = []}). % registered name or []
-
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap, {minutes, 1}}].
all() ->
[links, dist_links, monitor_nodes, process_monitors,
@@ -87,8 +85,15 @@ all() ->
busy_dist_port_link, otp_5772_link, otp_5772_dist_link,
otp_5772_monitor, otp_5772_dist_monitor, otp_7946].
-groups() ->
- [].
+init_per_testcase(Func, Config) when is_atom(Func), is_list(Config) ->
+ case catch erts_debug:get_internal_state(available_internal_state) of
+ true -> ok;
+ _ -> erts_debug:set_internal_state(available_internal_state, true)
+ end,
+ Config.
+
+end_per_testcase(_Func, _Config) ->
+ ok.
init_per_suite(Config) ->
Config.
@@ -96,419 +101,397 @@ init_per_suite(Config) ->
end_per_suite(_Config) ->
catch erts_debug:set_internal_state(available_internal_state, false).
-init_per_group(_GroupName, Config) ->
- Config.
-end_per_group(_GroupName, Config) ->
- Config.
-
-
-links(doc) -> ["Tests node local links"];
-links(suite) -> [];
+%% Tests node local links
links(Config) when is_list(Config) ->
- ?line common_link_test(node(), node()),
- ?line true = link(self()),
- ?line [] = find_erl_link(self(), ?LINK_PID, self()),
- ?line true = unlink(self()),
- ?line ok.
-
-dist_links(doc) -> ["Tests distributed links"];
-dist_links(suite) -> [];
+ common_link_test(node(), node()),
+ true = link(self()),
+ [] = find_erl_link(self(), ?LINK_PID, self()),
+ true = unlink(self()),
+ ok.
+
+%% Tests distributed links
dist_links(Config) when is_list(Config) ->
- ?line [NodeName] = get_names(1, dist_link),
- ?line {ok, Node} = start_node(NodeName),
- ?line common_link_test(node(), Node),
- ?line TP4 = spawn(?MODULE, test_proc, []),
- ?line TP5 = spawn(?MODULE, test_proc, []),
- ?line TP6 = spawn(Node, ?MODULE, test_proc, []),
- ?line true = tp_call(TP6, fun() -> link(TP4) end),
- ?line check_link(TP4, TP6),
- ?line true = tp_call(TP5,
- fun() ->
- process_flag(trap_exit,true),
- link(TP6)
- end),
- ?line check_link(TP5, TP6),
- ?line rpc:cast(Node, erlang, halt, []),
- ?line wait_until(fun () -> ?line is_proc_dead(TP4) end),
- ?line check_unlink(TP4, TP6),
- ?line true = tp_call(TP5,
- fun() ->
- receive
- {'EXIT', TP6, noconnection} ->
- true
- end
- end),
- ?line check_unlink(TP5, TP6),
- ?line tp_cast(TP5, fun() -> exit(normal) end),
- ?line ok.
+ [NodeName] = get_names(1, dist_link),
+ {ok, Node} = start_node(NodeName),
+ common_link_test(node(), Node),
+ TP4 = spawn(?MODULE, test_proc, []),
+ TP5 = spawn(?MODULE, test_proc, []),
+ TP6 = spawn(Node, ?MODULE, test_proc, []),
+ true = tp_call(TP6, fun() -> link(TP4) end),
+ check_link(TP4, TP6),
+ true = tp_call(TP5,
+ fun() ->
+ process_flag(trap_exit,true),
+ link(TP6)
+ end),
+ check_link(TP5, TP6),
+ rpc:cast(Node, erlang, halt, []),
+ wait_until(fun () -> is_proc_dead(TP4) end),
+ check_unlink(TP4, TP6),
+ true = tp_call(TP5,
+ fun() ->
+ receive
+ {'EXIT', TP6, noconnection} ->
+ true
+ end
+ end),
+ check_unlink(TP5, TP6),
+ tp_cast(TP5, fun() -> exit(normal) end),
+ ok.
common_link_test(NodeA, NodeB) ->
- ?line TP1 = spawn(NodeA, ?MODULE, test_proc, []),
- ?line check_unlink(TP1, self()),
- ?line TP2 = tp_call(TP1,
- fun () ->
- spawn_link(NodeB, ?MODULE, test_proc, [])
- end),
- ?line check_link(TP1, TP2),
- ?line true = tp_call(TP2, fun() -> unlink(TP1) end),
- ?line check_unlink(TP1, TP2),
- ?line true = tp_call(TP2, fun() -> link(TP1) end),
- ?line check_link(TP1, TP2),
- ?line false = tp_call(TP2, fun() -> process_flag(trap_exit, true) end),
- ?line tp_cast(TP1, fun () -> exit(died) end),
- ?line true = tp_call(TP2, fun() ->
- receive
- {'EXIT', TP1, died} ->
- true
- end
- end),
- ?line check_unlink(TP1, TP2),
- ?line TP3 = tp_call(TP2,
- fun () ->
- spawn_link(NodeA, ?MODULE, test_proc, [])
- end),
- ?line check_link(TP3, TP2),
- ?line tp_cast(TP2, fun() -> exit(died) end),
- ?line wait_until(fun () -> ?line is_proc_dead(TP3) end),
- ?line check_unlink(TP3, TP2),
- ?line ok.
-
-monitor_nodes(doc) -> ["Tests monitor of nodes"];
-monitor_nodes(suite) -> [];
+ TP1 = spawn(NodeA, ?MODULE, test_proc, []),
+ check_unlink(TP1, self()),
+ TP2 = tp_call(TP1,
+ fun () ->
+ spawn_link(NodeB, ?MODULE, test_proc, [])
+ end),
+ check_link(TP1, TP2),
+ true = tp_call(TP2, fun() -> unlink(TP1) end),
+ check_unlink(TP1, TP2),
+ true = tp_call(TP2, fun() -> link(TP1) end),
+ check_link(TP1, TP2),
+ false = tp_call(TP2, fun() -> process_flag(trap_exit, true) end),
+ tp_cast(TP1, fun () -> exit(died) end),
+ true = tp_call(TP2, fun() ->
+ receive
+ {'EXIT', TP1, died} ->
+ true
+ end
+ end),
+ check_unlink(TP1, TP2),
+ TP3 = tp_call(TP2,
+ fun () ->
+ spawn_link(NodeA, ?MODULE, test_proc, [])
+ end),
+ check_link(TP3, TP2),
+ tp_cast(TP2, fun() -> exit(died) end),
+ wait_until(fun () -> is_proc_dead(TP3) end),
+ check_unlink(TP3, TP2),
+ ok.
+
+%% Tests monitor of nodes
monitor_nodes(Config) when is_list(Config) ->
- ?line [An, Bn, Cn, Dn] = get_names(4, dist_link),
- ?line {ok, A} = start_node(An),
- ?line {ok, B} = start_node(Bn),
- ?line C = list_to_atom(lists:concat([Cn, "@", hostname()])),
- ?line D = list_to_atom(lists:concat([Dn, "@", hostname()])),
- ?line 0 = no_of_monitor_node(self(), A),
- ?line 0 = no_of_monitor_node(self(), B),
- ?line monitor_node(A, true),
- ?line monitor_node(B, true),
- ?line monitor_node(D, true),
- ?line monitor_node(D, true),
+ [An, Bn, Cn, Dn] = get_names(4, dist_link),
+ {ok, A} = start_node(An),
+ {ok, B} = start_node(Bn),
+ C = list_to_atom(lists:concat([Cn, "@", hostname()])),
+ D = list_to_atom(lists:concat([Dn, "@", hostname()])),
+ 0 = no_of_monitor_node(self(), A),
+ 0 = no_of_monitor_node(self(), B),
+ monitor_node(A, true),
+ monitor_node(B, true),
+ monitor_node(D, true),
+ monitor_node(D, true),
%% Has been known to crash the emulator.
- ?line {memory,_} = process_info(self(), memory),
-
- ?line monitor_node(A, false),
- ?line monitor_node(B, true),
- ?line monitor_node(C, true),
- ?line monitor_node(C, false),
- ?line monitor_node(C, true),
- ?line monitor_node(B, true),
- ?line monitor_node(A, false),
- ?line monitor_node(B, true),
- ?line monitor_node(B, false),
- ?line monitor_node(A, true),
- ?line check_monitor_node(self(), A, 1),
- ?line check_monitor_node(self(), B, 3),
- ?line check_monitor_node(self(), C, 0),
- ?line check_monitor_node(self(), D, 0),
- ?line receive {nodedown, C} -> ok end,
- ?line receive {nodedown, C} -> ok end,
- ?line receive {nodedown, C} -> ok end,
- ?line receive {nodedown, D} -> ok end,
- ?line receive {nodedown, D} -> ok end,
- ?line stop_node(A),
- ?line receive {nodedown, A} -> ok end,
- ?line check_monitor_node(self(), A, 0),
- ?line check_monitor_node(self(), B, 3),
- ?line stop_node(B),
- ?line receive {nodedown, B} -> ok end,
- ?line receive {nodedown, B} -> ok end,
- ?line receive {nodedown, B} -> ok end,
- ?line check_monitor_node(self(), B, 0),
- ?line receive
- {nodedown, X} ->
- ?line ?t:fail({unexpected_nodedown, X})
- after 0 ->
- ?line ok
- end,
- ?line ok.
-
-
-process_monitors(doc) -> ["Tests node local process monitors"];
-process_monitors(suite) -> [];
+ {memory,_} = process_info(self(), memory),
+
+ monitor_node(A, false),
+ monitor_node(B, true),
+ monitor_node(C, true),
+ monitor_node(C, false),
+ monitor_node(C, true),
+ monitor_node(B, true),
+ monitor_node(A, false),
+ monitor_node(B, true),
+ monitor_node(B, false),
+ monitor_node(A, true),
+ check_monitor_node(self(), A, 1),
+ check_monitor_node(self(), B, 3),
+ check_monitor_node(self(), C, 0),
+ check_monitor_node(self(), D, 0),
+ receive {nodedown, C} -> ok end,
+ receive {nodedown, C} -> ok end,
+ receive {nodedown, C} -> ok end,
+ receive {nodedown, D} -> ok end,
+ receive {nodedown, D} -> ok end,
+ stop_node(A),
+ receive {nodedown, A} -> ok end,
+ check_monitor_node(self(), A, 0),
+ check_monitor_node(self(), B, 3),
+ stop_node(B),
+ receive {nodedown, B} -> ok end,
+ receive {nodedown, B} -> ok end,
+ receive {nodedown, B} -> ok end,
+ check_monitor_node(self(), B, 0),
+ receive
+ {nodedown, X} ->
+ ct:fail({unexpected_nodedown, X})
+ after 0 ->
+ ok
+ end,
+ ok.
+
+
+%% Tests node local process monitors
process_monitors(Config) when is_list(Config) ->
- ?line common_process_monitors(node(), node()),
- ?line Mon1 = erlang:monitor(process,self()),
- ?line [] = find_erl_monitor(self(), Mon1),
- ?line [Name] = get_names(1, process_monitors),
- ?line true = register(Name, self()),
- ?line Mon2 = erlang:monitor(process, Name),
- ?line [] = find_erl_monitor(self(), Mon2),
- ?line receive
- {'DOWN', Mon1, _, _, _} = Msg ->
- ?line ?t:fail({unexpected_down_msg, Msg});
- {'DOWN', Mon2, _, _, _} = Msg ->
- ?line ?t:fail({unexpected_down_msg, Msg})
- after 500 ->
- ?line true = erlang:demonitor(Mon1),
- ?line true = erlang:demonitor(Mon2),
- ?line ok
- end.
-
-dist_process_monitors(doc) -> ["Tests distributed process monitors"];
-dist_process_monitors(suite) -> [];
+ common_process_monitors(node(), node()),
+ Mon1 = erlang:monitor(process,self()),
+ [] = find_erl_monitor(self(), Mon1),
+ [Name] = get_names(1, process_monitors),
+ true = register(Name, self()),
+ Mon2 = erlang:monitor(process, Name),
+ [] = find_erl_monitor(self(), Mon2),
+ receive
+ {'DOWN', Mon1, _, _, _} = Msg ->
+ ct:fail({unexpected_down_msg, Msg});
+ {'DOWN', Mon2, _, _, _} = Msg ->
+ ct:fail({unexpected_down_msg, Msg})
+ after 500 ->
+ true = erlang:demonitor(Mon1),
+ true = erlang:demonitor(Mon2),
+ ok
+ end.
+
+%% Tests distributed process monitors
dist_process_monitors(Config) when is_list(Config) ->
- ?line [Name] = get_names(1,dist_process_monitors),
- ?line {ok, Node} = start_node(Name),
- ?line common_process_monitors(node(), Node),
- ?line TP1 = spawn(Node, ?MODULE, test_proc, []),
- ?line R1 = erlang:monitor(process, TP1),
- ?line TP1O = get_down_object(TP1, self()),
- ?line check_process_monitor(self(), TP1, R1),
- ?line tp_cast(TP1, fun () -> halt() end),
- ?line receive
- {'DOWN',R1,process,TP1O,noconnection} ->
- ?line ok
- end,
- ?line check_process_demonitor(self(), TP1, R1),
- ?line R2 = erlang:monitor(process, TP1),
- ?line receive
- {'DOWN',R2,process,TP1O,noconnection} ->
- ?line ok
- end,
- ?line check_process_demonitor(self(), TP1, R2),
- ?line ok.
+ [Name] = get_names(1,dist_process_monitors),
+ {ok, Node} = start_node(Name),
+ common_process_monitors(node(), Node),
+ TP1 = spawn(Node, ?MODULE, test_proc, []),
+ R1 = erlang:monitor(process, TP1),
+ TP1O = get_down_object(TP1, self()),
+ check_process_monitor(self(), TP1, R1),
+ tp_cast(TP1, fun () -> halt() end),
+ receive
+ {'DOWN',R1,process,TP1O,noconnection} ->
+ ok
+ end,
+ check_process_demonitor(self(), TP1, R1),
+ R2 = erlang:monitor(process, TP1),
+ receive
+ {'DOWN',R2,process,TP1O,noconnection} ->
+ ok
+ end,
+ check_process_demonitor(self(), TP1, R2),
+ ok.
common_process_monitors(NodeA, NodeB) ->
- ?line TP1 = spawn(NodeA, ?MODULE, test_proc, []),
- ?line TP2 = spawn(NodeB, ?MODULE, test_proc, []),
- ?line run_common_process_monitors(TP1, TP2),
- ?line TP3 = spawn(NodeA, ?MODULE, test_proc, []),
- ?line TP4 = spawn(NodeB, ?MODULE, test_proc, []),
- ?line [TP4N] = get_names(1, common_process_monitors),
- ?line true = tp_call(TP4, fun () -> register(TP4N,self()) end),
- ?line run_common_process_monitors(TP3,
- case node() == node(TP4) of
- true -> TP4N;
- false -> {TP4N, node(TP4)}
- end),
- ?line ok.
+ TP1 = spawn(NodeA, ?MODULE, test_proc, []),
+ TP2 = spawn(NodeB, ?MODULE, test_proc, []),
+ run_common_process_monitors(TP1, TP2),
+ TP3 = spawn(NodeA, ?MODULE, test_proc, []),
+ TP4 = spawn(NodeB, ?MODULE, test_proc, []),
+ [TP4N] = get_names(1, common_process_monitors),
+ true = tp_call(TP4, fun () -> register(TP4N,self()) end),
+ run_common_process_monitors(TP3,
+ case node() == node(TP4) of
+ true -> TP4N;
+ false -> {TP4N, node(TP4)}
+ end),
+ ok.
run_common_process_monitors(TP1, TP2) ->
- ?line R1 = tp_call(TP1, fun () -> erlang:monitor(process, TP2) end),
- ?line check_process_monitor(TP1, TP2, R1),
-
- ?line tp_call(TP2, fun () -> catch erlang:demonitor(R1) end),
- ?line check_process_monitor(TP1, TP2, R1),
-
- ?line true = tp_call(TP1, fun () -> erlang:demonitor(R1) end),
- ?line check_process_demonitor(TP1, TP2, R1),
-
- ?line R2 = tp_call(TP1, fun () -> erlang:monitor(process, TP2) end),
- ?line TP2O = get_down_object(TP2, TP1),
- ?line check_process_monitor(TP1, TP2, R2),
- ?line tp_cast(TP2, fun () -> exit(bye) end),
- ?line wait_until(fun () -> ?line is_proc_dead(TP2) end),
- ?line ok = tp_call(TP1, fun () ->
- ?line receive
- {'DOWN',R2,process,TP2O,bye} ->
- ?line ok
- end
- end),
- ?line check_process_demonitor(TP1, TP2, R2),
-
- ?line R3 = tp_call(TP1, fun () -> erlang:monitor(process, TP2) end),
- ?line ok = tp_call(TP1, fun () ->
- ?line receive
- {'DOWN',R3,process,TP2O,noproc} ->
- ?line ok
- end
- end),
- ?line check_process_demonitor(TP1, TP2, R3),
-
- ?line tp_cast(TP1, fun () -> exit(normal) end),
- ?line wait_until(fun () -> ?line is_proc_dead(TP1) end),
- ?line ok.
-
-
-busy_dist_port_monitor(doc) -> ["Tests distributed monitor/2, demonitor/1, "
- "and 'DOWN' message over busy distribution "
- "port"];
-busy_dist_port_monitor(suite) -> [];
+ R1 = tp_call(TP1, fun () -> erlang:monitor(process, TP2) end),
+ check_process_monitor(TP1, TP2, R1),
+
+ tp_call(TP2, fun () -> catch erlang:demonitor(R1) end),
+ check_process_monitor(TP1, TP2, R1),
+
+ true = tp_call(TP1, fun () -> erlang:demonitor(R1) end),
+ check_process_demonitor(TP1, TP2, R1),
+
+ R2 = tp_call(TP1, fun () -> erlang:monitor(process, TP2) end),
+ TP2O = get_down_object(TP2, TP1),
+ check_process_monitor(TP1, TP2, R2),
+ tp_cast(TP2, fun () -> exit(bye) end),
+ wait_until(fun () -> is_proc_dead(TP2) end),
+ ok = tp_call(TP1, fun () ->
+ receive
+ {'DOWN',R2,process,TP2O,bye} ->
+ ok
+ end
+ end),
+ check_process_demonitor(TP1, TP2, R2),
+
+ R3 = tp_call(TP1, fun () -> erlang:monitor(process, TP2) end),
+ ok = tp_call(TP1, fun () ->
+ receive
+ {'DOWN',R3,process,TP2O,noproc} ->
+ ok
+ end
+ end),
+ check_process_demonitor(TP1, TP2, R3),
+
+ tp_cast(TP1, fun () -> exit(normal) end),
+ wait_until(fun () -> is_proc_dead(TP1) end),
+ ok.
+
+
+%% Tests distributed monitor/2, demonitor/1, and 'DOWN' message
+%% over busy distribution port
busy_dist_port_monitor(Config) when is_list(Config) ->
- ?line Tracer = case os:getenv("TRACE_BUSY_DIST_PORT") of
- "true" -> start_busy_dist_port_tracer();
- _ -> false
- end,
+ Tracer = case os:getenv("TRACE_BUSY_DIST_PORT") of
+ "true" -> start_busy_dist_port_tracer();
+ _ -> false
+ end,
- ?line [An] = get_names(1, busy_dist_port_monitor),
- ?line {ok, A} = start_node(An),
- ?line TP1 = spawn(A, ?MODULE, test_proc, []),
+ [An] = get_names(1, busy_dist_port_monitor),
+ {ok, A} = start_node(An),
+ TP1 = spawn(A, ?MODULE, test_proc, []),
%% Check monitor over busy port
- ?line M1 = suspend_on_busy_test(A,
- "erlang:monitor(process, TP1)",
- fun () -> erlang:monitor(process, TP1) end),
- ?line check_process_monitor(self(), TP1, M1),
+ M1 = suspend_on_busy_test(A,
+ "erlang:monitor(process, TP1)",
+ fun () -> erlang:monitor(process, TP1) end),
+ check_process_monitor(self(), TP1, M1),
%% Check demonitor over busy port
- ?line suspend_on_busy_test(A,
- "erlang:demonitor(M1)",
- fun () -> erlang:demonitor(M1) end),
- ?line check_process_demonitor(self(), TP1, M1),
+ suspend_on_busy_test(A,
+ "erlang:demonitor(M1)",
+ fun () -> erlang:demonitor(M1) end),
+ check_process_demonitor(self(), TP1, M1),
%% Check down message over busy port
- ?line TP2 = spawn(?MODULE, test_proc, []),
- ?line M2 = tp_call(TP1, fun () -> erlang:monitor(process, TP2) end),
- ?line check_process_monitor(TP1, TP2, M2),
- ?line Ref = make_ref(),
- ?line Busy = make_busy(A, 1000),
- ?line receive after 100 -> ok end,
- ?line tp_cast(TP2, fun () -> exit(Ref) end),
- ?line receive after 100 -> ok end,
- ?line unmake_busy(Busy),
- ?line Ref = tp_call(TP1, fun () ->
- receive
- {'DOWN', M2, process, TP2, Ref} ->
- Ref
- end
- end),
- ?line tp_cast(TP1, fun () -> exit(normal) end),
- ?line stop_node(A),
- ?line stop_busy_dist_port_tracer(Tracer),
- ?line ok.
-
-busy_dist_port_link(doc) -> ["Tests distributed link/1, unlink/1, and 'EXIT'",
- " message over busy distribution port"];
-busy_dist_port_link(suite) -> [];
+ TP2 = spawn(?MODULE, test_proc, []),
+ M2 = tp_call(TP1, fun () -> erlang:monitor(process, TP2) end),
+ check_process_monitor(TP1, TP2, M2),
+ Ref = make_ref(),
+ Busy = make_busy(A, 1000),
+ receive after 100 -> ok end,
+ tp_cast(TP2, fun () -> exit(Ref) end),
+ receive after 100 -> ok end,
+ unmake_busy(Busy),
+ Ref = tp_call(TP1, fun () ->
+ receive
+ {'DOWN', M2, process, TP2, Ref} ->
+ Ref
+ end
+ end),
+ tp_cast(TP1, fun () -> exit(normal) end),
+ stop_node(A),
+ stop_busy_dist_port_tracer(Tracer),
+ ok.
+
+%% Tests distributed link/1, unlink/1, and 'EXIT'
+%% message over busy distribution port
busy_dist_port_link(Config) when is_list(Config) ->
- ?line Tracer = case os:getenv("TRACE_BUSY_DIST_PORT") of
- "true" -> start_busy_dist_port_tracer();
- _ -> false
- end,
-
- ?line [An] = get_names(1, busy_dist_port_link),
- ?line {ok, A} = start_node(An),
- ?line TP1 = spawn(A, ?MODULE, test_proc, []),
+ Tracer = case os:getenv("TRACE_BUSY_DIST_PORT") of
+ "true" -> start_busy_dist_port_tracer();
+ _ -> false
+ end,
+
+ [An] = get_names(1, busy_dist_port_link),
+ {ok, A} = start_node(An),
+ TP1 = spawn(A, ?MODULE, test_proc, []),
%% Check link over busy port
- ?line suspend_on_busy_test(A,
- "link(TP1)",
- fun () -> link(TP1) end),
- ?line check_link(self(), TP1),
+ suspend_on_busy_test(A,
+ "link(TP1)",
+ fun () -> link(TP1) end),
+ check_link(self(), TP1),
%% Check unlink over busy port
- ?line suspend_on_busy_test(A,
- "unlink(TP1)",
- fun () -> unlink(TP1) end),
- ?line check_unlink(self(), TP1),
+ suspend_on_busy_test(A,
+ "unlink(TP1)",
+ fun () -> unlink(TP1) end),
+ check_unlink(self(), TP1),
%% Check trap exit message over busy port
- ?line TP2 = spawn(?MODULE, test_proc, []),
- ?line ok = tp_call(TP1, fun () ->
- process_flag(trap_exit, true),
- link(TP2),
- ok
- end),
- ?line check_link(TP1, TP2),
- ?line Ref = make_ref(),
- ?line Busy = make_busy(A, 1000),
- ?line receive after 100 -> ok end,
- ?line tp_cast(TP2, fun () -> exit(Ref) end),
- ?line receive after 100 -> ok end,
- ?line unmake_busy(Busy),
- ?line Ref = tp_call(TP1, fun () ->
- receive
- {'EXIT', TP2, Ref} ->
- Ref
- end
- end),
- ?line tp_cast(TP1, fun () -> exit(normal) end),
- ?line stop_node(A),
- ?line stop_busy_dist_port_tracer(Tracer),
- ?line ok.
-
-
-otp_5772_link(doc) -> [];
-otp_5772_link(suite) -> [];
+ TP2 = spawn(?MODULE, test_proc, []),
+ ok = tp_call(TP1, fun () ->
+ process_flag(trap_exit, true),
+ link(TP2),
+ ok
+ end),
+ check_link(TP1, TP2),
+ Ref = make_ref(),
+ Busy = make_busy(A, 1000),
+ receive after 100 -> ok end,
+ tp_cast(TP2, fun () -> exit(Ref) end),
+ receive after 100 -> ok end,
+ unmake_busy(Busy),
+ Ref = tp_call(TP1, fun () ->
+ receive
+ {'EXIT', TP2, Ref} ->
+ Ref
+ end
+ end),
+ tp_cast(TP1, fun () -> exit(normal) end),
+ stop_node(A),
+ stop_busy_dist_port_tracer(Tracer),
+ ok.
+
+
otp_5772_link(Config) when is_list(Config) ->
- ?line otp_5772_link_test(node()).
+ otp_5772_link_test(node()).
-otp_5772_dist_link(doc) -> [];
-otp_5772_dist_link(suite) -> [];
otp_5772_dist_link(Config) when is_list(Config) ->
- ?line [An] = get_names(1, otp_5772_dist_link),
- ?line {ok, A} = start_node(An),
- ?line otp_5772_link_test(A),
- ?line stop_node(A).
+ [An] = get_names(1, otp_5772_dist_link),
+ {ok, A} = start_node(An),
+ otp_5772_link_test(A),
+ stop_node(A).
otp_5772_link_test(Node) ->
- ?line Prio = process_flag(priority, high),
- ?line TE = process_flag(trap_exit, true),
- ?line TP1 = spawn_opt(Node, ?MODULE, test_proc, [],
- [link, {priority, low}]),
+ Prio = process_flag(priority, high),
+ TE = process_flag(trap_exit, true),
+ TP1 = spawn_opt(Node, ?MODULE, test_proc, [],
+ [link, {priority, low}]),
exit(TP1, bang),
unlink(TP1),
- ?line receive
- {'EXIT', TP1, _} ->
- ?line ok
- after 0 ->
- ?line ok
- end,
- ?line receive
- {'EXIT', TP1, _} = Exit ->
- ?line ?t:fail({got_late_exit_message, Exit})
- after 1000 ->
- ?line ok
- end,
- ?line process_flag(trap_exit, TE),
- ?line process_flag(priority, Prio),
- ?line ok.
-
-otp_5772_monitor(doc) -> [];
-otp_5772_monitor(suite) -> [];
+ receive
+ {'EXIT', TP1, _} ->
+ ok
+ after 0 ->
+ ok
+ end,
+ receive
+ {'EXIT', TP1, _} = Exit ->
+ ct:fail({got_late_exit_message, Exit})
+ after 1000 ->
+ ok
+ end,
+ process_flag(trap_exit, TE),
+ process_flag(priority, Prio),
+ ok.
+
otp_5772_monitor(Config) when is_list(Config) ->
- ?line otp_5772_monitor_test(node()).
+ otp_5772_monitor_test(node()).
-otp_5772_dist_monitor(doc) -> [];
-otp_5772_dist_monitor(suite) -> [];
otp_5772_dist_monitor(Config) when is_list(Config) ->
- ?line [An] = get_names(1, otp_5772_dist_monitor),
- ?line {ok, A} = start_node(An),
- ?line otp_5772_monitor_test(A),
- ?line stop_node(A),
- ?line ok.
+ [An] = get_names(1, otp_5772_dist_monitor),
+ {ok, A} = start_node(An),
+ otp_5772_monitor_test(A),
+ stop_node(A),
+ ok.
otp_5772_monitor_test(Node) ->
- ?line Prio = process_flag(priority, high),
- ?line TP1 = spawn_opt(Node, ?MODULE, test_proc, [], [{priority, low}]),
- ?line M1 = erlang:monitor(process, TP1),
- ?line exit(TP1, bang),
- ?line erlang:demonitor(M1),
- ?line receive
- {'DOWN', M1, _, _, _} ->
- ?line ok
- after 0 ->
- ?line ok
- end,
- ?line receive
- {'DOWN', M1, _, _, _} = Down ->
- ?line ?t:fail({got_late_down_message, Down})
- after 1000 ->
- ?line ok
- end,
- ?line process_flag(priority, Prio),
- ?line ok.
+ Prio = process_flag(priority, high),
+ TP1 = spawn_opt(Node, ?MODULE, test_proc, [], [{priority, low}]),
+ M1 = erlang:monitor(process, TP1),
+ exit(TP1, bang),
+ erlang:demonitor(M1),
+ receive
+ {'DOWN', M1, _, _, _} ->
+ ok
+ after 0 ->
+ ok
+ end,
+ receive
+ {'DOWN', M1, _, _, _} = Down ->
+ ct:fail({got_late_down_message, Down})
+ after 1000 ->
+ ok
+ end,
+ process_flag(priority, Prio),
+ ok.
otp_7946(Config) when is_list(Config) ->
- ?line [NodeName] = get_names(1, otp_7946),
- ?line {ok, Node} = start_node(NodeName),
- ?line Proc = rpc:call(Node, erlang, whereis, [net_kernel]),
- ?line Mon = erlang:monitor(process, Proc),
- ?line rpc:cast(Node, erlang, halt, []),
- ?line receive {'DOWN', Mon, process, Proc , _} -> ok end,
- ?line {Linker, LMon} = spawn_monitor(fun () ->
- link(Proc),
- receive
- after infinity -> ok
- end
- end),
- ?line receive
- {'DOWN', LMon, process, Linker, Reason} ->
- ?line ?t:format("Reason=~p~n", [Reason]),
- ?line Reason = noconnection
- end.
+ [NodeName] = get_names(1, otp_7946),
+ {ok, Node} = start_node(NodeName),
+ Proc = rpc:call(Node, erlang, whereis, [net_kernel]),
+ Mon = erlang:monitor(process, Proc),
+ rpc:cast(Node, erlang, halt, []),
+ receive {'DOWN', Mon, process, Proc , _} -> ok end,
+ {Linker, LMon} = spawn_monitor(fun () ->
+ link(Proc),
+ receive
+ after infinity -> ok
+ end
+ end),
+ receive
+ {'DOWN', LMon, process, Linker, Reason} ->
+ io:format("Reason=~p~n", [Reason]),
+ Reason = noconnection
+ end.
%%
%% -- Internal utils --------------------------------------------------------
@@ -519,27 +502,27 @@ otp_7946(Config) when is_list(Config) ->
busy_data() ->
case get(?BUSY_DATA_KEY) of
- undefined ->
- set_busy_data([]);
- Data ->
- true = is_binary(Data),
- true = size(Data) == ?BUSY_DATA_SIZE,
- Data
+ undefined ->
+ set_busy_data([]);
+ Data ->
+ true = is_binary(Data),
+ true = size(Data) == ?BUSY_DATA_SIZE,
+ Data
end.
set_busy_data(SetData) ->
case get(?BUSY_DATA_KEY) of
- undefined ->
- Data = case SetData of
- D when is_binary(D), size(D) == ?BUSY_DATA_SIZE ->
- SetData;
- _ ->
- list_to_binary(lists:duplicate(?BUSY_DATA_SIZE, 253))
- end,
- put(?BUSY_DATA_KEY, Data),
- Data;
- OldData ->
- OldData
+ undefined ->
+ Data = case SetData of
+ D when is_binary(D), size(D) == ?BUSY_DATA_SIZE ->
+ SetData;
+ _ ->
+ list_to_binary(lists:duplicate(?BUSY_DATA_SIZE, 253))
+ end,
+ put(?BUSY_DATA_KEY, Data),
+ Data;
+ OldData ->
+ OldData
end.
freeze_node(Node, MS) ->
@@ -547,13 +530,13 @@ freeze_node(Node, MS) ->
DoingIt = make_ref(),
Freezer = self(),
spawn_link(Node,
- fun () ->
- erts_debug:set_internal_state(available_internal_state,
- true),
- dport_send(Freezer, DoingIt),
- receive after Own -> ok end,
- erts_debug:set_internal_state(block, MS+Own)
- end),
+ fun () ->
+ erts_debug:set_internal_state(available_internal_state,
+ true),
+ dport_send(Freezer, DoingIt),
+ receive after Own -> ok end,
+ erts_debug:set_internal_state(block, MS+Own)
+ end),
receive DoingIt -> ok end,
receive after Own -> ok end.
@@ -563,27 +546,27 @@ make_busy(Node, Time) when is_integer(Time) ->
Data = busy_data(),
%% first make port busy
Pid = spawn_link(fun () ->
- forever(fun () ->
- dport_reg_send(Node,
- '__noone__',
- Data)
- end)
- end),
+ forever(fun () ->
+ dport_reg_send(Node,
+ '__noone__',
+ Data)
+ end)
+ end),
receive after Own -> ok end,
wait_until(fun () ->
- case process_info(Pid, status) of
- {status, suspended} -> true;
- _ -> false
- end
- end),
+ case process_info(Pid, status) of
+ {status, suspended} -> true;
+ _ -> false
+ end
+ end),
%% then dist entry
make_busy(Node, [nosuspend], Data),
Pid.
make_busy(Node, Opts, Data) ->
case erlang:send({'__noone__', Node}, Data, Opts) of
- nosuspend -> nosuspend;
- _ -> make_busy(Node, Opts, Data)
+ nosuspend -> nosuspend;
+ _ -> make_busy(Node, Opts, Data)
end.
unmake_busy(Pid) ->
@@ -596,33 +579,33 @@ suspend_on_busy_test(Node, Doing, Fun) ->
Done = make_ref(),
Data = busy_data(),
spawn_link(fun () ->
- set_busy_data(Data),
- Busy = make_busy(Node, 1000),
- Tester ! DoIt,
- receive after 100 -> ok end,
- Info = process_info(Tester, [status, current_function]),
- unmake_busy(Busy),
- ?t:format("~p doing ~s: ~p~n", [Tester, Doing, Info]),
- Tester ! {Done, Info}
- end),
+ set_busy_data(Data),
+ Busy = make_busy(Node, 1000),
+ Tester ! DoIt,
+ receive after 100 -> ok end,
+ Info = process_info(Tester, [status, current_function]),
+ unmake_busy(Busy),
+ io:format("~p doing ~s: ~p~n", [Tester, Doing, Info]),
+ Tester ! {Done, Info}
+ end),
receive DoIt -> ok end,
Res = Fun(),
receive
- {Done, MyInfo} ->
- %% Don't match arity; it is different in
- %% debug and optimized emulator
- [{status, suspended},
- {current_function, {erlang, bif_return_trap, _}}] = MyInfo,
- ok
+ {Done, MyInfo} ->
+ %% Don't match arity; it is different in
+ %% debug and optimized emulator
+ [{status, suspended},
+ {current_function, {erlang, bif_return_trap, _}}] = MyInfo,
+ ok
end,
Res.
% get_node(Name) when is_atom(Name) ->
-% ?line node();
+% node();
% get_node({Name, Node}) when is_atom(Name) ->
-% ?line Node;
+% Node;
% get_node(NC) when is_pid(NC); is_port(NC); is_reference(NC) ->
-% ?line node(NC).
+% node(NC).
get_down_object(Item, _) when is_pid(Item) ->
Item;
@@ -637,90 +620,78 @@ get_down_object(Item, Watcher) when is_atom(Item), is_atom(Watcher) ->
is_proc_dead(P) ->
case is_proc_alive(P) of
- true -> false;
- false -> true
+ true -> false;
+ false -> true
end.
is_proc_alive(Pid) when is_pid(Pid), node(Pid) == node() ->
- ?line is_process_alive(Pid);
+ is_process_alive(Pid);
is_proc_alive(Name) when is_atom(Name) ->
- ?line case catch whereis(Name) of
- Pid when is_pid(Pid) ->
- ?line is_proc_alive(Pid);
- _ ->
- ?line false
- end;
+ case catch whereis(Name) of
+ Pid when is_pid(Pid) ->
+ is_proc_alive(Pid);
+ _ ->
+ false
+ end;
is_proc_alive({Name, Node}) when is_atom(Name), Node == node() ->
- ?line is_proc_alive(Name);
+ is_proc_alive(Name);
is_proc_alive(Proc) ->
- ?line is_remote_proc_alive(Proc).
+ is_remote_proc_alive(Proc).
is_remote_proc_alive({Name, Node}) when is_atom(Name), is_atom(Node) ->
- ?line is_remote_proc_alive(Name, Node);
+ is_remote_proc_alive(Name, Node);
is_remote_proc_alive(Pid) when is_pid(Pid) ->
- ?line is_remote_proc_alive(Pid, node(Pid));
+ is_remote_proc_alive(Pid, node(Pid));
is_remote_proc_alive(_) ->
- ?line false.
+ false.
is_remote_proc_alive(PN, Node) ->
- ?line S = self(),
- ?line R = make_ref(),
- ?line monitor_node(Node, true),
- ?line _P = spawn(Node, fun () -> S ! {R, is_proc_alive(PN)} end),
- ?line receive
- {R, Bool} ->
- ?line monitor_node(Node, false),
- ?line Bool;
- {nodedown, Node} ->
- ?line false
- end.
+ S = self(),
+ R = make_ref(),
+ monitor_node(Node, true),
+ _P = spawn(Node, fun () -> S ! {R, is_proc_alive(PN)} end),
+ receive
+ {R, Bool} ->
+ monitor_node(Node, false),
+ Bool;
+ {nodedown, Node} ->
+ false
+ end.
wait_until(Fun) ->
- ?line case Fun() of
- true ->
- ?line ok;
- _ ->
- ?line receive
- after 100 ->
- ?line wait_until(Fun)
- end
- end.
+ case Fun() of
+ true ->
+ ok;
+ _ ->
+ receive
+ after 100 ->
+ wait_until(Fun)
+ end
+ end.
forever(Fun) ->
Fun(),
forever(Fun).
-init_per_testcase(Func, Config) when is_atom(Func), is_list(Config) ->
- ?line Dog = ?t:timetrap(?t:minutes(1)),
- case catch erts_debug:get_internal_state(available_internal_state) of
- true -> ok;
- _ -> erts_debug:set_internal_state(available_internal_state, true)
- end,
- ?line [{watchdog, Dog}|Config].
-
-end_per_testcase(_Func, Config) ->
- ?line Dog = ?config(watchdog, Config),
- ?line ?t:timetrap_cancel(Dog).
-
tp_call(Tp, Fun) ->
- ?line R = make_ref(),
- ?line Tp ! {call, self(), R, Fun},
- ?line receive
- {R, Res} ->
- ?line Res
- end.
+ R = make_ref(),
+ Tp ! {call, self(), R, Fun},
+ receive
+ {R, Res} ->
+ Res
+ end.
tp_cast(Tp, Fun) ->
- ?line Tp ! {cast, Fun}.
+ Tp ! {cast, Fun}.
test_proc() ->
- ?line receive
- {call, From, Ref, Fun} ->
- ?line From ! {Ref, Fun()};
- {cast, Fun} ->
- ?line Fun()
- end,
- ?line test_proc().
+ receive
+ {call, From, Ref, Fun} ->
+ From ! {Ref, Fun()};
+ {cast, Fun} ->
+ Fun()
+ end,
+ test_proc().
expand_link_list([#erl_link{type = ?LINK_NODE, targets = N} = Rec | T]) ->
lists:duplicate(N,Rec#erl_link{targets = []}) ++ expand_link_list(T);
@@ -728,7 +699,7 @@ expand_link_list([#erl_link{targets = [#erl_link{pid = Pid}]} = Rec | T]) ->
[Rec#erl_link{targets = [Pid]} | expand_link_list(T)];
expand_link_list([#erl_link{targets = [#erl_link{pid = Pid}|TT]} = Rec | T]) ->
[ Rec#erl_link{targets = [Pid]} | expand_link_list(
- [Rec#erl_link{targets = TT} | T])];
+ [Rec#erl_link{targets = TT} | T])];
expand_link_list([#erl_link{targets = []} = Rec | T]) ->
[Rec | expand_link_list(T)];
expand_link_list([]) ->
@@ -736,19 +707,19 @@ expand_link_list([]) ->
get_local_link_list(Obj) ->
case catch erts_debug:get_internal_state({link_list, Obj}) of
- LL when is_list(LL) ->
- expand_link_list(LL);
- _ ->
- []
+ LL when is_list(LL) ->
+ expand_link_list(LL);
+ _ ->
+ []
end.
get_remote_link_list(Node, Obj) ->
case catch rpc:call(Node, erts_debug, get_internal_state,
- [{link_list, Obj}]) of
- LL when is_list(LL) ->
- expand_link_list(LL);
- _ ->
- []
+ [{link_list, Obj}]) of
+ LL when is_list(LL) ->
+ expand_link_list(LL);
+ _ ->
+ []
end.
@@ -758,30 +729,30 @@ get_link_list({Node, DistEntry}) when is_atom(Node), is_atom(DistEntry) ->
get_remote_link_list(Node, DistEntry);
get_link_list(P) when is_pid(P); is_port(P) ->
case node(P) of
- Node when Node == node() ->
- get_local_link_list(P);
- Node ->
- get_remote_link_list(Node, P)
- end;
+ Node when Node == node() ->
+ get_local_link_list(P);
+ Node ->
+ get_remote_link_list(Node, P)
+ end;
get_link_list(undefined) ->
[].
get_local_monitor_list(Obj) ->
case catch erts_debug:get_internal_state({monitor_list, Obj}) of
- LL when is_list(LL) ->
- LL;
- _ ->
- []
- end.
+ LL when is_list(LL) ->
+ LL;
+ _ ->
+ []
+ end.
get_remote_monitor_list(Node, Obj) ->
case catch rpc:call(Node, erts_debug, get_internal_state,
- [{monitor_list, Obj}]) of
- LL when is_list(LL) ->
- LL;
- _ ->
- []
- end.
+ [{monitor_list, Obj}]) of
+ LL when is_list(LL) ->
+ LL;
+ _ ->
+ []
+ end.
get_monitor_list({Node, DistEntry}) when Node == node(), is_atom(DistEntry) ->
@@ -790,242 +761,242 @@ get_monitor_list({Node, DistEntry}) when is_atom(Node), is_atom(DistEntry) ->
get_remote_monitor_list(Node, DistEntry);
get_monitor_list(P) when is_pid(P) ->
case node(P) of
- Node when Node == node() ->
- get_local_monitor_list(P);
- Node ->
- get_remote_monitor_list(Node, P)
- end;
+ Node when Node == node() ->
+ get_local_monitor_list(P);
+ Node ->
+ get_remote_monitor_list(Node, P)
+ end;
get_monitor_list(undefined) ->
[].
find_erl_monitor(Pid, Ref) when is_reference(Ref) ->
lists:foldl(fun (#erl_monitor{ref = R} = EL, Acc) when R == Ref ->
- [EL|Acc];
- (_, Acc) ->
- Acc
- end,
- [],
- get_monitor_list(Pid)).
+ [EL|Acc];
+ (_, Acc) ->
+ Acc
+ end,
+ [],
+ get_monitor_list(Pid)).
% find_erl_link(Obj, Ref) when is_reference(Ref) ->
-% ?line lists:foldl(fun (#erl_link{ref = R} = EL, Acc) when R == Ref ->
-% ?line [EL|Acc];
+% lists:foldl(fun (#erl_link{ref = R} = EL, Acc) when R == Ref ->
+% [EL|Acc];
% (_, Acc) ->
-% ?line Acc
+% Acc
% end,
% [],
% get_link_list(Obj)).
find_erl_link(Obj, Type, [Item, Data]) when is_pid(Item);
- is_port(Item);
- is_atom(Item) ->
+ is_port(Item);
+ is_atom(Item) ->
lists:foldl(fun (#erl_link{type = T, pid = I, targets = D} = EL,
- Acc) when T == Type, I == Item ->
- case Data of
- D ->
- [EL|Acc];
- [] ->
- [EL|Acc];
- _ ->
- Acc
- end;
- (_, Acc) ->
- Acc
- end,
- [],
- get_link_list(Obj));
+ Acc) when T == Type, I == Item ->
+ case Data of
+ D ->
+ [EL|Acc];
+ [] ->
+ [EL|Acc];
+ _ ->
+ Acc
+ end;
+ (_, Acc) ->
+ Acc
+ end,
+ [],
+ get_link_list(Obj));
find_erl_link(Obj, Type, Item) when is_pid(Item); is_port(Item); is_atom(Item) ->
find_erl_link(Obj, Type, [Item, []]).
-
+
check_link(A, B) ->
- ?line [#erl_link{type = ?LINK_PID,
- pid = B,
- targets = []}] = find_erl_link(A, ?LINK_PID, B),
- ?line [#erl_link{type = ?LINK_PID,
- pid = A,
- targets = []}] = find_erl_link(B, ?LINK_PID, A),
- ?line case node(A) == node(B) of
- false ->
- ?line [#erl_link{type = ?LINK_PID,
- pid = A,
- targets = [B]}] = find_erl_link({node(A),
- node(B)},
- ?LINK_PID,
- [A, [B]]),
- ?line [#erl_link{type = ?LINK_PID,
- pid = B,
- targets = [A]}] = find_erl_link({node(B),
- node(A)},
- ?LINK_PID,
- [B, [A]]);
- true ->
- ?line [] = find_erl_link({node(A), node(B)},
- ?LINK_PID,
- [A, [B]]),
- ?line [] = find_erl_link({node(B), node(A)},
- ?LINK_PID,
- [B, [A]])
- end,
- ?line ok.
+ [#erl_link{type = ?LINK_PID,
+ pid = B,
+ targets = []}] = find_erl_link(A, ?LINK_PID, B),
+ [#erl_link{type = ?LINK_PID,
+ pid = A,
+ targets = []}] = find_erl_link(B, ?LINK_PID, A),
+ case node(A) == node(B) of
+ false ->
+ [#erl_link{type = ?LINK_PID,
+ pid = A,
+ targets = [B]}] = find_erl_link({node(A),
+ node(B)},
+ ?LINK_PID,
+ [A, [B]]),
+ [#erl_link{type = ?LINK_PID,
+ pid = B,
+ targets = [A]}] = find_erl_link({node(B),
+ node(A)},
+ ?LINK_PID,
+ [B, [A]]);
+ true ->
+ [] = find_erl_link({node(A), node(B)},
+ ?LINK_PID,
+ [A, [B]]),
+ [] = find_erl_link({node(B), node(A)},
+ ?LINK_PID,
+ [B, [A]])
+ end,
+ ok.
check_unlink(A, B) ->
- ?line [] = find_erl_link(A, ?LINK_PID, B),
- ?line [] = find_erl_link(B, ?LINK_PID, A),
- ?line [] = find_erl_link({node(A), node(B)}, ?LINK_PID, [A, [B]]),
- ?line [] = find_erl_link({node(B), node(A)}, ?LINK_PID, [B, [A]]),
- ?line ok.
+ [] = find_erl_link(A, ?LINK_PID, B),
+ [] = find_erl_link(B, ?LINK_PID, A),
+ [] = find_erl_link({node(A), node(B)}, ?LINK_PID, [A, [B]]),
+ [] = find_erl_link({node(B), node(A)}, ?LINK_PID, [B, [A]]),
+ ok.
check_process_monitor(From, {Name, Node}, Ref) when is_pid(From),
- is_atom(Name),
- Node == node(From),
- is_reference(Ref) ->
- ?line check_process_monitor(From, Name, Ref);
+ is_atom(Name),
+ Node == node(From),
+ is_reference(Ref) ->
+ check_process_monitor(From, Name, Ref);
check_process_monitor(From, {Name, Node}, Ref) when is_pid(From),
- is_atom(Name),
- is_atom(Node),
- is_reference(Ref) ->
- ?line MonitoredPid = rpc:call(Node, erlang, whereis, [Name]),
- ?line [#erl_monitor{type = ?MON_ORIGIN,
- ref = Ref,
- pid = Node,
- name = Name}] = find_erl_monitor(From, Ref),
- ?line [#erl_monitor{type = ?MON_TARGET,
- ref = Ref,
- pid = From,
- name = Name}] = find_erl_monitor({node(From), Node}, Ref),
- ?line [#erl_monitor{type = ?MON_ORIGIN,
- ref = Ref,
- pid = MonitoredPid,
- name = Name}] = find_erl_monitor({Node, node(From)}, Ref),
- ?line [#erl_monitor{type = ?MON_TARGET,
- ref = Ref,
- pid = From,
- name = Name}] = find_erl_monitor(MonitoredPid, Ref),
- ?line ok;
+ is_atom(Name),
+ is_atom(Node),
+ is_reference(Ref) ->
+ MonitoredPid = rpc:call(Node, erlang, whereis, [Name]),
+ [#erl_monitor{type = ?MON_ORIGIN,
+ ref = Ref,
+ pid = Node,
+ name = Name}] = find_erl_monitor(From, Ref),
+ [#erl_monitor{type = ?MON_TARGET,
+ ref = Ref,
+ pid = From,
+ name = Name}] = find_erl_monitor({node(From), Node}, Ref),
+ [#erl_monitor{type = ?MON_ORIGIN,
+ ref = Ref,
+ pid = MonitoredPid,
+ name = Name}] = find_erl_monitor({Node, node(From)}, Ref),
+ [#erl_monitor{type = ?MON_TARGET,
+ ref = Ref,
+ pid = From,
+ name = Name}] = find_erl_monitor(MonitoredPid, Ref),
+ ok;
check_process_monitor(From, Name, Ref) when is_pid(From),
- is_atom(Name),
- undefined /= Name,
- is_reference(Ref) ->
- ?line MonitoredPid = rpc:call(node(From), erlang, whereis, [Name]),
-
- ?line [#erl_monitor{type = ?MON_ORIGIN,
- ref = Ref,
- pid = MonitoredPid,
- name = Name}] = find_erl_monitor(From, Ref),
-
-
- ?line [#erl_monitor{type = ?MON_TARGET,
- ref = Ref,
- pid = From,
- name = Name}] = find_erl_monitor(MonitoredPid,Ref),
+ is_atom(Name),
+ undefined /= Name,
+ is_reference(Ref) ->
+ MonitoredPid = rpc:call(node(From), erlang, whereis, [Name]),
+
+ [#erl_monitor{type = ?MON_ORIGIN,
+ ref = Ref,
+ pid = MonitoredPid,
+ name = Name}] = find_erl_monitor(From, Ref),
+
+
+ [#erl_monitor{type = ?MON_TARGET,
+ ref = Ref,
+ pid = From,
+ name = Name}] = find_erl_monitor(MonitoredPid,Ref),
ok;
check_process_monitor(From, To, Ref) when is_pid(From),
- is_pid(To),
- is_reference(Ref) ->
- ?line OriMon = [#erl_monitor{type = ?MON_ORIGIN,
- ref = Ref,
- pid = To}],
-
- ?line OriMon = find_erl_monitor(From, Ref),
-
- ?line TargMon = [#erl_monitor{type = ?MON_TARGET,
- ref = Ref,
- pid = From}],
- ?line TargMon = find_erl_monitor(To, Ref),
-
-
- ?line case node(From) == node(To) of
- false ->
- ?line TargMon = find_erl_monitor({node(From), node(To)}, Ref),
- ?line OriMon = find_erl_monitor({node(To), node(From)}, Ref);
- true ->
- ?line [] = find_erl_monitor({node(From), node(From)}, Ref)
- end,
- ?line ok.
+ is_pid(To),
+ is_reference(Ref) ->
+ OriMon = [#erl_monitor{type = ?MON_ORIGIN,
+ ref = Ref,
+ pid = To}],
+
+ OriMon = find_erl_monitor(From, Ref),
+
+ TargMon = [#erl_monitor{type = ?MON_TARGET,
+ ref = Ref,
+ pid = From}],
+ TargMon = find_erl_monitor(To, Ref),
+
+
+ case node(From) == node(To) of
+ false ->
+ TargMon = find_erl_monitor({node(From), node(To)}, Ref),
+ OriMon = find_erl_monitor({node(To), node(From)}, Ref);
+ true ->
+ [] = find_erl_monitor({node(From), node(From)}, Ref)
+ end,
+ ok.
check_process_demonitor(From, {undefined, Node}, Ref) when is_pid(From),
- is_reference(Ref) ->
- ?line [] = find_erl_monitor(From, Ref),
- ?line case node(From) == Node of
- false ->
- ?line [] = find_erl_monitor({node(From), Node}, Ref),
- ?line [] = find_erl_monitor({Node, node(From)}, Ref);
- true ->
- ?line [] = find_erl_monitor({Node, Node}, Ref)
- end,
- ?line ok;
+ is_reference(Ref) ->
+ [] = find_erl_monitor(From, Ref),
+ case node(From) == Node of
+ false ->
+ [] = find_erl_monitor({node(From), Node}, Ref),
+ [] = find_erl_monitor({Node, node(From)}, Ref);
+ true ->
+ [] = find_erl_monitor({Node, Node}, Ref)
+ end,
+ ok;
check_process_demonitor(From, {Name, Node}, Ref) when is_pid(From),
- is_atom(Name),
- Node == node(From),
- is_reference(Ref) ->
- ?line MonitoredPid = rpc:call(Node, erlang, whereis, [Name]),
- ?line case rpc:call(Node, erlang, whereis, [Name]) of
- undefined ->
- ?line check_process_demonitor(From, {undefined, Node}, Ref);
- MonitoredPid ->
- ?line check_process_demonitor(From, MonitoredPid, Ref)
- end;
+ is_atom(Name),
+ Node == node(From),
+ is_reference(Ref) ->
+ MonitoredPid = rpc:call(Node, erlang, whereis, [Name]),
+ case rpc:call(Node, erlang, whereis, [Name]) of
+ undefined ->
+ check_process_demonitor(From, {undefined, Node}, Ref);
+ MonitoredPid ->
+ check_process_demonitor(From, MonitoredPid, Ref)
+ end;
check_process_demonitor(From, {Name, Node}, Ref) when is_pid(From),
- is_atom(Name),
- is_atom(Node),
- is_reference(Ref) ->
- ?line MonitoredPid = rpc:call(Node, erlang, whereis, [Name]),
- ?line [] = find_erl_monitor(From, Ref),
- ?line [] = find_erl_monitor({node(From), Node}, Ref),
- ?line [] = find_erl_monitor({Node, node(From)}, Ref),
- ?line [] = find_erl_monitor(MonitoredPid, Ref),
- ?line ok;
+ is_atom(Name),
+ is_atom(Node),
+ is_reference(Ref) ->
+ MonitoredPid = rpc:call(Node, erlang, whereis, [Name]),
+ [] = find_erl_monitor(From, Ref),
+ [] = find_erl_monitor({node(From), Node}, Ref),
+ [] = find_erl_monitor({Node, node(From)}, Ref),
+ [] = find_erl_monitor(MonitoredPid, Ref),
+ ok;
check_process_demonitor(From, undefined, Ref) when is_pid(From),
- is_reference(Ref) ->
- ?line [] = find_erl_monitor(From, Ref),
- ?line case node(From) == node() of
- false ->
- ?line [] = find_erl_monitor({node(From), node()}, Ref),
- ?line [] = find_erl_monitor({node(), node(From)}, Ref);
- true ->
- ?line [] = find_erl_monitor({node(), node()}, Ref)
- end,
- ?line ok;
+ is_reference(Ref) ->
+ [] = find_erl_monitor(From, Ref),
+ case node(From) == node() of
+ false ->
+ [] = find_erl_monitor({node(From), node()}, Ref),
+ [] = find_erl_monitor({node(), node(From)}, Ref);
+ true ->
+ [] = find_erl_monitor({node(), node()}, Ref)
+ end,
+ ok;
check_process_demonitor(From, Name, Ref) when is_pid(From),
- is_atom(Name),
- undefined /= Name,
- is_reference(Ref) ->
- ?line check_process_demonitor(From, {Name, node()}, Ref);
+ is_atom(Name),
+ undefined /= Name,
+ is_reference(Ref) ->
+ check_process_demonitor(From, {Name, node()}, Ref);
check_process_demonitor(From, To, Ref) when is_pid(From),
- is_pid(To),
- is_reference(Ref) ->
- ?line [] = find_erl_monitor(From, Ref),
- ?line [] = find_erl_monitor(To, Ref),
- ?line case node(From) == node(To) of
- false ->
- ?line [] = find_erl_monitor({node(From), node(To)}, Ref),
- ?line [] = find_erl_monitor({node(To), node(From)}, Ref);
- true ->
- ?line [] = find_erl_monitor({node(From), node(From)}, Ref)
- end,
- ?line ok.
+ is_pid(To),
+ is_reference(Ref) ->
+ [] = find_erl_monitor(From, Ref),
+ [] = find_erl_monitor(To, Ref),
+ case node(From) == node(To) of
+ false ->
+ [] = find_erl_monitor({node(From), node(To)}, Ref),
+ [] = find_erl_monitor({node(To), node(From)}, Ref);
+ true ->
+ [] = find_erl_monitor({node(From), node(From)}, Ref)
+ end,
+ ok.
no_of_monitor_node(From, Node) when is_pid(From), is_atom(Node) ->
- ?line length(find_erl_link(From, ?LINK_NODE, Node)).
+ length(find_erl_link(From, ?LINK_NODE, Node)).
check_monitor_node(From, Node, No) when is_pid(From),
- is_atom(Node),
- is_integer(No),
- No >= 0 ->
- ?line LL = lists:duplicate(No, #erl_link{type = ?LINK_NODE, pid = Node}),
- ?line DLL = lists:duplicate(No, #erl_link{type = ?LINK_NODE, pid = From}),
- ?line LL = find_erl_link(From, ?LINK_NODE, Node),
- ?line DLL = find_erl_link({node(From), Node}, ?LINK_NODE, From),
- ?line ok.
+ is_atom(Node),
+ is_integer(No),
+ No >= 0 ->
+ LL = lists:duplicate(No, #erl_link{type = ?LINK_NODE, pid = Node}),
+ DLL = lists:duplicate(No, #erl_link{type = ?LINK_NODE, pid = From}),
+ LL = find_erl_link(From, ?LINK_NODE, Node),
+ DLL = find_erl_link({node(From), Node}, ?LINK_NODE, From),
+ ok.
hostname() ->
- ?line from($@, atom_to_list(node())).
+ from($@, atom_to_list(node())).
from(H, [H | T]) -> T;
from(H, [_ | T]) -> from(H, T);
@@ -1037,27 +1008,27 @@ get_names(0, _, Acc) ->
Acc;
get_names(N, T, Acc) ->
get_names(N-1, T, [list_to_atom(atom_to_list(?MODULE)
- ++ "-"
- ++ atom_to_list(T)
- ++ "-"
- ++ integer_to_list(erlang:system_time(seconds))
- ++ "-"
- ++ integer_to_list(erlang:unique_integer([positive]))) | Acc]).
+ ++ "-"
+ ++ atom_to_list(T)
+ ++ "-"
+ ++ integer_to_list(erlang:system_time(seconds))
+ ++ "-"
+ ++ integer_to_list(erlang:unique_integer([positive]))) | Acc]).
start_node(Name) ->
- ?line start_node(Name, "").
+ start_node(Name, "").
start_node(Name, Args) ->
- ?line Pa = filename:dirname(code:which(?MODULE)),
- ?line Res = ?t:start_node(Name, slave, [{args, Args ++ " -pa " ++ Pa}]),
- ?line {ok, Node} = Res,
- ?line rpc:call(Node, erts_debug, set_internal_state,
- [available_internal_state, true]),
- ?line Res.
-
+ Pa = filename:dirname(code:which(?MODULE)),
+ Res = test_server:start_node(Name, slave, [{args, Args ++ " -pa " ++ Pa}]),
+ {ok, Node} = Res,
+ rpc:call(Node, erts_debug, set_internal_state,
+ [available_internal_state, true]),
+ Res.
+
stop_node(Node) ->
- ?line ?t:stop_node(Node).
+ test_server:stop_node(Node).
-define(COOKIE, '').
-define(DOP_LINK, 1).
@@ -1080,37 +1051,37 @@ stop_node(Node) ->
dport_send(To, Msg) ->
Node = node(To),
DPrt = case dport(Node) of
- undefined ->
- pong = net_adm:ping(Node),
- dport(Node);
- Prt ->
- Prt
- end,
+ undefined ->
+ pong = net_adm:ping(Node),
+ dport(Node);
+ Prt ->
+ Prt
+ end,
port_command(DPrt, [dmsg_hdr(),
- dmsg_ext({?DOP_SEND,
- ?COOKIE,
- To}),
- dmsg_ext(Msg)]).
+ dmsg_ext({?DOP_SEND,
+ ?COOKIE,
+ To}),
+ dmsg_ext(Msg)]).
dport_reg_send(Node, Name, Msg) ->
DPrt = case dport(Node) of
- undefined ->
- pong = net_adm:ping(Node),
- dport(Node);
- Prt ->
- Prt
- end,
+ undefined ->
+ pong = net_adm:ping(Node),
+ dport(Node);
+ Prt ->
+ Prt
+ end,
port_command(DPrt, [dmsg_hdr(),
- dmsg_ext({?DOP_REG_SEND,
- self(),
- ?COOKIE,
- Name}),
- dmsg_ext(Msg)]).
+ dmsg_ext({?DOP_REG_SEND,
+ self(),
+ ?COOKIE,
+ Name}),
+ dmsg_ext(Msg)]).
dport(Node) when is_atom(Node) ->
case catch erts_debug:get_internal_state(available_internal_state) of
- true -> true;
- _ -> erts_debug:set_internal_state(available_internal_state, true)
+ true -> true;
+ _ -> erts_debug:set_internal_state(available_internal_state, true)
end,
erts_debug:get_internal_state({dist_port, Node}).
@@ -1136,11 +1107,7 @@ stop_busy_dist_port_tracer(_) ->
busy_dist_port_tracer() ->
receive
- {monitor, _SuspendedProcess, busy_dist_port, _Port} = M ->
- erlang:display(M),
- busy_dist_port_tracer()
+ {monitor, _SuspendedProcess, busy_dist_port, _Port} = M ->
+ erlang:display(M),
+ busy_dist_port_tracer()
end.
-
-
-
-
diff --git a/erts/emulator/test/erts_debug_SUITE.erl b/erts/emulator/test/erts_debug_SUITE.erl
index 440a7950a6..23871585f7 100644
--- a/erts/emulator/test/erts_debug_SUITE.erl
+++ b/erts/emulator/test/erts_debug_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.
@@ -21,41 +21,17 @@
-module(erts_debug_SUITE).
-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,
test_size/1,flat_size_big/1,df/1,term_type/1,
instructions/1]).
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap, {minutes, 2}}].
all() ->
[test_size, flat_size_big, df, instructions, term_type].
-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(Func, Config) when is_atom(Func), is_list(Config) ->
- Dog=?t:timetrap(?t:minutes(2)),
- [{watchdog, Dog}|Config].
-
-end_per_testcase(_Func, Config) ->
- Dog=?config(watchdog, Config),
- ?t:timetrap_cancel(Dog).
-
test_size(Config) when is_list(Config) ->
ConsCell1 = id([a|b]),
ConsCell2 = id(ConsCell1),
@@ -181,7 +157,7 @@ term_type(Config) when is_list(Config) ->
df(Config) when is_list(Config) ->
P0 = pps(),
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
ok = file:set_cwd(PrivDir),
AllLoaded = [M || {M,_} <- code:all_loaded()],
diff --git a/erts/emulator/test/estone_SUITE.erl b/erts/emulator/test/estone_SUITE.erl
index 7be55eca8d..1180a45585 100644
--- a/erts/emulator/test/estone_SUITE.erl
+++ b/erts/emulator/test/estone_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.
@@ -19,9 +19,8 @@
-module(estone_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,estone/1,estone_bench/1]).
--export([init_per_testcase/2, end_per_testcase/2]).
+-export([all/0, suite/0, groups/0,
+ estone/1, estone_bench/1]).
%% Internal exports for EStone tests
-export([lists/1,
@@ -49,9 +48,6 @@
-include_lib("common_test/include/ct.hrl").
-include_lib("common_test/include/ct_event.hrl").
-%% Test suite defines
--define(default_timeout, ?t:minutes(10)).
-
%% EStone defines
-define(TOTAL, (3000 * 1000 * 100)). %% 300 secs
-define(BIGPROCS, 2).
@@ -66,17 +62,9 @@
str}). %% Header string
-
-
-init_per_testcase(_Case, Config) ->
- ?line 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, 4}}].
all() ->
[estone].
@@ -84,34 +72,18 @@ all() ->
groups() ->
[{estone_bench, [{repeat,50}],[estone_bench]}].
-init_per_suite(Config) ->
- Config.
-
-end_per_suite(_Config) ->
- ok.
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
-
-
-estone(suite) ->
- [];
-estone(doc) ->
- ["EStone Test"];
+%% EStone Test
estone(Config) when is_list(Config) ->
- ?line DataDir = ?config(data_dir,Config),
- ?line Mhz=get_cpu_speed(os:type(),DataDir),
- ?line L = ?MODULE:macro(?MODULE:micros(),DataDir),
- ?line {Total, Stones} = sum_micros(L, 0, 0),
- ?line pp(Mhz,Total,Stones,L),
- ?line {comment,Mhz ++ " MHz, " ++
- integer_to_list(Stones) ++ " ESTONES"}.
+ DataDir = proplists:get_value(data_dir,Config),
+ Mhz=get_cpu_speed(os:type(),DataDir),
+ L = ?MODULE:macro(?MODULE:micros(),DataDir),
+ {Total, Stones} = sum_micros(L, 0, 0),
+ pp(Mhz,Total,Stones,L),
+ {comment,Mhz ++ " MHz, " ++ integer_to_list(Stones) ++ " ESTONES"}.
estone_bench(Config) ->
- DataDir = ?config(data_dir,Config),
+ DataDir = proplists:get_value(data_dir,Config),
L = ?MODULE:macro(?MODULE:micros(),DataDir),
[ct_event:notify(
#event{name = benchmark_data,
@@ -382,11 +354,11 @@ apply_micro(M) ->
{weight_percentage, M#micro.weight},
{loops, M#micro.loops},
{microsecs,MicroSecs},
- {estones, (M#micro.weight * M#micro.weight * ?STONEFACTOR) div MicroSecs},
+ {estones, (M#micro.weight * M#micro.weight * ?STONEFACTOR) div max(1,MicroSecs)},
{gcs, GC1 - GC0},
{kilo_word_reclaimed, (Words1 - Words0) div 1000},
{kilo_reductions, Reds div 1000},
- {gc_intensity, gci(Elapsed, GC1 - GC0, Words1 - Words0)}].
+ {gc_intensity, gci(max(1,Elapsed), GC1 - GC0, Words1 - Words0)}].
monotonic_time() ->
try erlang:monotonic_time() catch error:undef -> erlang:now() end.
@@ -1136,4 +1108,3 @@ wait_for_pids([P|Tail]) ->
send_procs([P|Tail], Msg) -> P ! Msg, send_procs(Tail, Msg);
send_procs([], _) -> ok.
-
diff --git a/erts/emulator/test/evil_SUITE.erl b/erts/emulator/test/evil_SUITE.erl
index 77ee2128b6..9416ac7a02 100644
--- a/erts/emulator/test/evil_SUITE.erl
+++ b/erts/emulator/test/evil_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.
@@ -19,23 +19,22 @@
-module(evil_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,
- heap_frag/1,
- encode_decode_ext/1,
- decode_integer_ext/1,
- decode_small_big_ext/1,
- decode_large_big_ext/1,
- decode_small_big_ext_neg/1,
- decode_large_big_ext_neg/1,
- decode_too_small/1,
- decode_pos_neg_zero/1
- ]).
+-export([all/0, suite/0,
+ heap_frag/1,
+ encode_decode_ext/1,
+ decode_integer_ext/1,
+ decode_small_big_ext/1,
+ decode_large_big_ext/1,
+ decode_small_big_ext_neg/1,
+ decode_large_big_ext_neg/1,
+ decode_too_small/1,
+ decode_pos_neg_zero/1]).
-include_lib("common_test/include/ct.hrl").
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap, {seconds, 30}}].
all() ->
[heap_frag, encode_decode_ext, decode_integer_ext,
@@ -43,41 +42,16 @@ all() ->
decode_small_big_ext_neg, decode_large_big_ext_neg,
decode_too_small, decode_pos_neg_zero].
-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(?t:minutes(0.5)),
- [{watchdog, Dog}|Config].
-
-end_per_testcase(_Case, Config) ->
- Dog=?config(watchdog, Config),
- test_server:timetrap_cancel(Dog),
- ok.
-
heap_frag(Config) when is_list(Config) ->
N = 512,
Self = self(),
- ?line Pid = spawn_link(fun() -> appender(Self, N) end),
+ Pid = spawn_link(fun() -> appender(Self, N) end),
receive
- {Pid,Res} ->
- ?line Res = my_appender(N);
- Garbage ->
- io:format("Garbage: ~p\n", [Garbage]),
- ?line ?t:fail(got_garbage)
+ {Pid,Res} ->
+ Res = my_appender(N);
+ Garbage ->
+ io:format("Garbage: ~p\n", [Garbage]),
+ ct:fail(got_garbage)
end.
@@ -87,29 +61,28 @@ heap_frag(Config) when is_list(Config) ->
%% These test cases are not "evil" but the next test case is....
encode_decode_ext(Config) when is_list(Config) ->
- ?line enc_dec( 2, 0), % SMALL_INTEGER_EXT smallest
- ?line enc_dec( 2, 255), % SMALL_INTEGER_EXT largest
- ?line enc_dec( 5, 256), % INTEGER_EXT smallest pos (*)
- ?line enc_dec( 5, -1), % INTEGER_EXT largest neg
-
- ?line enc_dec( 5, 16#07ffffff), % INTEGER_EXT largest (28 bits)
- ?line enc_dec( 5,-16#08000000), % INTEGER_EXT smallest
- ?line enc_dec( 7, 16#08000000), % SMALL_BIG_EXT smallest pos(*)
- ?line enc_dec( 7,-16#08000001), % SMALL_BIG_EXT largest neg (*)
-
- ?line enc_dec( 7, 16#7fffffff), % SMALL_BIG_EXT largest i32
- ?line enc_dec( 7,-16#80000000), % SMALL_BIG_EXT smallest i32
-
- ?line enc_dec( 7, 16#80000000), % SMALL_BIG_EXT u32
- ?line enc_dec( 7, 16#ffffffff), % SMALL_BIG_EXT largest u32
-
- ?line enc_dec( 9, 16#7fffffffffff), % largest i48
- ?line enc_dec( 9,-16#800000000000), % smallest i48
- ?line enc_dec( 9, 16#ffffffffffff), % largest u48
- ?line enc_dec(11, 16#7fffffffffffffff), % largest i64
- ?line enc_dec(11,-16#8000000000000000), % smallest i64
- ?line enc_dec(11, 16#ffffffffffffffff), % largest u64
-
+ enc_dec( 2, 0), % SMALL_INTEGER_EXT smallest
+ enc_dec( 2, 255), % SMALL_INTEGER_EXT largest
+ enc_dec( 5, 256), % INTEGER_EXT smallest pos (*)
+ enc_dec( 5, -1), % INTEGER_EXT largest neg
+
+ enc_dec( 5, 16#07ffffff), % INTEGER_EXT largest (28 bits)
+ enc_dec( 5,-16#08000000), % INTEGER_EXT smallest
+ enc_dec( 7, 16#08000000), % SMALL_BIG_EXT smallest pos(*)
+ enc_dec( 7,-16#08000001), % SMALL_BIG_EXT largest neg (*)
+
+ enc_dec( 7, 16#7fffffff), % SMALL_BIG_EXT largest i32
+ enc_dec( 7,-16#80000000), % SMALL_BIG_EXT smallest i32
+
+ enc_dec( 7, 16#80000000), % SMALL_BIG_EXT u32
+ enc_dec( 7, 16#ffffffff), % SMALL_BIG_EXT largest u32
+
+ enc_dec( 9, 16#7fffffffffff), % largest i48
+ enc_dec( 9,-16#800000000000), % smallest i48
+ enc_dec( 9, 16#ffffffffffff), % largest u48
+ enc_dec(11, 16#7fffffffffffffff), % largest i64
+ enc_dec(11,-16#8000000000000000), % smallest i64
+ enc_dec(11, 16#ffffffffffffffff), % largest u64
ok.
@@ -125,213 +98,213 @@ encode_decode_ext(Config) when is_list(Config) ->
%% erl_interface, i.e. not how it is encoded in the test case below.
decode_integer_ext(Config) when is_list(Config) ->
- ?line decode( 0, <<131,98, 0:32>>), % SMALL_INTEGER_EXT
- ?line decode( 42, <<131,98, 42:32>>), % SMALL_INTEGER_EXT
- ?line decode(255, <<131,98,255:32>>), % SMALL_INTEGER_EXT
- ?line decode( 16#08000000, <<131,98, 16#08000000:32>>), % SMALL_BIG_EXT
- ?line decode(-16#08000001, <<131,98,-16#08000001:32>>), % SMALL_BIG_EXT
- ?line decode( 16#7fffffff, <<131,98, 16#7fffffff:32>>), % SMALL_BIG_EXT
- ?line decode(-16#80000000, <<131,98,-16#80000000:32>>), % SMALL_BIG_EXT
+ decode( 0, <<131,98, 0:32>>), % SMALL_INTEGER_EXT
+ decode( 42, <<131,98, 42:32>>), % SMALL_INTEGER_EXT
+ decode(255, <<131,98,255:32>>), % SMALL_INTEGER_EXT
+ decode( 16#08000000, <<131,98, 16#08000000:32>>), % SMALL_BIG_EXT
+ decode(-16#08000001, <<131,98,-16#08000001:32>>), % SMALL_BIG_EXT
+ decode( 16#7fffffff, <<131,98, 16#7fffffff:32>>), % SMALL_BIG_EXT
+ decode(-16#80000000, <<131,98,-16#80000000:32>>), % SMALL_BIG_EXT
ok.
decode_small_big_ext(Config) when is_list(Config) ->
- ?line decode(256,<<131,110,2,0,0,1>>), % INTEGER_EXT
- ?line decode(16#07ffffff,<<131,110,4,0,255,255,255,7>>), % INTEGER_EXT
- ?line decode(16#7fffffff,<<131,110,4,0,255,255,255,127>>), % SMALL_BIG_EXT
-
- ?line decode(42,<<131,110,1,0,42>>), % SMALL_INTEGER_EXT
- ?line decode(42,<<131,110,2,0,42,0>>), % Redundant zeros from now on
- ?line decode(42,<<131,110,3,0,42,0,0>>),
- ?line decode(42,<<131,110,4,0,42,0,0,0>>),
- ?line decode(42,<<131,110,5,0,42,0,0,0,0>>),
- ?line decode(42,<<131,110,6,0,42,0,0,0,0,0>>),
- ?line decode(42,<<131,110,7,0,42,0,0,0,0,0,0>>),
- ?line decode(42,<<131,110,8,0,42,0,0,0,0,0,0,0>>),
+ decode(256,<<131,110,2,0,0,1>>), % INTEGER_EXT
+ decode(16#07ffffff,<<131,110,4,0,255,255,255,7>>), % INTEGER_EXT
+ decode(16#7fffffff,<<131,110,4,0,255,255,255,127>>), % SMALL_BIG_EXT
+
+ decode(42,<<131,110,1,0,42>>), % SMALL_INTEGER_EXT
+ decode(42,<<131,110,2,0,42,0>>), % Redundant zeros from now on
+ decode(42,<<131,110,3,0,42,0,0>>),
+ decode(42,<<131,110,4,0,42,0,0,0>>),
+ decode(42,<<131,110,5,0,42,0,0,0,0>>),
+ decode(42,<<131,110,6,0,42,0,0,0,0,0>>),
+ decode(42,<<131,110,7,0,42,0,0,0,0,0,0>>),
+ decode(42,<<131,110,8,0,42,0,0,0,0,0,0,0>>),
ok.
decode_large_big_ext(Config) when is_list(Config) ->
- ?line decode(256,<<131,111,2:32,0,0,1>>), % INTEGER_EXT
- ?line decode(16#07ffffff,<<131,111,4:32,0,255,255,255,7>>), % INTEG_EXT
- ?line decode(16#7fffffff,<<131,111,4:32,0,255,255,255,127>>), % SMA_BIG
- ?line decode(16#ffffffff,<<131,111,4:32,0,255,255,255,255>>), % SMA_BIG
+ decode(256,<<131,111,2:32,0,0,1>>), % INTEGER_EXT
+ decode(16#07ffffff,<<131,111,4:32,0,255,255,255,7>>), % INTEG_EXT
+ decode(16#7fffffff,<<131,111,4:32,0,255,255,255,127>>), % SMA_BIG
+ decode(16#ffffffff,<<131,111,4:32,0,255,255,255,255>>), % SMA_BIG
N = largest_small_big(),
- ?line decode(N,<<131,111,255:32,0,N:2040/little>>), % SMALL_BIG_EXT
-
- ?line decode(42,<<131,111,1:32,0,42>>),
- ?line decode(42,<<131,111,2:32,0,42,0>>), % Redundant zeros from now on
- ?line decode(42,<<131,111,3:32,0,42,0,0>>),
- ?line decode(42,<<131,111,4:32,0,42,0,0,0>>),
- ?line decode(42,<<131,111,5:32,0,42,0,0,0,0>>),
- ?line decode(42,<<131,111,6:32,0,42,0,0,0,0,0>>),
- ?line decode(42,<<131,111,7:32,0,42,0,0,0,0,0,0>>),
- ?line decode(42,<<131,111,8:32,0,42,0,0,0,0,0,0,0>>),
+ decode(N,<<131,111,255:32,0,N:2040/little>>), % SMALL_BIG_EXT
+
+ decode(42,<<131,111,1:32,0,42>>),
+ decode(42,<<131,111,2:32,0,42,0>>), % Redundant zeros from now on
+ decode(42,<<131,111,3:32,0,42,0,0>>),
+ decode(42,<<131,111,4:32,0,42,0,0,0>>),
+ decode(42,<<131,111,5:32,0,42,0,0,0,0>>),
+ decode(42,<<131,111,6:32,0,42,0,0,0,0,0>>),
+ decode(42,<<131,111,7:32,0,42,0,0,0,0,0,0>>),
+ decode(42,<<131,111,8:32,0,42,0,0,0,0,0,0,0>>),
ok.
decode_small_big_ext_neg(Config) when is_list(Config) ->
- ?line decode(-1,<<131,110,1,1,1>>), % INTEGER_EXT
- ?line decode(-16#08000000,<<131,110,4,1,0,0,0,8>>), % INTEGER_EXT
- ?line decode(-16#80000000,<<131,110,4,1,0,0,0,128>>), % SMALL_BIG_EXT
- ?line decode(-16#ffffffff,<<131,110,4,1,255,255,255,255>>), % SMALL_BIG_EXT
+ decode(-1,<<131,110,1,1,1>>), % INTEGER_EXT
+ decode(-16#08000000,<<131,110,4,1,0,0,0,8>>), % INTEGER_EXT
+ decode(-16#80000000,<<131,110,4,1,0,0,0,128>>), % SMALL_BIG_EXT
+ decode(-16#ffffffff,<<131,110,4,1,255,255,255,255>>), % SMALL_BIG_EXT
N = largest_small_big(),
- ?line decode(-N,<<131,111,255:32,1,N:2040/little>>), % SMALL_BIG_EXT
-
- ?line decode(-42,<<131,110,1,1,42>>),
- ?line decode(-42,<<131,110,2,1,42,0>>), % Redundant zeros from now on
- ?line decode(-42,<<131,110,3,1,42,0,0>>),
- ?line decode(-42,<<131,110,4,1,42,0,0,0>>),
- ?line decode(-42,<<131,110,5,1,42,0,0,0,0>>),
- ?line decode(-42,<<131,110,6,1,42,0,0,0,0,0>>),
- ?line decode(-42,<<131,110,7,1,42,0,0,0,0,0,0>>),
- ?line decode(-42,<<131,110,8,1,42,0,0,0,0,0,0,0>>),
+ decode(-N,<<131,111,255:32,1,N:2040/little>>), % SMALL_BIG_EXT
+
+ decode(-42,<<131,110,1,1,42>>),
+ decode(-42,<<131,110,2,1,42,0>>), % Redundant zeros from now on
+ decode(-42,<<131,110,3,1,42,0,0>>),
+ decode(-42,<<131,110,4,1,42,0,0,0>>),
+ decode(-42,<<131,110,5,1,42,0,0,0,0>>),
+ decode(-42,<<131,110,6,1,42,0,0,0,0,0>>),
+ decode(-42,<<131,110,7,1,42,0,0,0,0,0,0>>),
+ decode(-42,<<131,110,8,1,42,0,0,0,0,0,0,0>>),
ok.
decode_large_big_ext_neg(Config) when is_list(Config) ->
- ?line decode(-1,<<131,111,1:32,1,1>>), % INTEGER_EXT
- ?line decode(-16#08000000,<<131,111,4:32,1,0,0,0,8>>), % INTEGER_EXT
- ?line decode(-16#80000000,<<131,111,4:32,1,0,0,0,128>>), % SMALL_BIG_EXT
-
- ?line decode(-42,<<131,111,1:32,1,42>>),
- ?line decode(-42,<<131,111,2:32,1,42,0>>), % Redundant zeros from now on
- ?line decode(-42,<<131,111,3:32,1,42,0,0>>),
- ?line decode(-42,<<131,111,4:32,1,42,0,0,0>>),
- ?line decode(-42,<<131,111,5:32,1,42,0,0,0,0>>),
- ?line decode(-42,<<131,111,6:32,1,42,0,0,0,0,0>>),
- ?line decode(-42,<<131,111,7:32,1,42,0,0,0,0,0,0>>),
- ?line decode(-42,<<131,111,8:32,1,42,0,0,0,0,0,0,0>>),
+ decode(-1,<<131,111,1:32,1,1>>), % INTEGER_EXT
+ decode(-16#08000000,<<131,111,4:32,1,0,0,0,8>>), % INTEGER_EXT
+ decode(-16#80000000,<<131,111,4:32,1,0,0,0,128>>), % SMALL_BIG_EXT
+
+ decode(-42,<<131,111,1:32,1,42>>),
+ decode(-42,<<131,111,2:32,1,42,0>>), % Redundant zeros from now on
+ decode(-42,<<131,111,3:32,1,42,0,0>>),
+ decode(-42,<<131,111,4:32,1,42,0,0,0>>),
+ decode(-42,<<131,111,5:32,1,42,0,0,0,0>>),
+ decode(-42,<<131,111,6:32,1,42,0,0,0,0,0>>),
+ decode(-42,<<131,111,7:32,1,42,0,0,0,0,0,0>>),
+ decode(-42,<<131,111,8:32,1,42,0,0,0,0,0,0,0>>),
ok.
decode_pos_neg_zero(Config) when is_list(Config) ->
- ?line decode( 0, <<131,110,0,0>>), % SMALL_BIG_EXT (positive zero)
- ?line decode( 0, <<131,110,1,0,0>>), % SMALL_BIG_EXT (positive zero)
- ?line decode( 0, <<131,110,0,1>>), % SMALL_BIG_EXT (negative zero)
- ?line decode( 0, <<131,110,1,1,0>>), % SMALL_BIG_EXT (negative zero)
+ decode( 0, <<131,110,0,0>>), % SMALL_BIG_EXT (positive zero)
+ decode( 0, <<131,110,1,0,0>>), % SMALL_BIG_EXT (positive zero)
+ decode( 0, <<131,110,0,1>>), % SMALL_BIG_EXT (negative zero)
+ decode( 0, <<131,110,1,1,0>>), % SMALL_BIG_EXT (negative zero)
- ?line decode( 0, <<131,111,0:32,0>>), % SMALL_BIG_EXT (positive zero)
- ?line decode( 0, <<131,111,1:32,0,0>>), % SMALL_BIG_EXT (positive zero)
- ?line decode( 0, <<131,111,0:32,1>>), % SMALL_BIG_EXT (negative zero)
- ?line decode( 0, <<131,111,1:32,1,0>>), % SMALL_BIG_EXT (negative zero)
+ decode( 0, <<131,111,0:32,0>>), % SMALL_BIG_EXT (positive zero)
+ decode( 0, <<131,111,1:32,0,0>>), % SMALL_BIG_EXT (positive zero)
+ decode( 0, <<131,111,0:32,1>>), % SMALL_BIG_EXT (negative zero)
+ decode( 0, <<131,111,1:32,1,0>>), % SMALL_BIG_EXT (negative zero)
N = largest_small_big(),
- ?line decode( N,<<131,110,255,0,N:2040/little>>), % largest SMALL_BIG_EXT
- ?line decode(-N,<<131,110,255,1,N:2040/little>>), % largest SMALL_BIG_EXT
+ decode( N,<<131,110,255,0,N:2040/little>>), % largest SMALL_BIG_EXT
+ decode(-N,<<131,110,255,1,N:2040/little>>), % largest SMALL_BIG_EXT
ok.
%% Test to decode uncompleted encodings for all in "erl_ext_dist.txt"
decode_too_small(Config) when is_list(Config) ->
- ?line decode_badarg(<<131, 97>>),
- ?line decode_badarg(<<131, 98>>),
- ?line decode_badarg(<<131, 98, 0>>),
- ?line decode_badarg(<<131, 98, 0, 0>>),
- ?line decode_badarg(<<131, 98, 0, 0, 0>>),
- ?line decode_badarg(<<131, 99>>),
- ?line decode_badarg(<<131, 99, 0>>),
- ?line decode_badarg(<<131, 99, 0:240>>),
-
- ?line decode_badarg(<<131,100>>),
- ?line decode_badarg(<<131,100, 1:16/big>>),
- ?line decode_badarg(<<131,100, 2:16/big>>),
- ?line decode_badarg(<<131,100, 2:16/big, "A">>),
+ decode_badarg(<<131, 97>>),
+ decode_badarg(<<131, 98>>),
+ decode_badarg(<<131, 98, 0>>),
+ decode_badarg(<<131, 98, 0, 0>>),
+ decode_badarg(<<131, 98, 0, 0, 0>>),
+ decode_badarg(<<131, 99>>),
+ decode_badarg(<<131, 99, 0>>),
+ decode_badarg(<<131, 99, 0:240>>),
+
+ decode_badarg(<<131,100>>),
+ decode_badarg(<<131,100, 1:16/big>>),
+ decode_badarg(<<131,100, 2:16/big>>),
+ decode_badarg(<<131,100, 2:16/big, "A">>),
% FIXME node name "A" seem ok, should it be?
-% ?line decode_badarg(<<131,101,100,1:16/big,"A",42:32/big,0>>),
-
- ?line decode_badarg(<<131,101>>),
- ?line decode_badarg(<<131,101,106>>),
- ?line decode_badarg(<<131,101,255>>),
- ?line decode_badarg(<<131,101,106,42:8/big>>),
- ?line decode_badarg(<<131,101,106,42:16/big>>),
- ?line decode_badarg(<<131,101,255,42:24/big>>),
- ?line decode_badarg(<<131,101,255,42:32/big,0>>),
- ?line decode_badarg(<<131,101,100,1:16/big,"A">>),
- ?line decode_badarg(<<131,101,100,1:16/big,"A",42:32/big>>),
-
- ?line decode_badarg(<<131,102>>),
- ?line decode_badarg(<<131,102,106,42:32/big,0>>),
- ?line decode_badarg(<<131,102,255,42:32/big,0>>),
- ?line decode_badarg(<<131,102,100,1:16/big,"A">>),
- ?line decode_badarg(<<131,102,100,1:16/big,"A",42:32/big>>),
-
- ?line decode_badarg(<<131,103>>),
- ?line decode_badarg(<<131,103,106,42:32/big,0>>),
- ?line decode_badarg(<<131,103,255,42:32/big,0>>),
- ?line decode_badarg(<<131,103,100,1:16/big,"A">>),
- ?line decode_badarg(<<131,103,100,1:16/big,"A",42:32/big>>),
- ?line decode_badarg(<<131,103,100,1:16/big,"A",4:32/big,2:32/big>>),
-
- ?line decode_badarg(<<131,104>>),
- ?line decode_badarg(<<131,104, 1>>),
- ?line decode_badarg(<<131,104, 2, 106>>),
- ?line decode_badarg(<<131,105, 1:32/big>>),
- ?line decode_badarg(<<131,105, 2:32/big, 106>>),
-
- ?line decode_badarg(<<131,107>>),
- ?line decode_badarg(<<131,107, 1:16/big>>),
- ?line decode_badarg(<<131,107, 2:16/big>>),
- ?line decode_badarg(<<131,107, 2:16/big, "A">>),
-
- ?line decode_badarg(<<131,108>>),
- ?line decode_badarg(<<131,108, 1:32/big>>),
- ?line decode_badarg(<<131,108, 2:32/big>>),
- ?line decode_badarg(<<131,108, 2:32/big, 106>>), % FIXME don't use NIL
-
- ?line decode_badarg(<<131,109>>),
- ?line decode_badarg(<<131,109, 1:32/big>>),
- ?line decode_badarg(<<131,109, 2:32/big>>),
- ?line decode_badarg(<<131,109, 2:32/big, 42>>),
+ % decode_badarg(<<131,101,100,1:16/big,"A",42:32/big,0>>),
+
+ decode_badarg(<<131,101>>),
+ decode_badarg(<<131,101,106>>),
+ decode_badarg(<<131,101,255>>),
+ decode_badarg(<<131,101,106,42:8/big>>),
+ decode_badarg(<<131,101,106,42:16/big>>),
+ decode_badarg(<<131,101,255,42:24/big>>),
+ decode_badarg(<<131,101,255,42:32/big,0>>),
+ decode_badarg(<<131,101,100,1:16/big,"A">>),
+ decode_badarg(<<131,101,100,1:16/big,"A",42:32/big>>),
+
+ decode_badarg(<<131,102>>),
+ decode_badarg(<<131,102,106,42:32/big,0>>),
+ decode_badarg(<<131,102,255,42:32/big,0>>),
+ decode_badarg(<<131,102,100,1:16/big,"A">>),
+ decode_badarg(<<131,102,100,1:16/big,"A",42:32/big>>),
+
+ decode_badarg(<<131,103>>),
+ decode_badarg(<<131,103,106,42:32/big,0>>),
+ decode_badarg(<<131,103,255,42:32/big,0>>),
+ decode_badarg(<<131,103,100,1:16/big,"A">>),
+ decode_badarg(<<131,103,100,1:16/big,"A",42:32/big>>),
+ decode_badarg(<<131,103,100,1:16/big,"A",4:32/big,2:32/big>>),
+
+ decode_badarg(<<131,104>>),
+ decode_badarg(<<131,104, 1>>),
+ decode_badarg(<<131,104, 2, 106>>),
+ decode_badarg(<<131,105, 1:32/big>>),
+ decode_badarg(<<131,105, 2:32/big, 106>>),
+
+ decode_badarg(<<131,107>>),
+ decode_badarg(<<131,107, 1:16/big>>),
+ decode_badarg(<<131,107, 2:16/big>>),
+ decode_badarg(<<131,107, 2:16/big, "A">>),
+
+ decode_badarg(<<131,108>>),
+ decode_badarg(<<131,108, 1:32/big>>),
+ decode_badarg(<<131,108, 2:32/big>>),
+ decode_badarg(<<131,108, 2:32/big, 106>>), % FIXME don't use NIL
+
+ decode_badarg(<<131,109>>),
+ decode_badarg(<<131,109, 1:32/big>>),
+ decode_badarg(<<131,109, 2:32/big>>),
+ decode_badarg(<<131,109, 2:32/big, 42>>),
N = largest_small_big(),
- ?line decode_badarg(<<131,110>>),
- ?line decode_badarg(<<131,110,1>>),
- ?line decode_badarg(<<131,110,1,0>>),
- ?line decode_badarg(<<131,110,1,1>>),
- ?line decode_badarg(<<131,110,2,0,42>>),
- ?line decode_badarg(<<131,110,2,1,42>>),
- ?line decode_badarg(<<131,110,255,0,N:2032/little>>),
- ?line decode_badarg(<<131,110,255,1,N:2032/little>>),
-
- ?line decode_badarg(<<131,111>>),
- ?line decode_badarg(<<131,111, 1:32/big>>),
- ?line decode_badarg(<<131,111, 1:32/big,0>>),
- ?line decode_badarg(<<131,111, 1:32/big,1>>),
- ?line decode_badarg(<<131,111, 2:32/big,0,42>>),
- ?line decode_badarg(<<131,111, 2:32/big,1,42>>),
- ?line decode_badarg(<<131,111,256:32/big,0,N:2032/little>>),
- ?line decode_badarg(<<131,111,256:32/big,1,N:2032/little>>),
- ?line decode_badarg(<<131,111,256:32/big,0,N:2040/little>>),
- ?line decode_badarg(<<131,111,256:32/big,1,N:2040/little>>),
- ?line decode_badarg(<<131,111,257:32/big,0,N:2048/little>>),
- ?line decode_badarg(<<131,111,257:32/big,1,N:2048/little>>),
+ decode_badarg(<<131,110>>),
+ decode_badarg(<<131,110,1>>),
+ decode_badarg(<<131,110,1,0>>),
+ decode_badarg(<<131,110,1,1>>),
+ decode_badarg(<<131,110,2,0,42>>),
+ decode_badarg(<<131,110,2,1,42>>),
+ decode_badarg(<<131,110,255,0,N:2032/little>>),
+ decode_badarg(<<131,110,255,1,N:2032/little>>),
+
+ decode_badarg(<<131,111>>),
+ decode_badarg(<<131,111, 1:32/big>>),
+ decode_badarg(<<131,111, 1:32/big,0>>),
+ decode_badarg(<<131,111, 1:32/big,1>>),
+ decode_badarg(<<131,111, 2:32/big,0,42>>),
+ decode_badarg(<<131,111, 2:32/big,1,42>>),
+ decode_badarg(<<131,111,256:32/big,0,N:2032/little>>),
+ decode_badarg(<<131,111,256:32/big,1,N:2032/little>>),
+ decode_badarg(<<131,111,256:32/big,0,N:2040/little>>),
+ decode_badarg(<<131,111,256:32/big,1,N:2040/little>>),
+ decode_badarg(<<131,111,257:32/big,0,N:2048/little>>),
+ decode_badarg(<<131,111,257:32/big,1,N:2048/little>>),
% Emulator dies if trying to create large bignum....
-% ?line decode_badarg(<<131,111,16#ffffffff:32/big,0>>),
-% ?line decode_badarg(<<131,111,16#ffffffff:32/big,1>>),
-
- ?line decode_badarg(<<131, 78>>),
- ?line decode_badarg(<<131, 78, 42>>),
- ?line decode_badarg(<<131, 78, 42, 1>>),
- ?line decode_badarg(<<131, 78, 42, 1:16/big>>),
- ?line decode_badarg(<<131, 78, 42, 2:16/big>>),
- ?line decode_badarg(<<131, 78, 42, 2:16/big, "A">>),
-
- ?line decode_badarg(<<131, 67>>),
-
- ?line decode_badarg(<<131,114>>),
- ?line decode_badarg(<<131,114,0>>),
- ?line decode_badarg(<<131,114,1:16/big>>),
- ?line decode_badarg(<<131,114,1:16/big,100>>),
- ?line decode_badarg(<<131,114,1:16/big,100,1:16/big>>),
- ?line decode_badarg(<<131,114,1:16/big,100,1:16/big,"A">>),
- ?line decode_badarg(<<131,114,1:16/big,100,1:16/big,"A",0>>),
- ?line decode_badarg(<<131,114,1:16/big,100,1:16/big,"A",0,42:8>>),
- ?line decode_badarg(<<131,114,1:16/big,100,1:16/big,"A",0,42:16>>),
- ?line decode_badarg(<<131,114,1:16/big,100,1:16/big,"A",0,42:24>>),
-
- ?line decode_badarg(<<131,117>>), % FIXME needs more tests
+ % decode_badarg(<<131,111,16#ffffffff:32/big,0>>),
+ % decode_badarg(<<131,111,16#ffffffff:32/big,1>>),
+
+ decode_badarg(<<131, 78>>),
+ decode_badarg(<<131, 78, 42>>),
+ decode_badarg(<<131, 78, 42, 1>>),
+ decode_badarg(<<131, 78, 42, 1:16/big>>),
+ decode_badarg(<<131, 78, 42, 2:16/big>>),
+ decode_badarg(<<131, 78, 42, 2:16/big, "A">>),
+
+ decode_badarg(<<131, 67>>),
+
+ decode_badarg(<<131,114>>),
+ decode_badarg(<<131,114,0>>),
+ decode_badarg(<<131,114,1:16/big>>),
+ decode_badarg(<<131,114,1:16/big,100>>),
+ decode_badarg(<<131,114,1:16/big,100,1:16/big>>),
+ decode_badarg(<<131,114,1:16/big,100,1:16/big,"A">>),
+ decode_badarg(<<131,114,1:16/big,100,1:16/big,"A",0>>),
+ decode_badarg(<<131,114,1:16/big,100,1:16/big,"A",0,42:8>>),
+ decode_badarg(<<131,114,1:16/big,100,1:16/big,"A",0,42:16>>),
+ decode_badarg(<<131,114,1:16/big,100,1:16/big,"A",0,42:24>>),
+
+ decode_badarg(<<131,117>>), % FIXME needs more tests
ok.
@@ -380,7 +353,7 @@ my_appender_1(N, T0) ->
U = rnd_term(),
T = [U|T0],
my_appender_1(N-1, T).
-
+
seed() ->
rand:seed(exsplus, {3172,9815,20129}).
@@ -388,4 +361,3 @@ rnd_term() ->
U0 = rand:uniform(),
B = <<U0/float>>,
{U0,U0 * 2.5 + 3.14,[U0*2.3,B]}.
-
diff --git a/erts/emulator/test/exception_SUITE.erl b/erts/emulator/test/exception_SUITE.erl
index 57ce8fb879..76e3556bc4 100644
--- a/erts/emulator/test/exception_SUITE.erl
+++ b/erts/emulator/test/exception_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.
@@ -20,11 +20,10 @@
-module(exception_SUITE).
--export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
- init_per_group/2,end_per_group/2,
- badmatch/1, pending_errors/1, nil_arith/1,
+-export([all/0, suite/0,
+ badmatch/1, pending_errors/1, nil_arith/1,
stacktrace/1, nested_stacktrace/1, raise/1, gunilla/1, per/1,
- exception_with_heap_frag/1, line_numbers/1]).
+ exception_with_heap_frag/1, line_numbers/1]).
-export([bad_guy/2]).
-export([crash/1]).
@@ -32,55 +31,41 @@
-include_lib("common_test/include/ct.hrl").
-import(lists, [foreach/2]).
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap, {seconds, 10}}].
all() ->
[badmatch, pending_errors, nil_arith, stacktrace,
nested_stacktrace, raise, gunilla, per,
exception_with_heap_frag, line_numbers].
-groups() ->
- [].
-
-init_per_suite(Config) ->
- Config.
-
-end_per_suite(_Config) ->
- ok.
-
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
-
-
-define(try_match(E),
- catch ?MODULE:bar(),
- {'EXIT', {{badmatch, nomatch}, _}} = (catch E = id(nomatch))).
+ catch ?MODULE:bar(),
+ {'EXIT', {{badmatch, nomatch}, _}} = (catch E = id(nomatch))).
%% 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)
@@ -89,11 +74,11 @@ bad_guy(pe_badarg, Other) when length(Other) > 0 -> % badarg (suppressed)
ok;
bad_guy(_, e_case) ->
case id(xxx) of
- ok -> ok
+ ok -> ok
end; % case_clause
bad_guy(_, e_if) ->
if
- a == b -> ok
+ a == b -> ok
end; % if_clause
bad_guy(_, e_badarith) ->
1+b; % badarith
@@ -101,9 +86,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) ->
@@ -122,30 +107,30 @@ pending(First, Second, Expected) ->
pending_catched(First, Second, Expected) ->
ok = io:format("Catching bad_guy(~p, ~p)", [First, Second]),
case catch bad_guy(First, Second) of
- {'EXIT', Reason} ->
- pending(Reason, bad_guy, [First, Second], Expected);
- Other ->
- test_server:fail({not_exit, Other})
+ {'EXIT', Reason} ->
+ pending(Reason, bad_guy, [First, Second], Expected);
+ Other ->
+ ct:fail({not_exit, Other})
end.
pending_exit_message(Args, Expected) ->
ok = io:format("Trapping EXITs from spawn_link(~p, ~p, ~p)",
- [?MODULE, bad_guy, Args]),
+ [?MODULE, bad_guy, Args]),
process_flag(trap_exit, true),
Pid = spawn_link(?MODULE, bad_guy, Args),
receive
- {'EXIT', Pid, Reason} ->
- pending(Reason, bad_guy, Args, Expected);
- Other ->
- test_server:fail({unexpected_message, Other})
+ {'EXIT', Pid, Reason} ->
+ pending(Reason, bad_guy, Args, Expected);
+ Other ->
+ ct:fail({unexpected_message, Other})
after 10000 ->
- test_server:fail(timeout)
+ ct:fail(timeout)
end,
process_flag(trap_exit, false).
pending({badarg,[{erlang,Bif,BifArgs,Loc1},
- {?MODULE,Func,Arity,Loc2}|_]},
- Func, Args, _Code)
+ {?MODULE,Func,Arity,Loc2}|_]},
+ Func, Args, _Code)
when is_atom(Bif), is_list(BifArgs), length(Args) =:= Arity,
is_list(Loc1), is_list(Loc2) ->
ok;
@@ -159,67 +144,67 @@ pending({Code,[{?MODULE,Func,Arity,Loc}|_]}, Func, Args, Code)
when length(Args) =:= Arity, is_list(Loc) ->
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) ->
@@ -251,7 +236,7 @@ ba_shift(A, B) ->
{'EXIT', {badarith, _}} = (catch A bsl B),
io:format("~p bsr ~p", [A, B]),
{'EXIT', {badarith, _}} = (catch A bsr B).
-
+
ba_bnot(A) ->
io:format("bnot ~p", [A]),
{'EXIT', {badarith, _}} = (catch bnot A).
@@ -260,38 +245,38 @@ 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}} =
- 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} =
- 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} =
- 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} =
- stacktrace_1({value,V}, error, {throw,V}),
- ?line [{?MODULE,stacktrace_1,3,_}|_] = erase(stacktrace1),
- ?line St4 = erase(stacktrace2),
- ?line St4 = erlang:get_stacktrace(),
+ {value2,{caught1,badarg,[{erlang,abs,[V],_}|_]=St1}} =
+ stacktrace_1({'abs',V}, error, {value,V}),
+ 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}}),
+ [{?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}),
+ St3 = erase(stacktrace1),
+ St3 = erase(stacktrace2),
+ St3 = erlang:get_stacktrace(),
+ {caught2,{throw,V},[{?MODULE,foo,1,_}|_]=St4} =
+ stacktrace_1({value,V}, error, {throw,V}),
+ [{?MODULE,stacktrace_1,3,_}|_] = erase(stacktrace1),
+ St4 = erase(stacktrace2),
+ St4 = erlang:get_stacktrace(),
try
- ?line stacktrace_2()
+ stacktrace_2()
catch
- error:{badmatch,_} ->
- [{?MODULE,stacktrace_2,0,_},
- {?MODULE,stacktrace,1,_}|_] =
- erlang:get_stacktrace(),
- ok
+ error:{badmatch,_} ->
+ [{?MODULE,stacktrace_2,0,_},
+ {?MODULE,stacktrace,1,_}|_] =
+ erlang:get_stacktrace(),
+ ok
end.
stacktrace_1(X, C1, Y) ->
@@ -303,7 +288,7 @@ stacktrace_1(X, C1, Y) ->
C1:D1 -> {caught1,D1,erlang:get_stacktrace()}
after
put(stacktrace1, erlang:get_stacktrace()),
- foo(Y)
+ foo(Y)
end of
V2 -> {value2,V2}
catch
@@ -319,21 +304,21 @@ stacktrace_2() ->
nested_stacktrace(Conf) when is_list(Conf) ->
V = [{make_ref()}|[self()]],
- ?line value1 =
- nested_stacktrace_1({{value,{V,x1}},void,{V,x1}},
- {void,void,void}),
- ?line {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],_}|_]} =
- nested_stacktrace_1({{'add',{V,x1}},error,badarith},
- {{'abs',V},error,badarg}),
+ value1 =
+ nested_stacktrace_1({{value,{V,x1}},void,{V,x1}},
+ {void,void,void}),
+ {caught1,
+ [{?MODULE,my_add,2,_}|_],
+ value2,
+ [{?MODULE,my_add,2,_}|_]} =
+ nested_stacktrace_1({{'add',{V,x1}},error,badarith},
+ {{value,{V,x2}},void,{V,x2}}),
+ {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.
nested_stacktrace_1({X1,C1,V1}, {X2,C2,V2}) ->
@@ -341,64 +326,64 @@ nested_stacktrace_1({X1,C1,V1}, {X2,C2,V2}) ->
V1 -> value1
catch
C1:V1 ->
- S1 = erlang:get_stacktrace(),
+ S1 = erlang:get_stacktrace(),
T2 =
- try foo(X2) of
- V2 -> value2
- catch
- C2:V2 -> {caught2,erlang:get_stacktrace()}
- end,
+ try foo(X2) of
+ V2 -> value2
+ catch
+ C2:V2 -> {caught2,erlang:get_stacktrace()}
+ end,
{caught1,S1,T2,erlang:get_stacktrace()}
end.
raise(Conf) when is_list(Conf) ->
- ?line erase(raise),
- ?line A =
- try
- ?line try foo({'div',{1,0}})
- catch
- error:badarith ->
- put(raise, A0 = erlang:get_stacktrace()),
- ?line erlang:raise(error, badarith, A0)
- end
- catch
- error:badarith ->
- ?line A1 = erlang:get_stacktrace(),
- ?line A1 = get(raise)
- end,
- ?line A = erlang:get_stacktrace(),
- ?line A = get(raise),
- ?line [{?MODULE,my_div,2,_}|_] = A,
+ erase(raise),
+ A =
+ try
+ try foo({'div',{1,0}})
+ catch
+ error:badarith ->
+ put(raise, A0 = erlang:get_stacktrace()),
+ erlang:raise(error, badarith, A0)
+ end
+ catch
+ error:badarith ->
+ A1 = erlang:get_stacktrace(),
+ A1 = get(raise)
+ end,
+ 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 B = odd_even(N, []),
- ?line try even(N)
- catch error:function_clause -> ok
- end,
- ?line B = erlang:get_stacktrace(),
+ N = erlang:system_flag(backtrace_depth, N),
+ B = odd_even(N, []),
+ try even(N)
+ catch error:function_clause -> ok
+ end,
+ 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 ->
odd_even(N-1,
- [if (N rem 2) == 0 ->
- {?MODULE,even,1,[{file,"odd_even.erl"},{line,3}]};
- true ->
- {?MODULE,odd,1,[{file,"odd_even.erl"},{line,6}]}
- end|R]);
+ [if (N rem 2) == 0 ->
+ {?MODULE,even,1,[{file,"odd_even.erl"},{line,3}]};
+ true ->
+ {?MODULE,odd,1,[{file,"odd_even.erl"},{line,6}]}
+ end|R]);
odd_even(1, R) ->
[{?MODULE,odd,[1],[{file,"odd_even.erl"},{line,5}]}|R].
@@ -428,18 +413,18 @@ 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() ->
try try arne()
- after
- pelle
- end
+ after
+ pelle
+ end
catch
- C:R ->
- {C,R}
+ C:R ->
+ {C,R}
end.
arne() ->
@@ -448,18 +433,18 @@ arne() ->
per(Config) when is_list(Config) ->
try
- t1(0,pad,0),
- t2(0,pad,0)
+ t1(0,pad,0),
+ t2(0,pad,0)
catch
- error:badarith ->
- ok
+ error:badarith ->
+ ok
end.
t1(_,X,_) ->
- (1 bsl X) + 1.
+ (1 bsl X) + 1.
t2(_,X,_) ->
- (X bsl 1) + 1.
+ (X bsl 1) + 1.
%%
%% Make sure that even if a BIF builds an heap fragment, then causes an exception,
@@ -471,155 +456,155 @@ exception_with_heap_frag(Config) when is_list(Config) ->
%% Floats are only validated when the heap fragment has been allocated.
BadFloat = <<131,99,53,46,48,$X,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,101,45,48,49,0,0,0,0,0>>,
- ?line do_exception_with_heap_frag(BadFloat, Sizes),
+ do_exception_with_heap_frag(BadFloat, Sizes),
%% {Binary,BadFloat}: When the error in float is discovered, a refc-binary
%% has been allocated and the list of refc-binaries goes through the
%% heap fragment.
BinAndFloat =
- <<131,104,2,109,0,0,1,0,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,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,
- 46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,
- 71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,
- 96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,
- 116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,
- 135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,
- 154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,
- 173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,
- 192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,
- 211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,
- 230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,
- 249,250,251,252,253,254,255,99,51,46,49,52,$B,$l,$u,$r,$f,48,48,48,48,48,48,
- 48,48,49,50,52,51,52,101,43,48,48,0,0,0,0,0>>,
- ?line do_exception_with_heap_frag(BinAndFloat, Sizes),
+ <<131,104,2,109,0,0,1,0,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,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,
+ 46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,
+ 71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,
+ 96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,
+ 116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,
+ 135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,
+ 154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,
+ 173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,
+ 192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,
+ 211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,
+ 230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,
+ 249,250,251,252,253,254,255,99,51,46,49,52,$B,$l,$u,$r,$f,48,48,48,48,48,48,
+ 48,48,49,50,52,51,52,101,43,48,48,0,0,0,0,0>>,
+ do_exception_with_heap_frag(BinAndFloat, Sizes),
%% {Fun,BadFloat}
FunAndFloat =
- <<131,104,2,112,0,0,0,66,0,238,239,135,138,137,216,89,57,22,111,52,126,16,84,
- 71,8,0,0,0,0,0,0,0,0,100,0,1,116,97,0,98,5,175,169,123,103,100,0,13,110,111,
- 110,111,100,101,64,110,111,104,111,115,116,0,0,0,41,0,0,0,0,0,99,50,46,55,48,
- $Y,57,57,57,57,57,57,57,57,57,57,57,57,57,54,52,52,55,101,43,48,48,0,0,0,0,0>>,
- ?line do_exception_with_heap_frag(FunAndFloat, Sizes),
+ <<131,104,2,112,0,0,0,66,0,238,239,135,138,137,216,89,57,22,111,52,126,16,84,
+ 71,8,0,0,0,0,0,0,0,0,100,0,1,116,97,0,98,5,175,169,123,103,100,0,13,110,111,
+ 110,111,100,101,64,110,111,104,111,115,116,0,0,0,41,0,0,0,0,0,99,50,46,55,48,
+ $Y,57,57,57,57,57,57,57,57,57,57,57,57,57,54,52,52,55,101,43,48,48,0,0,0,0,0>>,
+ do_exception_with_heap_frag(FunAndFloat, Sizes),
%% [ExternalPid|BadFloat]
ExtPidAndFloat =
- <<131,108,0,0,0,1,103,100,0,13,107,97,108,108,101,64,115,116,114,105,100,101,
- 114,0,0,0,36,0,0,0,0,2,99,48,46,$@,48,48,48,48,48,48,48,48,48,48,48,48,48,48,
- 48,48,48,48,48,101,43,48,48,0,0,0,0,0>>,
- ?line do_exception_with_heap_frag(ExtPidAndFloat, Sizes),
-
+ <<131,108,0,0,0,1,103,100,0,13,107,97,108,108,101,64,115,116,114,105,100,101,
+ 114,0,0,0,36,0,0,0,0,2,99,48,46,$@,48,48,48,48,48,48,48,48,48,48,48,48,48,48,
+ 48,48,48,48,48,101,43,48,48,0,0,0,0,0>>,
+ do_exception_with_heap_frag(ExtPidAndFloat, Sizes),
+
ok.
do_exception_with_heap_frag(Bin, [Sz|Sizes]) ->
Filler = erlang:make_tuple(Sz, a),
spawn(fun() ->
- try
- binary_to_term(Bin)
- catch
- _:_ ->
- %% term_to_binary/1 is an easy way to traverse the
- %% entire stacktrace term to make sure that every part
- %% of it is OK.
- term_to_binary(erlang:get_stacktrace())
- end,
- id(Filler)
- end),
+ try
+ binary_to_term(Bin)
+ catch
+ _:_ ->
+ %% term_to_binary/1 is an easy way to traverse the
+ %% entire stacktrace term to make sure that every part
+ %% of it is OK.
+ term_to_binary(erlang:get_stacktrace())
+ end,
+ id(Filler)
+ end),
do_exception_with_heap_frag(Bin, Sizes);
do_exception_with_heap_frag(_, []) -> ok.
line_numbers(Config) when is_list(Config) ->
{'EXIT',{{case_clause,bad_tag},
- [{?MODULE,line1,2,
- [{file,"fake_file.erl"},{line,3}]},
- {?MODULE,line_numbers,1,_}|_]}} =
- (catch line1(bad_tag, 0)),
+ [{?MODULE,line1,2,
+ [{file,"fake_file.erl"},{line,3}]},
+ {?MODULE,line_numbers,1,_}|_]}} =
+ (catch line1(bad_tag, 0)),
{'EXIT',{badarith,
- [{?MODULE,line1,2,
- [{file,"fake_file.erl"},{line,5}]},
- {?MODULE,line_numbers,1,_}|_]}} =
- (catch line1(a, not_an_integer)),
+ [{?MODULE,line1,2,
+ [{file,"fake_file.erl"},{line,5}]},
+ {?MODULE,line_numbers,1,_}|_]}} =
+ (catch line1(a, not_an_integer)),
{'EXIT',{{badmatch,{ok,1}},
- [{?MODULE,line1,2,
- [{file,"fake_file.erl"},{line,7}]},
- {?MODULE,line_numbers,1,_}|_]}} =
- (catch line1(a, 0)),
+ [{?MODULE,line1,2,
+ [{file,"fake_file.erl"},{line,7}]},
+ {?MODULE,line_numbers,1,_}|_]}} =
+ (catch line1(a, 0)),
{'EXIT',{crash,
- [{?MODULE,crash,1,
- [{file,"fake_file.erl"},{line,14}]},
- {?MODULE,line_numbers,1,_}|_]}} =
- (catch line1(a, 41)),
+ [{?MODULE,crash,1,
+ [{file,"fake_file.erl"},{line,14}]},
+ {?MODULE,line_numbers,1,_}|_]}} =
+ (catch line1(a, 41)),
ModFile = ?MODULE_STRING++".erl",
[{?MODULE,maybe_crash,1,[{file,"call.erl"},{line,28}]},
{?MODULE,call1,0,[{file,"call.erl"},{line,14}]},
{?MODULE,close_calls,1,[{file,"call.erl"},{line,5}]},
{?MODULE,line_numbers,1,[{file,ModFile},{line,_}]}|_] =
- close_calls(call1),
+ close_calls(call1),
[{?MODULE,maybe_crash,1,[{file,"call.erl"},{line,28}]},
{?MODULE,call2,0,[{file,"call.erl"},{line,18}]},
{?MODULE,close_calls,1,[{file,"call.erl"},{line,6}]},
{?MODULE,line_numbers,1,[{file,ModFile},{line,_}]}|_] =
- close_calls(call2),
+ close_calls(call2),
[{?MODULE,maybe_crash,1,[{file,"call.erl"},{line,28}]},
{?MODULE,call3,0,[{file,"call.erl"},{line,22}]},
{?MODULE,close_calls,1,[{file,"call.erl"},{line,7}]},
{?MODULE,line_numbers,1,[{file,ModFile},{line,_}]}|_] =
- close_calls(call3),
+ close_calls(call3),
no_crash = close_calls(other),
<<0,0>> = build_binary1(16),
{'EXIT',{badarg,
- [{?MODULE,build_binary1,1,
- [{file,"bit_syntax.erl"},{line,72503}]},
- {?MODULE,line_numbers,1,
- [{file,ModFile},{line,_}]}|_]}} =
- (catch build_binary1(bad_size)),
+ [{?MODULE,build_binary1,1,
+ [{file,"bit_syntax.erl"},{line,72503}]},
+ {?MODULE,line_numbers,1,
+ [{file,ModFile},{line,_}]}|_]}} =
+ (catch build_binary1(bad_size)),
<<7,1,2,3>> = build_binary2(8, <<1,2,3>>),
{'EXIT',{badarg,
- [{?MODULE,build_binary2,2,
- [{file,"bit_syntax.erl"},{line,72507}]},
- {?MODULE,line_numbers,1,
- [{file,ModFile},{line,_}]}|_]}} =
- (catch build_binary2(bad_size, <<>>)),
+ [{?MODULE,build_binary2,2,
+ [{file,"bit_syntax.erl"},{line,72507}]},
+ {?MODULE,line_numbers,1,
+ [{file,ModFile},{line,_}]}|_]}} =
+ (catch build_binary2(bad_size, <<>>)),
{'EXIT',{badarg,
- [{erlang,bit_size,[bad_binary],[]},
- {?MODULE,build_binary2,2,
- [{file,"bit_syntax.erl"},{line,72507}]},
- {?MODULE,line_numbers,1,
- [{file,ModFile},{line,_}]}|_]}} =
- (catch build_binary2(8, bad_binary)),
+ [{erlang,bit_size,[bad_binary],[]},
+ {?MODULE,build_binary2,2,
+ [{file,"bit_syntax.erl"},{line,72507}]},
+ {?MODULE,line_numbers,1,
+ [{file,ModFile},{line,_}]}|_]}} =
+ (catch build_binary2(8, bad_binary)),
<<"abc",357:16>> = build_binary3(<<"abc">>),
{'EXIT',{badarg,[{?MODULE,build_binary3,1,
- [{file,"bit_syntax.erl"},{line,72511}]},
- {?MODULE,line_numbers,1,
- [{file,ModFile},{line,_}]}|_]}} =
- (catch build_binary3(no_binary)),
+ [{file,"bit_syntax.erl"},{line,72511}]},
+ {?MODULE,line_numbers,1,
+ [{file,ModFile},{line,_}]}|_]}} =
+ (catch build_binary3(no_binary)),
{'EXIT',{function_clause,
- [{?MODULE,do_call_abs,[y,y],
- [{file,"gc_bif.erl"},{line,18}]},
- {?MODULE,line_numbers,1,_}|_]}} =
- (catch do_call_abs(y, y)),
+ [{?MODULE,do_call_abs,[y,y],
+ [{file,"gc_bif.erl"},{line,18}]},
+ {?MODULE,line_numbers,1,_}|_]}} =
+ (catch do_call_abs(y, y)),
{'EXIT',{badarg,
- [{erlang,abs,[[]],[]},
- {?MODULE,do_call_abs,2,
- [{file,"gc_bif.erl"},{line,19}]},
- {?MODULE,line_numbers,1,_}|_]}} =
- (catch do_call_abs(x, [])),
+ [{erlang,abs,[[]],[]},
+ {?MODULE,do_call_abs,2,
+ [{file,"gc_bif.erl"},{line,19}]},
+ {?MODULE,line_numbers,1,_}|_]}} =
+ (catch do_call_abs(x, [])),
{'EXIT',{{badmatch,"42"},
- [{MODULE,applied_bif_1,1,[{file,"applied_bif.erl"},{line,5}]},
- {?MODULE,line_numbers,1,_}|_]}} =
- (catch applied_bif_1(42)),
+ [{MODULE,applied_bif_1,1,[{file,"applied_bif.erl"},{line,5}]},
+ {?MODULE,line_numbers,1,_}|_]}} =
+ (catch applied_bif_1(42)),
{'EXIT',{{badmatch,{current_location,
- {?MODULE,applied_bif_2,0,
- [{file,"applied_bif.erl"},{line,9}]}}},
- [{MODULE,applied_bif_2,0,[{file,"applied_bif.erl"},{line,10}]},
- {?MODULE,line_numbers,1,_}|_]}} =
- (catch applied_bif_2()),
+ {?MODULE,applied_bif_2,0,
+ [{file,"applied_bif.erl"},{line,9}]}}},
+ [{MODULE,applied_bif_2,0,[{file,"applied_bif.erl"},{line,10}]},
+ {?MODULE,line_numbers,1,_}|_]}} =
+ (catch applied_bif_2()),
ok.
@@ -646,13 +631,13 @@ odd(N) when is_integer(N), N > 1, (N rem 2) == 1 ->
-file("fake_file.erl", 1). %Line 1
line1(Tag, X) -> %Line 2
case Tag of %Line 3
- a ->
- Y = X + 1, %Line 5
- Res = id({ok,Y}), %Line 6
- ?MODULE:crash({ok,42} = Res); %Line 7
- b ->
- x = id(x), %Line 9
- ok %Line 10
+ a ->
+ Y = X + 1, %Line 5
+ Res = id({ok,Y}), %Line 6
+ ?MODULE:crash({ok,42} = Res); %Line 7
+ b ->
+ x = id(x), %Line 9
+ ok %Line 10
end. %Line 11
crash(_) -> %Line 13
@@ -662,12 +647,12 @@ crash(_) -> %Line 13
close_calls(Where) -> %Line 2
put(where_to_crash, Where), %Line 3
try
- call1(), %Line 5
- call2(), %Line 6
- call3(), %Line 7
- no_crash %Line 8
+ call1(), %Line 5
+ call2(), %Line 6
+ call3(), %Line 7
+ no_crash %Line 8
catch error:crash ->
- erlang:get_stacktrace() %Line 10
+ erlang:get_stacktrace() %Line 10
end. %Line 11
call1() -> %Line 13
@@ -684,10 +669,10 @@ call3() -> %Line 21
maybe_crash(Name) -> %Line 25
case get(where_to_crash) of %Line 26
- Name ->
- erlang:error(crash); %Line 28
- _ ->
- ok %Line 30
+ Name ->
+ erlang:error(crash); %Line 28
+ _ ->
+ ok %Line 30
end.
-file("bit_syntax.erl", 72500). %Line 72500
diff --git a/erts/emulator/test/float_SUITE.erl b/erts/emulator/test/float_SUITE.erl
index bf557f2bca..e85addae3a 100644
--- a/erts/emulator/test/float_SUITE.erl
+++ b/erts/emulator/test/float_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.
@@ -22,64 +22,38 @@
-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,
- fpe/1,fp_drv/1,fp_drv_thread/1,denormalized/1,match/1,
+-export([all/0, suite/0, groups/0,
+ fpe/1,fp_drv/1,fp_drv_thread/1,denormalized/1,match/1,
t_mul_add_ops/1,
- bad_float_unpack/1, write/1, cmp_zero/1, cmp_integer/1, cmp_bignum/1]).
+ bad_float_unpack/1, write/1, cmp_zero/1, cmp_integer/1, cmp_bignum/1]).
-export([otp_7178/1]).
-export([hidden_inf/1]).
-export([arith/1]).
-
-init_per_testcase(Func, Config) when is_atom(Func), is_list(Config) ->
- Dog = ?t:timetrap(?t:minutes(3)),
- [{watchdog, Dog},{testcase,Func}|Config].
-
-end_per_testcase(_Func, Config) ->
- Dog = ?config(watchdog, Config),
- ?t:timetrap_cancel(Dog).
-
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap, {minutes, 3}}].
all() ->
[fpe, fp_drv, fp_drv_thread, otp_7178, denormalized,
match, bad_float_unpack, write, {group, comparison}
,hidden_inf
- ,arith, t_mul_add_ops
- ].
+ ,arith, t_mul_add_ops].
groups() ->
[{comparison, [parallel], [cmp_zero, cmp_integer, cmp_bignum]}].
-init_per_suite(Config) ->
- Config.
-
-end_per_suite(_Config) ->
- ok.
-
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
-
-
%%
%% OTP-7178, list_to_float on very small numbers should give 0.0
%% instead of exception, i.e. ignore underflow.
%%
-otp_7178(suite) ->
- [];
-otp_7178(doc) ->
- ["test that list_to_float on very small numbers give 0.0"];
+%% test that list_to_float on very small numbers give 0.0
otp_7178(Config) when is_list(Config) ->
- ?line X = list_to_float("1.0e-325"),
- ?line true = (X < 0.00000001) and (X > -0.00000001),
- ?line Y = list_to_float("1.0e-325325325"),
- ?line true = (Y < 0.00000001) and (Y > -0.00000001),
- ?line {'EXIT', {badarg,_}} = (catch list_to_float("1.0e83291083210")),
+ X = list_to_float("1.0e-325"),
+ true = (X < 0.00000001) and (X > -0.00000001),
+ Y = list_to_float("1.0e-325325325"),
+ true = (Y < 0.00000001) and (Y > -0.00000001),
+ {'EXIT', {badarg,_}} = (catch list_to_float("1.0e83291083210")),
ok.
%% Forces floating point exceptions and tests that subsequent, legal,
@@ -87,15 +61,15 @@ otp_7178(Config) when is_list(Config) ->
%% Strollo.
fpe(Config) when is_list(Config) ->
- ?line 0.0 = math:log(1.0),
- ?line {'EXIT', {badarith, _}} = (catch math:log(-1.0)),
- ?line 0.0 = math:log(1.0),
- ?line {'EXIT', {badarith, _}} = (catch math:log(0.0)),
- ?line 0.0 = math:log(1.0),
- ?line {'EXIT',{badarith,_}} = (catch 3.23e133 * id(3.57e257)),
- ?line 0.0 = math:log(1.0),
- ?line {'EXIT',{badarith,_}} = (catch 5.0/id(0.0)),
- ?line 0.0 = math:log(1.0),
+ 0.0 = math:log(1.0),
+ {'EXIT', {badarith, _}} = (catch math:log(-1.0)),
+ 0.0 = math:log(1.0),
+ {'EXIT', {badarith, _}} = (catch math:log(0.0)),
+ 0.0 = math:log(1.0),
+ {'EXIT',{badarith,_}} = (catch 3.23e133 * id(3.57e257)),
+ 0.0 = math:log(1.0),
+ {'EXIT',{badarith,_}} = (catch 5.0/id(0.0)),
+ 0.0 = math:log(1.0),
ok.
@@ -103,70 +77,70 @@ fpe(Config) when is_list(Config) ->
-define(ERTS_FP_THREAD_TEST, 1).
fp_drv(Config) when is_list(Config) ->
- fp_drv_test(?ERTS_FP_CONTROL_TEST, ?config(data_dir, Config)).
+ fp_drv_test(?ERTS_FP_CONTROL_TEST, proplists:get_value(data_dir, Config)).
fp_drv_thread(Config) when is_list(Config) ->
%% Run in a separate node since it used to crash the emulator...
- ?line Parent = self(),
- ?line DrvDir = ?config(data_dir, Config),
- ?line {ok,Node} = start_node(Config),
- ?line Tester = spawn_link(Node,
- fun () ->
- Parent !
- {self(),
- fp_drv_test(?ERTS_FP_THREAD_TEST,
- DrvDir)}
- end),
- ?line Result = receive {Tester, Res} -> Res end,
- ?line stop_node(Node),
- ?line Result.
+ Parent = self(),
+ DrvDir = proplists:get_value(data_dir, Config),
+ {ok,Node} = start_node(Config),
+ Tester = spawn_link(Node,
+ fun () ->
+ Parent !
+ {self(),
+ fp_drv_test(?ERTS_FP_THREAD_TEST,
+ DrvDir)}
+ end),
+ Result = receive {Tester, Res} -> Res end,
+ stop_node(Node),
+ Result.
fp_drv_test(Test, DrvDir) ->
- ?line Drv = fp_drv,
- ?line try
- begin
- ?line case erl_ddll:load_driver(DrvDir, Drv) of
- ok ->
- ok;
- {error, permanent} ->
- ok;
- {error, LoadError} ->
- exit({load_error,
- erl_ddll:format_error(LoadError)});
- LoadError ->
- exit({load_error, LoadError})
- end,
- case open_port({spawn, Drv}, []) of
- Port when is_port(Port) ->
- try port_control(Port, Test, "") of
- "ok" ->
- 0.0 = math:log(1.0),
- ok;
- [$s,$k,$i,$p,$:,$ | Reason] ->
- {skipped, Reason};
- Error ->
- exit(Error)
- after
- Port ! {self(), close},
- receive {Port, closed} -> ok end,
- false = lists:member(Port, erlang:ports()),
- ok
- end;
- Error ->
- exit({open_port_failed, Error})
- end
- end
- catch
- throw:Term -> ?line Term
- after
- erl_ddll:unload_driver(Drv)
- end.
+ Drv = fp_drv,
+ try
+ begin
+ case erl_ddll:load_driver(DrvDir, Drv) of
+ ok ->
+ ok;
+ {error, permanent} ->
+ ok;
+ {error, LoadError} ->
+ exit({load_error,
+ erl_ddll:format_error(LoadError)});
+ LoadError ->
+ exit({load_error, LoadError})
+ end,
+ case open_port({spawn, Drv}, []) of
+ Port when is_port(Port) ->
+ try port_control(Port, Test, "") of
+ "ok" ->
+ 0.0 = math:log(1.0),
+ ok;
+ [$s,$k,$i,$p,$:,$ | Reason] ->
+ {skipped, Reason};
+ Error ->
+ exit(Error)
+ after
+ Port ! {self(), close},
+ receive {Port, closed} -> ok end,
+ false = lists:member(Port, erlang:ports()),
+ ok
+ end;
+ Error ->
+ exit({open_port_failed, Error})
+ end
+ end
+ catch
+ throw:Term -> Term
+ after
+ erl_ddll:unload_driver(Drv)
+ end.
denormalized(Config) when is_list(Config) ->
- ?line Denormalized = 1.0e-307 / 1000,
- ?line roundtrip(Denormalized),
- ?line NegDenormalized = -1.0e-307 / 1000,
- ?line roundtrip(NegDenormalized),
+ Denormalized = 1.0e-307 / 1000,
+ roundtrip(Denormalized),
+ NegDenormalized = -1.0e-307 / 1000,
+ roundtrip(NegDenormalized),
ok.
roundtrip(N) ->
@@ -174,12 +148,12 @@ roundtrip(N) ->
N = binary_to_term(term_to_binary(N, [{minor_version,1}])).
match(Config) when is_list(Config) ->
- ?line one = match_1(1.0),
- ?line two = match_1(2.0),
- ?line a_lot = match_1(1000.0),
- ?line {'EXIT',_} = (catch match_1(0.5)),
+ one = match_1(1.0),
+ two = match_1(2.0),
+ a_lot = match_1(1000.0),
+ {'EXIT',_} = (catch match_1(0.5)),
ok.
-
+
match_1(1.0) -> one;
match_1(2.0) -> two;
match_1(1000.0) -> a_lot.
@@ -187,8 +161,8 @@ match_1(1000.0) -> a_lot.
%% Thanks to Per Gustafsson.
bad_float_unpack(Config) when is_list(Config) ->
- ?line Bin = <<-1:64>>,
- ?line -1 = bad_float_unpack_match(Bin),
+ Bin = <<-1:64>>,
+ -1 = bad_float_unpack_match(Bin),
ok.
bad_float_unpack_match(<<F:64/float>>) -> F;
@@ -240,75 +214,75 @@ span_cmp(Axis, Incr, Length) ->
%% Diff: How much the float and int should differ when comparing
span_cmp(Axis, Incr, Length, Diff) ->
[begin
- cmp(round(Axis*-1.0)+Diff+I*Incr,Axis*-1.0+I*Incr),
- cmp(Axis*-1.0+I*Incr,round(Axis*-1.0)-Diff+I*Incr)
+ cmp(round(Axis*-1.0)+Diff+I*Incr,Axis*-1.0+I*Incr),
+ cmp(Axis*-1.0+I*Incr,round(Axis*-1.0)-Diff+I*Incr)
end || I <- lists:seq((Length div 2)*-1,(Length div 2))],
[begin
- cmp(round(Axis)+Diff+I*Incr,Axis+I*Incr),
- cmp(Axis+I*Incr,round(Axis)-Diff+I*Incr)
+ cmp(round(Axis)+Diff+I*Incr,Axis+I*Incr),
+ cmp(Axis+I*Incr,round(Axis)-Diff+I*Incr)
end || I <- lists:seq((Length div 2)*-1,(Length div 2))].
cmp(Big,Small) when is_float(Big) ->
BigGtSmall = lists:flatten(
- io_lib:format("~f > ~p",[Big,Small])),
+ io_lib:format("~f > ~p",[Big,Small])),
BigLtSmall = lists:flatten(
- io_lib:format("~f < ~p",[Big,Small])),
+ io_lib:format("~f < ~p",[Big,Small])),
BigEqSmall = lists:flatten(
- io_lib:format("~f == ~p",[Big,Small])),
+ io_lib:format("~f == ~p",[Big,Small])),
SmallGtBig = lists:flatten(
- io_lib:format("~p > ~f",[Small,Big])),
+ io_lib:format("~p > ~f",[Small,Big])),
SmallLtBig = lists:flatten(
- io_lib:format("~p < ~f",[Small,Big])),
+ io_lib:format("~p < ~f",[Small,Big])),
SmallEqBig = lists:flatten(
- io_lib:format("~p == ~f",[Small,Big])),
+ io_lib:format("~p == ~f",[Small,Big])),
cmp(Big,Small,BigGtSmall,BigLtSmall,SmallGtBig,SmallLtBig,
- SmallEqBig,BigEqSmall);
+ SmallEqBig,BigEqSmall);
cmp(Big,Small) when is_float(Small) ->
BigGtSmall = lists:flatten(
- io_lib:format("~p > ~f",[Big,Small])),
+ io_lib:format("~p > ~f",[Big,Small])),
BigLtSmall = lists:flatten(
- io_lib:format("~p < ~f",[Big,Small])),
+ io_lib:format("~p < ~f",[Big,Small])),
BigEqSmall = lists:flatten(
- io_lib:format("~p == ~f",[Big,Small])),
+ io_lib:format("~p == ~f",[Big,Small])),
SmallGtBig = lists:flatten(
- io_lib:format("~f > ~p",[Small,Big])),
+ io_lib:format("~f > ~p",[Small,Big])),
SmallLtBig = lists:flatten(
- io_lib:format("~f < ~p",[Small,Big])),
+ io_lib:format("~f < ~p",[Small,Big])),
SmallEqBig = lists:flatten(
- io_lib:format("~f == ~p",[Small,Big])),
+ io_lib:format("~f == ~p",[Small,Big])),
cmp(Big,Small,BigGtSmall,BigLtSmall,SmallGtBig,SmallLtBig,
- SmallEqBig,BigEqSmall).
+ SmallEqBig,BigEqSmall).
cmp(Big,Small,BigGtSmall,BigLtSmall,SmallGtBig,SmallLtBig,
SmallEqBig,BigEqSmall) ->
{_,_,_,true} = {Big,Small,BigGtSmall,
- Big > Small},
+ Big > Small},
{_,_,_,false} = {Big,Small,BigLtSmall,
- Big < Small},
+ Big < Small},
{_,_,_,false} = {Big,Small,SmallGtBig,
- Small > Big},
+ Small > Big},
{_,_,_,true} = {Big,Small,SmallLtBig,
- Small < Big},
+ Small < Big},
{_,_,_,false} = {Big,Small,SmallEqBig,
- Small == Big},
+ Small == Big},
{_,_,_,false} = {Big,Small,BigEqSmall,
- Big == Small}.
+ Big == Small}.
id(I) -> I.
-
+
start_node(Config) when is_list(Config) ->
- ?line Pa = filename:dirname(code:which(?MODULE)),
- ?line Name = list_to_atom(atom_to_list(?MODULE)
- ++ "-"
- ++ atom_to_list(?config(testcase, Config))
- ++ "-"
- ++ integer_to_list(erlang:system_time(seconds))
- ++ "-"
- ++ integer_to_list(erlang:unique_integer([positive]))),
- ?line ?t:start_node(Name, slave, [{args, "-pa "++Pa}]).
+ Pa = filename:dirname(code:which(?MODULE)),
+ Name = list_to_atom(atom_to_list(?MODULE)
+ ++ "-"
+ ++ atom_to_list(proplists:get_value(testcase, Config))
+ ++ "-"
+ ++ integer_to_list(erlang:system_time(seconds))
+ ++ "-"
+ ++ integer_to_list(erlang:unique_integer([positive]))),
+ test_server:start_node(Name, slave, [{args, "-pa "++Pa}]).
stop_node(Node) ->
- ?t:stop_node(Node).
+ test_server:stop_node(Node).
%% Test that operations that might hide infinite intermediate results
@@ -318,8 +292,8 @@ hidden_inf(Config) when is_list(Config) ->
ZeroN = id(ZeroP) * (-1),
[hidden_inf_1(A, B, Z, 9.23e307)
|| A <- [1.0, -1.0, 3.1415, -0.00001000131, 3.57e257, ZeroP, ZeroN],
- B <- [1.0, -1.0, 3.1415, -0.00001000131, 3.57e257, ZeroP, ZeroN],
- Z <- [ZeroP, ZeroN]],
+ B <- [1.0, -1.0, 3.1415, -0.00001000131, 3.57e257, ZeroP, ZeroN],
+ Z <- [ZeroP, ZeroN]],
ok.
hidden_inf_1(A, B, Zero, Huge) ->
@@ -354,17 +328,15 @@ arith(_Config) ->
bignum = erts_internal:term_type(SMALL_MIN - 1),
L = [0, 0.0, FloatNegZero, 1, 1.0, 17, 17.0, 0.17,
- FLOAT_MIN, FLOAT_MAX,
- SMALL_MAX, SMALL_MAX+1,
- SMALL_MIN, SMALL_MIN-1,
- BIG1_MAX, BIG1_MAX+1,
- BIG2_MAX, BIG2_MAX+1,
- trunc(FLOAT_MAX), trunc(FLOAT_MAX)+1, trunc(FLOAT_MAX)*2,
-
- immed_badarg,
- "list badarg",
- {"boxed badarg"}
- ],
+ FLOAT_MIN, FLOAT_MAX,
+ SMALL_MAX, SMALL_MAX+1,
+ SMALL_MIN, SMALL_MIN-1,
+ BIG1_MAX, BIG1_MAX+1,
+ BIG2_MAX, BIG2_MAX+1,
+ trunc(FLOAT_MAX), trunc(FLOAT_MAX)+1, trunc(FLOAT_MAX)*2,
+ immed_badarg,
+ "list badarg",
+ {"boxed badarg"}],
foreach_pair(fun(A,B) -> do_bin_ops(A,B) end, L).
@@ -375,21 +347,21 @@ foreach_pair(F, L) ->
do_bin_ops(A, B) ->
Fun = fun(Op) ->
- Op(A,B),
- is_number(A) andalso Op(-A,B),
- is_number(B) andalso Op(A,-B),
- is_number(A) andalso is_number(B) andalso Op(-A,-B)
- end,
+ Op(A,B),
+ is_number(A) andalso Op(-A,B),
+ is_number(B) andalso Op(A,-B),
+ is_number(A) andalso is_number(B) andalso Op(-A,-B)
+ end,
lists:foreach(Fun,
- [fun op_add/2, fun op_sub/2, fun op_mul/2, fun op_div/2]).
+ [fun op_add/2, fun op_sub/2, fun op_mul/2, fun op_div/2]).
op_add(A, B) ->
Info = [A,B],
R = unify(catch A + B, Info),
R = unify(my_apply(erlang,'+',[A,B]), Info),
case R of
- _ when A + B =:= element(1,R) -> ok;
- {{'EXIT',badarith}, Info} -> ok
+ _ when A + B =:= element(1,R) -> ok;
+ {{'EXIT',badarith}, Info} -> ok
end.
op_sub(A, B) ->
@@ -397,8 +369,8 @@ op_sub(A, B) ->
R = unify(catch A - B, Info),
R = unify(my_apply(erlang,'-',[A,B]), Info),
case R of
- _ when A - B =:= element(1,R) -> ok;
- {{'EXIT',badarith}, Info} -> ok
+ _ when A - B =:= element(1,R) -> ok;
+ {{'EXIT',badarith}, Info} -> ok
end.
op_mul(A, B) ->
@@ -406,8 +378,8 @@ op_mul(A, B) ->
R = unify(catch A * B, Info),
R = unify(my_apply(erlang,'*',[A,B]), Info),
case R of
- _ when A * B =:= element(1,R) -> ok;
- {{'EXIT',badarith}, Info} -> ok
+ _ when A * B =:= element(1,R) -> ok;
+ {{'EXIT',badarith}, Info} -> ok
end.
op_div(A, B) ->
@@ -415,8 +387,8 @@ op_div(A, B) ->
R = unify(catch A / B, Info),
R = unify(my_apply(erlang,'/',[A,B]), Info),
case R of
- _ when A / B =:= element(1,R) -> ok;
- {{'EXIT',badarith}, Info} -> ok
+ _ when A / B =:= element(1,R) -> ok;
+ {{'EXIT',badarith}, Info} -> ok
end.
my_apply(M, F, A) ->
@@ -433,7 +405,7 @@ unify(Other, Info) ->
-define(epsilon, 1.0e-20).
check_epsilon(R,Val) ->
if erlang:abs(R-Val) < ?epsilon -> ok;
- true -> ?t:fail({R,Val})
+ true -> ct:fail({R,Val})
end.
t_mul_add_ops(Config) when is_list(Config) ->
diff --git a/erts/emulator/test/float_SUITE_data/has_fpe_bug.erl b/erts/emulator/test/float_SUITE_data/has_fpe_bug.erl
index 79ab74dfff..26837de274 100644
--- a/erts/emulator/test/float_SUITE_data/has_fpe_bug.erl
+++ b/erts/emulator/test/float_SUITE_data/has_fpe_bug.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/erts/emulator/test/fun_SUITE.erl b/erts/emulator/test/fun_SUITE.erl
index 6697a86fc5..26fa955e3c 100644
--- a/erts/emulator/test/fun_SUITE.erl
+++ b/erts/emulator/test/fun_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.
@@ -21,11 +21,7 @@
-module(fun_SUITE).
-compile({nowarn_deprecated_function, {erlang,hash,2}}).
--define(default_timeout, ?t:minutes(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,
+-export([all/0, suite/0,
bad_apply/1,bad_fun_call/1,badarity/1,ext_badarity/1,
equality/1,ordering/1,
fun_to_port/1,t_hash/1,t_phash/1,t_phash2/1,md5/1,
@@ -37,7 +33,10 @@
-include_lib("common_test/include/ct.hrl").
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap, {minutes, 1}}].
+
all() ->
[bad_apply, bad_fun_call, badarity, ext_badarity,
@@ -46,45 +45,18 @@ all() ->
const_propagation, t_arity, t_is_function2, t_fun_info,
t_fun_info_mfa].
-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.
-
-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) ->
@@ -96,7 +68,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) ->
@@ -108,23 +80,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) ->
@@ -135,74 +105,74 @@ 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 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.
@@ -214,29 +184,29 @@ nothing() ->
equality(Config) when is_list(Config) ->
F0 = fun() -> 1 end,
F0_copy = copy_term(F0),
- ?line true = eq(F0, F0),
- ?line true = eq(F0, F0_copy),
+ true = eq(F0, F0),
+ true = eq(F0, F0_copy),
%% Compare different arities.
F1 = fun(X) -> X + 1 end,
- ?line true = eq(F1, F1),
- ?line false = eq(F0, F1),
- ?line false = eq(F0_copy, F1),
+ true = eq(F1, F1),
+ false = eq(F0, F1),
+ false = eq(F0_copy, F1),
%% Compare different environments.
G1 = make_fun(1),
G2 = make_fun(2),
- ?line true = eq(G1, G1),
- ?line true = eq(G2, G2),
- ?line false = eq(G1, G2),
- ?line false = eq(G2, G1),
+ true = eq(G1, G1),
+ true = eq(G2, G2),
+ false = eq(G1, G2),
+ false = eq(G2, G1),
G1_copy = copy_term(G1),
- ?line true = eq(G1, G1_copy),
+ true = eq(G1, G1_copy),
%% Compare fun with binaries.
B = list_to_binary([7,8,9]),
- ?line false = eq(B, G1),
- ?line false = eq(G1, B),
+ false = eq(B, G1),
+ false = eq(G1, B),
%% Compare external funs.
FF0 = fun aa:blurf/0,
@@ -246,23 +216,23 @@ equality(Config) when is_list(Config) ->
FF3 = fun erlang:exit/2,
FF4 = fun z:ff/0,
- ?line true = eq(FF0, FF0),
- ?line true = eq(FF0, FF0_copy),
- ?line true = eq(FF1, FF1),
- ?line true = eq(FF2, FF2),
- ?line true = eq(FF3, FF3),
- ?line true = eq(FF4, FF4),
- ?line false = eq(FF0, FF1),
- ?line false = eq(FF0, FF2),
- ?line false = eq(FF0, FF3),
- ?line false = eq(FF0, FF4),
- ?line false = eq(FF1, FF0),
- ?line false = eq(FF1, FF2),
- ?line false = eq(FF1, FF3),
- ?line false = eq(FF1, FF4),
- ?line false = eq(FF2, FF3),
- ?line false = eq(FF2, FF4),
- ?line false = eq(FF3, FF4),
+ true = eq(FF0, FF0),
+ true = eq(FF0, FF0_copy),
+ true = eq(FF1, FF1),
+ true = eq(FF2, FF2),
+ true = eq(FF3, FF3),
+ true = eq(FF4, FF4),
+ false = eq(FF0, FF1),
+ false = eq(FF0, FF2),
+ false = eq(FF0, FF3),
+ false = eq(FF0, FF4),
+ false = eq(FF1, FF0),
+ false = eq(FF1, FF2),
+ false = eq(FF1, FF3),
+ false = eq(FF1, FF4),
+ false = eq(FF2, FF3),
+ false = eq(FF2, FF4),
+ false = eq(FF3, FF4),
%% EEP37
H1 = fun Fact(N) when N > 0 -> N * Fact(N - 1); Fact(0) -> 1 end,
@@ -285,7 +255,7 @@ copy_term(Term) ->
make_fun(X) ->
fun() -> X end.
-ordering(doc) -> "Tests ordering of funs.";
+%% Tests ordering of funs.
ordering(Config) when is_list(Config) ->
F1 = make_fun(1, 2),
F1_copy = copy_term(F1),
@@ -298,140 +268,139 @@ ordering(Config) when is_list(Config) ->
FF3 = fun erlang:exit/2,
FF4 = fun z:ff/0,
- ?line true = FF0 < FF1,
- ?line true = FF1 < FF2,
- ?line true = FF2 < FF3,
- ?line true = FF3 < FF4,
+ true = FF0 < FF1,
+ true = FF1 < FF2,
+ true = FF2 < FF3,
+ true = FF3 < FF4,
- ?line true = FF0 > F1,
- ?line true = FF0 > F2,
- ?line true = FF0 > F3,
- ?line true = FF4 > F1,
- ?line true = FF4 > F2,
- ?line true = FF4 > F3,
+ true = FF0 > F1,
+ true = FF0 > F2,
+ true = FF0 > F3,
+ true = FF4 > F1,
+ true = FF4 > F2,
+ true = FF4 > F3,
- ?line true = F1 == F1,
- ?line true = F1 == F1_copy,
- ?line true = F1 /= F2,
+ true = F1 == F1,
+ true = F1 == F1_copy,
+ true = F1 /= F2,
- ?line true = F1 < F2,
- ?line true = F2 > F1,
- ?line true = F2 < F3,
- ?line true = F3 > F2,
+ true = F1 < F2,
+ true = F2 > F1,
+ true = F2 < F3,
+ true = F3 > F2,
- ?line false = F1 > F2,
- ?line false = F2 > F3,
+ false = F1 > F2,
+ false = F2 > F3,
%% Compare with binaries.
B = list_to_binary([7,8,9,10]),
- ?line false = B == F1,
- ?line false = F1 == B,
+ false = B == F1,
+ false = F1 == B,
- ?line true = F1 < B,
- ?line true = B > F2,
+ true = F1 < B,
+ true = B > F2,
- ?line false = F1 > B,
- ?line false = B < F2,
+ false = F1 > B,
+ false = B < F2,
- ?line false = F1 >= B,
- ?line false = B =< F2,
+ false = F1 >= B,
+ false = B =< F2,
%% Compare module funs with binaries.
- ?line false = B == FF1,
- ?line false = FF1 == B,
+ false = B == FF1,
+ false = FF1 == B,
- ?line true = FF1 < B,
- ?line true = B > FF2,
+ true = FF1 < B,
+ true = B > FF2,
- ?line false = FF1 > B,
- ?line false = B < FF2,
+ false = FF1 > B,
+ false = B < FF2,
- ?line false = FF1 >= B,
- ?line false = B =< FF2,
+ false = FF1 >= B,
+ false = B =< FF2,
%% Create a port and ref.
- ?line Path = ?config(priv_dir, Config),
- ?line AFile = filename:join(Path, "vanilla_file"),
- ?line P = open_port(AFile, [out]),
- ?line R = make_ref(),
+ Path = proplists:get_value(priv_dir, Config),
+ AFile = filename:join(Path, "vanilla_file"),
+ P = open_port(AFile, [out]),
+ R = make_ref(),
%% Compare funs with ports and refs.
- ?line true = R < F3,
- ?line true = F3 > R,
- ?line true = F3 < P,
- ?line true = P > F3,
+ true = R < F3,
+ true = F3 > R,
+ true = F3 < P,
+ true = P > F3,
- ?line true = R =< F3,
- ?line true = F3 >= R,
- ?line true = F3 =< P,
- ?line true = P >= F3,
+ true = R =< F3,
+ true = F3 >= R,
+ true = F3 =< P,
+ true = P >= F3,
- ?line false = R > F3,
- ?line false = F3 < R,
- ?line false = F3 > P,
- ?line false = P < F3,
+ false = R > F3,
+ false = F3 < R,
+ false = F3 > P,
+ false = P < F3,
%% Compare funs with conses and nils.
- ?line true = F1 < [a],
- ?line true = F1 < [],
- ?line true = [a,b] > F1,
- ?line true = [] > F1,
+ true = F1 < [a],
+ true = F1 < [],
+ true = [a,b] > F1,
+ true = [] > F1,
- ?line false = [1] < F1,
- ?line false = [] < F1,
- ?line false = F1 > [2],
- ?line false = F1 > [],
+ false = [1] < F1,
+ false = [] < F1,
+ false = F1 > [2],
+ false = F1 > [],
- ?line false = [1] =< F1,
- ?line false = [] =< F1,
- ?line false = F1 >= [2],
- ?line false = F1 >= [],
+ false = [1] =< F1,
+ false = [] =< F1,
+ false = F1 >= [2],
+ false = F1 >= [],
%% Compare module funs with conses and nils.
- ?line true = FF1 < [a],
- ?line true = FF1 < [],
- ?line true = [a,b] > FF1,
- ?line true = [] > FF1,
+ true = FF1 < [a],
+ true = FF1 < [],
+ true = [a,b] > FF1,
+ true = [] > FF1,
- ?line false = [1] < FF1,
- ?line false = [] < FF1,
- ?line false = FF1 > [2],
- ?line false = FF1 > [],
+ false = [1] < FF1,
+ false = [] < FF1,
+ false = FF1 > [2],
+ false = FF1 > [],
- ?line false = [1] =< FF1,
- ?line false = [] =< FF1,
- ?line false = FF1 >= [2],
- ?line false = FF1 >= [],
+ false = [1] =< FF1,
+ false = [] =< FF1,
+ false = FF1 >= [2],
+ false = FF1 >= [],
ok.
make_fun(X, Y) ->
fun(A) -> A*X+Y end.
-fun_to_port(doc) -> "Try sending funs to ports (should fail).";
-fun_to_port(suite) -> [];
+%% Try sending funs to ports (should fail).
fun_to_port(Config) when is_list(Config) ->
- ?line fun_to_port(Config, xxx),
- ?line fun_to_port(Config, fun() -> 42 end),
- ?line fun_to_port(Config, [fun() -> 43 end]),
- ?line fun_to_port(Config, [1,fun() -> 44 end]),
- ?line fun_to_port(Config, [0,1|fun() -> 45 end]),
+ fun_to_port(Config, xxx),
+ fun_to_port(Config, fun() -> 42 end),
+ fun_to_port(Config, [fun() -> 43 end]),
+ fun_to_port(Config, [1,fun() -> 44 end]),
+ fun_to_port(Config, [0,1|fun() -> 45 end]),
B64K = build_io_list(65536),
- ?line fun_to_port(Config, [B64K,fun() -> 45 end]),
- ?line fun_to_port(Config, [B64K|fun() -> 45 end]),
+ fun_to_port(Config, [B64K,fun() -> 45 end]),
+ fun_to_port(Config, [B64K|fun() -> 45 end]),
ok.
fun_to_port(Config, IoList) ->
- Path = ?config(priv_dir, Config),
+ Path = proplists:get_value(priv_dir, Config),
AFile = filename:join(Path, "vanilla_file"),
Port = open_port(AFile, [out]),
case catch port_command(Port, IoList) of
{'EXIT',{badarg,_}} -> ok;
- Other -> ?t:fail({unexpected_retval,Other})
+ Other -> ct:fail({unexpected_retval,Other})
end.
build_io_list(0) -> [];
@@ -443,86 +412,83 @@ build_io_list(N) ->
1 -> [7,L|L]
end.
-t_hash(doc) -> "Test the hash/2 BIF on funs.";
-t_hash(suite) -> [];
+%% Test the hash/2 BIF on funs.
t_hash(Config) when is_list(Config) ->
F1 = fun(_X) -> 1 end,
F2 = fun(_X) -> 2 end,
- ?line true = hash(F1) /= hash(F2),
+ true = hash(F1) /= hash(F2),
G1 = make_fun(1, 2, 3),
G2 = make_fun(1, 2, 3),
G3 = make_fun(1, 2, 4),
- ?line true = hash(G1) == hash(G2),
- ?line true = hash(G2) /= hash(G3),
+ true = hash(G1) == hash(G2),
+ true = hash(G2) /= hash(G3),
FF0 = fun erlang:abs/1,
FF1 = fun erlang:exit/1,
FF2 = fun erlang:exit/2,
FF3 = fun blurf:exit/2,
- ?line true = hash(FF0) =/= hash(FF1),
- ?line true = hash(FF0) =/= hash(FF2),
- ?line true = hash(FF0) =/= hash(FF3),
- ?line true = hash(FF1) =/= hash(FF2),
- ?line true = hash(FF1) =/= hash(FF3),
- ?line true = hash(FF2) =/= hash(FF3),
+ true = hash(FF0) =/= hash(FF1),
+ true = hash(FF0) =/= hash(FF2),
+ true = hash(FF0) =/= hash(FF3),
+ true = hash(FF1) =/= hash(FF2),
+ true = hash(FF1) =/= hash(FF3),
+ true = hash(FF2) =/= hash(FF3),
ok.
hash(Term) ->
erlang:hash(Term, 16#7ffffff).
-t_phash(doc) -> "Test the phash/2 BIF on funs.";
-t_phash(suite) -> [];
+%% Test the phash/2 BIF on funs.
t_phash(Config) when is_list(Config) ->
F1 = fun(_X) -> 1 end,
F2 = fun(_X) -> 2 end,
- ?line true = phash(F1) /= phash(F2),
+ true = phash(F1) /= phash(F2),
G1 = make_fun(1, 2, 3),
G2 = make_fun(1, 2, 3),
G3 = make_fun(1, 2, 4),
- ?line true = phash(G1) == phash(G2),
- ?line true = phash(G2) /= phash(G3),
+ true = phash(G1) == phash(G2),
+ true = phash(G2) /= phash(G3),
FF0 = fun erlang:abs/1,
FF1 = fun erlang:exit/1,
FF2 = fun erlang:exit/2,
FF3 = fun blurf:exit/2,
- ?line true = phash(FF0) =/= phash(FF1),
- ?line true = phash(FF0) =/= phash(FF2),
- ?line true = phash(FF0) =/= phash(FF3),
- ?line true = phash(FF1) =/= phash(FF2),
- ?line true = phash(FF1) =/= phash(FF3),
- ?line true = phash(FF2) =/= phash(FF3),
+ true = phash(FF0) =/= phash(FF1),
+ true = phash(FF0) =/= phash(FF2),
+ true = phash(FF0) =/= phash(FF3),
+ true = phash(FF1) =/= phash(FF2),
+ true = phash(FF1) =/= phash(FF3),
+ true = phash(FF2) =/= phash(FF3),
ok.
phash(Term) ->
erlang:phash(Term, 16#7ffffff).
-t_phash2(doc) -> "Test the phash2/2 BIF on funs.";
-t_phash2(suite) -> [];
+%% Test the phash2/2 BIF on funs.
t_phash2(Config) when is_list(Config) ->
F1 = fun(_X) -> 1 end,
F2 = fun(_X) -> 2 end,
- ?line true = phash2(F1) /= phash2(F2),
+ true = phash2(F1) /= phash2(F2),
G1 = make_fun(1, 2, 3),
G2 = make_fun(1, 2, 3),
G3 = make_fun(1, 2, 4),
- ?line true = phash2(G1) == phash2(G2),
- ?line true = phash2(G2) /= phash2(G3),
+ true = phash2(G1) == phash2(G2),
+ true = phash2(G2) /= phash2(G3),
FF0 = fun erlang:abs/1,
FF1 = fun erlang:exit/1,
FF2 = fun erlang:exit/2,
FF3 = fun blurf:exit/2,
- ?line true = phash2(FF0) =/= phash2(FF1),
- ?line true = phash2(FF0) =/= phash2(FF2),
- ?line true = phash2(FF0) =/= phash2(FF3),
- ?line true = phash2(FF1) =/= phash2(FF2),
- ?line true = phash2(FF1) =/= phash2(FF3),
- ?line true = phash2(FF2) =/= phash2(FF3),
+ true = phash2(FF0) =/= phash2(FF1),
+ true = phash2(FF0) =/= phash2(FF2),
+ true = phash2(FF0) =/= phash2(FF3),
+ true = phash2(FF1) =/= phash2(FF2),
+ true = phash2(FF1) =/= phash2(FF3),
+ true = phash2(FF2) =/= phash2(FF3),
ok.
@@ -532,52 +498,51 @@ phash2(Term) ->
make_fun(X, Y, Z) ->
fun() -> {X,Y,Z} end.
-md5(doc) -> "Test that MD5 bifs reject funs properly.";
-md5(suite) -> [];
+%% Test that MD5 bifs reject funs properly.
md5(Config) when is_list(Config) ->
_ = size(erlang:md5_init()),
%% Try funs in the i/o list.
- ?line bad_md5(fun(_X) -> 42 end),
- ?line bad_md5([fun(_X) -> 43 end]),
- ?line bad_md5([1,fun(_X) -> 44 end]),
- ?line bad_md5([1|fun(_X) -> 45 end]),
- ?line B64K = build_io_list(65536),
- ?line bad_md5([B64K,fun(_X) -> 46 end]),
- ?line bad_md5([B64K|fun(_X) -> 46 end]),
+ bad_md5(fun(_X) -> 42 end),
+ bad_md5([fun(_X) -> 43 end]),
+ bad_md5([1,fun(_X) -> 44 end]),
+ bad_md5([1|fun(_X) -> 45 end]),
+ B64K = build_io_list(65536),
+ bad_md5([B64K,fun(_X) -> 46 end]),
+ bad_md5([B64K|fun(_X) -> 46 end]),
ok.
bad_md5(Bad) ->
{'EXIT',{badarg,_}} = (catch erlang:md5(Bad)).
refc(Config) when is_list(Config) ->
- ?line F1 = fun_factory(2),
- ?line {refc,2} = erlang:fun_info(F1, refc),
- ?line F2 = fun_factory(42),
- ?line {refc,3} = erlang:fun_info(F1, refc),
+ F1 = fun_factory(2),
+ {refc,2} = erlang:fun_info(F1, refc),
+ F2 = fun_factory(42),
+ {refc,3} = erlang:fun_info(F1, refc),
- ?line process_flag(trap_exit, true),
- ?line Pid = spawn_link(fun() -> {refc,4} = erlang:fun_info(F1, refc) end),
+ process_flag(trap_exit, true),
+ Pid = spawn_link(fun() -> {refc,4} = erlang:fun_info(F1, refc) end),
receive
{'EXIT',Pid,normal} -> ok;
- Other -> ?line ?t:fail({unexpected,Other})
+ Other -> ct:fail({unexpected,Other})
end,
- ?line process_flag(trap_exit, false),
- ?line {refc,3} = erlang:fun_info(F1, refc),
+ process_flag(trap_exit, false),
+ {refc,3} = erlang:fun_info(F1, refc),
%% Garbage collect. Only the F2 fun will be left.
- ?line 7 = F1(5),
- ?line true = erlang:garbage_collect(),
- ?line 40 = F2(-2),
- ?line {refc,2} = erlang:fun_info(F2, refc),
+ 7 = F1(5),
+ true = erlang:garbage_collect(),
+ 40 = F2(-2),
+ {refc,2} = erlang:fun_info(F2, refc),
ok.
fun_factory(Const) ->
fun(X) -> X + Const end.
refc_ets(Config) when is_list(Config) ->
- ?line F = fun(X) -> X + 33 end,
- ?line {refc,2} = erlang:fun_info(F, refc),
+ F = fun(X) -> X + 33 end,
+ {refc,2} = erlang:fun_info(F, refc),
refc_ets_set(F, [set]),
refc_ets_set(F, [ordered_set]),
@@ -586,115 +551,112 @@ refc_ets(Config) when is_list(Config) ->
ok.
refc_ets_set(F1, Options) ->
- ?line io:format("~p", [Options]),
- ?line Tab = ets:new(kalle, Options),
- ?line true = ets:insert(Tab, {a_key,F1}),
- ?line 3 = fun_refc(F1),
- ?line [{a_key,F3}] = ets:lookup(Tab, a_key),
- ?line 4 = fun_refc(F1),
- ?line true = ets:insert(Tab, {a_key,not_a_fun}),
- ?line 3 = fun_refc(F1),
- ?line true = ets:insert(Tab, {another_key,F1}),
- ?line 4 = fun_refc(F1),
- ?line true = ets:delete(Tab),
- ?line 3 = fun_refc(F1),
- ?line 10 = F3(-23),
- ?line true = erlang:garbage_collect(),
- ?line 2 = fun_refc(F1),
+ io:format("~p", [Options]),
+ Tab = ets:new(kalle, Options),
+ true = ets:insert(Tab, {a_key,F1}),
+ 3 = fun_refc(F1),
+ [{a_key,F3}] = ets:lookup(Tab, a_key),
+ 4 = fun_refc(F1),
+ true = ets:insert(Tab, {a_key,not_a_fun}),
+ 3 = fun_refc(F1),
+ true = ets:insert(Tab, {another_key,F1}),
+ 4 = fun_refc(F1),
+ true = ets:delete(Tab),
+ 3 = fun_refc(F1),
+ 10 = F3(-23),
+ true = erlang:garbage_collect(),
+ 2 = fun_refc(F1),
ok.
refc_ets_bag(F1, Options) ->
- ?line io:format("~p", [Options]),
- ?line Tab = ets:new(kalle, Options),
- ?line true = ets:insert(Tab, {a_key,F1}),
- ?line 3 = fun_refc(F1),
- ?line [{a_key,F3}] = ets:lookup(Tab, a_key),
- ?line 4 = fun_refc(F1),
- ?line true = ets:insert(Tab, {a_key,not_a_fun}),
- ?line 4 = fun_refc(F1),
- ?line true = ets:insert(Tab, {another_key,F1}),
- ?line 5 = fun_refc(F1),
- ?line true = ets:delete(Tab),
- ?line 3 = fun_refc(F1),
- ?line 10 = F3(-23),
- ?line true = erlang:garbage_collect(),
- ?line 2 = fun_refc(F1),
+ io:format("~p", [Options]),
+ Tab = ets:new(kalle, Options),
+ true = ets:insert(Tab, {a_key,F1}),
+ 3 = fun_refc(F1),
+ [{a_key,F3}] = ets:lookup(Tab, a_key),
+ 4 = fun_refc(F1),
+ true = ets:insert(Tab, {a_key,not_a_fun}),
+ 4 = fun_refc(F1),
+ true = ets:insert(Tab, {another_key,F1}),
+ 5 = fun_refc(F1),
+ true = ets:delete(Tab),
+ 3 = fun_refc(F1),
+ 10 = F3(-23),
+ true = erlang:garbage_collect(),
+ 2 = fun_refc(F1),
ok.
refc_dist(Config) when is_list(Config) ->
- ?line {ok,Node} = start_node(fun_SUITE_refc_dist),
- ?line process_flag(trap_exit, true),
- ?line Pid = spawn_link(Node,
- fun() -> receive
- Fun when is_function(Fun) ->
- 2 = fun_refc(Fun),
- exit({normal,Fun}) end
- end),
- ?line F = fun() -> 42 end,
- ?line 2 = fun_refc(F),
- ?line Pid ! F,
+ {ok,Node} = start_node(fun_SUITE_refc_dist),
+ process_flag(trap_exit, true),
+ Pid = spawn_link(Node, fun() -> receive
+ Fun when is_function(Fun) ->
+ 2 = fun_refc(Fun),
+ exit({normal,Fun}) end
+ end),
+ F = fun() -> 42 end,
+ 2 = fun_refc(F),
+ Pid ! F,
F2 = receive
{'EXIT',Pid,{normal,Fun}} -> Fun;
- Other -> ?line ?t:fail({unexpected,Other})
+ Other -> ct:fail({unexpected,Other})
end,
%% dist.c:net_mess2 have a reference to Fun for a while since
%% Fun is passed in an exit signal. Wait until it is gone.
- ?line wait_until(fun () -> 4 =/= fun_refc(F2) end),
- ?line 3 = fun_refc(F2),
- ?line true = erlang:garbage_collect(),
- ?line 2 = fun_refc(F),
+ wait_until(fun () -> 4 =/= fun_refc(F2) end),
+ 3 = fun_refc(F2),
+ true = erlang:garbage_collect(),
+ 2 = fun_refc(F),
refc_dist_send(Node, F).
refc_dist_send(Node, F) ->
- ?line Pid = spawn_link(Node,
- fun() -> receive
- {To,Fun} when is_function(Fun) ->
- wait_until(fun () ->
- 2 =:= fun_refc(Fun)
- end),
- To ! Fun
- end
- end),
- ?line 2 = fun_refc(F),
+ Pid = spawn_link(Node, fun() -> receive
+ {To,Fun} when is_function(Fun) ->
+ wait_until(fun () ->
+ 2 =:= fun_refc(Fun)
+ end),
+ To ! Fun
+ end
+ end),
+ 2 = fun_refc(F),
Pid ! {self(),F},
F2 = receive
Fun when is_function(Fun) -> Fun;
- Other -> ?line ?t:fail({unexpected,Other})
+ Other -> ct:fail({unexpected,Other})
end,
receive {'EXIT',Pid,normal} -> ok end,
%% No reference from dist.c:net_mess2 since Fun is passed
%% in an ordinary message.
- ?line 3 = fun_refc(F),
- ?line 3 = fun_refc(F2),
+ 3 = fun_refc(F),
+ 3 = fun_refc(F2),
refc_dist_reg_send(Node, F).
refc_dist_reg_send(Node, F) ->
- ?line true = erlang:garbage_collect(),
- ?line 2 = fun_refc(F),
- ?line Ref = make_ref(),
- ?line Me = self(),
- ?line Pid = spawn_link(Node,
- fun() ->
- true = register(my_fun_tester, self()),
- Me ! Ref,
- receive
- {Me,Fun} when is_function(Fun) ->
- 2 = fun_refc(Fun),
- Me ! Fun
- end
- end),
+ true = erlang:garbage_collect(),
+ 2 = fun_refc(F),
+ Ref = make_ref(),
+ Me = self(),
+ Pid = spawn_link(Node, fun() ->
+ true = register(my_fun_tester, self()),
+ Me ! Ref,
+ receive
+ {Me,Fun} when is_function(Fun) ->
+ 2 = fun_refc(Fun),
+ Me ! Fun
+ end
+ end),
erlang:yield(),
- ?line 2 = fun_refc(F),
+ 2 = fun_refc(F),
receive Ref -> ok end,
{my_fun_tester,Node} ! {self(),F},
F2 = receive
Fun when is_function(Fun) -> Fun;
- Other -> ?line ?t:fail({unexpected,Other})
+ Other -> ct:fail({unexpected,Other})
end,
receive {'EXIT',Pid,normal} -> ok end,
- ?line 3 = fun_refc(F),
- ?line 3 = fun_refc(F2),
+ 3 = fun_refc(F),
+ 3 = fun_refc(F2),
ok.
fun_refc(F) ->
@@ -702,67 +664,67 @@ fun_refc(F) ->
Count.
const_propagation(Config) when is_list(Config) ->
- ?line Fun1 = fun start_node/1,
- ?line 2 = fun_refc(Fun1),
- ?line Fun2 = Fun1,
- ?line my_cmp({Fun1,Fun2}),
-
- ?line Fun3 = fun() -> ok end,
- ?line 2 = fun_refc(Fun3),
- ?line Fun4 = Fun3,
- ?line my_cmp({Fun3,Fun4}),
+ Fun1 = fun start_node/1,
+ 2 = fun_refc(Fun1),
+ Fun2 = Fun1,
+ my_cmp({Fun1,Fun2}),
+
+ Fun3 = fun() -> ok end,
+ 2 = fun_refc(Fun3),
+ Fun4 = Fun3,
+ my_cmp({Fun3,Fun4}),
ok.
my_cmp({Fun,Fun}) -> ok;
my_cmp({Fun1,Fun2}) ->
io:format("Fun1: ~p", [erlang:fun_info(Fun1)]),
io:format("Fun2: ~p", [erlang:fun_info(Fun2)]),
- ?t:fail().
+ ct:fail(no_match).
t_arity(Config) when is_list(Config) ->
- ?line 0 = fun_arity(fun() -> ok end),
- ?line 0 = fun_arity(fun() -> Config end),
- ?line 1 = fun_arity(fun(X) -> X+1 end),
- ?line 1 = fun_arity(fun(X) -> Config =:= X end),
+ 0 = fun_arity(fun() -> ok end),
+ 0 = fun_arity(fun() -> Config end),
+ 1 = fun_arity(fun(X) -> X+1 end),
+ 1 = fun_arity(fun(X) -> Config =:= X end),
A = id(42),
%% Test that the arity is transferred properly.
- ?line process_flag(trap_exit, true),
- ?line {ok,Node} = start_node(fun_test_arity),
- ?line hello_world = spawn_call(Node, fun() -> hello_world end),
- ?line 0 = spawn_call(Node, fun(X) -> X end),
- ?line 42 = spawn_call(Node, fun(_X) -> A end),
- ?line 43 = spawn_call(Node, fun(X, Y) -> A+X+Y end),
- ?line 1 = spawn_call(Node, fun(X, Y) -> X+Y end),
- ?line 45 = spawn_call(Node, fun(X, Y, Z) -> A+X+Y+Z end),
+ process_flag(trap_exit, true),
+ {ok,Node} = start_node(fun_test_arity),
+ hello_world = spawn_call(Node, fun() -> hello_world end),
+ 0 = spawn_call(Node, fun(X) -> X end),
+ 42 = spawn_call(Node, fun(_X) -> A end),
+ 43 = spawn_call(Node, fun(X, Y) -> A+X+Y end),
+ 1 = spawn_call(Node, fun(X, Y) -> X+Y end),
+ 45 = spawn_call(Node, fun(X, Y, Z) -> A+X+Y+Z end),
ok.
t_is_function2(Config) when is_list(Config) ->
false = is_function(id({a,b}), 0),
false = is_function(id({a,b}), 234343434333433433),
- ?line true = is_function(fun() -> ok end, 0),
- ?line true = is_function(fun(_) -> ok end, 1),
- ?line false = is_function(fun(_) -> ok end, 0),
+ true = is_function(fun() -> ok end, 0),
+ true = is_function(fun(_) -> ok end, 1),
+ false = is_function(fun(_) -> ok end, 0),
- ?line true = is_function(fun erlang:abs/1, 1),
- ?line true = is_function(fun erlang:abs/99, 99),
- ?line false = is_function(fun erlang:abs/1, 0),
- ?line false = is_function(fun erlang:abs/99, 0),
+ true = is_function(fun erlang:abs/1, 1),
+ true = is_function(fun erlang:abs/99, 99),
+ false = is_function(fun erlang:abs/1, 0),
+ false = is_function(fun erlang:abs/99, 0),
- ?line false = is_function(id(self()), 0),
- ?line false = is_function(id({a,b,c}), 0),
- ?line false = is_function(id({a}), 0),
- ?line false = is_function(id([a,b,c]), 0),
+ false = is_function(id(self()), 0),
+ false = is_function(id({a,b,c}), 0),
+ false = is_function(id({a}), 0),
+ false = is_function(id([a,b,c]), 0),
%% Bad arity argument.
- ?line bad_arity(a),
- ?line bad_arity(-1),
- ?line bad_arity(-9738974938734938793873498378),
- ?line bad_arity([]),
- ?line bad_arity(fun() -> ok end),
- ?line bad_arity({}),
- ?line bad_arity({a,b}),
- ?line bad_arity(self()),
+ bad_arity(a),
+ bad_arity(-1),
+ bad_arity(-9738974938734938793873498378),
+ bad_arity([]),
+ bad_arity(fun() -> ok end),
+ bad_arity({}),
+ bad_arity({a,b}),
+ bad_arity(self()),
ok.
bad_arity(A) ->
@@ -771,59 +733,57 @@ bad_arity(A) ->
ok.
t_fun_info(Config) when is_list(Config) ->
- ?line F = fun t_fun_info/1,
- ?line try F(blurf) of
+ F = fun t_fun_info/1,
+ try F(blurf) of
FAny ->
- io:format("should fail; returned ~p\n", [FAny]),
- ?line ?t:fail()
+ ct:fail("should fail; returned ~p\n", [FAny])
catch
error:function_clause -> ok
end,
- ?line {module,?MODULE} = erlang:fun_info(F, module),
- ?line case erlang:fun_info(F, name) of
+ {module,?MODULE} = erlang:fun_info(F, module),
+ case erlang:fun_info(F, name) of
undefined ->
- ?line ?t:fail();
+ ct:fail(no_fun_info);
_ -> ok
end,
- ?line {arity,1} = erlang:fun_info(F, arity),
- ?line {env,[]} = erlang:fun_info(F, env),
- ?line verify_not_undef(F, index),
- ?line verify_not_undef(F, uniq),
- ?line verify_not_undef(F, new_index),
- ?line verify_not_undef(F, new_uniq),
- ?line verify_not_undef(F, refc),
- ?line {'EXIT',_} = (catch erlang:fun_info(F, blurf)),
+ {arity,1} = erlang:fun_info(F, arity),
+ {env,[]} = erlang:fun_info(F, env),
+ verify_not_undef(F, index),
+ verify_not_undef(F, uniq),
+ verify_not_undef(F, new_index),
+ verify_not_undef(F, new_uniq),
+ verify_not_undef(F, refc),
+ {'EXIT',_} = (catch erlang:fun_info(F, blurf)),
%% Module fun.
- ?line FF = fun ?MODULE:t_fun_info/1,
- ?line try FF(blurf) of
+ FF = fun ?MODULE:t_fun_info/1,
+ try FF(blurf) of
FFAny ->
- io:format("should fail; returned ~p\n", [FFAny]),
- ?line ?t:fail()
+ ct:fail("should fail; returned ~p\n", [FFAny])
catch
error:function_clause -> ok
end,
- ?line {module,?MODULE} = erlang:fun_info(FF, module),
- ?line {name,t_fun_info} = erlang:fun_info(FF, name),
- ?line {arity,1} = erlang:fun_info(FF, arity),
- ?line {env,[]} = erlang:fun_info(FF, env),
- ?line verify_undef(FF, index),
- ?line verify_undef(FF, uniq),
- ?line verify_undef(FF, new_index),
- ?line verify_undef(FF, new_uniq),
- ?line verify_undef(FF, refc),
- ?line {'EXIT',_} = (catch erlang:fun_info(FF, blurf)),
+ {module,?MODULE} = erlang:fun_info(FF, module),
+ {name,t_fun_info} = erlang:fun_info(FF, name),
+ {arity,1} = erlang:fun_info(FF, arity),
+ {env,[]} = erlang:fun_info(FF, env),
+ verify_undef(FF, index),
+ verify_undef(FF, uniq),
+ verify_undef(FF, new_index),
+ verify_undef(FF, new_uniq),
+ verify_undef(FF, refc),
+ {'EXIT',_} = (catch erlang:fun_info(FF, blurf)),
%% Not fun.
- ?line bad_info(abc),
- ?line bad_info(42),
- ?line bad_info({fun erlang:list_to_integer/1}),
- ?line bad_info([42]),
- ?line bad_info([]),
- ?line bad_info(self()),
- ?line bad_info(<<>>),
- ?line bad_info(<<1,2>>),
+ bad_info(abc),
+ bad_info(42),
+ bad_info({fun erlang:list_to_integer/1}),
+ bad_info([42]),
+ bad_info([]),
+ bad_info(self()),
+ bad_info(<<>>),
+ bad_info(<<1,2>>),
ok.
t_fun_info_mfa(Config) when is_list(Config) ->
@@ -847,8 +807,7 @@ t_fun_info_mfa(Config) when is_list(Config) ->
bad_info(Term) ->
try erlang:fun_info(Term, module) of
Any ->
- io:format("should fail; returned ~p\n", [Any]),
- ?t:fail()
+ ict:fail("should fail; returned ~p\n", [Any])
catch
error:badarg -> ok
end.
@@ -859,7 +818,7 @@ verify_undef(Fun, Tag) ->
verify_not_undef(Fun, Tag) ->
case erlang:fun_info(Fun, Tag) of
{Tag,undefined} ->
- ?t:fail();
+ ct:fail("tag ~w not defined in fun_info", [Tag]);
{Tag,_} -> ok
end.
@@ -884,15 +843,15 @@ spawn_call(Node, AFun) ->
Pid ! {AFun,AFun,AFun},
Res = receive
{result,R} -> R;
- Other -> ?t:fail({bad_message,Other})
+ Other -> ct:fail({bad_message,Other})
after 10000 ->
- ?t:fail(timeout_waiting_for_result)
+ ct:fail(timeout_waiting_for_result)
end,
receive
{'EXIT',Pid,normal} -> ok;
- Other2 -> ?t:fail({bad_message_waiting_for_exit,Other2})
+ Other2 -> ct:fail({bad_message_waiting_for_exit,Other2})
after 10000 ->
- ?t:fail(timeout_waiting_for_exit)
+ ct:fail(timeout_waiting_for_exit)
end,
Res.
@@ -911,6 +870,3 @@ wait_until(Fun) ->
true -> ok;
_ -> receive after 100 -> wait_until(Fun) end
end.
-
-% stop_node(Node) ->
-% test_server:stop_node(Node).
diff --git a/erts/emulator/test/fun_r13_SUITE.erl b/erts/emulator/test/fun_r13_SUITE.erl
index 39e8b3c324..a45ed08b9d 100644
--- a/erts/emulator/test/fun_r13_SUITE.erl
+++ b/erts/emulator/test/fun_r13_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.
@@ -21,77 +21,53 @@
-module(fun_r13_SUITE).
-compile(r13).
--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,dist_old_release/1]).
+-export([all/0, suite/0,
+ dist_old_release/1]).
--define(default_timeout, ?t:minutes(1)).
-include_lib("common_test/include/ct.hrl").
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap, {minutes, 1}}].
all() ->
[dist_old_release].
-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.
-
dist_old_release(Config) when is_list(Config) ->
- case ?t:is_release_available("r12b") of
- true -> do_dist_old(Config);
- false -> {skip,"No R12B found"}
+ case test_server:is_release_available("r12b") of
+ true -> do_dist_old(Config);
+ false -> {skip,"No R12B found"}
end.
do_dist_old(Config) when is_list(Config) ->
- ?line Pa = filename:dirname(code:which(?MODULE)),
+ Pa = filename:dirname(code:which(?MODULE)),
Name = fun_dist_r12,
- ?line {ok,Node} = ?t:start_node(Name, peer,
- [{args,"-pa "++Pa},
- {erl,[{release,"r12b"}]}]),
-
- ?line Pid = spawn_link(Node,
- fun() ->
- receive
- Fun when is_function(Fun) ->
- R12BFun = fun(H) -> cons(H, [b,c]) end,
- Fun(Fun, R12BFun)
- end
- end),
+ {ok,Node} = test_server:start_node(Name, peer,
+ [{args,"-pa "++Pa},
+ {erl,[{release,"r12b"}]}]),
+
+ Pid = spawn_link(Node,
+ fun() ->
+ receive
+ Fun when is_function(Fun) ->
+ R12BFun = fun(H) -> cons(H, [b,c]) end,
+ Fun(Fun, R12BFun)
+ end
+ end),
Self = self(),
Fun = fun(F, R12BFun) ->
- {pid,Self} = erlang:fun_info(F, pid),
- {module,?MODULE} = erlang:fun_info(F, module),
- Self ! {ok,F,R12BFun}
- end,
- ?line Pid ! Fun,
- ?line receive
- {ok,Fun,R12BFun} ->
- ?line [a,b,c] = R12BFun(a);
- Other ->
- ?line ?t:fail({bad_message,Other})
- end,
+ {pid,Self} = erlang:fun_info(F, pid),
+ {module,?MODULE} = erlang:fun_info(F, module),
+ Self ! {ok,F,R12BFun}
+ end,
+ Pid ! Fun,
+ receive
+ {ok,Fun,R12BFun} ->
+ [a,b,c] = R12BFun(a);
+ Other ->
+ ct:fail({bad_message,Other})
+ end,
+ true = test_server:stop_node(Node),
ok.
cons(H, T) ->
diff --git a/erts/emulator/test/gc_SUITE.erl b/erts/emulator/test/gc_SUITE.erl
index cb000fd45f..8a600b7d9f 100644
--- a/erts/emulator/test/gc_SUITE.erl
+++ b/erts/emulator/test/gc_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.
@@ -23,44 +23,26 @@
-module(gc_SUITE).
-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([all/0, suite/0]).
--define(default_timeout, ?t:minutes(10)).
+-export([grow_heap/1, grow_stack/1, grow_stack_heap/1, max_heap_size/1]).
--export([grow_heap/1, grow_stack/1, grow_stack_heap/1]).
-
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]}].
all() ->
- [grow_heap, grow_stack, grow_stack_heap].
-
-groups() ->
- [].
-
-init_per_suite(Config) ->
- Config.
-
-end_per_suite(_Config) ->
- ok.
-
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
+ [grow_heap, grow_stack, grow_stack_heap, max_heap_size].
-grow_heap(doc) -> ["Produce a growing list of elements, ",
- "for X calls, then drop one item per call",
- "until the list is empty."];
+%% Produce a growing list of elements,
+%% for X calls, then drop one item per call
+%% until the list is empty.
grow_heap(Config) when is_list(Config) ->
- Dog = test_server:timetrap(test_server:minutes(40)),
+ ct:timetrap({minutes, 40}),
ok = grow_heap1(256),
ok = grow_heap1(512),
ok = grow_heap1(1024),
ok = grow_heap1(2048),
- test_server:timetrap_cancel(Dog),
ok.
grow_heap1(Len) ->
@@ -86,14 +68,13 @@ grow_heap1([_|List], MaxLen, CurLen, down) ->
-grow_stack(doc) -> ["Increase and decrease stack size, and ",
- "drop off some garbage from time to time."];
+%% Increase and decrease stack size, and
+%% drop off some garbage from time to time.
grow_stack(Config) when is_list(Config) ->
- Dog = test_server:timetrap(test_server:minutes(80)),
+ ct:timetrap({minutes, 80}),
show_heap("before:"),
grow_stack1(200, 0),
show_heap("after:"),
- test_server:timetrap_cancel(Dog),
ok.
grow_stack1(0, _) ->
@@ -110,14 +91,12 @@ grow_stack1(Recs, CurRecs) ->
%% Let's see how BEAM handles this one...
-grow_stack_heap(doc) -> ["While growing the heap, bounces the size ",
- "of the stack, and while reducing the heap",
- "bounces the stack usage."];
+%% While growing the heap, bounces the size of the
+%% stack, and while reducing the heap, bounces the stack usage.
grow_stack_heap(Config) when is_list(Config) ->
- Dog = test_server:timetrap(test_server:minutes(40)),
+ ct:timetrap({minutes, 40}),
grow_stack_heap1(16),
grow_stack_heap1(32),
- test_server:timetrap_cancel(Dog),
ok.
grow_stack_heap1(MaxLen) ->
@@ -184,3 +163,30 @@ show_heap(String) ->
{stack_size, SSize}=process_info(self(), stack_size),
io:format("Heap/Stack "++String++"~p/~p", [HSize, SSize]).
+%% Test that doing a remote GC that triggers the max heap size
+%% kills the process.
+max_heap_size(_Config) ->
+
+ Pid = spawn_opt(fun long_receive/0,[{max_heap_size, 1024},
+ {message_queue_data, on_heap}]),
+ [Pid ! lists:duplicate(I,I) || I <- lists:seq(1,100)],
+ Ref = erlang:monitor(process, Pid),
+
+ %% Force messages to be viewed as part of heap
+ erlang:process_info(Pid, messages),
+
+ %% Do the GC that triggers max heap
+ erlang:garbage_collect(Pid),
+
+ %% Verify that max heap was triggered
+ receive
+ {'DOWN', Ref, process, Pid, killed} -> ok
+ after 5000 ->
+ ct:fail({process_did_not_die, Pid, erlang:process_info(Pid)})
+ end.
+
+long_receive() ->
+ receive
+ after 10000 ->
+ ok
+ end.
diff --git a/erts/emulator/test/guard_SUITE.erl b/erts/emulator/test/guard_SUITE.erl
index 2e03983c4f..e155e5f49f 100644
--- a/erts/emulator/test/guard_SUITE.erl
+++ b/erts/emulator/test/guard_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.
@@ -20,8 +20,8 @@
-module(guard_SUITE).
--export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
- init_per_group/2,end_per_group/2, bad_arith/1, bad_tuple/1,
+-export([all/0, suite/0,
+ bad_arith/1, bad_tuple/1,
test_heap_guards/1, guard_bifs/1,
type_tests/1,guard_bif_binary_part/1]).
@@ -36,27 +36,12 @@ all() ->
[bad_arith, bad_tuple, test_heap_guards, guard_bifs,
type_tests, guard_bif_binary_part].
-groups() ->
- [].
-init_per_suite(Config) ->
- Config.
-
-end_per_suite(_Config) ->
- ok.
-
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
-
-
-bad_arith(doc) -> "Test that a bad arithmetic operation in a guard works correctly.";
+%% Test that a bad arithmetic operation in a guard works correctly.
bad_arith(Config) when is_list(Config) ->
- ?line 5 = bad_arith1(2, 3),
- ?line 10 = bad_arith1(1, infinity),
- ?line 10 = bad_arith1(infinity, 1),
+ 5 = bad_arith1(2, 3),
+ 10 = bad_arith1(1, infinity),
+ 10 = bad_arith1(infinity, 1),
ok.
bad_arith1(T1, T2) when T1+T2 < 10 ->
@@ -64,12 +49,12 @@ bad_arith1(T1, T2) when T1+T2 < 10 ->
bad_arith1(_, _) ->
10.
-bad_tuple(doc) -> "Test that bad arguments to element/2 are handled correctly.";
+%% Test that bad arguments to element/2 are handled correctly.
bad_tuple(Config) when is_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 ->
@@ -79,26 +64,25 @@ bad_tuple1(T) when element(3, T) == y ->
bad_tuple1(_) ->
error.
-test_heap_guards(doc) -> "";
test_heap_guards(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:minutes(2)),
+ ct:timetrap({minutes, 2}),
- ?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 a_case/1, [Tuple], [Tuple]),
- ?line 'try'(fun a_case/1, [List], [List, List]),
- ?line 'try'(fun a_case/1, [a], [a]),
+ 'try'(fun a_case/1, [Tuple], [Tuple]),
+ 'try'(fun a_case/1, [List], [List, List]),
+ 'try'(fun a_case/1, [a], [a]),
- ?line 'try'(fun an_if/1, [Tuple], [Tuple]),
- ?line 'try'(fun an_if/1, [List], [List, List]),
- ?line 'try'(fun an_if/1, [a], [a]),
+ 'try'(fun an_if/1, [Tuple], [Tuple]),
+ 'try'(fun an_if/1, [List], [List, List]),
+ 'try'(fun an_if/1, [a], [a]),
- ?line 'try'(fun receive_test/1, [Tuple], [Tuple]),
- ?line 'try'(fun receive_test/1, [List], [List, List]),
- ?line 'try'(fun receive_test/1, [a], [a]),
- ?line test_server:timetrap_cancel(Dog).
+ 'try'(fun receive_test/1, [Tuple], [Tuple]),
+ 'try'(fun receive_test/1, [List], [List, List]),
+ 'try'(fun receive_test/1, [a], [a]),
+ ok.
a_case(V) ->
case V of
@@ -143,12 +127,11 @@ a_receive() ->
Pid = spawn_link(?MODULE, init, [Fun,Args,list_to_tuple(Filler)]),
receive
{'EXIT', Pid, {result, Result}} ->
- ?line 'try'(Iter-1, Fun, Args, Result, [0|Filler]);
+ 'try'(Iter-1, Fun, Args, Result, [0|Filler]);
{result, Other} ->
- ?line io:format("Expected ~p; got ~p~n", [Result, Other]),
- ?line test_server:fail();
+ ct:fail("Expected ~p; got ~p~n", [Result, Other]);
Other ->
- ?line test_server:fail({unexpected_message, Other})
+ ct:fail({unexpected_message, Other})
end.
init(Fun, Args, Filler) ->
@@ -165,15 +148,14 @@ mask_error({'EXIT',{Err,_}}) ->
mask_error(Else) ->
Else.
-guard_bif_binary_part(doc) ->
- ["Test the binary_part/2,3 guard BIF's extensively"];
+%% Test the binary_part/2,3 guard BIF's extensively
guard_bif_binary_part(Config) when is_list(Config) ->
%% Overflow tests that need to be unoptimized
- ?line badarg =
+ badarg =
?MASK_ERROR(
binary_part(<<1,2,3>>,{16#FFFFFFFFFFFFFFFF,
-16#7FFFFFFFFFFFFFFF-1})),
- ?line badarg =
+ badarg =
?MASK_ERROR(
binary_part(<<1,2,3>>,{16#FFFFFFFFFFFFFFFF,
16#7FFFFFFFFFFFFFFF})),
@@ -198,66 +180,66 @@ guard_bif_binary_part(Config) when is_list(Config) ->
do_binary_part_guard() ->
- ?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)
@@ -323,91 +305,91 @@ bptest(_,_,_) ->
error.
-guard_bifs(doc) -> "Test all guard bifs with nasty (but legal arguments).";
+%% Test all guard bifs with nasty (but legal arguments).
guard_bifs(Config) when is_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('float/1', Big, float(id(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('float/1', Big, float(id(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('bit_size/1', <<0:7>>, 7),
+ try_gbif('bit_size/1', <<0:7>>, 7),
- ?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),
- ?line try_fail_gbif('size/1', fun() -> 1 end, 0),
- ?line try_fail_gbif('size/1', fun() -> 1 end, 1),
+ try_fail_gbif('size/1', {}, 1),
+ try_fail_gbif('size/1', [], 0),
+ try_fail_gbif('size/1', [a], 1),
+ try_fail_gbif('size/1', fun() -> 1 end, 0),
+ try_fail_gbif('size/1', fun() -> 1 end, 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) ->
@@ -415,9 +397,7 @@ 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()
+ ct:fail("guard_bif(~p, ~p, ~p) -- bad result: ~p\n", [Id, X, Y, Other])
end.
try_fail_gbif(Id, X, Y) ->
@@ -425,9 +405,7 @@ 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()
+ ct:fail("guard_bif(~p, ~p, ~p) -- bad result: ~p\n", [Id, X, Y, Other])
end.
guard_bif('abs/1', X, Y) when abs(X) == Y ->
@@ -457,22 +435,20 @@ 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.";
+%% Test the type tests.
type_tests(Config) when is_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
+ 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]),
- ?line test_server:fail()
+ ct:fail("~p sub test(s) failed, ~p violation(s)", [Errors, Violations])
end.
type_tests([{Test, AllowedTypes}| T], AllTypes) ->
@@ -499,7 +475,7 @@ type_tests(Test, [Type|T], Allowed) ->
when is_list(Loc) ->
ok;
{'EXIT',Other} ->
- ?line test_server:fail({unexpected_error_reason,Other});
+ ct:fail({unexpected_error_reason,Other});
tuple when is_function(Value) ->
io:format("Standard violation: Test ~p(~p) should fail",
[Test, Value]),
diff --git a/erts/emulator/test/hash_SUITE.erl b/erts/emulator/test/hash_SUITE.erl
index 31b10158fb..a39d101b0d 100644
--- a/erts/emulator/test/hash_SUITE.erl
+++ b/erts/emulator/test/hash_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.
@@ -70,86 +70,43 @@ 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,
+-export([all/0, suite/0,
test_basic/1,test_cmp/1,test_range/1,test_spread/1,
test_phash2/1,otp_5292/1,bit_level_binaries/1,otp_7127/1,
- test_hash_zero/1,
- end_per_testcase/2,init_per_testcase/2]).
-init_per_testcase(_Case, Config) ->
- Dog=test_server:timetrap(test_server:minutes(10)),
- [{watchdog, Dog}|Config].
-
-end_per_testcase(_Case, Config) ->
- Dog=?config(watchdog, Config),
- test_server:timetrap_cancel(Dog),
- ok.
-suite() -> [{ct_hooks,[ts_install_cth]}].
+ test_hash_zero/1]).
+
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap, {minutes, 10}}].
all() ->
[test_basic, test_cmp, test_range, test_spread,
test_phash2, otp_5292, bit_level_binaries, otp_7127,
- test_hash_zero
- ].
-
-groups() ->
- [].
-
-init_per_suite(Config) ->
- Config.
-
-end_per_suite(_Config) ->
- ok.
-
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
+ test_hash_zero].
-
-test_basic(suite) ->
- [];
-test_basic(doc) ->
- ["Tests basic functionality of erlang:phash and that the "
- "hashes has not changed (neither hash nor phash)"];
+%% Tests basic functionality of erlang:phash and that the
+%% hashes has not changed (neither hash nor phash)
test_basic(Config) when is_list(Config) ->
basic_test().
-test_cmp(suite) ->
- [];
-test_cmp(doc) ->
- ["Compares integer hashes made by erlang:phash with those of a reference "
- "implementation"];
+%% Compares integer hashes made by erlang:phash with those of a reference implementation
test_cmp(Config) when is_list(Config) ->
cmp_test(10000).
-test_range(suite) ->
- [];
-test_range(doc) ->
- ["Tests ranges on erlang:phash from 1 to 2^32"];
+%% Tests ranges on erlang:phash from 1 to 2^32
test_range(Config) when is_list(Config) ->
range_test().
-test_spread(suite) ->
- [];
-test_spread(doc) ->
- ["Tests that the hashes are spread ok"];
+%% Tests that the hashes are spread ok
test_spread(Config) when is_list(Config) ->
spread_test(10).
-test_phash2(suite) ->
- [];
-test_phash2(doc) ->
- ["Tests phash2"];
+%% Tests phash2
test_phash2(Config) when is_list(Config) ->
phash2_test().
-otp_5292(suite) ->
- [];
-otp_5292(doc) ->
- ["Tests hash, phash and phash2 regarding integers."];
+%% Tests hash, phash and phash2 regarding integers.
otp_5292(Config) when is_list(Config) ->
otp_5292_test().
@@ -157,10 +114,7 @@ otp_5292(Config) when is_list(Config) ->
bit_level_binaries(Config) when is_list(Config) ->
bit_level_binaries_do().
-otp_7127(suite) ->
- [];
-otp_7127(doc) ->
- ["Tests phash2/1."];
+%% Tests phash2/1.
otp_7127(Config) when is_list(Config) ->
otp_7127_test().
diff --git a/erts/emulator/test/hibernate_SUITE.erl b/erts/emulator/test/hibernate_SUITE.erl
index 5138a6ee05..6f8ce02266 100644
--- a/erts/emulator/test/hibernate_SUITE.erl
+++ b/erts/emulator/test/hibernate_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.
@@ -22,45 +22,23 @@
-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,
basic/1,dynamic_call/1,min_heap_size/1,bad_args/1,
- messages_in_queue/1,undefined_mfa/1,no_heap/1,wake_up_and_bif_trap/1]).
+ messages_in_queue/1,undefined_mfa/1,no_heap/1,
+ wake_up_and_bif_trap/1]).
%% Used by test cases.
--export([basic_hibernator/1,dynamic_call_hibernator/2,messages_in_queue_restart/2, no_heap_loop/0,characters_to_list_trap/1]).
+-export([basic_hibernator/1,dynamic_call_hibernator/2,messages_in_queue_restart/2,
+ no_heap_loop/0,characters_to_list_trap/1]).
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap, {minutes, 3}}].
all() ->
[basic, dynamic_call, min_heap_size, bad_args, messages_in_queue,
undefined_mfa, no_heap, wake_up_and_bif_trap].
-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(Func, Config) when is_atom(Func), is_list(Config) ->
- Dog = ?t:timetrap(?t:minutes(3)),
- [{watchdog,Dog}|Config].
-
-end_per_testcase(_Func, Config) ->
- Dog=?config(watchdog, Config),
- ?t:timetrap_cancel(Dog).
-
%%%
%%% Testing the basic functionality of erlang:hibernate/3.
%%%
@@ -69,9 +47,9 @@ basic(Config) when is_list(Config) ->
Ref = make_ref(),
Info = {self(),Ref},
ExpectedHeapSz = erts_debug:size([Info]),
- ?line Child = spawn_link(fun() -> basic_hibernator(Info) end),
- ?line hibernate_wake_up(100, ExpectedHeapSz, Child),
- ?line Child ! please_quit_now,
+ Child = spawn_link(fun() -> basic_hibernator(Info) end),
+ hibernate_wake_up(100, ExpectedHeapSz, Child),
+ Child ! please_quit_now,
ok.
hibernate_wake_up(0, _, _) -> ok;
@@ -85,35 +63,35 @@ hibernate_wake_up(N, ExpectedHeapSz, Child) ->
end;
1 -> ok
end,
- ?line Child ! {hibernate,self()},
- ?line wait_until(fun () ->
+ Child ! {hibernate,self()},
+ wait_until(fun () ->
{current_function,{erlang,hibernate,3}} ==
process_info(Child, current_function)
end),
- ?line {message_queue_len,0} = process_info(Child, message_queue_len),
- ?line {status,waiting} = process_info(Child, status),
- ?line {heap_size,ExpectedHeapSz} = process_info(Child, heap_size),
+ {message_queue_len,0} = process_info(Child, message_queue_len),
+ {status,waiting} = process_info(Child, status),
+ {heap_size,ExpectedHeapSz} = process_info(Child, heap_size),
io:format("Before hibernation: ~p After hibernation: ~p\n",
[Before,ExpectedHeapSz]),
- ?line Child ! {whats_up,self()},
- ?line receive
- {all_fine,X,Child,_Ref} ->
- if
- N =:= 1 -> io:format("~p\n", [X]);
- true -> ok
- end,
- {backtrace,Bin} = process_info(Child, backtrace),
- if
- size(Bin) > 1000 ->
- io:format("~s\n", [binary_to_list(Bin)]),
- ?line ?t:fail(stack_is_growing);
- true ->
- hibernate_wake_up(N-1, ExpectedHeapSz, Child)
- end;
- Other ->
- ?line io:format("~p\n", [Other]),
- ?line ?t:fail(unexpected_message)
- end.
+ Child ! {whats_up,self()},
+ receive
+ {all_fine,X,Child,_Ref} ->
+ if
+ N =:= 1 -> io:format("~p\n", [X]);
+ true -> ok
+ end,
+ {backtrace,Bin} = process_info(Child, backtrace),
+ if
+ size(Bin) > 1000 ->
+ io:format("~s\n", [binary_to_list(Bin)]),
+ ct:fail(stack_is_growing);
+ true ->
+ hibernate_wake_up(N-1, ExpectedHeapSz, Child)
+ end;
+ Other ->
+ io:format("~p\n", [Other]),
+ ct:fail(unexpected_message)
+ end.
basic_hibernator(Info) ->
{catchlevel,0} = process_info(self(), catchlevel),
@@ -165,9 +143,9 @@ dynamic_call(Config) when is_list(Config) ->
Ref = make_ref(),
Info = {self(),Ref},
ExpectedHeapSz = erts_debug:size([Info]),
- ?line Child = spawn_link(fun() -> ?MODULE:dynamic_call_hibernator(Info, hibernate) end),
- ?line hibernate_wake_up(100, ExpectedHeapSz, Child),
- ?line Child ! please_quit_now,
+ Child = spawn_link(fun() -> ?MODULE:dynamic_call_hibernator(Info, hibernate) end),
+ hibernate_wake_up(100, ExpectedHeapSz, Child),
+ Child ! please_quit_now,
ok.
dynamic_call_hibernator(Info, Function) ->
@@ -195,34 +173,32 @@ min_heap_size(Config) when is_list(Config) ->
end.
min_heap_size_1(Config) when is_list(Config) ->
- ?line erlang:trace(new, true, [call]),
+ erlang:trace(new, true, [call]),
MFA = {?MODULE,min_hibernator,1},
- ?line 1 = erlang:trace_pattern(MFA, true, [local]),
+ 1 = erlang:trace_pattern(MFA, true, [local]),
Ref = make_ref(),
Info = {self(),Ref},
- ?line Child = spawn_opt(fun() -> min_hibernator(Info) end,
+ Child = spawn_opt(fun() -> min_hibernator(Info) end,
[{min_heap_size,15000},link]),
receive
- {trace,Child,call,{?MODULE,min_hibernator,_}} ->
- ?line 1 = erlang:trace_pattern(MFA, false, [local]),
- ?line erlang:trace(new, false, [call])
+ {trace,Child,call,{?MODULE,min_hibernator,_}} ->
+ 1 = erlang:trace_pattern(MFA, false, [local]),
+ erlang:trace(new, false, [call])
end,
{heap_size,HeapSz} = process_info(Child, heap_size),
io:format("Heap size: ~p\n", [HeapSz]),
- ?line if
- HeapSz < 20 -> ok
- end,
- ?line Child ! wake_up,
+ if
+ HeapSz < 20 -> ok
+ end,
+ Child ! wake_up,
receive
{heap_size,AfterSize} ->
io:format("Heap size after wakeup: ~p\n", [AfterSize]),
- ?line
- if
- AfterSize >= 15000 -> ok
- end;
+ if
+ AfterSize >= 15000 -> ok
+ end;
Other ->
- io:format("Unexpected: ~p\n", [Other]),
- ?line ?t:fail()
+ ct:fail("Unexpected: ~p\n", [Other])
end.
min_hibernator({Parent,_Ref}) ->
@@ -239,23 +215,23 @@ min_hibernator_recv(Parent) ->
%%%
bad_args(Config) when is_list(Config) ->
- ?line bad_args(?MODULE, {name,glurf}, [0]),
- ?line {'EXIT',{system_limit,_}} =
+ bad_args(?MODULE, {name,glurf}, [0]),
+ {'EXIT',{system_limit,_}} =
(catch erlang:hibernate(x, y, lists:duplicate(5122, xxx))),
- ?line bad_args(42, name, [0]),
- ?line bad_args(xx, 42, [1]),
- ?line bad_args(xx, 42, glurf),
- ?line bad_args(xx, 42, {}),
- ?line bad_args({}, name, [2]),
- ?line bad_args({1}, name, [3]),
- ?line bad_args({1,2,3}, name, [4]),
- ?line bad_args({1,2,3}, name, [5]),
- ?line bad_args({1,2,3,4}, name, [6]),
- ?line bad_args({1,2,3,4,5,6}, name,[7]),
- ?line bad_args({1,2,3,4,5}, name, [8]),
- ?line bad_args({1,2}, name, [9]),
- ?line bad_args([1,2], name, [9]),
- ?line bad_args(55.0, name, [9]),
+ bad_args(42, name, [0]),
+ bad_args(xx, 42, [1]),
+ bad_args(xx, 42, glurf),
+ bad_args(xx, 42, {}),
+ bad_args({}, name, [2]),
+ bad_args({1}, name, [3]),
+ bad_args({1,2,3}, name, [4]),
+ bad_args({1,2,3}, name, [5]),
+ bad_args({1,2,3,4}, name, [6]),
+ bad_args({1,2,3,4,5,6}, name,[7]),
+ bad_args({1,2,3,4,5}, name, [8]),
+ bad_args({1,2}, name, [9]),
+ bad_args([1,2], name, [9]),
+ bad_args(55.0, name, [9]),
ok.
bad_args(Mod, Name, Args) ->
@@ -266,7 +242,7 @@ bad_args(Mod, Name, Args) ->
io:format("erlang:hibernate(~p, ~p, ~p) -> ~p\n", [Mod,Name,Args,Res]);
Other ->
io:format("erlang:hibernate(~p, ~p, ~p) -> ~p\n", [Mod,Name,Args,Res]),
- ?t:fail({bad_result,Other})
+ ct:fail({bad_result,Other})
end.
@@ -283,8 +259,8 @@ messages_in_queue(Config) when is_list(Config) ->
receive
done -> ok;
Other ->
- ?line io:format("~p\n", [Other]),
- ?line ?t:fail(unexpected_message)
+ io:format("~p\n", [Other]),
+ ct:fail(unexpected_message)
end.
messages_in_queue_1(Parent, ExpectedMsg) ->
@@ -296,13 +272,13 @@ messages_in_queue_1(Parent, ExpectedMsg) ->
[Parent,ExpectedMsg]).
messages_in_queue_restart(Parent, ExpectedMessage) ->
- ?line receive
- ExpectedMessage ->
- Parent ! done;
- Other ->
- io:format("~p\n", [Other]),
- ?t:fail(unexpected_message)
- end,
+ receive
+ ExpectedMessage ->
+ Parent ! done;
+ Other ->
+ io:format("~p\n", [Other]),
+ ct:fail(unexpected_message)
+ end,
ok.
@@ -312,36 +288,36 @@ messages_in_queue_restart(Parent, ExpectedMessage) ->
%%%
undefined_mfa(Config) when is_list(Config) ->
- ?line process_flag(trap_exit, true),
- ?line Pid = spawn_link(fun() ->
+ process_flag(trap_exit, true),
+ Pid = spawn_link(fun() ->
%% Will be a call_only instruction.
erlang:hibernate(?MODULE, blarf, []) end),
- ?line Pid ! {a,message},
- ?line receive
- {'EXIT',Pid,{undef,Undef}} ->
- io:format("~p\n", [Undef]),
- ok;
- Other ->
- ?line io:format("~p\n", [Other]),
- ?line ?t:fail(unexpected_message)
- end,
+ Pid ! {a,message},
+ receive
+ {'EXIT',Pid,{undef,Undef}} ->
+ io:format("~p\n", [Undef]),
+ ok;
+ Other ->
+ io:format("~p\n", [Other]),
+ ct:fail(unexpected_message)
+ end,
undefined_mfa_1().
undefined_mfa_1() ->
- ?line Pid = spawn_link(fun() ->
+ Pid = spawn_link(fun() ->
%% Force a call_last instruction by calling bar()
%% (if that is not obvious).
bar(),
erlang:hibernate(?MODULE, blarf, [])
end),
- ?line Pid ! {another,message},
- ?line receive
+ Pid ! {another,message},
+ receive
{'EXIT',Pid,{undef,Undef}} ->
io:format("~p\n", [Undef]),
ok;
Other ->
- ?line io:format("~p\n", [Other]),
- ?line ?t:fail(unexpected_message)
+ io:format("~p\n", [Other]),
+ ct:fail(unexpected_message)
end,
ok.
@@ -352,23 +328,17 @@ bar() ->
%% No heap
%%
-no_heap(doc) -> [];
-no_heap(suite) -> [];
no_heap(Config) when is_list(Config) ->
- ?line H = spawn_link(fun () -> clean_dict(), no_heap_loop() end),
- ?line lists:foreach(fun (_) ->
- wait_until(fun () -> is_hibernated(H) end),
- ?line [{heap_size,1},
- {total_heap_size,1}]
- = process_info(H,
- [heap_size,
- total_heap_size]),
- receive after 10 -> ok end,
- H ! again
- end,
- lists:seq(1, 100)),
- ?line unlink(H),
- ?line exit(H, bye).
+ H = spawn_link(fun () -> clean_dict(), no_heap_loop() end),
+ lists:foreach(fun (_) ->
+ wait_until(fun () -> is_hibernated(H) end),
+ [{heap_size,1}, {total_heap_size,1}]
+ = process_info(H, [heap_size, total_heap_size]),
+ receive after 10 -> ok end,
+ H ! again
+ end, lists:seq(1, 100)),
+ unlink(H),
+ exit(H, bye).
no_heap_loop() ->
flush(),
@@ -382,19 +352,17 @@ clean_dict() ->
%% Wake up and then immediatly bif trap with a lengthy computation.
%%
-wake_up_and_bif_trap(doc) -> [];
-wake_up_and_bif_trap(suite) -> [];
wake_up_and_bif_trap(Config) when is_list(Config) ->
- ?line Self = self(),
- ?line Pid = spawn_link(fun() -> erlang:hibernate(?MODULE, characters_to_list_trap, [Self]) end),
- ?line Pid ! wakeup,
- ?line receive
+ Self = self(),
+ Pid = spawn_link(fun() -> erlang:hibernate(?MODULE, characters_to_list_trap, [Self]) end),
+ Pid ! wakeup,
+ receive
{ok, Pid0} when Pid0 =:= Pid -> ok
after 5000 ->
- ?line ?t:fail(process_blocked)
+ ct:fail(process_blocked)
end,
- ?line unlink(Pid),
- ?line exit(Pid, bye).
+ unlink(Pid),
+ exit(Pid, bye).
%% Lengthy computation that traps (in characters_to_list_trap_3).
characters_to_list_trap(Parent) ->
diff --git a/erts/emulator/test/ignore_cores.erl b/erts/emulator/test/ignore_cores.erl
index e40b91392c..25dce346b9 100644
--- a/erts/emulator/test/ignore_cores.erl
+++ b/erts/emulator/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.
@@ -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/erts/emulator/test/list_bif_SUITE.erl b/erts/emulator/test/list_bif_SUITE.erl
index 544f9c9c1f..514dd2f412 100644
--- a/erts/emulator/test/list_bif_SUITE.erl
+++ b/erts/emulator/test/list_bif_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,147 +21,106 @@
-module(list_bif_SUITE).
-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]).
-export([hd_test/1,tl_test/1,t_length/1,t_list_to_pid/1,
t_list_to_float/1,t_list_to_integer/1]).
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap, {minutes, 1}}].
+
all() ->
[hd_test, tl_test, t_length, t_list_to_pid,
t_list_to_float, t_list_to_integer].
-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(test_server:seconds(60)),
- [{watchdog,Dog}|Config].
-
-end_per_testcase(_Case, Config) ->
- Dog = ?config(watchdog, Config),
- test_server:timetrap_cancel(Dog),
- ok.
-
-t_list_to_integer(suite) ->
- [];
-t_list_to_integer(doc) ->
- ["tests list_to_integer and string:to_integer"];
+%% Tests list_to_integer and string:to_integer
t_list_to_integer(Config) when is_list(Config) ->
- ?line {'EXIT',{badarg,_}} = (catch list_to_integer("12373281903728109372810937209817320981321ABC")),
- ?line 12373281903728109372810937209817320981321 = (catch list_to_integer("12373281903728109372810937209817320981321")),
- ?line 12373 = (catch list_to_integer("12373")),
- ?line -12373 = (catch list_to_integer("-12373")),
- ?line 12373 = (catch list_to_integer("+12373")),
- ?line {'EXIT',{badarg,_}} = ( catch list_to_integer(abc)),
- ?line {'EXIT',{badarg,_}} = (catch list_to_integer("")),
- ?line {12373281903728109372810937209817320981321,"ABC"} = string:to_integer("12373281903728109372810937209817320981321ABC"),
- ?line {-12373281903728109372810937209817320981321,"ABC"} = string:to_integer("-12373281903728109372810937209817320981321ABC"),
- ?line {12,[345]} = string:to_integer([$1,$2,345]),
- ?line {12,[a]} = string:to_integer([$1,$2,a]),
- ?line {error,no_integer} = string:to_integer([$A]),
- ?line {error,not_a_list} = string:to_integer($A),
+ {'EXIT',{badarg,_}} = (catch list_to_integer("12373281903728109372810937209817320981321ABC")),
+ 12373281903728109372810937209817320981321 = (catch list_to_integer("12373281903728109372810937209817320981321")),
+ 12373 = (catch list_to_integer("12373")),
+ -12373 = (catch list_to_integer("-12373")),
+ 12373 = (catch list_to_integer("+12373")),
+ {'EXIT',{badarg,_}} = ( catch list_to_integer(abc)),
+ {'EXIT',{badarg,_}} = (catch list_to_integer("")),
+ {12373281903728109372810937209817320981321,"ABC"} = string:to_integer("12373281903728109372810937209817320981321ABC"),
+ {-12373281903728109372810937209817320981321,"ABC"} = string:to_integer("-12373281903728109372810937209817320981321ABC"),
+ {12,[345]} = string:to_integer([$1,$2,345]),
+ {12,[a]} = string:to_integer([$1,$2,a]),
+ {error,no_integer} = string:to_integer([$A]),
+ {error,not_a_list} = string:to_integer($A),
ok.
%% Test hd/1 with correct and incorrect arguments.
hd_test(Config) when is_list(Config) ->
- ?line $h = hd(id("hejsan")),
- ?line case catch hd(id($h)) of
- {'EXIT', {badarg, _}} -> ok;
- Res ->
- Str=io_lib:format("hd/1 with incorrect args "++
- "succeeded.~nResult: ~p", [Res]),
- test_server:fail(Str)
- end,
+ $h = hd(id("hejsan")),
+ case catch hd(id($h)) of
+ {'EXIT', {badarg, _}} -> ok;
+ Res ->
+ ct:fail("hd/1 with incorrect args succeeded.~nResult: ~p", [Res])
+ end,
ok.
%% Test tl/1 with correct and incorrect arguments.
tl_test(Config) when is_list(Config) ->
- ?line "ejsan" = tl(id("hejsan")),
- ?line case catch tl(id(104)) of
- {'EXIT', {badarg, _}} ->
- ok;
- Res ->
- Str=io_lib:format("tl/1 with incorrect args "++
- "succeeded.~nResult: ~p", [Res]),
- test_server:fail(Str)
- end,
+ "ejsan" = tl(id("hejsan")),
+ case catch tl(id(104)) of
+ {'EXIT', {badarg, _}} ->
+ ok;
+ Res ->
+ ct:fail("tl/1 with incorrect args succeeded.~nResult: ~p", [Res])
+ end,
ok.
%% Test length/1 with correct and incorrect arguments.
t_length(Config) when is_list(Config) ->
- ?line 0 = length(""),
- ?line 0 = length([]),
- ?line 1 = length([1]),
- ?line 2 = length([1,a]),
- ?line 2 = length("ab"),
- ?line 3 = length("abc"),
- ?line 4 = length(id([x|"abc"])),
- ?line 6 = length("hejsan"),
- ?line {'EXIT',{badarg,_}} = (catch length(id([a,b|c]))),
- ?line case catch length({tuple}) of
- {'EXIT', {badarg, _}} ->
- ok;
- Res ->
- Str = io_lib:format("length/1 with incorrect args "++
- "succeeded.~nResult: ~p", [Res]),
- ?line test_server:fail(Str)
- end,
+ 0 = length(""),
+ 0 = length([]),
+ 1 = length([1]),
+ 2 = length([1,a]),
+ 2 = length("ab"),
+ 3 = length("abc"),
+ 4 = length(id([x|"abc"])),
+ 6 = length("hejsan"),
+ {'EXIT',{badarg,_}} = (catch length(id([a,b|c]))),
+ case catch length({tuple}) of
+ {'EXIT', {badarg, _}} ->
+ ok;
+ Res ->
+ ct:fail("length/1 with incorrect args succeeded.~nResult: ~p", [Res])
+ end,
ok.
%% Test list_to_pid/1 with correct and incorrect arguments.
t_list_to_pid(Config) when is_list(Config) ->
- ?line Me = self(),
- ?line MyListedPid = pid_to_list(Me),
- ?line Me = list_to_pid(MyListedPid),
- ?line case catch list_to_pid(id("Incorrect list")) of
- {'EXIT', {badarg, _}} ->
- ok;
- Res ->
- Str=io_lib:format("list_to_pid/1 with incorrect "++
- "arg succeeded.~nResult: ~p",
- [Res]),
- test_server:fail(Str)
- end,
+ Me = self(),
+ MyListedPid = pid_to_list(Me),
+ Me = list_to_pid(MyListedPid),
+ case catch list_to_pid(id("Incorrect list")) of
+ {'EXIT', {badarg, _}} ->
+ ok;
+ Res ->
+ ct:fail("list_to_pid/1 with incorrect arg succeeded.~nResult: ~p", [Res])
+ end,
ok.
%% Test list_to_float/1 with correct and incorrect arguments.
t_list_to_float(Config) when is_list(Config) ->
- ?line 5.89000 = list_to_float(id("5.89")),
- ?line 5.89898 = list_to_float(id("5.89898")),
- ?line case catch list_to_float(id("58")) of
- {'EXIT', {badarg, _}} -> ok;
- Res ->
- Str=io_lib:format("list_to_float with incorrect "++
- "arg succeeded.~nResult: ~p",
- [Res]),
- test_server:fail(Str)
- end,
+ 5.89000 = list_to_float(id("5.89")),
+ 5.89898 = list_to_float(id("5.89898")),
+ case catch list_to_float(id("58")) of
+ {'EXIT', {badarg, _}} -> ok;
+ Res ->
+ ct:fail("list_to_float with incorrect arg succeeded.~nResult: ~p", [Res])
+ end,
ok.
id(I) -> I.
-
-
diff --git a/erts/emulator/test/long_timers_test.erl b/erts/emulator/test/long_timers_test.erl
index 9415e1cced..7c055a31f9 100644
--- a/erts/emulator/test/long_timers_test.erl
+++ b/erts/emulator/test/long_timers_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/erts/emulator/test/lttng_SUITE.erl b/erts/emulator/test/lttng_SUITE.erl
new file mode 100644
index 0000000000..c64ddc40da
--- /dev/null
+++ b/erts/emulator/test/lttng_SUITE.erl
@@ -0,0 +1,498 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 1999-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(lttng_SUITE).
+
+-export([all/0, suite/0]).
+-export([init_per_suite/1, end_per_suite/1]).
+-export([init_per_testcase/2, end_per_testcase/2]).
+
+-export([t_lttng_list/1,
+ t_carrier_pool/1,
+ t_memory_carrier/1,
+ t_async_io_pool/1,
+ t_driver_control_ready_async/1,
+ t_driver_start_stop/1,
+ t_driver_ready_input_output/1,
+ t_driver_timeout/1,
+ t_driver_caller/1,
+ t_driver_flush/1,
+ t_scheduler_poll/1]).
+
+-include_lib("common_test/include/ct.hrl").
+
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap, {seconds, 10}}].
+
+all() ->
+ [t_lttng_list,
+ t_carrier_pool,
+ t_async_io_pool,
+ t_driver_start_stop,
+ t_driver_ready_input_output,
+ t_driver_control_ready_async,
+ t_driver_timeout,
+ t_driver_caller,
+ t_driver_flush,
+ t_scheduler_poll,
+ t_memory_carrier].
+
+
+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) ->
+ 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.
+
+%% Not tested yet
+%% com_ericsson_otp:driver_process_exit
+%% com_ericsson_otp:driver_event
+
+%% tracepoints
+%%
+%% com_ericsson_otp:carrier_pool_get
+%% com_ericsson_otp:carrier_pool_put
+%% com_ericsson_otp:carrier_destroy
+%% com_ericsson_otp:carrier_create
+%% com_ericsson_otp:aio_pool_put
+%% com_ericsson_otp:aio_pool_get
+%% com_ericsson_otp:driver_control
+%% com_ericsson_otp:driver_call
+%% com_ericsson_otp:driver_finish
+%% com_ericsson_otp:driver_ready_async
+%% com_ericsson_otp:driver_process_exit
+%% com_ericsson_otp:driver_stop
+%% com_ericsson_otp:driver_flush
+%% com_ericsson_otp:driver_stop_select
+%% com_ericsson_otp:driver_timeout
+%% com_ericsson_otp:driver_event
+%% com_ericsson_otp:driver_ready_output
+%% com_ericsson_otp:driver_ready_input
+%% com_ericsson_otp:driver_output
+%% com_ericsson_otp:driver_outputv
+%% com_ericsson_otp:driver_init
+%% com_ericsson_otp:driver_start
+%% com_ericsson_otp:scheduler_poll
+
+%%
+%% Testcases
+%%
+
+t_lttng_list(_Config) ->
+ {ok, _} = cmd("lttng list -u"),
+ ok.
+
+%% com_ericsson_otp:carrier_pool_get
+%% com_ericsson_otp:carrier_pool_put
+t_carrier_pool(Config) ->
+ case have_carriers(ets_alloc) of
+ false ->
+ {skip, "No Memory Carriers configured on system."};
+ true ->
+ ok = lttng_start_event("com_ericsson_otp:carrier_pool*", Config),
+
+ ok = ets_load(),
+
+ Res = lttng_stop_and_view(Config),
+ ok = check_tracepoint("com_ericsson_otp:carrier_pool_get", Res),
+ ok = check_tracepoint("com_ericsson_otp:carrier_pool_put", Res),
+ ok
+ end.
+
+%% com_ericsson_otp:carrier_destroy
+%% com_ericsson_otp:carrier_create
+t_memory_carrier(Config) ->
+ case have_carriers(ets_alloc) of
+ false ->
+ {skip, "No Memory Carriers configured on system."};
+ true ->
+ ok = lttng_start_event("com_ericsson_otp:carrier_*", Config),
+
+ ok = ets_load(),
+
+ Res = lttng_stop_and_view(Config),
+ ok = check_tracepoint("com_ericsson_otp:carrier_destroy", Res),
+ ok = check_tracepoint("com_ericsson_otp:carrier_create", Res),
+ ok
+ end.
+
+%% com_ericsson_otp:aio_pool_put
+%% com_ericsson_otp:aio_pool_get
+t_async_io_pool(Config) ->
+ case have_async_threads() of
+ false ->
+ {skip, "No Async Threads configured on system."};
+ true ->
+ ok = lttng_start_event("com_ericsson_otp:aio_pool_*", Config),
+
+ Path1 = proplists:get_value(priv_dir, Config),
+ {ok, [[Path2]]} = init:get_argument(home),
+ {ok, _} = file:list_dir(Path1),
+ {ok, _} = file:list_dir(Path2),
+ {ok, _} = file:list_dir(Path1),
+ {ok, _} = file:list_dir(Path2),
+
+ Res = lttng_stop_and_view(Config),
+ ok = check_tracepoint("com_ericsson_otp:aio_pool_put", Res),
+ ok = check_tracepoint("com_ericsson_otp:aio_pool_get", Res),
+ ok
+ end.
+
+
+%% com_ericsson_otp:driver_start
+%% com_ericsson_otp:driver_stop
+t_driver_start_stop(Config) ->
+ ok = lttng_start_event("com_ericsson_otp:driver_*", Config),
+ Path = proplists:get_value(priv_dir, Config),
+ Name = filename:join(Path, "sometext.txt"),
+ Bin = txt(),
+ ok = file:write_file(Name, Bin),
+ {ok, Bin} = file:read_file(Name),
+ Res = lttng_stop_and_view(Config),
+ ok = check_tracepoint("com_ericsson_otp:driver_start", Res),
+ ok = check_tracepoint("com_ericsson_otp:driver_stop", Res),
+ ok = check_tracepoint("com_ericsson_otp:driver_control", Res),
+ ok = check_tracepoint("com_ericsson_otp:driver_outputv", Res),
+ ok = check_tracepoint("com_ericsson_otp:driver_ready_async", Res),
+ ok.
+
+%% com_ericsson_otp:driver_control
+%% com_ericsson_otp:driver_outputv
+%% com_ericsson_otp:driver_ready_async
+t_driver_control_ready_async(Config) ->
+ ok = lttng_start_event("com_ericsson_otp:driver_control", Config),
+ ok = lttng_start_event("com_ericsson_otp:driver_outputv", Config),
+ ok = lttng_start_event("com_ericsson_otp:driver_ready_async", Config),
+ Path = proplists:get_value(priv_dir, Config),
+ Name = filename:join(Path, "sometext.txt"),
+ Bin = txt(),
+ ok = file:write_file(Name, Bin),
+ {ok, Bin} = file:read_file(Name),
+ Res = lttng_stop_and_view(Config),
+ ok = check_tracepoint("com_ericsson_otp:driver_control", Res),
+ ok = check_tracepoint("com_ericsson_otp:driver_outputv", Res),
+ ok = check_tracepoint("com_ericsson_otp:driver_ready_async", Res),
+ ok.
+
+%% com_ericsson_otp:driver_ready_input
+%% com_ericsson_otp:driver_ready_output
+t_driver_ready_input_output(Config) ->
+ ok = lttng_start_event("com_ericsson_otp:driver_ready_*", Config),
+ Me = self(),
+ Pid = spawn_link(fun() -> tcp_server(Me, active) end),
+ receive {Pid, accept} -> ok end,
+ Bin = txt(),
+ Sz = byte_size(Bin),
+
+ {ok, Sock} = gen_tcp:connect("localhost", 5679, [binary, {packet, 2}]),
+ ok = gen_tcp:send(Sock, <<Sz:16, Bin/binary>>),
+ ok = gen_tcp:send(Sock, <<Sz:16, Bin/binary>>),
+ ok = gen_tcp:close(Sock),
+ receive {Pid, done} -> ok end,
+
+ Res = lttng_stop_and_view(Config),
+ ok = check_tracepoint("com_ericsson_otp:driver_ready_input", Res),
+ ok = check_tracepoint("com_ericsson_otp:driver_ready_output", Res),
+ ok.
+
+
+%% com_ericsson_otp:driver_stop_select
+%% com_ericsson_otp:driver_timeout
+t_driver_timeout(Config) ->
+ ok = lttng_start_event("com_ericsson_otp:driver_*", Config),
+ Me = self(),
+ Pid = spawn_link(fun() -> tcp_server(Me, timeout) end),
+ receive {Pid, accept} -> ok end,
+ {ok, Sock} = gen_tcp:connect("localhost", 5679, [binary]),
+ ok = gen_tcp:send(Sock, <<"hej">>),
+ receive {Pid, done} -> ok end,
+ ok = gen_tcp:close(Sock),
+ Res = lttng_stop_and_view(Config),
+ ok = check_tracepoint("com_ericsson_otp:driver_timeout", Res),
+ ok = check_tracepoint("com_ericsson_otp:driver_stop_select", Res),
+ ok.
+
+%% com_ericsson_otp:driver_call
+%% com_ericsson_otp:driver_output
+%% com_ericsson_otp:driver_init
+%% com_ericsson_otp:driver_finish
+t_driver_caller(Config) ->
+ ok = lttng_start_event("com_ericsson_otp:driver_*", Config),
+
+ Drv = 'caller_drv',
+ os:putenv("CALLER_DRV_USE_OUTPUTV", "false"),
+
+ ok = load_driver(proplists:get_value(data_dir, Config), Drv),
+ Port = open_port({spawn, Drv}, []),
+ true = is_port(Port),
+
+ chk_caller(Port, start, self()),
+ chk_caller(Port, output, spawn_link(fun() ->
+ port_command(Port, "")
+ end)),
+ Port ! {self(), {command, ""}},
+ chk_caller(Port, output, self()),
+ chk_caller(Port, control, spawn_link(fun () ->
+ port_control(Port, 0, "")
+ end)),
+ chk_caller(Port, call, spawn_link(fun() ->
+ erlang:port_call(Port, 0, "")
+ end)),
+
+ true = port_close(Port),
+ erl_ddll:unload_driver(Drv),
+
+ Res = lttng_stop_and_view(Config),
+ ok = check_tracepoint("com_ericsson_otp:driver_call", Res),
+ ok = check_tracepoint("com_ericsson_otp:driver_output", Res),
+ ok = check_tracepoint("com_ericsson_otp:driver_init", Res),
+ ok = check_tracepoint("com_ericsson_otp:driver_finish", Res),
+ ok.
+
+%% com_ericsson_otp:scheduler_poll
+t_scheduler_poll(Config) ->
+ ok = lttng_start_event("com_ericsson_otp:scheduler_poll", Config),
+
+ ok = memory_load(),
+
+ Res = lttng_stop_and_view(Config),
+ ok = check_tracepoint("com_ericsson_otp:scheduler_poll", Res),
+ ok.
+
+%% com_ericsson_otp:driver_flush
+t_driver_flush(Config) ->
+ ok = lttng_start_event("com_ericsson_otp:driver_flush", Config),
+
+ Me = self(),
+ Pid = spawn_link(fun() -> tcp_server(Me, passive_no_read) end),
+ receive {Pid, accept} -> ok end,
+ Bin = iolist_to_binary([txt() || _ <- lists:seq(1,100)]),
+ Sz = byte_size(Bin),
+
+ %% We want to create a scenario where sendings stalls and we
+ %% queue packets in the driver.
+ %% When we close the socket it has to flush the queue.
+ {ok, Sock} = gen_tcp:connect("localhost", 5679, [binary, {packet, 2},
+ {send_timeout, 10},
+ {sndbuf, 10000000}]),
+ Pids = [spawn_link(fun() ->
+ gen_tcp:send(Sock, <<Sz:16, Bin/binary>>),
+ Me ! {self(), ok}
+ end) || _ <- lists:seq(1,100)],
+ [receive {P, ok} -> ok end || P <- Pids],
+ ok = gen_tcp:close(Sock),
+ Pid ! die,
+ receive {Pid, done} -> ok end,
+
+ Res = lttng_stop_and_view(Config),
+ ok = check_tracepoint("com_ericsson_otp:driver_flush", Res),
+ ok.
+
+%%
+%% AUX
+%%
+
+chk_caller(Port, Callback, ExpectedCaller) ->
+ receive
+ {caller, Port, Callback, Caller} ->
+ ExpectedCaller = Caller
+ end.
+
+
+ets_load() ->
+ Tid = ets:new(ets_load, [public,set]),
+ N = erlang:system_info(schedulers_online),
+ Pids = [spawn_link(fun() -> ets_shuffle(Tid) end) || _ <- lists:seq(1,N)],
+ ok = ets_kill(Pids, 500),
+ ok.
+
+
+ets_kill([], _) -> ok;
+ets_kill([Pid|Pids], Time) ->
+ timer:sleep(Time),
+ Pid ! done,
+ ets_kill(Pids, Time).
+
+ets_shuffle(Tid) ->
+ Payload = lists:duplicate(100, $x),
+ ets_shuffle(Tid, 100, Payload).
+ets_shuffle(Tid, I, Data) ->
+ ets_shuffle(Tid, I, I, Data, Data).
+
+ets_shuffle(Tid, 0, N, _, Data) ->
+ ets_shuffle(Tid, N, N, Data, Data);
+ets_shuffle(Tid, I, N, Data, Data0) ->
+ receive
+ done -> ok
+ after 0 ->
+ Key = rand:uniform(1000),
+ Data1 = [I|Data],
+ ets:insert(Tid, {Key, Data1}),
+ ets_shuffle(Tid, I - 1, N, Data1, Data0)
+ end.
+
+
+
+
+memory_load() ->
+ Me = self(),
+ Pids0 = [spawn_link(fun() -> memory_loop(Me, 20, <<42>>) end) || _ <- lists:seq(1,30)],
+ timer:sleep(50),
+ Pids1 = [spawn_link(fun() -> memory_loop(Me, 20, <<42>>) end) || _ <- lists:seq(1,30)],
+ [receive {Pid, done} -> ok end || Pid <- Pids0 ++ Pids1],
+ timer:sleep(500),
+ ok.
+
+memory_loop(Parent, N, Bin) ->
+ memory_loop(Parent, N, Bin, []).
+
+memory_loop(Parent, 0, _Bin, _) ->
+ Parent ! {self(), done};
+memory_loop(Parent, N, Bin0, Ls) ->
+ Bin = binary:copy(<<Bin0/binary, Bin0/binary>>),
+ memory_loop(Parent, N - 1, Bin, [a,b,c|Ls]).
+
+tcp_server(Pid, Type) ->
+ {ok, LSock} = gen_tcp:listen(5679, [binary,
+ {reuseaddr, true},
+ {active, false}]),
+ Pid ! {self(), accept},
+ {ok, Sock} = gen_tcp:accept(LSock),
+ case Type of
+ passive_no_read ->
+ receive die -> ok end;
+ active ->
+ inet:setopts(Sock, [{active, once}, {packet,2}]),
+ receive Msg1 -> io:format("msg1: ~p~n", [Msg1]) end,
+ inet:setopts(Sock, [{active, once}, {packet,2}]),
+ receive Msg2 -> io:format("msg2: ~p~n", [Msg2]) end,
+ ok = gen_tcp:close(Sock);
+ timeout ->
+ Res = gen_tcp:recv(Sock, 2000, 1000),
+ io:format("res ~p~n", [Res])
+ end,
+ Pid ! {self(), done},
+ ok.
+
+txt() ->
+ <<"%% tracepoints\n"
+ "%%\n"
+ "%% com_ericsson_otp:carrier_pool_get\n"
+ "%% com_ericsson_otp:carrier_pool_put\n"
+ "%% com_ericsson_otp:carrier_destroy\n"
+ "%% com_ericsson_otp:carrier_create\n"
+ "%% com_ericsson_otp:aio_pool_put\n"
+ "%% com_ericsson_otp:aio_pool_get\n"
+ "%% com_ericsson_otp:driver_control\n"
+ "%% com_ericsson_otp:driver_call\n"
+ "%% com_ericsson_otp:driver_finish\n"
+ "%% com_ericsson_otp:driver_ready_async\n"
+ "%% com_ericsson_otp:driver_process_exit\n"
+ "%% com_ericsson_otp:driver_stop\n"
+ "%% com_ericsson_otp:driver_flush\n"
+ "%% com_ericsson_otp:driver_stop_select\n"
+ "%% com_ericsson_otp:driver_timeout\n"
+ "%% com_ericsson_otp:driver_event\n"
+ "%% com_ericsson_otp:driver_ready_output\n"
+ "%% com_ericsson_otp:driver_ready_input\n"
+ "%% com_ericsson_otp:driver_output\n"
+ "%% com_ericsson_otp:driver_outputv\n"
+ "%% com_ericsson_otp:driver_init\n"
+ "%% com_ericsson_otp:driver_start\n"
+ "%% com_ericsson_otp:scheduler_poll">>.
+
+load_driver(Dir, Driver) ->
+ case erl_ddll:load_driver(Dir, Driver) of
+ ok -> ok;
+ {error, Error} = Res ->
+ io:format("~s\n", [erl_ddll:format_error(Error)]),
+ Res
+ end.
+
+%% check
+
+have_carriers(Alloc) ->
+ case erlang:system_info({allocator,Alloc}) of
+ false -> false;
+ _ -> true
+ end.
+
+have_async_threads() ->
+ Tps = erlang:system_info(thread_pool_size),
+ if Tps =:= 0 -> false;
+ true -> true
+ end.
+
+%% 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/erts/emulator/test/lttng_SUITE_data/Makefile.src b/erts/emulator/test/lttng_SUITE_data/Makefile.src
new file mode 100644
index 0000000000..fe7a1b6ef3
--- /dev/null
+++ b/erts/emulator/test/lttng_SUITE_data/Makefile.src
@@ -0,0 +1,7 @@
+
+MISC_DRVS = caller_drv@dll@
+
+
+all: $(MISC_DRVS)
+
+@SHLIB_RULES@
diff --git a/erts/emulator/test/lttng_SUITE_data/caller_drv.c b/erts/emulator/test/lttng_SUITE_data/caller_drv.c
new file mode 100644
index 0000000000..86fd0a2995
--- /dev/null
+++ b/erts/emulator/test/lttng_SUITE_data/caller_drv.c
@@ -0,0 +1,159 @@
+/* ``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 <stdlib.h>
+#include <string.h>
+#include "erl_driver.h"
+
+static int init();
+static void stop(ErlDrvData drv_data);
+static void finish();
+static void flush(ErlDrvData drv_data);
+static ErlDrvData start(ErlDrvPort port, char *command);
+static void output(ErlDrvData drv_data, char *buf, ErlDrvSizeT len);
+static void outputv(ErlDrvData drv_data, ErlIOVec *ev);
+static ErlDrvSSizeT control(ErlDrvData drv_data,
+ unsigned int command, char *buf,
+ ErlDrvSizeT len, char **rbuf, ErlDrvSizeT rlen);
+static ErlDrvSSizeT call(ErlDrvData drv_data,
+ unsigned int command,
+ char *buf, ErlDrvSizeT len,
+ char **rbuf, ErlDrvSizeT rlen,
+ unsigned int *flags);
+
+static ErlDrvEntry caller_drv_entry = {
+ init,
+ start,
+ stop,
+ output,
+ NULL /* ready_input */,
+ NULL /* ready_output */,
+ "caller_drv",
+ finish,
+ NULL /* handle */,
+ control,
+ NULL /* timeout */,
+ outputv,
+ NULL /* ready_async */,
+ flush,
+ call,
+ NULL /* event */,
+ ERL_DRV_EXTENDED_MARKER,
+ ERL_DRV_EXTENDED_MAJOR_VERSION,
+ ERL_DRV_EXTENDED_MINOR_VERSION,
+ ERL_DRV_FLAG_USE_PORT_LOCKING,
+ NULL /* handle2 */,
+ NULL /* handle_monitor */
+};
+
+DRIVER_INIT(caller_drv)
+{
+ char buf[10];
+ size_t bufsz = sizeof(buf);
+ char *use_outputv;
+ use_outputv = (erl_drv_getenv("CALLER_DRV_USE_OUTPUTV", buf, &bufsz) == 0
+ ? buf
+ : "false");
+ if (strcmp(use_outputv, "true") != 0)
+ caller_drv_entry.outputv = NULL;
+ return &caller_drv_entry;
+}
+
+void
+send_caller(ErlDrvData drv_data, char *func)
+{
+ int res;
+ ErlDrvPort port = (ErlDrvPort) drv_data;
+ ErlDrvTermData msg[] = {
+ ERL_DRV_ATOM, driver_mk_atom("caller"),
+ ERL_DRV_PORT, driver_mk_port(port),
+ ERL_DRV_ATOM, driver_mk_atom(func),
+ ERL_DRV_PID, driver_caller(port),
+ ERL_DRV_TUPLE, (ErlDrvTermData) 4
+ };
+ res = erl_drv_output_term(driver_mk_port(port), msg, sizeof(msg)/sizeof(ErlDrvTermData));
+ if (res <= 0)
+ driver_failure_atom(port, "erl_drv_output_term failed");
+}
+
+static int
+init() {
+ return 0;
+}
+
+static void
+stop(ErlDrvData drv_data)
+{
+
+}
+
+static void
+flush(ErlDrvData drv_data)
+{
+
+}
+
+static void
+finish()
+{
+
+}
+
+static ErlDrvData
+start(ErlDrvPort port, char *command)
+{
+ send_caller((ErlDrvData) port, "start");
+ return (ErlDrvData) port;
+}
+
+static void
+output(ErlDrvData drv_data, char *buf, ErlDrvSizeT len)
+{
+ send_caller(drv_data, "output");
+}
+
+static void
+outputv(ErlDrvData drv_data, ErlIOVec *ev)
+{
+ send_caller(drv_data, "outputv");
+}
+
+static ErlDrvSSizeT
+control(ErlDrvData drv_data,
+ unsigned int command, char *buf,
+ ErlDrvSizeT len, char **rbuf, ErlDrvSizeT rlen)
+{
+ send_caller(drv_data, "control");
+ return 0;
+}
+
+static ErlDrvSSizeT
+call(ErlDrvData drv_data,
+ unsigned int command,
+ char *buf, ErlDrvSizeT len,
+ char **rbuf, ErlDrvSizeT rlen,
+ unsigned int *flags)
+{
+ /* echo call */
+ if (len > rlen)
+ *rbuf = driver_alloc(len);
+ memcpy((void *) *rbuf, (void *) buf, len);
+ send_caller(drv_data, "call");
+ return len;
+}
diff --git a/erts/emulator/test/map_SUITE.erl b/erts/emulator/test/map_SUITE.erl
index 5e9814be60..b3870f0313 100644
--- a/erts/emulator/test/map_SUITE.erl
+++ b/erts/emulator/test/map_SUITE.erl
@@ -17,73 +17,71 @@
%% %CopyrightEnd%
%%
-module(map_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([
- 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,
- t_gc_rare_map_overflow/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_hashmap_balance/1,
- 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,
- badmap_17/1
- ]).
+-export([all/0, suite/0]).
+-compile({nowarn_deprecated_function, {erlang,hash,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_take/1, t_bif_map_take_large/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,
+ t_gc_rare_map_overflow/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_hashmap_balance/1,
+ 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,
+ badmap_17/1]).
-include_lib("stdlib/include/ms_transform.hrl").
@@ -96,65 +94,57 @@
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_gc_rare_map_overflow,
- 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_hashmap_balance,
- t_erts_internal_order,
- t_erts_internal_hash,
- t_pdict,
- t_ets,
- t_tracing,
-
- %% instruction-level tests
- t_has_map_fields,
- y_regs,
- badmap_17
- ].
-
-groups() -> [].
-
-init_per_suite(Config) -> Config.
-end_per_suite(_Config) -> ok.
-
-init_per_group(_GroupName, Config) -> Config.
-end_per_group(_GroupName, Config) -> Config.
+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_take, t_bif_map_take_large,
+ 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_gc_rare_map_overflow,
+ 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_hashmap_balance,
+ t_erts_internal_order,
+ t_erts_internal_hash,
+ t_pdict,
+ t_ets,
+ t_tracing,
+
+ %% instruction-level tests
+ t_has_map_fields,
+ y_regs,
+ badmap_17].
%% tests
@@ -1707,7 +1697,6 @@ term_gen_recursive(Leafs, Flags, Depth) ->
{K1,K2} = term_gen_recursive(Leafs, Flags,
Depth+1),
{V1,V2} = term_gen_recursive(Leafs, Flags, Depth+1),
- %%ok = check_keys(K1,K2, 0),
{maps:put(K1,V1, Acc1), maps:put(K2,V2, Acc2)}
end,
{maps:new(), maps:new()},
@@ -1735,26 +1724,6 @@ term_gen_recursive(Leafs, Flags, Depth) ->
end
end.
-check_keys(K1, K2, _) when K1 =:= K2 ->
- case erlang:phash3(K1) =:= erlang:phash3(K2) of
- true -> ok;
- false ->
- io:format("Same keys with different hash values !!!\nK1 = ~p\nK2 = ~p\n", [K1,K2]),
- error
- end;
-check_keys(K1, K2, 0) ->
- case {erlang:phash3(K1), erlang:phash3(K2)} of
- {H,H} -> check_keys(K1, K2, 1);
- {_,_} -> ok
- end;
-check_keys(K1, K2, L) when L < 10 ->
- case {erlang:phash3([L|K1]), erlang:phash3([L|K2])} of
- {H,H} -> check_keys(K1, K2, L+1);
- {_,_} -> ok
- end;
-check_keys(K1, K2, L) ->
- io:format("Same hash value at level ~p !!!\nK1 = ~p\nK2 = ~p\n", [L,K1,K2]),
- error.
%% BIFs
t_bif_map_get(Config) when is_list(Config) ->
@@ -2004,7 +1973,7 @@ 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},
+ 4 => number, 18446744073709551629 => wat},
M1 = maps:remove("hi", M0),
true = is_members([4,18446744073709551629,int,<<"key">>],maps:keys(M1)),
@@ -2033,10 +2002,71 @@ t_bif_map_remove(Config) when is_list(Config) ->
%% error case
do_badmap(fun(T) ->
- {'EXIT',{{badmap,T},[{maps,remove,_,_}|_]}} =
- (catch maps:remove(a, T))
+ {'EXIT',{{badmap,T},[{maps,remove,_,_}|_]}} = (catch maps:remove(a, T))
end),
- ok.
+ ok.
+
+t_bif_map_take(Config) when is_list(Config) ->
+ error = maps:take(some_key, #{}),
+
+ M0 = #{ "hi" => "hello", int => 3, <<"key">> => <<"value">>,
+ 4 => number, 18446744073709551629 => wat},
+
+ 5 = maps:size(M0),
+ {"hello", M1} = maps:take("hi", M0),
+ true = is_members([4,18446744073709551629,int,<<"key">>],maps:keys(M1)),
+ true = is_members([number,wat,3,<<"value">>],maps:values(M1)),
+ error = maps:take("hi", M1),
+ 4 = maps:size(M1),
+
+ {3, M2} = maps:take(int, M1),
+ true = is_members([4,18446744073709551629,<<"key">>],maps:keys(M2)),
+ true = is_members([number,wat,<<"value">>],maps:values(M2)),
+ error = maps:take(int, M2),
+ 3 = maps:size(M2),
+
+ {<<"value">>,M3} = maps:take(<<"key">>, M2),
+ true = is_members([4,18446744073709551629],maps:keys(M3)),
+ true = is_members([number,wat],maps:values(M3)),
+ error = maps:take(<<"key">>, M3),
+ 2 = maps:size(M3),
+
+ {wat,M4} = maps:take(18446744073709551629, M3),
+ true = is_members([4],maps:keys(M4)),
+ true = is_members([number],maps:values(M4)),
+ error = maps:take(18446744073709551629, M4),
+ 1 = maps:size(M4),
+
+ {number,M5} = maps:take(4, M4),
+ [] = maps:keys(M5),
+ [] = maps:values(M5),
+ error = maps:take(4, M5),
+ 0 = maps:size(M5),
+
+ {wat,#{ "hi" := "hello", int := 3, 4 := number, <<"key">> := <<"value">>}} = maps:take(18446744073709551629,M0),
+
+ %% error case
+ do_badmap(fun(T) ->
+ {'EXIT',{{badmap,T},[{maps,take,_,_}|_]}} = (catch maps:take(a, T))
+ end),
+ ok.
+
+t_bif_map_take_large(Config) when is_list(Config) ->
+ KVs = [{{erlang:md5(<<I:64>>),I}, I}|| I <- lists:seq(1,500)],
+ M0 = maps:from_list(KVs),
+ ok = bif_map_take_all(KVs, M0),
+ ok.
+
+bif_map_take_all([], M0) ->
+ 0 = maps:size(M0),
+ ok;
+bif_map_take_all([{K,V}|KVs],M0) ->
+ {ok,V} = maps:find(K,M0),
+ {V,M1} = maps:take(K,M0),
+ error = maps:find(K,M1),
+ error = maps:take(K,M1),
+ bif_map_take_all(KVs,M1).
+
t_bif_map_update(Config) when is_list(Config) ->
M0 = #{ "hi" => "hello", int => 3, <<"key">> => <<"value">>,
@@ -2993,7 +3023,7 @@ id(I) -> I.
%% OTP-13146
%% Provoke major GC with a lot of "fat" maps on external format in msg queue
%% causing heap fragments to be allocated.
-t_gc_rare_map_overflow(Config) ->
+t_gc_rare_map_overflow(Config) when is_list(Config) ->
Pa = filename:dirname(code:which(?MODULE)),
{ok, Node} = test_server:start_node(gc_rare_map_overflow, slave, [{args, "-pa \""++Pa++"\""}]),
erts_debug:set_internal_state(available_internal_state, true),
@@ -3013,7 +3043,7 @@ t_gc_rare_map_overflow(Config) ->
unlink(Echo),
%% Test fatmap in exit signal
- Exiter = spawn_link(Node, fun Loop() -> receive {From,Msg} ->
+ Exiter = spawn_link(Node, fun Loop() -> receive {_From,Msg} ->
"not_a_map" = Msg % badmatch!
end,
Loop()
@@ -3031,7 +3061,7 @@ t_gc_rare_map_overflow(Config) ->
t_gc_rare_map_overflow_do(Echo, FatMap, GcFun) ->
Master = self(),
- true = receive M -> false after 0 -> true end, % assert empty msg queue
+ true = receive _M -> false after 0 -> true end, % assert empty msg queue
Echo ! {Master, token},
repeat(1000, fun(_) -> Echo ! {Master, FatMap} end, void),
diff --git a/erts/emulator/test/match_spec_SUITE.erl b/erts/emulator/test/match_spec_SUITE.erl
index 9e724bdd8c..6733237b20 100644
--- a/erts/emulator/test/match_spec_SUITE.erl
+++ b/erts/emulator/test/match_spec_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.
@@ -20,11 +20,10 @@
-module(match_spec_SUITE).
--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]).
-export([test_1/1, test_2/1, test_3/1, bad_match_spec_bin/1,
trace_control_word/1, silent/1, silent_no_ms/1, silent_test/1,
- ms_trace2/1, ms_trace3/1, boxed_and_small/1,
+ ms_trace2/1, ms_trace3/1, ms_trace_dead/1, boxed_and_small/1,
destructive_in_test_bif/1, guard_exceptions/1,
empty_list/1,
unary_plus/1, unary_minus/1, moving_labels/1]).
@@ -41,25 +40,16 @@
-include_lib("common_test/include/ct.hrl").
--export([init_per_testcase/2, end_per_testcase/2]).
-
-init_per_testcase(Func, Config) when is_atom(Func), is_list(Config) ->
- Dog=?t:timetrap(?t:seconds(30)),
- [{watchdog, Dog}|Config].
-
-end_per_testcase(_Func, Config) ->
- Dog=?config(watchdog, Config),
- ?t:timetrap_cancel(Dog).
-
-
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap, {seconds, 30}}].
all() ->
case test_server:is_native(match_spec_SUITE) of
false ->
[test_1, test_2, test_3, bad_match_spec_bin,
trace_control_word, silent, silent_no_ms, silent_test, ms_trace2,
- ms_trace3, boxed_and_small, destructive_in_test_bif,
+ ms_trace3, ms_trace_dead, boxed_and_small, destructive_in_test_bif,
guard_exceptions, unary_plus, unary_minus, fpe,
moving_labels,
faulty_seq_trace,
@@ -69,106 +59,87 @@ all() ->
true -> [not_run]
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"}.
-test_1(doc) ->
- [""];
-test_1(suite) -> [];
test_1(Config) when is_list(Config) ->
- ?line tr(fun() -> ?MODULE:f1(a) end,
- {?MODULE, f1, 1},
- [],
- [{call, {?MODULE, f1, [a]}}]),
-
- ?line tr(fun() -> ?MODULE:f2(a, a) end,
- {?MODULE, f2, 2},
- [{['$1','$1'],[{is_atom, '$1'}],[]}],
- [{call, {?MODULE, f2, [a, a]}}]),
-
- ?line tr(fun() -> ?MODULE:f2(a, a) end,
- {?MODULE, f2, 2},
- [{['$1','$1'],[{is_atom, '$1'}],[{message, false}]}],
- []),
-
- ?line tr(fun() -> ?MODULE:f2(a, a) end,
- {?MODULE, f2, 2},
- [{['$1','$1'],[{is_atom, '$1'}],[{message, 4711}]}],
- [{call, {?MODULE, f2, [a, a]}, 4711}]),
+ tr(fun() -> ?MODULE:f1(a) end,
+ {?MODULE, f1, 1},
+ [],
+ [{call, {?MODULE, f1, [a]}}]),
+
+ tr(fun() -> ?MODULE:f2(a, a) end,
+ {?MODULE, f2, 2},
+ [{['$1','$1'],[{is_atom, '$1'}],[]}],
+ [{call, {?MODULE, f2, [a, a]}}]),
+
+ tr(fun() -> ?MODULE:f2(a, a) end,
+ {?MODULE, f2, 2},
+ [{['$1','$1'],[{is_atom, '$1'}],[{message, false}]}],
+ []),
+
+ tr(fun() -> ?MODULE:f2(a, a) end,
+ {?MODULE, f2, 2},
+ [{['$1','$1'],[{is_atom, '$1'}],[{message, 4711}]}],
+ [{call, {?MODULE, f2, [a, a]}, 4711}]),
Ref = make_ref(),
- ?line tr(fun() -> ?MODULE:f2(Ref, Ref) end,
- {?MODULE, f2, 2},
- [{[Ref,'$1'],[{is_reference, '$1'}],[{message, 4711}]}],
- [{call, {?MODULE, f2, [Ref, Ref]}, 4711}]),
- ?line tr(fun() -> ?MODULE:f2(Ref, Ref) end,
- {?MODULE, f2, 2},
- [{['$1',Ref],[{is_reference, '$1'}],[{message, 4711}]}],
- [{call, {?MODULE, f2, [Ref, Ref]}, 4711}]),
-
- ?line tr(fun() -> ?MODULE:f2(a, a) end,
- {?MODULE, f2, 2},
- [{['$0','$0'],[{is_atom, '$0'}],[{message, 4711}]}],
- [{call, {?MODULE, f2, [a, a]}, 4711}]),
-
- ?line tr(fun() -> ?MODULE:f2(a, b) end,
- {?MODULE, f2, 2},
- [{['_','_'],[],[]}],
- [{call, {?MODULE, f2, [a, b]}}]),
-
- ?line tr(fun() -> ?MODULE:f2(a, b) end,
- {?MODULE, f2, 2},
- [{['_','_'],[],[{message, '$_'}]}],
- [{call, {?MODULE, f2, [a, b]}, [a, b]}]),
-
- ?line tr(fun() -> ?MODULE:f2(a, '$_') end,
- {?MODULE, f2, 2},
- [{['$1','$_'],[{is_atom, '$1'}],[]}],
- [{call, {?MODULE, f2, [a, '$_']}}]),
-
- ?line tr(fun() -> ?MODULE:f1({a}) end,
- {?MODULE, f1, 1},
- [{['$1'],[{'==', '$1', {const, {a}}}],[]}],
- [{call, {?MODULE, f1, [{a}]}}]),
-
- ?line tr(fun() -> ?MODULE:f1({a}) end,
- {?MODULE, f1, 1},
- [{['$1'],[{'==', '$1', {{a}}}],[]}],
- [{call, {?MODULE, f1, [{a}]}}]),
-
-%% Undocumented, currently.
- ?line tr(fun() -> ?MODULE:f2(a, a) end,
- {?MODULE, f2, 2},
- [{['$1','$1'],[{is_atom, '$1'}],[{message, 4711},
- {message, true}]}],
- [{call, {?MODULE, f2, [a, a]}}]),
-
- ?line tr(fun() -> ?MODULE:f2(a, a) end,
- {?MODULE, f2, 2},
- [{['$1','$1'],[{is_atom, '$1'}],[{message, 4711},
- {message, false}]}],
- []),
-
- ?line tr(fun() -> ?MODULE:f2(a, a) end,
- {?MODULE, f2, 2},
- [{['$1','$1'],[{is_atom, '$1'}],[kakalorum]}],
- [{call, {?MODULE, f2, [a, a]}}]),
+ tr(fun() -> ?MODULE:f2(Ref, Ref) end,
+ {?MODULE, f2, 2},
+ [{[Ref,'$1'],[{is_reference, '$1'}],[{message, 4711}]}],
+ [{call, {?MODULE, f2, [Ref, Ref]}, 4711}]),
+ tr(fun() -> ?MODULE:f2(Ref, Ref) end,
+ {?MODULE, f2, 2},
+ [{['$1',Ref],[{is_reference, '$1'}],[{message, 4711}]}],
+ [{call, {?MODULE, f2, [Ref, Ref]}, 4711}]),
+
+ tr(fun() -> ?MODULE:f2(a, a) end,
+ {?MODULE, f2, 2},
+ [{['$0','$0'],[{is_atom, '$0'}],[{message, 4711}]}],
+ [{call, {?MODULE, f2, [a, a]}, 4711}]),
+
+ tr(fun() -> ?MODULE:f2(a, b) end,
+ {?MODULE, f2, 2},
+ [{['_','_'],[],[]}],
+ [{call, {?MODULE, f2, [a, b]}}]),
+
+ tr(fun() -> ?MODULE:f2(a, b) end,
+ {?MODULE, f2, 2},
+ [{['_','_'],[],[{message, '$_'}]}],
+ [{call, {?MODULE, f2, [a, b]}, [a, b]}]),
+
+ tr(fun() -> ?MODULE:f2(a, '$_') end,
+ {?MODULE, f2, 2},
+ [{['$1','$_'],[{is_atom, '$1'}],[]}],
+ [{call, {?MODULE, f2, [a, '$_']}}]),
+
+ tr(fun() -> ?MODULE:f1({a}) end,
+ {?MODULE, f1, 1},
+ [{['$1'],[{'==', '$1', {const, {a}}}],[]}],
+ [{call, {?MODULE, f1, [{a}]}}]),
+
+ tr(fun() -> ?MODULE:f1({a}) end,
+ {?MODULE, f1, 1},
+ [{['$1'],[{'==', '$1', {{a}}}],[]}],
+ [{call, {?MODULE, f1, [{a}]}}]),
+
+ %% Undocumented, currently.
+ tr(fun() -> ?MODULE:f2(a, a) end,
+ {?MODULE, f2, 2},
+ [{['$1','$1'],[{is_atom, '$1'}],[{message, 4711},
+ {message, true}]}],
+ [{call, {?MODULE, f2, [a, a]}}]),
+
+ tr(fun() -> ?MODULE:f2(a, a) end,
+ {?MODULE, f2, 2},
+ [{['$1','$1'],[{is_atom, '$1'}],[{message, 4711},
+ {message, false}]}],
+ []),
+
+ tr(fun() -> ?MODULE:f2(a, a) end,
+ {?MODULE, f2, 2},
+ [{['$1','$1'],[{is_atom, '$1'}],[kakalorum]}],
+ [{call, {?MODULE, f2, [a, a]}}]),
%% Verify that 'process_dump' can handle a matchstate on the stack.
tr(fun() -> fbinmatch(<<0>>, 0) end,
@@ -176,56 +147,49 @@ test_1(Config) when is_list(Config) ->
[{['_'],[],[{message, {process_dump}}]}],
[fun({trace, _, call, {?MODULE, f1, [0]}, _Bin}) -> true end]),
-% Error cases
- ?line errchk([{['$1','$1'],[{is_atom, '$1'}],[{banka, kanin}]}]),
-
+ % Error cases
+ errchk([{['$1','$1'],[{is_atom, '$1'}],[{banka, kanin}]}]),
ok.
-test_2(doc) ->
- [""];
-test_2(suite) -> [];
test_2(Config) when is_list(Config) ->
- ?line tr(fun() -> ?MODULE:f2(a, a) end,
- {?MODULE, f2, 2},
- [{['$1','$1'],[{is_atom, '$1'}],[{return_trace}]}],
- [{call, {?MODULE, f2, [a, a]}},
- {return_from, {?MODULE, f2, 2}, {a, a}}]),
+ tr(fun() -> ?MODULE:f2(a, a) end,
+ {?MODULE, f2, 2},
+ [{['$1','$1'],[{is_atom, '$1'}],[{return_trace}]}],
+ [{call, {?MODULE, f2, [a, a]}},
+ {return_from, {?MODULE, f2, 2}, {a, a}}]),
ok.
-test_3(doc) ->
- ["Test the enable_trace/2 and caller/0 PAM instructions"];
-test_3(suite) -> [];
+%% Test the enable_trace/2 and caller/0 PAM instructions
test_3(Config) when is_list(Config) ->
- ?line Fun1 = fun() ->
+ Fun1 = fun() ->
register(fnoppelklopfer,self()),
?MODULE:f2(a, b),
?MODULE:f2(a, b)
end,
- ?line P1 = spawn(?MODULE, runner, [self(), Fun1]),
- ?line Pat = [{['$1','$1'],[],[{message,
- [{enable_trace, P1, call},{caller}]}]},
- {['_','_'],[],[{message,
- [{disable_trace, fnoppelklopfer, call}]}]}],
- ?line Fun2 = fun() -> ?MODULE:f3(a, a) end,
- ?line P2 = spawn(?MODULE, runner, [self(), Fun2]),
- ?line erlang:trace(P2, true, [call]),
- ?line erlang:trace_pattern({?MODULE, f2, 2}, Pat),
- ?line collect(P2, [{trace, P2, call, {?MODULE, f2, [a, a]}, [true,
+ P1 = spawn(?MODULE, runner, [self(), Fun1]),
+ Pat = [{['$1','$1'],[],[{message,
+ [{enable_trace, P1, call},{caller}]}]},
+ {['_','_'],[],[{message,
+ [{disable_trace, fnoppelklopfer, call}]}]}],
+ Fun2 = fun() -> ?MODULE:f3(a, a) end,
+ P2 = spawn(?MODULE, runner, [self(), Fun2]),
+ erlang:trace(P2, true, [call]),
+ erlang:trace_pattern({?MODULE, f2, 2}, Pat),
+ collect(P2, [{trace, P2, call, {?MODULE, f2, [a, a]}, [true,
{?MODULE,f3,2}]}]),
- ?line collect(P1, [{trace, P1, call, {?MODULE, f2, [a, b]}, [true]}]),
- ?line ok.
+ collect(P1, [{trace, P1, call, {?MODULE, f2, [a, b]}, [true]}]),
+ ok.
-otp_9422(doc) -> [];
otp_9422(Config) when is_list(Config) ->
Laps = 10000,
- ?line Fun1 = fun() -> otp_9422_tracee() end,
- ?line P1 = spawn_link(?MODULE, loop_runner, [self(), Fun1, Laps]),
+ Fun1 = fun() -> otp_9422_tracee() end,
+ P1 = spawn_link(?MODULE, loop_runner, [self(), Fun1, Laps]),
io:format("spawned ~p as tracee\n", [P1]),
- ?line erlang:trace(P1, true, [call, silent]),
+ erlang:trace(P1, true, [call, silent]),
- ?line Fun2 = fun() -> otp_9422_trace_changer() end,
- ?line P2 = spawn_link(?MODULE, loop_runner, [self(), Fun2, Laps]),
+ Fun2 = fun() -> otp_9422_trace_changer() end,
+ P2 = spawn_link(?MODULE, loop_runner, [self(), Fun2, Laps]),
io:format("spawned ~p as trace_changer\n", [P2]),
start_collect(P1),
@@ -244,9 +208,9 @@ otp_9422_tracee() ->
otp_9422_trace_changer() ->
Pat1 = [{[a], [], [{enable_trace, arity}]}],
- ?line erlang:trace_pattern({?MODULE, f1, 1}, Pat1),
+ erlang:trace_pattern({?MODULE, f1, 1}, Pat1),
Pat2 = [{[b], [], [{disable_trace, arity}]}],
- ?line erlang:trace_pattern({?MODULE, f1, 1}, Pat2).
+ erlang:trace_pattern({?MODULE, f1, 1}, Pat2).
@@ -261,261 +225,227 @@ bad_match_spec_bin(Config) when is_list(Config) ->
-trace_control_word(doc) ->
- ["Test the erlang:system_info(trace_control_word) and ",
- "erlang:system_flag(trace_control_word, Value) BIFs, ",
- "as well as the get_tcw/0 and set_tcw/1 PAM instructions"];
-trace_control_word(suite) -> [];
+%% Test the erlang:system_info(trace_control_word) and
+%% erlang:system_flag(trace_control_word, Value) BIFs,
+%% as well as the get_tcw/0 and set_tcw/1 PAM instructions
trace_control_word(Config) when is_list(Config) ->
- ?line 32 = Bits = tcw_bits(),
- ?line High = 1 bsl (Bits - 1),
- ?line erlang:system_flag(trace_control_word, 17),
- ?line tr(fun() -> ?MODULE:f1(a) end,
- {?MODULE, f1, 1},
- [{'_',[{'=:=', {get_tcw}, 17}],[]}],
- [{call, {?MODULE, f1, [a]}}]),
- ?line tr(fun() -> ?MODULE:f1(a) end,
- {?MODULE, f1, 1},
- [{'_',[{'=:=', {get_tcw}, 18}],[]}],
- []),
- ?line erlang:system_flag(trace_control_word, High),
- ?line tr(fun() -> ?MODULE:f1(a) end,
- {?MODULE, f1, 1},
- [{'_',[{'=:=', {get_tcw}, High}],[]}],
- [{call, {?MODULE, f1, [a]}}]),
- ?line erlang:system_flag(trace_control_word, 0),
- ?line tr(fun() ->
- ?MODULE:f1(a),
- ?MODULE:f1(start),
- ?MODULE:f1(b),
- ?MODULE:f1(c),
- ?MODULE:f1(high),
- ?MODULE:f1(d),
- ?MODULE:f1(stop),
- ?MODULE:f1(e)
- end,
- {?MODULE, f1, 1},
- [{[start],
- [],
- [{message, {set_tcw, 17}}]},
- {[stop],
- [],
- [{message, {set_tcw, 0}}]},
- {[high],
- [],
- [{message, {set_tcw, High}}]},
- {['_'],
- [{'>', {get_tcw}, 0}],
- [{set_tcw, {'+', 1, {get_tcw}}}, {message, {get_tcw}}] }],
- [{call, {?MODULE, f1, [start]}, 0},
- {call, {?MODULE, f1, [b]}, 18},
- {call, {?MODULE, f1, [c]}, 19},
- {call, {?MODULE, f1, [high]}, 19},
- {call, {?MODULE, f1, [d]}, High + 1},
- {call, {?MODULE, f1, [stop]}, High + 1}]),
- ?line 0 = erlang:system_info(trace_control_word),
+ 32 = Bits = tcw_bits(),
+ High = 1 bsl (Bits - 1),
+ erlang:system_flag(trace_control_word, 17),
+ tr(fun() -> ?MODULE:f1(a) end,
+ {?MODULE, f1, 1},
+ [{'_',[{'=:=', {get_tcw}, 17}],[]}],
+ [{call, {?MODULE, f1, [a]}}]),
+ tr(fun() -> ?MODULE:f1(a) end,
+ {?MODULE, f1, 1},
+ [{'_',[{'=:=', {get_tcw}, 18}],[]}],
+ []),
+ erlang:system_flag(trace_control_word, High),
+ tr(fun() -> ?MODULE:f1(a) end,
+ {?MODULE, f1, 1},
+ [{'_',[{'=:=', {get_tcw}, High}],[]}],
+ [{call, {?MODULE, f1, [a]}}]),
+ erlang:system_flag(trace_control_word, 0),
+ tr(fun() ->
+ ?MODULE:f1(a),
+ ?MODULE:f1(start),
+ ?MODULE:f1(b),
+ ?MODULE:f1(c),
+ ?MODULE:f1(high),
+ ?MODULE:f1(d),
+ ?MODULE:f1(stop),
+ ?MODULE:f1(e)
+ end,
+ {?MODULE, f1, 1},
+ [{[start],
+ [],
+ [{message, {set_tcw, 17}}]},
+ {[stop],
+ [],
+ [{message, {set_tcw, 0}}]},
+ {[high],
+ [],
+ [{message, {set_tcw, High}}]},
+ {['_'],
+ [{'>', {get_tcw}, 0}],
+ [{set_tcw, {'+', 1, {get_tcw}}}, {message, {get_tcw}}] }],
+ [{call, {?MODULE, f1, [start]}, 0},
+ {call, {?MODULE, f1, [b]}, 18},
+ {call, {?MODULE, f1, [c]}, 19},
+ {call, {?MODULE, f1, [high]}, 19},
+ {call, {?MODULE, f1, [d]}, High + 1},
+ {call, {?MODULE, f1, [stop]}, High + 1}]),
+ 0 = erlang:system_info(trace_control_word),
ok.
tcw_bits() ->
- ?line tcw_bits(erlang:system_flag(trace_control_word, 0), 0, 0).
+ tcw_bits(erlang:system_flag(trace_control_word, 0), 0, 0).
tcw_bits(Save, Prev, Bits) ->
- ?line Curr = 1 bsl Bits,
- ?line case catch erlang:system_flag(trace_control_word, Curr) of
- {'EXIT' , {badarg, _}} ->
- ?line Prev = erlang:system_flag(trace_control_word, Save),
- Bits;
- Prev ->
- ?line Curr = erlang:system_info(trace_control_word),
- tcw_bits(Save, Curr, Bits+1)
- end.
-
-
-
-silent(doc) ->
- ["Test the erlang:trace(_, _, [silent]) flag ",
- "as well as the silent/0 PAM instruction"];
-silent(suite) -> [];
+ Curr = 1 bsl Bits,
+ case catch erlang:system_flag(trace_control_word, Curr) of
+ {'EXIT' , {badarg, _}} ->
+ Prev = erlang:system_flag(trace_control_word, Save),
+ Bits;
+ Prev ->
+ Curr = erlang:system_info(trace_control_word),
+ tcw_bits(Save, Curr, Bits+1)
+ end.
+
+
+%% Test the erlang:trace(_, _, [silent]) flag
+%% as well as the silent/0 PAM instruction
silent(Config) when is_list(Config) ->
%% Global call trace
- ?line tr(fun() ->
- ?MODULE:f1(a), % No trace - not active
- ?MODULE:f1(miss), % No trace - no activation
- ?MODULE:f1(b), % No trace - still not active
- ?MODULE:f1(start), % Trace - activation
- ?MODULE:f1(c), % Trace - active
- f1(d), % No trace - local call
- ?MODULE:f1(miss), % Trace - no inactivation
- ?MODULE:f1(e), % Trace - still active
- ?MODULE:f1(stop), % No trace - inactivation
- ?MODULE:f1(f) % No trace - not active
- end,
- {?MODULE, f1, 1},
- [call, silent],
- [{[start],
- [],
- [{silent, false}, {message, start}]},
- {[stop],
- [],
- [{silent, true}, {message, stop}]},
- {[miss],
- [],
- [{silent, neither_true_nor_false}, {message, miss}]},
- {['$1'],
- [],
- [{message, '$1'}] }],
- [global],
- [{call, {?MODULE, f1, [start]}, start},
- {call, {?MODULE, f1, [c]}, c},
- {call, {?MODULE, f1, [miss]}, miss},
- {call, {?MODULE, f1, [e]}, e} ]),
+ tr(fun() ->
+ ?MODULE:f1(a), % No trace - not active
+ ?MODULE:f1(miss), % No trace - no activation
+ ?MODULE:f1(b), % No trace - still not active
+ ?MODULE:f1(start), % Trace - activation
+ ?MODULE:f1(c), % Trace - active
+ f1(d), % No trace - local call
+ ?MODULE:f1(miss), % Trace - no inactivation
+ ?MODULE:f1(e), % Trace - still active
+ ?MODULE:f1(stop), % No trace - inactivation
+ ?MODULE:f1(f) % No trace - not active
+ end,
+ {?MODULE, f1, 1},
+ [call, silent],
+ [{[start],
+ [],
+ [{silent, false}, {message, start}]},
+ {[stop],
+ [],
+ [{silent, true}, {message, stop}]},
+ {[miss],
+ [],
+ [{silent, neither_true_nor_false}, {message, miss}]},
+ {['$1'],
+ [],
+ [{message, '$1'}] }],
+ [global],
+ [{call, {?MODULE, f1, [start]}, start},
+ {call, {?MODULE, f1, [c]}, c},
+ {call, {?MODULE, f1, [miss]}, miss},
+ {call, {?MODULE, f1, [e]}, e} ]),
%% Local call trace
- ?line tr(fun() ->
- ?MODULE:f1(a), % No trace - not active
- f1(b), % No trace - not active
- ?MODULE:f1(start), % Trace - activation
- ?MODULE:f1(c), % Trace - active
- f1(d), % Trace - active
- f1(stop), % No trace - inactivation
- ?MODULE:f1(e), % No trace - not active
- f1(f) % No trace - not active
- end,
- {?MODULE, f1, 1},
- [call, silent],
- [{[start],
- [],
- [{silent, false}, {message, start}]},
- {[stop],
- [],
- [{silent, true}, {message, stop}]},
- {['$1'],
- [],
- [{message, '$1'}] }],
- [local],
- [{call, {?MODULE, f1, [start]}, start},
- {call, {?MODULE, f1, [c]}, c},
- {call, {?MODULE, f1, [d]}, d} ]),
+ tr(fun() ->
+ ?MODULE:f1(a), % No trace - not active
+ f1(b), % No trace - not active
+ ?MODULE:f1(start), % Trace - activation
+ ?MODULE:f1(c), % Trace - active
+ f1(d), % Trace - active
+ f1(stop), % No trace - inactivation
+ ?MODULE:f1(e), % No trace - not active
+ f1(f) % No trace - not active
+ end,
+ {?MODULE, f1, 1},
+ [call, silent],
+ [{[start],
+ [],
+ [{silent, false}, {message, start}]},
+ {[stop],
+ [],
+ [{silent, true}, {message, stop}]},
+ {['$1'],
+ [],
+ [{message, '$1'}] }],
+ [local],
+ [{call, {?MODULE, f1, [start]}, start},
+ {call, {?MODULE, f1, [c]}, c},
+ {call, {?MODULE, f1, [d]}, d} ]),
ok.
-silent_no_ms(doc) ->
- ["Test the erlang:trace(_, _, [silent]) flag without match specs"];
-silent_no_ms(suite) -> [];
+%% Test the erlang:trace(_, _, [silent]) flag without match specs
silent_no_ms(Config) when is_list(Config) ->
%% Global call trace
%%
%% Trace f2/2 and erlang:integer_to_list/1 without match spec
%% and use match spec on f1/1 to control silent flag.
- ?line tr(
- fun () ->
- ?MODULE:f1(a),
- ?MODULE:f2(b, c),
- _ = erlang:integer_to_list(id(1)),
- ?MODULE:f3(d, e),
- ?MODULE:f1(start),
- ?MODULE:f2(f, g),
- _ = erlang:integer_to_list(id(2)),
- ?MODULE:f3(h, i),
- ?MODULE:f1(stop),
- ?MODULE:f2(j, k),
- _ = erlang:integer_to_list(id(3)),
- ?MODULE:f3(l, m)
- end,
- fun (Tracee) ->
- ?line 1 =
- erlang:trace(Tracee, true,
- [call,silent,return_to]),
- ?line 1 =
- erlang:trace_pattern(
- {?MODULE,f2,2},
- [],
- [global]),
- ?line 1 =
- erlang:trace_pattern(
- {erlang,integer_to_list,1},
- [],
- [global]),
- ?line 1 =
- erlang:trace_pattern(
- {?MODULE,f1,1},
- [{[start],[],[{silent,false}]},
- {[stop],[],[{silent,true}]}],
- [global]),
- %%
- %% Expected: (no return_to for global call trace)
- %%
- ?line
- [{trace,Tracee,call,{?MODULE,f1,[start]}},
- {trace,Tracee,call,{?MODULE,f2,[f,g]}},
- {trace,Tracee,call,{erlang,integer_to_list,[2]}},
- {trace,Tracee,call,{?MODULE,f2,[h,i]}}]
- end),
+ tr(
+ fun () ->
+ ?MODULE:f1(a),
+ ?MODULE:f2(b, c),
+ _ = erlang:integer_to_list(id(1)),
+ ?MODULE:f3(d, e),
+ ?MODULE:f1(start),
+ ?MODULE:f2(f, g),
+ _ = erlang:integer_to_list(id(2)),
+ ?MODULE:f3(h, i),
+ ?MODULE:f1(stop),
+ ?MODULE:f2(j, k),
+ _ = erlang:integer_to_list(id(3)),
+ ?MODULE:f3(l, m)
+ end,
+ fun (Tracee) ->
+ 1 = erlang:trace(Tracee, true, [call,silent,return_to]),
+ 1 = erlang:trace_pattern( {?MODULE,f2,2}, [], [global]),
+ 1 = erlang:trace_pattern( {erlang,integer_to_list,1}, [], [global]),
+ 1 = erlang:trace_pattern(
+ {?MODULE,f1,1},
+ [{[start],[],[{silent,false}]},
+ {[stop],[],[{silent,true}]}],
+ [global]),
+ %%
+ %% Expected: (no return_to for global call trace)
+ %%
+ [{trace,Tracee,call,{?MODULE,f1,[start]}},
+ {trace,Tracee,call,{?MODULE,f2,[f,g]}},
+ {trace,Tracee,call,{erlang,integer_to_list,[2]}},
+ {trace,Tracee,call,{?MODULE,f2,[h,i]}}]
+ end),
%% Local call trace
%%
%% Trace f2/2 and erlang:integer_to_list/1 without match spec
%% and use match spec on f1/1 to control silent flag.
- ?line tr(
- fun () ->
- ?MODULE:f1(a),
- ?MODULE:f2(b, c),
- _ = erlang:integer_to_list(id(1)),
- ?MODULE:f3(d, e),
- ?MODULE:f1(start),
- ?MODULE:f2(f, g),
- _ = erlang:integer_to_list(id(2)),
- ?MODULE:f3(h, i),
- ?MODULE:f1(stop),
- ?MODULE:f2(j, k),
- _ = erlang:integer_to_list(id(3)),
- ?MODULE:f3(l, m)
- end,
- fun (Tracee) ->
- ?line 1 =
- erlang:trace(Tracee, true,
- [call,silent,return_to]),
- ?line 1 =
- erlang:trace_pattern(
- {?MODULE,f2,2},
- [],
- [local]),
- ?line 1 =
- erlang:trace_pattern(
- {erlang,integer_to_list,1},
- [],
- [local]),
- ?line 1 =
- erlang:trace_pattern(
- {?MODULE,f1,1},
- [{[start],[],[{silent,false}]},
- {[stop],[],[{silent,true}]}],
- [local]),
- %%
- %% Expected:
- %%
- ?line
- [{trace,Tracee,call,{?MODULE,f1,[start]}},
- {trace,Tracee,return_to,
- {?MODULE,'-silent_no_ms/1-fun-2-',0}},
- {trace,Tracee,call,{?MODULE,f2,[f,g]}},
- {trace,Tracee,return_to,
- {?MODULE,'-silent_no_ms/1-fun-2-',0}},
- {trace,Tracee,call,{erlang,integer_to_list,[2]}},
- {trace,Tracee,return_to,
- {?MODULE,'-silent_no_ms/1-fun-2-',0}},
- {trace,Tracee,call,{?MODULE,f2,[h,i]}},
- {trace,Tracee,return_to,{?MODULE,f3,2}}]
- end).
-
-silent_test(doc) ->
- ["Test that match_spec_test does not activate silent"];
+ tr(
+ fun () ->
+ ?MODULE:f1(a),
+ ?MODULE:f2(b, c),
+ _ = erlang:integer_to_list(id(1)),
+ ?MODULE:f3(d, e),
+ ?MODULE:f1(start),
+ ?MODULE:f2(f, g),
+ _ = erlang:integer_to_list(id(2)),
+ ?MODULE:f3(h, i),
+ ?MODULE:f1(stop),
+ ?MODULE:f2(j, k),
+ _ = erlang:integer_to_list(id(3)),
+ ?MODULE:f3(l, m)
+ end,
+ fun (Tracee) ->
+ 1 = erlang:trace(Tracee, true, [call,silent,return_to]),
+ 1 = erlang:trace_pattern( {?MODULE,f2,2}, [], [local]),
+ 1 = erlang:trace_pattern( {erlang,integer_to_list,1}, [], [local]),
+ 1 = erlang:trace_pattern(
+ {?MODULE,f1,1},
+ [{[start],[],[{silent,false}]},
+ {[stop],[],[{silent,true}]}],
+ [local]),
+ %%
+ %% Expected:
+ %%
+ [{trace,Tracee,call,{?MODULE,f1,[start]}},
+ {trace,Tracee,return_to,
+ {?MODULE,'-silent_no_ms/1-fun-2-',0}},
+ {trace,Tracee,call,{?MODULE,f2,[f,g]}},
+ {trace,Tracee,return_to,
+ {?MODULE,'-silent_no_ms/1-fun-2-',0}},
+ {trace,Tracee,call,{erlang,integer_to_list,[2]}},
+ {trace,Tracee,return_to,
+ {?MODULE,'-silent_no_ms/1-fun-2-',0}},
+ {trace,Tracee,call,{?MODULE,f2,[h,i]}},
+ {trace,Tracee,return_to,{?MODULE,f3,2}}]
+ end).
+
+%% Test that match_spec_test does not activate silent
silent_test(_Config) ->
{flags,[]} = erlang:trace_info(self(),flags),
erlang:match_spec_test([],[{'_',[],[{silent,true}]}],trace),
{flags,[]} = erlang:trace_info(self(),flags).
-ms_trace2(doc) ->
- ["Test the match spec functions {trace/2}"];
-ms_trace2(suite) -> [];
+%% Test the match spec functions {trace/2}
ms_trace2(Config) when is_list(Config) ->
Tracer = self(),
%% Meta trace init
@@ -523,75 +453,60 @@ ms_trace2(Config) when is_list(Config) ->
%% Trace global f1/1, local f2/2, global erlang:integer_to_list/1
%% without match spec. Use match spec functions
%% {trace/2} to control trace through fn/2,3.
- ?line tr(
- fun () ->
- ?MODULE:f1(a),
- ?MODULE:f2(b, c),
- _ = erlang:integer_to_list(id(1)),
- ?MODULE:f3(d, e),
- fn([all], [call,return_to,{tracer,Tracer}]),
- ?MODULE:f1(f),
- f2(g, h),
- f1(i),
- _ = erlang:integer_to_list(id(2)),
- ?MODULE:f3(j, k),
- fn([call,return_to], []),
- ?MODULE:f1(l),
- ?MODULE:f2(m, n),
- _ = erlang:integer_to_list(id(3)),
- ?MODULE:f3(o, p)
- end,
- fun (Tracee) ->
- ?line 1 =
- erlang:trace(Tracee, false, [all]),
- ?line 1 =
- erlang:trace_pattern(
- {?MODULE,f1,1},
- [],
- [global]),
- ?line 1 =
- erlang:trace_pattern(
- {?MODULE,f2,2},
- [],
- [local]),
- ?line 1 =
- erlang:trace_pattern(
- {erlang,integer_to_list,1},
- [],
- [global]),
- ?line 3 =
- erlang:trace_pattern(
- {?MODULE,fn,'_'},
- [{['$1','$2'],[],
- [{trace,'$1','$2'},{message,ms_trace2}]}],
- [meta]),
- %%
- %% Expected: (no return_to for global call trace)
- %%
- ?line Origin = {match_spec_SUITE,'-ms_trace2/1-fun-0-',1},
- ?line
- [{trace_ts,Tracee,call,
- {?MODULE,fn,
- [[all],[call,return_to,{tracer,Tracer}]]},
- ms_trace2},
- {trace,Tracee,call,{?MODULE,f1,[f]}},
- {trace,Tracee,call,{?MODULE,f2,[g,h]}},
- {trace,Tracee,return_to,Origin},
- {trace,Tracee,call,{erlang,integer_to_list,[2]}},
- {trace,Tracee,call,{?MODULE,f2,[j,k]}},
- {trace,Tracee,return_to,{?MODULE,f3,2}},
- {trace_ts,Tracee,call,
- {?MODULE,fn,
- [[call,return_to],[]]},
- ms_trace2}]
- end),
+ tr(
+ fun () ->
+ ?MODULE:f1(a),
+ ?MODULE:f2(b, c),
+ _ = erlang:integer_to_list(id(1)),
+ ?MODULE:f3(d, e),
+ fn([all], [call,return_to,{tracer,Tracer}]),
+ ?MODULE:f1(f),
+ f2(g, h),
+ f1(i),
+ _ = erlang:integer_to_list(id(2)),
+ ?MODULE:f3(j, k),
+ fn([call,return_to], []),
+ ?MODULE:f1(l),
+ ?MODULE:f2(m, n),
+ _ = erlang:integer_to_list(id(3)),
+ ?MODULE:f3(o, p)
+ end,
+ fun (Tracee) ->
+ 1 = erlang:trace(Tracee, false, [all]),
+ 1 = erlang:trace_pattern( {?MODULE,f1,1}, [], [global]),
+ 1 = erlang:trace_pattern( {?MODULE,f2,2}, [], [local]),
+ 1 = erlang:trace_pattern( {erlang,integer_to_list,1}, [], [global]),
+ 3 = erlang:trace_pattern(
+ {?MODULE,fn,'_'},
+ [{['$1','$2'],[],
+ [{trace,'$1','$2'},{message,ms_trace2}]}],
+ [meta]),
+ %%
+ %% Expected: (no return_to for global call trace)
+ %%
+ Origin = {match_spec_SUITE,'-ms_trace2/1-fun-0-',1},
+ [{trace_ts,Tracee,call,
+ {?MODULE,fn,
+ [[all],[call,return_to,{tracer,Tracer}]]},
+ ms_trace2},
+ {trace,Tracee,call,{?MODULE,f1,[f]}},
+ {trace,Tracee,call,{?MODULE,f2,[g,h]}},
+ {trace,Tracee,return_to,Origin},
+ {trace,Tracee,call,{erlang,integer_to_list,[2]}},
+ {trace,Tracee,call,{?MODULE,f2,[j,k]}},
+ {trace,Tracee,return_to,{?MODULE,f3,2}},
+ {trace_ts,Tracee,call,
+ {?MODULE,fn,
+ [[call,return_to],[]]},
+ ms_trace2}]
+ end),
+ %% Silence valgrind
+ erlang:trace_pattern({?MODULE,fn,'_'},[],[]),
ok.
-ms_trace3(doc) ->
- ["Test the match spec functions {trace/3}"];
-ms_trace3(suite) -> [];
+%% Test the match spec functions {trace/3}
ms_trace3(Config) when is_list(Config) ->
TraceeName = 'match_spec_SUITE:ms_trace3',
Tracer = self(),
@@ -602,134 +517,140 @@ ms_trace3(Config) when is_list(Config) ->
%% {trace/2} to control trace through fn/2,3.
Tag = make_ref(),
Controller =
- spawn_link(
- fun () ->
- receive
- {Tracee,Tag,start} ->
- fn(TraceeName, [all],
- [call,return_to,send,'receive',
- {tracer,Tracer}]),
- Tracee ! {self(),Tag,started},
- receive {Tracee,Tag,stop_1} -> ok end,
- fn(Tracee, [call,return_to], []),
- Tracee ! {self(),Tag,stopped_1},
- receive {Tracee,Tag,stop_2} -> ok end,
- fn(Tracee, [all], []),
- Tracee ! {self(),Tag,stopped_2}
- end
- end),
- ?line tr(
- fun () -> %% Action
- register(TraceeName, self()),
- ?MODULE:f1(a),
- ?MODULE:f2(b, c),
- _ = erlang:integer_to_list(id(1)),
- ?MODULE:f3(d, e),
- Controller ! {self(),Tag,start},
- receive {Controller,Tag,started} -> ok end,
- ?MODULE:f1(f),
- f2(g, h),
- f1(i),
- _ = erlang:integer_to_list(id(2)),
- ?MODULE:f3(j, k),
- Controller ! {self(),Tag,stop_1},
- receive {Controller,Tag,stopped_1} -> ok end,
- ?MODULE:f1(l),
- ?MODULE:f2(m, n),
- _ = erlang:integer_to_list(id(3)),
- ?MODULE:f3(o, p),
- Controller ! {self(),Tag,stop_2},
- receive {Controller,Tag,stopped_2} -> ok end,
- ?MODULE:f1(q),
- ?MODULE:f2(r, s),
- _ = erlang:integer_to_list(id(4)),
- ?MODULE:f3(t, u)
- end,
-
- fun (Tracee) -> %% Startup
- ?line 1 =
- erlang:trace(Tracee, false, [all]),
- ?line 1 =
- erlang:trace_pattern(
- {?MODULE,f1,1},
- [],
- [global]),
- ?line 1 =
- erlang:trace_pattern(
- {?MODULE,f2,2},
- [],
- [local]),
- ?line 1 =
- erlang:trace_pattern(
- {erlang,integer_to_list,1},
- [],
- [global]),
- ?line 3 =
- erlang:trace_pattern(
- {?MODULE,fn,'_'},
- [{['$1','$2','$3'],[],
- [{trace,'$1','$2','$3'},{message,Tag}]}],
- [meta]),
- %%
- %% Expected: (no return_to for global call trace)
- %%
- ?line Origin = {match_spec_SUITE,'-ms_trace3/1-fun-1-',2},
- ?line
- [{trace_ts,Controller,call,
- {?MODULE,fn,[TraceeName,[all],
- [call,return_to,send,'receive',
- {tracer,Tracer}]]},
- Tag},
- {trace,Tracee,'receive',{Controller,Tag,started}},
- {trace,Tracee,call,{?MODULE,f1,[f]}},
- {trace,Tracee,call,{?MODULE,f2,[g,h]}},
- {trace,Tracee,return_to,Origin},
- {trace,Tracee,call,{erlang,integer_to_list,[2]}},
- {trace,Tracee,call,{?MODULE,f2,[j,k]}},
- {trace,Tracee,return_to,{?MODULE,f3,2}},
- {trace,Tracee,send,{Tracee,Tag,stop_1},Controller},
- {trace_ts,Controller,call,
- {?MODULE,fn,[Tracee,[call,return_to],[]]},
- Tag},
- {trace_ts,Controller,call,
- {?MODULE,fn,[Tracee,[all],[]]},
- Tag}]
- end),
+ spawn_link(
+ fun () ->
+ receive
+ {Tracee,Tag,start} ->
+ fn(TraceeName, [all],
+ [call,return_to,send,'receive',
+ {tracer,Tracer}]),
+ Tracee ! {self(),Tag,started},
+ receive {Tracee,Tag,stop_1} -> ok end,
+ fn(Tracee, [call,return_to], []),
+ Tracee ! {self(),Tag,stopped_1},
+ receive {Tracee,Tag,stop_2} -> ok end,
+ fn(Tracee, [all], []),
+ Tracee ! {self(),Tag,stopped_2}
+ end
+ end),
+ tr(
+ fun () -> %% Action
+ register(TraceeName, self()),
+ ?MODULE:f1(a),
+ ?MODULE:f2(b, c),
+ _ = erlang:integer_to_list(id(1)),
+ ?MODULE:f3(d, e),
+ Controller ! {self(),Tag,start},
+ receive {Controller,Tag,started} -> ok end,
+ ?MODULE:f1(f),
+ f2(g, h),
+ f1(i),
+ _ = erlang:integer_to_list(id(2)),
+ ?MODULE:f3(j, k),
+ Controller ! {self(),Tag,stop_1},
+ receive {Controller,Tag,stopped_1} -> ok end,
+ ?MODULE:f1(l),
+ ?MODULE:f2(m, n),
+ _ = erlang:integer_to_list(id(3)),
+ ?MODULE:f3(o, p),
+ Controller ! {self(),Tag,stop_2},
+ receive {Controller,Tag,stopped_2} -> ok end,
+ ?MODULE:f1(q),
+ ?MODULE:f2(r, s),
+ _ = erlang:integer_to_list(id(4)),
+ ?MODULE:f3(t, u)
+ end,
+
+ fun (Tracee) -> %% Startup
+ 1 = erlang:trace(Tracee, false, [all]),
+ 1 = erlang:trace_pattern( {?MODULE,f1,1}, [], [global]),
+ 1 = erlang:trace_pattern( {?MODULE,f2,2}, [], [local]),
+ 1 = erlang:trace_pattern( {erlang,integer_to_list,1}, [], [global]),
+ 3 = erlang:trace_pattern(
+ {?MODULE,fn,'_'},
+ [{['$1','$2','$3'],[],
+ [{trace,'$1','$2','$3'},{message,Tag}]}],
+ [meta]),
+ %%
+ %% Expected: (no return_to for global call trace)
+ %%
+ Origin = {match_spec_SUITE,'-ms_trace3/1-fun-1-',2},
+ [{trace_ts,Controller,call,
+ {?MODULE,fn,[TraceeName,[all],
+ [call,return_to,send,'receive',
+ {tracer,Tracer}]]},
+ Tag},
+ {trace,Tracee,'receive',{Controller,Tag,started}},
+ {trace,Tracee,call,{?MODULE,f1,[f]}},
+ {trace,Tracee,call,{?MODULE,f2,[g,h]}},
+ {trace,Tracee,return_to,Origin},
+ {trace,Tracee,call,{erlang,integer_to_list,[2]}},
+ {trace,Tracee,call,{?MODULE,f2,[j,k]}},
+ {trace,Tracee,return_to,{?MODULE,f3,2}},
+ {trace,Tracee,send,{Tracee,Tag,stop_1},Controller},
+ {trace_ts,Controller,call,
+ {?MODULE,fn,[Tracee,[call,return_to],[]]},
+ Tag},
+ {trace_ts,Controller,call,
+ {?MODULE,fn,[Tracee,[all],[]]},
+ Tag}]
+ end),
ok.
-
-
-destructive_in_test_bif(doc) ->
- ["Test that destructive operations in test bif does not really happen"];
-destructive_in_test_bif(suite) -> [];
+%% Test that a dead tracer is removed using ms
+ms_trace_dead(_Config) ->
+ Self = self(),
+ TFun = fun F() -> receive M -> Self ! M, F() end end,
+ {Tracer, MRef} = spawn_monitor(TFun),
+ MetaTracer = spawn_link(TFun),
+ erlang:trace_pattern({?MODULE, f1, '_'},
+ [{'_',[],[{message, false},
+ {trace,[],
+ [call,{const,{tracer,Tracer}}]}]}],
+ [{meta, MetaTracer}]),
+ erlang:trace_pattern({?MODULE, f2, '_'}, []),
+ ?MODULE:f2(1,2),
+ ?MODULE:f1(1),
+ {tracer,Tracer} = erlang:trace_info(self(), tracer),
+ {flags,[call]} = erlang:trace_info(self(), flags),
+ ?MODULE:f2(2,3),
+ receive {trace, Self, call, {?MODULE, f2, _}} -> ok end,
+ exit(Tracer, stop),
+ receive {'DOWN',MRef,_,_,_} -> ok end,
+ ?MODULE:f1(2),
+ {tracer,[]} = erlang:trace_info(self(), tracer),
+ ?MODULE:f2(3,4),
+ TRef = erlang:trace_delivered(all),
+ receive {trace_delivered, _, TRef} -> ok end,
+ receive M -> ct:fail({unexpected, M}) after 10 -> ok end.
+
+%% Test that destructive operations in test bif does not really happen
destructive_in_test_bif(Config) when is_list(Config) ->
- ?line {ok,OldToken,_,_} = erlang:match_spec_test
+ {ok,OldToken,_,_} = erlang:match_spec_test
([],
[{'_',[],[{message,{get_seq_token}}]}],trace),
- ?line {ok,_,_,_} = erlang:match_spec_test
+ {ok,_,_,_} = erlang:match_spec_test
([],
[{'_',[],[{message,{set_seq_token, label, 1}}]}],
trace),
- ?line {ok,OldToken,_,_} = erlang:match_spec_test
+ {ok,OldToken,_,_} = erlang:match_spec_test
([],
[{'_',[],[{message,{get_seq_token}}]}],trace),
- ?line {ok, OldTCW,_,_} = erlang:match_spec_test
+ {ok, OldTCW,_,_} = erlang:match_spec_test
([],[{'_',[],[{message,{get_tcw}}]}],trace),
- ?line {ok,OldTCW,_,_} = erlang:match_spec_test
+ {ok,OldTCW,_,_} = erlang:match_spec_test
([],
[{'_',[],[{message,{set_tcw, OldTCW+1}}]}],
trace),
- ?line {ok, OldTCW,_,_} = erlang:match_spec_test
+ {ok, OldTCW,_,_} = erlang:match_spec_test
([],[{'_',[],[{message,{get_tcw}}]}],trace),
ok.
-boxed_and_small(doc) ->
- ["Test that the comparision between boxed and small does not crash emulator"];
-boxed_and_small(suite) -> [];
+%% Test that the comparision between boxed and small does not crash emulator
boxed_and_small(Config) when is_list(Config) ->
- ?line {ok, Node} = start_node(match_spec_suite_other),
- ?line ok = rpc:call(Node,?MODULE,do_boxed_and_small,[]),
- ?line stop_node(Node),
+ {ok, Node} = start_node(match_spec_suite_other),
+ ok = rpc:call(Node,?MODULE,do_boxed_and_small,[]),
+ stop_node(Node),
ok.
do_boxed_and_small() ->
@@ -739,13 +660,11 @@ do_boxed_and_small() ->
{ok, false, _, _} = erlang:match_spec_test({0,3},[{{make_ref(),'_'},[],['$_']}],table),
ok.
-faulty_seq_trace(doc) ->
- ["Test that faulty seq_trace_call does not crash emulator"];
-faulty_seq_trace(suite) -> [];
+%% Test that faulty seq_trace_call does not crash emulator
faulty_seq_trace(Config) when is_list(Config) ->
- ?line {ok, Node} = start_node(match_spec_suite_other),
- ?line ok = rpc:call(Node,?MODULE,do_faulty_seq_trace,[]),
- ?line stop_node(Node),
+ {ok, Node} = start_node(match_spec_suite_other),
+ ok = rpc:call(Node,?MODULE,do_faulty_seq_trace,[]),
+ stop_node(Node),
ok.
do_faulty_seq_trace() ->
@@ -757,63 +676,58 @@ errchk(Pat) ->
{'EXIT', {badarg, _}} ->
ok;
Other ->
- test_server:fail({noerror, Other})
+ ct:fail({noerror, Other})
end.
-unary_minus(suite) ->
- [];
-unary_minus(doc) ->
- ["Checks that unary minus works"];
+%% Checks that unary minus works
unary_minus(Config) when is_list(Config) ->
- ?line {ok,true,[],[]} = erlang:match_spec_test
+ {ok,true,[],[]} = erlang:match_spec_test
(5,
[{'$1',
[{'<',{'-','$1'},-4}],
[true]}],
table),
- ?line {ok,false,[],[]} = erlang:match_spec_test
+ {ok,false,[],[]} = erlang:match_spec_test
(5,
[{'$1',
[{'<',{'-','$1'},-6}],
[true]}],
table),
- ?line {ok,true,[],[]} = erlang:match_spec_test
+ {ok,true,[],[]} = erlang:match_spec_test
(5,
[{'$1',
[{'=:=',{'-','$1',2},3}],
[true]}],
table),
- ?line {ok,false,[],[]} = erlang:match_spec_test
+ {ok,false,[],[]} = erlang:match_spec_test
(hej,
[{'$1',
[{'=/=',{'-','$1'},0}],
[true]}],
table),
ok.
-unary_plus(suite) ->
- [];
-unary_plus(doc) ->
- ["Checks that unary plus works"];
+
+%% Checks that unary plus works
unary_plus(Config) when is_list(Config) ->
- ?line {ok,true,[],[]} = erlang:match_spec_test
+ {ok,true,[],[]} = erlang:match_spec_test
(5,
[{'$1',
[{'<',{'+','$1'},6}],
[true]}],
table),
- ?line {ok,false,[],[]} = erlang:match_spec_test
+ {ok,false,[],[]} = erlang:match_spec_test
(5,
[{'$1',
[{'<',{'+','$1'},4}],
[true]}],
table),
- ?line {ok,true,[],[]} = erlang:match_spec_test
+ {ok,true,[],[]} = erlang:match_spec_test
(5,
[{'$1',
[{'=:=',{'+','$1',2},7}],
[true]}],
table),
- ?line {ok,false,[],[]} = erlang:match_spec_test
+ {ok,false,[],[]} = erlang:match_spec_test
(hej,
[{'$1',
[{'=/=',{'+','$1'},0}],
@@ -824,53 +738,50 @@ unary_plus(Config) when is_list(Config) ->
-guard_exceptions(suite) ->
- [];
-guard_exceptions(doc) ->
- ["Checks that exceptions in guards are handled correctly"];
+%% Checks that exceptions in guards are handled correctly
guard_exceptions(Config) when is_list(Config) ->
- ?line {ok,false,[],[]} = erlang:match_spec_test
+ {ok,false,[],[]} = erlang:match_spec_test
(5,
[{'$1',
[{'or',{is_integer,'$1'},{'or','$1','$1'}}],
[true]}],
table),
- ?line {ok,true,[],[]} = erlang:match_spec_test
+ {ok,true,[],[]} = erlang:match_spec_test
(5,
[{'$1',
[{'orelse',{is_integer,'$1'},
{'or','$1','$1'}}],
[true]}],
table),
- ?line {ok,false,[],[]} = erlang:match_spec_test
+ {ok,false,[],[]} = erlang:match_spec_test
(5,
[{'$1',
[{'orelse',{'or','$1',true},
{is_integer,'$1'}}],
[true]}],
table),
- ?line {ok,false,[],[]} = erlang:match_spec_test
+ {ok,false,[],[]} = erlang:match_spec_test
(5,
[{'$1',
[{'or',{is_integer,'$1'},
{'orelse','$1',true}}],
[true]}],
table),
- ?line {ok,true,[],[]} = erlang:match_spec_test
+ {ok,true,[],[]} = erlang:match_spec_test
(5,
[{'$1',
[{'or',{is_integer,'$1'},
{'orelse',true,'$1'}}],
[true]}],
table),
- ?line {ok,true,[],[]} = erlang:match_spec_test
+ {ok,true,[],[]} = erlang:match_spec_test
(5,
[{'$1',
[{'or',{is_integer,'$1'},
{'andalso',false,'$1'}}],
[true]}],
table),
- ?line {ok,false,[],[]} = erlang:match_spec_test
+ {ok,false,[],[]} = erlang:match_spec_test
(5,
[{'$1',
[{'or',{is_integer,'$1'},
@@ -878,7 +789,7 @@ guard_exceptions(Config) when is_list(Config) ->
[true]}],
table),
- ?line {ok,false,[],[]} = erlang:match_spec_test
+ {ok,false,[],[]} = erlang:match_spec_test
(5,
[{'$1',
[{'or',{is_integer,'$1'},
@@ -888,19 +799,16 @@ guard_exceptions(Config) when is_list(Config) ->
ok.
-fpe(suite) ->
- [];
-fpe(doc) ->
- ["Checks floating point exceptions in match-specs"];
+%% Checks floating point exceptions in match-specs
fpe(Config) when is_list(Config) ->
MS = [{{'$1'},[],[{'/','$1',0}]}],
case catch (['EXIT','EXIT'] =
ets:match_spec_run([{1},{2}],ets:match_spec_compile(MS))) of
- {'EXIT',_} -> test_server:fail({error,
- "Floating point exceptions faulty"});
+ {'EXIT',_} -> ct:fail({error, "Floating point exceptions faulty"});
_ -> ok
end.
+%% Test maps in match-specs
maps(Config) when is_list(Config) ->
{ok,#{},[],[]} = erlang:match_spec_test(#{}, [{'_',[],['$_']}], table),
{ok,#{},[],[]} = erlang:match_spec_test(#{}, [{#{},[],['$_']}], table),
@@ -980,11 +888,11 @@ moving_labels(Config) when is_list(Config) ->
%% point at their correct target.
%%
Ms = [{{'$1','$2'},[],[{{ok,{'andalso','$1','$2'},[1,2,3]}}]}],
- ?line {ok,{ok,false,[1,2,3]},[],[]} =
+ {ok,{ok,false,[1,2,3]},[],[]} =
erlang:match_spec_test({true,false}, Ms, table),
Ms2 = [{{'$1','$2'},[],[{{ok,{'orelse','$1','$2'},[1,2,3]}}]}],
- ?line {ok,{ok,true,[1,2,3]},[],[]} =
+ {ok,{ok,true,[1,2,3]},[],[]} =
erlang:match_spec_test({true,false}, Ms2, table),
ok.
@@ -995,13 +903,13 @@ tr(Fun, MFA, Pat, Expected) ->
tr(Fun, MFA, TraceFlags, Pat, PatFlags, Expected0) ->
tr(Fun,
fun(P) ->
- erlang:trace(P, true, TraceFlags),
- erlang:trace_pattern(MFA, Pat, PatFlags),
- lists:map(
- fun(X) when is_function(X,1) -> X;
- (X) -> list_to_tuple([trace, P | tuple_to_list(X)])
- end,
- Expected0)
+ erlang:trace(P, true, TraceFlags),
+ erlang:trace_pattern(MFA, Pat, PatFlags),
+ lists:map(
+ fun(X) when is_function(X,1) -> X;
+ (X) -> list_to_tuple([trace, P | tuple_to_list(X)])
+ end,
+ Expected0)
end).
tr(RunFun, ControlFun) ->
@@ -1016,15 +924,19 @@ collect(P, TMs) ->
collect([]) ->
receive
M ->
- ?t:format("Got unexpected: ~p~n", [M]),
+ io:format("Got unexpected: ~p~n", [M]),
flush({got_unexpected,M})
after 17 ->
ok
end;
collect([TM | TMs]) ->
- ?t:format( "Expecting: ~p~n", [TM]),
+ io:format( "Expecting: ~p~n", [TM]),
receive
- M0 ->
+ %% We only look at trace messages with the same tracee
+ %% as the message we are looking for. This because
+ %% the order of trace messages is only guaranteed from
+ %% within a single process.
+ M0 when element(2, M0) =:= element(2, TM); is_function(TM, 1) ->
M = case element(1, M0) of
trace_ts ->
list_to_tuple(lists:reverse(
@@ -1035,32 +947,34 @@ collect([TM | TMs]) ->
true ->
case (catch TM(M)) of
true ->
- ?t:format("Got: ~p~n", [M]),
+ io:format("Got: ~p~n", [M]),
collect(TMs);
_ ->
- ?t:format("Got unexpected: ~p~n", [M]),
+ io:format("Got unexpected: ~p~n", [M]),
flush({got_unexpected,M})
end;
false ->
case M of
TM ->
- ?t:format("Got: ~p~n", [M]),
+ io:format("Got: ~p~n", [M]),
collect(TMs);
_ ->
- ?t:format("Got unexpected: ~p~n", [M]),
+ io:format("Got unexpected: ~p~n", [M]),
flush({got_unexpected,M})
end
end
+ after 15000 ->
+ flush(timeout)
end.
flush(Reason) ->
receive
- M ->
- ?t:format("In queue: ~p~n", [M]),
- flush(Reason)
+ M ->
+ io:format("In queue: ~p~n", [M]),
+ flush(Reason)
after 17 ->
- ?t:fail(Reason)
+ ct:fail(Reason)
end.
start_collect(P) ->
@@ -1071,33 +985,33 @@ stop_collect(P) ->
stop_collect(P, Order) ->
P ! {Order, self()},
receive
- {gone, P} ->
- ok
+ {gone, P} ->
+ ok
end.
runner(Collector, Fun) ->
receive
- {go, Collector} ->
- go
+ {go, Collector} ->
+ go
end,
Fun(),
receive
- {done, Collector} ->
- Collector ! {gone, self()}
+ {done, Collector} ->
+ Collector ! {gone, self()}
end.
loop_runner(Collector, Fun, Laps) ->
receive
- {go, Collector} ->
- go
+ {go, Collector} ->
+ go
end,
loop_runner_cont(Collector, Fun, 0, Laps).
loop_runner_cont(Collector, _Fun, Laps, Laps) ->
receive
- {done, Collector} -> ok;
- {abort, Collector} -> ok
+ {done, Collector} -> ok;
+ {abort, Collector} -> ok
end,
io:format("loop_runner ~p exit after ~p laps\n", [self(), Laps]),
Collector ! {gone, self()};
@@ -1105,11 +1019,11 @@ loop_runner_cont(Collector, _Fun, Laps, Laps) ->
loop_runner_cont(Collector, Fun, N, Laps) ->
Fun(),
receive
- {abort, Collector} ->
- io:format("loop_runner ~p aborted after ~p of ~p laps\n", [self(), N+1, Laps]),
- Collector ! {gone, self()}
+ {abort, Collector} ->
+ io:format("loop_runner ~p aborted after ~p of ~p laps\n", [self(), N+1, Laps]),
+ Collector ! {gone, self()}
after 0 ->
- loop_runner_cont(Collector, Fun, N+1, Laps)
+ loop_runner_cont(Collector, Fun, N+1, Laps)
end.
@@ -1141,7 +1055,7 @@ start_node(Name) ->
Pa = filename:dirname(code:which(?MODULE)),
Cookie = atom_to_list(erlang:get_cookie()),
test_server:start_node(Name, slave,
- [{args, "-setcookie " ++ Cookie ++" -pa " ++ Pa}]).
+ [{args, "-setcookie " ++ Cookie ++" -pa " ++ Pa}]).
stop_node(Node) ->
test_server:stop_node(Node).
diff --git a/erts/emulator/test/message_queue_data_SUITE.erl b/erts/emulator/test/message_queue_data_SUITE.erl
index 96c41a57b5..226462676c 100644
--- a/erts/emulator/test/message_queue_data_SUITE.erl
+++ b/erts/emulator/test/message_queue_data_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.
@@ -20,45 +20,19 @@
-module(message_queue_data_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([basic/1, process_info_messages/1]).
+-export([all/0, suite/0]).
+-export([basic/1, process_info_messages/1, total_heap_size/1]).
-export([basic_test/1]).
-include_lib("common_test/include/ct.hrl").
-init_per_testcase(Case, Config) ->
- ?line Dog=test_server:timetrap(test_server:minutes(2)),
- [{watchdog, Dog}, {testcase, Case}|Config].
-
-end_per_testcase(_, 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() ->
- [basic, process_info_messages].
-
-groups() ->
- [].
-
-init_per_suite(Config) ->
-%% erts_debug:set_internal_state(available_internal_state, true),
- Config.
-
-end_per_suite(_Config) ->
-%% erts_debug:set_internal_state(available_internal_state, false),
- ok.
-
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
+ [basic, process_info_messages, total_heap_size].
%%
%%
@@ -70,15 +44,15 @@ basic(Config) when is_list(Config) ->
basic_test(erlang:system_info(message_queue_data)),
- {ok, Node1} = start_node(Config, "+xmqd off_heap"),
+ {ok, Node1} = start_node(Config, "+hmqd off_heap"),
ok = rpc:call(Node1, ?MODULE, basic_test, [off_heap]),
stop_node(Node1),
- {ok, Node2} = start_node(Config, "+xmqd on_heap"),
+ {ok, Node2} = start_node(Config, "+hmqd on_heap"),
ok = rpc:call(Node2, ?MODULE, basic_test, [on_heap]),
stop_node(Node2),
- {ok, Node3} = start_node(Config, "+xmqd mixed"),
+ {ok, Node3} = start_node(Config, "+hmqd mixed"),
ok = rpc:call(Node3, ?MODULE, basic_test, [mixed]),
stop_node(Node3),
@@ -216,6 +190,28 @@ process_info_messages(Config) when is_list(Config) ->
ok.
+total_heap_size(_Config) ->
+
+ Fun = fun F() -> receive Pid when is_pid(Pid) -> Pid ! ok,F() end end,
+
+ %% Test that on_heap messages grow the heap even if they are not received
+ OnPid = spawn_opt(Fun, [{message_queue_data, on_heap}]),
+ {total_heap_size, OnSize} = erlang:process_info(OnPid, total_heap_size),
+ [OnPid ! lists:duplicate(N,N) || N <- lists:seq(1,100)],
+ OnPid ! self(), receive ok -> ok end,
+ {total_heap_size, OnSizeAfter} = erlang:process_info(OnPid, total_heap_size),
+ ct:log("OnSize = ~p, OnSizeAfter = ~p",[OnSize, OnSizeAfter]),
+ true = OnSize < OnSizeAfter,
+
+ %% Test that off_heap messages do not grow the heap if they are not received
+ OffPid = spawn_opt(Fun, [{message_queue_data, off_heap}]),
+ {total_heap_size, OffSize} = erlang:process_info(OffPid, total_heap_size),
+ [OffPid ! lists:duplicate(N,N) || N <- lists:seq(1,100)],
+ OffPid ! self(), receive ok -> ok end,
+ {total_heap_size, OffSizeAfter} = erlang:process_info(OffPid, total_heap_size),
+ ct:log("OffSize = ~p, OffSizeAfter = ~p",[OffSize, OffSizeAfter]),
+ true = OffSize == OffSizeAfter.
+
%%
%%
%% helpers
@@ -228,12 +224,12 @@ start_node(Config, Opts) when is_list(Config), is_list(Opts) ->
Pa = filename:dirname(code:which(?MODULE)),
Name = list_to_atom(atom_to_list(?MODULE)
++ "-"
- ++ atom_to_list(?config(testcase, Config))
+ ++ atom_to_list(proplists:get_value(testcase, Config))
++ "-"
++ integer_to_list(erlang:system_time(seconds))
++ "-"
++ integer_to_list(erlang:unique_integer([positive]))),
- ?t:start_node(Name, slave, [{args, Opts++" -pa "++Pa}]).
+ test_server:start_node(Name, slave, [{args, Opts++" -pa "++Pa}]).
stop_node(Node) ->
- ?t:stop_node(Node).
+ test_server:stop_node(Node).
diff --git a/erts/emulator/test/module_info_SUITE.erl b/erts/emulator/test/module_info_SUITE.erl
index c622a2d8d7..ba9b564fdc 100644
--- a/erts/emulator/test/module_info_SUITE.erl
+++ b/erts/emulator/test/module_info_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.
@@ -22,9 +22,7 @@
-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,
exports/1,functions/1,deleted/1,native/1,info/1]).
%%-compile(native).
@@ -32,46 +30,23 @@
%% Helper.
-export([native_proj/1,native_filter/1]).
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap, {minutes, 3}}].
all() ->
modules().
-groups() ->
- [].
-
-init_per_suite(Config) ->
- Config.
-
-end_per_suite(_Config) ->
- ok.
-
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
-
modules() ->
[exports, functions, deleted, native, info].
-init_per_testcase(Func, Config) when is_atom(Func), is_list(Config) ->
- Dog = ?t:timetrap(?t:minutes(3)),
- [{watchdog,Dog}|Config].
-
-end_per_testcase(_Func, Config) ->
- Dog = ?config(watchdog, Config),
- ?t:timetrap_cancel(Dog).
-
%% Should return all functions exported from this module. (local)
all_exported() ->
All = add_arity(modules()),
- lists:sort([{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},
- {module_info,0},{module_info,1},{native_proj,1},
- {native_filter,1}|All]).
+ lists:sort([{all,0},{suite,0},
+ {module_info,0},{module_info,1},
+ {native_proj,1},
+ {native_filter,1}|All]).
%% Should return all functions in this module. (local)
all_functions() ->
@@ -95,7 +70,7 @@ functions(Config) when is_list(Config) ->
%% Test that deleted modules cause badarg
deleted(Config) when is_list(Config) ->
- Data = ?config(data_dir, Config),
+ Data = proplists:get_value(data_dir, Config),
File = filename:join(Data, "module_info_test"),
{ok,module_info_test,Code} = compile:file(File, [binary]),
{module,module_info_test} = erlang:load_module(module_info_test, Code),
diff --git a/erts/emulator/test/monitor_SUITE.erl b/erts/emulator/test/monitor_SUITE.erl
index 8101908df1..8955e62df5 100644
--- a/erts/emulator/test/monitor_SUITE.erl
+++ b/erts/emulator/test/monitor_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.
@@ -22,19 +22,18 @@
-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,
- case_1/1, case_1a/1, case_2/1, case_2a/1, mon_e_1/1, demon_e_1/1, demon_1/1,
- demon_2/1, demon_3/1, demonitor_flush/1,
- local_remove_monitor/1, remote_remove_monitor/1, mon_1/1, mon_2/1,
- large_exit/1, list_cleanup/1, mixer/1, named_down/1, otp_5827/1,
- monitor_time_offset/1]).
-
--export([init_per_testcase/2, end_per_testcase/2]).
+-export([all/0, suite/0, groups/0,
+ case_1/1, case_1a/1, case_2/1, case_2a/1, mon_e_1/1, demon_e_1/1, demon_1/1,
+ demon_2/1, demon_3/1, demonitor_flush/1,
+ local_remove_monitor/1, remote_remove_monitor/1, mon_1/1, mon_2/1,
+ large_exit/1, list_cleanup/1, mixer/1, named_down/1, otp_5827/1,
+ monitor_time_offset/1]).
-export([y2/1, g/1, g0/0, g1/0, large_exit_sub/1]).
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap, {minutes, 15}}].
all() ->
[case_1, case_1a, case_2, case_2a, mon_e_1, demon_e_1,
@@ -47,132 +46,103 @@ groups() ->
[{remove_monitor, [],
[local_remove_monitor, remote_remove_monitor]}].
-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(Func, Config) when is_atom(Func), is_list(Config) ->
- Dog=?t:timetrap(?t:minutes(15)),
- [{watchdog, Dog},{testcase, Func}|Config].
-
-end_per_testcase(_Func, Config) ->
- Dog=?config(watchdog, Config),
- ?t:timetrap_cancel(Dog).
-
-case_1(doc) ->
- "A monitors B, B kills A and then exits (yielded core dump)";
-case_1(suite) -> [];
+%% A monitors B, B kills A and then exits (yielded core dump)
case_1(Config) when is_list(Config) ->
- ?line process_flag(trap_exit, true),
- ?line spawn_link(?MODULE, g0, []),
- ?line receive _ -> ok end,
+ process_flag(trap_exit, true),
+ spawn_link(?MODULE, g0, []),
+ receive _ -> ok end,
ok.
-case_1a(doc) ->
- "A monitors B, B kills A and then exits (yielded core dump)";
+%% A monitors B, B kills A and then exits (yielded core dump)
case_1a(Config) when is_list(Config) ->
- ?line process_flag(trap_exit, true),
- ?line spawn_link(?MODULE, g1, []),
- ?line receive _ -> ok end,
+ process_flag(trap_exit, true),
+ spawn_link(?MODULE, g1, []),
+ receive _ -> ok end,
ok.
g0() ->
- ?line B = spawn(?MODULE, g, [self()]),
- ?line erlang:monitor(process, B),
- ?line B ! ok,
- ?line receive ok -> ok end,
+ B = spawn(?MODULE, g, [self()]),
+ erlang:monitor(process, B),
+ B ! ok,
+ receive ok -> ok end,
ok.
g1() ->
- ?line {B,_} = spawn_monitor(?MODULE, g, [self()]),
- ?line B ! ok,
- ?line receive ok -> ok end,
+ {B,_} = spawn_monitor(?MODULE, g, [self()]),
+ B ! ok,
+ receive ok -> ok end,
ok.
g(Parent) ->
- ?line receive ok -> ok end,
- ?line exit(Parent, foo),
- ?line ok.
+ receive ok -> ok end,
+ exit(Parent, foo),
+ ok.
-case_2(doc) ->
- "A monitors B, B demonitors A (yielded core dump)";
+%% A monitors B, B demonitors A (yielded core dump)
case_2(Config) when is_list(Config) ->
- ?line B = spawn(?MODULE, y2, [self()]),
- ?line R = erlang:monitor(process, B),
- ?line B ! R,
- ?line receive
- {'EXIT', _} -> ok;
- Other ->
- test_server:fail({rec, Other})
- end,
- ?line expect_down(R, B, normal),
+ B = spawn(?MODULE, y2, [self()]),
+ R = erlang:monitor(process, B),
+ B ! R,
+ receive
+ {'EXIT', _} -> ok;
+ Other ->
+ ct:fail({rec, Other})
+ end,
+ expect_down(R, B, normal),
ok.
-case_2a(doc) ->
- "A monitors B, B demonitors A (yielded core dump)";
+%% A monitors B, B demonitors A (yielded core dump)
case_2a(Config) when is_list(Config) ->
- ?line {B,R} = spawn_monitor(?MODULE, y2, [self()]),
- ?line B ! R,
- ?line receive
- {'EXIT', _} -> ok;
- Other ->
- test_server:fail({rec, Other})
- end,
- ?line expect_down(R, B, normal),
+ {B,R} = spawn_monitor(?MODULE, y2, [self()]),
+ B ! R,
+ receive
+ {'EXIT', _} -> ok;
+ Other ->
+ ct:fail({rec, Other})
+ end,
+ expect_down(R, B, normal),
ok.
y2(Parent) ->
- ?line R = receive T -> T end,
- ?line Parent ! (catch erlang:demonitor(R)),
+ R = receive T -> T end,
+ Parent ! (catch erlang:demonitor(R)),
ok.
expect_down(Ref, P) ->
receive
- {'DOWN', Ref, process, P, Reason} ->
- Reason;
- Other ->
- test_server:fail({rec, Other})
+ {'DOWN', Ref, process, P, Reason} ->
+ Reason;
+ Other ->
+ ct:fail({rec, Other})
end.
expect_down(Ref, P, Reason) ->
receive
- {'DOWN', Ref, process, P, Reason} ->
- ok;
- Other ->
- test_server:fail({rec, Other})
+ {'DOWN', Ref, process, P, Reason} ->
+ ok;
+ Other ->
+ ct:fail({rec, Other})
end.
expect_no_msg() ->
receive
- Msg ->
- test_server:fail({msg, Msg})
+ Msg ->
+ ct:fail({msg, Msg})
after 0 ->
- ok
+ ok
end.
%%% Error cases for monitor/2
-mon_e_1(doc) ->
- "Error cases for monitor/2";
-mon_e_1(suite) -> [];
mon_e_1(Config) when is_list(Config) ->
- ?line {ok, N} = test_server:start_node(hej, slave, []),
- ?line mon_error(plutt, self()),
- ?line mon_error(process, [bingo]),
- ?line mon_error(process, {rex, N, junk}),
- ?line mon_error(process, 1),
+ {ok, N} = test_server:start_node(hej, slave, []),
+ mon_error(plutt, self()),
+ mon_error(process, [bingo]),
+ mon_error(process, {rex, N, junk}),
+ mon_error(process, 1),
- ?line true = test_server:stop_node(N),
+ true = test_server:stop_node(N),
ok.
%%% We would also like to have a test case that tries to monitor something
@@ -185,155 +155,142 @@ mon_e_1(Config) when is_list(Config) ->
mon_error(Type, Item) ->
case catch erlang:monitor(Type, Item) of
- {'EXIT', _} ->
- ok;
- Other ->
- test_server:fail({err, Other})
+ {'EXIT', _} ->
+ ok;
+ Other ->
+ ct:fail({err, Other})
end.
%%% Error cases for demonitor/1
-demon_e_1(doc) ->
- "Error cases for demonitor/1";
-demon_e_1(suite) -> [];
demon_e_1(Config) when is_list(Config) ->
- ?line {ok, N} = test_server:start_node(hej, slave, []),
- ?line demon_error(plutt, badarg),
- ?line demon_error(1, badarg),
+ {ok, N} = test_server:start_node(hej, slave, []),
+ demon_error(plutt, badarg),
+ demon_error(1, badarg),
%% Demonitor with ref created at other node
- ?line R1 = rpc:call(N, erlang, make_ref, []),
- ?line demon_error(R1, badarg),
+ R1 = rpc:call(N, erlang, make_ref, []),
+ demon_error(R1, badarg),
%% Demonitor with ref created at wrong monitor link end
- ?line P0 = self(),
- ?line P2 = spawn(
- fun() ->
- P0 ! {self(), ref, erlang:monitor(process,P0)},
- receive {P0, stop} -> ok end
- end ),
- ?line receive
- {P2, ref, R2} ->
- ?line demon_error(R2, badarg),
- ?line P2 ! {self(), stop};
- Other2 ->
- test_server:fail({rec, Other2})
- end,
-
- ?line true = test_server:stop_node(N),
+ P0 = self(),
+ P2 = spawn(
+ fun() ->
+ P0 ! {self(), ref, erlang:monitor(process,P0)},
+ receive {P0, stop} -> ok end
+ end ),
+ receive
+ {P2, ref, R2} ->
+ demon_error(R2, badarg),
+ P2 ! {self(), stop};
+ Other2 ->
+ ct:fail({rec, Other2})
+ end,
+
+ true = test_server:stop_node(N),
ok.
demon_error(Ref, Reason) ->
case catch erlang:demonitor(Ref) of
- {'EXIT', {Reason, _}} ->
- ok;
- Other ->
- test_server:fail({err, Other})
+ {'EXIT', {Reason, _}} ->
+ ok;
+ Other ->
+ ct:fail({err, Other})
end.
%%% No-op cases for demonitor/1
-demon_1(doc) ->
- "demonitor/1";
-demon_1(suite) -> [];
demon_1(Config) when is_list(Config) ->
- ?line true = erlang:demonitor(make_ref()),
+ true = erlang:demonitor(make_ref()),
ok.
%%% Cases for demonitor/1
-demon_2(doc) ->
- "Cases for demonitor/1";
-demon_2(suite) -> [];
demon_2(Config) when is_list(Config) ->
- ?line R1 = erlang:monitor(process, self()),
- ?line true = erlang:demonitor(R1),
+ R1 = erlang:monitor(process, self()),
+ true = erlang:demonitor(R1),
%% Extra demonitor
- ?line true = erlang:demonitor(R1),
- ?line expect_no_msg(),
+ true = erlang:demonitor(R1),
+ expect_no_msg(),
%% Normal 'DOWN'
- ?line P2 = spawn(timer, sleep, [1]),
- ?line R2 = erlang:monitor(process, P2),
- ?line case expect_down(R2, P2) of
- normal -> ?line ok;
- noproc -> ?line ok;
- BadReason -> ?line ?t:fail({bad_reason, BadReason})
- end,
-
-%% OTP-5772
-% %% 'DOWN' before demonitor
-% ?line P3 = spawn(timer, sleep, [100000]),
-% ?line R3 = erlang:monitor(process, P3),
-% ?line exit(P3, frop),
-% ?line erlang:demonitor(R3),
-% ?line expect_down(R3, P3, frop),
+ P2 = spawn(timer, sleep, [1]),
+ R2 = erlang:monitor(process, P2),
+ case expect_down(R2, P2) of
+ normal -> ok;
+ noproc -> ok;
+ BadReason -> ct:fail({bad_reason, BadReason})
+ end,
+
+ %% OTP-5772
+ % %% 'DOWN' before demonitor
+ % P3 = spawn(timer, sleep, [100000]),
+ % R3 = erlang:monitor(process, P3),
+ % exit(P3, frop),
+ % erlang:demonitor(R3),
+ % expect_down(R3, P3, frop),
%% Demonitor before 'DOWN'
- ?line P4 = spawn(timer, sleep, [100000]),
- ?line R4 = erlang:monitor(process, P4),
- ?line erlang:demonitor(R4),
- ?line exit(P4, frop),
- ?line expect_no_msg(),
+ P4 = spawn(timer, sleep, [100000]),
+ R4 = erlang:monitor(process, P4),
+ erlang:demonitor(R4),
+ exit(P4, frop),
+ expect_no_msg(),
ok.
-demon_3(doc) ->
- "Distributed case for demonitor/1 (OTP-3499)";
-demon_3(suite) -> [];
+%% Distributed case for demonitor/1 (OTP-3499)
demon_3(Config) when is_list(Config) ->
- ?line {ok, N} = test_server:start_node(hej, slave, []),
+ {ok, N} = test_server:start_node(hej, slave, []),
%% 'DOWN' before demonitor
- ?line P2 = spawn(N, timer, sleep, [100000]),
- ?line R2 = erlang:monitor(process, P2),
- ?line true = test_server:stop_node(N),
- ?line true = erlang:demonitor(R2),
- ?line expect_down(R2, P2, noconnection),
+ P2 = spawn(N, timer, sleep, [100000]),
+ R2 = erlang:monitor(process, P2),
+ true = test_server:stop_node(N),
+ true = erlang:demonitor(R2),
+ expect_down(R2, P2, noconnection),
- ?line {ok, N2} = test_server:start_node(hej, slave, []),
+ {ok, N2} = test_server:start_node(hej, slave, []),
%% Demonitor before 'DOWN'
- ?line P3 = spawn(N2, timer, sleep, [100000]),
- ?line R3 = erlang:monitor(process, P3),
- ?line true = erlang:demonitor(R3),
- ?line true = test_server:stop_node(N2),
- ?line expect_no_msg(),
+ P3 = spawn(N2, timer, sleep, [100000]),
+ R3 = erlang:monitor(process, P3),
+ true = erlang:demonitor(R3),
+ true = test_server:stop_node(N2),
+ expect_no_msg(),
ok.
-demonitor_flush(suite) -> [];
-demonitor_flush(doc) -> [];
demonitor_flush(Config) when is_list(Config) ->
- ?line {'EXIT', {badarg, _}} = (catch erlang:demonitor(make_ref(), flush)),
- ?line {'EXIT', {badarg, _}} = (catch erlang:demonitor(make_ref(), [flus])),
- ?line {'EXIT', {badarg, _}} = (catch erlang:demonitor(x, [flush])),
- ?line {ok, N} = test_server:start_node(demonitor_flush, slave, []),
- ?line ok = demonitor_flush_test(N),
- ?line true = test_server:stop_node(N),
- ?line ok = demonitor_flush_test(node()).
-
+ {'EXIT', {badarg, _}} = (catch erlang:demonitor(make_ref(), flush)),
+ {'EXIT', {badarg, _}} = (catch erlang:demonitor(make_ref(), [flus])),
+ {'EXIT', {badarg, _}} = (catch erlang:demonitor(x, [flush])),
+ {ok, N} = test_server:start_node(demonitor_flush, slave, []),
+ ok = demonitor_flush_test(N),
+ true = test_server:stop_node(N),
+ ok = demonitor_flush_test(node()).
+
demonitor_flush_test(Node) ->
- ?line P = spawn(Node, timer, sleep, [100000]),
- ?line M1 = erlang:monitor(process, P),
- ?line M2 = erlang:monitor(process, P),
- ?line M3 = erlang:monitor(process, P),
- ?line M4 = erlang:monitor(process, P),
- ?line true = erlang:demonitor(M1, [flush, flush]),
- ?line exit(P, bang),
- ?line receive {'DOWN', M2, process, P, bang} -> ok end,
- ?line receive after 100 -> ok end,
- ?line true = erlang:demonitor(M3, [flush]),
- ?line true = erlang:demonitor(M4, []),
- ?line receive {'DOWN', M4, process, P, bang} -> ok end,
- ?line receive
- {'DOWN', M, _, _, _} =DM when M == M1,
- M == M3 ->
- ?line ?t:fail({unexpected_down_message, DM})
- after 100 ->
- ?line ok
- end.
+ P = spawn(Node, timer, sleep, [100000]),
+ M1 = erlang:monitor(process, P),
+ M2 = erlang:monitor(process, P),
+ M3 = erlang:monitor(process, P),
+ M4 = erlang:monitor(process, P),
+ true = erlang:demonitor(M1, [flush, flush]),
+ exit(P, bang),
+ receive {'DOWN', M2, process, P, bang} -> ok end,
+ receive after 100 -> ok end,
+ true = erlang:demonitor(M3, [flush]),
+ true = erlang:demonitor(M4, []),
+ receive {'DOWN', M4, process, P, bang} -> ok end,
+ receive
+ {'DOWN', M, _, _, _} =DM when M == M1,
+ M == M3 ->
+ ct:fail({unexpected_down_message, DM})
+ after 100 ->
+ ok
+ end.
-define(RM_MON_GROUPS, 100).
-define(RM_MON_GPROCS, 100).
@@ -341,33 +298,33 @@ demonitor_flush_test(Node) ->
local_remove_monitor(Config) when is_list(Config) ->
Gs = generate(fun () -> start_remove_monitor_group(node()) end,
- ?RM_MON_GROUPS),
+ ?RM_MON_GROUPS),
{True, False} = lists:foldl(fun (G, {T, F}) ->
- receive
- {rm_mon_res, G, {GT, GF}} ->
- {T+GT, F+GF}
- end
- end,
- {0, 0},
- Gs),
+ receive
+ {rm_mon_res, G, {GT, GF}} ->
+ {T+GT, F+GF}
+ end
+ end,
+ {0, 0},
+ Gs),
erlang:display({local_remove_monitor, True, False}),
{comment,
"True = "++integer_to_list(True)++"; False = "++integer_to_list(False)}.
-
+
remote_remove_monitor(Config) when is_list(Config) ->
- ?line {ok, N} = test_server:start_node(demonitor_flush, slave, []),
+ {ok, N} = test_server:start_node(demonitor_flush, slave, []),
Gs = generate(fun () -> start_remove_monitor_group(node()) end,
- ?RM_MON_GROUPS),
+ ?RM_MON_GROUPS),
{True, False} = lists:foldl(fun (G, {T, F}) ->
- receive
- {rm_mon_res, G, {GT, GF}} ->
- {T+GT, F+GF}
- end
- end,
- {0, 0},
- Gs),
+ receive
+ {rm_mon_res, G, {GT, GF}} ->
+ {T+GT, F+GF}
+ end
+ end,
+ {0, 0},
+ Gs),
erlang:display({remote_remove_monitor, True, False}),
- ?line true = test_server:stop_node(N),
+ true = test_server:stop_node(N),
{comment,
"True = "++integer_to_list(True)++"; False = "++integer_to_list(False)}.
@@ -375,161 +332,153 @@ start_remove_monitor_group(Node) ->
Master = self(),
spawn_link(
fun () ->
- Ms = generate(fun () ->
- P = spawn(Node, fun () -> ok end),
- erlang:monitor(process, P)
- end, ?RM_MON_GPROCS),
- Res = lists:foldl(fun (M, {T, F}) ->
- case erlang:demonitor(M, [info]) of
- true ->
- receive
- {'DOWN', M, _, _, _} ->
- exit(down_msg_found)
- after 0 ->
- ok
- end,
- {T+1, F};
- false ->
- receive
- {'DOWN', M, _, _, _} ->
- ok
- after 0 ->
- exit(no_down_msg_found)
- end,
- {T, F+1}
- end
- end,
- {0,0},
- Ms),
- Master ! {rm_mon_res, self(), Res}
+ Ms = generate(fun () ->
+ P = spawn(Node, fun () -> ok end),
+ erlang:monitor(process, P)
+ end, ?RM_MON_GPROCS),
+ Res = lists:foldl(fun (M, {T, F}) ->
+ case erlang:demonitor(M, [info]) of
+ true ->
+ receive
+ {'DOWN', M, _, _, _} ->
+ exit(down_msg_found)
+ after 0 ->
+ ok
+ end,
+ {T+1, F};
+ false ->
+ receive
+ {'DOWN', M, _, _, _} ->
+ ok
+ after 0 ->
+ exit(no_down_msg_found)
+ end,
+ {T, F+1}
+ end
+ end,
+ {0,0},
+ Ms),
+ Master ! {rm_mon_res, self(), Res}
end).
-
-
+
+
%%% Cases for monitor/2
-mon_1(doc) ->
- "Cases for monitor/2";
-mon_1(suite) -> [];
mon_1(Config) when is_list(Config) ->
%% Normal case
- ?line P2 = spawn(timer, sleep, [1]),
- ?line R2 = erlang:monitor(process, P2),
- ?line case expect_down(R2, P2) of
- normal -> ?line ok;
- noproc -> ?line ok;
- BadReason -> ?line ?t:fail({bad_reason, BadReason})
- end,
- ?line {P2A,R2A} = spawn_monitor(timer, sleep, [1]),
- ?line expect_down(R2A, P2A, normal),
+ P2 = spawn(timer, sleep, [1]),
+ R2 = erlang:monitor(process, P2),
+ case expect_down(R2, P2) of
+ normal -> ok;
+ noproc -> ok;
+ BadReason -> ct:fail({bad_reason, BadReason})
+ end,
+ {P2A,R2A} = spawn_monitor(timer, sleep, [1]),
+ expect_down(R2A, P2A, normal),
%% 'DOWN' with other reason
- ?line P3 = spawn(timer, sleep, [100000]),
- ?line R3 = erlang:monitor(process, P3),
- ?line exit(P3, frop),
- ?line expect_down(R3, P3, frop),
- ?line {P3A,R3A} = spawn_monitor(timer, sleep, [100000]),
- ?line exit(P3A, frop),
- ?line expect_down(R3A, P3A, frop),
+ P3 = spawn(timer, sleep, [100000]),
+ R3 = erlang:monitor(process, P3),
+ exit(P3, frop),
+ expect_down(R3, P3, frop),
+ {P3A,R3A} = spawn_monitor(timer, sleep, [100000]),
+ exit(P3A, frop),
+ expect_down(R3A, P3A, frop),
%% Monitor fails because process is dead
- ?line R4 = erlang:monitor(process, P3),
- ?line expect_down(R4, P3, noproc),
+ R4 = erlang:monitor(process, P3),
+ expect_down(R4, P3, noproc),
%% Normal case (named process)
- ?line P5 = start_jeeves(jeeves),
- ?line R5 = erlang:monitor(process, jeeves),
- ?line tell_jeeves(P5, stop),
- ?line expect_down(R5, {jeeves, node()}, normal),
+ P5 = start_jeeves(jeeves),
+ R5 = erlang:monitor(process, jeeves),
+ tell_jeeves(P5, stop),
+ expect_down(R5, {jeeves, node()}, normal),
%% 'DOWN' with other reason and node explicit activation
- ?line P6 = start_jeeves(jeeves),
- ?line R6 = erlang:monitor(process, {jeeves, node()}),
- ?line tell_jeeves(P6, {exit, frop}),
- ?line expect_down(R6, {jeeves, node()}, frop),
+ P6 = start_jeeves(jeeves),
+ R6 = erlang:monitor(process, {jeeves, node()}),
+ tell_jeeves(P6, {exit, frop}),
+ expect_down(R6, {jeeves, node()}, frop),
%% Monitor (named process) fails because process is dead
- ?line R7 = erlang:monitor(process, {jeeves, node()}),
- ?line expect_down(R7, {jeeves, node()}, noproc),
+ R7 = erlang:monitor(process, {jeeves, node()}),
+ expect_down(R7, {jeeves, node()}, noproc),
ok.
-mon_2(doc) ->
- "Distributed cases for monitor/2";
-mon_2(suite) -> [];
+%% Distributed cases for monitor/2
mon_2(Config) when is_list(Config) ->
- ?line {ok, N1} = test_server:start_node(hej1, slave, []),
+ {ok, N1} = test_server:start_node(hej1, slave, []),
%% Normal case
- ?line P2 = spawn(N1, timer, sleep, [4000]),
- ?line R2 = erlang:monitor(process, P2),
- ?line expect_down(R2, P2, normal),
+ P2 = spawn(N1, timer, sleep, [4000]),
+ R2 = erlang:monitor(process, P2),
+ expect_down(R2, P2, normal),
%% 'DOWN' with other reason
- ?line P3 = spawn(N1, timer, sleep, [100000]),
- ?line R3 = erlang:monitor(process, P3),
- ?line exit(P3, frop),
- ?line expect_down(R3, P3, frop),
+ P3 = spawn(N1, timer, sleep, [100000]),
+ R3 = erlang:monitor(process, P3),
+ exit(P3, frop),
+ expect_down(R3, P3, frop),
%% Monitor fails because process is dead
- ?line R4 = erlang:monitor(process, P3),
- ?line expect_down(R4, P3, noproc),
+ R4 = erlang:monitor(process, P3),
+ expect_down(R4, P3, noproc),
%% Other node goes down
- ?line P5 = spawn(N1, timer, sleep, [100000]),
- ?line R5 = erlang:monitor(process, P5),
+ P5 = spawn(N1, timer, sleep, [100000]),
+ R5 = erlang:monitor(process, P5),
- ?line true = test_server:stop_node(N1),
+ true = test_server:stop_node(N1),
- ?line expect_down(R5, P5, noconnection),
+ expect_down(R5, P5, noconnection),
%% Monitor fails because other node is dead
- ?line P6 = spawn(N1, timer, sleep, [100000]),
- ?line R6 = erlang:monitor(process, P6),
- ?line R6_Reason = expect_down(R6, P6),
- ?line true = (R6_Reason == noconnection) orelse (R6_Reason == noproc),
+ P6 = spawn(N1, timer, sleep, [100000]),
+ R6 = erlang:monitor(process, P6),
+ R6_Reason = expect_down(R6, P6),
+ true = (R6_Reason == noconnection) orelse (R6_Reason == noproc),
%% Start a new node that can load code in this module
- ?line PA = filename:dirname(code:which(?MODULE)),
- ?line {ok, N2} = test_server:start_node
- (hej2, slave, [{args, "-pa " ++ PA}]),
+ PA = filename:dirname(code:which(?MODULE)),
+ {ok, N2} = test_server:start_node
+ (hej2, slave, [{args, "-pa " ++ PA}]),
%% Normal case (named process)
- ?line P7 = start_jeeves({jeeves, N2}),
- ?line R7 = erlang:monitor(process, {jeeves, N2}),
- ?line tell_jeeves(P7, stop),
- ?line expect_down(R7, {jeeves, N2}, normal),
+ P7 = start_jeeves({jeeves, N2}),
+ R7 = erlang:monitor(process, {jeeves, N2}),
+ tell_jeeves(P7, stop),
+ expect_down(R7, {jeeves, N2}, normal),
%% 'DOWN' with other reason (named process)
- ?line P8 = start_jeeves({jeeves, N2}),
- ?line R8 = erlang:monitor(process, {jeeves, N2}),
- ?line tell_jeeves(P8, {exit, frop}),
- ?line expect_down(R8, {jeeves, N2}, frop),
+ P8 = start_jeeves({jeeves, N2}),
+ R8 = erlang:monitor(process, {jeeves, N2}),
+ tell_jeeves(P8, {exit, frop}),
+ expect_down(R8, {jeeves, N2}, frop),
%% Monitor (named process) fails because process is dead
- ?line R9 = erlang:monitor(process, {jeeves, N2}),
- ?line expect_down(R9, {jeeves, N2}, noproc),
+ R9 = erlang:monitor(process, {jeeves, N2}),
+ expect_down(R9, {jeeves, N2}, noproc),
%% Other node goes down (named process)
- ?line _P10 = start_jeeves({jeeves, N2}),
- ?line R10 = erlang:monitor(process, {jeeves, N2}),
+ _P10 = start_jeeves({jeeves, N2}),
+ R10 = erlang:monitor(process, {jeeves, N2}),
- ?line true = test_server:stop_node(N2),
+ true = test_server:stop_node(N2),
- ?line expect_down(R10, {jeeves, N2}, noconnection),
+ expect_down(R10, {jeeves, N2}, noconnection),
%% Monitor (named process) fails because other node is dead
- ?line R11 = erlang:monitor(process, {jeeves, N2}),
- ?line expect_down(R11, {jeeves, N2}, noconnection),
+ R11 = erlang:monitor(process, {jeeves, N2}),
+ expect_down(R11, {jeeves, N2}, noconnection),
ok.
%%% Large exit reason. Crashed first attempt to release R5B.
-large_exit(doc) ->
- "Large exit reason";
-large_exit(suite) -> [];
large_exit(Config) when is_list(Config) ->
- ?line f(100),
+ f(100),
ok.
f(0) ->
@@ -539,23 +488,23 @@ f(N) ->
f(N-1).
f() ->
- ?line S0 = {big, tuple, with, [list, 4563784278]},
- ?line S = {S0, term_to_binary(S0)},
- ?line P = spawn(?MODULE, large_exit_sub, [S]),
- ?line R = erlang:monitor(process, P),
- ?line P ! hej,
+ S0 = {big, tuple, with, [list, 4563784278]},
+ S = {S0, term_to_binary(S0)},
+ P = spawn(?MODULE, large_exit_sub, [S]),
+ R = erlang:monitor(process, P),
+ P ! hej,
receive
- {'DOWN', R, process, P, X} ->
- ?line io:format(" -> ~p~n", [X]),
- if
- X == S ->
- ok;
- true ->
- test_server:fail({X, S})
- end;
- Other ->
- ?line io:format(" -> ~p~n", [Other]),
- exit({answer, Other})
+ {'DOWN', R, process, P, X} ->
+ io:format(" -> ~p~n", [X]),
+ if
+ X == S ->
+ ok;
+ true ->
+ ct:fail({X, S})
+ end;
+ Other ->
+ io:format(" -> ~p~n", [Other]),
+ exit({answer, Other})
end.
large_exit_sub(S) ->
@@ -566,105 +515,99 @@ large_exit_sub(S) ->
%%% by using erlang:process_info(self(), monitors)
%%% and erlang:process_info(self(), monitored_by)
-list_cleanup(doc) ->
- "Testing of monitor link list cleanup by using " ++
- "erlang:process_info/2";
-list_cleanup(suite) -> [];
list_cleanup(Config) when is_list(Config) ->
- ?line P0 = self(),
- ?line M = node(),
- ?line PA = filename:dirname(code:which(?MODULE)),
- ?line true = register(master_bertie, self()),
+ P0 = self(),
+ M = node(),
+ PA = filename:dirname(code:which(?MODULE)),
+ true = register(master_bertie, self()),
%% Normal local case, monitor and demonitor
- ?line P1 = start_jeeves(jeeves),
- ?line {[], []} = monitors(),
- ?line expect_jeeves(P1, monitors, {monitors, {[], []}}),
- ?line R1a = erlang:monitor(process, P1),
- ?line {[{process, P1}], []} = monitors(),
- ?line expect_jeeves(P1, monitors, {monitors, {[], [P0]}}),
- ?line true = erlang:demonitor(R1a),
- ?line expect_no_msg(),
- ?line {[], []} = monitors(),
- ?line expect_jeeves(P1, monitors, {monitors, {[], []}}),
+ P1 = start_jeeves(jeeves),
+ {[], []} = monitors(),
+ expect_jeeves(P1, monitors, {monitors, {[], []}}),
+ R1a = erlang:monitor(process, P1),
+ {[{process, P1}], []} = monitors(),
+ expect_jeeves(P1, monitors, {monitors, {[], [P0]}}),
+ true = erlang:demonitor(R1a),
+ expect_no_msg(),
+ {[], []} = monitors(),
+ expect_jeeves(P1, monitors, {monitors, {[], []}}),
%% Remonitor named and try again, now exiting the monitored process
- ?line R1b = erlang:monitor(process, jeeves),
- ?line {[{process, {jeeves, M}}], []} = monitors(),
- ?line expect_jeeves(P1, monitors, {monitors, {[], [P0]}}),
- ?line tell_jeeves(P1, stop),
- ?line expect_down(R1b, {jeeves, node()}, normal),
- ?line {[], []} = monitors(),
+ R1b = erlang:monitor(process, jeeves),
+ {[{process, {jeeves, M}}], []} = monitors(),
+ expect_jeeves(P1, monitors, {monitors, {[], [P0]}}),
+ tell_jeeves(P1, stop),
+ expect_down(R1b, {jeeves, node()}, normal),
+ {[], []} = monitors(),
%% Slightly weird local case - the monitoring process crashes
- ?line P2 = start_jeeves(jeeves),
- ?line {[], []} = monitors(),
- ?line expect_jeeves(P2, monitors, {monitors, {[], []}}),
- ?line {monitor_process, _R2} =
- ask_jeeves(P2, {monitor_process, master_bertie}),
- ?line {[], [P2]} = monitors(),
- ?line expect_jeeves(P2, monitors,
- {monitors, {[{process, {master_bertie, node()}}], []}}),
- ?line tell_jeeves(P2, {exit, frop}),
+ P2 = start_jeeves(jeeves),
+ {[], []} = monitors(),
+ expect_jeeves(P2, monitors, {monitors, {[], []}}),
+ {monitor_process, _R2} =
+ ask_jeeves(P2, {monitor_process, master_bertie}),
+ {[], [P2]} = monitors(),
+ expect_jeeves(P2, monitors,
+ {monitors, {[{process, {master_bertie, node()}}], []}}),
+ tell_jeeves(P2, {exit, frop}),
timer:sleep(2000),
- ?line {[], []} = monitors(),
+ {[], []} = monitors(),
%% Start a new node that can load code in this module
- ?line {ok, J} = test_server:start_node
- (jeeves, slave, [{args, "-pa " ++ PA}]),
+ {ok, J} = test_server:start_node
+ (jeeves, slave, [{args, "-pa " ++ PA}]),
%% Normal remote case, monitor and demonitor
- ?line P3 = start_jeeves({jeeves, J}),
- ?line {[], []} = monitors(),
- ?line expect_jeeves(P3, monitors, {monitors, {[], []}}),
- ?line R3a = erlang:monitor(process, P3),
- ?line {[{process, P3}], []} = monitors(),
- ?line expect_jeeves(P3, monitors, {monitors, {[], [P0]}}),
- ?line true = erlang:demonitor(R3a),
- ?line expect_no_msg(),
- ?line {[], []} = monitors(),
- ?line expect_jeeves(P3, monitors, {monitors, {[], []}}),
+ P3 = start_jeeves({jeeves, J}),
+ {[], []} = monitors(),
+ expect_jeeves(P3, monitors, {monitors, {[], []}}),
+ R3a = erlang:monitor(process, P3),
+ {[{process, P3}], []} = monitors(),
+ expect_jeeves(P3, monitors, {monitors, {[], [P0]}}),
+ true = erlang:demonitor(R3a),
+ expect_no_msg(),
+ {[], []} = monitors(),
+ expect_jeeves(P3, monitors, {monitors, {[], []}}),
%% Remonitor named and try again, now exiting the monitored process
- ?line R3b = erlang:monitor(process, {jeeves, J}),
- ?line {[{process, {jeeves, J}}], []} = monitors(),
- ?line expect_jeeves(P3, monitors, {monitors, {[], [P0]}}),
- ?line tell_jeeves(P3, stop),
- ?line expect_down(R3b, {jeeves, J}, normal),
- ?line {[], []} = monitors(),
+ R3b = erlang:monitor(process, {jeeves, J}),
+ {[{process, {jeeves, J}}], []} = monitors(),
+ expect_jeeves(P3, monitors, {monitors, {[], [P0]}}),
+ tell_jeeves(P3, stop),
+ expect_down(R3b, {jeeves, J}, normal),
+ {[], []} = monitors(),
%% Slightly weird remote case - the monitoring process crashes
- ?line P4 = start_jeeves({jeeves, J}),
- ?line {[], []} = monitors(),
- ?line expect_jeeves(P4, monitors, {monitors, {[], []}}),
- ?line {monitor_process, _R4} =
- ask_jeeves(P4, {monitor_process, {master_bertie, M}}),
- ?line {[], [P4]} = monitors(),
- ?line expect_jeeves(P4, monitors,
- {monitors, {[{process, {master_bertie, M}}], []}} ),
- ?line tell_jeeves(P4, {exit, frop}),
+ P4 = start_jeeves({jeeves, J}),
+ {[], []} = monitors(),
+ expect_jeeves(P4, monitors, {monitors, {[], []}}),
+ {monitor_process, _R4} =
+ ask_jeeves(P4, {monitor_process, {master_bertie, M}}),
+ {[], [P4]} = monitors(),
+ expect_jeeves(P4, monitors,
+ {monitors, {[{process, {master_bertie, M}}], []}} ),
+ tell_jeeves(P4, {exit, frop}),
timer:sleep(2000),
- ?line {[], []} = monitors(),
-
+ {[], []} = monitors(),
+
%% Now, the monitoring remote node crashes
- ?line P5 = start_jeeves({jeeves, J}),
- ?line {[], []} = monitors(),
- ?line expect_jeeves(P5, monitors, {monitors, {[], []}}),
- ?line {monitor_process, _R5} =
- ask_jeeves(P5, {monitor_process, P0}),
- ?line {[], [P5]} = monitors(),
- ?line expect_jeeves(P5, monitors,
- {monitors, {[{process, P0}], []}} ),
- ?line test_server:stop_node(J),
+ P5 = start_jeeves({jeeves, J}),
+ {[], []} = monitors(),
+ expect_jeeves(P5, monitors, {monitors, {[], []}}),
+ {monitor_process, _R5} =
+ ask_jeeves(P5, {monitor_process, P0}),
+ {[], [P5]} = monitors(),
+ expect_jeeves(P5, monitors,
+ {monitors, {[{process, P0}], []}} ),
+ test_server:stop_node(J),
timer:sleep(4000),
- ?line {[], []} = monitors(),
-
- ?line true = unregister(master_bertie),
+ {[], []} = monitors(),
+
+ true = unregister(master_bertie),
ok.
-
+
%%% Mixed internal and external monitors
-mixer(doc) ->
- "Test mixing of internal and external monitors.";
mixer(Config) when is_list(Config) ->
PA = filename:dirname(code:which(?MODULE)),
NN = [j0,j1,j2],
@@ -748,115 +691,112 @@ mixer(Config) when is_list(Config) ->
[test_server:stop_node(K) || K <- NL0],
ok.
-named_down(doc) -> ["Test that DOWN message for a named monitor isn't"
- " delivered until name has been unregistered"];
-named_down(suite) -> [];
+%% Test that DOWN message for a named monitor isn't
+%% delivered until name has been unregistered
named_down(Config) when is_list(Config) ->
- ?line Name = list_to_atom(atom_to_list(?MODULE)
- ++ "-named_down-"
- ++ integer_to_list(erlang:system_time(seconds))
- ++ "-" ++ integer_to_list(erlang:unique_integer([positive]))),
- ?line Prio = process_flag(priority,high),
+ Name = list_to_atom(atom_to_list(?MODULE)
+ ++ "-named_down-"
+ ++ integer_to_list(erlang:system_time(seconds))
+ ++ "-" ++ integer_to_list(erlang:unique_integer([positive]))),
+ Prio = process_flag(priority,high),
%% Spawn a bunch of high prio cpu bound processes to prevent
%% normal prio processes from terminating during the next
%% 500 ms...
- ?line Self = self(),
- ?line spawn_opt(fun () ->
- WFun = fun
- (F, hej) -> F(F, hopp);
- (F, hopp) -> F(F, hej)
- end,
- NoSchedulers = erlang:system_info(schedulers_online),
- lists:foreach(fun (_) ->
- spawn_opt(fun () ->
- WFun(WFun,
- hej)
- end,
- [{priority,high},
- link])
- end,
- lists:seq(1, NoSchedulers)),
- receive after 500 -> ok end,
- unlink(Self),
- exit(bang)
- end,
- [{priority,high}, link]),
- ?line NamedProc = spawn_link(fun () ->
- receive after infinity -> ok end
- end),
- ?line true = register(Name, NamedProc),
- ?line unlink(NamedProc),
- ?line exit(NamedProc, bang),
- ?line Mon = erlang:monitor(process, Name),
- ?line receive {'DOWN',Mon, _, _, _} -> ok end,
- ?line true = register(Name, self()),
- ?line true = unregister(Name),
- ?line process_flag(priority,Prio),
+ Self = self(),
+ spawn_opt(fun () ->
+ WFun = fun
+ (F, hej) -> F(F, hopp);
+(F, hopp) -> F(F, hej)
+ end,
+ NoSchedulers = erlang:system_info(schedulers_online),
+ lists:foreach(fun (_) ->
+ spawn_opt(fun () ->
+ WFun(WFun,
+ hej)
+ end,
+ [{priority,high},
+ link])
+ end,
+ lists:seq(1, NoSchedulers)),
+ receive after 500 -> ok end,
+ unlink(Self),
+ exit(bang)
+ end,
+ [{priority,high}, link]),
+ NamedProc = spawn_link(fun () ->
+ receive after infinity -> ok end
+ end),
+ true = register(Name, NamedProc),
+ unlink(NamedProc),
+ exit(NamedProc, bang),
+ Mon = erlang:monitor(process, Name),
+ receive {'DOWN',Mon, _, _, _} -> ok end,
+ true = register(Name, self()),
+ true = unregister(Name),
+ process_flag(priority,Prio),
ok.
-otp_5827(doc) -> [];
-otp_5827(suite) -> [];
otp_5827(Config) when is_list(Config) ->
%% Make a pid with the same nodename but with another creation
- ?line [CreEnd | RPTail]
- = lists:reverse(binary_to_list(term_to_binary(self()))),
- ?line NewCreEnd = case CreEnd of
- 0 -> 1;
- 1 -> 2;
- _ -> CreEnd - 1
- end,
- ?line OtherCreationPid
- = binary_to_term(list_to_binary(lists:reverse([NewCreEnd | RPTail]))),
+ [CreEnd | RPTail]
+ = lists:reverse(binary_to_list(term_to_binary(self()))),
+ NewCreEnd = case CreEnd of
+ 0 -> 1;
+ 1 -> 2;
+ _ -> CreEnd - 1
+ end,
+ OtherCreationPid
+ = binary_to_term(list_to_binary(lists:reverse([NewCreEnd | RPTail]))),
%% If the bug is present erlang:monitor(process, OtherCreationPid)
%% will hang...
- ?line Parent = self(),
- ?line Ok = make_ref(),
- ?line spawn(fun () ->
- Mon = erlang:monitor(process, OtherCreationPid),
- % Should get the DOWN message right away
- receive
- {'DOWN', Mon, process, OtherCreationPid, noproc} ->
- Parent ! Ok
- end
- end),
- ?line receive
- Ok ->
- ?line ok
- after 1000 ->
- ?line ?t:fail("erlang:monitor/2 hangs")
- end.
+ Parent = self(),
+ Ok = make_ref(),
+ spawn(fun () ->
+ Mon = erlang:monitor(process, OtherCreationPid),
+ % Should get the DOWN message right away
+ receive
+ {'DOWN', Mon, process, OtherCreationPid, noproc} ->
+ Parent ! Ok
+ end
+ end),
+ receive
+ Ok ->
+ ok
+ after 1000 ->
+ ct:fail("erlang:monitor/2 hangs")
+ end.
monitor_time_offset(Config) when is_list(Config) ->
{ok, Node} = start_node(Config, "+C single_time_warp"),
Me = self(),
PMs = lists:map(fun (_) ->
- Pid = spawn(Node,
- fun () ->
- check_monitor_time_offset(Me)
- end),
- {Pid, erlang:monitor(process, Pid)}
- end,
- lists:seq(1, 100)),
+ Pid = spawn(Node,
+ fun () ->
+ check_monitor_time_offset(Me)
+ end),
+ {Pid, erlang:monitor(process, Pid)}
+ end,
+ lists:seq(1, 100)),
lists:foreach(fun ({P, _M}) ->
- P ! check_no_change_message
- end, PMs),
+ P ! check_no_change_message
+ end, PMs),
lists:foreach(fun ({P, M}) ->
- receive
- {no_change_message_received, P} ->
- ok;
- {'DOWN', M, process, P, Reason} ->
- ?t:fail(Reason)
- end
- end, PMs),
+ receive
+ {no_change_message_received, P} ->
+ ok;
+ {'DOWN', M, process, P, Reason} ->
+ ct:fail(Reason)
+ end
+ end, PMs),
preliminary = rpc:call(Node, erlang, system_flag, [time_offset, finalize]),
lists:foreach(fun ({P, M}) ->
- receive
- {change_messages_received, P} ->
- erlang:demonitor(M, [flush]);
- {'DOWN', M, process, P, Reason} ->
- ?t:fail(Reason)
- end
- end, PMs),
+ receive
+ {change_messages_received, P} ->
+ erlang:demonitor(M, [flush]);
+ {'DOWN', M, process, P, Reason} ->
+ ct:fail(Reason)
+ end
+ end, PMs),
stop_node(Node),
ok.
@@ -867,42 +807,42 @@ check_monitor_time_offset(Leader) ->
Mon4 = erlang:monitor(time_offset, clock_service),
erlang:demonitor(Mon2, [flush]),
-
+
Mon5 = erlang:monitor(time_offset, clock_service),
Mon6 = erlang:monitor(time_offset, clock_service),
Mon7 = erlang:monitor(time_offset, clock_service),
receive check_no_change_message -> ok end,
receive
- {'CHANGE', _, time_offset, clock_service, _} ->
- exit(unexpected_change_message_received)
+ {'CHANGE', _, time_offset, clock_service, _} ->
+ exit(unexpected_change_message_received)
after 0 ->
- Leader ! {no_change_message_received, self()}
+ Leader ! {no_change_message_received, self()}
end,
receive after 100 -> ok end,
erlang:demonitor(Mon4, [flush]),
receive
- {'CHANGE', Mon3, time_offset, clock_service, _} ->
- ok
+ {'CHANGE', Mon3, time_offset, clock_service, _} ->
+ ok
end,
receive
- {'CHANGE', Mon6, time_offset, clock_service, _} ->
- ok
+ {'CHANGE', Mon6, time_offset, clock_service, _} ->
+ ok
end,
erlang:demonitor(Mon5, [flush]),
receive
- {'CHANGE', Mon7, time_offset, clock_service, _} ->
- ok
+ {'CHANGE', Mon7, time_offset, clock_service, _} ->
+ ok
end,
receive
- {'CHANGE', Mon1, time_offset, clock_service, _} ->
- ok
+ {'CHANGE', Mon1, time_offset, clock_service, _} ->
+ ok
end,
receive
- {'CHANGE', _, time_offset, clock_service, _} ->
- exit(unexpected_change_message_received)
+ {'CHANGE', _, time_offset, clock_service, _} ->
+ exit(unexpected_change_message_received)
after 1000 ->
- ok
+ ok
end,
Leader ! {change_messages_received, self()}.
@@ -916,17 +856,17 @@ wait_for_m(Monitors, MonitoredBy, N) ->
{monitors,M0} = process_info(self(),monitors),
{monitored_by,MB0} = process_info(self(),monitored_by),
case lists:sort(M0) of
- Monitors ->
- case lists:sort(MB0) of
- MonitoredBy ->
- ok;
- _ ->
- receive after 100 -> ok end,
- wait_for_m(Monitors,MonitoredBy,N-1)
- end;
- _ ->
- receive after 100 -> ok end,
- wait_for_m(Monitors,MonitoredBy,N-1)
+ Monitors ->
+ case lists:sort(MB0) of
+ MonitoredBy ->
+ ok;
+ _ ->
+ receive after 100 -> ok end,
+ wait_for_m(Monitors,MonitoredBy,N-1)
+ end;
+ _ ->
+ receive after 100 -> ok end,
+ wait_for_m(Monitors,MonitoredBy,N-1)
end.
% All permutations of a list...
@@ -950,32 +890,32 @@ jeeves(Parent, Name, Ref)
when is_pid(Parent), (is_atom(Name) or (Name =:= [])), is_reference(Ref) ->
%%io:format("monitor_SUITE:jeeves(~p, ~p)~n", [Parent, Name]),
case Name of
- Atom when is_atom(Atom) ->
- register(Name, self());
- [] ->
- ok
+ Atom when is_atom(Atom) ->
+ register(Name, self());
+ [] ->
+ ok
end,
Parent ! {self(), Ref},
jeeves_loop(Parent).
jeeves_loop(Parent) ->
receive
- {Parent, monitors} ->
- Parent ! {self(), {monitors, monitors()}},
- jeeves_loop(Parent);
- {Parent, {monitor_process, P}} ->
- Parent ! {self(), {monitor_process,
- catch erlang:monitor(process, P) }},
- jeeves_loop(Parent);
- {Parent, {demonitor, Ref}} ->
- Parent ! {self(), {demonitor, catch erlang:demonitor(Ref)}},
- jeeves_loop(Parent);
- {Parent, stop} ->
- ok;
- {Parent, {exit, Reason}} ->
- exit(Reason);
- Other ->
- io:format("~p:jeeves_loop received ~p~n", [?MODULE, Other])
+ {Parent, monitors} ->
+ Parent ! {self(), {monitors, monitors()}},
+ jeeves_loop(Parent);
+ {Parent, {monitor_process, P}} ->
+ Parent ! {self(), {monitor_process,
+ catch erlang:monitor(process, P) }},
+ jeeves_loop(Parent);
+ {Parent, {demonitor, Ref}} ->
+ Parent ! {self(), {demonitor, catch erlang:demonitor(Ref)}},
+ jeeves_loop(Parent);
+ {Parent, stop} ->
+ ok;
+ {Parent, {exit, Reason}} ->
+ exit(Reason);
+ Other ->
+ io:format("~p:jeeves_loop received ~p~n", [?MODULE, Other])
end.
@@ -985,10 +925,10 @@ start_jeeves({Name, Node})
Ref = make_ref(),
Pid = spawn(Node, fun() -> jeeves(Parent, Name, Ref) end),
receive
- {Pid, Ref} ->
- ok;
- Other ->
- test_server:fail({rec, Other})
+ {Pid, Ref} ->
+ ok;
+ Other ->
+ ct:fail({rec, Other})
end,
Pid;
start_jeeves(Name) when is_atom(Name) ->
@@ -1002,20 +942,20 @@ tell_jeeves(Pid, What) when is_pid(Pid) ->
ask_jeeves(Pid, Request) when is_pid(Pid) ->
Pid ! {self(), Request},
receive
- {Pid, Response} ->
- Response;
- Other ->
- test_server:fail({rec, Other})
+ {Pid, Response} ->
+ Response;
+ Other ->
+ ct:fail({rec, Other})
end.
expect_jeeves(Pid, Request, Response) when is_pid(Pid) ->
Pid ! {self(), Request},
receive
- {Pid, Response} ->
- ok;
- Other ->
- test_server:fail({rec, Other})
+ {Pid, Response} ->
+ ok;
+ Other ->
+ ct:fail({rec, Other})
end.
@@ -1036,20 +976,20 @@ start_node(Config) ->
start_node(Config, "").
start_node(Config, Args) ->
- TestCase = ?config(testcase, Config),
+ TestCase = proplists:get_value(testcase, Config),
PA = filename:dirname(code:which(?MODULE)),
ESTime = erlang:monotonic_time(1) + erlang:time_offset(1),
Unique = erlang:unique_integer([positive]),
Name = list_to_atom(atom_to_list(?MODULE)
- ++ "-"
- ++ atom_to_list(TestCase)
- ++ "-"
- ++ integer_to_list(ESTime)
- ++ "-"
- ++ integer_to_list(Unique)),
+ ++ "-"
+ ++ atom_to_list(TestCase)
+ ++ "-"
+ ++ integer_to_list(ESTime)
+ ++ "-"
+ ++ integer_to_list(Unique)),
test_server:start_node(Name,
- slave,
- [{args, "-pa " ++ PA ++ " " ++ Args}]).
+ slave,
+ [{args, "-pa " ++ PA ++ " " ++ Args}]).
stop_node(Node) ->
test_server:stop_node(Node).
diff --git a/erts/emulator/test/mtx_SUITE.erl b/erts/emulator/test/mtx_SUITE.erl
index 87dace4721..1493e52655 100644
--- a/erts/emulator/test/mtx_SUITE.erl
+++ b/erts/emulator/test/mtx_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.
@@ -29,9 +29,8 @@
-include_lib("common_test/include/ct.hrl").
--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, init_per_suite/1, end_per_suite/1,
+ init_per_testcase/2, end_per_testcase/2]).
-export([long_rwlock/1,
hammer_ets_rwlock/1,
@@ -56,8 +55,30 @@
hammer_sched_freqread_tryrwlock/1,
hammer_sched_freqread_tryrwlock_check/1]).
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap, {minutes, 15}}].
+
+all() ->
+ [long_rwlock, hammer_rwlock_check, hammer_rwlock,
+ hammer_tryrwlock_check, hammer_tryrwlock,
+ hammer_ets_rwlock, hammer_sched_long_rwlock_check,
+ hammer_sched_long_rwlock,
+ hammer_sched_long_freqread_rwlock_check,
+ hammer_sched_long_freqread_rwlock,
+ hammer_sched_long_tryrwlock_check,
+ hammer_sched_long_tryrwlock,
+ hammer_sched_long_freqread_tryrwlock_check,
+ hammer_sched_long_freqread_tryrwlock,
+ hammer_sched_rwlock_check, hammer_sched_rwlock,
+ hammer_sched_freqread_rwlock_check,
+ hammer_sched_freqread_rwlock,
+ hammer_sched_tryrwlock_check, hammer_sched_tryrwlock,
+ hammer_sched_freqread_tryrwlock_check,
+ hammer_sched_freqread_tryrwlock].
+
init_per_suite(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
Lib = filename:join([DataDir, atom_to_list(?MODULE)]),
case {erlang:load_nif(Lib, none),erlang:system_info(threads)} of
{{error,_},false} ->
@@ -71,15 +92,13 @@ end_per_suite(Config) when is_list(Config) ->
Config.
init_per_testcase(_Case, Config) ->
- Dog = ?t:timetrap(?t:minutes(15)),
%% Wait for deallocations to complete since we measure
%% runtime in test cases.
wait_deallocations(),
- [{watchdog, Dog}|Config].
+ Config.
end_per_testcase(_Func, Config) ->
- Dog = ?config(watchdog, Config),
- ?t:timetrap_cancel(Dog).
+ ok.
wait_deallocations() ->
try
@@ -90,45 +109,15 @@ wait_deallocations() ->
wait_deallocations()
end.
-suite() -> [{ct_hooks,[ts_install_cth]}].
-
-all() ->
- [long_rwlock, hammer_rwlock_check, hammer_rwlock,
- hammer_tryrwlock_check, hammer_tryrwlock,
- hammer_ets_rwlock, hammer_sched_long_rwlock_check,
- hammer_sched_long_rwlock,
- hammer_sched_long_freqread_rwlock_check,
- hammer_sched_long_freqread_rwlock,
- hammer_sched_long_tryrwlock_check,
- hammer_sched_long_tryrwlock,
- hammer_sched_long_freqread_tryrwlock_check,
- hammer_sched_long_freqread_tryrwlock,
- hammer_sched_rwlock_check, hammer_sched_rwlock,
- hammer_sched_freqread_rwlock_check,
- hammer_sched_freqread_rwlock,
- hammer_sched_tryrwlock_check, hammer_sched_tryrwlock,
- hammer_sched_freqread_tryrwlock_check,
- hammer_sched_freqread_tryrwlock].
-
-groups() ->
- [].
-
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
-
-
long_rwlock(Config) when is_list(Config) ->
statistics(runtime),
LLRes = long_rw_test(),
{_, RunTime} = statistics(runtime),
%% A very short run time is expected, since
%% threads in the test mostly wait
- ?t:format("RunTime=~p~n", [RunTime]),
- ?line true = RunTime < 400,
- ?line RunTimeStr = "Run-time during test was "++integer_to_list(RunTime)++" ms.",
+ io:format("RunTime=~p~n", [RunTime]),
+ true = RunTime < 400,
+ RunTimeStr = "Run-time during test was "++integer_to_list(RunTime)++" ms.",
case LLRes of
ok ->
{comment, RunTimeStr};
@@ -198,100 +187,100 @@ hammer_sched_long_freqread_tryrwlock_check(Config) when is_list(Config) ->
hammer_sched_rwlock_test(FreqRead, LockCheck, Blocking, WaitLocked, WaitUnlocked) ->
case create_rwlock(FreqRead, LockCheck) of
- enotsup ->
- {skipped, "Not supported."};
- RWLock ->
- Onln = erlang:system_info(schedulers_online),
- NWPs = case Onln div 3 of
- 1 -> case Onln < 4 of
- true -> 1;
- false -> 2
- end;
- X -> X
- end,
- NRPs = Onln - NWPs,
- NoLockOps = ((((50000000 div Onln)
- div case {Blocking, WaitLocked} of
- {false, 0} -> 1;
- _ -> 10
- end)
- div (case WaitLocked == 0 of
- true -> 1;
- false -> WaitLocked*250
- end))
- div handicap()),
- ?t:format("NoLockOps=~p~n", [NoLockOps]),
- Sleep = case Blocking of
- true -> NoLockOps;
- false -> NoLockOps div 10
- end,
- WPs = lists:map(
- fun (Sched) ->
- spawn_opt(
- fun () ->
- io:format("Writer on scheduler ~p.~n",
- [Sched]),
- Sched = erlang:system_info(scheduler_id),
- receive go -> gone end,
- hammer_sched_rwlock_proc(RWLock,
- Blocking,
- true,
- WaitLocked,
- WaitUnlocked,
- NoLockOps,
- Sleep),
- Sched = erlang:system_info(scheduler_id)
- end,
- [link, {scheduler, Sched}])
- end,
- lists:seq(1, NWPs)),
- RPs = lists:map(
- fun (Sched) ->
- spawn_opt(
- fun () ->
- io:format("Reader on scheduler ~p.~n",
- [Sched]),
- Sched = erlang:system_info(scheduler_id),
- receive go -> gone end,
- hammer_sched_rwlock_proc(RWLock,
- Blocking,
- false,
- WaitLocked,
- WaitUnlocked,
- NoLockOps,
- Sleep),
- Sched = erlang:system_info(scheduler_id)
- end,
- [link, {scheduler, Sched}])
- end,
- lists:seq(NWPs + 1, NWPs + NRPs)),
- Procs = WPs ++ RPs,
- case {Blocking, WaitLocked} of
- {_, 0} -> ok;
- {false, _} -> ok;
- _ -> statistics(runtime)
- end,
- lists:foreach(fun (P) -> P ! go end, Procs),
- lists:foreach(fun (P) ->
- M = erlang:monitor(process, P),
- receive
- {'DOWN', M, process, P, _} ->
- ok
- end
- end,
- Procs),
- case {Blocking, WaitLocked} of
- {_, 0} -> ok;
- {false, _} -> ok;
- _ ->
- {_, RunTime} = statistics(runtime),
- ?t:format("RunTime=~p~n", [RunTime]),
- ?line true = RunTime < 700,
- {comment,
- "Run-time during test was "
- ++ integer_to_list(RunTime)
- ++ " ms."}
- end
+ enotsup ->
+ {skipped, "Not supported."};
+ RWLock ->
+ Onln = erlang:system_info(schedulers_online),
+ NWPs = case Onln div 3 of
+ 1 -> case Onln < 4 of
+ true -> 1;
+ false -> 2
+ end;
+ X -> X
+ end,
+ NRPs = Onln - NWPs,
+ NoLockOps = ((((50000000 div Onln)
+ div case {Blocking, WaitLocked} of
+ {false, 0} -> 1;
+ _ -> 10
+ end)
+ div (case WaitLocked == 0 of
+ true -> 1;
+ false -> WaitLocked*250
+ end))
+ div handicap()),
+ io:format("NoLockOps=~p~n", [NoLockOps]),
+ Sleep = case Blocking of
+ true -> NoLockOps;
+ false -> NoLockOps div 10
+ end,
+ WPs = lists:map(
+ fun (Sched) ->
+ spawn_opt(
+ fun () ->
+ io:format("Writer on scheduler ~p.~n",
+ [Sched]),
+ Sched = erlang:system_info(scheduler_id),
+ receive go -> gone end,
+ hammer_sched_rwlock_proc(RWLock,
+ Blocking,
+ true,
+ WaitLocked,
+ WaitUnlocked,
+ NoLockOps,
+ Sleep),
+ Sched = erlang:system_info(scheduler_id)
+ end,
+ [link, {scheduler, Sched}])
+ end,
+ lists:seq(1, NWPs)),
+ RPs = lists:map(
+ fun (Sched) ->
+ spawn_opt(
+ fun () ->
+ io:format("Reader on scheduler ~p.~n",
+ [Sched]),
+ Sched = erlang:system_info(scheduler_id),
+ receive go -> gone end,
+ hammer_sched_rwlock_proc(RWLock,
+ Blocking,
+ false,
+ WaitLocked,
+ WaitUnlocked,
+ NoLockOps,
+ Sleep),
+ Sched = erlang:system_info(scheduler_id)
+ end,
+ [link, {scheduler, Sched}])
+ end,
+ lists:seq(NWPs + 1, NWPs + NRPs)),
+ Procs = WPs ++ RPs,
+ case {Blocking, WaitLocked} of
+ {_, 0} -> ok;
+ {false, _} -> ok;
+ _ -> statistics(runtime)
+ end,
+ lists:foreach(fun (P) -> P ! go end, Procs),
+ lists:foreach(fun (P) ->
+ M = erlang:monitor(process, P),
+ receive
+ {'DOWN', M, process, P, _} ->
+ ok
+ end
+ end,
+ Procs),
+ case {Blocking, WaitLocked} of
+ {_, 0} -> ok;
+ {false, _} -> ok;
+ _ ->
+ {_, RunTime} = statistics(runtime),
+ io:format("RunTime=~p~n", [RunTime]),
+ true = RunTime < 700,
+ {comment,
+ "Run-time during test was "
+ ++ integer_to_list(RunTime)
+ ++ " ms."}
+ end
end.
hammer_sched_rwlock_proc(_RWLock,
@@ -343,9 +332,9 @@ hammer_ets_rwlock(Config) when is_list(Config) ->
3 -> {2000, 50};
_ -> {200, 50}
end,
- ?t:format("Procs=~p~nOps=~p~n", [Procs, Ops]),
+ io:format("Procs=~p~nOps=~p~n", [Procs, Ops]),
lists:foreach(fun (XOpts) ->
- ?t:format("Running with extra opts: ~p", [XOpts]),
+ io:format("Running with extra opts: ~p", [XOpts]),
hammer_ets_rwlock_test(XOpts, true, 2, Ops,
Procs, false)
end,
@@ -408,65 +397,65 @@ hammer_ets_rwlock_init(_T, _N) ->
hammer_ets_rwlock_test(XOpts, UW, C, N, NP, SC) ->
receive after 100 -> ok end,
{TP, TM} = spawn_monitor(
- fun () ->
- _L = repeat_list(
- fun () ->
- Caller = self(),
- T = fun () ->
- Parent = self(),
- hammer_ets_rwlock_put_data(),
- T=ets:new(x, [public | XOpts]),
- hammer_ets_rwlock_init(T, 0),
- Ps0 = repeat_list(
- fun () ->
- spawn_link(
- fun () ->
- hammer_ets_rwlock_put_data(),
- receive go -> ok end,
- hammer_ets_rwlock_ops(T, UW, N, C, C, N),
- Parent ! {done, self()},
- receive after infinity -> ok end
- end)
- end,
- NP - case SC of
- false -> 0;
- _ -> 1
- end),
- Ps = case SC of
- false -> Ps0;
- _ -> [spawn_link(fun () ->
- hammer_ets_rwlock_put_data(),
- receive go -> ok end,
- hammer_ets_rwlock_ops(T, UW, N, SC, SC, N),
- Parent ! {done, self()},
- receive after infinity -> ok end
- end) | Ps0]
- end,
- Start = erlang:monotonic_time(),
- lists:foreach(fun (P) -> P ! go end, Ps),
- lists:foreach(fun (P) -> receive {done, P} -> ok end end, Ps),
- Stop = erlang:monotonic_time(),
- lists:foreach(fun (P) ->
- unlink(P),
- exit(P, bang),
- M = erlang:monitor(process, P),
- receive
- {'DOWN', M, process, P, _} -> ok
- end
- end, Ps),
- Res = (Stop-Start)/erlang:convert_time_unit(1,seconds,native),
- Caller ! {?MODULE, self(), Res}
- end,
- TP = spawn_link(T),
- receive
- {?MODULE, TP, Res} ->
- Res
- end
- end,
- ?HAMMER_ETS_RWLOCK_REPEAT_TIMES)
- end),
+ fun () ->
+ _L = repeat_list(
+ fun () ->
+ Caller = self(),
+ T = fun () ->
+ Parent = self(),
+ hammer_ets_rwlock_put_data(),
+ T=ets:new(x, [public | XOpts]),
+ hammer_ets_rwlock_init(T, 0),
+ Ps0 = repeat_list(
+ fun () ->
+ spawn_link(
+ fun () ->
+ hammer_ets_rwlock_put_data(),
+ receive go -> ok end,
+ hammer_ets_rwlock_ops(T, UW, N, C, C, N),
+ Parent ! {done, self()},
+ receive after infinity -> ok end
+ end)
+ end,
+ NP - case SC of
+ false -> 0;
+ _ -> 1
+ end),
+ Ps = case SC of
+ false -> Ps0;
+ _ -> [spawn_link(fun () ->
+ hammer_ets_rwlock_put_data(),
+ receive go -> ok end,
+ hammer_ets_rwlock_ops(T, UW, N, SC, SC, N),
+ Parent ! {done, self()},
+ receive after infinity -> ok end
+ end) | Ps0]
+ end,
+ Start = erlang:monotonic_time(),
+ lists:foreach(fun (P) -> P ! go end, Ps),
+ lists:foreach(fun (P) -> receive {done, P} -> ok end end, Ps),
+ Stop = erlang:monotonic_time(),
+ lists:foreach(fun (P) ->
+ unlink(P),
+ exit(P, bang),
+ M = erlang:monitor(process, P),
+ receive
+ {'DOWN', M, process, P, _} -> ok
+ end
+ end, Ps),
+ Res = (Stop-Start)/erlang:convert_time_unit(1,seconds,native),
+ Caller ! {?MODULE, self(), Res}
+ end,
+ TP = spawn_link(T),
+ receive
+ {?MODULE, TP, Res} ->
+ Res
+ end
+ end,
+ ?HAMMER_ETS_RWLOCK_REPEAT_TIMES)
+ end),
receive
- {'DOWN', TM, process, TP, _} -> ok
+ {'DOWN', TM, process, TP, _} -> ok
end.
repeat_list(Fun, N) ->
@@ -480,18 +469,17 @@ repeat_list(Fun, N, Acc) ->
handicap() ->
X0 = case catch (erlang:system_info(logical_processors_available) >=
- erlang:system_info(schedulers_online)) of
- true -> 1;
- _ -> 2
- end,
+ erlang:system_info(schedulers_online)) of
+ true -> 1;
+ _ -> 2
+ end,
case erlang:system_info(build_type) of
- opt ->
- X0;
- ReallySlow when ReallySlow == debug;
- ReallySlow == valgrind;
- ReallySlow == purify ->
- X0*3;
- _Slow ->
- X0*2
+ opt ->
+ X0;
+ ReallySlow when ReallySlow == debug;
+ ReallySlow == valgrind;
+ ReallySlow == purify ->
+ X0*3;
+ _Slow ->
+ X0*2
end.
-
diff --git a/erts/emulator/test/mtx_SUITE_data/Makefile.src b/erts/emulator/test/mtx_SUITE_data/Makefile.src
index dc880118f1..1816dc6798 100644
--- a/erts/emulator/test/mtx_SUITE_data/Makefile.src
+++ b/erts/emulator/test/mtx_SUITE_data/Makefile.src
@@ -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/erts/emulator/test/mtx_SUITE_data/mtx_SUITE.c b/erts/emulator/test/mtx_SUITE_data/mtx_SUITE.c
index 1911291448..e011aadce9 100644
--- a/erts/emulator/test/mtx_SUITE_data/mtx_SUITE.c
+++ b/erts/emulator/test/mtx_SUITE_data/mtx_SUITE.c
@@ -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/erts/emulator/test/multi_load_SUITE.erl b/erts/emulator/test/multi_load_SUITE.erl
index 784b239116..edf3205812 100644
--- a/erts/emulator/test/multi_load_SUITE.erl
+++ b/erts/emulator/test/multi_load_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.
@@ -19,32 +19,16 @@
%%
-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,
- many/1,on_load/1,errors/1]).
+-export([all/0, suite/0, many/1, on_load/1, errors/1]).
-include_lib("common_test/include/ct.hrl").
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]}].
all() ->
[many,on_load,errors].
-groups() ->
- [].
-
-init_per_suite(Config) ->
- Config.
-
-end_per_suite(_Config) ->
- ok.
-
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
-
many(_Config) ->
Ms = make_modules(100, fun many_module/1),
@@ -57,7 +41,6 @@ many(_Config) ->
io:put_chars("Heavy load\n"
"=========="),
many_measure(Ms),
-
ok.
many_module(M) ->
@@ -81,9 +64,12 @@ many_measure(Ms) ->
"Sequential: ~9w µs\n"
"Parallel: ~9w µs\n"
"Ratio: ~9w\n",
- [length(Ms),Us1,Us2,round(Us1/Us2)]),
+ [length(Ms),Us1,Us2,divide(Us1,Us2)]),
ok.
+divide(A,B) when B > 0 -> A div B;
+divide(_,_) -> inf.
+
many_load_seq(Ms) ->
[erlang:finish_loading([M]) || M <- Ms],
ok.
@@ -135,7 +121,6 @@ on_load(_Config) ->
SingleOnPrep = tl(OnPrep),
{on_load,[OnLoadMod]} = erlang:finish_loading(SingleOnPrep),
ok = erlang:call_on_load_function(OnLoadMod),
-
ok.
on_load_module(M) ->
diff --git a/erts/emulator/test/nested_SUITE.erl b/erts/emulator/test/nested_SUITE.erl
index ee6bbf6a55..7af2873ce2 100644
--- a/erts/emulator/test/nested_SUITE.erl
+++ b/erts/emulator/test/nested_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.
@@ -20,90 +20,74 @@
-module(nested_SUITE).
--export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
- init_per_group/2,end_per_group/2,
- case_in_case/1, case_in_after/1, catch_in_catch/1, bif_in_bif/1]).
+-export([all/0, suite/0,
+ case_in_case/1, case_in_after/1, catch_in_catch/1, bif_in_bif/1]).
-include_lib("common_test/include/ct.hrl").
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap, {seconds, 10}}].
all() ->
[case_in_case, case_in_after, catch_in_catch,
bif_in_bif].
-groups() ->
- [].
-
-init_per_suite(Config) ->
- Config.
-
-end_per_suite(_Config) ->
- ok.
-
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
-
case_in_case(suite) -> [];
case_in_case(Config) when is_list(Config) ->
- ?line done = search_any([a], [{a, 1}]),
- ?line done = search_any([x], [{a, 1}]),
+ done = search_any([a], [{a, 1}]),
+ done = search_any([x], [{a, 1}]),
ok.
search_any([Key|Rest], List) ->
- ?line case case lists:keysearch(Key, 1, List) of
- {value, _} ->
- true;
- _ ->
- false
- end of
- true ->
- ok;
- false ->
- error;
- Other ->
- test_server:fail({other_result, Other})
- end,
- ?line search_any(Rest, List);
+ case case lists:keysearch(Key, 1, List) of
+ {value, _} ->
+ true;
+ _ ->
+ false
+ end of
+ true ->
+ ok;
+ false ->
+ error;
+ Other ->
+ ct:fail({other_result, Other})
+ end,
+ search_any(Rest, List);
search_any([], _) ->
done.
case_in_after(suite) -> [];
case_in_after(Config) when is_list(Config) ->
receive
- after case {x, y, z} of
- {x, y, z} -> 0
- end ->
- ok
- end,
+ after case {x, y, z} of
+ {x, y, z} -> 0
+ end ->
+ ok
+ end,
ok.
-catch_in_catch(doc) -> "Test a catch within a catch in the same function.";
-catch_in_catch(suite) -> [];
+%% Test a catch within a catch in the same function.
catch_in_catch(Config) when is_list(Config) ->
- ?line {outer, inner_exit} = catcher(),
+ {outer, inner_exit} = catcher(),
ok.
catcher() ->
case (catch
- case (catch ?MODULE:non_existing()) of % bogus function
- {'EXIT', _} ->
- inner_exit;
- Res1 ->
- {inner, Res1}
- end) of
- {'EXIT', _} ->
- outer_exit;
- Res2 ->
- {outer, Res2}
+ case (catch ?MODULE:non_existing()) of % bogus function
+ {'EXIT', _} ->
+ inner_exit;
+ Res1 ->
+ {inner, Res1}
+ end) of
+ {'EXIT', _} ->
+ outer_exit;
+ Res2 ->
+ {outer, Res2}
end.
-bif_in_bif(doc) -> "Test a BIF call within a BIF call.";
-bif_in_bif(suite) -> [];
+%% Test a BIF call within a BIF call.
bif_in_bif(Config) when is_list(Config) ->
Self = self(),
put(pid, Self),
diff --git a/erts/emulator/test/nif_SUITE.erl b/erts/emulator/test/nif_SUITE.erl
index 7ce37b04b3..a0e9f1bad6 100644
--- a/erts/emulator/test/nif_SUITE.erl
+++ b/erts/emulator/test/nif_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.
@@ -22,14 +22,13 @@
%%-define(line_trace,true).
-define(CHECK(Exp,Got), check(Exp,Got,?LINE)).
-%%-define(CHECK(Exp,Got), ?line Exp = Got).
+%%-define(CHECK(Exp,Got), Exp = Got).
-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, basic/1, reload/1, upgrade/1, heap_frag/1,
+-export([all/0, suite/0,
+ init_per_testcase/2, end_per_testcase/2,
+ basic/1, reload/1, upgrade/1, heap_frag/1,
types/1, many_args/1, binaries/1, get_string/1, get_atom/1,
maps/1,
api_macros/1,
@@ -39,11 +38,15 @@
is_checks/1,
get_length/1, make_atom/1, make_string/1, reverse_list_test/1,
otp_9828/1,
- otp_9668/1, consume_timeslice/1, dirty_nif/1, dirty_nif_send/1,
- dirty_nif_exception/1, call_dirty_nif_exception/1, nif_schedule/1,
+ otp_9668/1, consume_timeslice/1, nif_schedule/1,
nif_exception/1, call_nif_exception/1,
nif_nan_and_inf/1, nif_atom_too_long/1,
- nif_monotonic_time/1, nif_time_offset/1, nif_convert_time_unit/1
+ nif_monotonic_time/1, nif_time_offset/1, nif_convert_time_unit/1,
+ nif_now_time/1, nif_cpu_time/1, nif_unique_integer/1,
+ nif_is_process_alive/1, nif_is_port_alive/1,
+ nif_term_to_binary/1, nif_binary_to_term/1,
+ nif_port_command/1,
+ nif_snprintf/1
]).
-export([many_args_100/100]).
@@ -72,184 +75,164 @@ all() ->
make_string,reverse_list_test,
otp_9828,
otp_9668, consume_timeslice,
- nif_schedule, dirty_nif, dirty_nif_send, dirty_nif_exception,
- nif_exception, nif_nan_and_inf, nif_atom_too_long,
- nif_monotonic_time, nif_time_offset, nif_convert_time_unit
- ].
-
-groups() ->
- [].
-
-init_per_suite(Config) ->
- Config.
-
-end_per_suite(_Config) ->
- ok.
-
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
-
+ nif_schedule, nif_exception, nif_nan_and_inf, nif_atom_too_long,
+ nif_monotonic_time, nif_time_offset, nif_convert_time_unit,
+ nif_now_time, nif_cpu_time, nif_unique_integer,
+ nif_is_process_alive, nif_is_port_alive,
+ nif_term_to_binary, nif_binary_to_term,
+ nif_port_command,
+ nif_snprintf].
init_per_testcase(_Case, Config) ->
-% ?line Dog = ?t:timetrap(?t:seconds(60*60*24)),
Config.
end_per_testcase(_Func, _Config) ->
- %%Dog = ?config(watchdog, Config),
- %%?t:timetrap_cancel(Dog),
P1 = code:purge(nif_mod),
Del = code:delete(nif_mod),
P2 = code:purge(nif_mod),
io:format("fin purged=~p, deleted=~p and then purged=~p\n",[P1,Del,P2]).
-basic(doc) -> ["Basic smoke test of load_nif and a simple NIF call"];
-basic(suite) -> [];
+%% Basic smoke test of load_nif and a simple NIF call
basic(Config) when is_list(Config) ->
ensure_lib_loaded(Config),
- ?line true = (lib_version() =/= undefined),
- ?line [{load,1,1,101},{lib_version,1,2,102}] = call_history(),
- ?line [] = call_history(),
- ?line true = lists:member(?MODULE, erlang:system_info(taints)),
+ true = (lib_version() =/= undefined),
+ [{load,1,1,101},{lib_version,1,2,102}] = call_history(),
+ [] = call_history(),
+ true = lists:member(?MODULE, erlang:system_info(taints)),
ok.
-reload(doc) -> ["Test reload callback in nif lib"];
-reload(suite) -> [];
+%% Test reload callback in nif lib
reload(Config) when is_list(Config) ->
TmpMem = tmpmem(),
ensure_lib_loaded(Config),
- ?line Data = ?config(data_dir, Config),
- ?line File = filename:join(Data, "nif_mod"),
- ?line {ok,nif_mod,Bin} = compile:file(File, [binary,return_errors]),
- ?line {module,nif_mod} = erlang:load_module(nif_mod,Bin),
+ Data = proplists:get_value(data_dir, Config),
+ File = filename:join(Data, "nif_mod"),
+ {ok,nif_mod,Bin} = compile:file(File, [binary,return_errors]),
+ {module,nif_mod} = erlang:load_module(nif_mod,Bin),
- ?line ok = nif_mod:load_nif_lib(Config, 1),
+ ok = nif_mod:load_nif_lib(Config, 1),
- ?line hold_nif_mod_priv_data(nif_mod:get_priv_data_ptr()),
- ?line [{load,1,1,101},{get_priv_data_ptr,1,2,102}] = nif_mod_call_history(),
+ hold_nif_mod_priv_data(nif_mod:get_priv_data_ptr()),
+ [{load,1,1,101},{get_priv_data_ptr,1,2,102}] = nif_mod_call_history(),
- ?line ok = nif_mod:load_nif_lib(Config, 2),
- ?line 2 = nif_mod:lib_version(),
- ?line [{reload,2,1,201},{lib_version,2,2,202}] = nif_mod_call_history(),
+ ok = nif_mod:load_nif_lib(Config, 2),
+ 2 = nif_mod:lib_version(),
+ [{reload,2,1,201},{lib_version,2,2,202}] = nif_mod_call_history(),
- ?line ok = nif_mod:load_nif_lib(Config, 1),
- ?line 1 = nif_mod:lib_version(),
- ?line [{reload,1,1,101},{lib_version,1,2,102}] = nif_mod_call_history(),
+ ok = nif_mod:load_nif_lib(Config, 1),
+ 1 = nif_mod:lib_version(),
+ [{reload,1,1,101},{lib_version,1,2,102}] = nif_mod_call_history(),
- ?line true = erlang:delete_module(nif_mod),
- ?line [] = nif_mod_call_history(),
+ true = erlang:delete_module(nif_mod),
+ [] = nif_mod_call_history(),
- %%?line false= check_process_code(Pid, nif_mod),
- ?line true = erlang:purge_module(nif_mod),
- ?line [{unload,1,3,103}] = nif_mod_call_history(),
+ %%false= check_process_code(Pid, nif_mod),
+ true = erlang:purge_module(nif_mod),
+ [{unload,1,3,103}] = nif_mod_call_history(),
- ?line true = lists:member(?MODULE, erlang:system_info(taints)),
- ?line true = lists:member(nif_mod, erlang:system_info(taints)),
- ?line verify_tmpmem(TmpMem),
+ true = lists:member(?MODULE, erlang:system_info(taints)),
+ true = lists:member(nif_mod, erlang:system_info(taints)),
+ verify_tmpmem(TmpMem),
ok.
-upgrade(doc) -> ["Test upgrade callback in nif lib"];
-upgrade(suite) -> [];
+%% Test upgrade callback in nif lib
upgrade(Config) when is_list(Config) ->
TmpMem = tmpmem(),
ensure_lib_loaded(Config),
- ?line Data = ?config(data_dir, Config),
- ?line File = filename:join(Data, "nif_mod"),
- ?line {ok,nif_mod,Bin} = compile:file(File, [binary,return_errors]),
- ?line {module,nif_mod} = erlang:load_module(nif_mod,Bin),
+ Data = proplists:get_value(data_dir, Config),
+ File = filename:join(Data, "nif_mod"),
+ {ok,nif_mod,Bin} = compile:file(File, [binary,return_errors]),
+ {module,nif_mod} = erlang:load_module(nif_mod,Bin),
- ?line ok = nif_mod:load_nif_lib(Config, 1),
- ?line {Pid,MRef} = nif_mod:start(),
- ?line 1 = call(Pid,lib_version),
+ ok = nif_mod:load_nif_lib(Config, 1),
+ {Pid,MRef} = nif_mod:start(),
+ 1 = call(Pid,lib_version),
- ?line hold_nif_mod_priv_data(nif_mod:get_priv_data_ptr()),
- ?line [{load,1,1,101},{lib_version,1,2,102},{get_priv_data_ptr,1,3,103}] = nif_mod_call_history(),
+ hold_nif_mod_priv_data(nif_mod:get_priv_data_ptr()),
+ [{load,1,1,101},{lib_version,1,2,102},{get_priv_data_ptr,1,3,103}] = nif_mod_call_history(),
%% Module upgrade with same lib-version
- ?line {module,nif_mod} = erlang:load_module(nif_mod,Bin),
- ?line undefined = nif_mod:lib_version(),
- ?line 1 = call(Pid,lib_version),
- ?line [{lib_version,1,4,104}] = nif_mod_call_history(),
+ {module,nif_mod} = erlang:load_module(nif_mod,Bin),
+ undefined = nif_mod:lib_version(),
+ 1 = call(Pid,lib_version),
+ [{lib_version,1,4,104}] = nif_mod_call_history(),
- ?line ok = nif_mod:load_nif_lib(Config, 1),
- ?line 1 = nif_mod:lib_version(),
- ?line [{upgrade,1,5,105},{lib_version,1,6,106}] = nif_mod_call_history(),
+ ok = nif_mod:load_nif_lib(Config, 1),
+ 1 = nif_mod:lib_version(),
+ [{upgrade,1,5,105},{lib_version,1,6,106}] = nif_mod_call_history(),
- ?line upgraded = call(Pid,upgrade),
- ?line false = check_process_code(Pid, nif_mod),
- ?line true = erlang:purge_module(nif_mod),
- ?line [{unload,1,7,107}] = nif_mod_call_history(),
+ upgraded = call(Pid,upgrade),
+ false = check_process_code(Pid, nif_mod),
+ true = erlang:purge_module(nif_mod),
+ [{unload,1,7,107}] = nif_mod_call_history(),
- ?line 1 = nif_mod:lib_version(),
- ?line [{lib_version,1,8,108}] = nif_mod_call_history(),
+ 1 = nif_mod:lib_version(),
+ [{lib_version,1,8,108}] = nif_mod_call_history(),
- ?line true = erlang:delete_module(nif_mod),
- ?line [] = nif_mod_call_history(),
+ true = erlang:delete_module(nif_mod),
+ [] = nif_mod_call_history(),
- ?line Pid ! die,
- ?line {'DOWN', MRef, process, Pid, normal} = receive_any(),
- ?line false = check_process_code(Pid, nif_mod),
- ?line true = erlang:purge_module(nif_mod),
- ?line [{unload,1,9,109}] = nif_mod_call_history(),
+ Pid ! die,
+ {'DOWN', MRef, process, Pid, normal} = receive_any(),
+ false = check_process_code(Pid, nif_mod),
+ true = erlang:purge_module(nif_mod),
+ [{unload,1,9,109}] = nif_mod_call_history(),
%% Module upgrade with different lib version
- ?line {module,nif_mod} = erlang:load_module(nif_mod,Bin),
- ?line undefined = nif_mod:lib_version(),
- ?line {Pid2,MRef2} = nif_mod:start(),
- ?line undefined = call(Pid2,lib_version),
-
- ?line ok = nif_mod:load_nif_lib(Config, 1),
- ?line hold_nif_mod_priv_data(nif_mod:get_priv_data_ptr()),
- ?line 1 = call(Pid2,lib_version),
- ?line [{load,1,1,101},{get_priv_data_ptr,1,2,102},{lib_version,1,3,103}] = nif_mod_call_history(),
-
- ?line {module,nif_mod} = erlang:load_module(nif_mod,Bin),
- ?line undefined = nif_mod:lib_version(),
- ?line [] = nif_mod_call_history(),
- ?line 1 = call(Pid2,lib_version),
- ?line [{lib_version,1,4,104}] = nif_mod_call_history(),
-
- ?line ok = nif_mod:load_nif_lib(Config, 2),
- ?line 2 = nif_mod:lib_version(),
- ?line [{upgrade,2,1,201},{lib_version,2,2,202}] = nif_mod_call_history(),
-
- ?line 1 = call(Pid2,lib_version),
- ?line [{lib_version,1,5,105}] = nif_mod_call_history(),
-
- ?line upgraded = call(Pid2,upgrade),
- ?line false = check_process_code(Pid2, nif_mod),
- ?line true = erlang:purge_module(nif_mod),
- ?line [{unload,1,6,106}] = nif_mod_call_history(),
-
- ?line 2 = nif_mod:lib_version(),
- ?line [{lib_version,2,3,203}] = nif_mod_call_history(),
-
- ?line true = erlang:delete_module(nif_mod),
- ?line [] = nif_mod_call_history(),
-
- ?line Pid2 ! die,
- ?line {'DOWN', MRef2, process, Pid2, normal} = receive_any(),
- ?line false= check_process_code(Pid2, nif_mod),
- ?line true = erlang:purge_module(nif_mod),
- ?line [{unload,2,4,204}] = nif_mod_call_history(),
-
- ?line true = lists:member(?MODULE, erlang:system_info(taints)),
- ?line true = lists:member(nif_mod, erlang:system_info(taints)),
- ?line verify_tmpmem(TmpMem),
+ {module,nif_mod} = erlang:load_module(nif_mod,Bin),
+ undefined = nif_mod:lib_version(),
+ {Pid2,MRef2} = nif_mod:start(),
+ undefined = call(Pid2,lib_version),
+
+ ok = nif_mod:load_nif_lib(Config, 1),
+ hold_nif_mod_priv_data(nif_mod:get_priv_data_ptr()),
+ 1 = call(Pid2,lib_version),
+ [{load,1,1,101},{get_priv_data_ptr,1,2,102},{lib_version,1,3,103}] = nif_mod_call_history(),
+
+ {module,nif_mod} = erlang:load_module(nif_mod,Bin),
+ undefined = nif_mod:lib_version(),
+ [] = nif_mod_call_history(),
+ 1 = call(Pid2,lib_version),
+ [{lib_version,1,4,104}] = nif_mod_call_history(),
+
+ ok = nif_mod:load_nif_lib(Config, 2),
+ 2 = nif_mod:lib_version(),
+ [{upgrade,2,1,201},{lib_version,2,2,202}] = nif_mod_call_history(),
+
+ 1 = call(Pid2,lib_version),
+ [{lib_version,1,5,105}] = nif_mod_call_history(),
+
+ upgraded = call(Pid2,upgrade),
+ false = check_process_code(Pid2, nif_mod),
+ true = erlang:purge_module(nif_mod),
+ [{unload,1,6,106}] = nif_mod_call_history(),
+
+ 2 = nif_mod:lib_version(),
+ [{lib_version,2,3,203}] = nif_mod_call_history(),
+
+ true = erlang:delete_module(nif_mod),
+ [] = nif_mod_call_history(),
+
+ Pid2 ! die,
+ {'DOWN', MRef2, process, Pid2, normal} = receive_any(),
+ false= check_process_code(Pid2, nif_mod),
+ true = erlang:purge_module(nif_mod),
+ [{unload,2,4,204}] = nif_mod_call_history(),
+
+ true = lists:member(?MODULE, erlang:system_info(taints)),
+ true = lists:member(nif_mod, erlang:system_info(taints)),
+ verify_tmpmem(TmpMem),
ok.
-heap_frag(doc) -> ["Test NIF building heap fragments"];
-heap_frag(suite) -> [];
+%% Test NIF building heap fragments
heap_frag(Config) when is_list(Config) ->
TmpMem = tmpmem(),
ensure_lib_loaded(Config),
heap_frag_do(1,1000000),
- ?line verify_tmpmem(TmpMem),
+ verify_tmpmem(TmpMem),
ok.
heap_frag_do(N, Max) when N > Max ->
@@ -260,12 +243,11 @@ heap_frag_do(N, Max) ->
L = list_seq(N),
heap_frag_do(((N*5) div 4) + 1, Max).
-types(doc) -> ["Type tests"];
-types(suite) -> [];
+%% Type tests
types(Config) when is_list(Config) ->
TmpMem = tmpmem(),
ensure_lib_loaded(Config),
- ?line ok = type_test(),
+ ok = type_test(),
lists:foreach(fun(Tpl) ->
Lst = erlang:tuple_to_list(Tpl),
Lst = tuple_2_list(Tpl)
@@ -290,18 +272,18 @@ types(Config) when is_list(Config) ->
R1 = echo_int(I),
%%io:format("echo_int(~p) -> ~p\n", [I, R1]),
R2 = my_echo_int(I, Limits),
- ?line R1 = R2,
- ?line true = (R1 =:= R2),
- ?line true = (R1 == R2)
+ R1 = R2,
+ true = (R1 =:= R2),
+ true = (R1 == R2)
end, int_list()),
- ?line verify_tmpmem(TmpMem),
- ?line true = (compare(-1294536544000, -1178704800000) < 0),
- ?line true = (compare(-1178704800000, -1294536544000) > 0),
- ?line true = (compare(-295147905179352825856, -36893488147419103232) < 0),
- ?line true = (compare(-36893488147419103232, -295147905179352825856) > 0),
- ?line true = (compare(-29514790517935282585612345678, -36893488147419103232) < 0),
- ?line true = (compare(-36893488147419103232, -29514790517935282585612345678) > 0),
+ verify_tmpmem(TmpMem),
+ true = (compare(-1294536544000, -1178704800000) < 0),
+ true = (compare(-1178704800000, -1294536544000) > 0),
+ true = (compare(-295147905179352825856, -36893488147419103232) < 0),
+ true = (compare(-36893488147419103232, -295147905179352825856) > 0),
+ true = (compare(-29514790517935282585612345678, -36893488147419103232) < 0),
+ true = (compare(-36893488147419103232, -29514790517935282585612345678) > 0),
ok.
int_list() ->
@@ -329,15 +311,15 @@ eq_cmp(A,B) ->
eq_cmp_do({A,B},{A,B}).
eq_cmp_do(A,B) ->
- %%?t:format("compare ~p and ~p\n",[A,B]),
+ %%io:format("compare ~p and ~p\n",[A,B]),
Eq = (A =:= B),
- ?line Eq = is_identical(A,B),
- ?line Cmp = if
+ Eq = is_identical(A,B),
+ Cmp = if
A < B -> -1;
A == B -> 0;
A > B -> 1
end,
- ?line Cmp = case compare(A,B) of
+ Cmp = case compare(A,B) of
C when is_integer(C), C < 0 -> -1;
0 -> 0;
C when is_integer(C) -> 1
@@ -345,47 +327,45 @@ eq_cmp_do(A,B) ->
ok.
-many_args(doc) -> ["Test NIF with many arguments"];
-many_args(suite) -> [];
+%% Test NIF with many arguments
many_args(Config) when is_list(Config) ->
TmpMem = tmpmem(),
- ?line ensure_lib_loaded(Config ,1),
- ?line ok = apply(?MODULE,many_args_100,lists:seq(1,100)),
- ?line ok = many_args_100(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,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100),
- ?line verify_tmpmem(TmpMem),
+ ensure_lib_loaded(Config ,1),
+ ok = apply(?MODULE,many_args_100,lists:seq(1,100)),
+ ok = many_args_100(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,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100),
+ verify_tmpmem(TmpMem),
ok.
-binaries(doc) -> ["Test NIF binary handling."];
-binaries(suite) -> [];
+%% Test NIF binary handling.
binaries(Config) when is_list(Config) ->
TmpMem = tmpmem(),
- ?line ensure_lib_loaded(Config, 1),
- ?line RefcBin = list_to_binary(lists:seq(1,255)),
- ?line RefcBin = clone_bin(RefcBin),
- ?line HeapBin = list_to_binary(lists:seq(1,20)),
- ?line HeapBin = clone_bin(HeapBin),
- ?line <<_:8,Sub1:6/binary,_/binary>> = RefcBin,
- ?line <<_:8,Sub2:6/binary,_/binary>> = HeapBin,
- ?line Sub1 = Sub2,
- ?line Sub1 = clone_bin(Sub1),
- ?line Sub2 = clone_bin(Sub2),
- ?line <<_:9,Sub3:6/binary,_/bitstring>> = RefcBin,
- ?line <<_:9,Sub4:6/binary,_/bitstring>> = HeapBin,
- ?line Sub3 = Sub4,
- ?line Sub3 = clone_bin(Sub3),
- ?line Sub4 = clone_bin(Sub4),
+ ensure_lib_loaded(Config, 1),
+ RefcBin = list_to_binary(lists:seq(1,255)),
+ RefcBin = clone_bin(RefcBin),
+ HeapBin = list_to_binary(lists:seq(1,20)),
+ HeapBin = clone_bin(HeapBin),
+ <<_:8,Sub1:6/binary,_/binary>> = RefcBin,
+ <<_:8,Sub2:6/binary,_/binary>> = HeapBin,
+ Sub1 = Sub2,
+ Sub1 = clone_bin(Sub1),
+ Sub2 = clone_bin(Sub2),
+ <<_:9,Sub3:6/binary,_/bitstring>> = RefcBin,
+ <<_:9,Sub4:6/binary,_/bitstring>> = HeapBin,
+ Sub3 = Sub4,
+ Sub3 = clone_bin(Sub3),
+ Sub4 = clone_bin(Sub4),
%% When NIFs get bitstring support
- %%?line <<_:8,Sub5:27/bitstring,_/bitstring>> = RefcBin,
- %%?line <<_:8,Sub6:27/bitstring,_/bitstring>> = HeapBin,
- %%?line Sub5 = Sub6,
- %%?line Sub5 = clone_bin(Sub5),
- %%?line Sub6 = clone_bin(Sub6),
- %%?line <<_:9,Sub7:27/bitstring,_/bitstring>> = RefcBin,
- %%?line <<_:9,Sub8:27/bitstring,_/bitstring>> = HeapBin,
- %%?line Sub7 = Sub8,
- %%?line Sub7 = clone_bin(Sub7),
- %%?line Sub8 = clone_bin(Sub8),
- %%?line <<>> = clone_bin(<<>>),
+ %%<<_:8,Sub5:27/bitstring,_/bitstring>> = RefcBin,
+ %%<<_:8,Sub6:27/bitstring,_/bitstring>> = HeapBin,
+ %%Sub5 = Sub6,
+ %%Sub5 = clone_bin(Sub5),
+ %%Sub6 = clone_bin(Sub6),
+ %%<<_:9,Sub7:27/bitstring,_/bitstring>> = RefcBin,
+ %%<<_:9,Sub8:27/bitstring,_/bitstring>> = HeapBin,
+ %%Sub7 = Sub8,
+ %%Sub7 = clone_bin(Sub7),
+ %%Sub8 = clone_bin(Sub8),
+ %%<<>> = clone_bin(<<>>),
<<_:8,SubBinA:200/binary,_/binary>> = RefcBin,
<<_:9,SubBinB:200/binary,_/bitstring>> = RefcBin,
@@ -398,56 +378,53 @@ binaries(Config) when is_list(Config) ->
test_make_sub_bin(SubBinC),
test_make_sub_bin(SubBinD),
- ?line verify_tmpmem(TmpMem),
+ verify_tmpmem(TmpMem),
ok.
test_make_sub_bin(Bin) ->
Size = byte_size(Bin),
Rest10 = Size - 10,
Rest1 = Size - 1,
- ?line Bin = make_sub_bin(Bin, 0, Size),
+ Bin = make_sub_bin(Bin, 0, Size),
<<_:10/binary,Sub0:Rest10/binary>> = Bin,
- ?line Sub0 = make_sub_bin(Bin, 10, Rest10),
+ Sub0 = make_sub_bin(Bin, 10, Rest10),
<<Sub1:10/binary,_/binary>> = Bin,
- ?line Sub1 = make_sub_bin(Bin, 0, 10),
+ Sub1 = make_sub_bin(Bin, 0, 10),
<<_:7/binary,Sub2:10/binary,_/binary>> = Bin,
- ?line Sub2 = make_sub_bin(Bin, 7, 10),
- ?line <<>> = make_sub_bin(Bin, 0, 0),
- ?line <<>> = make_sub_bin(Bin, 10, 0),
- ?line <<>> = make_sub_bin(Bin, Rest1, 0),
- ?line <<>> = make_sub_bin(Bin, Size, 0),
+ Sub2 = make_sub_bin(Bin, 7, 10),
+ <<>> = make_sub_bin(Bin, 0, 0),
+ <<>> = make_sub_bin(Bin, 10, 0),
+ <<>> = make_sub_bin(Bin, Rest1, 0),
+ <<>> = make_sub_bin(Bin, Size, 0),
ok.
-get_string(doc) -> ["Test enif_get_string"];
-get_string(suite) -> [];
+%% Test enif_get_string
get_string(Config) when is_list(Config) ->
- ?line ensure_lib_loaded(Config, 1),
- ?line {7, <<"hejsan",0,_:3/binary>>} = string_to_bin("hejsan",10),
- ?line {7, <<"hejsan",0,_>>} = string_to_bin("hejsan",8),
- ?line {7, <<"hejsan",0>>} = string_to_bin("hejsan",7),
- ?line {-6, <<"hejsa",0>>} = string_to_bin("hejsan",6),
- ?line {-5, <<"hejs",0>>} = string_to_bin("hejsan",5),
- ?line {-1, <<0>>} = string_to_bin("hejsan",1),
- ?line {0, <<>>} = string_to_bin("hejsan",0),
- ?line {1, <<0>>} = string_to_bin("",1),
- ?line {0, <<>>} = string_to_bin("",0),
+ ensure_lib_loaded(Config, 1),
+ {7, <<"hejsan",0,_:3/binary>>} = string_to_bin("hejsan",10),
+ {7, <<"hejsan",0,_>>} = string_to_bin("hejsan",8),
+ {7, <<"hejsan",0>>} = string_to_bin("hejsan",7),
+ {-6, <<"hejsa",0>>} = string_to_bin("hejsan",6),
+ {-5, <<"hejs",0>>} = string_to_bin("hejsan",5),
+ {-1, <<0>>} = string_to_bin("hejsan",1),
+ {0, <<>>} = string_to_bin("hejsan",0),
+ {1, <<0>>} = string_to_bin("",1),
+ {0, <<>>} = string_to_bin("",0),
ok.
-get_atom(doc) -> ["Test enif_get_atom"];
-get_atom(suite) -> [];
+%% Test enif_get_atom
get_atom(Config) when is_list(Config) ->
- ?line ensure_lib_loaded(Config, 1),
- ?line {7, <<"hejsan",0,_:3/binary>>} = atom_to_bin(hejsan,10),
- ?line {7, <<"hejsan",0,_>>} = atom_to_bin(hejsan,8),
- ?line {7, <<"hejsan",0>>} = atom_to_bin(hejsan,7),
- ?line {0, <<_:6/binary>>} = atom_to_bin(hejsan,6),
- ?line {0, <<>>} = atom_to_bin(hejsan,0),
- ?line {1, <<0>>} = atom_to_bin('',1),
- ?line {0, <<>>} = atom_to_bin('',0),
+ ensure_lib_loaded(Config, 1),
+ {7, <<"hejsan",0,_:3/binary>>} = atom_to_bin(hejsan,10),
+ {7, <<"hejsan",0,_>>} = atom_to_bin(hejsan,8),
+ {7, <<"hejsan",0>>} = atom_to_bin(hejsan,7),
+ {0, <<_:6/binary>>} = atom_to_bin(hejsan,6),
+ {0, <<>>} = atom_to_bin(hejsan,0),
+ {1, <<0>>} = atom_to_bin('',1),
+ {0, <<>>} = atom_to_bin('',0),
ok.
-maps(doc) -> ["Test NIF maps handling."];
-maps(suite) -> [];
+%% Test NIF maps handling.
maps(Config) when is_list(Config) ->
TmpMem = tmpmem(),
Pairs = [{adam, "bert"}] ++
@@ -494,31 +471,28 @@ maps(Config) when is_list(Config) ->
ok.
-api_macros(doc) -> ["Test macros enif_make_list<N> and enif_make_tuple<N>"];
-api_macros(suite) -> [];
+%% Test macros enif_make_list<N> and enif_make_tuple<N>
api_macros(Config) when is_list(Config) ->
- ?line ensure_lib_loaded(Config, 1),
+ ensure_lib_loaded(Config, 1),
Expected = {[lists:seq(1,N) || N <- lists:seq(1,9)],
[list_to_tuple(lists:seq(1,N)) || N <- lists:seq(1,9)]
},
- ?line Expected = macros(list_to_tuple(lists:seq(1,9))),
+ Expected = macros(list_to_tuple(lists:seq(1,9))),
ok.
-from_array(doc) -> ["enif_make_[tuple|list]_from_array"];
-from_array(suite) -> [];
+%% enif_make_[tuple|list]_from_array
from_array(Config) when is_list(Config) ->
- ?line ensure_lib_loaded(Config, 1),
+ ensure_lib_loaded(Config, 1),
lists:foreach(fun(Tpl) ->
Lst = tuple_to_list(Tpl),
- ?line {Lst,Tpl} = tuple_2_list_and_tuple(Tpl)
+ {Lst,Tpl} = tuple_2_list_and_tuple(Tpl)
end,
[{}, {1,2,3}, {[4,5],[],{},{6,7}}, {{}}, {[]}]),
ok.
-iolist_as_binary(doc) -> ["enif_inspect_iolist_as_binary"];
-iolist_as_binary(suite) -> [];
+%% enif_inspect_iolist_as_binary
iolist_as_binary(Config) when is_list(Config) ->
- ?line ensure_lib_loaded(Config, 1),
+ ensure_lib_loaded(Config, 1),
TmpMem = tmpmem(),
List = [<<"hejsan">>, <<>>, [], [17], [<<>>],
[127,128,255,0],
@@ -527,18 +501,17 @@ iolist_as_binary(Config) when is_list(Config) ->
lists:foreach(fun(IoL) ->
B1 = erlang:iolist_to_binary(IoL),
- ?line B2 = iolist_2_bin(IoL),
- ?line B1 = B2
+ B2 = iolist_2_bin(IoL),
+ B1 = B2
end,
List),
- ?line verify_tmpmem(TmpMem),
+ verify_tmpmem(TmpMem),
ok.
-resource(doc) -> ["Test memory managed objects, aka 'resources'"];
-resource(suite) -> [];
+%% Test memory managed objects, aka 'resources'
resource(Config) when is_list(Config) ->
- ?line ensure_lib_loaded(Config, 1),
- ?line Type = get_resource_type(0),
+ ensure_lib_loaded(Config, 1),
+ Type = get_resource_type(0),
resource_hugo(Type),
resource_otto(Type),
resource_new(Type),
@@ -548,75 +521,75 @@ resource(Config) when is_list(Config) ->
resource_hugo(Type) ->
DtorCall = resource_hugo_do(Type),
erlang:garbage_collect(),
- ?line DtorCall = last_resource_dtor_call(),
+ DtorCall = last_resource_dtor_call(),
ok.
resource_hugo_do(Type) ->
HugoBin = <<"Hugo Hacker">>,
- ?line HugoPtr = alloc_resource(Type, HugoBin),
- ?line Hugo = make_resource(HugoPtr),
- ?line <<>> = Hugo,
+ HugoPtr = alloc_resource(Type, HugoBin),
+ Hugo = make_resource(HugoPtr),
+ <<>> = Hugo,
release_resource(HugoPtr),
erlang:garbage_collect(),
- ?line {HugoPtr,HugoBin} = get_resource(Type,Hugo),
+ {HugoPtr,HugoBin} = get_resource(Type,Hugo),
Pid = spawn_link(fun() ->
- receive {Pid, Type, Resource, Ptr, Bin} ->
- Pid ! {self(), got_it},
- receive {Pid, check_it} ->
- ?line {Ptr,Bin} = get_resource(Type,Resource),
- Pid ! {self(), ok}
- end
- end
- end),
+ receive {Pid, Type, Resource, Ptr, Bin} ->
+ Pid ! {self(), got_it},
+ receive {Pid, check_it} ->
+ {Ptr,Bin} = get_resource(Type,Resource),
+ Pid ! {self(), ok}
+ end
+ end
+ end),
Pid ! {self(), Type, Hugo, HugoPtr, HugoBin},
- ?line {Pid, got_it} = receive_any(),
+ {Pid, got_it} = receive_any(),
erlang:garbage_collect(), % just to make our ProcBin move in memory
Pid ! {self(), check_it},
- ?line {Pid, ok} = receive_any(),
- ?line [] = last_resource_dtor_call(),
- ?line {HugoPtr,HugoBin} = get_resource(Type,Hugo),
+ {Pid, ok} = receive_any(),
+ [] = last_resource_dtor_call(),
+ {HugoPtr,HugoBin} = get_resource(Type,Hugo),
{HugoPtr, HugoBin, 1}.
resource_otto(Type) ->
{OttoPtr, OttoBin} = resource_otto_do(Type),
erlang:garbage_collect(),
- ?line [] = last_resource_dtor_call(),
+ [] = last_resource_dtor_call(),
release_resource(OttoPtr),
- ?line {OttoPtr,OttoBin,1} = last_resource_dtor_call(),
+ {OttoPtr,OttoBin,1} = last_resource_dtor_call(),
ok.
resource_otto_do(Type) ->
OttoBin = <<"Otto Ordonnans">>,
- ?line OttoPtr = alloc_resource(Type, OttoBin),
- ?line Otto = make_resource(OttoPtr),
- ?line <<>> = Otto,
+ OttoPtr = alloc_resource(Type, OttoBin),
+ Otto = make_resource(OttoPtr),
+ <<>> = Otto,
%% forget resource term but keep referenced by NIF
{OttoPtr, OttoBin}.
resource_new(Type) ->
- ?line {PtrB,BinB} = resource_new_do1(Type),
+ {PtrB,BinB} = resource_new_do1(Type),
erlang:garbage_collect(),
- ?line {PtrB,BinB,1} = last_resource_dtor_call(),
+ {PtrB,BinB,1} = last_resource_dtor_call(),
ok.
resource_new_do1(Type) ->
- ?line {{PtrA,BinA}, {ResB,PtrB,BinB}} = resource_new_do2(Type),
+ {{PtrA,BinA}, {ResB,PtrB,BinB}} = resource_new_do2(Type),
erlang:garbage_collect(),
- ?line {PtrA,BinA,1} = last_resource_dtor_call(),
- ?line {PtrB,BinB} = get_resource(Type, ResB),
+ {PtrA,BinA,1} = last_resource_dtor_call(),
+ {PtrB,BinB} = get_resource(Type, ResB),
%% forget ResB and make it garbage
{PtrB,BinB}.
resource_new_do2(Type) ->
BinA = <<"NewA">>,
BinB = <<"NewB">>,
- ?line ResA = make_new_resource(Type, BinA),
- ?line ResB = make_new_resource(Type, BinB),
- ?line <<>> = ResA,
- ?line <<>> = ResB,
- ?line {PtrA,BinA} = get_resource(Type, ResA),
- ?line {PtrB,BinB} = get_resource(Type, ResB),
- ?line true = (PtrA =/= PtrB),
+ ResA = make_new_resource(Type, BinA),
+ ResB = make_new_resource(Type, BinB),
+ <<>> = ResA,
+ <<>> = ResB,
+ {PtrA,BinA} = get_resource(Type, ResA),
+ {PtrB,BinB} = get_resource(Type, ResB),
+ true = (PtrA =/= PtrB),
%% forget ResA and make it garbage
{{PtrA,BinA}, {ResB,PtrB,BinB}}.
@@ -625,22 +598,21 @@ resource_neg(TypeA) ->
catch exit(42), % dummy exception to purge saved stacktraces from earlier exception
erlang:garbage_collect(),
- ?line {_,_,2} = last_resource_dtor_call(),
+ {_,_,2} = last_resource_dtor_call(),
ok.
resource_neg_do(TypeA) ->
TypeB = get_resource_type(1),
ResA = make_new_resource(TypeA, <<"Arnold">>),
ResB= make_new_resource(TypeB, <<"Bobo">>),
- ?line {'EXIT',{badarg,_}} = (catch get_resource(TypeA, ResB)),
- ?line {'EXIT',{badarg,_}} = (catch get_resource(TypeB, ResA)),
+ {'EXIT',{badarg,_}} = (catch get_resource(TypeA, ResB)),
+ {'EXIT',{badarg,_}} = (catch get_resource(TypeB, ResA)),
ok.
-resource_binary(doc) -> ["Test enif_make_resource_binary"];
-resource_binary(suite) -> [];
+%% Test enif_make_resource_binary
resource_binary(Config) when is_list(Config) ->
- ?line ensure_lib_loaded(Config, 1),
- ?line {Ptr,Bin} = resource_binary_do(),
+ ensure_lib_loaded(Config, 1),
+ {Ptr,Bin} = resource_binary_do(),
erlang:garbage_collect(),
Last = last_resource_dtor_call(),
?CHECK({Ptr,Bin,1}, Last),
@@ -648,58 +620,57 @@ resource_binary(Config) when is_list(Config) ->
resource_binary_do() ->
Bin = <<"Hej Hopp i lingonskogen">>,
- ?line {Ptr,ResBin1} = make_new_resource_binary(Bin),
- ?line ResBin1 = Bin,
- ?line ResInfo = {Ptr,_} = get_resource(binary_resource_type,ResBin1),
+ {Ptr,ResBin1} = make_new_resource_binary(Bin),
+ ResBin1 = Bin,
+ ResInfo = {Ptr,_} = get_resource(binary_resource_type,ResBin1),
Papa = self(),
Forwarder = spawn_link(fun() -> forwarder(Papa) end),
io:format("sending to forwarder pid=~p\n",[Forwarder]),
Forwarder ! ResBin1,
ResBin2 = receive_any(),
- ?line ResBin2 = ResBin1,
- ?line ResInfo = get_resource(binary_resource_type,ResBin2),
+ ResBin2 = ResBin1,
+ ResInfo = get_resource(binary_resource_type,ResBin2),
Forwarder ! terminate,
- ?line {Forwarder, 1} = receive_any(),
+ {Forwarder, 1} = receive_any(),
erlang:garbage_collect(),
- ?line ResInfo = get_resource(binary_resource_type,ResBin1),
- ?line ResInfo = get_resource(binary_resource_type,ResBin2),
+ ResInfo = get_resource(binary_resource_type,ResBin1),
+ ResInfo = get_resource(binary_resource_type,ResBin2),
ResInfo.
-define(RT_CREATE,1).
-define(RT_TAKEOVER,2).
-resource_takeover(doc) -> ["Test resource takeover by module reload and upgrade"];
-resource_takeover(suite) -> [];
+%% Test resource takeover by module reload and upgrade
resource_takeover(Config) when is_list(Config) ->
TmpMem = tmpmem(),
ensure_lib_loaded(Config),
- ?line Data = ?config(data_dir, Config),
- ?line File = filename:join(Data, "nif_mod"),
- ?line {ok,nif_mod,ModBin} = compile:file(File, [binary,return_errors]),
- ?line {module,nif_mod} = erlang:load_module(nif_mod,ModBin),
-
- ?line ok = nif_mod:load_nif_lib(Config, 1,
- [{resource_type, 0, ?RT_CREATE, "resource_type_A",resource_dtor_A,
- ?RT_CREATE},
- {resource_type, 1, ?RT_CREATE, "resource_type_null_A",null,
- ?RT_CREATE},
- {resource_type, 2, ?RT_CREATE bor ?RT_TAKEOVER, "resource_type_A_null",resource_dtor_A,
- ?RT_CREATE},
- {resource_type, 3, ?RT_CREATE, "resource_type_B_goneX",resource_dtor_B,
- ?RT_CREATE},
- {resource_type, 4, ?RT_CREATE, "resource_type_null_goneX",null,
- ?RT_CREATE},
- {resource_type, null, ?RT_TAKEOVER, "Pink unicorn", resource_dtor_A,
- ?RT_TAKEOVER}
- ]),
-
- ?line hold_nif_mod_priv_data(nif_mod:get_priv_data_ptr()),
- ?line [{load,1,1,101},{get_priv_data_ptr,1,2,102}] = nif_mod_call_history(),
+ Data = proplists:get_value(data_dir, Config),
+ File = filename:join(Data, "nif_mod"),
+ {ok,nif_mod,ModBin} = compile:file(File, [binary,return_errors]),
+ {module,nif_mod} = erlang:load_module(nif_mod,ModBin),
- ?line {Holder, _MRef} = spawn_opt(fun resource_holder/0, [link, monitor]),
+ ok = nif_mod:load_nif_lib(Config, 1,
+ [{resource_type, 0, ?RT_CREATE, "resource_type_A",resource_dtor_A,
+ ?RT_CREATE},
+ {resource_type, 1, ?RT_CREATE, "resource_type_null_A",null,
+ ?RT_CREATE},
+ {resource_type, 2, ?RT_CREATE bor ?RT_TAKEOVER, "resource_type_A_null",resource_dtor_A,
+ ?RT_CREATE},
+ {resource_type, 3, ?RT_CREATE, "resource_type_B_goneX",resource_dtor_B,
+ ?RT_CREATE},
+ {resource_type, 4, ?RT_CREATE, "resource_type_null_goneX",null,
+ ?RT_CREATE},
+ {resource_type, null, ?RT_TAKEOVER, "Pink unicorn", resource_dtor_A,
+ ?RT_TAKEOVER}
+ ]),
+
+ hold_nif_mod_priv_data(nif_mod:get_priv_data_ptr()),
+ [{load,1,1,101},{get_priv_data_ptr,1,2,102}] = nif_mod_call_history(),
+
+ {Holder, _MRef} = spawn_opt(fun resource_holder/0, [link, monitor]),
{A1,BinA1} = make_resource(0,Holder,"A1"),
{A2,BinA2} = make_resource(0,Holder,"A2"),
@@ -719,91 +690,91 @@ resource_takeover(Config) when is_list(Config) ->
{NGX1,_BinNGX1} = make_resource(4,Holder,"NGX1"),
{NGX2,_BinNGX2} = make_resource(4,Holder,"NGX2"),
- ?line [] = nif_mod_call_history(),
+ [] = nif_mod_call_history(),
- ?line ok = forget_resource(A1),
- ?line [{{resource_dtor_A_v1,BinA1},1,3,103}] = nif_mod_call_history(),
+ ok = forget_resource(A1),
+ [{{resource_dtor_A_v1,BinA1},1,3,103}] = nif_mod_call_history(),
- ?line ok = forget_resource(NA1),
- ?line [] = nif_mod_call_history(), % no dtor
+ ok = forget_resource(NA1),
+ [] = nif_mod_call_history(), % no dtor
- ?line ok = forget_resource(AN1),
+ ok = forget_resource(AN1),
?CHECK([{{resource_dtor_A_v1,BinAN1},1,4,104}] , nif_mod_call_history()),
- ?line ok = forget_resource(BGX1),
+ ok = forget_resource(BGX1),
?CHECK([{{resource_dtor_B_v1,BinBGX1},1,5,105}], nif_mod_call_history()),
- ?line ok = forget_resource(NGX1),
+ ok = forget_resource(NGX1),
?CHECK([], nif_mod_call_history()), % no dtor
- ?line ok = nif_mod:load_nif_lib(Config, 2,
- [{resource_type, 0, ?RT_TAKEOVER, "resource_type_A",resource_dtor_A,
- ?RT_TAKEOVER},
- {resource_type, 1, ?RT_TAKEOVER bor ?RT_CREATE, "resource_type_null_A",resource_dtor_A,
- ?RT_TAKEOVER},
- {resource_type, 2, ?RT_TAKEOVER, "resource_type_A_null",null,
- ?RT_TAKEOVER},
- {resource_type, null, ?RT_TAKEOVER, "Pink unicorn", resource_dtor_A,
- ?RT_TAKEOVER},
- {resource_type, null, ?RT_CREATE, "resource_type_B_goneX",resource_dtor_B,
- ?RT_CREATE},
- {resource_type, null, ?RT_CREATE, "resource_type_null_goneX",null,
- ?RT_CREATE},
- {resource_type, 3, ?RT_CREATE, "resource_type_B_goneY",resource_dtor_B,
- ?RT_CREATE},
- {resource_type, 4, ?RT_CREATE, "resource_type_null_goneY",null,
- ?RT_CREATE}
- ]),
+ ok = nif_mod:load_nif_lib(Config, 2,
+ [{resource_type, 0, ?RT_TAKEOVER, "resource_type_A",resource_dtor_A,
+ ?RT_TAKEOVER},
+ {resource_type, 1, ?RT_TAKEOVER bor ?RT_CREATE, "resource_type_null_A",resource_dtor_A,
+ ?RT_TAKEOVER},
+ {resource_type, 2, ?RT_TAKEOVER, "resource_type_A_null",null,
+ ?RT_TAKEOVER},
+ {resource_type, null, ?RT_TAKEOVER, "Pink unicorn", resource_dtor_A,
+ ?RT_TAKEOVER},
+ {resource_type, null, ?RT_CREATE, "resource_type_B_goneX",resource_dtor_B,
+ ?RT_CREATE},
+ {resource_type, null, ?RT_CREATE, "resource_type_null_goneX",null,
+ ?RT_CREATE},
+ {resource_type, 3, ?RT_CREATE, "resource_type_B_goneY",resource_dtor_B,
+ ?RT_CREATE},
+ {resource_type, 4, ?RT_CREATE, "resource_type_null_goneY",null,
+ ?RT_CREATE}
+ ]),
?CHECK([{reload,2,1,201}], nif_mod_call_history()),
- ?line BinA2 = read_resource(0,A2),
- ?line ok = forget_resource(A2),
+ BinA2 = read_resource(0,A2),
+ ok = forget_resource(A2),
?CHECK([{{resource_dtor_A_v2,BinA2},2,2,202}], nif_mod_call_history()),
- ?line ok = forget_resource(NA2),
+ ok = forget_resource(NA2),
?CHECK([{{resource_dtor_A_v2,BinNA2},2,3,203}], nif_mod_call_history()),
- ?line ok = forget_resource(AN2),
+ ok = forget_resource(AN2),
?CHECK([], nif_mod_call_history()), % no dtor
- ?line ok = forget_resource(BGX2), % calling dtor in orphan library v1 still loaded
+ ok = forget_resource(BGX2), % calling dtor in orphan library v1 still loaded
?CHECK([{{resource_dtor_B_v1,BinBGX2},1,6,106}], nif_mod_call_history()),
% How to test that lib v1 is closed here?
- ?line ok = forget_resource(NGX2),
+ ok = forget_resource(NGX2),
?CHECK([], nif_mod_call_history()), % no dtor
{BGY1,BinBGY1} = make_resource(3,Holder,"BGY1"),
{NGY1,_BinNGY1} = make_resource(4,Holder,"NGY1"),
%% Module upgrade with same lib-version
- ?line {module,nif_mod} = erlang:load_module(nif_mod,ModBin),
- ?line undefined = nif_mod:lib_version(),
- ?line ok = nif_mod:load_nif_lib(Config, 2,
- [{resource_type, 2, ?RT_TAKEOVER, "resource_type_A",resource_dtor_B,
- ?RT_TAKEOVER},
- {resource_type, 0, ?RT_TAKEOVER bor ?RT_CREATE, "resource_type_null_A",null,
- ?RT_TAKEOVER},
- {resource_type, 1, ?RT_TAKEOVER, "resource_type_A_null",resource_dtor_A,
- ?RT_TAKEOVER},
- {resource_type, null, ?RT_TAKEOVER, "Pink elephant", resource_dtor_A,
- ?RT_TAKEOVER},
- {resource_type, 3, ?RT_CREATE, "resource_type_B_goneZ",resource_dtor_B,
- ?RT_CREATE},
- {resource_type, 4, ?RT_CREATE, "resource_type_null_goneZ",null,
- ?RT_CREATE}
- ]),
-
- ?line 2 = nif_mod:lib_version(),
+ {module,nif_mod} = erlang:load_module(nif_mod,ModBin),
+ undefined = nif_mod:lib_version(),
+ ok = nif_mod:load_nif_lib(Config, 2,
+ [{resource_type, 2, ?RT_TAKEOVER, "resource_type_A",resource_dtor_B,
+ ?RT_TAKEOVER},
+ {resource_type, 0, ?RT_TAKEOVER bor ?RT_CREATE, "resource_type_null_A",null,
+ ?RT_TAKEOVER},
+ {resource_type, 1, ?RT_TAKEOVER, "resource_type_A_null",resource_dtor_A,
+ ?RT_TAKEOVER},
+ {resource_type, null, ?RT_TAKEOVER, "Pink elephant", resource_dtor_A,
+ ?RT_TAKEOVER},
+ {resource_type, 3, ?RT_CREATE, "resource_type_B_goneZ",resource_dtor_B,
+ ?RT_CREATE},
+ {resource_type, 4, ?RT_CREATE, "resource_type_null_goneZ",null,
+ ?RT_CREATE}
+ ]),
+
+ 2 = nif_mod:lib_version(),
?CHECK([{upgrade,2,4,204},{lib_version,2,5,205}], nif_mod_call_history()),
- ?line ok = forget_resource(A3),
+ ok = forget_resource(A3),
?CHECK([{{resource_dtor_B_v2,BinA3},2,6,206}], nif_mod_call_history()),
- ?line ok = forget_resource(NA3),
+ ok = forget_resource(NA3),
?CHECK([], nif_mod_call_history()),
- ?line ok = forget_resource(AN3),
+ ok = forget_resource(AN3),
?CHECK([{{resource_dtor_A_v2,BinAN3},2,7,207}], nif_mod_call_history()),
{A4,BinA4} = make_resource(2,Holder, "A4"),
@@ -813,19 +784,19 @@ resource_takeover(Config) when is_list(Config) ->
{BGZ1,BinBGZ1} = make_resource(3,Holder,"BGZ1"),
{NGZ1,_BinNGZ1} = make_resource(4,Holder,"NGZ1"),
- ?line false = code:purge(nif_mod),
- ?line [] = nif_mod_call_history(),
+ false = code:purge(nif_mod),
+ [] = nif_mod_call_history(),
- ?line ok = forget_resource(NGY1),
- ?line [] = nif_mod_call_history(),
+ ok = forget_resource(NGY1),
+ [] = nif_mod_call_history(),
- ?line ok = forget_resource(BGY1), % calling dtor in orphan library v2 still loaded
- ?line [{{resource_dtor_B_v2,BinBGY1},2,8,208},{unload,2,9,209}] = nif_mod_call_history(),
+ ok = forget_resource(BGY1), % calling dtor in orphan library v2 still loaded
+ [{{resource_dtor_B_v2,BinBGY1},2,8,208},{unload,2,9,209}] = nif_mod_call_history(),
%% Module upgrade with other lib-version
- ?line {module,nif_mod} = erlang:load_module(nif_mod,ModBin),
- ?line undefined = nif_mod:lib_version(),
- ?line ok = nif_mod:load_nif_lib(Config, 1,
+ {module,nif_mod} = erlang:load_module(nif_mod,ModBin),
+ undefined = nif_mod:lib_version(),
+ ok = nif_mod:load_nif_lib(Config, 1,
[{resource_type, 2, ?RT_TAKEOVER, "resource_type_A",resource_dtor_A,
?RT_TAKEOVER},
{resource_type, 0, ?RT_TAKEOVER bor ?RT_CREATE, "resource_type_null_A",resource_dtor_A,
@@ -836,28 +807,28 @@ resource_takeover(Config) when is_list(Config) ->
?RT_TAKEOVER}
]),
- ?line 1 = nif_mod:lib_version(),
- ?line [{upgrade,1,1,101},{lib_version,1,2,102}] = nif_mod_call_history(),
+ 1 = nif_mod:lib_version(),
+ [{upgrade,1,1,101},{lib_version,1,2,102}] = nif_mod_call_history(),
- %%?line false= check_process_code(Pid, nif_mod),
- ?line false = code:purge(nif_mod),
+ %%false= check_process_code(Pid, nif_mod),
+ false = code:purge(nif_mod),
%% no unload here as we still have instances with destructors
- ?line [] = nif_mod_call_history(),
+ [] = nif_mod_call_history(),
- ?line ok = forget_resource(BGZ1), % calling dtor in orphan library v2 still loaded
- ?line [{{resource_dtor_B_v2,BinBGZ1},2,10,210},{unload,2,11,211}] = nif_mod_call_history(),
+ ok = forget_resource(BGZ1), % calling dtor in orphan library v2 still loaded
+ [{{resource_dtor_B_v2,BinBGZ1},2,10,210},{unload,2,11,211}] = nif_mod_call_history(),
- ?line ok = forget_resource(NGZ1),
- ?line [] = nif_mod_call_history(),
+ ok = forget_resource(NGZ1),
+ [] = nif_mod_call_history(),
- ?line ok = forget_resource(A4),
- ?line [{{resource_dtor_A_v1,BinA4},1,3,103}] = nif_mod_call_history(),
+ ok = forget_resource(A4),
+ [{{resource_dtor_A_v1,BinA4},1,3,103}] = nif_mod_call_history(),
- ?line ok = forget_resource(NA4),
- ?line [{{resource_dtor_A_v1,BinNA4},1,4,104}] = nif_mod_call_history(),
+ ok = forget_resource(NA4),
+ [{{resource_dtor_A_v1,BinNA4},1,4,104}] = nif_mod_call_history(),
- ?line ok = forget_resource(AN4),
- ?line [] = nif_mod_call_history(),
+ ok = forget_resource(AN4),
+ [] = nif_mod_call_history(),
%%
@@ -979,8 +950,8 @@ resource_takeover(Config) when is_list(Config) ->
{return, 0} % SUCCESS
]),
- ?line hold_nif_mod_priv_data(nif_mod:get_priv_data_ptr()),
- ?line [{load,1,1,101},{get_priv_data_ptr,1,2,102}] = nif_mod_call_history(),
+ hold_nif_mod_priv_data(nif_mod:get_priv_data_ptr()),
+ [{load,1,1,101},{get_priv_data_ptr,1,2,102}] = nif_mod_call_history(),
{NA7,BinNA7} = make_resource(0, Holder, "NA7"),
{AN7,BinAN7} = make_resource(1, Holder, "AN7"),
@@ -991,15 +962,15 @@ resource_takeover(Config) when is_list(Config) ->
ok = forget_resource(AN7),
[] = nif_mod_call_history(),
- ?line true = lists:member(?MODULE, erlang:system_info(taints)),
- ?line true = lists:member(nif_mod, erlang:system_info(taints)),
- ?line verify_tmpmem(TmpMem),
+ true = lists:member(?MODULE, erlang:system_info(taints)),
+ true = lists:member(nif_mod, erlang:system_info(taints)),
+ verify_tmpmem(TmpMem),
ok.
make_resource(Type,Holder,Str) when is_list(Str) ->
Bin = list_to_binary(Str),
A1 = make_resource_do(Type,Holder,Bin),
- ?line Bin = read_resource(Type,A1),
+ Bin = read_resource(Type,A1),
{A1,Bin}.
make_resource_do(Type, Holder, Bin) ->
@@ -1026,7 +997,7 @@ resource_holder(List) ->
%%io:format("resource_holder got ~p with list = ~p\n", [Msg,List]),
case Msg of
{Pid, make, Type, Bin} ->
- ?line Resource = nif_mod:make_new_resource(Type, Bin),
+ Resource = nif_mod:make_new_resource(Type, Bin),
Id = {make_ref(),Bin},
Pid ! {self(), make_ok, Id},
resource_holder([{Id,Resource} | List]);
@@ -1048,7 +1019,7 @@ resource_holder(Pid,Reply,List) ->
resource_holder(List).
-threading(doc) -> ["Test the threading API functions (reuse tests from driver API)"];
+%% Test the threading API functions (reuse tests from driver API)
threading(Config) when is_list(Config) ->
case erlang:system_info(threads) of
true -> threading_do(Config);
@@ -1056,53 +1027,53 @@ threading(Config) when is_list(Config) ->
end.
threading_do(Config) ->
- ?line Data = ?config(data_dir, Config),
- ?line File = filename:join(Data, "tester"),
- ?line {ok,tester,ModBin} = compile:file(File, [binary,return_errors]),
- ?line {module,tester} = erlang:load_module(tester,ModBin),
+ Data = proplists:get_value(data_dir, Config),
+ File = filename:join(Data, "tester"),
+ {ok,tester,ModBin} = compile:file(File, [binary,return_errors]),
+ {module,tester} = erlang:load_module(tester,ModBin),
- ?line ok = tester:load_nif_lib(Config, "basic"),
- ?line ok = tester:run(),
+ ok = tester:load_nif_lib(Config, "basic"),
+ ok = tester:run(),
- ?line ok = tester:load_nif_lib(Config, "rwlock"),
- ?line ok = tester:run(),
+ ok = tester:load_nif_lib(Config, "rwlock"),
+ ok = tester:run(),
- ?line ok = tester:load_nif_lib(Config, "tsd"),
- ?line ok = tester:run().
+ ok = tester:load_nif_lib(Config, "tsd"),
+ ok = tester:run().
-send(doc) -> ["Test NIF message sending"];
+%% Test NIF message sending
send(Config) when is_list(Config) ->
ensure_lib_loaded(Config),
N = 1500,
List = lists:seq(1,N),
- ?line {ok,1} = send_list_seq(N, self),
- ?line {ok,1} = send_list_seq(N, self()),
- ?line List = receive_any(),
- ?line List = receive_any(),
+ {ok,1} = send_list_seq(N, self),
+ {ok,1} = send_list_seq(N, self()),
+ List = receive_any(),
+ List = receive_any(),
Papa = self(),
- spawn_link(fun() -> ?line {ok,1} = send_list_seq(N, Papa) end),
- ?line List = receive_any(),
+ spawn_link(fun() -> {ok,1} = send_list_seq(N, Papa) end),
+ List = receive_any(),
- ?line {ok, 1, BlobS} = send_new_blob(self(), other_term()),
- ?line BlobR = receive_any(),
+ {ok, 1, BlobS} = send_new_blob(self(), other_term()),
+ BlobR = receive_any(),
io:format("Sent ~p\nGot ~p\n", [BlobS, BlobR]),
- ?line BlobR = BlobS,
+ BlobR = BlobS,
%% send to dead pid
{DeadPid, DeadMon} = spawn_monitor(fun() -> void end),
- ?line {'DOWN', DeadMon, process, DeadPid, normal} = receive_any(),
+ {'DOWN', DeadMon, process, DeadPid, normal} = receive_any(),
{ok,0} = send_list_seq(7, DeadPid),
ok.
-send2(doc) -> ["More NIF message sending"];
+%% More NIF message sending
send2(Config) when is_list(Config) ->
ensure_lib_loaded(Config),
send2_do1(fun send_blob_dbg/2),
ok.
-send_threaded(doc) -> ["Send msg from user thread"];
+%% Send msg from user thread
send_threaded(Config) when is_list(Config) ->
case erlang:system_info(smp_support) of
true ->
@@ -1123,44 +1094,44 @@ send2_do1(SendBlobF) ->
io:format("sending to forwarder pid=~p\n",[Forwarder]),
send2_do2(SendBlobF, Forwarder),
Forwarder ! terminate,
- ?line {Forwarder, 4} = receive_any(),
+ {Forwarder, 4} = receive_any(),
ok.
send2_do2(SendBlobF, To) ->
MsgEnv = alloc_msgenv(),
repeat(50, fun(_) -> grow_blob(MsgEnv,other_term()) end, []),
- ?line {ok,1,Blob0} = SendBlobF(MsgEnv, To),
- ?line Blob1 = receive_any(),
- ?line Blob1 = Blob0,
+ {ok,1,Blob0} = SendBlobF(MsgEnv, To),
+ Blob1 = receive_any(),
+ Blob1 = Blob0,
clear_msgenv(MsgEnv),
repeat(50, fun(_) -> grow_blob(MsgEnv,other_term()) end, []),
- ?line {ok,1,Blob2} = SendBlobF(MsgEnv, To),
- ?line Blob3 = receive_any(),
- ?line Blob3 = Blob2,
+ {ok,1,Blob2} = SendBlobF(MsgEnv, To),
+ Blob3 = receive_any(),
+ Blob3 = Blob2,
clear_msgenv(MsgEnv),
repeat(50, fun(_) -> grow_blob(MsgEnv,other_term()) end, []),
clear_msgenv(MsgEnv),
repeat(50, fun(_) -> grow_blob(MsgEnv,other_term()) end, []),
- ?line {ok,1,Blob4} = SendBlobF(MsgEnv, To),
- ?line Blob5 = receive_any(),
- ?line Blob5 = Blob4,
+ {ok,1,Blob4} = SendBlobF(MsgEnv, To),
+ Blob5 = receive_any(),
+ Blob5 = Blob4,
clear_msgenv(MsgEnv),
clear_msgenv(MsgEnv),
repeat(50, fun(_) -> grow_blob(MsgEnv,other_term()) end, []),
- ?line {ok,1,Blob6} = SendBlobF(MsgEnv, To),
- ?line Blob7 = receive_any(),
- ?line Blob7 = Blob6,
+ {ok,1,Blob6} = SendBlobF(MsgEnv, To),
+ Blob7 = receive_any(),
+ Blob7 = Blob6,
ok.
send_blob_thread_and_join(MsgEnv, To) ->
- ?line {ok,Blob} = send_blob_thread_dbg(MsgEnv, To, no_join),
- ?line {ok,SendRes} = join_send_thread(MsgEnv),
+ {ok,Blob} = send_blob_thread_dbg(MsgEnv, To, no_join),
+ {ok,SendRes} = join_send_thread(MsgEnv),
{ok,SendRes,Blob}.
send_blob_dbg(MsgEnv, To) ->
@@ -1188,7 +1159,7 @@ forwarder(To, N) ->
other_term() ->
{fun(X,Y) -> X*Y end, make_ref()}.
-send3(doc) -> ["Message sending stress test"];
+%% Message sending stress test
send3(Config) when is_list(Config) ->
%% Let a number of processes send random message blobs between each other
%% using enif_send. Kill and spawn new ones randomly to keep a ~constant
@@ -1196,10 +1167,10 @@ send3(Config) when is_list(Config) ->
rand:seed(exsplus),
io:format("seed: ~p\n",[rand:export_seed()]),
ets:new(nif_SUITE,[named_table,public]),
- ?line true = ets:insert(nif_SUITE,{send3,0,0,0,0}),
+ true = ets:insert(nif_SUITE,{send3,0,0,0,0}),
timer:send_after(10000, timeout), % Run for 10 seconds
SpawnCnt = send3_controller(0, [], [], 20),
- ?line [{_,Rcv,SndOk,SndFail,Balance}] = ets:lookup(nif_SUITE,send3),
+ [{_,Rcv,SndOk,SndFail,Balance}] = ets:lookup(nif_SUITE,send3),
io:format("spawns=~p received=~p, sent=~p send-failure=~p balance=~p\n",
[SpawnCnt,Rcv,SndOk,SndFail,Balance]),
ets:delete(nif_SUITE).
@@ -1233,7 +1204,7 @@ send3_controller(SpawnCnt0, Mons0, Pids0, Tick) ->
true ->
{NewPid,Mon} = spawn_opt(fun send3_proc/0, [link,monitor]),
lists:foreach(fun(P) -> P ! {is_born,NewPid} end, Pids0),
- ?line Balance = ets:lookup_element(nif_SUITE,send3,5),
+ Balance = ets:lookup_element(nif_SUITE,send3,5),
Inject = (Balance =< 0),
case Inject of
true -> ok;
@@ -1259,7 +1230,7 @@ send3_proc(Pids0, Counters={Rcv,SndOk,SndFail}, State0) ->
receive
{pids, Pids1, Inject} ->
%%io:format("~p: got ~p Inject=~p\n", [self(), Pids1, Inject]),
- ?line Pids0 = [self()],
+ Pids0 = [self()],
Pids2 = [self() | Pids1],
case Inject of
true -> send3_proc_send(Pids2, Counters, State0);
@@ -1310,9 +1281,10 @@ send3_make_blob() ->
repeat(N bsr 1,
fun(_) -> grow_blob(MsgEnv,other_term(),rand:uniform(1 bsl 20))
end, void),
- case (N band 1) of
+ case (N band 3) of
0 -> {term,copy_blob(MsgEnv)};
- 1 -> {msgenv,MsgEnv}
+ 1 -> {copy,copy_blob(MsgEnv)};
+ _ -> {msgenv,MsgEnv}
end
end.
@@ -1325,6 +1297,9 @@ send3_send(Pid, Msg) ->
send3_send_nif(Pid, {term,Blob}) ->
%%io:format("~p send term nif\n",[self()]),
send_term(Pid, {blob, Blob}) =:= 1;
+send3_send_nif(Pid, {copy,Blob}) ->
+ %%io:format("~p send term nif\n",[self()]),
+ send_copy_term(Pid, {blob, Blob}) =:= 1;
send3_send_nif(Pid, {msgenv,MsgEnv}) ->
%%io:format("~p send blob nif\n",[self()]),
send3_blob(MsgEnv, Pid, blob) =:= 1.
@@ -1333,6 +1308,10 @@ send3_send_bang(Pid, {term,Blob}) ->
%%io:format("~p send term bang\n",[self()]),
Pid ! {blob, Blob},
true;
+send3_send_bang(Pid, {copy,Blob}) ->
+ %%io:format("~p send term bang\n",[self()]),
+ Pid ! {blob, Blob},
+ true;
send3_send_bang(Pid, {msgenv,MsgEnv}) ->
%%io:format("~p send blob bang\n",[self()]),
Pid ! {blob, copy_blob(MsgEnv)},
@@ -1344,98 +1323,100 @@ send3_new_state(State, Blob) ->
_ -> State % Don't store blob
end.
-neg(doc) -> ["Negative testing of load_nif"];
+%% Negative testing of load_nif
neg(Config) when is_list(Config) ->
TmpMem = tmpmem(),
- ?line {'EXIT',{badarg,_}} = (catch erlang:load_nif(badarg, 0)),
- ?line {error,{load_failed,_}} = erlang:load_nif("pink_unicorn", 0),
+ {'EXIT',{badarg,_}} = (catch erlang:load_nif(badarg, 0)),
+ {error,{load_failed,_}} = erlang:load_nif("pink_unicorn", 0),
- ?line Data = ?config(data_dir, Config),
- ?line File = filename:join(Data, "nif_mod"),
- ?line {ok,nif_mod,Bin} = compile:file(File, [binary,return_errors]),
- ?line {module,nif_mod} = erlang:load_module(nif_mod,Bin),
+ Data = proplists:get_value(data_dir, Config),
+ File = filename:join(Data, "nif_mod"),
+ {ok,nif_mod,Bin} = compile:file(File, [binary,return_errors]),
+ {module,nif_mod} = erlang:load_module(nif_mod,Bin),
- ?line {error,{bad_lib,_}} = nif_mod:load_nif_lib(Config, no_init),
- ?line verify_tmpmem(TmpMem),
- ?line ok.
+ {error,{bad_lib,_}} = nif_mod:load_nif_lib(Config, no_init),
+ verify_tmpmem(TmpMem),
+ ok.
-is_checks(doc) -> ["Test all enif_is functions"];
+%% Test all enif_is functions
is_checks(Config) when is_list(Config) ->
- ?line ensure_lib_loaded(Config, 1),
- ?line ok = check_is(hejsan, <<19,98>>, make_ref(), ok, fun() -> ok end,
+ ensure_lib_loaded(Config, 1),
+ ok = check_is(hejsan, <<19,98>>, make_ref(), ok, fun() -> ok end,
self(), hd(erlang:ports()), [], [1,9,9,8],
{hejsan, "hejsan", [$h,"ejs",<<"an">>]}, 12),
- ?line ok = check_is(hejsan, <<19,98>>, make_ref(), ok, fun() -> ok end,
+ ok = check_is(hejsan, <<19,98>>, make_ref(), ok, fun() -> ok end,
self(), hd(erlang:ports()), [], [1,9,9,8],
{hejsan, "hejsan", [$h,"ejs",<<"an">>]}, -12),
- ?line ok = check_is(hejsan, <<19,98>>, make_ref(), ok, fun() -> ok end,
+ ok = check_is(hejsan, <<19,98>>, make_ref(), ok, fun() -> ok end,
self(), hd(erlang:ports()), [], [1,9,9,8],
{hejsan, "hejsan", [$h,"ejs",<<"an">>]}, 18446744073709551617),
- ?line ok = check_is(hejsan, <<19,98>>, make_ref(), ok, fun() -> ok end,
+ ok = check_is(hejsan, <<19,98>>, make_ref(), ok, fun() -> ok end,
self(), hd(erlang:ports()), [], [1,9,9,8],
{hejsan, "hejsan", [$h,"ejs",<<"an">>]}, -18446744073709551617),
- ?line ok = check_is(hejsan, <<19,98>>, make_ref(), ok, fun() -> ok end,
+ ok = check_is(hejsan, <<19,98>>, make_ref(), ok, fun() -> ok end,
self(), hd(erlang:ports()), [], [1,9,9,8],
{hejsan, "hejsan", [$h,"ejs",<<"an">>]}, 99.146),
- ?line ok = check_is(hejsan, <<19,98>>, make_ref(), ok, fun() -> ok end,
+ ok = check_is(hejsan, <<19,98>>, make_ref(), ok, fun() -> ok end,
self(), hd(erlang:ports()), [], [1,9,9,8],
{hejsan, "hejsan", [$h,"ejs",<<"an">>]}, -99.146),
- ?line ok = check_is(hejsan, <<19,98>>, make_ref(), ok, fun() -> ok end,
+ ok = check_is(hejsan, <<19,98>>, make_ref(), ok, fun() -> ok end,
self(), hd(erlang:ports()), [], [1,9,9,8],
{hejsan, "hejsan", [$h,"ejs",<<"an">>]}, 18446744073709551616.2e2),
- ?line ok = check_is(hejsan, <<19,98>>, make_ref(), ok, fun() -> ok end,
+ ok = check_is(hejsan, <<19,98>>, make_ref(), ok, fun() -> ok end,
self(), hd(erlang:ports()), [], [1,9,9,8],
{hejsan, "hejsan", [$h,"ejs",<<"an">>]}, -18446744073709551616.2e2),
try
- ?line check_is_exception(),
- ?line throw(expected_badarg)
+ check_is_exception(),
+ throw(expected_badarg)
catch
error:badarg ->
- ?line ok
+ ok
end.
-get_length(doc) -> ["Test all enif_get_length functions"];
+%% Test all enif_get_length functions
get_length(Config) when is_list(Config) ->
- ?line ensure_lib_loaded(Config, 1),
- ?line ok = length_test(hejsan, "hejsan", [], [], not_a_list, [1,2|3]).
+ ensure_lib_loaded(Config, 1),
+ ok = length_test(hejsan, "hejsan", [], [], not_a_list, [1,2|3]).
ensure_lib_loaded(Config) ->
ensure_lib_loaded(Config, 1).
ensure_lib_loaded(Config, Ver) ->
- ?line case lib_version() of
- undefined ->
- ?line Path = ?config(data_dir, Config),
- ?line Lib = "nif_SUITE." ++ integer_to_list(Ver),
- ?line ok = erlang:load_nif(filename:join(Path,Lib), []);
- Ver when is_integer(Ver) ->
- ok
- end.
+ Path = ?config(data_dir, Config),
+ case lib_version() of
+ undefined ->
+ Lib = "nif_SUITE." ++ integer_to_list(Ver),
+ ok = erlang:load_nif(filename:join(Path,Lib), []);
+ Ver when is_integer(Ver) ->
+ ok
+ end,
+ erl_ddll:try_load(Path, echo_drv, []),
+ ok.
make_atom(Config) when is_list(Config) ->
- ?line ensure_lib_loaded(Config, 1),
+ ensure_lib_loaded(Config, 1),
An0Atom = an0atom,
An0Atom0 = 'an\000atom\000',
- ?line Atoms = make_atoms(),
- ?line 7 = size(Atoms),
- ?line Atoms = {An0Atom,An0Atom,An0Atom,An0Atom0,An0Atom,An0Atom,An0Atom0}.
+ Atoms = make_atoms(),
+ 7 = size(Atoms),
+ Atoms = {An0Atom,An0Atom,An0Atom,An0Atom0,An0Atom,An0Atom,An0Atom0}.
make_string(Config) when is_list(Config) ->
- ?line ensure_lib_loaded(Config, 1),
- ?line Strings = make_strings(),
- ?line 5 = size(Strings),
+ ensure_lib_loaded(Config, 1),
+ Strings = make_strings(),
+ 5 = size(Strings),
A0String = "a0string",
A0String0 = [$a,0,$s,$t,$r,$i,$n,$g,0],
AStringWithAccents = [$E,$r,$l,$a,$n,$g,$ ,16#e4,$r,$ ,$e,$t,$t,$ ,$g,$e,$n,$e,$r,$e,$l,$l,$t,$ ,$p,$r,$o,$g,$r,$a,$m,$s,$p,$r,16#e5,$k],
- ?line Strings = {A0String,A0String,A0String,A0String0, AStringWithAccents}.
+ Strings = {A0String,A0String,A0String,A0String0, AStringWithAccents}.
reverse_list_test(Config) ->
- ?line ensure_lib_loaded(Config, 1),
+ ensure_lib_loaded(Config, 1),
List = lists:seq(1,100),
RevList = lists:reverse(List),
- ?line RevList = reverse_list(List),
- ?line badarg = reverse_list(foo).
+ RevList = reverse_list(List),
+ badarg = reverse_list(foo).
-otp_9668(doc) -> ["Memory leak of tmp-buffer when inspecting iolist or unaligned binary in unbound environment"];
+%% Memory leak of tmp-buffer when inspecting iolist or unaligned binary in unbound environment
otp_9668(Config) ->
ensure_lib_loaded(Config, 1),
TmpMem = tmpmem(),
@@ -1445,13 +1426,12 @@ otp_9668(Config) ->
<<_:5/bitstring,UnalignedBin:10/binary,_/bitstring>> = <<"Abuse me as unaligned">>,
otp_9668_nif(UnalignedBin),
- ?line verify_tmpmem(TmpMem),
+ verify_tmpmem(TmpMem),
ok.
-otp_9828(doc) -> ["Copy of writable binary"];
+%% Copy of writable binary
otp_9828(Config) ->
ensure_lib_loaded(Config, 1),
-
otp_9828_loop(<<"I'm alive!">>, 1000).
otp_9828_loop(Bin, 0) ->
@@ -1470,68 +1450,68 @@ consume_timeslice(Config) when is_list(Config) ->
Done = make_ref(),
DummyMFA = {?MODULE,dummy_call,1},
P = spawn(fun () ->
- receive Go -> ok end,
- {reductions, R1} = process_info(self(), reductions),
- 1 = consume_timeslice_nif(100, false),
- dummy_call(111),
- 0 = consume_timeslice_nif(90, false),
- dummy_call(222),
- 1 = consume_timeslice_nif(10, false),
- dummy_call(333),
- 0 = consume_timeslice_nif(25, false),
- 0 = consume_timeslice_nif(25, false),
- 0 = consume_timeslice_nif(25, false),
- 1 = consume_timeslice_nif(25, false),
- 0 = consume_timeslice_nif(25, false),
-
- ok = case consume_timeslice_nif(1, true) of
- Cnt when Cnt > 70, Cnt < 80 -> ok;
- Other -> Other
- end,
- dummy_call(444),
-
- {reductions, R2} = process_info(self(), reductions),
- Me ! {RedDiff, R2 - R1},
- exit(Done)
- end),
+ receive Go -> ok end,
+ {reductions, R1} = process_info(self(), reductions),
+ 1 = consume_timeslice_nif(100, false),
+ dummy_call(111),
+ 0 = consume_timeslice_nif(90, false),
+ dummy_call(222),
+ 1 = consume_timeslice_nif(10, false),
+ dummy_call(333),
+ 0 = consume_timeslice_nif(25, false),
+ 0 = consume_timeslice_nif(25, false),
+ 0 = consume_timeslice_nif(25, false),
+ 1 = consume_timeslice_nif(25, false),
+ 0 = consume_timeslice_nif(25, false),
+
+ ok = case consume_timeslice_nif(1, true) of
+ Cnt when Cnt > 70, Cnt < 80 -> ok;
+ Other -> Other
+ end,
+ dummy_call(444),
+
+ {reductions, R2} = process_info(self(), reductions),
+ Me ! {RedDiff, R2 - R1},
+ exit(Done)
+ end),
erlang:yield(),
erlang:trace_pattern(DummyMFA, [], [local]),
- ?line 1 = erlang:trace(P, true, [call, running, procs, {tracer, self()}]),
+ 1 = erlang:trace(P, true, [call, running, procs, {tracer, self()}]),
P ! Go,
%% receive Go -> ok end,
- ?line {trace, P, in, _} = next_tmsg(P),
+ {trace, P, in, _} = next_tmsg(P),
%% consume_timeslice_nif(100),
%% dummy_call(111)
- ?line {trace, P, out, _} = next_tmsg(P),
- ?line {trace, P, in, _} = next_tmsg(P),
- ?line {trace, P, call, {?MODULE,dummy_call,[111]}} = next_tmsg(P),
+ {trace, P, out, _} = next_tmsg(P),
+ {trace, P, in, _} = next_tmsg(P),
+ {trace, P, call, {?MODULE,dummy_call,[111]}} = next_tmsg(P),
%% consume_timeslice_nif(90),
%% dummy_call(222)
- ?line {trace, P, call, {?MODULE,dummy_call,[222]}} = next_tmsg(P),
+ {trace, P, call, {?MODULE,dummy_call,[222]}} = next_tmsg(P),
%% consume_timeslice_nif(10),
%% dummy_call(333)
- ?line {trace, P, out, _} = next_tmsg(P),
- ?line {trace, P, in, _} = next_tmsg(P),
- ?line {trace, P, call, {?MODULE,dummy_call,[333]}} = next_tmsg(P),
+ {trace, P, out, _} = next_tmsg(P),
+ {trace, P, in, _} = next_tmsg(P),
+ {trace, P, call, {?MODULE,dummy_call,[333]}} = next_tmsg(P),
%% 25,25,25,25, 25
- ?line {trace, P, out, {?MODULE,consume_timeslice_nif,2}} = next_tmsg(P),
- ?line {trace, P, in, {?MODULE,consume_timeslice_nif,2}} = next_tmsg(P),
+ {trace, P, out, {?MODULE,consume_timeslice_nif,2}} = next_tmsg(P),
+ {trace, P, in, {?MODULE,consume_timeslice_nif,2}} = next_tmsg(P),
%% consume_timeslice(1,true)
%% dummy_call(444)
- ?line {trace, P, out, DummyMFA} = next_tmsg(P),
- ?line {trace, P, in, DummyMFA} = next_tmsg(P),
- ?line {trace, P, call, {?MODULE,dummy_call,[444]}} = next_tmsg(P),
+ {trace, P, out, DummyMFA} = next_tmsg(P),
+ {trace, P, in, DummyMFA} = next_tmsg(P),
+ {trace, P, call, {?MODULE,dummy_call,[444]}} = next_tmsg(P),
%% exit(Done)
- ?line {trace, P, exit, Done} = next_tmsg(P),
+ {trace, P, exit, Done} = next_tmsg(P),
ExpReds = (100 + 90 + 10 + 25*5 + 75) * CONTEXT_REDS div 100,
receive
@@ -1539,7 +1519,7 @@ consume_timeslice(Config) when is_list(Config) ->
io:format("Reductions = ~p~n", [Reductions]),
ok;
{RedDiff, Reductions} ->
- ?t:fail({unexpected_reduction_count, Reductions})
+ ct:fail({unexpected_reduction_count, Reductions})
end,
none = next_msg(P),
@@ -1560,76 +1540,6 @@ nif_schedule(Config) when is_list(Config) ->
end,
ok.
-dirty_nif(Config) when is_list(Config) ->
- try erlang:system_info(dirty_cpu_schedulers) of
- N when is_integer(N) ->
- ensure_lib_loaded(Config),
- Val1 = 42,
- Val2 = "Erlang",
- Val3 = list_to_binary([Val2, 0]),
- {Val1, Val2, Val3} = call_dirty_nif(Val1, Val2, Val3),
- LargeArray = lists:duplicate(1000, ok),
- LargeArray = call_dirty_nif_zero_args(),
- ok
- catch
- error:badarg ->
- {skipped,"No dirty scheduler support"}
- end.
-
-dirty_nif_send(Config) when is_list(Config) ->
- try erlang:system_info(dirty_cpu_schedulers) of
- N when is_integer(N) ->
- ensure_lib_loaded(Config),
- Parent = self(),
- Pid = spawn_link(fun() ->
- Self = self(),
- {ok, Self} = receive_any(),
- Parent ! {ok, Self}
- end),
- {ok, Pid} = send_from_dirty_nif(Pid),
- {ok, Pid} = receive_any(),
- ok
- catch
- error:badarg ->
- {skipped,"No dirty scheduler support"}
- end.
-
-dirty_nif_exception(Config) when is_list(Config) ->
- try erlang:system_info(dirty_cpu_schedulers) of
- N when is_integer(N) ->
- ensure_lib_loaded(Config),
- try
- %% this checks that the expected exception occurs when the
- %% dirty NIF returns the result of enif_make_badarg
- %% directly
- call_dirty_nif_exception(1),
- ?t:fail(expected_badarg)
- catch
- error:badarg ->
- [{?MODULE,call_dirty_nif_exception,[1],_}|_] =
- erlang:get_stacktrace(),
- ok
- end,
- try
- %% this checks that the expected exception occurs when the
- %% dirty NIF calls enif_make_badarg at some point but then
- %% returns a value that isn't an exception
- call_dirty_nif_exception(0),
- ?t:fail(expected_badarg)
- catch
- error:badarg ->
- [{?MODULE,call_dirty_nif_exception,[0],_}|_] =
- erlang:get_stacktrace(),
- ok
- end,
- %% this checks that a dirty NIF can raise various terms as
- %% exceptions
- ok = nif_raise_exceptions(call_dirty_nif_exception)
- catch
- error:badarg ->
- {skipped,"No dirty scheduler support"}
- end.
-
nif_exception(Config) when is_list(Config) ->
ensure_lib_loaded(Config),
try
@@ -1637,7 +1547,7 @@ nif_exception(Config) when is_list(Config) ->
%% calls enif_make_badarg at some point but then tries to return a
%% value that isn't an exception
call_nif_exception(0),
- ?t:fail(expected_badarg)
+ ct:fail(expected_badarg)
catch
error:badarg ->
ok
@@ -1650,21 +1560,21 @@ nif_nan_and_inf(Config) when is_list(Config) ->
ensure_lib_loaded(Config),
try
call_nif_nan_or_inf(nan),
- ?t:fail(expected_badarg)
+ ct:fail(expected_badarg)
catch
error:badarg ->
ok
end,
try
call_nif_nan_or_inf(inf),
- ?t:fail(expected_badarg)
+ ct:fail(expected_badarg)
catch
error:badarg ->
ok
end,
try
call_nif_nan_or_inf(tuple),
- ?t:fail(expected_badarg)
+ ct:fail(expected_badarg)
catch
error:badarg ->
ok
@@ -1674,14 +1584,14 @@ nif_atom_too_long(Config) when is_list(Config) ->
ensure_lib_loaded(Config),
try
call_nif_atom_too_long(all),
- ?t:fail(expected_badarg)
+ ct:fail(expected_badarg)
catch
error:badarg ->
ok
end,
try
call_nif_atom_too_long(len),
- ?t:fail(expected_badarg)
+ ct:fail(expected_badarg)
catch
error:badarg ->
ok
@@ -1689,19 +1599,19 @@ nif_atom_too_long(Config) when is_list(Config) ->
next_msg(_Pid) ->
receive
- M -> M
+ M -> M
after 100 ->
- none
+ none
end.
next_tmsg(Pid) ->
receive TMsg when is_tuple(TMsg),
- element(1, TMsg) == trace,
- element(2, TMsg) == Pid ->
- TMsg
- after 100 ->
- none
- end.
+ element(1, TMsg) == trace,
+ element(2, TMsg) == Pid ->
+ TMsg
+ after 100 ->
+ none
+ end.
dummy_call(_) ->
ok.
@@ -1711,7 +1621,9 @@ tmpmem() ->
false -> undefined;
MemInfo ->
MSBCS = lists:foldl(
- fun ({instance, _, L}, Acc) ->
+ fun ({instance, 0, _}, Acc) ->
+ Acc; % Ignore instance 0
+ ({instance, _, L}, Acc) ->
{value,{_,MBCS}} = lists:keysearch(mbcs, 1, L),
{value,{_,SBCS}} = lists:keysearch(sbcs, 1, L),
[MBCS,SBCS | Acc]
@@ -1739,9 +1651,7 @@ verify_tmpmem(MemInfo) ->
ok
end;
Other ->
- io:format("Expected: ~p", [MemInfo]),
- io:format("Actual: ~p", [Other]),
- ?t:fail()
+ ct:fail("Expected: ~p\nActual: ~p", [MemInfo, Other])
end.
call(Pid,Cmd) ->
@@ -1769,17 +1679,17 @@ check(Exp,Got,Line) ->
nif_raise_exceptions(NifFunc) ->
ExcTerms = [{error, test}, "a string", <<"a binary">>,
- 42, [1,2,3,4,5], [{p,1},{p,2},{p,3}]],
+ 42, [1,2,3,4,5], [{p,1},{p,2},{p,3}]],
lists:foldl(fun(Term, ok) ->
- try
- erlang:apply(?MODULE,NifFunc,[Term]),
- ?t:fail({expected,Term})
- catch
- error:Term ->
- [{?MODULE,NifFunc,[Term],_}|_] = erlang:get_stacktrace(),
- ok
- end
- end, ok, ExcTerms).
+ try
+ erlang:apply(?MODULE,NifFunc,[Term]),
+ ct:fail({expected,Term})
+ catch
+ error:Term ->
+ [{?MODULE,NifFunc,[Term],_}|_] = erlang:get_stacktrace(),
+ ok
+ end
+ end, ok, ExcTerms).
-define(ERL_NIF_TIME_ERROR, -9223372036854775808).
-define(TIME_UNITS, [seconds, milli_seconds, micro_seconds, nano_seconds]).
@@ -1805,7 +1715,7 @@ chk_mtime([TU|TUs]) ->
true = B =< C
catch
_ : _ ->
- ?t:fail({monotonic_time_missmatch, TU, A, B, C})
+ ct:fail({monotonic_time_missmatch, TU, A, B, C})
end,
chk_mtime(TUs).
@@ -1825,25 +1735,25 @@ chk_toffs([TU|TUs]) ->
TO = erlang:time_offset(TU),
NifTO = time_offset(TU),
case TO =:= NifTO of
- true ->
- ok;
- false ->
- case erlang:system_info(time_warp_mode) of
- no_time_warp ->
- ?t:fail({time_offset_mismatch, TU, TO, NifTO});
- _ ->
- %% Most frequent time offset change
- %% is currently only every 15:th
- %% second so this should currently
- %% work...
- NTO = erlang:time_offset(TU),
- case NifTO =:= NTO of
- true ->
- ok;
- false ->
- ?t:fail({time_offset_mismatch, TU, TO, NifTO, NTO})
- end
- end
+ true ->
+ ok;
+ false ->
+ case erlang:system_info(time_warp_mode) of
+ no_time_warp ->
+ ct:fail({time_offset_mismatch, TU, TO, NifTO});
+ _ ->
+ %% Most frequent time offset change
+ %% is currently only every 15:th
+ %% second so this should currently
+ %% work...
+ NTO = erlang:time_offset(TU),
+ case NifTO =:= NTO of
+ true ->
+ ok;
+ false ->
+ ct:fail({time_offset_mismatch, TU, TO, NifTO, NTO})
+ end
+ end
end,
chk_toffs(TUs).
@@ -1852,47 +1762,47 @@ nif_convert_time_unit(Config) ->
?ERL_NIF_TIME_ERROR = convert_time_unit(0, invalid_time_unit, seconds),
?ERL_NIF_TIME_ERROR = convert_time_unit(0, invalid_time_unit, invalid_time_unit),
lists:foreach(fun (Offset) ->
- lists:foreach(fun (Diff) ->
- chk_ctu(Diff+(Offset*1000*1000*1000))
- end,
- [999999999999,
- 99999999999,
- 9999999999,
- 999999999,
- 99999999,
- 9999999,
- 999999,
- 99999,
- 999,
- 99,
- 9,
- 1,
- 11,
- 101,
- 1001,
- 10001,
- 100001,
- 1000001,
- 10000001,
- 100000001,
- 1000000001,
- 100000000001,
- 1000000000001,
- 5,
- 50,
- 500,
- 5000,
- 50000,
- 500000,
- 5000000,
- 50000000,
- 500000000,
- 5000000000,
- 50000000000,
- 500000000000])
- end,
- [-4711, -1000, -475, -5, -4, -3, -2, -1, 0,
- 1, 2, 3, 4, 5, 475, 1000, 4711]),
+ lists:foreach(fun (Diff) ->
+ chk_ctu(Diff+(Offset*1000*1000*1000))
+ end,
+ [999999999999,
+ 99999999999,
+ 9999999999,
+ 999999999,
+ 99999999,
+ 9999999,
+ 999999,
+ 99999,
+ 999,
+ 99,
+ 9,
+ 1,
+ 11,
+ 101,
+ 1001,
+ 10001,
+ 100001,
+ 1000001,
+ 10000001,
+ 100000001,
+ 1000000001,
+ 100000000001,
+ 1000000000001,
+ 5,
+ 50,
+ 500,
+ 5000,
+ 50000,
+ 500000,
+ 5000000,
+ 50000000,
+ 500000000,
+ 5000000000,
+ 50000000000,
+ 500000000000])
+ end,
+ [-4711, -1000, -475, -5, -4, -3, -2, -1, 0,
+ 1, 2, 3, 4, 5, 475, 1000, 4711]),
ctu_loop(1000000).
ctu_loop(0) ->
@@ -1918,11 +1828,143 @@ chk_ctu(Time, FromTU, [ToTU|ToTUs]) ->
TN = convert_time_unit(T, FromTU, ToTU),
case TE =:= TN of
false ->
- ?t:fail({conversion_mismatch, FromTU, T, ToTU, TE, TN});
+ ct:fail({conversion_mismatch, FromTU, T, ToTU, TE, TN});
true ->
chk_ctu(Time, FromTU, ToTUs)
end.
+nif_now_time(Config) ->
+ ensure_lib_loaded(Config),
+
+ N1 = now(),
+ NifN1 = now_time(),
+ NifN2 = now_time(),
+ N2 = now(),
+ true = N1 < NifN1,
+ true = NifN1 < NifN2,
+ true = NifN2 < N2.
+
+nif_cpu_time(Config) ->
+ ensure_lib_loaded(Config),
+
+ try cpu_time() of
+ {_, _, _} ->
+ ok
+ catch error:badarg ->
+ {comment, "cpu_time not supported"}
+ end.
+
+nif_unique_integer(Config) ->
+ ensure_lib_loaded(Config),
+
+ UM1 = erlang:unique_integer([monotonic]),
+ UM2 = unique_integer_nif([monotonic]),
+ UM3 = erlang:unique_integer([monotonic]),
+
+ true = UM1 < UM2,
+ true = UM2 < UM3,
+
+ UMP1 = erlang:unique_integer([monotonic, positive]),
+ UMP2 = unique_integer_nif([monotonic, positive]),
+ UMP3 = erlang:unique_integer([monotonic, positive]),
+
+ true = 0 =< UMP1,
+ true = UMP1 < UMP2,
+ true = UMP2 < UMP3,
+
+ UP1 = erlang:unique_integer([positive]),
+ UP2 = unique_integer_nif([positive]),
+ UP3 = erlang:unique_integer([positive]),
+
+ true = 0 =< UP1,
+ true = 0 =< UP2,
+ true = 0 =< UP3,
+
+ true = is_integer(unique_integer_nif([])),
+ true = is_integer(unique_integer_nif([])),
+ true = is_integer(unique_integer_nif([])).
+
+nif_is_process_alive(Config) ->
+ ensure_lib_loaded(Config),
+
+ {Pid,_} = spawn_monitor(fun() -> receive ok -> nok end end),
+ true = is_process_alive_nif(Pid),
+ exit(Pid, die),
+ receive _ -> ok end, %% Clear monitor
+ false = is_process_alive_nif(Pid).
+
+nif_is_port_alive(Config) ->
+ ensure_lib_loaded(Config),
+
+ Port = open_port({spawn,echo_drv},[eof]),
+ true = is_port_alive_nif(Port),
+ port_close(Port),
+ false = is_port_alive_nif(Port).
+
+nif_term_to_binary(Config) ->
+ ensure_lib_loaded(Config),
+ T = {#{ok => nok}, <<0:8096>>, lists:seq(1,100)},
+ Bin = term_to_binary(T),
+ ct:log("~p",[Bin]),
+ Bin = term_to_binary_nif(T, undefined),
+ true = term_to_binary_nif(T, self()),
+ receive Bin -> ok end.
+
+-define(ERL_NIF_BIN2TERM_SAFE, 16#20000000).
+
+nif_binary_to_term(Config) ->
+ ensure_lib_loaded(Config),
+ T = {#{ok => nok}, <<0:8096>>, lists:seq(1,100)},
+ Bin = term_to_binary(T),
+ Len = byte_size(Bin),
+ {Len,T} = binary_to_term_nif(Bin, undefined, 0),
+ Len = binary_to_term_nif(Bin, self(), 0),
+ T = receive M -> M after 1000 -> timeout end,
+
+ {Len, T} = binary_to_term_nif(Bin, undefined, ?ERL_NIF_BIN2TERM_SAFE),
+ false = binary_to_term_nif(<<131,100,0,14,"undefined_atom">>,
+ undefined, ?ERL_NIF_BIN2TERM_SAFE),
+ false = binary_to_term_nif(Bin, undefined, 1),
+ ok.
+
+nif_port_command(Config) ->
+ ensure_lib_loaded(Config),
+
+ Port = open_port({spawn,echo_drv},[eof]),
+ true = port_command_nif(Port, "hello\n"),
+ receive {Port,{data,"hello\n"}} -> ok
+ after 1000 -> ct:fail(timeout) end,
+
+ RefcBin = lists:flatten([lists:duplicate(100, "hello"),"\n"]),
+ true = port_command_nif(Port, iolist_to_binary(RefcBin)),
+ receive {Port,{data,RefcBin}} -> ok
+ after 1000 -> ct:fail(timeout) end,
+
+ %% Test that invalid arguments correctly returns
+ %% badarg and that the port survives.
+ {'EXIT', {badarg, _}} = (catch port_command_nif(Port, [ok])),
+
+ IoList = [lists:duplicate(100,<<"hello">>),"\n"],
+ true = port_command_nif(Port, [IoList]),
+ FlatIoList = binary_to_list(iolist_to_binary(IoList)),
+ receive {Port,{data,FlatIoList}} -> ok
+ after 1000 -> ct:fail(timeout) end,
+
+ port_close(Port),
+
+ {'EXIT', {badarg, _}} = (catch port_command_nif(Port, "hello\n")),
+ ok.
+
+nif_snprintf(Config) ->
+ ensure_lib_loaded(Config),
+ <<"ok",0>> = format_term_nif(3,ok),
+ <<"o",0>> = format_term_nif(2,ok),
+ <<"\"hello world\"",0>> = format_term_nif(14,"hello world"),
+ <<"{{hello,world,-33},3.14",_/binary>> = format_term_nif(50,{{hello,world, -33}, 3.14, self()}),
+ <<"{{hello,world,-33},",0>> = format_term_nif(20,{{hello,world, -33}, 3.14, self()}),
+ ok.
+
+
%% The NIFs:
lib_version() -> undefined.
call_history() -> ?nif_stub.
@@ -1966,6 +2008,7 @@ send_blob_thread(_,_,_) -> ?nif_stub.
join_send_thread(_) -> ?nif_stub.
copy_blob(_) -> ?nif_stub.
send_term(_,_) -> ?nif_stub.
+send_copy_term(_,_) -> ?nif_stub.
reverse_list(_) -> ?nif_stub.
echo_int(_) -> ?nif_stub.
type_sizes() -> ?nif_stub.
@@ -1973,13 +2016,16 @@ otp_9668_nif(_) -> ?nif_stub.
otp_9828_nif(_) -> ?nif_stub.
consume_timeslice_nif(_,_) -> ?nif_stub.
call_nif_schedule(_,_) -> ?nif_stub.
-call_dirty_nif(_,_,_) -> ?nif_stub.
-send_from_dirty_nif(_) -> ?nif_stub.
-call_dirty_nif_exception(_) -> ?nif_stub.
-call_dirty_nif_zero_args() -> ?nif_stub.
call_nif_exception(_) -> ?nif_stub.
call_nif_nan_or_inf(_) -> ?nif_stub.
call_nif_atom_too_long(_) -> ?nif_stub.
+unique_integer_nif(_) -> ?nif_stub.
+is_process_alive_nif(_) -> ?nif_stub.
+is_port_alive_nif(_) -> ?nif_stub.
+term_to_binary_nif(_, _) -> ?nif_stub.
+binary_to_term_nif(_, _, _) -> ?nif_stub.
+port_command_nif(_, _) -> ?nif_stub.
+format_term_nif(_,_) -> ?nif_stub.
%% maps
is_map_nif(_) -> ?nif_stub.
@@ -1996,7 +2042,8 @@ sorted_list_from_maps_nif(_) -> ?nif_stub.
monotonic_time(_) -> ?nif_stub.
time_offset(_) -> ?nif_stub.
convert_time_unit(_,_,_) -> ?nif_stub.
-
+now_time() -> ?nif_stub.
+cpu_time() -> ?nif_stub.
nif_stub_error(Line) ->
exit({nif_not_loaded,module,?MODULE,line,Line}).
diff --git a/erts/emulator/test/nif_SUITE_data/Makefile.src b/erts/emulator/test/nif_SUITE_data/Makefile.src
index ab4ff77add..fbb8978771 100644
--- a/erts/emulator/test/nif_SUITE_data/Makefile.src
+++ b/erts/emulator/test/nif_SUITE_data/Makefile.src
@@ -4,8 +4,7 @@ NIF_LIBS = nif_SUITE.1@dll@ \
nif_mod.2@dll@ \
nif_mod.3@dll@
-all: $(NIF_LIBS) basic@dll@ rwlock@dll@ tsd@dll@
-
+all: $(NIF_LIBS) basic@dll@ rwlock@dll@ tsd@dll@ echo_drv@dll@
@SHLIB_RULES@
diff --git a/erts/emulator/test/nif_SUITE_data/echo_drv.c b/erts/emulator/test/nif_SUITE_data/echo_drv.c
new file mode 100644
index 0000000000..2b3510c641
--- /dev/null
+++ b/erts/emulator/test/nif_SUITE_data/echo_drv.c
@@ -0,0 +1,62 @@
+#include <stdio.h>
+#include "erl_driver.h"
+
+static ErlDrvPort erlang_port;
+static ErlDrvData echo_start(ErlDrvPort, char *);
+static void from_erlang(ErlDrvData, char*, ErlDrvSizeT);
+static ErlDrvSSizeT echo_call(ErlDrvData drv_data, unsigned int command,
+ char *buf, ErlDrvSizeT len,
+ char **rbuf, ErlDrvSizeT rlen, unsigned *ret_flags);
+static ErlDrvEntry echo_driver_entry = {
+ NULL, /* Init */
+ echo_start,
+ NULL, /* Stop */
+ from_erlang,
+ NULL, /* Ready input */
+ NULL, /* Ready output */
+ "echo_drv",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ echo_call,
+ NULL,
+ ERL_DRV_EXTENDED_MARKER,
+ ERL_DRV_EXTENDED_MAJOR_VERSION,
+ ERL_DRV_EXTENDED_MINOR_VERSION,
+ 0,
+ NULL,
+ NULL,
+ NULL
+};
+
+DRIVER_INIT(echo_drv)
+{
+ return &echo_driver_entry;
+}
+
+static ErlDrvData
+echo_start(ErlDrvPort port, char *buf)
+{
+ return (ErlDrvData) port;
+}
+
+static void
+from_erlang(ErlDrvData data, char *buf, ErlDrvSizeT count)
+{
+ driver_output((ErlDrvPort) data, buf, count);
+}
+
+static ErlDrvSSizeT
+echo_call(ErlDrvData drv_data, unsigned int command,
+ char *buf, ErlDrvSizeT len, char **rbuf, ErlDrvSizeT rlen,
+ unsigned *ret_flags)
+{
+ *rbuf = buf;
+ *ret_flags |= DRIVER_CALL_KEEP_BUFFER;
+ return len;
+}
+
diff --git a/erts/emulator/test/nif_SUITE_data/nif_SUITE.c b/erts/emulator/test/nif_SUITE_data/nif_SUITE.c
index 1acb270d1f..13846244d4 100644
--- a/erts/emulator/test/nif_SUITE_data/nif_SUITE.c
+++ b/erts/emulator/test/nif_SUITE_data/nif_SUITE.c
@@ -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.
@@ -23,6 +23,9 @@
#include <string.h>
#include <assert.h>
#include <limits.h>
+#ifndef __WIN32__
+#include <unistd.h>
+#endif
#include "nif_mod.h"
@@ -30,6 +33,7 @@ static int static_cntA; /* zero by default */
static int static_cntB = NIF_SUITE_LIB_VER * 100;
static ERL_NIF_TERM atom_false;
+static ERL_NIF_TERM atom_true;
static ERL_NIF_TERM atom_self;
static ERL_NIF_TERM atom_ok;
static ERL_NIF_TERM atom_join;
@@ -138,6 +142,7 @@ static int load(ErlNifEnv* env, void** priv_data, ERL_NIF_TERM load_info)
msgenv_dtor,
ERL_NIF_RT_CREATE, NULL);
atom_false = enif_make_atom(env,"false");
+ atom_true = enif_make_atom(env,"true");
atom_self = enif_make_atom(env,"self");
atom_ok = enif_make_atom(env,"ok");
atom_join = enif_make_atom(env,"join");
@@ -1464,6 +1469,18 @@ static ERL_NIF_TERM send_term(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[
return enif_make_int(env, ret);
}
+static ERL_NIF_TERM send_copy_term(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+{
+ ErlNifEnv* menv;
+ ErlNifPid pid;
+ int ret;
+ if (!enif_get_local_pid(env, argv[0], &pid)) {
+ return enif_make_badarg(env);
+ }
+ ret = enif_send(env, &pid, NULL, argv[1]);
+ return enif_make_int(env, ret);
+}
+
static ERL_NIF_TERM reverse_list(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]) {
ERL_NIF_TERM rev_list;
@@ -1560,120 +1577,6 @@ static ERL_NIF_TERM call_nif_schedule(ErlNifEnv* env, int argc, const ERL_NIF_TE
return result;
}
-#ifdef ERL_NIF_DIRTY_SCHEDULER_SUPPORT
-
-static int have_dirty_schedulers(void)
-{
- ErlNifSysInfo si;
- enif_system_info(&si, sizeof(si));
- return si.dirty_scheduler_support;
-}
-
-static ERL_NIF_TERM dirty_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
-{
- int n;
- char s[10];
- ErlNifBinary b;
- ERL_NIF_TERM result;
- if (have_dirty_schedulers()) {
- assert(enif_is_on_dirty_scheduler(env));
- }
- assert(argc == 3);
- enif_get_int(env, argv[0], &n);
- enif_get_string(env, argv[1], s, sizeof s, ERL_NIF_LATIN1);
- enif_inspect_binary(env, argv[2], &b);
- return enif_make_tuple3(env,
- enif_make_int(env, n),
- enif_make_string(env, s, ERL_NIF_LATIN1),
- enif_make_binary(env, &b));
-}
-
-static ERL_NIF_TERM call_dirty_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
-{
- int n;
- char s[10];
- ErlNifBinary b;
- assert(!enif_is_on_dirty_scheduler(env));
- if (argc != 3)
- return enif_make_badarg(env);
- if (have_dirty_schedulers()) {
- if (enif_get_int(env, argv[0], &n) &&
- enif_get_string(env, argv[1], s, sizeof s, ERL_NIF_LATIN1) &&
- enif_inspect_binary(env, argv[2], &b))
- return enif_schedule_nif(env, "call_dirty_nif", ERL_NIF_DIRTY_JOB_CPU_BOUND, dirty_nif, argc, argv);
- else
- return enif_make_badarg(env);
- } else {
- return dirty_nif(env, argc, argv);
- }
-}
-
-static ERL_NIF_TERM send_from_dirty_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
-{
- ERL_NIF_TERM result;
- ErlNifPid pid;
- ErlNifEnv* menv;
- int res;
-
- if (!enif_get_local_pid(env, argv[0], &pid))
- return enif_make_badarg(env);
- result = enif_make_tuple2(env, enif_make_atom(env, "ok"), enif_make_pid(env, &pid));
- menv = enif_alloc_env();
- res = enif_send(env, &pid, menv, result);
- enif_free_env(menv);
- if (!res)
- return enif_make_badarg(env);
- else
- return result;
-}
-
-static ERL_NIF_TERM call_dirty_nif_exception(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
-{
- switch (argc) {
- case 1: {
- int arg;
- if (enif_get_int(env, argv[0], &arg) && arg < 2) {
- ERL_NIF_TERM args[255];
- int i;
- args[0] = argv[0];
- for (i = 1; i < 255; i++)
- args[i] = enif_make_int(env, i);
- return enif_schedule_nif(env, "call_dirty_nif_exception", ERL_NIF_DIRTY_JOB_CPU_BOUND,
- call_dirty_nif_exception, 255, args);
- } else {
- return enif_raise_exception(env, argv[0]);
- }
- }
- case 2: {
- int return_badarg_directly;
- enif_get_int(env, argv[0], &return_badarg_directly);
- assert(return_badarg_directly == 1 || return_badarg_directly == 0);
- if (return_badarg_directly)
- return enif_make_badarg(env);
- else {
- /* ignore return value */ enif_make_badarg(env);
- return enif_make_atom(env, "ok");
- }
- }
- default:
- return enif_schedule_nif(env, "call_dirty_nif_exception", ERL_NIF_DIRTY_JOB_CPU_BOUND,
- call_dirty_nif_exception, argc-1, argv);
- }
-}
-
-static ERL_NIF_TERM call_dirty_nif_zero_args(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
-{
- int i;
- ERL_NIF_TERM result[1000];
- ERL_NIF_TERM ok = enif_make_atom(env, "ok");
- assert(argc == 0);
- for (i = 0; i < sizeof(result)/sizeof(*result); i++) {
- result[i] = ok;
- }
- return enif_make_list_from_array(env, result, i);
-}
-#endif
-
/*
* If argv[0] is the integer 0, call enif_make_badarg, but don't return its
* return value. Instead, return ok. Result should still be a badarg
@@ -1978,6 +1881,140 @@ static ERL_NIF_TERM convert_time_unit(ErlNifEnv* env, int argc, const ERL_NIF_TE
return enif_make_int64(env, enif_convert_time_unit(val, from, to));
}
+static ERL_NIF_TERM now_time(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+{
+ return enif_now_time(env);
+}
+
+static ERL_NIF_TERM cpu_time(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+{
+ return enif_cpu_time(env);
+}
+
+static ERL_NIF_TERM unique_integer(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+{
+ ERL_NIF_TERM atom_pos = enif_make_atom(env,"positive"),
+ atom_mon = enif_make_atom(env,"monotonic");
+ ERL_NIF_TERM opts = argv[0], opt;
+ ErlNifUniqueInteger properties = 0;
+
+ while (!enif_is_empty_list(env, opts)) {
+ if (!enif_get_list_cell(env, opts, &opt, &opts))
+ return enif_make_badarg(env);
+
+ if (enif_compare(opt, atom_pos) == 0)
+ properties |= ERL_NIF_UNIQUE_POSITIVE;
+ if (enif_compare(opt, atom_mon) == 0)
+ properties |= ERL_NIF_UNIQUE_MONOTONIC;
+ }
+
+ return enif_make_unique_integer(env, properties);
+}
+
+static ERL_NIF_TERM is_process_alive(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+{
+ ErlNifPid pid;
+ if (!enif_get_local_pid(env, argv[0], &pid))
+ return enif_make_badarg(env);
+ if (enif_is_process_alive(env, &pid))
+ return atom_true;
+ return atom_false;
+}
+
+static ERL_NIF_TERM is_port_alive(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+{
+ ErlNifPort port;
+ if (!enif_get_local_port(env, argv[0], &port))
+ return enif_make_badarg(env);
+ if (enif_is_port_alive(env, &port))
+ return atom_true;
+ return atom_false;
+}
+
+static ERL_NIF_TERM term_to_binary(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+{
+ ErlNifBinary bin;
+ ErlNifPid pid;
+ ErlNifEnv *msg_env = env;
+ ERL_NIF_TERM term;
+
+ if (enif_get_local_pid(env, argv[1], &pid))
+ msg_env = enif_alloc_env();
+
+ if (!enif_term_to_binary(msg_env, argv[0], &bin))
+ return enif_make_badarg(env);
+
+ term = enif_make_binary(msg_env, &bin);
+
+ if (msg_env != env) {
+ enif_send(env, &pid, msg_env, term);
+ enif_free_env(msg_env);
+ return atom_true;
+ } else {
+ return term;
+ }
+}
+
+static ERL_NIF_TERM binary_to_term(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+{
+ ErlNifBinary bin;
+ ERL_NIF_TERM term, ret_term;
+ ErlNifPid pid;
+ ErlNifEnv *msg_env = env;
+ unsigned int opts;
+ ErlNifUInt64 ret;
+
+ if (enif_get_local_pid(env, argv[1], &pid))
+ msg_env = enif_alloc_env();
+
+ if (!enif_inspect_binary(env, argv[0], &bin)
+ || !enif_get_uint(env, argv[2], &opts))
+ return enif_make_badarg(env);
+
+ ret = enif_binary_to_term(msg_env, bin.data, bin.size, &term,
+ (ErlNifBinaryToTerm)opts);
+ if (!ret)
+ return atom_false;
+
+ ret_term = enif_make_uint64(env, ret);
+ if (msg_env != env) {
+ enif_send(env, &pid, msg_env, term);
+ enif_free_env(msg_env);
+ return ret_term;
+ } else {
+ return enif_make_tuple2(env, ret_term, term);
+ }
+}
+
+static ERL_NIF_TERM port_command(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+{
+ ErlNifPort port;
+
+ if (!enif_get_local_port(env, argv[0], &port))
+ return enif_make_badarg(env);
+
+ if (!enif_port_command(env, &port, NULL, argv[1]))
+ return enif_make_badarg(env);
+ return atom_true;
+}
+
+static ERL_NIF_TERM format_term(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+{
+ ErlNifBinary obin;
+ unsigned int size;
+
+ if (!enif_get_uint(env, argv[0], &size))
+ return enif_make_badarg(env);
+ if (!enif_alloc_binary(size,&obin))
+ return enif_make_badarg(env);
+
+ if (enif_snprintf((char*)obin.data, (size_t)size, "%T", argv[1]) < 0)
+ return atom_false;
+
+ return enif_make_binary(env,&obin);
+}
+
+
static ErlNifFunc nif_funcs[] =
{
{"lib_version", 0, lib_version},
@@ -2023,6 +2060,7 @@ static ErlNifFunc nif_funcs[] =
{"join_send_thread", 1, join_send_thread},
{"copy_blob", 1, copy_blob},
{"send_term", 2, send_term},
+ {"send_copy_term", 2, send_copy_term},
{"reverse_list",1, reverse_list},
{"echo_int", 1, echo_int},
{"type_sizes", 0, type_sizes},
@@ -2030,12 +2068,6 @@ static ErlNifFunc nif_funcs[] =
{"otp_9828_nif", 1, otp_9828_nif},
{"consume_timeslice_nif", 2, consume_timeslice_nif},
{"call_nif_schedule", 2, call_nif_schedule},
-#ifdef ERL_NIF_DIRTY_SCHEDULER_SUPPORT
- {"call_dirty_nif", 3, call_dirty_nif},
- {"send_from_dirty_nif", 1, send_from_dirty_nif, ERL_NIF_DIRTY_JOB_CPU_BOUND},
- {"call_dirty_nif_exception", 1, call_dirty_nif_exception, ERL_NIF_DIRTY_JOB_IO_BOUND},
- {"call_dirty_nif_zero_args", 0, call_dirty_nif_zero_args, ERL_NIF_DIRTY_JOB_CPU_BOUND},
-#endif
{"call_nif_exception", 1, call_nif_exception},
{"call_nif_nan_or_inf", 1, call_nif_nan_or_inf},
{"call_nif_atom_too_long", 1, call_nif_atom_too_long},
@@ -2050,8 +2082,16 @@ static ErlNifFunc nif_funcs[] =
{"sorted_list_from_maps_nif", 1, sorted_list_from_maps_nif},
{"monotonic_time", 1, monotonic_time},
{"time_offset", 1, time_offset},
- {"convert_time_unit", 3, convert_time_unit}
+ {"convert_time_unit", 3, convert_time_unit},
+ {"now_time", 0, now_time},
+ {"cpu_time", 0, cpu_time},
+ {"unique_integer_nif", 1, unique_integer},
+ {"is_process_alive_nif", 1, is_process_alive},
+ {"is_port_alive_nif", 1, is_port_alive},
+ {"term_to_binary_nif", 2, term_to_binary},
+ {"binary_to_term_nif", 3, binary_to_term},
+ {"port_command_nif", 2, port_command},
+ {"format_term_nif", 2, format_term}
};
ERL_NIF_INIT(nif_SUITE,nif_funcs,load,reload,upgrade,unload)
-
diff --git a/erts/emulator/test/nif_SUITE_data/nif_mod.c b/erts/emulator/test/nif_SUITE_data/nif_mod.c
index f7e729e2b6..fd8a0d0595 100644
--- a/erts/emulator/test/nif_SUITE_data/nif_mod.c
+++ b/erts/emulator/test/nif_SUITE_data/nif_mod.c
@@ -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/erts/emulator/test/nif_SUITE_data/nif_mod.erl b/erts/emulator/test/nif_SUITE_data/nif_mod.erl
index aa3c90fe9d..eec1bb8858 100644
--- a/erts/emulator/test/nif_SUITE_data/nif_mod.erl
+++ b/erts/emulator/test/nif_SUITE_data/nif_mod.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.
@@ -33,7 +33,7 @@ load_nif_lib(Config, Ver) ->
load_nif_lib(Config, Ver, []).
load_nif_lib(Config, Ver, LoadInfo) ->
- ?line Path = ?config(data_dir, Config),
+ Path = proplists:get_value(data_dir, Config),
erlang:load_nif(filename:join(Path,libname(Ver)), LoadInfo).
libname(no_init) -> libname(3);
diff --git a/erts/emulator/test/nif_SUITE_data/tester.erl b/erts/emulator/test/nif_SUITE_data/tester.erl
index 32b9ef1826..f955f99c9a 100644
--- a/erts/emulator/test/nif_SUITE_data/tester.erl
+++ b/erts/emulator/test/nif_SUITE_data/tester.erl
@@ -4,9 +4,8 @@
-export([load_nif_lib/2, run/0]).
-
load_nif_lib(Config, LibName) ->
- ?line Path = ?config(data_dir, Config),
+ Path = proplists:get_value(data_dir, Config),
erlang:load_nif(filename:join(Path,LibName), []).
run() ->
diff --git a/erts/emulator/test/node_container_SUITE.erl b/erts/emulator/test/node_container_SUITE.erl
index dcd0428e65..536c91d4ae 100644
--- a/erts/emulator/test/node_container_SUITE.erl
+++ b/erts/emulator/test/node_container_SUITE.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.
@@ -28,37 +28,34 @@
-module(node_container_SUITE).
-author('[email protected]').
-%-define(line_trace, 1).
-
-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,
- node_container_refc_check/1]).
+-export([all/0, suite/0, init_per_suite/1, end_per_suite/1,
+ init_per_testcase/2, end_per_testcase/2,
+ node_container_refc_check/1]).
-export([term_to_binary_to_term_eq/1,
- round_trip_eq/1,
- cmp/1,
- ref_eq/1,
- node_table_gc/1,
- dist_link_refc/1,
- dist_monitor_refc/1,
- node_controller_refc/1,
- ets_refc/1,
- match_spec_refc/1,
- timer_refc/1,
- otp_4715/1,
- pid_wrap/1,
- port_wrap/1,
- bad_nc/1,
- unique_pid/1,
- iter_max_procs/1]).
-
--define(DEFAULT_TIMEOUT, ?t:minutes(10)).
-
-suite() -> [{ct_hooks,[ts_install_cth]}].
+ round_trip_eq/1,
+ cmp/1,
+ ref_eq/1,
+ node_table_gc/1,
+ dist_link_refc/1,
+ dist_monitor_refc/1,
+ node_controller_refc/1,
+ ets_refc/1,
+ match_spec_refc/1,
+ timer_refc/1,
+ otp_4715/1,
+ pid_wrap/1,
+ port_wrap/1,
+ bad_nc/1,
+ unique_pid/1,
+ iter_max_procs/1]).
+
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap, {minutes, 12}}].
+
all() ->
[term_to_binary_to_term_eq, round_trip_eq, cmp, ref_eq,
@@ -67,9 +64,6 @@ all() ->
timer_refc, otp_4715, pid_wrap, port_wrap, bad_nc,
unique_pid, iter_max_procs].
-groups() ->
- [].
-
init_per_suite(Config) ->
Config.
@@ -78,36 +72,26 @@ end_per_suite(_Config) ->
erts_debug:set_internal_state(node_tab_delayed_delete, -1), %% restore original value
available_internal_state(false).
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
-
-
available_internal_state(Bool) when Bool == true; Bool == false ->
case {Bool,
- (catch erts_debug:get_internal_state(available_internal_state))} of
- {true, true} ->
- true;
- {false, true} ->
- erts_debug:set_internal_state(available_internal_state, false),
- true;
- {true, _} ->
- erts_debug:set_internal_state(available_internal_state, true),
- false;
- {false, _} ->
- false
+ (catch erts_debug:get_internal_state(available_internal_state))} of
+ {true, true} ->
+ true;
+ {false, true} ->
+ erts_debug:set_internal_state(available_internal_state, false),
+ true;
+ {true, _} ->
+ erts_debug:set_internal_state(available_internal_state, true),
+ false;
+ {false, _} ->
+ false
end.
init_per_testcase(_Case, Config) when is_list(Config) ->
- Dog = ?t:timetrap(?DEFAULT_TIMEOUT),
available_internal_state(true),
- [{watchdog, Dog}|Config].
+ Config.
end_per_testcase(_Case, Config) when is_list(Config) ->
- Dog = ?config(watchdog, Config),
- ?t:timetrap_cancel(Dog),
ok.
%%%
@@ -119,111 +103,108 @@ end_per_testcase(_Case, Config) when is_list(Config) ->
%%
%% Test case: term_to_binary_to_term_eq
%%
-term_to_binary_to_term_eq(doc) ->
- ["Tests that node container terms that are converted to external format "
- "and back stay equal to themselves."];
-term_to_binary_to_term_eq(suite) -> [];
+%% Tests that node container terms that are converted to external format
+%% and back stay equal to themselves.
term_to_binary_to_term_eq(Config) when is_list(Config) ->
- ?line ThisNode = {node(), erlang:system_info(creation)},
+ ThisNode = {node(), erlang:system_info(creation)},
% Get local node containers
- ?line LPid = self(),
- ?line LXPid = mk_pid(ThisNode, 32767, 8191),
- ?line LPort = hd(erlang:ports()),
- ?line LXPort = mk_port(ThisNode, 268435455),
- ?line LLRef = make_ref(),
- ?line LHLRef = mk_ref(ThisNode, [47, 11]),
- ?line LSRef = mk_ref(ThisNode, [4711]),
+ LPid = self(),
+ LXPid = mk_pid(ThisNode, 32767, 8191),
+ LPort = hd(erlang:ports()),
+ LXPort = mk_port(ThisNode, 268435455),
+ LLRef = make_ref(),
+ LHLRef = mk_ref(ThisNode, [47, 11]),
+ LSRef = mk_ref(ThisNode, [4711]),
% Test local nc:s
- ?line LPid = binary_to_term(term_to_binary(LPid)),
- ?line LXPid = binary_to_term(term_to_binary(LXPid)),
- ?line LPort = binary_to_term(term_to_binary(LPort)),
- ?line LXPort = binary_to_term(term_to_binary(LXPort)),
- ?line LLRef = binary_to_term(term_to_binary(LLRef)),
- ?line LHLRef = binary_to_term(term_to_binary(LHLRef)),
- ?line LSRef = binary_to_term(term_to_binary(LSRef)),
+ LPid = binary_to_term(term_to_binary(LPid)),
+ LXPid = binary_to_term(term_to_binary(LXPid)),
+ LPort = binary_to_term(term_to_binary(LPort)),
+ LXPort = binary_to_term(term_to_binary(LXPort)),
+ LLRef = binary_to_term(term_to_binary(LLRef)),
+ LHLRef = binary_to_term(term_to_binary(LHLRef)),
+ LSRef = binary_to_term(term_to_binary(LSRef)),
% Get remote node containers
- ?line RNode = {get_nodename(), 3},
- ?line RPid = mk_pid(RNode, 4711, 1),
- ?line RXPid = mk_pid(RNode, 32767, 8191),
- ?line RPort = mk_port(RNode, 4711),
- ?line RXPort = mk_port(RNode, 268435455),
- ?line RLRef = mk_ref(RNode, [4711, 4711, 4711]),
- ?line RHLRef = mk_ref(RNode, [4711, 4711]),
- ?line RSRef = mk_ref(RNode, [4711]),
+ ttbtteq_do_remote({get_nodename(), 3}),
+ ttbtteq_do_remote({get_nodename(), 4}),
+ ttbtteq_do_remote({get_nodename(), 16#adec0ded}),
+ nc_refc_check(node()),
+ ok.
+
+ttbtteq_do_remote(RNode) ->
+ RPid = mk_pid(RNode, 4711, 1),
+ RXPid = mk_pid(RNode, 32767, 8191),
+ RPort = mk_port(RNode, 4711),
+ RXPort = mk_port(RNode, 268435455),
+ RLRef = mk_ref(RNode, [4711, 4711, 4711]),
+ RHLRef = mk_ref(RNode, [4711, 4711]),
+ RSRef = mk_ref(RNode, [4711]),
% Test remote nc:s
- ?line RPid = binary_to_term(term_to_binary(RPid)),
- ?line RXPid = binary_to_term(term_to_binary(RXPid)),
- ?line RPort = binary_to_term(term_to_binary(RPort)),
- ?line RXPort = binary_to_term(term_to_binary(RXPort)),
- ?line RLRef = binary_to_term(term_to_binary(RLRef)),
- ?line RHLRef = binary_to_term(term_to_binary(RHLRef)),
- ?line RSRef = binary_to_term(term_to_binary(RSRef)),
- ?line nc_refc_check(node()),
- ?line ok.
+ RPid = binary_to_term(term_to_binary(RPid)),
+ RXPid = binary_to_term(term_to_binary(RXPid)),
+ RPort = binary_to_term(term_to_binary(RPort)),
+ RXPort = binary_to_term(term_to_binary(RXPort)),
+ RLRef = binary_to_term(term_to_binary(RLRef)),
+ RHLRef = binary_to_term(term_to_binary(RHLRef)),
+ RSRef = binary_to_term(term_to_binary(RSRef)),
+ ok.
%%
%% Test case: round_trip_eq
%%
-round_trip_eq(doc) ->
- ["Tests that node containers that are sent beteen nodes stay equal to "
- "themselves."];
-round_trip_eq(suite) -> [];
+%% Tests that node containers that are sent beteen nodes stay equal to themselves.
round_trip_eq(Config) when is_list(Config) ->
- ?line ThisNode = {node(), erlang:system_info(creation)},
- ?line NodeFirstName = get_nodefirstname(),
- ?line ?line {ok, Node} = start_node(NodeFirstName),
- ?line Self = self(),
- ?line RPid = spawn_link(Node,
- fun () ->
- receive
- {Self, Data} ->
- Self ! {self(), Data}
- end
- end),
- ?line SentPid = self(),
- ?line SentXPid = mk_pid(ThisNode, 17471, 8190),
- ?line SentPort = hd(erlang:ports()),
- ?line SentXPort = mk_port(ThisNode, 268435451),
- ?line SentLRef = make_ref(),
- ?line SentHLRef = mk_ref(ThisNode, [4711, 17]),
- ?line SentSRef = mk_ref(ThisNode, [4711]),
- ?line RPid ! {Self, {SentPid,
- SentXPid,
- SentPort,
- SentXPort,
- SentLRef,
- SentHLRef,
- SentSRef}},
+ ThisNode = {node(), erlang:system_info(creation)},
+ NodeFirstName = get_nodefirstname(),
+ {ok, Node} = start_node(NodeFirstName),
+ Self = self(),
+ RPid = spawn_link(Node,
+ fun () ->
+ receive
+ {Self, Data} ->
+ Self ! {self(), Data}
+ end
+ end),
+ SentPid = self(),
+ SentXPid = mk_pid(ThisNode, 17471, 8190),
+ SentPort = hd(erlang:ports()),
+ SentXPort = mk_port(ThisNode, 268435451),
+ SentLRef = make_ref(),
+ SentHLRef = mk_ref(ThisNode, [4711, 17]),
+ SentSRef = mk_ref(ThisNode, [4711]),
+ RPid ! {Self, {SentPid,
+ SentXPid,
+ SentPort,
+ SentXPort,
+ SentLRef,
+ SentHLRef,
+ SentSRef}},
receive
- {RPid, {RecPid,
- RecXPid,
- RecPort,
- RecXPort,
- RecLRef,
- RecHLRef,
- RecSRef}} ->
- ?line stop_node(Node),
- ?line SentPid = RecPid,
- ?line SentXPid = RecXPid,
- ?line SentPort = RecPort,
- ?line SentXPort = RecXPort,
- ?line SentLRef = RecLRef,
- ?line SentHLRef = RecHLRef,
- ?line SentSRef = RecSRef,
- ?line nc_refc_check(node()),
- ?line ok
+ {RPid, {RecPid,
+ RecXPid,
+ RecPort,
+ RecXPort,
+ RecLRef,
+ RecHLRef,
+ RecSRef}} ->
+ stop_node(Node),
+ SentPid = RecPid,
+ SentXPid = RecXPid,
+ SentPort = RecPort,
+ SentXPort = RecXPort,
+ SentLRef = RecLRef,
+ SentHLRef = RecHLRef,
+ SentSRef = RecSRef,
+ nc_refc_check(node()),
+ ok
end.
-
+
%%
%% Test case: cmp
%%
-cmp(doc) ->
- ["Tests that Erlang term comparison works as it should on node "
- "containers."];
-cmp(suite) -> [];
+%% Tests that Erlang term comparison works as it should on node containers.
cmp(Config) when is_list(Config) ->
%% Inter type comparison ---------------------------------------------------
@@ -234,103 +215,103 @@ cmp(Config) when is_list(Config) ->
IRef = make_ref(),
ERef = mk_ref({get_nodename(), 2}, [1,2,3]),
-
+
IPid = self(),
EPid = mk_pid(RNode, 1, 2),
IPort = hd(erlang:ports()),
EPort = mk_port(RNode, 1),
-
+
%% Test pids ----------------------------------------------------
- ?line true = 1 < IPid,
- ?line true = 1.3 < IPid,
- ?line true = (1 bsl 64) < IPid,
- ?line true = an_atom < IPid,
- ?line true = IRef < IPid,
- ?line true = ERef < IPid,
- ?line true = fun () -> a_fun end < IPid,
- ?line true = IPort < IPid,
- ?line true = EPort < IPid,
- ?line true = IPid < {a, tuple},
- ?line true = IPid < [],
- ?line true = IPid < [a|cons],
- ?line true = IPid < <<"a binary">>,
-
- ?line true = 1 < EPid,
- ?line true = 1.3 < EPid,
- ?line true = (1 bsl 64) < EPid,
- ?line true = an_atom < EPid,
- ?line true = IRef < EPid,
- ?line true = ERef < EPid,
- ?line true = fun () -> a_fun end < EPid,
- ?line true = IPort < EPid,
- ?line true = EPort < EPid,
- ?line true = EPid < {a, tuple},
- ?line true = EPid < [],
- ?line true = EPid < [a|cons],
- ?line true = EPid < <<"a binary">>,
+ true = 1 < IPid,
+ true = 1.3 < IPid,
+ true = (1 bsl 64) < IPid,
+ true = an_atom < IPid,
+ true = IRef < IPid,
+ true = ERef < IPid,
+ true = fun () -> a_fun end < IPid,
+ true = IPort < IPid,
+ true = EPort < IPid,
+ true = IPid < {a, tuple},
+ true = IPid < [],
+ true = IPid < [a|cons],
+ true = IPid < <<"a binary">>,
+
+ true = 1 < EPid,
+ true = 1.3 < EPid,
+ true = (1 bsl 64) < EPid,
+ true = an_atom < EPid,
+ true = IRef < EPid,
+ true = ERef < EPid,
+ true = fun () -> a_fun end < EPid,
+ true = IPort < EPid,
+ true = EPort < EPid,
+ true = EPid < {a, tuple},
+ true = EPid < [],
+ true = EPid < [a|cons],
+ true = EPid < <<"a binary">>,
%% Test ports --------------------------------------------------
- ?line true = 1 < IPort,
- ?line true = 1.3 < IPort,
- ?line true = (1 bsl 64) < IPort,
- ?line true = an_atom < IPort,
- ?line true = IRef < IPort,
- ?line true = ERef < IPort,
- ?line true = fun () -> a_fun end < IPort,
- ?line true = IPort < IPid,
- ?line true = IPort < EPid,
- ?line true = IPort < {a, tuple},
- ?line true = IPort < [],
- ?line true = IPort < [a|cons],
- ?line true = IPort < <<"a binary">>,
-
- ?line true = 1 < EPort,
- ?line true = 1.3 < EPort,
- ?line true = (1 bsl 64) < EPort,
- ?line true = an_atom < EPort,
- ?line true = IRef < EPort,
- ?line true = ERef < EPort,
- ?line true = fun () -> a_fun end < EPort,
- ?line true = EPort < IPid,
- ?line true = EPort < EPid,
- ?line true = EPort < {a, tuple},
- ?line true = EPort < [],
- ?line true = EPort < [a|cons],
- ?line true = EPort < <<"a binary">>,
+ true = 1 < IPort,
+ true = 1.3 < IPort,
+ true = (1 bsl 64) < IPort,
+ true = an_atom < IPort,
+ true = IRef < IPort,
+ true = ERef < IPort,
+ true = fun () -> a_fun end < IPort,
+ true = IPort < IPid,
+ true = IPort < EPid,
+ true = IPort < {a, tuple},
+ true = IPort < [],
+ true = IPort < [a|cons],
+ true = IPort < <<"a binary">>,
+
+ true = 1 < EPort,
+ true = 1.3 < EPort,
+ true = (1 bsl 64) < EPort,
+ true = an_atom < EPort,
+ true = IRef < EPort,
+ true = ERef < EPort,
+ true = fun () -> a_fun end < EPort,
+ true = EPort < IPid,
+ true = EPort < EPid,
+ true = EPort < {a, tuple},
+ true = EPort < [],
+ true = EPort < [a|cons],
+ true = EPort < <<"a binary">>,
%% Test refs ----------------------------------------------------
- ?line true = 1 < IRef,
- ?line true = 1.3 < IRef,
- ?line true = (1 bsl 64) < IRef,
- ?line true = an_atom < IRef,
- ?line true = IRef < fun () -> a_fun end,
- ?line true = IRef < IPort,
- ?line true = IRef < EPort,
- ?line true = IRef < IPid,
- ?line true = IRef < EPid,
- ?line true = IRef < {a, tuple},
- ?line true = IRef < [],
- ?line true = IRef < [a|cons],
- ?line true = IRef < <<"a binary">>,
-
- ?line true = 1 < ERef,
- ?line true = 1.3 < ERef,
- ?line true = (1 bsl 64) < ERef,
- ?line true = an_atom < ERef,
- ?line true = ERef < fun () -> a_fun end,
- ?line true = ERef < IPort,
- ?line true = ERef < EPort,
- ?line true = ERef < IPid,
- ?line true = ERef < EPid,
- ?line true = ERef < {a, tuple},
- ?line true = ERef < [],
- ?line true = ERef < [a|cons],
- ?line true = ERef < <<"a binary">>,
+ true = 1 < IRef,
+ true = 1.3 < IRef,
+ true = (1 bsl 64) < IRef,
+ true = an_atom < IRef,
+ true = IRef < fun () -> a_fun end,
+ true = IRef < IPort,
+ true = IRef < EPort,
+ true = IRef < IPid,
+ true = IRef < EPid,
+ true = IRef < {a, tuple},
+ true = IRef < [],
+ true = IRef < [a|cons],
+ true = IRef < <<"a binary">>,
+
+ true = 1 < ERef,
+ true = 1.3 < ERef,
+ true = (1 bsl 64) < ERef,
+ true = an_atom < ERef,
+ true = ERef < fun () -> a_fun end,
+ true = ERef < IPort,
+ true = ERef < EPort,
+ true = ERef < IPid,
+ true = ERef < EPid,
+ true = ERef < {a, tuple},
+ true = ERef < [],
+ true = ERef < [a|cons],
+ true = ERef < <<"a binary">>,
%% Intra type comparison ---------------------------------------------------
-
+
%% Test pids ----------------------------------------------------
%%
@@ -338,13 +319,13 @@ cmp(Config) when is_list(Config) ->
%% serial, number, nodename, creation
%%
- ?line Pid = mk_pid({b@b, 2}, 4711, 1),
+ Pid = mk_pid({b@b, 2}, 4711, 1),
- ?line true = mk_pid({a@b, 1}, 4710, 2) > Pid,
- ?line true = mk_pid({a@b, 1}, 4712, 1) > Pid,
- ?line true = mk_pid({c@b, 1}, 4711, 1) > Pid,
- ?line true = mk_pid({b@b, 3}, 4711, 1) > Pid,
- ?line true = mk_pid({b@b, 2}, 4711, 1) =:= Pid,
+ true = mk_pid({a@b, 1}, 4710, 2) > Pid,
+ true = mk_pid({a@b, 1}, 4712, 1) > Pid,
+ true = mk_pid({c@b, 1}, 4711, 1) > Pid,
+ true = mk_pid({b@b, 3}, 4711, 1) > Pid,
+ true = mk_pid({b@b, 2}, 4711, 1) =:= Pid,
%% Test ports ---------------------------------------------------
%%
@@ -356,12 +337,12 @@ cmp(Config) when is_list(Config) ->
%% Significance used to be: dist_slot, number,
%% creation.
- ?line Port = mk_port({b@b, 2}, 4711),
+ Port = mk_port({b@b, 2}, 4711),
- ?line true = mk_port({c@b, 1}, 4710) > Port,
- ?line true = mk_port({b@b, 3}, 4710) > Port,
- ?line true = mk_port({b@b, 2}, 4712) > Port,
- ?line true = mk_port({b@b, 2}, 4711) =:= Port,
+ true = mk_port({c@b, 1}, 4710) > Port,
+ true = mk_port({b@b, 3}, 4710) > Port,
+ true = mk_port({b@b, 2}, 4712) > Port,
+ true = mk_port({b@b, 2}, 4711) =:= Port,
%% Test refs ----------------------------------------------------
%% Significance (most -> least):
@@ -373,99 +354,96 @@ cmp(Config) when is_list(Config) ->
%% creation.
%%
- ?line Ref = mk_ref({b@b, 2}, [4711, 4711, 4711]),
+ Ref = mk_ref({b@b, 2}, [4711, 4711, 4711]),
- ?line true = mk_ref({c@b, 1}, [4710, 4710, 4710]) > Ref,
- ?line true = mk_ref({b@b, 3}, [4710, 4710, 4710]) > Ref,
- ?line true = mk_ref({b@b, 2}, [4710, 4710, 4712]) > Ref,
- ?line true = mk_ref({b@b, 2}, [4710, 4712, 4711]) > Ref,
- ?line true = mk_ref({b@b, 2}, [4712, 4711, 4711]) > Ref,
- ?line true = mk_ref({b@b, 2}, [4711, 4711, 4711]) =:= Ref,
+ true = mk_ref({c@b, 1}, [4710, 4710, 4710]) > Ref,
+ true = mk_ref({b@b, 3}, [4710, 4710, 4710]) > Ref,
+ true = mk_ref({b@b, 2}, [4710, 4710, 4712]) > Ref,
+ true = mk_ref({b@b, 2}, [4710, 4712, 4711]) > Ref,
+ true = mk_ref({b@b, 2}, [4712, 4711, 4711]) > Ref,
+ true = mk_ref({b@b, 2}, [4711, 4711, 4711]) =:= Ref,
ok.
%%
%% Test case: ref_eq
%%
-ref_eq(doc) -> ["Test that one word refs \"works\"."];
-ref_eq(suite) -> [];
+%% Test that one word refs works
ref_eq(Config) when is_list(Config) ->
- ?line ThisNode = {node(), erlang:system_info(creation)},
- ?line AnotherNode = {get_nodename(),2},
- ?line LLongRef = mk_ref(ThisNode, [4711, 0, 0]),
- ?line LHalfLongRef = mk_ref(ThisNode, [4711, 0]),
- ?line LShortRef = mk_ref(ThisNode, [4711]),
- ?line true = LLongRef =:= LShortRef,
- ?line true = LLongRef =:= LHalfLongRef,
- ?line true = LLongRef =:= LLongRef,
- ?line true = LHalfLongRef =:= LShortRef,
- ?line true = LHalfLongRef =:= LHalfLongRef,
- ?line true = LShortRef =:= LShortRef,
- ?line false = LShortRef == mk_ref(ThisNode, [4711, 0, 1]), % Not any more
- ?line RLongRef = mk_ref(AnotherNode, [4711, 0, 0]),
- ?line RHalfLongRef = mk_ref(AnotherNode, [4711, 0]),
- ?line RShortRef = mk_ref(AnotherNode, [4711]),
- ?line true = RLongRef =:= RShortRef,
- ?line true = RLongRef =:= RHalfLongRef,
- ?line true = RLongRef =:= RLongRef,
- ?line true = RHalfLongRef =:= RShortRef,
- ?line true = RHalfLongRef =:= RHalfLongRef,
- ?line true = RShortRef =:= RShortRef,
- ?line false = RShortRef == mk_ref(AnotherNode, [4711, 0, 1]), % Not any more
- ?line nc_refc_check(node()),
- ?line ok.
-
+ ThisNode = {node(), erlang:system_info(creation)},
+ AnotherNode = {get_nodename(),2},
+ LLongRef = mk_ref(ThisNode, [4711, 0, 0]),
+ LHalfLongRef = mk_ref(ThisNode, [4711, 0]),
+ LShortRef = mk_ref(ThisNode, [4711]),
+ true = LLongRef =:= LShortRef,
+ true = LLongRef =:= LHalfLongRef,
+ true = LLongRef =:= LLongRef,
+ true = LHalfLongRef =:= LShortRef,
+ true = LHalfLongRef =:= LHalfLongRef,
+ true = LShortRef =:= LShortRef,
+ false = LShortRef == mk_ref(ThisNode, [4711, 0, 1]), % Not any more
+ RLongRef = mk_ref(AnotherNode, [4711, 0, 0]),
+ RHalfLongRef = mk_ref(AnotherNode, [4711, 0]),
+ RShortRef = mk_ref(AnotherNode, [4711]),
+ true = RLongRef =:= RShortRef,
+ true = RLongRef =:= RHalfLongRef,
+ true = RLongRef =:= RLongRef,
+ true = RHalfLongRef =:= RShortRef,
+ true = RHalfLongRef =:= RHalfLongRef,
+ true = RShortRef =:= RShortRef,
+ false = RShortRef == mk_ref(AnotherNode, [4711, 0, 1]), % Not any more
+ nc_refc_check(node()),
+ ok.
+
%%
%% Test case: node_table_gc
%%
-node_table_gc(doc) ->
- ["Tests that node tables are garbage collected."];
-node_table_gc(suite) -> [];
+%% Tests that node tables are garbage collected.
node_table_gc(Config) when is_list(Config) ->
erts_debug:set_internal_state(available_internal_state, true),
erts_debug:set_internal_state(node_tab_delayed_delete, 0),
- ?line PreKnown = nodes(known),
- ?line ?t:format("PreKnown = ~p~n", [PreKnown]),
- ?line make_node_garbage(0, 200000, 1000, []),
- ?line PostKnown = nodes(known),
- ?line PostAreas = erlang:system_info(allocated_areas),
- ?line ?t:format("PostKnown = ~p~n", [PostKnown]),
- ?line ?t:format("PostAreas = ~p~n", [PostAreas]),
- ?line true = length(PostKnown) =< length(PreKnown),
- ?line nc_refc_check(node()),
+ PreKnown = nodes(known),
+ io:format("PreKnown = ~p~n", [PreKnown]),
+ make_node_garbage(0, 200000, 1000, []),
+ PostKnown = nodes(known),
+ PostAreas = erlang:system_info(allocated_areas),
+ io:format("PostKnown = ~p~n", [PostKnown]),
+ io:format("PostAreas = ~p~n", [PostAreas]),
+ true = length(PostKnown) =< length(PreKnown),
+ nc_refc_check(node()),
erts_debug:set_internal_state(node_tab_delayed_delete, -1), %% restore original value
- ?line ok.
+ ok.
make_node_garbage(N, L, I, Ps) when N < L ->
- ?line Self = self(),
- ?line P = spawn_link(fun () ->
- % Generate two node entries and one dist
- % entry per node name
- ?line PL1 = make_faked_pid_list(N,
- I div 2,
- 1),
- ?line put(a, PL1),
- ?line PL2 = make_faked_pid_list(N,
- I div 2,
- 2),
- ?line put(b, PL2),
- ?line Self ! {self(), length(nodes(known))}
- end),
- ?line receive
- {P, KnownLength} ->
- ?line true = KnownLength >= I div 2
- end,
- ?line make_node_garbage(N+(I div 2)*2, L, I, [P|Ps]);
+ Self = self(),
+ P = spawn_link(fun () ->
+ % Generate two node entries and one dist
+ % entry per node name
+ PL1 = make_faked_pid_list(N,
+ I div 2,
+ 1),
+ put(a, PL1),
+ PL2 = make_faked_pid_list(N,
+ I div 2,
+ 2),
+ put(b, PL2),
+ Self ! {self(), length(nodes(known))}
+ end),
+ receive
+ {P, KnownLength} ->
+ true = KnownLength >= I div 2
+ end,
+ make_node_garbage(N+(I div 2)*2, L, I, [P|Ps]);
make_node_garbage(_, _, _, Ps) ->
%% Cleanup garbage...
ProcIsCleanedUp
- = fun (Proc) ->
- undefined == erts_debug:get_internal_state({process_status,
- Proc})
- end,
+ = fun (Proc) ->
+ undefined == erts_debug:get_internal_state({process_status,
+ Proc})
+ end,
lists:foreach(fun (P) -> wait_until(fun () -> ProcIsCleanedUp(P) end) end,
- Ps),
- ?line ok.
+ Ps),
+ ok.
make_faked_pid_list(Start, No, Creation) ->
@@ -475,292 +453,274 @@ make_faked_pid_list(_Start, 0, _Creation, Acc) ->
Acc;
make_faked_pid_list(Start, No, Creation, Acc) ->
make_faked_pid_list(Start+1,
- No-1,
- Creation,
- [mk_pid({"faked_node-"
- ++ integer_to_list(Start rem 50000)
- ++ "@"
- ++ atom_to_list(?MODULE),
- Creation},
- 4711,
- 3) | Acc]).
+ No-1,
+ Creation,
+ [mk_pid({"faked_node-"
+ ++ integer_to_list(Start rem 50000)
+ ++ "@"
+ ++ atom_to_list(?MODULE),
+ Creation},
+ 4711,
+ 3) | Acc]).
%%
%% Test case: dist_link_refc
%%
-dist_link_refc(doc) ->
- ["Tests that external reference counts are incremented and decremented "
- "as they should for distributed links"];
-dist_link_refc(suite) -> [];
+%% Tests that external reference counts are incremented and decremented
+%% as they should for distributed links
dist_link_refc(Config) when is_list(Config) ->
- ?line NodeFirstName = get_nodefirstname(),
- ?line ?line {ok, Node} = start_node(NodeFirstName),
- ?line RP = spawn_execer(Node),
- ?line LP = spawn_link_execer(node()),
- ?line true = sync_exec(RP, fun () -> link(LP) end),
- ?line wait_until(fun () ->
- ?line {links, Links} = process_info(LP, links),
- ?line lists:member(RP, Links)
- end),
- ?line NodeCre = sync_exec(RP, fun() -> erlang:system_info(creation) end),
- ?line 1 = reference_type_count(
- link,
- refering_entity_id({process, LP},
- get_node_references({Node, NodeCre}))),
- ?line exec(RP, fun() -> exit(normal) end),
- ?line wait_until(fun () ->
- ?line {links, Links} = process_info(LP, links),
- ?line not lists:member(RP, Links)
- end),
- ?line 0 = reference_type_count(
- link,
- refering_entity_id({process, LP},
- get_node_references({Node, NodeCre}))),
- ?line exit(LP, normal),
- ?line stop_node(Node),
- ?line nc_refc_check(node()),
- ?line ok.
+ NodeFirstName = get_nodefirstname(),
+ {ok, Node} = start_node(NodeFirstName),
+ RP = spawn_execer(Node),
+ LP = spawn_link_execer(node()),
+ true = sync_exec(RP, fun () -> link(LP) end),
+ wait_until(fun () ->
+ {links, Links} = process_info(LP, links),
+ lists:member(RP, Links)
+ end),
+ NodeCre = sync_exec(RP, fun() -> erlang:system_info(creation) end),
+ 1 = reference_type_count(
+ link,
+ refering_entity_id({process, LP},
+ get_node_references({Node, NodeCre}))),
+ exec(RP, fun() -> exit(normal) end),
+ wait_until(fun () ->
+ {links, Links} = process_info(LP, links),
+ not lists:member(RP, Links)
+ end),
+ 0 = reference_type_count(
+ link,
+ refering_entity_id({process, LP},
+ get_node_references({Node, NodeCre}))),
+ exit(LP, normal),
+ stop_node(Node),
+ nc_refc_check(node()),
+ ok.
%%
%% Test case: dist_monitor_refc
%%
-dist_monitor_refc(doc) ->
- ["Tests that external reference counts are incremented and decremented "
- "as they should for distributed monitors"];
-dist_monitor_refc(suite) -> [];
+%% Tests that external reference counts are incremented and decremented
+%% as they should for distributed monitors
dist_monitor_refc(Config) when is_list(Config) ->
- ?line NodeFirstName = get_nodefirstname(),
- ?line {ok, Node} = start_node(NodeFirstName),
- ?line RP = spawn_execer(Node),
- ?line LP = spawn_link_execer(node()),
- ?line RMon = sync_exec(RP, fun () -> erlang:monitor(process, LP) end),
- ?line true = is_reference(RMon),
- ?line LMon = sync_exec(LP, fun () -> erlang:monitor(process, RP) end),
- ?line true = is_reference(LMon),
- ?line NodeCre = sync_exec(RP, fun() -> erlang:system_info(creation) end),
- ?line wait_until(fun () ->
- ?line {monitored_by, MonBy}
- = process_info(LP, monitored_by),
- ?line {monitors, Mon}
- = process_info(LP, monitors),
- ?line (lists:member(RP, MonBy)
- and lists:member({process,RP}, Mon))
- end),
- ?line 3 = reference_type_count(
- monitor,
- refering_entity_id({process, LP},
- get_node_references({Node, NodeCre}))),
- ?line exec(RP, fun () -> exit(normal) end),
- ?line wait_until(fun () ->
- ?line {monitored_by, MonBy}
- = process_info(LP, monitored_by),
- ?line {monitors, Mon}
- = process_info(LP, monitors),
- ?line ((not lists:member(RP, MonBy))
- and (not lists:member({process,RP}, Mon)))
- end),
- ?line ok = sync_exec(LP,
- fun () ->
- receive
- {'DOWN', LMon, process, _, _} ->
- ok
- end
- end),
- ?line 0 = reference_type_count(
- link,
- refering_entity_id({process, LP},
- get_node_references({Node, NodeCre}))),
- ?line exit(LP, normal),
- ?line stop_node(Node),
- ?line nc_refc_check(node()),
- ?line ok.
+ NodeFirstName = get_nodefirstname(),
+ {ok, Node} = start_node(NodeFirstName),
+ RP = spawn_execer(Node),
+ LP = spawn_link_execer(node()),
+ RMon = sync_exec(RP, fun () -> erlang:monitor(process, LP) end),
+ true = is_reference(RMon),
+ LMon = sync_exec(LP, fun () -> erlang:monitor(process, RP) end),
+ true = is_reference(LMon),
+ NodeCre = sync_exec(RP, fun() -> erlang:system_info(creation) end),
+ wait_until(fun () ->
+ {monitored_by, MonBy}
+ = process_info(LP, monitored_by),
+ {monitors, Mon}
+ = process_info(LP, monitors),
+ (lists:member(RP, MonBy)
+ and lists:member({process,RP}, Mon))
+ end),
+ 3 = reference_type_count(
+ monitor,
+ refering_entity_id({process, LP},
+ get_node_references({Node, NodeCre}))),
+ exec(RP, fun () -> exit(normal) end),
+ wait_until(fun () ->
+ {monitored_by, MonBy}
+ = process_info(LP, monitored_by),
+ {monitors, Mon}
+ = process_info(LP, monitors),
+ ((not lists:member(RP, MonBy))
+ and (not lists:member({process,RP}, Mon)))
+ end),
+ ok = sync_exec(LP,
+ fun () ->
+ receive
+ {'DOWN', LMon, process, _, _} ->
+ ok
+ end
+ end),
+ 0 = reference_type_count(
+ link,
+ refering_entity_id({process, LP},
+ get_node_references({Node, NodeCre}))),
+ exit(LP, normal),
+ stop_node(Node),
+ nc_refc_check(node()),
+ ok.
%%
%% Test case: node_controller_refc
%%
-node_controller_refc(doc) ->
- ["Tests that external reference counts are incremented and decremented "
- "as they should for entities controlling a connections."];
-node_controller_refc(suite) -> [];
+%% Tests that external reference counts are incremented and decremented
+%% as they should for entities controlling a connections.
node_controller_refc(Config) when is_list(Config) ->
erts_debug:set_internal_state(available_internal_state, true),
erts_debug:set_internal_state(node_tab_delayed_delete, 0),
- ?line NodeFirstName = get_nodefirstname(),
- ?line ?line {ok, Node} = start_node(NodeFirstName),
- ?line true = lists:member(Node, nodes()),
- ?line 1 = reference_type_count(control, get_dist_references(Node)),
- ?line P = spawn_link_execer(node()),
- ?line Node
- = sync_exec(P,
- fun () ->
- put(remote_net_kernel,
- rpc:call(Node,erlang,whereis,[net_kernel])),
- node(get(remote_net_kernel))
- end),
- ?line Creation = rpc:call(Node, erlang, system_info, [creation]),
- ?line monitor_node(Node,true),
- ?line stop_node(Node),
- ?line receive {nodedown, Node} -> ok end,
- ?line DistRefs = get_dist_references(Node),
- ?line true = reference_type_count(node, DistRefs) > 0,
- ?line 0 = reference_type_count(control, DistRefs),
+ NodeFirstName = get_nodefirstname(),
+ {ok, Node} = start_node(NodeFirstName),
+ true = lists:member(Node, nodes()),
+ 1 = reference_type_count(control, get_dist_references(Node)),
+ P = spawn_link_execer(node()),
+ Node
+ = sync_exec(P,
+ fun () ->
+ put(remote_net_kernel,
+ rpc:call(Node,erlang,whereis,[net_kernel])),
+ node(get(remote_net_kernel))
+ end),
+ Creation = rpc:call(Node, erlang, system_info, [creation]),
+ monitor_node(Node,true),
+ stop_node(Node),
+ receive {nodedown, Node} -> ok end,
+ DistRefs = get_dist_references(Node),
+ true = reference_type_count(node, DistRefs) > 0,
+ 0 = reference_type_count(control, DistRefs),
% Get rid of all references to Node
- ?line exec(P, fun () -> exit(normal) end),
- ?line wait_until(fun () -> not is_process_alive(P) end),
+ exec(P, fun () -> exit(normal) end),
+ wait_until(fun () -> not is_process_alive(P) end),
lists:foreach(fun (Proc) -> garbage_collect(Proc) end, processes()),
- ?line false = get_node_references({Node,Creation}),
- ?line false = get_dist_references(Node),
- ?line false = lists:member(Node, nodes(known)),
- ?line nc_refc_check(node()),
+ false = get_node_references({Node,Creation}),
+ false = get_dist_references(Node),
+ false = lists:member(Node, nodes(known)),
+ nc_refc_check(node()),
erts_debug:set_internal_state(node_tab_delayed_delete, -1), %% restore original value
- ?line ok.
+ ok.
%%
%% Test case: ets_refc
%%
-ets_refc(doc) ->
- ["Tests that external reference counts are incremented and decremented "
- "as they should for data stored in ets tables."];
-ets_refc(suite) -> [];
+%% Tests that external reference counts are incremented and decremented
+%% as they should for data stored in ets tables.
ets_refc(Config) when is_list(Config) ->
- ?line RNode = {get_nodename(), 1},
- ?line RPid = mk_pid(RNode, 4711, 2),
- ?line RPort = mk_port(RNode, 4711),
- ?line RRef = mk_ref(RNode, [4711, 47, 11]),
- ?line Tab = ets:new(ets_refc, []),
- ?line 0 = reference_type_count(ets, get_node_references(RNode)),
- ?line true = ets:insert(Tab, [{a, self()},
- {b, RPid},
- {c, hd(erlang:ports())},
- {d, RPort},
- {e, make_ref()}]),
- ?line 2 = reference_type_count(ets, get_node_references(RNode)),
- ?line true = ets:insert(Tab, {f, RRef}),
- ?line 3 = reference_type_count(ets, get_node_references(RNode)),
- ?line true = ets:delete(Tab, d),
- ?line 2 = reference_type_count(ets, get_node_references(RNode)),
- ?line true = ets:delete_all_objects(Tab),
- ?line 0 = reference_type_count(ets, get_node_references(RNode)),
- ?line true = ets:insert(Tab, [{b, RPid}, {e, make_ref()}]),
- ?line 1 = reference_type_count(ets, get_node_references(RNode)),
- ?line true = ets:delete(Tab),
- ?line 0 = reference_type_count(ets, get_node_references(RNode)),
- ?line nc_refc_check(node()),
- ?line ok.
+ RNode = {get_nodename(), 1},
+ RPid = mk_pid(RNode, 4711, 2),
+ RPort = mk_port(RNode, 4711),
+ RRef = mk_ref(RNode, [4711, 47, 11]),
+ Tab = ets:new(ets_refc, []),
+ 0 = reference_type_count(ets, get_node_references(RNode)),
+ true = ets:insert(Tab, [{a, self()},
+ {b, RPid},
+ {c, hd(erlang:ports())},
+ {d, RPort},
+ {e, make_ref()}]),
+ 2 = reference_type_count(ets, get_node_references(RNode)),
+ true = ets:insert(Tab, {f, RRef}),
+ 3 = reference_type_count(ets, get_node_references(RNode)),
+ true = ets:delete(Tab, d),
+ 2 = reference_type_count(ets, get_node_references(RNode)),
+ true = ets:delete_all_objects(Tab),
+ 0 = reference_type_count(ets, get_node_references(RNode)),
+ true = ets:insert(Tab, [{b, RPid}, {e, make_ref()}]),
+ 1 = reference_type_count(ets, get_node_references(RNode)),
+ true = ets:delete(Tab),
+ 0 = reference_type_count(ets, get_node_references(RNode)),
+ nc_refc_check(node()),
+ ok.
%%
%% Test case: match_spec_refc
%%
-match_spec_refc(doc) ->
- ["Tests that external reference counts are incremented and decremented "
- "as they should for data stored in match specifications."];
-match_spec_refc(suite) -> [];
+%% Tests that external reference counts are incremented and decremented
+%% as they should for data stored in match specifications.
match_spec_refc(Config) when is_list(Config) ->
- ?line RNode = {get_nodename(), 1},
- ?line RPid = mk_pid(RNode, 4711, 2),
- ?line RPort = mk_port(RNode, 4711),
- ?line RRef = mk_ref(RNode, [4711, 47, 11]),
- ?line ok = do_match_spec_test(RNode, RPid, RPort, RRef),
- ?line garbage_collect(),
- ?line NodeRefs = get_node_references(RNode),
- ?line 0 = reference_type_count(binary, NodeRefs),
- ?line 0 = reference_type_count(ets, NodeRefs),
- ?line nc_refc_check(node()),
- ?line ok.
+ RNode = {get_nodename(), 1},
+ RPid = mk_pid(RNode, 4711, 2),
+ RPort = mk_port(RNode, 4711),
+ RRef = mk_ref(RNode, [4711, 47, 11]),
+ ok = do_match_spec_test(RNode, RPid, RPort, RRef),
+ garbage_collect(),
+ NodeRefs = get_node_references(RNode),
+ 0 = reference_type_count(binary, NodeRefs),
+ 0 = reference_type_count(ets, NodeRefs),
+ nc_refc_check(node()),
+ ok.
do_match_spec_test(RNode, RPid, RPort, RRef) ->
- ?line Tab = ets:new(match_spec_refc, []),
- ?line true = ets:insert(Tab, [{a, RPid, RPort, RRef},
- {b, self(), RPort, RRef},
- {c, RPid, RPort, make_ref()},
- {d, RPid, RPort, RRef}]),
- ?line {M1, C1} = ets:select(Tab, [{{'$1',RPid,RPort,RRef},[],['$1']}], 1),
- ?line NodeRefs = get_node_references(RNode),
- ?line 3 = reference_type_count(binary, NodeRefs),
- ?line 10 = reference_type_count(ets, NodeRefs),
- ?line {M2, C2} = ets:select(C1),
- ?line '$end_of_table' = ets:select(C2),
- ?line ets:delete(Tab),
- ?line [a,d] = lists:sort(M1++M2),
- ?line ok.
-
+ Tab = ets:new(match_spec_refc, []),
+ true = ets:insert(Tab, [{a, RPid, RPort, RRef},
+ {b, self(), RPort, RRef},
+ {c, RPid, RPort, make_ref()},
+ {d, RPid, RPort, RRef}]),
+ {M1, C1} = ets:select(Tab, [{{'$1',RPid,RPort,RRef},[],['$1']}], 1),
+ NodeRefs = get_node_references(RNode),
+ 3 = reference_type_count(binary, NodeRefs),
+ 10 = reference_type_count(ets, NodeRefs),
+ {M2, C2} = ets:select(C1),
+ '$end_of_table' = ets:select(C2),
+ ets:delete(Tab),
+ [a,d] = lists:sort(M1++M2),
+ ok.
+
%%
%% Test case: ets_refc
%%
-timer_refc(doc) ->
- ["Tests that external reference counts are incremented and decremented "
- "as they should for data stored in bif timers."];
-timer_refc(suite) -> [];
+%% Tests that external reference counts are incremented and decremented
+%% as they should for data stored in bif timers.
timer_refc(Config) when is_list(Config) ->
- ?line RNode = {get_nodename(), 1},
- ?line RPid = mk_pid(RNode, 4711, 2),
- ?line RPort = mk_port(RNode, 4711),
- ?line RRef = mk_ref(RNode, [4711, 47, 11]),
- ?line 0 = reference_type_count(timer, get_node_references(RNode)),
- ?line Pid = spawn(fun () -> receive after infinity -> ok end end),
- ?line erlang:start_timer(10000, Pid, {RPid, RPort, RRef}),
- ?line 3 = reference_type_count(timer, get_node_references(RNode)),
- ?line exit(Pid, kill),
- ?line Mon = erlang:monitor(process, Pid),
- ?line receive {'DOWN', Mon, process, Pid, _} -> ok end,
- ?line 0 = reference_type_count(timer, get_node_references(RNode)),
- ?line erlang:send_after(500, Pid, {timer, RPid, RPort, RRef}),
- ?line 0 = reference_type_count(timer, get_node_references(RNode)),
- ?line erlang:send_after(500, self(), {timer, RPid, RPort, RRef}),
- ?line erlang:send_after(400, bananfluga, {timer, RPid, RPort, RRef}),
- ?line 6 = reference_type_count(timer, get_node_references(RNode)),
- ?line receive {timer, RPid, RPort, RRef} -> ok end,
- ?line 0 = reference_type_count(timer, get_node_references(RNode)),
- ?line nc_refc_check(node()),
- ?line ok.
-
-otp_4715(doc) -> [];
-otp_4715(suite) -> [];
+ RNode = {get_nodename(), 1},
+ RPid = mk_pid(RNode, 4711, 2),
+ RPort = mk_port(RNode, 4711),
+ RRef = mk_ref(RNode, [4711, 47, 11]),
+ 0 = reference_type_count(timer, get_node_references(RNode)),
+ Pid = spawn(fun () -> receive after infinity -> ok end end),
+ erlang:start_timer(10000, Pid, {RPid, RPort, RRef}),
+ 3 = reference_type_count(timer, get_node_references(RNode)),
+ exit(Pid, kill),
+ Mon = erlang:monitor(process, Pid),
+ receive {'DOWN', Mon, process, Pid, _} -> ok end,
+ 0 = reference_type_count(timer, get_node_references(RNode)),
+ erlang:send_after(500, Pid, {timer, RPid, RPort, RRef}),
+ 0 = reference_type_count(timer, get_node_references(RNode)),
+ erlang:send_after(500, self(), {timer, RPid, RPort, RRef}),
+ erlang:send_after(400, bananfluga, {timer, RPid, RPort, RRef}),
+ 6 = reference_type_count(timer, get_node_references(RNode)),
+ receive {timer, RPid, RPort, RRef} -> ok end,
+ 0 = reference_type_count(timer, get_node_references(RNode)),
+ nc_refc_check(node()),
+ ok.
+
otp_4715(Config) when is_list(Config) ->
- case ?t:is_release_available("r9b") of
- true -> otp_4715_1(Config);
- false -> {skip,"No R9B found"}
+ case test_server:is_release_available("r9b") of
+ true -> otp_4715_1(Config);
+ false -> {skip,"No R9B found"}
end.
otp_4715_1(Config) ->
case erlang:system_info(compat_rel) of
- 9 ->
- ?line run_otp_4715(Config);
- _ ->
- ?line Pa = filename:dirname(code:which(?MODULE)),
- ?line ?t:run_on_shielded_node(fun () ->
- run_otp_4715(Config)
- end,
- "+R9 -pa " ++ Pa)
+ 9 ->
+ run_otp_4715(Config);
+ _ ->
+ Pa = filename:dirname(code:which(?MODULE)),
+ test_server:run_on_shielded_node(fun () ->
+ run_otp_4715(Config)
+ end,
+ "+R9 -pa " ++ Pa)
end.
run_otp_4715(Config) when is_list(Config) ->
- ?line erts_debug:set_internal_state(available_internal_state, true),
- ?line PidList = [mk_pid({a@b, 1}, 4710, 2),
- mk_pid({a@b, 1}, 4712, 1),
- mk_pid({c@b, 1}, 4711, 1),
- mk_pid({b@b, 3}, 4711, 1),
- mk_pid({b@b, 2}, 4711, 1)],
-
- ?line R9Sorted = old_mod:sort_on_old_node(PidList),
- ?line R9Sorted = lists:sort(PidList).
-
-pid_wrap(doc) -> [];
-pid_wrap(suite) -> [];
-pid_wrap(Config) when is_list(Config) -> ?line pp_wrap(pid).
-
-port_wrap(doc) -> [];
-port_wrap(suite) -> [];
+ erts_debug:set_internal_state(available_internal_state, true),
+ PidList = [mk_pid({a@b, 1}, 4710, 2),
+ mk_pid({a@b, 1}, 4712, 1),
+ mk_pid({c@b, 1}, 4711, 1),
+ mk_pid({b@b, 3}, 4711, 1),
+ mk_pid({b@b, 2}, 4711, 1)],
+
+ R9Sorted = old_mod:sort_on_old_node(PidList),
+ R9Sorted = lists:sort(PidList).
+
+pid_wrap(Config) when is_list(Config) -> pp_wrap(pid).
+
port_wrap(Config) when is_list(Config) ->
- ?line case ?t:os_type() of
- {unix, _} ->
- ?line pp_wrap(port);
- _ ->
- ?line {skip, "Only run on unix"}
- end.
+ case os:type() of
+ {unix, _} ->
+ pp_wrap(port);
+ _ ->
+ {skip, "Only run on unix"}
+ end.
get_next_id(pid) ->
erts_debug:get_internal_state(next_pid);
@@ -773,167 +733,160 @@ set_next_id(port, N) ->
erts_debug:set_internal_state(next_port, N).
pp_wrap(What) ->
- ?line N = set_high_pp_next(What),
- ?line Cre = N + 100,
- ?line ?t:format("no creations = ~p~n", [Cre]),
- ?line PreCre = get_next_id(What),
- ?line ?t:format("pre creations = ~p~n", [PreCre]),
- ?line true = is_integer(PreCre),
- ?line do_pp_creations(What, Cre),
- ?line PostCre = get_next_id(What),
- ?line ?t:format("post creations = ~p~n", [PostCre]),
- ?line true = is_integer(PostCre),
- ?line true = PreCre > PostCre,
- ?line Now = set_next_id(What, ?MAX_PIDS_PORTS div 2),
- ?line ?t:format("reset to = ~p~n", [Now]),
- ?line true = is_integer(Now),
- ?line ok.
+ N = set_high_pp_next(What),
+ Cre = N + 100,
+ io:format("no creations = ~p~n", [Cre]),
+ PreCre = get_next_id(What),
+ io:format("pre creations = ~p~n", [PreCre]),
+ true = is_integer(PreCre),
+ do_pp_creations(What, Cre),
+ PostCre = get_next_id(What),
+ io:format("post creations = ~p~n", [PostCre]),
+ true = is_integer(PostCre),
+ true = PreCre > PostCre,
+ Now = set_next_id(What, ?MAX_PIDS_PORTS div 2),
+ io:format("reset to = ~p~n", [Now]),
+ true = is_integer(Now),
+ ok.
set_high_pp_next(What) ->
- ?line set_high_pp_next(What, ?MAX_PIDS_PORTS-1).
-
+ set_high_pp_next(What, ?MAX_PIDS_PORTS-1).
+
set_high_pp_next(What, N) ->
- ?line M = set_next_id(What, N),
- ?line true = is_integer(M),
- ?line case {M >= N, M =< ?MAX_PIDS_PORTS} of
- {true, true} ->
- ?line ?MAX_PIDS_PORTS - M + 1;
- _ ->
- ?line set_high_pp_next(What, N - 100)
- end.
+ M = set_next_id(What, N),
+ true = is_integer(M),
+ case {M >= N, M =< ?MAX_PIDS_PORTS} of
+ {true, true} ->
+ ?MAX_PIDS_PORTS - M + 1;
+ _ ->
+ set_high_pp_next(What, N - 100)
+ end.
do_pp_creations(_What, N) when is_integer(N), N =< 0 ->
- ?line done;
+ done;
do_pp_creations(pid, N) when is_integer(N) ->
%% Create new pid and make sure it works...
- ?line Me = self(),
- ?line Ref = make_ref(),
- ?line Pid = spawn_link(fun () ->
- receive
- Ref ->
- Me ! Ref
- end
- end),
- ?line Pid ! Ref,
- ?line receive
- Ref ->
- ?line do_pp_creations(pid, N - 1)
- end;
+ Me = self(),
+ Ref = make_ref(),
+ Pid = spawn_link(fun () ->
+ receive
+ Ref ->
+ Me ! Ref
+ end
+ end),
+ Pid ! Ref,
+ receive
+ Ref ->
+ do_pp_creations(pid, N - 1)
+ end;
do_pp_creations(port, N) when is_integer(N) ->
%% Create new port and make sure it works...
- ?line "hej" = os:cmd("echo hej") -- "\n",
- ?line do_pp_creations(port, N - 1).
+ "hej" = os:cmd("echo hej") -- "\n",
+ do_pp_creations(port, N - 1).
-bad_nc(doc) -> [];
-bad_nc(suite) -> [];
bad_nc(Config) when is_list(Config) ->
% Make sure emulator don't crash on bad node containers...
- ?line MaxPidNum = (1 bsl 15) - 1,
- ?line MaxPidSer = ?MAX_PIDS_PORTS bsr 15,
- ?line ThisNode = {node(), erlang:system_info(creation)},
- ?line {'EXIT', {badarg, mk_pid, _}}
- = (catch mk_pid(ThisNode, MaxPidNum + 1, 17)),
- ?line {'EXIT', {badarg, mk_pid, _}}
- = (catch mk_pid(ThisNode, 4711, MaxPidSer + 1)),
- ?line {'EXIT', {badarg, mk_port, _}}
- = (catch mk_port(ThisNode, ?MAX_PIDS_PORTS + 1)),
- ?line {'EXIT', {badarg, mk_ref, _}}
- = (catch mk_ref(ThisNode,[(1 bsl 18), 4711, 4711])),
- ?line {'EXIT', {badarg, mk_ref, _}}
- = (catch mk_ref(ThisNode, [4711, 4711, 4711, 4711, 4711, 4711, 4711])),
- ?line RemNode = {x@y, 2},
- ?line {'EXIT', {badarg, mk_pid, _}}
- = (catch mk_pid(RemNode, MaxPidNum + 1, MaxPidSer)),
- ?line {'EXIT', {badarg, mk_pid, _}}
- = (catch mk_pid(RemNode, MaxPidNum, MaxPidSer + 1)),
- ?line {'EXIT', {badarg, mk_port, _}}
- = (catch mk_port(RemNode, ?MAX_PIDS_PORTS + 1)),
- ?line {'EXIT', {badarg, mk_ref, _}}
- = (catch mk_ref(RemNode, [(1 bsl 18), 4711, 4711])),
- ?line {'EXIT', {badarg, mk_ref, _}}
- = (catch mk_ref(RemNode, [4711, 4711, 4711, 4711, 4711, 4711, 4711])),
- ?line BadNode = {x@y, 4},
- ?line {'EXIT', {badarg, mk_pid, _}}
- = (catch mk_pid(BadNode, 4711, 17)),
- ?line {'EXIT', {badarg, mk_port, _}}
- = (catch mk_port(BadNode, 4711)),
- ?line {'EXIT', {badarg, mk_ref, _}}
- = (catch mk_ref(BadNode, [4711, 4711, 17])),
- ?line ok.
+ MaxPidNum = (1 bsl 15) - 1,
+ MaxPidSer = ?MAX_PIDS_PORTS bsr 15,
+ ThisNode = {node(), erlang:system_info(creation)},
+ {'EXIT', {badarg, mk_pid, _}}
+ = (catch mk_pid(ThisNode, MaxPidNum + 1, 17)),
+ {'EXIT', {badarg, mk_pid, _}}
+ = (catch mk_pid(ThisNode, 4711, MaxPidSer + 1)),
+ {'EXIT', {badarg, mk_port, _}}
+ = (catch mk_port(ThisNode, ?MAX_PIDS_PORTS + 1)),
+ {'EXIT', {badarg, mk_ref, _}}
+ = (catch mk_ref(ThisNode,[(1 bsl 18), 4711, 4711])),
+ {'EXIT', {badarg, mk_ref, _}}
+ = (catch mk_ref(ThisNode, [4711, 4711, 4711, 4711, 4711, 4711, 4711])),
+ RemNode = {x@y, 2},
+ {'EXIT', {badarg, mk_pid, _}}
+ = (catch mk_pid(RemNode, MaxPidNum + 1, MaxPidSer)),
+ {'EXIT', {badarg, mk_pid, _}}
+ = (catch mk_pid(RemNode, MaxPidNum, MaxPidSer + 1)),
+ {'EXIT', {badarg, mk_port, _}}
+ = (catch mk_port(RemNode, ?MAX_PIDS_PORTS + 1)),
+ {'EXIT', {badarg, mk_ref, _}}
+ = (catch mk_ref(RemNode, [(1 bsl 18), 4711, 4711])),
+ {'EXIT', {badarg, mk_ref, _}}
+ = (catch mk_ref(RemNode, [4711, 4711, 4711, 4711, 4711, 4711, 4711])),
+ BadNode = {x@y, bad_creation},
+ {'EXIT', {badarg, mk_pid, _}}
+ = (catch mk_pid(BadNode, 4711, 17)),
+ {'EXIT', {badarg, mk_port, _}}
+ = (catch mk_port(BadNode, 4711)),
+ {'EXIT', {badarg, mk_ref, _}}
+ = (catch mk_ref(BadNode, [4711, 4711, 17])),
+ ok.
-define(NO_PIDS, 1000000).
-unique_pid(doc) -> [];
-unique_pid(suite) -> [];
unique_pid(Config) when is_list(Config) ->
case catch erlang:system_info(modified_timing_level) of
- Level when is_integer(Level) ->
- {skip,
- "Modified timing (level " ++ integer_to_list(Level)
- ++ ") is enabled. spawn() is too slow for this "
- " test when modified timing is enabled."};
- _ ->
- ?line ?NO_PIDS = length(lists:usort(mkpidlist(?NO_PIDS, []))),
- ?line ok
+ Level when is_integer(Level) ->
+ {skip,
+ "Modified timing (level " ++ integer_to_list(Level)
+ ++ ") is enabled. spawn() is too slow for this "
+ " test when modified timing is enabled."};
+ _ ->
+ ?NO_PIDS = length(lists:usort(mkpidlist(?NO_PIDS, []))),
+ ok
end.
-
+
mkpidlist(0, Ps) -> Ps;
mkpidlist(N, Ps) -> mkpidlist(N-1, [spawn(fun () -> ok end)|Ps]).
-iter_max_procs(doc) -> [];
-iter_max_procs(suite) -> [];
iter_max_procs(Config) when is_list(Config) ->
- ?line NoMoreTests = make_ref(),
- ?line erlang:send_after(10000, self(), NoMoreTests),
- ?line Res = chk_max_proc_line(),
- ?line Res = chk_max_proc_line(),
- ?line done = chk_max_proc_line_until(NoMoreTests, Res),
- ?line {comment,
- io_lib:format("max processes = ~p; "
- "process line length = ~p",
- [element(2, Res), element(1, Res)])}.
-
-
+ NoMoreTests = make_ref(),
+ erlang:send_after(10000, self(), NoMoreTests),
+ Res = chk_max_proc_line(),
+ Res = chk_max_proc_line(),
+ done = chk_max_proc_line_until(NoMoreTests, Res),
+ Cmt = io_lib:format("max processes = ~p; "
+ "process line length = ~p",
+ [element(2, Res), element(1, Res)]),
+ {comment, lists:flatten(Cmt)}.
+
max_proc_line(Root, Parent, N) ->
Me = self(),
case catch spawn_link(fun () -> max_proc_line(Root, Me, N+1) end) of
- {'EXIT', {system_limit, _}} when Root /= self() ->
- Root ! {proc_line_length, N, self()},
- receive remove_proc_line -> Parent ! {exiting, Me} end;
- P when is_pid(P), Root =/= self() ->
- receive {exiting, P} -> Parent ! {exiting, Me} end;
- P when is_pid(P) ->
- P;
- Unexpected ->
- exit({unexpected_spawn_result, Unexpected})
+ {'EXIT', {system_limit, _}} when Root /= self() ->
+ Root ! {proc_line_length, N, self()},
+ receive remove_proc_line -> Parent ! {exiting, Me} end;
+ P when is_pid(P), Root =/= self() ->
+ receive {exiting, P} -> Parent ! {exiting, Me} end;
+ P when is_pid(P) ->
+ P;
+ Unexpected ->
+ exit({unexpected_spawn_result, Unexpected})
end.
chk_max_proc_line() ->
- ?line Child = max_proc_line(self(), self(), 0),
- ?line receive
- {proc_line_length, PLL, End} ->
- ?line PC = erlang:system_info(process_count),
- ?line LP = length(processes()),
- ?line ?t:format("proc line length = ~p; "
- "process count = ~p; "
- "length processes = ~p~n",
- [PLL, PC, LP]),
- ?line End ! remove_proc_line,
- ?line PC = LP,
- ?line receive {exiting, Child} -> ok end,
- ?line {PLL, PC}
- end.
+ Child = max_proc_line(self(), self(), 0),
+ receive
+ {proc_line_length, PLL, End} ->
+ PC = erlang:system_info(process_count),
+ LP = length(processes()),
+ io:format("proc line length = ~p; "
+ "process count = ~p; "
+ "length processes = ~p~n",
+ [PLL, PC, LP]),
+ End ! remove_proc_line,
+ PC = LP,
+ receive {exiting, Child} -> ok end,
+ {PLL, PC}
+ end.
chk_max_proc_line_until(NoMoreTests, Res) ->
receive
- NoMoreTests ->
- ?line done
+ NoMoreTests ->
+ done
after 0 ->
- ?line Res = chk_max_proc_line(),
- ?line chk_max_proc_line_until(NoMoreTests, Res)
+ Res = chk_max_proc_line(),
+ chk_max_proc_line_until(NoMoreTests, Res)
end.
%%
@@ -950,126 +903,126 @@ node_container_refc_check(Node) when is_atom(Node) ->
nc_refc_check(Node) when is_atom(Node) ->
Ref = make_ref(),
Self = self(),
- ?t:format("Starting reference count check of node ~w~n", [Node]),
+ io:format("Starting reference count check of node ~w~n", [Node]),
spawn_link(Node,
- fun () ->
- {{node_references, NodeRefs},
- {dist_references, DistRefs}} = ?ND_REFS,
- check_nd_refc({node(), erlang:system_info(creation)},
- NodeRefs,
- DistRefs,
- fun (ErrMsg) ->
- Self ! {Ref, ErrMsg, failed},
- exit(normal)
- end),
- Self ! {Ref, succeded}
- end),
+ fun () ->
+ {{node_references, NodeRefs},
+ {dist_references, DistRefs}} = ?ND_REFS,
+ check_nd_refc({node(), erlang:system_info(creation)},
+ NodeRefs,
+ DistRefs,
+ fun (ErrMsg) ->
+ Self ! {Ref, ErrMsg, failed},
+ exit(normal)
+ end),
+ Self ! {Ref, succeded}
+ end),
receive
- {Ref, ErrorMsg, failed} ->
- ?t:format("~s~n", [ErrorMsg]),
- ?t:fail(reference_count_check_failed);
- {Ref, succeded} ->
- ?t:format("Reference count check of node ~w succeded!~n", [Node]),
- ok
+ {Ref, ErrorMsg, failed} ->
+ io:format("~s~n", [ErrorMsg]),
+ ct:fail(reference_count_check_failed);
+ {Ref, succeded} ->
+ io:format("Reference count check of node ~w succeded!~n", [Node]),
+ ok
end.
check_nd_refc({ThisNodeName, ThisCreation}, NodeRefs, DistRefs, Fail) ->
case catch begin
- check_refc(ThisNodeName,ThisCreation,"node table",NodeRefs),
- check_refc(ThisNodeName,ThisCreation,"dist table",DistRefs),
- ok
- end of
- ok ->
- ok;
- {'EXIT', Reason} ->
- {Y,Mo,D} = date(),
- {H,Mi,S} = time(),
- ErrMsg = io_lib:format("~n"
- "*** Reference count check of node ~w "
- "failed (~p) at ~w~w~w ~w:~w:~w~n"
- "*** Node table references:~n ~p~n"
- "*** Dist table references:~n ~p~n",
- [node(), Reason, Y, Mo, D, H, Mi, S,
- NodeRefs, DistRefs]),
- Fail(lists:flatten(ErrMsg))
+ check_refc(ThisNodeName,ThisCreation,"node table",NodeRefs),
+ check_refc(ThisNodeName,ThisCreation,"dist table",DistRefs),
+ ok
+ end of
+ ok ->
+ ok;
+ {'EXIT', Reason} ->
+ {Y,Mo,D} = date(),
+ {H,Mi,S} = time(),
+ ErrMsg = io_lib:format("~n"
+ "*** Reference count check of node ~w "
+ "failed (~p) at ~w~w~w ~w:~w:~w~n"
+ "*** Node table references:~n ~p~n"
+ "*** Dist table references:~n ~p~n",
+ [node(), Reason, Y, Mo, D, H, Mi, S,
+ NodeRefs, DistRefs]),
+ Fail(lists:flatten(ErrMsg))
end.
check_refc(ThisNodeName,ThisCreation,Table,EntryList) when is_list(EntryList) ->
lists:foreach(
fun ({Entry, Refc, ReferrerList}) ->
- {DelayedDeleteTimer,
- FoundRefs} =
- lists:foldl(
- fun ({Referrer, ReferencesList}, {DDT, A1}) ->
- {case Referrer of
- {system,delayed_delete_timer} ->
- true;
- _ ->
- DDT
- end,
- A1 + lists:foldl(fun ({_T,Rs},A2) ->
- A2+Rs
- end,
- 0,
- ReferencesList)}
- end,
- {false, 0},
- ReferrerList),
-
- %% Reference count equals found references?
- case {Refc, FoundRefs, DelayedDeleteTimer} of
- {X, X, _} ->
- ok;
- {0, 1, true} ->
- ok;
- _ ->
- exit({invalid_reference_count, Table, Entry})
- end,
-
- %% All entries in table referred to?
- case {Entry, Refc} of
- {ThisNodeName, 0} -> ok;
- {{ThisNodeName, ThisCreation}, 0} -> ok;
- {_, 0} when DelayedDeleteTimer == false ->
- exit({not_referred_entry_in_table, Table, Entry});
- {_, _} -> ok
- end
+ {DelayedDeleteTimer,
+ FoundRefs} =
+ lists:foldl(
+ fun ({Referrer, ReferencesList}, {DDT, A1}) ->
+ {case Referrer of
+ {system,delayed_delete_timer} ->
+ true;
+ _ ->
+ DDT
+ end,
+ A1 + lists:foldl(fun ({_T,Rs},A2) ->
+ A2+Rs
+ end,
+ 0,
+ ReferencesList)}
+ end,
+ {false, 0},
+ ReferrerList),
+
+ %% Reference count equals found references?
+ case {Refc, FoundRefs, DelayedDeleteTimer} of
+ {X, X, _} ->
+ ok;
+ {0, 1, true} ->
+ ok;
+ _ ->
+ exit({invalid_reference_count, Table, Entry})
+ end,
+
+ %% All entries in table referred to?
+ case {Entry, Refc} of
+ {ThisNodeName, 0} -> ok;
+ {{ThisNodeName, ThisCreation}, 0} -> ok;
+ {_, 0} when DelayedDeleteTimer == false ->
+ exit({not_referred_entry_in_table, Table, Entry});
+ {_, _} -> ok
+ end
end,
EntryList),
ok.
get_node_references({NodeName, Creation} = Node) when is_atom(NodeName),
- is_integer(Creation) ->
+ is_integer(Creation) ->
{{node_references, NodeRefs},
- {dist_references, DistRefs}} = ?ND_REFS,
+ {dist_references, DistRefs}} = ?ND_REFS,
check_nd_refc({node(), erlang:system_info(creation)},
- NodeRefs,
- DistRefs,
- fun (ErrMsg) ->
- ?t:format("~s", [ErrMsg]),
- ?t:fail(reference_count_check_failed)
- end),
+ NodeRefs,
+ DistRefs,
+ fun (ErrMsg) ->
+ io:format("~s", [ErrMsg]),
+ ct:fail(reference_count_check_failed)
+ end),
find_references(Node, NodeRefs).
get_dist_references(NodeName) when is_atom(NodeName) ->
- ?line {{node_references, NodeRefs},
- {dist_references, DistRefs}} = ?ND_REFS,
- ?line check_nd_refc({node(), erlang:system_info(creation)},
- NodeRefs,
- DistRefs,
- fun (ErrMsg) ->
- ?line ?t:format("~s", [ErrMsg]),
- ?line ?t:fail(reference_count_check_failed)
- end),
- ?line find_references(NodeName, DistRefs).
+ {{node_references, NodeRefs},
+ {dist_references, DistRefs}} = ?ND_REFS,
+ check_nd_refc({node(), erlang:system_info(creation)},
+ NodeRefs,
+ DistRefs,
+ fun (ErrMsg) ->
+ io:format("~s", [ErrMsg]),
+ ct:fail(reference_count_check_failed)
+ end),
+ find_references(NodeName, DistRefs).
find_references(N, NRefList) ->
case lists:keysearch(N, 1, NRefList) of
- {value, {N, _, ReferrersList}} -> ReferrersList;
- _ -> false
- end.
+ {value, {N, _, ReferrersList}} -> ReferrersList;
+ _ -> false
+ end.
%% Currently unused
% refering_entity_type(RefererType, ReferingEntities) ->
@@ -1081,7 +1034,7 @@ find_references(N, NRefList) ->
% ReferingEntities).
refering_entity_id(ReferingEntityId, [{ReferingEntityId,_} = ReferingEntity
- | _ReferingEntities]) ->
+ | _ReferingEntities]) ->
ReferingEntity;
refering_entity_id(ReferingEntityId, [_ | ReferingEntities]) ->
refering_entity_id(ReferingEntityId, ReferingEntities);
@@ -1094,34 +1047,34 @@ reference_type_count(Type, {_, _ReferenceCountList} = ReferingEntity) ->
reference_type_count(Type, [ReferingEntity]);
reference_type_count(Type, ReferingEntities) when is_list(ReferingEntities) ->
lists:foldl(fun ({_, ReferenceCountList}, Acc1) ->
- lists:foldl(fun ({T, N}, Acc2) when T == Type ->
- N + Acc2;
- (_, Acc2) ->
- Acc2
- end,
- Acc1,
- ReferenceCountList)
- end,
- 0,
- ReferingEntities).
+ lists:foldl(fun ({T, N}, Acc2) when T == Type ->
+ N + Acc2;
+ (_, Acc2) ->
+ Acc2
+ end,
+ Acc1,
+ ReferenceCountList)
+ end,
+ 0,
+ ReferingEntities).
start_node(Name, Args) ->
- ?line Pa = filename:dirname(code:which(?MODULE)),
- ?line Res = test_server:start_node(Name,
- slave,
- [{args, "-pa "++Pa++" "++Args}]),
- ?line {ok, Node} = Res,
- ?line rpc:call(Node, erts_debug, set_internal_state,
- [available_internal_state, true]),
- ?line Res.
-
+ Pa = filename:dirname(code:which(?MODULE)),
+ Res = test_server:start_node(Name,
+ slave,
+ [{args, "-pa "++Pa++" "++Args}]),
+ {ok, Node} = Res,
+ rpc:call(Node, erts_debug, set_internal_state,
+ [available_internal_state, true]),
+ Res.
+
start_node(Name) ->
- ?line start_node(Name, "").
+ start_node(Name, "").
stop_node(Node) ->
- ?line nc_refc_check(Node),
- ?line true = test_server:stop_node(Node).
+ nc_refc_check(Node),
+ true = test_server:stop_node(Node).
hostname() ->
from($@, atom_to_list(node())).
@@ -1132,25 +1085,25 @@ from(_H, []) -> [].
wait_until(Pred) ->
case Pred() of
- true -> ok;
- false -> receive after 100 -> wait_until(Pred) end
+ true -> ok;
+ false -> receive after 100 -> wait_until(Pred) end
end.
get_nodefirstname_string() ->
atom_to_list(?MODULE)
- ++ "-"
- ++ integer_to_list(erlang:system_time(seconds))
- ++ "-"
- ++ integer_to_list(erlang:unique_integer([positive])).
+ ++ "-"
+ ++ integer_to_list(erlang:system_time(seconds))
+ ++ "-"
+ ++ integer_to_list(erlang:unique_integer([positive])).
get_nodefirstname() ->
list_to_atom(get_nodefirstname_string()).
get_nodename() ->
list_to_atom(get_nodefirstname_string()
- ++ "@"
- ++ hostname()).
-
+ ++ "@"
+ ++ hostname()).
+
-define(VERSION_MAGIC, 131).
@@ -1160,6 +1113,9 @@ get_nodename() ->
-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,
@@ -1182,18 +1138,25 @@ uint8(Uint) ->
exit({badarg, uint8, [Uint]}).
+pid_tag(bad_creation) -> ?PID_EXT;
+pid_tag(Creation) when Creation =< 3 -> ?PID_EXT;
+pid_tag(_Creation) -> ?NEW_PID_EXT.
+
+enc_creation(bad_creation) -> uint8(4);
+enc_creation(Creation) when Creation =< 3 -> uint8(Creation);
+enc_creation(Creation) -> uint32_be(Creation).
mk_pid({NodeName, Creation}, Number, Serial) when is_atom(NodeName) ->
mk_pid({atom_to_list(NodeName), Creation}, Number, Serial);
mk_pid({NodeName, Creation}, Number, Serial) ->
case catch binary_to_term(list_to_binary([?VERSION_MAGIC,
- ?PID_EXT,
- ?ATOM_EXT,
- uint16_be(length(NodeName)),
- NodeName,
- uint32_be(Number),
- uint32_be(Serial),
- uint8(Creation)])) of
+ pid_tag(Creation),
+ ?ATOM_EXT,
+ uint16_be(length(NodeName)),
+ NodeName,
+ uint32_be(Number),
+ uint32_be(Serial),
+ enc_creation(Creation)])) of
Pid when is_pid(Pid) ->
Pid;
{'EXIT', {badarg, _}} ->
@@ -1202,16 +1165,20 @@ mk_pid({NodeName, Creation}, Number, Serial) ->
exit({unexpected_binary_to_term_result, Other})
end.
+port_tag(bad_creation) -> ?PORT_EXT;
+port_tag(Creation) when Creation =< 3 -> ?PORT_EXT;
+port_tag(_Creation) -> ?NEW_PORT_EXT.
+
mk_port({NodeName, Creation}, Number) when is_atom(NodeName) ->
mk_port({atom_to_list(NodeName), Creation}, Number);
mk_port({NodeName, Creation}, Number) ->
case catch binary_to_term(list_to_binary([?VERSION_MAGIC,
- ?PORT_EXT,
+ port_tag(Creation),
?ATOM_EXT,
uint16_be(length(NodeName)),
NodeName,
uint32_be(Number),
- uint8(Creation)])) of
+ enc_creation(Creation)])) of
Port when is_port(Port) ->
Port;
{'EXIT', {badarg, _}} ->
@@ -1220,37 +1187,39 @@ mk_port({NodeName, Creation}, Number) ->
exit({unexpected_binary_to_term_result, Other})
end.
+ref_tag(bad_creation) -> ?NEW_REFERENCE_EXT;
+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) ->
mk_ref({atom_to_list(NodeName), Creation}, Numbers);
mk_ref({NodeName, Creation}, [Number]) when is_list(NodeName),
- is_integer(Creation),
+ Creation =< 3,
is_integer(Number) ->
case catch binary_to_term(list_to_binary([?VERSION_MAGIC,
- ?REFERENCE_EXT,
- ?ATOM_EXT,
- uint16_be(length(NodeName)),
- NodeName,
- uint32_be(Number),
- uint8(Creation)])) of
- Ref when is_reference(Ref) ->
- Ref;
- {'EXIT', {badarg, _}} ->
- exit({badarg, mk_ref, [{NodeName, Creation}, [Number]]});
- Other ->
- exit({unexpected_binary_to_term_result, Other})
+ ?REFERENCE_EXT,
+ ?ATOM_EXT,
+ uint16_be(length(NodeName)),
+ NodeName,
+ uint32_be(Number),
+ uint8(Creation)])) of
+ Ref when is_reference(Ref) ->
+ Ref;
+ {'EXIT', {badarg, _}} ->
+ exit({badarg, mk_ref, [{NodeName, Creation}, [Number]]});
+ Other ->
+ exit({unexpected_binary_to_term_result, Other})
end;
mk_ref({NodeName, Creation}, Numbers) when is_list(NodeName),
- 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)),
?ATOM_EXT,
uint16_be(length(NodeName)),
NodeName,
- uint8(Creation),
+ enc_creation(Creation),
lists:map(fun (N) ->
uint32_be(N)
end,
@@ -1265,10 +1234,10 @@ mk_ref({NodeName, Creation}, Numbers) when is_list(NodeName),
exec_loop() ->
receive
- {exec_fun, Fun} when is_function(Fun) ->
- Fun();
- {sync_exec_fun, From, Fun} when is_pid(From), is_function(Fun) ->
- From ! {sync_exec_fun_res, self(), Fun()}
+ {exec_fun, Fun} when is_function(Fun) ->
+ Fun();
+ {sync_exec_fun, From, Fun} when is_pid(From), is_function(Fun) ->
+ From ! {sync_exec_fun_res, self(), Fun()}
end,
exec_loop().
@@ -1284,6 +1253,6 @@ exec(Pid, Fun) when is_pid(Pid), is_function(Fun) ->
sync_exec(Pid, Fun) when is_pid(Pid), is_function(Fun) ->
Pid ! {sync_exec_fun, self(), Fun},
receive
- {sync_exec_fun_res, Pid, Res} ->
- Res
+ {sync_exec_fun_res, Pid, Res} ->
+ Res
end.
diff --git a/erts/emulator/test/nofrag_SUITE.erl b/erts/emulator/test/nofrag_SUITE.erl
index caa2d30a6c..8b1519ae36 100644
--- a/erts/emulator/test/nofrag_SUITE.erl
+++ b/erts/emulator/test/nofrag_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.
@@ -22,55 +22,31 @@
-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,
- error_handler/1,error_handler_apply/1,
- error_handler_fixed_apply/1,error_handler_fun/1,
- debug_breakpoint/1]).
+-export([all/0, suite/0,
+ error_handler/1,error_handler_apply/1,
+ error_handler_fixed_apply/1,error_handler_fun/1,
+ debug_breakpoint/1]).
%% Exported functions for an error_handler module.
-export([undefined_function/3,undefined_lambda/3,breakpoint/3]).
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap, {minutes, 3}}].
all() ->
[error_handler, error_handler_apply,
error_handler_fixed_apply, error_handler_fun,
debug_breakpoint].
-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(Func, Config) when is_atom(Func), is_list(Config) ->
- Dog = ?t:timetrap(?t:minutes(3)),
- [{watchdog,Dog}|Config].
-
-end_per_testcase(_Func, Config) ->
- Dog = ?config(watchdog, Config),
- ?t:timetrap_cancel(Dog).
-
error_handler(Config) when is_list(Config) ->
- ?line process_flag(error_handler, ?MODULE),
+ process_flag(error_handler, ?MODULE),
%% The term_to_binary/1 - binary_to_term/1 roundtrip is a good way
%% to traverse the entire term.
- ?line Term = collect(1024),
- ?line Term = binary_to_term(term_to_binary(Term)),
- ?line 1024 = length(Term),
- ?line [[a,b,c,d,[e,f,g]]] = lists:usort(Term),
+ Term = collect(1024),
+ Term = binary_to_term(term_to_binary(Term)),
+ 1024 = length(Term),
+ [[a,b,c,d,[e,f,g]]] = lists:usort(Term),
ok.
collect(0) ->
@@ -105,25 +81,25 @@ collect_apply(N, Mod) ->
[C|Res].
error_handler_apply(Config) when is_list(Config) ->
- ?line process_flag(error_handler, ?MODULE),
+ process_flag(error_handler, ?MODULE),
%% The term_to_binary/1 - binary_to_term/1 roundtrip is a good way
%% to traverse the entire term.
- ?line Term = collect_apply(1024, fooblurfbar),
- ?line Term = binary_to_term(term_to_binary(Term)),
- ?line 1024 = length(Term),
- ?line [[{a,42},b,c,d,[e,f,g]]] = lists:usort(Term),
+ Term = collect_apply(1024, fooblurfbar),
+ Term = binary_to_term(term_to_binary(Term)),
+ 1024 = length(Term),
+ [[{a,42},b,c,d,[e,f,g]]] = lists:usort(Term),
ok.
error_handler_fixed_apply(Config) when is_list(Config) ->
- ?line process_flag(error_handler, ?MODULE),
+ process_flag(error_handler, ?MODULE),
%% The term_to_binary/1 - binary_to_term/1 roundtrip is a good way
%% to traverse the entire term.
- ?line Term = collect_fixed_apply(1024, fooblurfbar),
- ?line Term = binary_to_term(term_to_binary(Term)),
- ?line 1024 = length(Term),
- ?line [[{a,2},b,c,d,[e,f,g]]] = lists:usort(Term),
+ Term = collect_fixed_apply(1024, fooblurfbar),
+ Term = binary_to_term(term_to_binary(Term)),
+ 1024 = length(Term),
+ [[{a,2},b,c,d,[e,f,g]]] = lists:usort(Term),
ok.
collect_fixed_apply(0, _) ->
@@ -145,19 +121,19 @@ undefined_function(_Mod, _Name, Args) ->
Args.
error_handler_fun(Config) when is_list(Config) ->
- ?line process_flag(error_handler, ?MODULE),
+ process_flag(error_handler, ?MODULE),
%% fun(A, B, C) -> {A,B,C,X} end in module foobarblurf.
B = <<131,112,0,0,0,84,3,109,96,69,208,5,175,207,75,36,93,112,218,232,222,22,251,0,
- 0,0,0,0,0,0,1,100,0,11,102,111,111,98,97,114,98,108,117,114,102,97,0,98,5,
- 244,197,144,103,100,0,13,110,111,110,111,100,101,64,110,111,104,111,115,116,
- 0,0,0,46,0,0,0,0,0,104,3,97,1,97,2,97,3>>,
- ?line Fun = binary_to_term(B),
- ?line Term = collect_fun(1024, Fun),
- ?line Term = binary_to_term(term_to_binary(Term)),
- ?line 1024 = length(Term),
- ?line [[{foo,bar},{99,1.0},[e,f,g]]] = lists:usort(Term),
- ?line {env,[{1,2,3}]} = erlang:fun_info(Fun, env),
+ 0,0,0,0,0,0,1,100,0,11,102,111,111,98,97,114,98,108,117,114,102,97,0,98,5,
+ 244,197,144,103,100,0,13,110,111,110,111,100,101,64,110,111,104,111,115,116,
+ 0,0,0,46,0,0,0,0,0,104,3,97,1,97,2,97,3>>,
+ Fun = binary_to_term(B),
+ Term = collect_fun(1024, Fun),
+ Term = binary_to_term(term_to_binary(Term)),
+ 1024 = length(Term),
+ [[{foo,bar},{99,1.0},[e,f,g]]] = lists:usort(Term),
+ {env,[{1,2,3}]} = erlang:fun_info(Fun, env),
ok.
collect_fun(0, _) ->
@@ -179,13 +155,13 @@ undefined_lambda(foobarblurf, Fun, Args) when is_function(Fun) ->
Args.
debug_breakpoint(Config) when is_list(Config) ->
- ?line process_flag(error_handler, ?MODULE),
- ?line erts_debug:breakpoint({?MODULE,foobar,5}, true),
- ?line Term = break_collect(1024),
- ?line Term = binary_to_term(term_to_binary(Term)),
- ?line 1024 = length(Term),
- ?line [[a,b,c,{d,e},[f,g,h]]] = lists:usort(Term),
- ?line erts_debug:breakpoint({?MODULE,foobar,5}, false),
+ process_flag(error_handler, ?MODULE),
+ erts_debug:breakpoint({?MODULE,foobar,5}, true),
+ Term = break_collect(1024),
+ Term = binary_to_term(term_to_binary(Term)),
+ 1024 = length(Term),
+ [[a,b,c,{d,e},[f,g,h]]] = lists:usort(Term),
+ erts_debug:breakpoint({?MODULE,foobar,5}, false),
ok.
break_collect(0) ->
@@ -202,5 +178,3 @@ foobar(_, _, _, _, _) ->
exit(dont_execute_me).
id(I) -> I.
-
-
diff --git a/erts/emulator/test/num_bif_SUITE.erl b/erts/emulator/test/num_bif_SUITE.erl
index 04a6f9d18d..d1c9648017 100644
--- a/erts/emulator/test/num_bif_SUITE.erl
+++ b/erts/emulator/test/num_bif_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.
diff --git a/erts/emulator/test/old_mod.erl b/erts/emulator/test/old_mod.erl
index e714a75954..866aba79bb 100644
--- a/erts/emulator/test/old_mod.erl
+++ b/erts/emulator/test/old_mod.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.
@@ -30,19 +30,19 @@ sorter(Receiver, Ref, List) ->
sort_on_old_node(List) when is_list(List) ->
OldVersion = "r10",
- ?line Pa = filename:dirname(code:which(?MODULE)),
- ?line {X, Y, Z} = now(),
- ?line NodeName = list_to_atom(OldVersion
- ++ "_"
- ++ integer_to_list(X)
- ++ integer_to_list(Y)
- ++ integer_to_list(Z)),
- ?line {ok, Node} = ?t:start_node(NodeName,
- peer,
- [{args, " -pa " ++ Pa},
- {erl, [{release, OldVersion++"b_patched"}]}]),
- ?line Ref = make_ref(),
- ?line spawn_link(Node, ?MODULE, sorter, [self(), Ref, List]),
- ?line SortedPids = receive {Ref, SP} -> SP end,
- ?line true = ?t:stop_node(Node),
- ?line SortedPids.
+ Pa = filename:dirname(code:which(?MODULE)),
+ {X, Y, Z} = now(),
+ NodeName = list_to_atom(OldVersion
+ ++ "_"
+ ++ integer_to_list(X)
+ ++ integer_to_list(Y)
+ ++ integer_to_list(Z)),
+ {ok, Node} = test_server:start_node(NodeName,
+ peer,
+ [{args, " -pa " ++ Pa},
+ {erl, [{release, OldVersion++"b_patched"}]}]),
+ Ref = make_ref(),
+ spawn_link(Node, ?MODULE, sorter, [self(), Ref, List]),
+ SortedPids = receive {Ref, SP} -> SP end,
+ true = test_server:stop_node(Node),
+ SortedPids.
diff --git a/erts/emulator/test/old_scheduler_SUITE.erl b/erts/emulator/test/old_scheduler_SUITE.erl
index 272131cb46..f91d84beea 100644
--- a/erts/emulator/test/old_scheduler_SUITE.erl
+++ b/erts/emulator/test/old_scheduler_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,41 +22,25 @@
-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,
+ init_per_testcase/2, end_per_testcase/2]).
-export([equal/1, many_low/1, few_low/1, max/1, high/1]).
--define(default_timeout, ?t:minutes(11)).
-
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap, {minutes, 11}}].
all() ->
case catch erlang:system_info(modified_timing_level) of
- Level when is_integer(Level) ->
- {skipped,
- "Modified timing (level " ++
- integer_to_list(Level) ++
- ") is enabled. Testcases gets messed "
- "up by modfied timing."};
- _ -> [equal, many_low, few_low, max, high]
+ Level when is_integer(Level) ->
+ {skipped,
+ "Modified timing (level " ++
+ integer_to_list(Level) ++
+ ") is enabled. Testcases gets messed "
+ "up by modfied timing."};
+ _ -> [equal, many_low, few_low, max, high]
end.
-groups() ->
- [].
-
-init_per_suite(Config) ->
- Config.
-
-end_per_suite(_Config) ->
- ok.
-
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
-
%%-----------------------------------------------------------------------------------
%% TEST SUITE DESCRIPTION
@@ -78,35 +62,30 @@ end_per_group(_GroupName, Config) ->
%%-----------------------------------------------------------------------------------
init_per_testcase(_Case, Config) ->
- ?line Dog = test_server:timetrap(?default_timeout),
%% main test process needs max prio
- ?line Prio = process_flag(priority, max),
- ?line MS = erlang:system_flag(multi_scheduling, block),
- [{prio,Prio},{watchdog,Dog},{multi_scheduling, MS}|Config].
+ Prio = process_flag(priority, max),
+ MS = erlang:system_flag(multi_scheduling, block),
+ [{prio,Prio},{multi_scheduling, MS}|Config].
end_per_testcase(_Case, Config) ->
erlang:system_flag(multi_scheduling, unblock),
- Dog=?config(watchdog, Config),
- Prio=?config(prio, Config),
+ Prio=proplists:get_value(prio, Config),
process_flag(priority, Prio),
- test_server:timetrap_cancel(Dog),
ok.
ok(Config) when is_list(Config) ->
- case ?config(multi_scheduling, Config) of
- blocked ->
- {comment,
- "Multi-scheduling blocked during test. This testcase was not "
- "written to work with multiple schedulers."};
- _ -> ok
+ case proplists:get_value(multi_scheduling, Config) of
+ blocked ->
+ {comment,
+ "Multi-scheduling blocked during test. This testcase was not "
+ "written to work with multiple schedulers."};
+ _ -> ok
end.
%% Run equal number of low and normal prio processes.
-equal(suite) -> [];
-equal(doc) -> [];
equal(Config) when is_list(Config) ->
- ?line Self = self(),
+ Self = self(),
%% specify number of test processes to run
Normal = {normal,500},
@@ -116,102 +95,96 @@ equal(Config) when is_list(Config) ->
Time = 30,
%% start controllers
- ?line Receiver =
- spawn(fun() -> receiver(erlang:monotonic_time(), Time, Self, Normal, Low) end),
- ?line Starter =
- spawn(fun() -> starter(Normal, Low, Receiver) end),
+ Receiver =
+ spawn(fun() -> receiver(erlang:monotonic_time(), Time, Self, Normal, Low) end),
+ Starter =
+ spawn(fun() -> starter(Normal, Low, Receiver) end),
%% receive test data from Receiver
- ?line {NRs,NAvg,LRs,LAvg,Ratio} =
- receive
- {Receiver,Res} -> Res
- end,
+ {NRs,NAvg,LRs,LAvg,Ratio} =
+ receive
+ {Receiver,Res} -> Res
+ end,
%% stop controllers and test processes
- ?line exit(Starter, kill),
- ?line exit(Receiver, kill),
+ exit(Starter, kill),
+ exit(Receiver, kill),
io:format("Reports: ~w normal (~w/proc), ~w low (~w/proc). Ratio: ~w~n",
- [NRs,NAvg,LRs,LAvg,Ratio]),
+ [NRs,NAvg,LRs,LAvg,Ratio]),
%% runtime ratio between normal and low should be ~8
if Ratio < 7.5 ; Ratio > 8.5 ->
- ?t:fail({bad_ratio,Ratio});
+ ct:fail({bad_ratio,Ratio});
true ->
- ok(Config)
+ ok(Config)
end.
%% Run many low and few normal prio processes.
-many_low(suite) -> [];
-many_low(doc) -> [];
many_low(Config) when is_list(Config) ->
- ?line Self = self(),
+ Self = self(),
Normal = {normal,1},
Low = {low,1000},
%% specify time of test (in seconds)
Time = 30,
- ?line Receiver =
- spawn(fun() -> receiver(erlang:monotonic_time(), Time, Self, Normal, Low) end),
- ?line Starter =
- spawn(fun() -> starter(Normal, Low, Receiver) end),
- ?line {NRs,NAvg,LRs,LAvg,Ratio} =
- receive
- {Receiver,Res} -> Res
- end,
- ?line exit(Starter, kill),
- ?line exit(Receiver, kill),
+ Receiver =
+ spawn(fun() -> receiver(erlang:monotonic_time(), Time, Self, Normal, Low) end),
+ Starter =
+ spawn(fun() -> starter(Normal, Low, Receiver) end),
+ {NRs,NAvg,LRs,LAvg,Ratio} =
+ receive
+ {Receiver,Res} -> Res
+ end,
+ exit(Starter, kill),
+ exit(Receiver, kill),
io:format("Reports: ~w normal (~w/proc), ~w low (~w/proc). Ratio: ~w~n",
- [NRs,NAvg,LRs,LAvg,Ratio]),
+ [NRs,NAvg,LRs,LAvg,Ratio]),
if Ratio < 7.5 ; Ratio > 8.5 ->
- ?t:fail({bad_ratio,Ratio});
+ ct:fail({bad_ratio,Ratio});
true ->
- ok(Config)
+ ok(Config)
end.
%% Run few low and many normal prio processes.
-few_low(suite) -> [];
-few_low(doc) -> [];
few_low(Config) when is_list(Config) ->
- ?line Self = self(),
+ Self = self(),
Normal = {normal,1000},
Low = {low,1},
%% specify time of test (in seconds)
Time = 30,
- ?line Receiver =
- spawn(fun() -> receiver(erlang:monotonic_time(), Time, Self, Normal, Low) end),
- ?line Starter =
- spawn(fun() -> starter(Normal, Low, Receiver) end),
- ?line {NRs,NAvg,LRs,LAvg,Ratio} =
- receive
- {Receiver,Res} -> Res
- end,
- ?line exit(Starter, kill),
- ?line exit(Receiver, kill),
+ Receiver =
+ spawn(fun() -> receiver(erlang:monotonic_time(), Time, Self, Normal, Low) end),
+ Starter =
+ spawn(fun() -> starter(Normal, Low, Receiver) end),
+ {NRs,NAvg,LRs,LAvg,Ratio} =
+ receive
+ {Receiver,Res} -> Res
+ end,
+ exit(Starter, kill),
+ exit(Receiver, kill),
io:format("Reports: ~w normal (~w/proc), ~w low (~w/proc). Ratio: ~w~n",
- [NRs,NAvg,LRs,LAvg,Ratio]),
+ [NRs,NAvg,LRs,LAvg,Ratio]),
if Ratio < 7.0 ; Ratio > 8.5 ->
- ?t:fail({bad_ratio,Ratio});
+ ct:fail({bad_ratio,Ratio});
true ->
- ok(Config)
+ ok(Config)
end.
%% Run max prio processes and verify they get at least as much
%% runtime as high, normal and low.
-max(suite) -> [];
-max(doc) -> [];
max(Config) when is_list(Config) ->
max = process_flag(priority, max), % should already be max (init_per_tc)
- ?line Self = self(),
+ Self = self(),
Max = {max,2},
High = {high,2},
Normal = {normal,100},
@@ -220,69 +193,67 @@ max(Config) when is_list(Config) ->
%% specify time of test (in seconds)
Time = 30,
- ?line Receiver1 =
- spawn(fun() -> receiver(erlang:monotonic_time(), Time, Self, Max, High) end),
- ?line Starter1 =
- spawn(fun() -> starter(Max, High, Receiver1) end),
- ?line {M1Rs,M1Avg,HRs,HAvg,Ratio1} =
- receive
- {Receiver1,Res1} -> Res1
- end,
- ?line exit(Starter1, kill),
- ?line exit(Receiver1, kill),
+ Receiver1 =
+ spawn(fun() -> receiver(erlang:monotonic_time(), Time, Self, Max, High) end),
+ Starter1 =
+ spawn(fun() -> starter(Max, High, Receiver1) end),
+ {M1Rs,M1Avg,HRs,HAvg,Ratio1} =
+ receive
+ {Receiver1,Res1} -> Res1
+ end,
+ exit(Starter1, kill),
+ exit(Receiver1, kill),
io:format("Reports: ~w max (~w/proc), ~w high (~w/proc). Ratio: ~w~n",
- [M1Rs,M1Avg,HRs,HAvg,Ratio1]),
+ [M1Rs,M1Avg,HRs,HAvg,Ratio1]),
if Ratio1 < 1.0 ->
- ?t:fail({bad_ratio,Ratio1});
+ ct:fail({bad_ratio,Ratio1});
true ->
- ok(Config)
+ ok(Config)
end,
- ?line Receiver2 =
- spawn(fun() -> receiver(erlang:monotonic_time(), Time, Self, Max, Normal) end),
- ?line Starter2 =
- spawn(fun() -> starter(Max, Normal, Receiver2) end),
- ?line {M2Rs,M2Avg,NRs,NAvg,Ratio2} =
- receive
- {Receiver2,Res2} -> Res2
- end,
- ?line exit(Starter2, kill),
- ?line exit(Receiver2, kill),
+ Receiver2 =
+ spawn(fun() -> receiver(erlang:monotonic_time(), Time, Self, Max, Normal) end),
+ Starter2 =
+ spawn(fun() -> starter(Max, Normal, Receiver2) end),
+ {M2Rs,M2Avg,NRs,NAvg,Ratio2} =
+ receive
+ {Receiver2,Res2} -> Res2
+ end,
+ exit(Starter2, kill),
+ exit(Receiver2, kill),
io:format("Reports: ~w max (~w/proc), ~w normal (~w/proc). Ratio: ~w~n",
- [M2Rs,M2Avg,NRs,NAvg,Ratio2]),
+ [M2Rs,M2Avg,NRs,NAvg,Ratio2]),
if Ratio2 < 1.0 ->
- ?t:fail({bad_ratio,Ratio2});
+ ct:fail({bad_ratio,Ratio2});
true ->
- ok
+ ok
end,
- ?line Receiver3 =
- spawn(fun() -> receiver(erlang:monotonic_time(), Time, Self, Max, Low) end),
- ?line Starter3 =
- spawn(fun() -> starter(Max, Low, Receiver3) end),
- ?line {M3Rs,M3Avg,LRs,LAvg,Ratio3} =
- receive
- {Receiver3,Res3} -> Res3
- end,
- ?line exit(Starter3, kill),
- ?line exit(Receiver3, kill),
+ Receiver3 =
+ spawn(fun() -> receiver(erlang:monotonic_time(), Time, Self, Max, Low) end),
+ Starter3 =
+ spawn(fun() -> starter(Max, Low, Receiver3) end),
+ {M3Rs,M3Avg,LRs,LAvg,Ratio3} =
+ receive
+ {Receiver3,Res3} -> Res3
+ end,
+ exit(Starter3, kill),
+ exit(Receiver3, kill),
io:format("Reports: ~w max (~w/proc), ~w low (~w/proc). Ratio: ~w~n",
- [M3Rs,M3Avg,LRs,LAvg,Ratio3]),
+ [M3Rs,M3Avg,LRs,LAvg,Ratio3]),
if Ratio3 < 1.0 ->
- ?t:fail({bad_ratio,Ratio3});
+ ct:fail({bad_ratio,Ratio3});
true ->
- ok(Config)
+ ok(Config)
end.
%% Run high prio processes and verify they get at least as much
%% runtime as normal and low.
-high(suite) -> [];
-high(doc) -> [];
high(Config) when is_list(Config) ->
max = process_flag(priority, max), % should already be max (init_per_tc)
- ?line Self = self(),
+ Self = self(),
High = {high,2},
Normal = {normal,100},
Low = {low,100},
@@ -290,40 +261,40 @@ high(Config) when is_list(Config) ->
%% specify time of test (in seconds)
Time = 30,
- ?line Receiver1 =
- spawn(fun() -> receiver(erlang:monotonic_time(), Time, Self, High, Normal) end),
- ?line Starter1 =
- spawn(fun() -> starter(High, Normal, Receiver1) end),
- ?line {H1Rs,H1Avg,NRs,NAvg,Ratio1} =
- receive
- {Receiver1,Res1} -> Res1
- end,
- ?line exit(Starter1, kill),
- ?line exit(Receiver1, kill),
+ Receiver1 =
+ spawn(fun() -> receiver(erlang:monotonic_time(), Time, Self, High, Normal) end),
+ Starter1 =
+ spawn(fun() -> starter(High, Normal, Receiver1) end),
+ {H1Rs,H1Avg,NRs,NAvg,Ratio1} =
+ receive
+ {Receiver1,Res1} -> Res1
+ end,
+ exit(Starter1, kill),
+ exit(Receiver1, kill),
io:format("Reports: ~w high (~w/proc), ~w normal (~w/proc). Ratio: ~w~n",
- [H1Rs,H1Avg,NRs,NAvg,Ratio1]),
+ [H1Rs,H1Avg,NRs,NAvg,Ratio1]),
if Ratio1 < 1.0 ->
- ?t:fail({bad_ratio,Ratio1});
+ ct:fail({bad_ratio,Ratio1});
true ->
- ok
+ ok
end,
- ?line Receiver2 =
- spawn(fun() -> receiver(erlang:monotonic_time(), Time, Self, High, Low) end),
- ?line Starter2 =
- spawn(fun() -> starter(High, Low, Receiver2) end),
- ?line {H2Rs,H2Avg,LRs,LAvg,Ratio2} =
- receive
- {Receiver2,Res2} -> Res2
- end,
- ?line exit(Starter2, kill),
- ?line exit(Receiver2, kill),
+ Receiver2 =
+ spawn(fun() -> receiver(erlang:monotonic_time(), Time, Self, High, Low) end),
+ Starter2 =
+ spawn(fun() -> starter(High, Low, Receiver2) end),
+ {H2Rs,H2Avg,LRs,LAvg,Ratio2} =
+ receive
+ {Receiver2,Res2} -> Res2
+ end,
+ exit(Starter2, kill),
+ exit(Receiver2, kill),
io:format("Reports: ~w high (~w/proc), ~w low (~w/proc). Ratio: ~w~n",
- [H2Rs,H2Avg,LRs,LAvg,Ratio2]),
+ [H2Rs,H2Avg,LRs,LAvg,Ratio2]),
if Ratio2 < 1.0 ->
- ?t:fail({bad_ratio,Ratio2});
+ ct:fail({bad_ratio,Ratio2});
true ->
- ok(Config)
+ ok(Config)
end.
@@ -338,38 +309,38 @@ receiver(T0, TimeSec, Main, {P1,P1N}, {P2,P2N}) ->
%% uncomment lines below to get life sign (debug)
receiver(T0, Time, Main, P1,P1N,P1Rs, P2,P2N,P2Rs, 0) ->
-% T = erlang:convert_time_unit(erlang:monotonic_time() - T0, native, milli_seconds),
-% erlang:display({round(T/1000),P1Rs,P2Rs}),
+ % T = erlang:convert_time_unit(erlang:monotonic_time() - T0, native, milli_seconds),
+ % erlang:display({round(T/1000),P1Rs,P2Rs}),
receiver(T0, Time, Main, P1,P1N,P1Rs, P2,P2N,P2Rs, 100000);
receiver(T0, Time, Main, P1,P1N,P1Rs, P2,P2N,P2Rs, C) ->
Remain = Time - erlang:convert_time_unit(erlang:monotonic_time() - T0,
- native, milli_seconds), % test time remaining
+ native, milli_seconds), % test time remaining
Remain1 = if Remain < 0 ->
- 0;
- true ->
- Remain
- end,
+ 0;
+ true ->
+ Remain
+ end,
{P1Rs1,P2Rs1} =
- receive
- {_Pid,P1} -> % report from a P1 process
- {P1Rs+1,P2Rs};
- {_Pid,P2} -> % report from a P2 process
- {P1Rs,P2Rs+1}
- after Remain1 ->
- {P1Rs,P2Rs}
- end,
+ receive
+ {_Pid,P1} -> % report from a P1 process
+ {P1Rs+1,P2Rs};
+ {_Pid,P2} -> % report from a P2 process
+ {P1Rs,P2Rs+1}
+ after Remain1 ->
+ {P1Rs,P2Rs}
+ end,
if Remain > 0 -> % keep going
- receiver(T0, Time, Main, P1,P1N,P1Rs1, P2,P2N,P2Rs1, C-1);
+ receiver(T0, Time, Main, P1,P1N,P1Rs1, P2,P2N,P2Rs1, C-1);
true -> % finish
- %% calculate results and send to main test process
- P1Avg = P1Rs1/P1N,
- P2Avg = P2Rs1/P2N,
- Ratio = if P2Avg < 1.0 -> P1Avg;
- true -> P1Avg/P2Avg
- end,
- Main ! {self(),{P1Rs1,round(P1Avg),P2Rs1,round(P2Avg),Ratio}},
- flush_loop()
+ %% calculate results and send to main test process
+ P1Avg = P1Rs1/P1N,
+ P2Avg = P2Rs1/P2N,
+ Ratio = if P2Avg < 1.0 -> P1Avg;
+ true -> P1Avg/P2Avg
+ end,
+ Main ! {self(),{P1Rs1,round(P1Avg),P2Rs1,round(P2Avg),Ratio}},
+ flush_loop()
end.
starter({P1,P1N}, {P2,P2N}, Receiver) ->
@@ -395,8 +366,8 @@ p_loop(100, Prio, Receiver) ->
receive after 0 -> ok end,
%% if Receiver gone, we're done
case is_process_alive(Receiver) of
- false -> exit(bye);
- true -> ok
+ false -> exit(bye);
+ true -> ok
end,
%% send report
Receiver ! {self(),Prio},
@@ -404,10 +375,10 @@ p_loop(100, Prio, Receiver) ->
p_loop(N, Prio, Receiver) ->
p_loop(N+1, Prio, Receiver).
-
+
flush_loop() ->
receive _ ->
- ok
+ ok
end,
flush_loop().
diff --git a/erts/emulator/test/op_SUITE.erl b/erts/emulator/test/op_SUITE.erl
index 4e15b27231..08655d32a5 100644
--- a/erts/emulator/test/op_SUITE.erl
+++ b/erts/emulator/test/op_SUITE.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.
@@ -22,66 +22,49 @@
-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,
- bsl_bsr/1,logical/1,t_not/1,relop_simple/1,relop/1,complex_relop/1]).
+-export([all/0, suite/0,
+ bsl_bsr/1,logical/1,t_not/1,relop_simple/1,relop/1,complex_relop/1]).
-export([]).
-import(lists, [foldl/3,flatmap/2]).
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap, {minutes, 5}}].
all() ->
[bsl_bsr, logical, t_not, relop_simple, relop,
complex_relop].
-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_atom(Case), is_list(Config) ->
- Dog=?t:timetrap(?t:minutes(3)),
- [{watchdog, Dog}|Config].
-
-end_per_testcase(_Case, Config) ->
- Dog=?config(watchdog, Config),
- ?t:timetrap_cancel(Dog).
-
%% Test the bsl and bsr operators.
bsl_bsr(Config) when is_list(Config) ->
Vs = [unvalue(V) || V <- [-16#8000009-2,-1,0,1,2,73,16#8000000,bad,[]]],
- Cases = [{Op,X,Y} || Op <- ['bsr','bsl'], X <- Vs, Y <- Vs],
- ?line run_test_module(Cases, false),
- {comment,integer_to_list(length(Cases)) ++ " cases"}.
+ %% Try to use less memory by splitting the cases
+
+ Cases1 = [{Op,X,Y} || Op <- ['bsl'], X <- Vs, Y <- Vs],
+ N1 = length(Cases1),
+ run_test_module(Cases1, false),
-logical(doc) -> "Test the logical operators and internal BIFs.";
+ Cases2 = [{Op,X,Y} || Op <- ['bsr'], X <- Vs, Y <- Vs],
+ N2 = length(Cases2),
+ run_test_module(Cases2, false),
+ {comment,integer_to_list(N1 + N2) ++ " cases"}.
+
+%% Test the logical operators and internal BIFs.
logical(Config) when is_list(Config) ->
Vs0 = [true,false,bad],
Vs = [unvalue(V) || V <- Vs0],
Cases = [{Op,X,Y} || Op <- ['and','or','xor'], X <- Vs, Y <- Vs],
- ?line run_test_module(Cases, false),
+ run_test_module(Cases, false),
{comment,integer_to_list(length(Cases)) ++ " cases"}.
-t_not(doc) -> "Test the not operator and internal BIFs.";
+%% Test the not operator and internal BIFs.
t_not(Config) when is_list(Config) ->
- ?line Cases = [{'not',unvalue(V)} || V <- [true,false,42,bad]],
- ?line run_test_module(Cases, false),
+ Cases = [{'not',unvalue(V)} || V <- [true,false,42,bad]],
+ run_test_module(Cases, false),
{comment,integer_to_list(length(Cases)) ++ " cases"}.
-relop_simple(doc) -> "Test that simlpe relations between relation operators hold.";
+%% Test that simlpe relations between relation operators hold.
relop_simple(Config) when is_list(Config) ->
Big1 = 19738924729729787487784874,
Big2 = 38374938373887374983978484,
@@ -90,52 +73,52 @@ relop_simple(Config) when is_list(Config) ->
T1 = erlang:make_tuple(3,87),
T2 = erlang:make_tuple(3,87),
Terms = [-F2,Big2,-F1,-Big1,-33,-33.0,0,0.0,42,42.0,Big1,F1,Big2,F2,a,b,
- {T1,a},{T2,b},[T1,Big1],[T2,Big2]],
-
- ?line Combos = [{V1,V2} || V1 <- Terms, V2 <- Terms],
-
+ {T1,a},{T2,b},[T1,Big1],[T2,Big2]],
+
+ Combos = [{V1,V2} || V1 <- Terms, V2 <- Terms],
+
lists:foreach(fun({A,B}) -> relop_simple_do(A,B) end,
- Combos),
+ Combos),
repeat(fun() ->
- Size = rand:uniform(100),
- Rnd1 = make_rand_term(Size),
- {Rnd2,0} = clone_and_mutate(Rnd1, rand:uniform(Size)),
- relop_simple_do(Rnd1,Rnd2)
- end,
- 1000),
+ Size = rand:uniform(100),
+ Rnd1 = make_rand_term(Size),
+ {Rnd2,0} = clone_and_mutate(Rnd1, rand:uniform(Size)),
+ relop_simple_do(Rnd1,Rnd2)
+ end,
+ 1000),
ok.
relop_simple_do(V1,V2) ->
%%io:format("compare ~p\n and ~p\n",[V1,V2]),
L = V1 < V2,
- ?line L = not (V1 >= V2),
- ?line L = V2 > V1,
- ?line L = not (V2 =< V1),
+ L = not (V1 >= V2),
+ L = V2 > V1,
+ L = not (V2 =< V1),
G = V1 > V2,
- ?line G = not (V1 =< V2),
- ?line G = V2 < V1,
- ?line G = not (V2 >= V1),
-
+ G = not (V1 =< V2),
+ G = V2 < V1,
+ G = not (V2 >= V1),
+
ID = V1 =:= V2,
- ?line ID = V2 =:= V1,
- ?line ID = not (V1 =/= V2),
- ?line ID = not (V2 =/= V1),
-
+ ID = V2 =:= V1,
+ ID = not (V1 =/= V2),
+ ID = not (V2 =/= V1),
+
EQ = V1 == V2,
- ?line EQ = V2 == V1,
- ?line EQ = not (V1 /= V2),
- ?line EQ = not (V2 /= V1),
-
- ?line case {L, EQ, ID, G, cmp_emu(V1,V2)} of
- { true, false, false, false, -1} -> ok;
- {false, true, false, false, 0} -> ok;
- {false, true, true, false, 0} -> ok;
- {false, false, false, true, +1} -> ok
- end.
-
+ EQ = V2 == V1,
+ EQ = not (V1 /= V2),
+ EQ = not (V2 /= V1),
+
+ case {L, EQ, ID, G, cmp_emu(V1,V2)} of
+ { true, false, false, false, -1} -> ok;
+ {false, true, false, false, 0} -> ok;
+ {false, true, true, false, 0} -> ok;
+ {false, false, false, true, +1} -> ok
+ end.
+
%% Emulate internal "cmp"
cmp_emu(A,B) when is_tuple(A), is_tuple(B) ->
SA = size(A),
@@ -146,8 +129,8 @@ cmp_emu(A,B) when is_tuple(A), is_tuple(B) ->
end;
cmp_emu([A|TA],[B|TB]) ->
case cmp_emu(A,B) of
- 0 -> cmp_emu(TA,TB);
- CMP -> CMP
+ 0 -> cmp_emu(TA,TB);
+ CMP -> CMP
end;
cmp_emu(A,B) ->
%% We cheat and use real "cmp" for the primitive types.
@@ -155,35 +138,35 @@ cmp_emu(A,B) ->
A > B -> +1;
true -> 0
end.
-
+
make_rand_term(1) ->
make_rand_term_single();
make_rand_term(Arity) ->
case rand:uniform(3) of
- 1 ->
- make_rand_list(Arity);
- 2 ->
- list_to_tuple(make_rand_list(Arity));
- 3 ->
- {Car,Rest} = make_rand_term_rand_size(Arity),
- [Car|make_rand_term(Rest)]
+ 1 ->
+ make_rand_list(Arity);
+ 2 ->
+ list_to_tuple(make_rand_list(Arity));
+ 3 ->
+ {Car,Rest} = make_rand_term_rand_size(Arity),
+ [Car|make_rand_term(Rest)]
end.
make_rand_term_single() ->
Range = 1 bsl rand:uniform(200),
case rand:uniform(12) of
- 1 -> random;
- 2 -> uniform;
- 3 -> rand:uniform(Range) - (Range div 2);
- 4 -> Range * (rand:uniform() - 0.5);
- 5 -> 0;
- 6 -> 0.0;
- 7 -> make_ref();
- 8 -> self();
- 9 -> term_to_binary(rand:uniform(Range));
- 10 -> fun(X) -> X*Range end;
- 11 -> fun(X) -> X/Range end;
- 12 -> []
+ 1 -> random;
+ 2 -> uniform;
+ 3 -> rand:uniform(Range) - (Range div 2);
+ 4 -> Range * (rand:uniform() - 0.5);
+ 5 -> 0;
+ 6 -> 0.0;
+ 7 -> make_ref();
+ 8 -> self();
+ 9 -> term_to_binary(rand:uniform(Range));
+ 10 -> fun(X) -> X*Range end;
+ 11 -> fun(X) -> X/Range end;
+ 12 -> []
end.
make_rand_term_rand_size(1) ->
@@ -196,7 +179,7 @@ make_rand_list(0) -> [];
make_rand_list(Arity) ->
{Term, Rest} = make_rand_term_rand_size(Arity),
[Term | make_rand_list(Rest)].
-
+
clone_and_mutate(Term, 0) ->
{clone(Term), 0};
@@ -219,82 +202,81 @@ clone(Term) ->
my_list_to_tuple(List) ->
try list_to_tuple(List)
catch
- error:badarg ->
- %%io:format("my_list_to_tuple got badarg exception.\n"),
- list_to_tuple(purify_list(List))
+ error:badarg ->
+ %%io:format("my_list_to_tuple got badarg exception.\n"),
+ list_to_tuple(purify_list(List))
end.
-
+
purify_list(List) ->
lists:reverse(purify_list(List, [])).
purify_list([], Acc) -> Acc;
purify_list([H|T], Acc) -> purify_list(T, [H|Acc]);
purify_list(Other, Acc) -> [Other|Acc].
-
-relop(doc) -> "Test the relational operators and internal BIFs on literals.";
+
+%% Test the relational operators and internal BIFs on literals.
relop(Config) when is_list(Config) ->
Big1 = -38374938373887374983978484,
Big2 = 19738924729729787487784874,
F1 = float(Big1),
F2 = float(Big2),
Vs0 = [a,b,-33,-33.0,0,0.0,42,42.0,Big1,Big2,F1,F2],
- ?line Vs = [unvalue(V) || V <- Vs0],
+ Vs = [unvalue(V) || V <- Vs0],
Ops = ['==', '/=', '=:=', '=/=', '<', '=<', '>', '>='],
- ?line binop(Ops, Vs).
+ binop(Ops, Vs).
-complex_relop(doc) ->
- "Test the relational operators and internal BIFs on lists and tuples.";
+%% Test the relational operators and internal BIFs on lists and tuples.
complex_relop(Config) when is_list(Config) ->
Big = 99678557475484872464269855544643333,
Float = float(Big),
Vs0 = [an_atom,42.0,42,Big,Float],
Vs = flatmap(fun(X) -> [unvalue({X}),unvalue([X])] end, Vs0),
Ops = ['==', '/=', '=:=', '=/=', '<', '=<', '>', '>='],
- ?line binop(Ops, Vs).
+ binop(Ops, Vs).
binop(Ops, Vs) ->
- Run = fun(Op, N) -> ?line Cases = [{Op,V1,V2} || V1 <- Vs, V2 <- Vs],
- ?line run_test_module(Cases, true),
- N + length(Cases) end,
- ?line NumCases = foldl(Run, 0, Ops),
+ Run = fun(Op, N) -> Cases = [{Op,V1,V2} || V1 <- Vs, V2 <- Vs],
+ run_test_module(Cases, true),
+ N + length(Cases) end,
+ NumCases = foldl(Run, 0, Ops),
{comment,integer_to_list(NumCases) ++ " cases"}.
-
+
run_test_module(Cases, GuardsOk) ->
- ?line Es = [expr(C) || C <- Cases],
- ?line Ok = unvalue(ok),
- ?line Gts = case GuardsOk of
- true ->
- Ges = [guard_expr(C) || C <- Cases],
- ?line lists:foldr(fun guard_test/2, [Ok], Ges);
- false ->
- [Ok]
- end,
- ?line Fun1 = make_function(guard_tests, Gts),
- ?line Bts = lists:foldr(fun body_test/2, [Ok], Es),
- ?line Fun2 = make_function(body_tests, Bts),
- ?line Bbts = lists:foldr(fun internal_bif/2, [Ok], Es),
- ?line Fun3 = make_function(bif_tests, Bbts),
- ?line Id = {function,1,id,1,[{clause,1,[{var,1,'I'}],[],[{var,1,'I'}]}]},
+ Es = [expr(C) || C <- Cases],
+ Ok = unvalue(ok),
+ Gts = case GuardsOk of
+ true ->
+ Ges = [guard_expr(C) || C <- Cases],
+ lists:foldr(fun guard_test/2, [Ok], Ges);
+ false ->
+ [Ok]
+ end,
+ Fun1 = make_function(guard_tests, Gts),
+ Bts = lists:foldr(fun body_test/2, [Ok], Es),
+ Fun2 = make_function(body_tests, Bts),
+ Bbts = lists:foldr(fun internal_bif/2, [Ok], Es),
+ Fun3 = make_function(bif_tests, Bbts),
+ Id = {function,1,id,1,[{clause,1,[{var,1,'I'}],[],[{var,1,'I'}]}]},
Module0 = make_module(op_tests, [Fun1,Fun2,Fun3,Id]),
Module = erl_parse:new_anno(Module0),
- ?line lists:foreach(fun(F) -> io:put_chars([erl_pp:form(F),"\n"]) end, Module),
+ lists:foreach(fun(F) -> io:put_chars([erl_pp:form(F),"\n"]) end, Module),
%% Compile, load, and run the generated module.
- Native = case ?t:is_native(?MODULE) of
- true -> [native];
- false -> []
- end,
- ?line {ok,Mod,Code1} = compile:forms(Module, [time|Native]),
- ?line code:delete(Mod),
- ?line code:purge(Mod),
- ?line {module,Mod} = code:load_binary(Mod, Mod, Code1),
- ?line run_function(Mod, guard_tests),
- ?line run_function(Mod, body_tests),
- ?line run_function(Mod, bif_tests),
-
- ?line true = code:delete(Mod),
- ?line code:purge(Mod),
+ Native = case test_server:is_native(?MODULE) of
+ true -> [native];
+ false -> []
+ end,
+ {ok,Mod,Code1} = compile:forms(Module, [time|Native]),
+ code:delete(Mod),
+ code:purge(Mod),
+ {module,Mod} = code:load_binary(Mod, Mod, Code1),
+ run_function(Mod, guard_tests),
+ run_function(Mod, body_tests),
+ run_function(Mod, bif_tests),
+
+ true = code:delete(Mod),
+ code:purge(Mod),
ok.
@@ -318,19 +300,19 @@ guard_expr({Op,X,Y}) ->
run_function(Mod, Name) ->
case catch Mod:Name() of
- {'EXIT',Reason} ->
- io:format("~p", [get(last)]),
- ?t:fail({'EXIT',Reason});
- _Other ->
- ok
+ {'EXIT',Reason} ->
+ io:format("~p", [get(last)]),
+ ct:fail({'EXIT',Reason});
+ _Other ->
+ ok
end.
-
+
guard_test({E,Expr,Res}, Tail) ->
True = unvalue(true),
[save_term(Expr),
{match,1,unvalue(Res),
{'if',1,[{clause,1,[],[[E]],[True]},
- {clause,1,[],[[True]],[unvalue(false)]}]}}|Tail].
+ {clause,1,[],[[True]],[unvalue(false)]}]}}|Tail].
body_test({E,Expr,{'EXIT',_}}, Tail) ->
[save_term(Expr),
@@ -356,8 +338,8 @@ internal_bif(Op, Args, Expr, Res, Tail) ->
save_term(Term) ->
{call,1,
- {atom,1,put},
- [{atom,1,last},unvalue(Term)]}.
+ {atom,1,put},
+ [{atom,1,last},unvalue(Term)]}.
make_module(Name, Funcs) ->
[{attribute,1,module,Name},
@@ -367,18 +349,18 @@ make_module(Name, Funcs) ->
make_function(Name, Body) ->
{function,1,Name,0,[{clause,1,[],[],Body}]}.
-
+
eval(E0) ->
E = erl_parse:new_anno(E0),
- ?line case catch erl_eval:exprs(E, []) of
- {'EXIT',Reason} -> {'EXIT',Reason};
- {value,Val,_Bs} -> Val
- end.
+ case catch erl_eval:exprs(E, []) of
+ {'EXIT',Reason} -> {'EXIT',Reason};
+ {value,Val,_Bs} -> Val
+ end.
unvalue(V) ->
Abstr = erl_parse:abstract(V),
erl_parse:anno_to_term(Abstr).
-
+
value({nil,_}) -> [];
value({integer,_,X}) -> X;
value({string,_,X}) -> X;
diff --git a/erts/emulator/test/port_SUITE.erl b/erts/emulator/test/port_SUITE.erl
index 5274da301a..79abcbde5f 100644
--- a/erts/emulator/test/port_SUITE.erl
+++ b/erts/emulator/test/port_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.
@@ -74,26 +74,27 @@
%%
--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,
- stream_small/1, stream_big/1,
- basic_ping/1, slow_writes/1, bad_packet/1, bad_port_messages/1,
- mul_basic/1, mul_slow_writes/1,
- dying_port/1, port_program_with_path/1,
- open_input_file_port/1, open_output_file_port/1,
+-export([all/0, suite/0, groups/0,
+ init_per_testcase/2, end_per_testcase/2,
+ init_per_suite/1, end_per_suite/1,
+ stream_small/1, stream_big/1,
+ basic_ping/1, slow_writes/1, bad_packet/1, bad_port_messages/1,
+ mul_basic/1, mul_slow_writes/1,
+ dying_port/1, port_program_with_path/1,
+ open_input_file_port/1, open_output_file_port/1,
count_fds/1,
- iter_max_ports/1, eof/1, input_only/1, output_only/1,
- name1/1,
- t_binary/1, parallell/1, t_exit/1,
- env/1, huge_env/1, bad_env/1, cd/1, exit_status/1,
- tps_16_bytes/1, tps_1K/1, line/1, stderr_to_stdout/1,
- otp_3906/1, otp_4389/1, win_massive/1, win_massive_client/1,
- mix_up_ports/1, otp_5112/1, otp_5119/1, otp_6224/1,
- exit_status_multi_scheduling_block/1, ports/1,
- spawn_driver/1, spawn_executable/1, close_deaf_port/1,
- port_setget_data/1,
- unregister_name/1, parallelism_option/1]).
+ iter_max_ports/1, eof/1, input_only/1, output_only/1,
+ name1/1,
+ t_binary/1, parallell/1, t_exit/1,
+ env/1, huge_env/1, bad_env/1, cd/1, exit_status/1,
+ bad_args/1,
+ tps_16_bytes/1, tps_1K/1, line/1, stderr_to_stdout/1,
+ otp_3906/1, otp_4389/1, win_massive/1, win_massive_client/1,
+ mix_up_ports/1, otp_5112/1, otp_5119/1, otp_6224/1,
+ exit_status_multi_scheduling_block/1, ports/1,
+ spawn_driver/1, spawn_executable/1, close_deaf_port/1,
+ port_setget_data/1,
+ unregister_name/1, parallelism_option/1]).
-export([do_iter_max_ports/2]).
@@ -105,7 +106,9 @@
-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, {seconds, 10}}].
all() ->
[otp_6224, {group, stream}, basic_ping, slow_writes,
@@ -113,6 +116,7 @@ all() ->
{group, multiple_packets}, parallell, dying_port,
port_program_with_path, open_input_file_port,
open_output_file_port, name1, env, huge_env, bad_env, cd,
+ bad_args,
exit_status, iter_max_ports, count_fds, t_exit, {group, tps}, line,
stderr_to_stdout, otp_3906, otp_4389, win_massive,
mix_up_ports, otp_5112, otp_5119,
@@ -127,15 +131,6 @@ groups() ->
{multiple_packets, [], [mul_basic, mul_slow_writes]},
{tps, [], [tps_16_bytes, tps_1K]}].
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
-
-
--define(DEFAULT_TIMEOUT, ?t:minutes(5)).
-
init_per_testcase(Case, Config) ->
[{testcase, Case} |Config].
@@ -155,69 +150,63 @@ end_per_suite(Config) when is_list(Config) ->
%% on a Windows machine given the correct environment.
win_massive(Config) when is_list(Config) ->
case os:type() of
- {win32,_} ->
- do_win_massive();
- _ ->
- {skip,"Only on Windows."}
+ {win32,_} ->
+ do_win_massive();
+ _ ->
+ {skip,"Only on Windows."}
end.
do_win_massive() ->
- Dog = test_server:timetrap(test_server:seconds(360)),
+ ct:timetrap({minutes, 6}),
SuiteDir = filename:dirname(code:which(?MODULE)),
Ports = " +Q 8192",
{ok, Node} =
- test_server:start_node(win_massive,
- slave,
- [{args, " -pa " ++ SuiteDir ++ Ports}]),
+ test_server:start_node(win_massive,
+ slave,
+ [{args, " -pa " ++ SuiteDir ++ Ports}]),
ok = rpc:call(Node,?MODULE,win_massive_client,[3000]),
test_server:stop_node(Node),
- test_server:timetrap_cancel(Dog),
ok.
-
+
win_massive_client(N) ->
{ok,P}=gen_tcp:listen(?WIN_MASSIVE_PORT,[{reuseaddr,true}]),
L = win_massive_loop(P,N),
Len = length(L),
lists:foreach(fun(E) ->
- gen_tcp:close(E)
- end,
- L),
+ gen_tcp:close(E)
+ end,
+ L),
case Len div 2 of
- N ->
- ok;
- _Else ->
- {too_few, Len}
+ N ->
+ ok;
+ _Else ->
+ {too_few, Len}
end.
win_massive_loop(_,0) ->
[];
win_massive_loop(P,N) ->
case (catch gen_tcp:connect("localhost",?WIN_MASSIVE_PORT,[])) of
- {ok,A} ->
- case (catch gen_tcp:accept(P)) of
- {ok,B} ->
- %erlang:display(N),
- [A,B|win_massive_loop(P,N-1)];
- _Else ->
- [A]
- end;
- _Else0 ->
- []
+ {ok,A} ->
+ case (catch gen_tcp:accept(P)) of
+ {ok,B} ->
+ %erlang:display(N),
+ [A,B|win_massive_loop(P,N-1)];
+ _Else ->
+ [A]
+ end;
+ _Else0 ->
+ []
end.
-
-
-
%% Test that we can send a stream of bytes and get it back.
%% We will send only a small amount of data, to avoid deadlock.
stream_small(Config) when is_list(Config) ->
- Dog = test_server:timetrap(test_server:seconds(10)),
stream_ping(Config, 512, "", []),
stream_ping(Config, 1777, "", []),
stream_ping(Config, 1777, "-s512", []),
- test_server:timetrap_cancel(Dog),
ok.
%% Send big amounts of data (much bigger than the buffer size in port test).
@@ -225,22 +214,20 @@ stream_small(Config) when is_list(Config) ->
%% non-blocking reads and writes.
stream_big(Config) when is_list(Config) ->
- Dog = test_server:timetrap(test_server:seconds(180)),
+ ct:timetrap({seconds, 180}),
stream_ping(Config, 43755, "", []),
stream_ping(Config, 100000, "", []),
stream_ping(Config, 77777, " -s40000", []),
- test_server:timetrap_cancel(Dog),
ok.
%% Sends packet with header size of 1, 2, and 4, with packets of various
%% sizes.
basic_ping(Config) when is_list(Config) ->
- Dog = test_server:timetrap(test_server:seconds(120)),
+ ct:timetrap({minutes, 2}),
ping(Config, sizes(1), 1, "", []),
ping(Config, sizes(2), 2, "", []),
ping(Config, sizes(4), 4, "", []),
- test_server:timetrap_cancel(Dog),
ok.
%% Let the port program insert delays between characters sent back to
@@ -248,17 +235,13 @@ basic_ping(Config) when is_list(Config) ->
%% small chunks rather than all at once.
slow_writes(Config) when is_list(Config) ->
- Dog = test_server:timetrap(test_server:seconds(20)),
ping(Config, [8], 4, "-s1", []),
ping(Config, [10], 2, "-s2", []),
- test_server:timetrap_cancel(Dog),
ok.
-bad_packet(doc) ->
- ["Test that we get {'EXIT', Port, einval} if we try to send a bigger "
- "packet than the packet header allows."];
+%% Test that we get {'EXIT', Port, einval} if we try to send a bigger
+%% packet than the packet header allows.
bad_packet(Config) when is_list(Config) ->
- Dog = test_server:timetrap(test_server:seconds(10)),
PortTest = port_test(Config),
process_flag(trap_exit, true),
@@ -266,16 +249,14 @@ bad_packet(Config) when is_list(Config) ->
bad_packet(PortTest, 1, 257),
bad_packet(PortTest, 2, 65536),
bad_packet(PortTest, 2, 65537),
-
- test_server:timetrap_cancel(Dog),
ok.
bad_packet(PortTest, HeaderSize, PacketSize) ->
P = open_port({spawn, PortTest}, [{packet, HeaderSize}]),
P ! {self(), {command, make_zero_packet(PacketSize)}},
receive
- {'EXIT', P, einval} -> ok;
- Other -> test_server:fail({unexpected_message, Other})
+ {'EXIT', P, einval} -> ok;
+ Other -> ct:fail({unexpected_message, Other})
end.
make_zero_packet(0) -> [];
@@ -288,7 +269,6 @@ make_zero_packet(N) ->
%% Test sending bad messages to a port.
bad_port_messages(Config) when is_list(Config) ->
- Dog = test_server:timetrap(test_server:seconds(10)),
PortTest = port_test(Config),
process_flag(trap_exit, true),
@@ -296,16 +276,14 @@ bad_port_messages(Config) when is_list(Config) ->
bad_message(PortTest, {a}),
bad_message(PortTest, {self(),{command,bad_command}}),
bad_message(PortTest, {self(),{connect,no_pid}}),
-
- test_server:timetrap_cancel(Dog),
ok.
bad_message(PortTest, Message) ->
P = open_port({spawn,PortTest}, []),
P ! Message,
receive
- {'EXIT',P,badsig} -> ok;
- Other -> test_server:fail({unexpected_message, Other})
+ {'EXIT',P,badsig} -> ok;
+ Other -> ct:fail({unexpected_message, Other})
end.
%% Tests various options (stream and {packet, Number} are implicitly
@@ -315,7 +293,7 @@ bad_message(PortTest, Message) ->
%% Tests the 'binary' option for a port.
t_binary(Config) when is_list(Config) ->
- Dog = test_server:timetrap(test_server:seconds(300)),
+ ct:timetrap({seconds, 300}),
%% Packet mode.
ping(Config, sizes(1), 1, "", [binary]),
@@ -326,12 +304,10 @@ t_binary(Config) when is_list(Config) ->
stream_ping(Config, 435, "", [binary]),
stream_ping(Config, 43755, "", [binary]),
stream_ping(Config, 100000, "", [binary]),
-
- test_server:timetrap_cancel(Dog),
ok.
name1(Config) when is_list(Config) ->
- Dog = test_server:timetrap(test_server:seconds(100)),
+ ct:timetrap({seconds, 100}),
PortTest = port_test(Config),
Command = lists:concat([PortTest, " "]),
P = open_port({spawn, Command}, []),
@@ -348,13 +324,12 @@ name1(Config) when is_list(Config) ->
{P, closed} -> ok
end,
undefined = whereis(myport),
- test_server:timetrap_cancel(Dog),
ok.
%% Test that the 'eof' option works.
eof(Config) when is_list(Config) ->
- Dog = test_server:timetrap(test_server:seconds(100)),
+ ct:timetrap({seconds, 100}),
PortTest = port_test(Config),
Command = lists:concat([PortTest, " -h0 -q"]),
P = open_port({spawn, Command}, [eof]),
@@ -366,26 +341,24 @@ eof(Config) when is_list(Config) ->
receive
{P, closed} -> ok
end,
- test_server:timetrap_cancel(Dog),
ok.
%% Tests that the 'in' option for a port works.
input_only(Config) when is_list(Config) ->
- Dog = test_server:timetrap(test_server:seconds(300)),
+ ct:timetrap({seconds, 300}),
expect_input(Config, [0, 1, 10, 13, 127, 128, 255], 1, "", [in]),
expect_input(Config, [0, 1, 255, 2048], 2, "", [in]),
expect_input(Config, [0, 1, 255, 2048], 4, "", [in]),
expect_input(Config, [0, 1, 10, 13, 127, 128, 255],
1, "", [in, binary]),
- test_server:timetrap_cancel(Dog),
ok.
%% Tests that the 'out' option for a port works.
output_only(Config) when is_list(Config) ->
- Dog = test_server:timetrap(test_server:seconds(100)),
- Dir = ?config(priv_dir, Config),
+ ct:timetrap({seconds, 100}),
+ Dir = proplists:get_value(priv_dir, Config),
%% First we test that the port program gets the data
Filename = filename:join(Dir, "output_only_stream"),
@@ -399,8 +372,6 @@ output_only(Config) when is_list(Config) ->
%% Then we test that any writes to stdout from
%% the port program is not sent to erlang
output_and_verify(Config, ["-h0"], Data),
-
- test_server:timetrap_cancel(Dog),
ok.
output_and_verify(Config, Options, Data) ->
@@ -421,11 +392,10 @@ output_and_verify(Config, Options, Data) ->
%% Basic test of receiving multiple packages, written in
%% one operation by the other end.
mul_basic(Config) when is_list(Config) ->
- Dog = test_server:timetrap(test_server:seconds(600)),
+ ct:timetrap({minutes, 10}),
expect_input(Config, [0, 1, 255, 10, 13], 1, "", []),
expect_input(Config, [0, 10, 13, 1600, 32767, 65535], 2, "", []),
expect_input(Config, [10, 70000], 4, "", []),
- test_server:timetrap_cancel(Dog),
ok.
%% Test reading a buffer consisting of several packets, some
@@ -434,9 +404,8 @@ mul_basic(Config) when is_list(Config) ->
%% delays in between.)
mul_slow_writes(Config) when is_list(Config) ->
- Dog = test_server:timetrap(test_server:seconds(250)),
+ ct:timetrap({minutes, 4}),
expect_input(Config, [0, 20, 255, 10, 1], 1, "-s64", []),
- test_server:timetrap_cancel(Dog),
ok.
%% Runs several port tests in parallell. Each individual test
@@ -444,27 +413,26 @@ mul_slow_writes(Config) when is_list(Config) ->
%% should also finish in about 5 seconds.
parallell(Config) when is_list(Config) ->
- Dog = test_server:timetrap(test_server:seconds(300)),
+ ct:timetrap({minutes, 5}),
Testers = [
- fun() -> stream_ping(Config, 1007, "-s100", []) end,
- fun() -> stream_ping(Config, 10007, "-s1000", []) end,
- fun() -> stream_ping(Config, 10007, "-s1000", []) end,
+ fun() -> stream_ping(Config, 1007, "-s100", []) end,
+ fun() -> stream_ping(Config, 10007, "-s1000", []) end,
+ fun() -> stream_ping(Config, 10007, "-s1000", []) end,
- fun() -> expect_input(Config, [21, 22, 23, 24, 25], 1,
- "-s10", [in]) end,
+ fun() -> expect_input(Config, [21, 22, 23, 24, 25], 1,
+ "-s10", [in]) end,
- fun() -> ping(Config, [10], 1, "-d", []) end,
- fun() -> ping(Config, [20000], 2, "-d", []) end,
- fun() -> ping(Config, [101], 1, "-s10", []) end,
- fun() -> ping(Config, [1001], 2, "-s100", []) end,
- fun() -> ping(Config, [10001], 4, "-s1000", []) end,
+ fun() -> ping(Config, [10], 1, "-d", []) end,
+ fun() -> ping(Config, [20000], 2, "-d", []) end,
+ fun() -> ping(Config, [101], 1, "-s10", []) end,
+ fun() -> ping(Config, [1001], 2, "-s100", []) end,
+ fun() -> ping(Config, [10001], 4, "-s1000", []) end,
- fun() -> ping(Config, [501, 501], 2, "-s100", []) end,
- fun() -> ping(Config, [11, 12, 13, 14, 11], 1, "-s5", []) end],
+ fun() -> ping(Config, [501, 501], 2, "-s100", []) end,
+ fun() -> ping(Config, [11, 12, 13, 14, 11], 1, "-s5", []) end],
process_flag(trap_exit, true),
Pids = lists:map(fun fun_spawn/1, Testers),
wait_for(Pids),
- test_server:timetrap_cancel(Dog),
ok.
wait_for([]) ->
@@ -472,18 +440,17 @@ wait_for([]) ->
wait_for(Pids) ->
io:format("Waiting for ~p", [Pids]),
receive
- {'EXIT', Pid, normal} ->
- wait_for(lists:delete(Pid, Pids));
- Other ->
- test_server:fail({bad_exit, Other})
+ {'EXIT', Pid, normal} ->
+ wait_for(lists:delete(Pid, Pids));
+ Other ->
+ ct:fail({bad_exit, Other})
end.
%% Tests starting port programs that terminate by themselves.
%% This used to cause problems on Windows.
-dying_port(suite) -> [];
dying_port(Config) when is_list(Config) ->
- Dog = test_server:timetrap(test_server:seconds(150)),
+ ct:timetrap({minutes, 2}),
process_flag(trap_exit, true),
P1 = make_dying_port(Config),
@@ -504,14 +471,12 @@ dying_port(Config) when is_list(Config) ->
wait_for_port_exit(P3),
wait_for_port_exit(P4),
wait_for_port_exit(P5),
-
- test_server:timetrap_cancel(Dog),
ok.
wait_for_port_exit(Port) ->
receive
- {'EXIT', Port, _} ->
- ok
+ {'EXIT', Port, _} ->
+ ok
end.
make_dying_port(Config) when is_list(Config) ->
@@ -530,22 +495,21 @@ make_dying_port(Config) when is_list(Config) ->
%%
%% This testcase works on Unix, but is not very useful.
-port_program_with_path(suite) -> [];
port_program_with_path(Config) when is_list(Config) ->
- Dog = test_server:timetrap(test_server:seconds(100)),
- DataDir = ?config(data_dir, Config),
- PrivDir = ?config(priv_dir, Config),
-
+ ct:timetrap({minutes, 2}),
+ DataDir = proplists:get_value(data_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
+
%% Create a copy of the port test program in a directory not
%% included in PATH (i.e. in priv_dir), with the name 'my_port_test.exe'.
%% Also, place a file named 'my_port_test' in the same directory.
%% This used to confuse the CreateProcess() call in spawn driver.
%% (On Unix, there will be a single file created, which will be
%% a copy of the port program.)
-
+
PortTest = os:find_executable("port_test", DataDir),
io:format("os:find_executable(~p, ~p) returned ~p",
- ["port_test", DataDir, PortTest]),
+ ["port_test", DataDir, PortTest]),
{ok, PortTestPgm} = file:read_file(PortTest),
NewName = filename:join(PrivDir, filename:basename(PortTest)),
RedHerring = filename:rootname(NewName),
@@ -553,12 +517,12 @@ port_program_with_path(Config) when is_list(Config) ->
ok = file:write_file(NewName, PortTestPgm),
ok = file:write_file_info(NewName, #file_info{mode=8#111}),
PgmWithPathAndNoExt = filename:rootname(NewName),
-
+
%% Open the port using the path to the copied port test program,
%% but without the .exe extension, and verified that it was started.
%%
%% If the bug is present the open_port call will fail with badarg.
-
+
Command = lists:concat([PgmWithPathAndNoExt, " -h2"]),
P = open_port({spawn, Command}, [{packet, 2}]),
Message = "echo back to me",
@@ -567,17 +531,14 @@ port_program_with_path(Config) when is_list(Config) ->
{P, {data, Message}} ->
ok
end,
- test_server:timetrap_cancel(Dog),
ok.
%% Tests that files can be read using open_port(Filename, [in]).
%% This used to fail on Windows.
-open_input_file_port(suite) -> [];
open_input_file_port(Config) when is_list(Config) ->
- Dog = test_server:timetrap(test_server:seconds(10)),
- PrivDir = ?config(priv_dir, Config),
-
+ PrivDir = proplists:get_value(priv_dir, Config),
+
%% Create a file with the file driver and read it back using
%% open_port/2.
@@ -585,20 +546,18 @@ open_input_file_port(Config) when is_list(Config) ->
FileData1 = "An input file",
ok = file:write_file(MyFile1, FileData1),
case open_port(MyFile1, [in]) of
- InputPort when is_port(InputPort) ->
- receive
- {InputPort, {data, FileData1}} ->
- ok
- end
+ InputPort when is_port(InputPort) ->
+ receive
+ {InputPort, {data, FileData1}} ->
+ ok
+ end
end,
- test_server:timetrap_cancel(Dog),
ok.
%% Tests that files can be written using open_port(Filename, [out]).
-open_output_file_port(suite) -> [];
open_output_file_port(Config) when is_list(Config) ->
- Dog = test_server:timetrap(test_server:seconds(100)),
- PrivDir = ?config(priv_dir, Config),
+ ct:timetrap({minutes, 2}),
+ PrivDir = proplists:get_value(priv_dir, Config),
%% Create a file with open_port/2 and read it back with
%% the file driver.
@@ -613,12 +572,9 @@ open_output_file_port(Config) when is_list(Config) ->
OutputPort ! {self(), close},
{ok, Bin} = file:read_file(MyFile2),
FileData2 = binary_to_list(Bin),
-
- test_server:timetrap_cancel(Dog),
ok.
%% Tests that all appropriate fd's have been closed in the port program
-count_fds(suite) -> [];
count_fds(Config) when is_list(Config) ->
case os:type() of
{unix, _} ->
@@ -637,9 +593,9 @@ count_fds(Config) when is_list(Config) ->
{ok, Written} = file:read_file(Filename),
Written
end,
- <<4:32/native>> = RunTest([out, nouse_stdio]),
- <<4:32/native>> = RunTest([in, nouse_stdio]),
- <<5:32/native>> = RunTest([in, out, nouse_stdio]),
+ <<4:32/native>> = RunTest([out, nouse_stdio]),
+ <<4:32/native>> = RunTest([in, nouse_stdio]),
+ <<5:32/native>> = RunTest([in, out, nouse_stdio]),
<<3:32/native>> = RunTest([out, use_stdio]),
<<3:32/native>> = RunTest([in, use_stdio]),
<<3:32/native>> = RunTest([in, out, use_stdio]),
@@ -654,7 +610,6 @@ count_fds(Config) when is_list(Config) ->
%% that we get the same number of ports every time.
%%
-iter_max_ports(suite) -> [];
iter_max_ports(Config) when is_list(Config) ->
%% The child_setup program might dump core if we get out of memory.
%% This is hard to do anything about and is harmless. We run this test
@@ -663,31 +618,30 @@ iter_max_ports(Config) when is_list(Config) ->
%%
Config2 = ignore_cores:setup(?MODULE, iter_max_ports, Config, true),
try
- iter_max_ports_test(Config2)
+ iter_max_ports_test(Config2)
after
- ignore_cores:restore(Config2)
+ ignore_cores:restore(Config2)
end.
-
-
+
+
iter_max_ports_test(Config) ->
- Dog = test_server:timetrap(test_server:minutes(30)),
+ ct:timetrap({minutes, 30}),
PortTest = port_test(Config),
Command = lists:concat([PortTest, " -h0 -q"]),
Iters = case os:type() of
- {win32,_} -> 4;
- _ -> 10
- end,
+ {win32,_} -> 4;
+ _ -> 10
+ end,
%% Run on a different node in order to limit the effect if this test fails.
Dir = filename:dirname(code:which(?MODULE)),
{ok,Node} = test_server:start_node(test_iter_max_socks,slave,
- [{args,"+Q 2048 -pa " ++ Dir}]),
+ [{args,"+Q 2048 -pa " ++ Dir}]),
L = rpc:call(Node,?MODULE,do_iter_max_ports,[Iters, Command]),
test_server:stop_node(Node),
io:format("Result: ~p",[L]),
all_equal(L),
all_equal(L),
- test_server:timetrap_cancel(Dog),
{comment, "Max ports: " ++ integer_to_list(hd(L))}.
do_iter_max_ports(N, Command) when N > 0 ->
@@ -711,8 +665,8 @@ max_ports(Command) ->
close_ports([P|Ps]) ->
P ! {self(), close},
receive
- {P,closed} ->
- ok
+ {P,closed} ->
+ ok
end,
close_ports(Ps);
close_ports([]) ->
@@ -730,36 +684,35 @@ open_ports(Name, Settings) ->
test_server:sleep(5)
end,
case catch open_port(Name, Settings) of
- P when is_port(P) ->
- [P| open_ports(Name, Settings)];
- {'EXIT', {Code, _}} ->
- case Code of
- enfile ->
- [];
- emfile ->
- [];
- system_limit ->
- [];
- enomem ->
- [];
- Other ->
- test_server:fail({open_ports, Other})
- end;
- Other ->
- test_server:fail({open_ports, Other})
+ P when is_port(P) ->
+ [P| open_ports(Name, Settings)];
+ {'EXIT', {Code, _}} ->
+ case Code of
+ enfile ->
+ [];
+ emfile ->
+ [];
+ system_limit ->
+ [];
+ enomem ->
+ [];
+ Other ->
+ ct:fail({open_ports, Other})
+ end;
+ Other ->
+ ct:fail({open_ports, Other})
end.
%% Tests that exit(Port, Term) works (has been known to crash the emulator).
-t_exit(suite) -> [];
t_exit(Config) when is_list(Config) ->
process_flag(trap_exit, true),
Pid = fun_spawn(fun suicide_port/1, [Config]),
receive
- {'EXIT', Pid, die} ->
- ok;
- Other ->
- test_server:fail({bad_message, Other})
+ {'EXIT', Pid, die} ->
+ ok;
+ Other ->
+ ct:fail({bad_message, Other})
end.
suicide_port(Config) when is_list(Config) ->
@@ -768,118 +721,105 @@ suicide_port(Config) when is_list(Config) ->
receive after infinity -> ok end.
-tps_16_bytes(doc) -> "";
-tps_16_bytes(suite) -> [];
tps_16_bytes(Config) when is_list(Config) ->
tps(16, Config).
-tps_1K(doc) -> "";
-tps_1K(suite) -> [];
tps_1K(Config) when is_list(Config) ->
tps(1024, Config).
tps(Size, Config) ->
- Dog = test_server:timetrap(test_server:seconds(300)),
+ ct:timetrap({minutes, 5}),
PortTest = port_test(Config),
Packet = list_to_binary(random_packet(Size, "e")),
Port = open_port({spawn, PortTest}, [binary, {packet, 2}]),
Transactions = 10000,
{Elapsed, ok} = test_server:timecall(?MODULE, tps,
- [Port, Packet, Transactions]),
- test_server:timetrap_cancel(Dog),
+ [Port, Packet, Transactions]),
{comment, integer_to_list(trunc(Transactions/Elapsed+0.5)) ++ " transactions/s"}.
tps(_Port, _Packet, 0) -> ok;
tps(Port, Packet, N) ->
port_command(Port, Packet),
receive
- {Port, {data, Packet}} ->
- tps(Port, Packet, N-1);
- Other ->
- test_server:fail({bad_message, Other})
+ {Port, {data, Packet}} ->
+ tps(Port, Packet, N-1);
+ Other ->
+ ct:fail({bad_message, Other})
end.
%% Line I/O test
line(Config) when is_list(Config) ->
+ ct:timetrap({minutes, 5}),
Siz = 110,
- Dog = test_server:timetrap(test_server:seconds(300)),
Packet1 = random_packet(Siz),
Packet2 = random_packet(Siz div 2),
%% Test that packets are split into lines
port_expect(Config,[{lists:append([Packet1, io_lib:nl(), Packet2,
- io_lib:nl()]),
- [{eol, Packet1}, {eol, Packet2}]}],
- 0, "", [{line,Siz}]),
+ io_lib:nl()]),
+ [{eol, Packet1}, {eol, Packet2}]}],
+ 0, "", [{line,Siz}]),
%% Test the same for binaries
port_expect(Config,[{lists:append([Packet1, io_lib:nl(), Packet2,
- io_lib:nl()]),
- [{eol, Packet1}, {eol, Packet2}]}],
- 0, "", [{line,Siz},binary]),
+ io_lib:nl()]),
+ [{eol, Packet1}, {eol, Packet2}]}],
+ 0, "", [{line,Siz},binary]),
%% Test that too long lines get split
port_expect(Config,[{lists:append([Packet1, io_lib:nl(), Packet1,
- Packet2, io_lib:nl()]),
- [{eol, Packet1}, {noeol, Packet1},
- {eol, Packet2}]}], 0, "", [{line,Siz}]),
+ Packet2, io_lib:nl()]),
+ [{eol, Packet1}, {noeol, Packet1},
+ {eol, Packet2}]}], 0, "", [{line,Siz}]),
%% Test that last output from closing port program gets received.
L1 = lists:append([Packet1, io_lib:nl(), Packet2]),
S1 = lists:flatten(io_lib:format("-l~w", [length(L1)])),
io:format("S1 = ~w, L1 = ~w~n", [S1,L1]),
port_expect(Config,[{L1,
- [{eol, Packet1}, {noeol, Packet2}, eof]}], 0,
- S1, [{line,Siz},eof]),
+ [{eol, Packet1}, {noeol, Packet2}, eof]}], 0,
+ S1, [{line,Siz},eof]),
%% Test that lonely <CR> Don't get treated as newlines
port_expect(Config,[{lists:append([Packet1, [13], Packet2,
- io_lib:nl()]),
- [{noeol, Packet1}, {eol, [13 |Packet2]}]}],
- 0, "", [{line,Siz}]),
+ io_lib:nl()]),
+ [{noeol, Packet1}, {eol, [13 |Packet2]}]}],
+ 0, "", [{line,Siz}]),
%% Test that packets get built up to lines (delayed output from
%% port program)
port_expect(Config,[{Packet2,[]},
- {lists:append([Packet2, io_lib:nl(),
- Packet1, io_lib:nl()]),
- [{eol, lists:append(Packet2, Packet2)},
- {eol, Packet1}]}], 0, "-d", [{line,Siz}]),
+ {lists:append([Packet2, io_lib:nl(),
+ Packet1, io_lib:nl()]),
+ [{eol, lists:append(Packet2, Packet2)},
+ {eol, Packet1}]}], 0, "-d", [{line,Siz}]),
%% Test that we get badarg if trying both packet and line
bad_argument(Config, [{packet, 5}, {line, 5}]),
- test_server:timetrap_cancel(Dog),
ok.
-%%% Redirection of stderr test
-stderr_to_stdout(suite) ->
- [];
-stderr_to_stdout(doc) ->
- "Test that redirection of standard error to standard output works.";
+%% Test that redirection of standard error to standard output works.
stderr_to_stdout(Config) when is_list(Config) ->
- Dog = test_server:timetrap(test_server:seconds(60)),
+ ct:timetrap({minutes, 1}),
%% See that it works
Packet = random_packet(10),
port_expect(Config,[{Packet,[Packet]}], 0, "-e -l10",
- [stderr_to_stdout]),
+ [stderr_to_stdout]),
%% stream_ping(Config, 10, "-e", [stderr_to_stdout]),
%% See that it doesn't always happen (will generate garbage on stderr)
port_expect(Config,[{Packet,[eof]}], 0, "-e -l10", [line,eof]),
- test_server:timetrap_cancel(Dog),
ok.
bad_argument(Config, ArgList) ->
PortTest = port_test(Config),
case catch open_port({spawn, PortTest}, ArgList) of
- {'EXIT', {badarg, _}} ->
- ok
+ {'EXIT', {badarg, _}} ->
+ ok
end.
-
+
%% 'env' option
%% (Can perhaps be made smaller by calling the other utility functions
%% in this module.)
-env(suite) ->
- [];
-env(doc) ->
- ["Test that the 'env' option works"];
+%%
+%% Test that the 'env' option works
env(Config) when is_list(Config) ->
- Dog = test_server:timetrap(test_server:seconds(60)),
- Priv = ?config(priv_dir, Config),
+ ct:timetrap({minutes, 1}),
+ Priv = proplists:get_value(priv_dir, Config),
Temp = filename:join(Priv, "env_fun.bin"),
PluppVal = "dirty monkey",
@@ -889,36 +829,34 @@ env(Config) when is_list(Config) ->
os:putenv(Long, "nisse"),
env_slave(Temp, [{"plupp",PluppVal},
- {"DIR_PLUPP","###glurfrik"}],
- fun() ->
- PluppVal = os:getenv("plupp"),
- "###glurfrik" = os:getenv("DIR_PLUPP"),
- "nisse" = os:getenv(Long)
- end),
+ {"DIR_PLUPP","###glurfrik"}],
+ fun() ->
+ PluppVal = os:getenv("plupp"),
+ "###glurfrik" = os:getenv("DIR_PLUPP"),
+ "nisse" = os:getenv(Long)
+ end),
env_slave(Temp, [{"must_define_something","some_value"},
- {"certainly_not_existing",false},
- {"ends_with_equal", "value="},
- {Long,false},
- {"glurf","a glorfy string"}]),
+ {"certainly_not_existing",false},
+ {"ends_with_equal", "value="},
+ {Long,false},
+ {"glurf","a glorfy string"}]),
%% A lot of non existing variables (mingled with existing)
NotExistingList = [{lists:flatten(io_lib:format("V~p_not_existing",[X])),false}
- || X <- lists:seq(1,150)],
+ || X <- lists:seq(1,150)],
ExistingList = [{lists:flatten(io_lib:format("V~p_existing",[X])),"a_value"}
- || X <- lists:seq(1,150)],
+ || X <- lists:seq(1,150)],
env_slave(Temp, lists:sort(ExistingList ++ NotExistingList)),
-
- test_server:timetrap_cancel(Dog),
ok.
env_slave(File, Env) ->
F = fun() ->
- lists:foreach(fun({Name,Val}) ->
- Val = os:getenv(Name)
- end, Env)
- end,
+ lists:foreach(fun({Name,Val}) ->
+ Val = os:getenv(Name)
+ end, Env)
+ end,
env_slave(File, Env, F).
env_slave(File, Env, Body) ->
@@ -926,27 +864,26 @@ env_slave(File, Env, Body) ->
Program = atom_to_list(lib:progname()),
Dir = filename:dirname(code:which(?MODULE)),
Cmd = Program ++ " -pz " ++ Dir ++
- " -noinput -run " ++ ?MODULE_STRING ++ " env_slave_main " ++
- File ++ " -run erlang halt",
+ " -noinput -run " ++ ?MODULE_STRING ++ " env_slave_main " ++
+ File ++ " -run erlang halt",
Port = open_port({spawn, Cmd}, [{env,Env},{line,256}]),
receive
- {Port,{data,{eol,"ok"}}} ->
- ok;
- {Port,{data,{eol,Error}}} ->
- io:format("~p\n", [Error]),
- test_server:fail();
- Other ->
- test_server:fail(Other)
+ {Port,{data,{eol,"ok"}}} ->
+ ok;
+ {Port,{data,{eol,Error}}} ->
+ ct:fail("eol error ~p\n", [Error]);
+ Other ->
+ ct:fail(Other)
end.
env_slave_main([File]) ->
{ok,Body0} = file:read_file(File),
Body = binary_to_term(Body0),
case Body() of
- {'EXIT',Reason} ->
- io:format("Error: ~p\n", [Reason]);
- _ ->
- io:format("ok\n")
+ {'EXIT',Reason} ->
+ io:format("Error: ~p\n", [Reason]);
+ _ ->
+ io:format("ok\n")
end,
init:stop().
@@ -966,25 +903,27 @@ bad_env(Config) when is_list(Config) ->
ok.
try_bad_env(Env) ->
- try open_port({spawn,"ls"}, [{env,Env}])
- catch
- error:badarg -> ok
- end.
+ badarg = try open_port({spawn,"ls"}, [{env,Env}])
+ catch
+ error:badarg -> badarg
+ end.
+
%% Test that we can handle a very very large environment gracefully.
huge_env(Config) when is_list(Config) ->
+ ct:timetrap({minutes, 2}),
Vars = case os:type() of
- {win32,_} -> 500;
- _ ->
+ {win32,_} -> 500;
+ _ ->
%% We create a huge environment,
%% 20000 variables is about 25MB
%% which seems to be the limit on Linux.
20000
- end,
+ end,
Env = [{[$a + I div (25*25*25*25) rem 25,
- $a + I div (25*25*25) rem 25,
- $a + I div (25*25) rem 25,
- $a+I div 25 rem 25, $a+I rem 25],
+ $a + I div (25*25*25) rem 25,
+ $a + I div (25*25) rem 25,
+ $a+I div 25 rem 25, $a+I rem 25],
lists:duplicate(100,$a+I rem 25)}
|| I <- lists:seq(1,Vars)],
try erlang:open_port({spawn,"ls"},[exit_status, {env, Env}]) of
@@ -998,66 +937,80 @@ huge_env(Config) when is_list(Config) ->
true = is_integer(N)
end
catch E:R ->
- %% Have to catch the error here, as printing the stackdump
- %% in the ct log is way to heavy for some test machines.
- ct:fail("Open port failed ~p:~p",[E,R])
+ %% Have to catch the error here, as printing the stackdump
+ %% in the ct log is way to heavy for some test machines.
+ ct:fail("Open port failed ~p:~p",[E,R])
end.
+%% Test bad 'args' options.
+bad_args(Config) when is_list(Config) ->
+ try_bad_args({args, [self()]}),
+ try_bad_args({args, ["head" | "tail"]}),
+ try_bad_args({args, ["head", "body" | "tail"]}),
+ try_bad_args({args, [<<"head">>, <<"body">> | <<"tail">>]}),
+ try_bad_args({args, not_a_list}),
+ try_bad_args({args, ["string",<<"binary">>, 1472, "string"]}),
+ try_bad_args({args, ["string",<<"binary">>], "element #3"}),
+ ok.
+
+try_bad_args(Args) ->
+ badarg = try open_port({spawn_executable,"ls"}, [Args])
+ catch
+ error:badarg -> badarg
+ end.
+
+
%% 'cd' option
%% (Can perhaps be made smaller by calling the other utility functions
%% in this module.)
-cd(suite) ->
- [];
-cd(doc) ->
- ["Test that the 'cd' option works"];
+%%
+%% Test that the 'cd' option works
cd(Config) when is_list(Config) ->
- Dog = test_server:timetrap(test_server:seconds(60)),
+ ct:timetrap({minutes, 1}),
Program = atom_to_list(lib:progname()),
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
TestDir = filename:join(DataDir, "dir"),
Cmd = Program ++ " -pz " ++ DataDir ++
- " -noshell -s port_test pwd -s erlang halt",
+ " -noshell -s port_test pwd -s erlang halt",
_ = open_port({spawn, Cmd},
- [{cd, TestDir},
- {line, 256}]),
+ [{cd, TestDir},
+ {line, 256}]),
receive
- {_, {data, {eol, String}}} ->
- case filename_equal(String, TestDir) of
- true ->
- ok;
- false ->
- test_server:fail({cd, String})
- end;
- Other2 ->
- test_server:fail({env, Other2})
+ {_, {data, {eol, String}}} ->
+ case filename_equal(String, TestDir) of
+ true ->
+ ok;
+ false ->
+ ct:fail({cd, String})
+ end;
+ Other2 ->
+ ct:fail({env, Other2})
end,
_ = open_port({spawn, Cmd},
- [{cd, unicode:characters_to_binary(TestDir)},
- {line, 256}]),
+ [{cd, unicode:characters_to_binary(TestDir)},
+ {line, 256}]),
receive
- {_, {data, {eol, String2}}} ->
- case filename_equal(String2, TestDir) of
- true ->
- ok;
- false ->
- test_server:fail({cd, String2})
- end;
- Other3 ->
- test_server:fail({env, Other3})
+ {_, {data, {eol, String2}}} ->
+ case filename_equal(String2, TestDir) of
+ true ->
+ ok;
+ false ->
+ ct:fail({cd, String2})
+ end;
+ Other3 ->
+ ct:fail({env, Other3})
end,
-
- test_server:timetrap_cancel(Dog),
ok.
filename_equal(A, B) ->
case os:type() of
- {win32, _} ->
- win_filename_equal(A, B);
- _ ->
- A == B
+ {win32, _} ->
+ win_filename_equal(A, B);
+ _ ->
+ A == B
end.
win_filename_equal([], []) ->
@@ -1068,10 +1021,10 @@ win_filename_equal(_, []) ->
false;
win_filename_equal([C1 | Rest1], [C2 | Rest2]) ->
case tolower(C1) == tolower(C2) of
- true ->
- win_filename_equal(Rest1, Rest2);
- false ->
- false
+ true ->
+ win_filename_equal(Rest1, Rest2);
+ false ->
+ false
end.
tolower(C) when C >= $A, C =< $Z ->
@@ -1079,17 +1032,14 @@ tolower(C) when C >= $A, C =< $Z ->
tolower(C) ->
C.
-otp_3906(suite) ->
- [];
-otp_3906(doc) ->
- ["Tests that child process deaths are managed correctly when there are "
- " a large amount of concurrently dying children. See ticket OTP-3906."];
+%% Tests that child process deaths are managed correctly when there are
+%% a large amount of concurrently dying children. See ticket OTP-3906.
otp_3906(Config) when is_list(Config) ->
case os:type() of
- {unix, OSName} ->
- otp_3906(Config, OSName);
- _ ->
- {skipped, "Only run on Unix systems"}
+ {unix, OSName} ->
+ otp_3906(Config, OSName);
+ _ ->
+ {skipped, "Only run on Unix systems"}
end.
-define(OTP_3906_CHILDREN, 1000).
@@ -1102,83 +1052,83 @@ otp_3906(Config) when is_list(Config) ->
otp_3906(Config, OSName) ->
DataDir = filename:dirname(proplists:get_value(data_dir,Config)),
{ok, Variables} = file:consult(
- filename:join([DataDir,"..","..",
- "test_server","variables"])),
+ filename:join([DataDir,"..","..",
+ "test_server","variables"])),
case lists:keysearch('CC', 1, Variables) of
- {value,{'CC', CC}} ->
- SuiteDir = filename:dirname(code:which(?MODULE)),
- PrivDir = ?config(priv_dir, Config),
- Prog = otp_3906_make_prog(CC, PrivDir),
- {ok, Node} = test_server:start_node(otp_3906,
- slave,
- [{args, " -pa " ++ SuiteDir},
- {linked, false}]),
- OP = process_flag(priority, max),
- OTE = process_flag(trap_exit, true),
- FS = spawn_link(Node,
- ?MODULE,
- otp_3906_start_forker_starter,
- [?OTP_3906_CHILDREN, [], self(), Prog]),
- Result = receive
- {'EXIT', _ForkerStarter, Reason} ->
- {failed, Reason};
- {emulator_pid, EmPid} ->
- case otp_3906_wait_result(FS, 0, 0) of
- {succeded,
- ?OTP_3906_CHILDREN,
- ?OTP_3906_CHILDREN} ->
- succeded;
- {succeded, Forked, Exited} ->
- otp_3906_list_defunct(EmPid, OSName),
- {failed,
- {mismatch,
- {forked, Forked},
- {exited, Exited}}};
- Res ->
- otp_3906_list_defunct(EmPid, OSName),
- Res
- end
- end,
- process_flag(trap_exit, OTE),
- process_flag(priority, OP),
- test_server:stop_node(Node),
- case Result of
- succeded ->
- ok;
- _ ->
- test_server:fail(Result)
- end;
- _ ->
- {skipped, "No C compiler found"}
+ {value,{'CC', CC}} ->
+ SuiteDir = filename:dirname(code:which(?MODULE)),
+ PrivDir = proplists:get_value(priv_dir, Config),
+ Prog = otp_3906_make_prog(CC, PrivDir),
+ {ok, Node} = test_server:start_node(otp_3906,
+ slave,
+ [{args, " -pa " ++ SuiteDir},
+ {linked, false}]),
+ OP = process_flag(priority, max),
+ OTE = process_flag(trap_exit, true),
+ FS = spawn_link(Node,
+ ?MODULE,
+ otp_3906_start_forker_starter,
+ [?OTP_3906_CHILDREN, [], self(), Prog]),
+ Result = receive
+ {'EXIT', _ForkerStarter, Reason} ->
+ {failed, Reason};
+ {emulator_pid, EmPid} ->
+ case otp_3906_wait_result(FS, 0, 0) of
+ {succeded,
+ ?OTP_3906_CHILDREN,
+ ?OTP_3906_CHILDREN} ->
+ succeded;
+ {succeded, Forked, Exited} ->
+ otp_3906_list_defunct(EmPid, OSName),
+ {failed,
+ {mismatch,
+ {forked, Forked},
+ {exited, Exited}}};
+ Res ->
+ otp_3906_list_defunct(EmPid, OSName),
+ Res
+ end
+ end,
+ process_flag(trap_exit, OTE),
+ process_flag(priority, OP),
+ test_server:stop_node(Node),
+ case Result of
+ succeded ->
+ ok;
+ _ ->
+ ct:fail(Result)
+ end;
+ _ ->
+ {skipped, "No C compiler found"}
end.
otp_3906_list_defunct(EmPid, OSName) ->
% Guess ps switches to use and what to grep for (could be improved)
{Switches, Zombie} = case OSName of
- BSD when BSD == darwin;
- BSD == openbsd;
- BSD == netbsd;
- BSD == freebsd ->
- {"-ajx", "Z"};
- _ ->
- {"-ef", "[dD]efunct"}
- end,
- test_server:format("Emulator pid: ~s~n"
- "Listing of zombie processes:~n"
- "~s~n",
- [EmPid,
- otp_3906_htmlize(os:cmd("ps "
- ++ Switches
- ++ " | grep "
- ++ Zombie))]).
+ BSD when BSD == darwin;
+ BSD == openbsd;
+ BSD == netbsd;
+ BSD == freebsd ->
+ {"-ajx", "Z"};
+ _ ->
+ {"-ef", "[dD]efunct"}
+ end,
+ io:format("Emulator pid: ~s~n"
+ "Listing of zombie processes:~n"
+ "~s~n",
+ [EmPid,
+ otp_3906_htmlize(os:cmd("ps "
+ ++ Switches
+ ++ " | grep "
+ ++ Zombie))]).
otp_3906_htmlize([]) ->
[];
otp_3906_htmlize([C | Cs]) ->
case [C] of
- "<" -> "&lt;" ++ otp_3906_htmlize(Cs);
- ">" -> "&gt;" ++ otp_3906_htmlize(Cs);
- _ -> [C | otp_3906_htmlize(Cs)]
+ "<" -> "&lt;" ++ otp_3906_htmlize(Cs);
+ ">" -> "&gt;" ++ otp_3906_htmlize(Cs);
+ _ -> [C | otp_3906_htmlize(Cs)]
end.
otp_3906_make_prog(CC, PrivDir) ->
@@ -1186,12 +1136,12 @@ otp_3906_make_prog(CC, PrivDir) ->
TrgtFileName = filename:join(PrivDir, ?OTP_3906_PROGNAME),
{ok, SrcFile} = file:open(SrcFileName, write),
io:format(SrcFile,
- "int ~n"
- "main(void) ~n"
- "{ ~n"
- " return ~p; ~n"
- "} ~n",
- [?OTP_3906_EXIT_STATUS]),
+ "int ~n"
+ "main(void) ~n"
+ "{ ~n"
+ " return ~p; ~n"
+ "} ~n",
+ [?OTP_3906_EXIT_STATUS]),
file:close(SrcFile),
os:cmd(CC ++ " " ++ SrcFileName ++ " -o " ++ TrgtFileName),
TrgtFileName.
@@ -1199,21 +1149,21 @@ otp_3906_make_prog(CC, PrivDir) ->
otp_3906_wait_result(ForkerStarter, F, E) ->
receive
- {'EXIT', ForkerStarter, Reason} ->
- {failed, {Reason, {forked, F}, {exited, E}}};
- forked ->
- otp_3906_wait_result(ForkerStarter, F+1, E);
- exited ->
- otp_3906_wait_result(ForkerStarter, F, E+1);
- tick ->
- otp_3906_wait_result(ForkerStarter, F, E);
- succeded ->
- {succeded, F, E}
+ {'EXIT', ForkerStarter, Reason} ->
+ {failed, {Reason, {forked, F}, {exited, E}}};
+ forked ->
+ otp_3906_wait_result(ForkerStarter, F+1, E);
+ exited ->
+ otp_3906_wait_result(ForkerStarter, F, E+1);
+ tick ->
+ otp_3906_wait_result(ForkerStarter, F, E);
+ succeded ->
+ {succeded, F, E}
after
- ?OTP_3906_TICK_TIMEOUT ->
- unlink(ForkerStarter),
- exit(ForkerStarter, timeout),
- {failed, {timeout, {forked, F}, {exited, E}}}
+ ?OTP_3906_TICK_TIMEOUT ->
+ unlink(ForkerStarter),
+ exit(ForkerStarter, timeout),
+ {failed, {timeout, {forked, F}, {exited, E}}}
end.
otp_3906_collect([], _) ->
@@ -1223,17 +1173,17 @@ otp_3906_collect(RefList, Sup) ->
otp_3906_collect_one(RefList, Sup) ->
receive
- Ref when is_reference(Ref) ->
- Sup ! tick,
- lists:delete(Ref, RefList)
+ Ref when is_reference(Ref) ->
+ Sup ! tick,
+ lists:delete(Ref, RefList)
end.
-
+
otp_3906_start_forker(N, Sup, Prog) ->
Ref = make_ref(),
spawn_opt(?MODULE,
- otp_3906_forker,
- [N, self(), Ref, Sup, Prog],
- [link, {priority, max}]),
+ otp_3906_forker,
+ [N, self(), Ref, Sup, Prog],
+ [link, {priority, max}]),
Ref.
otp_3906_start_forker_starter(N, RefList, Sup, Prog) ->
@@ -1252,18 +1202,18 @@ otp_3906_forker_starter(N, RefList, Sup, Prog)
otp_3906_forker_starter(N, RefList, Sup, Prog)
when is_integer(N), N > ?OTP_3906_OSP_P_ERLP ->
otp_3906_forker_starter(N-?OTP_3906_OSP_P_ERLP,
- [otp_3906_start_forker(?OTP_3906_OSP_P_ERLP,
- Sup,
- Prog)|RefList],
- Sup,
- Prog);
+ [otp_3906_start_forker(?OTP_3906_OSP_P_ERLP,
+ Sup,
+ Prog)|RefList],
+ Sup,
+ Prog);
otp_3906_forker_starter(N, RefList, Sup, Prog) when is_integer(N) ->
otp_3906_forker_starter(0,
- [otp_3906_start_forker(N,
- Sup,
- Prog)|RefList],
- Sup,
- Prog).
+ [otp_3906_start_forker(N,
+ Sup,
+ Prog)|RefList],
+ Sup,
+ Prog).
otp_3906_forker(0, Parent, Ref, _, _) ->
unlink(Parent),
@@ -1272,185 +1222,165 @@ otp_3906_forker(N, Parent, Ref, Sup, Prog) ->
Port = erlang:open_port({spawn, Prog}, [exit_status, in]),
Sup ! forked,
receive
- {Port, {exit_status, ?OTP_3906_EXIT_STATUS}} ->
- Sup ! exited,
- otp_3906_forker(N-1, Parent, Ref, Sup, Prog);
- {Port, Res} ->
- exit(Res);
- Other ->
- exit(Other)
+ {Port, {exit_status, ?OTP_3906_EXIT_STATUS}} ->
+ Sup ! exited,
+ otp_3906_forker(N-1, Parent, Ref, Sup, Prog);
+ {Port, Res} ->
+ exit(Res);
+ Other ->
+ exit(Other)
end.
-otp_4389(suite) -> [];
-otp_4389(doc) -> [];
otp_4389(Config) when is_list(Config) ->
case os:type() of
- {unix, _} ->
- Dog = test_server:timetrap(test_server:seconds(240)),
- TCR = self(),
- case get_true_cmd() of
- True when is_list(True) ->
- lists:foreach(
- fun (P) ->
- receive
- {P, ok} -> ok;
- {P, Err} -> ?t:fail(Err)
- end
- end,
- lists:map(
- fun(_) ->
- spawn_link(
- fun() ->
- process_flag(trap_exit, true),
- case catch open_port({spawn, True},
- [stream,exit_status]) of
- P when is_port(P) ->
- receive
- {P,{exit_status,_}} ->
- TCR ! {self(),ok};
- {'EXIT',_,{R2,_}} when R2 == emfile;
- R2 == eagain;
- R2 == enomem ->
- TCR ! {self(),ok};
- Err2 ->
- TCR ! {self(),{msg,Err2}}
- end;
- {'EXIT',{R1,_}} when R1 == emfile;
- R1 == eagain;
- R1 == enomem ->
- TCR ! {self(),ok};
- Err1 ->
- TCR ! {self(), {open_port,Err1}}
- end
- end)
- end,
- lists:duplicate(1000,[]))),
- test_server:timetrap_cancel(Dog),
- {comment,
- "This test case doesn't always fail when the bug that "
- "it tests for is present (it is most likely to fail on"
- " a multi processor machine). If the test case fails it"
- " will fail by deadlocking the emulator."};
- _ ->
- {skipped, "\"true\" command not found"}
- end;
- _ ->
- {skip,"Only run on Unix"}
+ {unix, _} ->
+ ct:timetrap({minutes, 4}),
+ TCR = self(),
+ case get_true_cmd() of
+ True when is_list(True) ->
+ lists:foreach(
+ fun (P) ->
+ receive
+ {P, ok} -> ok;
+ {P, Err} -> ct:fail(Err)
+ end
+ end,
+ lists:map(
+ fun(_) ->
+ spawn_link(
+ fun() ->
+ process_flag(trap_exit, true),
+ case catch open_port({spawn, True},
+ [stream,exit_status]) of
+ P when is_port(P) ->
+ receive
+ {P,{exit_status,_}} ->
+ TCR ! {self(),ok};
+ {'EXIT',_,{R2,_}} when R2 == emfile;
+ R2 == eagain;
+ R2 == enomem ->
+ TCR ! {self(),ok};
+ Err2 ->
+ TCR ! {self(),{msg,Err2}}
+ end;
+ {'EXIT',{R1,_}} when R1 == emfile;
+ R1 == eagain;
+ R1 == enomem ->
+ TCR ! {self(),ok};
+ Err1 ->
+ TCR ! {self(), {open_port,Err1}}
+ end
+ end)
+ end,
+ lists:duplicate(1000,[]))),
+ {comment,
+ "This test case doesn't always fail when the bug that "
+ "it tests for is present (it is most likely to fail on"
+ " a multi processor machine). If the test case fails it"
+ " will fail by deadlocking the emulator."};
+ _ ->
+ {skipped, "\"true\" command not found"}
+ end;
+ _ ->
+ {skip,"Only run on Unix"}
end.
get_true_cmd() ->
DoFileExist = fun (FileName) ->
- case file:read_file_info(FileName) of
- {ok, _} -> throw(FileName);
- _ -> not_found
- end
- end,
+ case file:read_file_info(FileName) of
+ {ok, _} -> throw(FileName);
+ _ -> not_found
+ end
+ end,
catch begin
- %% First check in /usr/bin and /bin
- DoFileExist("/usr/bin/true"),
- DoFileExist("/bin/true"),
- %% Try which
- case filename:dirname(os:cmd("which true")) of
- "." -> not_found;
- TrueDir -> filename:join(TrueDir, "true")
- end
- end.
+ %% First check in /usr/bin and /bin
+ DoFileExist("/usr/bin/true"),
+ DoFileExist("/bin/true"),
+ %% Try which
+ case filename:dirname(os:cmd("which true")) of
+ "." -> not_found;
+ TrueDir -> filename:join(TrueDir, "true")
+ end
+ end.
%% 'exit_status' option
-exit_status(suite) ->
- [];
-exit_status(doc) ->
- ["Test that the 'exit_status' option works"];
+%%
+%% Test that the 'exit_status' option works
exit_status(Config) when is_list(Config) ->
- Dog = test_server:timetrap(test_server:seconds(60)),
- port_expect(Config,[{"x",
- [{exit_status, 5}]}],
- 1, "", [exit_status]),
- test_server:timetrap_cancel(Dog),
+ ct:timetrap({minutes, 1}),
+ port_expect(Config,
+ [{"x", [{exit_status, 5}]}],
+ 1, "", [exit_status]),
ok.
-spawn_driver(suite) ->
- [];
-spawn_driver(doc) ->
- ["Test spawning a driver specifically"];
+%% Test spawning a driver specifically
spawn_driver(Config) when is_list(Config) ->
- Dog = test_server:timetrap(test_server:seconds(10)),
- Path = ?config(data_dir, Config),
+ Path = proplists:get_value(data_dir, Config),
ok = load_driver(Path, "echo_drv"),
Port = erlang:open_port({spawn_driver, "echo_drv"}, []),
Port ! {self(), {command, "Hello port!"}},
receive
- {Port, {data, "Hello port!"}} = Msg1 ->
- io:format("~p~n", [Msg1]),
- ok;
- Other ->
- test_server:fail({unexpected, Other})
- end,
+ {Port, {data, "Hello port!"}} = Msg1 ->
+ io:format("~p~n", [Msg1]),
+ ok;
+ Other ->
+ ct:fail({unexpected, Other})
+ end,
Port ! {self(), close},
receive {Port, closed} -> ok end,
Port2 = erlang:open_port({spawn_driver, "echo_drv -Hello port?"},
- []),
+ []),
receive
- {Port2, {data, "Hello port?"}} = Msg2 ->
- io:format("~p~n", [Msg2]),
- ok;
- Other2 ->
- test_server:fail({unexpected2, Other2})
- end,
+ {Port2, {data, "Hello port?"}} = Msg2 ->
+ io:format("~p~n", [Msg2]),
+ ok;
+ Other2 ->
+ ct:fail({unexpected2, Other2})
+ end,
Port2 ! {self(), close},
receive {Port2, closed} -> ok end,
{'EXIT',{badarg,_}} = (catch erlang:open_port({spawn_driver, "ls"}, [])),
{'EXIT',{badarg,_}} = (catch erlang:open_port({spawn_driver, "cmd"}, [])),
{'EXIT',{badarg,_}} = (catch erlang:open_port({spawn_driver, os:find_executable("erl")}, [])),
- test_server:timetrap_cancel(Dog),
ok.
-parallelism_option(suite) ->
- [];
-parallelism_option(doc) ->
- ["Test parallelism option of open_port"];
+%% Test parallelism option of open_port
parallelism_option(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(10)),
- ?line Path = ?config(data_dir, Config),
- ?line ok = load_driver(Path, "echo_drv"),
- ?line Port = erlang:open_port({spawn_driver, "echo_drv"},
- [{parallelism, true}]),
- ?line {parallelism, true} = erlang:port_info(Port, parallelism),
- ?line Port ! {self(), {command, "Hello port!"}},
- ?line receive
- {Port, {data, "Hello port!"}} = Msg1 ->
- io:format("~p~n", [Msg1]),
- ok;
- Other ->
- test_server:fail({unexpected, Other})
- end,
- ?line Port ! {self(), close},
- ?line receive {Port, closed} -> ok end,
-
- ?line Port2 = erlang:open_port({spawn_driver, "echo_drv -Hello port?"},
- [{parallelism, false}]),
- ?line {parallelism, false} = erlang:port_info(Port2, parallelism),
- ?line receive
- {Port2, {data, "Hello port?"}} = Msg2 ->
- io:format("~p~n", [Msg2]),
- ok;
- Other2 ->
- test_server:fail({unexpected2, Other2})
- end,
- ?line Port2 ! {self(), close},
- ?line receive {Port2, closed} -> ok end,
- ?line test_server:timetrap_cancel(Dog),
+ Path = proplists:get_value(data_dir, Config),
+ ok = load_driver(Path, "echo_drv"),
+ Port = erlang:open_port({spawn_driver, "echo_drv"},
+ [{parallelism, true}]),
+ {parallelism, true} = erlang:port_info(Port, parallelism),
+ Port ! {self(), {command, "Hello port!"}},
+ receive
+ {Port, {data, "Hello port!"}} = Msg1 ->
+ io:format("~p~n", [Msg1]),
+ ok;
+ Other ->
+ ct:fail({unexpected, Other})
+ end,
+ Port ! {self(), close},
+ receive {Port, closed} -> ok end,
+
+ Port2 = erlang:open_port({spawn_driver, "echo_drv -Hello port?"},
+ [{parallelism, false}]),
+ {parallelism, false} = erlang:port_info(Port2, parallelism),
+ receive
+ {Port2, {data, "Hello port?"}} = Msg2 ->
+ io:format("~p~n", [Msg2]),
+ ok;
+ Other2 ->
+ ct:fail({unexpected2, Other2})
+ end,
+ Port2 ! {self(), close},
+ receive {Port2, closed} -> ok end,
ok.
-spawn_executable(suite) ->
- [];
-spawn_executable(doc) ->
- ["Test spawning an executable specifically"];
+%% Test spawning an executable specifically
spawn_executable(Config) when is_list(Config) ->
- Dog = test_server:timetrap(test_server:seconds(10)),
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
EchoArgs1 = filename:join([DataDir,"echo_args"]),
ExactFile1 = filename:nativename(os:find_executable(EchoArgs1)),
[ExactFile1] = run_echo_args(DataDir,[]),
@@ -1460,25 +1390,25 @@ spawn_executable(Config) when is_list(Config) ->
["echo_arguments"] = run_echo_args(DataDir,["echo_arguments"]),
["echo_arguments"] = run_echo_args(DataDir,[binary, "echo_arguments"]),
[ExactFile1,"hello world","dlrow olleh"] =
- run_echo_args(DataDir,[ExactFile1,"hello world","dlrow olleh"]),
+ run_echo_args(DataDir,[ExactFile1,"hello world","dlrow olleh"]),
[ExactFile1] = run_echo_args(DataDir,[default]),
[ExactFile1] = run_echo_args(DataDir,[binary, default]),
[ExactFile1,"hello world","dlrow olleh"] =
- run_echo_args(DataDir,[switch_order,ExactFile1,"hello world",
- "dlrow olleh"]),
+ run_echo_args(DataDir,[switch_order,ExactFile1,"hello world",
+ "dlrow olleh"]),
[ExactFile1,"hello world","dlrow olleh"] =
- run_echo_args(DataDir,[binary,switch_order,ExactFile1,"hello world",
- "dlrow olleh"]),
+ run_echo_args(DataDir,[binary,switch_order,ExactFile1,"hello world",
+ "dlrow olleh"]),
[ExactFile1,"hello world","dlrow olleh"] =
- run_echo_args(DataDir,[default,"hello world","dlrow olleh"]),
+ run_echo_args(DataDir,[default,"hello world","dlrow olleh"]),
[ExactFile1,"hello world","dlrow olleh"] =
- run_echo_args_2("\""++ExactFile1++"\" "++"\"hello world\" \"dlrow olleh\""),
+ run_echo_args_2("\""++ExactFile1++"\" "++"\"hello world\" \"dlrow olleh\""),
[ExactFile1,"hello world","dlrow olleh"] =
- run_echo_args_2(unicode:characters_to_binary("\""++ExactFile1++"\" "++"\"hello world\" \"dlrow olleh\"")),
+ run_echo_args_2(unicode:characters_to_binary("\""++ExactFile1++"\" "++"\"hello world\" \"dlrow olleh\"")),
- PrivDir = ?config(priv_dir, Config),
- SpaceDir =filename:join([PrivDir,"With Spaces"]),
+ PrivDir = proplists:get_value(priv_dir, Config),
+ SpaceDir = filename:join([PrivDir,"With Spaces"]),
file:make_dir(SpaceDir),
Executable = filename:basename(ExactFile1),
file:copy(ExactFile1,filename:join([SpaceDir,Executable])),
@@ -1489,33 +1419,32 @@ spawn_executable(Config) when is_list(Config) ->
["echo_args"] = run_echo_args(SpaceDir,["echo_args"]),
["echo_arguments"] = run_echo_args(SpaceDir,["echo_arguments"]),
[ExactFile2,"hello world","dlrow olleh"] =
- run_echo_args(SpaceDir,[ExactFile2,"hello world","dlrow olleh"]),
+ run_echo_args(SpaceDir,[ExactFile2,"hello world","dlrow olleh"]),
[ExactFile2,"hello world","dlrow olleh"] =
- run_echo_args(SpaceDir,[binary, ExactFile2,"hello world","dlrow olleh"]),
+ run_echo_args(SpaceDir,[binary, ExactFile2,"hello world","dlrow olleh"]),
[ExactFile2,"hello \"world\"","\"dlrow\" olleh"] =
- run_echo_args(SpaceDir,[binary, ExactFile2,"hello \"world\"","\"dlrow\" olleh"]),
+ run_echo_args(SpaceDir,[binary, ExactFile2,"hello \"world\"","\"dlrow\" olleh"]),
[ExactFile2,"hello \"world\"","\"dlrow\" olleh"] =
- run_echo_args(SpaceDir,[binary, ExactFile2,"hello \"world\"","\"dlrow\" olleh"]),
+ run_echo_args(SpaceDir,[binary, ExactFile2,"hello \"world\"","\"dlrow\" olleh"]),
[ExactFile2] = run_echo_args(SpaceDir,[default]),
[ExactFile2,"hello world","dlrow olleh"] =
- run_echo_args(SpaceDir,[switch_order,ExactFile2,"hello world",
- "dlrow olleh"]),
+ run_echo_args(SpaceDir,[switch_order,ExactFile2,"hello world", "dlrow olleh"]),
[ExactFile2,"hello world","dlrow olleh"] =
- run_echo_args(SpaceDir,[default,"hello world","dlrow olleh"]),
+ run_echo_args(SpaceDir,[default,"hello world","dlrow olleh"]),
[ExactFile2,"hello world","dlrow olleh"] =
- run_echo_args_2("\""++ExactFile2++"\" "++"\"hello world\" \"dlrow olleh\""),
+ run_echo_args_2("\""++ExactFile2++"\" "++"\"hello world\" \"dlrow olleh\""),
[ExactFile2,"hello world","dlrow olleh"] =
- run_echo_args_2(unicode:characters_to_binary("\""++ExactFile2++"\" "++"\"hello world\" \"dlrow olleh\"")),
+ run_echo_args_2(unicode:characters_to_binary("\""++ExactFile2++"\" "++"\"hello world\" \"dlrow olleh\"")),
ExeExt =
- case string:to_lower(lists:last(string:tokens(ExactFile2,"."))) of
- "exe" ->
- ".exe";
- _ ->
- ""
- end,
+ case string:to_lower(lists:last(string:tokens(ExactFile2,"."))) of
+ "exe" ->
+ ".exe";
+ _ ->
+ ""
+ end,
Executable2 = "spoky name"++ExeExt,
file:copy(ExactFile1,filename:join([SpaceDir,Executable2])),
ExactFile3 = filename:nativename(filename:join([SpaceDir,Executable2])),
@@ -1524,38 +1453,37 @@ spawn_executable(Config) when is_list(Config) ->
["echo_args"] = run_echo_args(SpaceDir,Executable2,["echo_args"]),
["echo_arguments"] = run_echo_args(SpaceDir,Executable2,["echo_arguments"]),
[ExactFile3,"hello world","dlrow olleh"] =
- run_echo_args(SpaceDir,Executable2,[ExactFile3,"hello world","dlrow olleh"]),
+ run_echo_args(SpaceDir,Executable2,[ExactFile3,"hello world","dlrow olleh"]),
[ExactFile3] = run_echo_args(SpaceDir,Executable2,[default]),
[ExactFile3,"hello world","dlrow olleh"] =
- run_echo_args(SpaceDir,Executable2,
- [switch_order,ExactFile3,"hello world",
- "dlrow olleh"]),
+ run_echo_args(SpaceDir,Executable2,
+ [switch_order,ExactFile3,"hello world",
+ "dlrow olleh"]),
[ExactFile3,"hello world","dlrow olleh"] =
- run_echo_args(SpaceDir,Executable2,
- [default,"hello world","dlrow olleh"]),
+ run_echo_args(SpaceDir,Executable2,
+ [default,"hello world","dlrow olleh"]),
[ExactFile3,"hello world","dlrow olleh"] =
- run_echo_args_2("\""++ExactFile3++"\" "++"\"hello world\" \"dlrow olleh\""),
+ run_echo_args_2("\""++ExactFile3++"\" "++"\"hello world\" \"dlrow olleh\""),
[ExactFile3,"hello world","dlrow olleh"] =
- run_echo_args_2(unicode:characters_to_binary("\""++ExactFile3++"\" "++"\"hello world\" \"dlrow olleh\"")),
+ run_echo_args_2(unicode:characters_to_binary("\""++ExactFile3++"\" "++"\"hello world\" \"dlrow olleh\"")),
{'EXIT',{enoent,_}} = (catch run_echo_args(SpaceDir,"fnurflmonfi",
- [default,"hello world",
- "dlrow olleh"])),
+ [default,"hello world",
+ "dlrow olleh"])),
NonExec = "kronxfrt"++ExeExt,
file:write_file(filename:join([SpaceDir,NonExec]),
- <<"Not an executable">>),
+ <<"Not an executable">>),
{'EXIT',{eacces,_}} = (catch run_echo_args(SpaceDir,NonExec,
- [default,"hello world",
- "dlrow olleh"])),
+ [default,"hello world",
+ "dlrow olleh"])),
{'EXIT',{enoent,_}} = (catch open_port({spawn_executable,"cmd"},[])),
{'EXIT',{enoent,_}} = (catch open_port({spawn_executable,"sh"},[])),
case os:type() of
- {win32,_} ->
- test_bat_file(SpaceDir);
- {unix,_} ->
- test_sh_file(SpaceDir)
+ {win32,_} ->
+ test_bat_file(SpaceDir);
+ {unix,_} ->
+ test_sh_file(SpaceDir)
end,
- test_server:timetrap_cancel(Dog),
ok.
unregister_name(Config) when is_list(Config) ->
@@ -1566,29 +1494,29 @@ test_bat_file(Dir) ->
FN = "tf.bat",
Full = filename:join([Dir,FN]),
D = [<<"@echo off\r\n">>,
- <<"echo argv[0]:^|%0^|\r\n">>,
- <<"if \"%1\" == \"\" goto done\r\n">>,
- <<"echo argv[1]:^|%1^|\r\n">>,
- <<"if \"%2\" == \"\" goto done\r\n">>,
- <<"echo argv[2]:^|%2^|\r\n">>,
- <<"if \"%3\" == \"\" goto done\r\n">>,
- <<"echo argv[3]:^|%3^|\r\n">>,
- <<"if \"%4\" == \"\" goto done\r\n">>,
- <<"echo argv[4]:^|%4^|\r\n">>,
- <<"if \"%5\" == \"\" goto done\r\n">>,
- <<"echo argv[5]:^|%5^|\r\n">>,
- <<"\r\n">>,
- <<":done\r\n">>,
- <<"\r\n">>],
+ <<"echo argv[0]:^|%0^|\r\n">>,
+ <<"if \"%1\" == \"\" goto done\r\n">>,
+ <<"echo argv[1]:^|%1^|\r\n">>,
+ <<"if \"%2\" == \"\" goto done\r\n">>,
+ <<"echo argv[2]:^|%2^|\r\n">>,
+ <<"if \"%3\" == \"\" goto done\r\n">>,
+ <<"echo argv[3]:^|%3^|\r\n">>,
+ <<"if \"%4\" == \"\" goto done\r\n">>,
+ <<"echo argv[4]:^|%4^|\r\n">>,
+ <<"if \"%5\" == \"\" goto done\r\n">>,
+ <<"echo argv[5]:^|%5^|\r\n">>,
+ <<"\r\n">>,
+ <<":done\r\n">>,
+ <<"\r\n">>],
file:write_file(Full,list_to_binary(D)),
EF = filename:basename(FN),
[DN,"hello","world"] =
- run_echo_args(Dir,FN,
- [default,"hello","world"]),
+ run_echo_args(Dir,FN,
+ [default,"hello","world"]),
%% The arg0 argumant should be ignored when running batch files
[DN,"hello","world"] =
- run_echo_args(Dir,FN,
- ["knaskurt","hello","world"]),
+ run_echo_args(Dir,FN,
+ ["knaskurt","hello","world"]),
EF = filename:basename(DN),
ok.
@@ -1596,40 +1524,40 @@ test_sh_file(Dir) ->
FN = "tf.sh",
Full = filename:join([Dir,FN]),
D = [<<"#! /bin/sh\n">>,
- <<"echo 'argv[0]:|'$0'|'\n">>,
- <<"i=1\n">>,
- <<"while [ '!' -z \"$1\" ]; do\n">>,
- <<" echo 'argv['$i']:|'\"$1\"'|'\n">>,
- <<" shift\n">>,
- <<" i=`expr $i + 1`\n">>,
- <<"done\n">>],
+ <<"echo 'argv[0]:|'$0'|'\n">>,
+ <<"i=1\n">>,
+ <<"while [ '!' -z \"$1\" ]; do\n">>,
+ <<" echo 'argv['$i']:|'\"$1\"'|'\n">>,
+ <<" shift\n">>,
+ <<" i=`expr $i + 1`\n">>,
+ <<"done\n">>],
file:write_file(Full,list_to_binary(D)),
chmodplusx(Full),
[Full,"hello","world"] =
- run_echo_args(Dir,FN,
- [default,"hello","world"]),
+ run_echo_args(Dir,FN,
+ [default,"hello","world"]),
[Full,"hello","world of spaces"] =
- run_echo_args(Dir,FN,
- [default,"hello","world of spaces"]),
+ run_echo_args(Dir,FN,
+ [default,"hello","world of spaces"]),
file:write_file(filename:join([Dir,"testfile1"]),<<"testdata1">>),
file:write_file(filename:join([Dir,"testfile2"]),<<"testdata2">>),
Pattern = filename:join([Dir,"testfile*"]),
L = filelib:wildcard(Pattern),
2 = length(L),
[Full,"hello",Pattern] =
- run_echo_args(Dir,FN,
- [default,"hello",Pattern]),
- ok.
+ run_echo_args(Dir,FN,
+ [default,"hello",Pattern]),
+ ok.
+
-
chmodplusx(Filename) ->
case file:read_file_info(Filename) of
- {ok,FI} ->
- FI2 = FI#file_info{mode = ((FI#file_info.mode) bor 8#00100)},
- file:write_file_info(Filename,FI2);
- _ ->
- ok
+ {ok,FI} ->
+ FI2 = FI#file_info{mode = ((FI#file_info.mode) bor 8#00100)},
+ file:write_file_info(Filename,FI2);
+ _ ->
+ ok
end.
run_echo_args_2(FullnameAndArgs) ->
@@ -1638,7 +1566,7 @@ run_echo_args_2(FullnameAndArgs) ->
Port ! {self(), close},
receive {Port, closed} -> ok end,
parse_echo_args_output(Data).
-
+
run_echo_args(Where,Args) ->
run_echo_args(Where,"echo_args",Args).
@@ -1646,9 +1574,9 @@ run_echo_args(Where,Prog,Args) ->
{Binary, ArgvArg} = pack_argv(Args),
Command0 = filename:join([Where,Prog]),
Command = case Binary of
- true -> unicode:characters_to_binary(Command0);
- false -> Command0
- end,
+ true -> unicode:characters_to_binary(Command0);
+ false -> Command0
+ end,
Port = open_port({spawn_executable,Command},ArgvArg++[eof]),
Data = collect_data(Port),
Port ! {self(), close},
@@ -1662,14 +1590,14 @@ pack_argv(Args) ->
pack_argv(Args, Binary) ->
case Args of
- [] ->
- [];
- [default|T] ->
- [{args,[make_bin(Arg,Binary) || Arg <- T]}];
- [switch_order,H|T] ->
- [{args,[make_bin(Arg,Binary) || Arg <- T]},{arg0,make_bin(H,Binary)}];
- [H|T] ->
- [{arg0,make_bin(H,Binary)},{args,[make_bin(Arg,Binary) || Arg <- T]}]
+ [] ->
+ [];
+ [default|T] ->
+ [{args,[make_bin(Arg,Binary) || Arg <- T]}];
+ [switch_order,H|T] ->
+ [{args,[make_bin(Arg,Binary) || Arg <- T]},{arg0,make_bin(H,Binary)}];
+ [H|T] ->
+ [{arg0,make_bin(H,Binary)},{args,[make_bin(Arg,Binary) || Arg <- T]}]
end.
make_bin(Str, false) -> Str;
@@ -1677,54 +1605,49 @@ make_bin(Str, true) -> unicode:characters_to_binary(Str).
collect_data(Port) ->
receive
- {Port, {data, Data}} ->
- Data ++ collect_data(Port);
- {Port, eof} ->
- []
+ {Port, {data, Data}} ->
+ Data ++ collect_data(Port);
+ {Port, eof} ->
+ []
end.
parse_echo_args_output(Data) ->
[lists:last(string:tokens(S,"|")) || S <- string:tokens(Data,"\r\n")].
-mix_up_ports(suite) ->
- [];
-mix_up_ports(doc) ->
- ["Test that the emulator does not mix up ports when the port table wraps"];
+%% Test that the emulator does not mix up ports when the port table wraps
mix_up_ports(Config) when is_list(Config) ->
- Dog = test_server:timetrap(test_server:seconds(10)),
- Path = ?config(data_dir, Config),
+ Path = proplists:get_value(data_dir, Config),
ok = load_driver(Path, "echo_drv"),
Port = erlang:open_port({spawn, "echo_drv"}, []),
Port ! {self(), {command, "Hello port!"}},
receive
- {Port, {data, "Hello port!"}} = Msg1 ->
- io:format("~p~n", [Msg1]),
- ok;
- Other ->
- test_server:fail({unexpected, Other})
- end,
+ {Port, {data, "Hello port!"}} = Msg1 ->
+ io:format("~p~n", [Msg1]),
+ ok;
+ Other ->
+ ct:fail({unexpected, Other})
+ end,
Port ! {self(), close},
receive {Port, closed} -> ok end,
loop(start, done,
- fun(P) ->
- Q =
- (catch erlang:open_port({spawn, "echo_drv"}, [])),
-%% io:format("~p ", [Q]),
- if is_port(Q) ->
- Q;
- true ->
- io:format("~p~n", [P]),
- done
- end
- end),
+ fun(P) ->
+ Q =
+ (catch erlang:open_port({spawn, "echo_drv"}, [])),
+ %% io:format("~p ", [Q]),
+ if is_port(Q) ->
+ Q;
+ true ->
+ io:format("~p~n", [P]),
+ done
+ end
+ end),
Port ! {self(), {command, "Hello again port!"}},
receive
- Msg2 ->
- test_server:fail({unexpected, Msg2})
- after 1000 ->
- ok
- end,
- test_server:timetrap_cancel(Dog),
+ Msg2 ->
+ ct:fail({unexpected, Msg2})
+ after 1000 ->
+ ok
+ end,
ok.
loop(Stop, Stop, Fun) when is_function(Fun) ->
@@ -1733,131 +1656,118 @@ loop(Start, Stop, Fun) when is_function(Fun) ->
loop(Fun(Start), Stop, Fun).
-otp_5112(suite) ->
- [];
-otp_5112(doc) ->
- ["Test that link to connected process is taken away when port calls",
- "driver_exit() also when the port index has wrapped"];
+%% Test that link to connected process is taken away when port calls
+%% driver_exit() also when the port index has wrapped
otp_5112(Config) when is_list(Config) ->
- Dog = test_server:timetrap(test_server:seconds(10)),
- Path = ?config(data_dir, Config),
+ Path = proplists:get_value(data_dir, Config),
ok = load_driver(Path, "exit_drv"),
Port = otp_5112_get_wrapped_port(),
- ?t:format("Max ports: ~p~n",[max_ports()]),
- ?t:format("Port: ~p~n",[Port]),
+ io:format("Max ports: ~p~n",[max_ports()]),
+ io:format("Port: ~p~n",[Port]),
{links, Links1} = process_info(self(),links),
- ?t:format("Links1: ~p~n",[Links1]),
+ io:format("Links1: ~p~n",[Links1]),
true = lists:member(Port, Links1),
Port ! {self(), {command, ""}},
- ?line wait_until(fun () -> lists:member(Port, erlang:ports()) == false end),
+ wait_until(fun () -> lists:member(Port, erlang:ports()) == false end),
{links, Links2} = process_info(self(),links),
- ?t:format("Links2: ~p~n",[Links2]),
+ io:format("Links2: ~p~n",[Links2]),
false = lists:member(Port, Links2), %% This used to fail
- test_server:timetrap_cancel(Dog),
ok.
otp_5112_get_wrapped_port() ->
P1 = erlang:open_port({spawn, "exit_drv"}, []),
case port_ix(P1) < max_ports() of
- true ->
- ?t:format("Need to wrap port index (~p)~n", [P1]),
- otp_5112_wrap_port_ix([P1]),
- P2 = erlang:open_port({spawn, "exit_drv"}, []),
- false = port_ix(P2) < max_ports(),
- P2;
- false ->
- ?t:format("Port index already wrapped (~p)~n", [P1]),
- P1
- end.
+ true ->
+ io:format("Need to wrap port index (~p)~n", [P1]),
+ otp_5112_wrap_port_ix([P1]),
+ P2 = erlang:open_port({spawn, "exit_drv"}, []),
+ false = port_ix(P2) < max_ports(),
+ P2;
+ false ->
+ io:format("Port index already wrapped (~p)~n", [P1]),
+ P1
+ end.
otp_5112_wrap_port_ix(Ports) ->
case (catch erlang:open_port({spawn, "exit_drv"}, [])) of
- Port when is_port(Port) ->
- otp_5112_wrap_port_ix([Port|Ports]);
- _ ->
- %% Port table now full; empty port table
- lists:foreach(fun (P) -> P ! {self(), close} end,
- Ports),
- ok
- end.
+ Port when is_port(Port) ->
+ otp_5112_wrap_port_ix([Port|Ports]);
+ _ ->
+ %% Port table now full; empty port table
+ lists:foreach(fun (P) -> P ! {self(), close} end,
+ Ports),
+ ok
+ end.
-otp_5119(suite) ->
- [];
-otp_5119(doc) ->
- ["Test that port index is not unnecessarily wrapped"];
+%% Test that port index is not unnecessarily wrapped
otp_5119(Config) when is_list(Config) ->
- Dog = test_server:timetrap(test_server:seconds(10)),
- Path = ?config(data_dir, Config),
+ Path = proplists:get_value(data_dir, Config),
ok = load_driver(Path, "exit_drv"),
PI1 = port_ix(otp_5119_fill_empty_port_tab([])),
Port2 = erlang:open_port({spawn, "exit_drv"}, []),
PI2 = port_ix(Port2),
{PortIx1, PortIx2} = case PI2 > PI1 of
- true ->
- {PI1, PI2};
- false ->
- {port_ix(otp_5119_fill_empty_port_tab([Port2])),
- port_ix(erlang:open_port({spawn, "exit_drv"}, []))}
- end,
+ true ->
+ {PI1, PI2};
+ false ->
+ {port_ix(otp_5119_fill_empty_port_tab([Port2])),
+ port_ix(erlang:open_port({spawn, "exit_drv"}, []))}
+ end,
MaxPorts = max_ports(),
- ?t:format("PortIx1 = ~p ~p~n", [PI1, PortIx1]),
- ?t:format("PortIx2 = ~p ~p~n", [PI2, PortIx2]),
- ?t:format("MaxPorts = ~p~n", [MaxPorts]),
+ io:format("PortIx1 = ~p ~p~n", [PI1, PortIx1]),
+ io:format("PortIx2 = ~p ~p~n", [PI2, PortIx2]),
+ io:format("MaxPorts = ~p~n", [MaxPorts]),
true = PortIx2 > PortIx1,
true = PortIx2 =< PortIx1 + MaxPorts,
- test_server:timetrap_cancel(Dog),
ok.
otp_5119_fill_empty_port_tab(Ports) ->
case (catch erlang:open_port({spawn, "exit_drv"}, [])) of
- Port when is_port(Port) ->
- otp_5119_fill_empty_port_tab([Port|Ports]);
- _ ->
- %% Port table now full; empty port table
- lists:foreach(fun (P) -> P ! {self(), close} end,
- Ports),
- [LastPort|_] = Ports,
- LastPort
- end.
+ Port when is_port(Port) ->
+ otp_5119_fill_empty_port_tab([Port|Ports]);
+ _ ->
+ %% Port table now full; empty port table
+ lists:foreach(fun (P) -> P ! {self(), close} end,
+ Ports),
+ [LastPort|_] = Ports,
+ LastPort
+ end.
max_ports() ->
erlang:system_info(port_limit).
port_ix(Port) when is_port(Port) ->
["#Port",_,PortIxStr] = string:tokens(erlang:port_to_list(Port),
- "<.>"),
+ "<.>"),
list_to_integer(PortIxStr).
-otp_6224(doc) -> ["Check that port command failure doesn't crash the emulator"];
-otp_6224(suite) -> [];
+%% Check that port command failure doesn't crash the emulator
otp_6224(Config) when is_list(Config) ->
- Dog = test_server:timetrap(test_server:seconds(10)),
- Path = ?config(data_dir, Config),
+ Path = proplists:get_value(data_dir, Config),
ok = load_driver(Path, "failure_drv"),
Go = make_ref(),
Failer = spawn(fun () ->
- receive Go -> ok end,
- Port = open_port({spawn, "failure_drv"},
- []),
- Port ! {self(), {command, "Fail, please!"}},
- otp_6224_loop()
- end),
+ receive Go -> ok end,
+ Port = open_port({spawn, "failure_drv"},
+ []),
+ Port ! {self(), {command, "Fail, please!"}},
+ otp_6224_loop()
+ end),
Mon = erlang:monitor(process, Failer),
Failer ! Go,
receive
- {'DOWN', Mon, process, Failer, Reason} ->
- case Reason of
- {driver_failed, _} -> ok;
- driver_failed -> ok;
- _ -> ?t:fail({unexpected_exit_reason,
- Reason})
- end
- end,
- test_server:timetrap_cancel(Dog),
+ {'DOWN', Mon, process, Failer, Reason} ->
+ case Reason of
+ {driver_failed, _} -> ok;
+ driver_failed -> ok;
+ _ -> ct:fail({unexpected_exit_reason,
+ Reason})
+ end
+ end,
ok.
-
+
otp_6224_loop() ->
receive _ -> ok after 0 -> ok end,
otp_6224_loop().
@@ -1866,29 +1776,26 @@ otp_6224_loop() ->
-define(EXIT_STATUS_MSB_MAX_PROCS, 64).
-define(EXIT_STATUS_MSB_MAX_PORTS, 300).
-exit_status_multi_scheduling_block(doc) -> [];
-exit_status_multi_scheduling_block(suite) -> [];
exit_status_multi_scheduling_block(Config) when is_list(Config) ->
Repeat = 3,
- case ?t:os_type() of
- {unix, _} ->
- Dog = ?t:timetrap(test_server:minutes(2*Repeat)),
- SleepSecs = 6,
- try
- lists:foreach(fun (_) ->
- exit_status_msb_test(Config,
- SleepSecs)
- end,
- lists:seq(1, Repeat))
- after
- %% Wait for the system to recover (regardless
- %% of success or not) otherwise later testcases
- %% may unnecessarily fail.
- ?t:timetrap_cancel(Dog),
- receive after SleepSecs+500 -> ok end
- end;
- _ -> {skip, "Not implemented for this OS"}
- end.
+ case os:type() of
+ {unix, _} ->
+ ct:timetrap({minutes, 2*Repeat}),
+ SleepSecs = 6,
+ try
+ lists:foreach(fun (_) ->
+ exit_status_msb_test(Config,
+ SleepSecs)
+ end,
+ lists:seq(1, Repeat))
+ after
+ %% Wait for the system to recover (regardless
+ %% of success or not) otherwise later testcases
+ %% may unnecessarily fail.
+ receive after SleepSecs+500 -> ok end
+ end;
+ _ -> {skip, "Not implemented for this OS"}
+ end.
exit_status_msb_test(Config, SleepSecs) when is_list(Config) ->
%%
@@ -1898,133 +1805,131 @@ exit_status_msb_test(Config, SleepSecs) when is_list(Config) ->
%%
NoSchedsOnln = erlang:system_info(schedulers_online),
Parent = self(),
- ?t:format("SleepSecs = ~p~n", [SleepSecs]),
+ io:format("SleepSecs = ~p~n", [SleepSecs]),
PortProg = "sleep " ++ integer_to_list(SleepSecs),
Start = erlang:monotonic_time(micro_seconds),
NoProcs = case NoSchedsOnln of
- NProcs when NProcs < ?EXIT_STATUS_MSB_MAX_PROCS ->
- NProcs;
- _ ->
- ?EXIT_STATUS_MSB_MAX_PROCS
- end,
+ NProcs when NProcs < ?EXIT_STATUS_MSB_MAX_PROCS ->
+ NProcs;
+ _ ->
+ ?EXIT_STATUS_MSB_MAX_PROCS
+ end,
NoPortsPerProc = case 20*NoProcs of
- TNPorts when TNPorts < ?EXIT_STATUS_MSB_MAX_PORTS -> 20;
- _ -> ?EXIT_STATUS_MSB_MAX_PORTS div NoProcs
- end,
- ?t:format("NoProcs = ~p~nNoPortsPerProc = ~p~n",
- [NoProcs, NoPortsPerProc]),
+ TNPorts when TNPorts < ?EXIT_STATUS_MSB_MAX_PORTS -> 20;
+ _ -> ?EXIT_STATUS_MSB_MAX_PORTS div NoProcs
+ end,
+ io:format("NoProcs = ~p~nNoPortsPerProc = ~p~n",
+ [NoProcs, NoPortsPerProc]),
ProcFun
- = fun () ->
- PrtSIds = lists:map(
- fun (_) ->
- erlang:yield(),
- case catch open_port({spawn, PortProg},
- [exit_status]) of
- Prt when is_port(Prt) ->
- {Prt,
- erlang:system_info(scheduler_id)};
- {'EXIT', {Err, _}} when Err == eagain;
- Err == emfile;
- Err == enomem ->
- noop;
- {'EXIT', Err} when Err == eagain;
- Err == emfile;
- Err == enomem ->
- noop;
- Error ->
- ?t:fail(Error)
- end
- end,
- lists:seq(1, NoPortsPerProc)),
- SIds = lists:filter(fun (noop) -> false;
- (_) -> true
- end,
- lists:map(fun (noop) -> noop;
- ({_, SId}) -> SId
- end,
- PrtSIds)),
- process_flag(scheduler, 0),
- Parent ! {self(), started, SIds},
- lists:foreach(
- fun (noop) ->
- noop;
- ({Port, _}) ->
- receive
- {Port, {exit_status, 0}} ->
- ok;
- {Port, {exit_status, Status}} when Status > 128 ->
- %% Sometimes happens when we have created
- %% too many ports.
- ok;
- {Port, {exit_status, _}} = ESMsg ->
- {Port, {exit_status, 0}} = ESMsg
- end
- end,
- PrtSIds),
- Parent ! {self(), done}
- end,
+ = fun () ->
+ PrtSIds = lists:map(
+ fun (_) ->
+ erlang:yield(),
+ case catch open_port({spawn, PortProg},
+ [exit_status]) of
+ Prt when is_port(Prt) ->
+ {Prt,
+ erlang:system_info(scheduler_id)};
+ {'EXIT', {Err, _}} when Err == eagain;
+ Err == emfile;
+ Err == enomem ->
+ noop;
+ {'EXIT', Err} when Err == eagain;
+ Err == emfile;
+ Err == enomem ->
+ noop;
+ Error ->
+ ct:fail(Error)
+ end
+ end,
+ lists:seq(1, NoPortsPerProc)),
+ SIds = lists:filter(fun (noop) -> false;
+ (_) -> true
+ end,
+ lists:map(fun (noop) -> noop;
+ ({_, SId}) -> SId
+ end,
+ PrtSIds)),
+ process_flag(scheduler, 0),
+ Parent ! {self(), started, SIds},
+ lists:foreach(
+ fun (noop) ->
+ noop;
+ ({Port, _}) ->
+ receive
+ {Port, {exit_status, 0}} ->
+ ok;
+ {Port, {exit_status, Status}} when Status > 128 ->
+ %% Sometimes happens when we have created
+ %% too many ports.
+ ok;
+ {Port, {exit_status, _}} = ESMsg ->
+ {Port, {exit_status, 0}} = ESMsg
+ end
+ end,
+ PrtSIds),
+ Parent ! {self(), done}
+ end,
Procs = lists:map(fun (N) ->
- spawn_opt(ProcFun,
- [link,
- {scheduler,
- (N rem NoSchedsOnln)+1}])
- end,
- lists:seq(1, NoProcs)),
+ spawn_opt(ProcFun,
+ [link,
+ {scheduler,
+ (N rem NoSchedsOnln)+1}])
+ end,
+ lists:seq(1, NoProcs)),
SIds = lists:map(fun (P) ->
- receive {P, started, SIds} -> SIds end
- end,
- Procs),
+ receive {P, started, SIds} -> SIds end
+ end,
+ Procs),
StartedTime = (erlang:monotonic_time(micro_seconds) - Start)/1000000,
- ?t:format("StartedTime = ~p~n", [StartedTime]),
+ io:format("StartedTime = ~p~n", [StartedTime]),
true = StartedTime < SleepSecs,
erlang:system_flag(multi_scheduling, block),
lists:foreach(fun (P) -> receive {P, done} -> ok end end, Procs),
DoneTime = (erlang:monotonic_time(micro_seconds) - Start)/1000000,
- ?t:format("DoneTime = ~p~n", [DoneTime]),
+ io:format("DoneTime = ~p~n", [DoneTime]),
true = DoneTime > SleepSecs,
ok = verify_multi_scheduling_blocked(),
erlang:system_flag(multi_scheduling, unblock),
case {length(lists:usort(lists:flatten(SIds))), NoSchedsOnln} of
- {N, N} ->
- ok;
- {N, M} ->
- ?t:fail("Failed to create ports on all"
- ++ integer_to_list(M) ++ " available"
- "schedulers. Only created ports on "
- ++ integer_to_list(N) ++ " schedulers.")
- end.
+ {N, N} ->
+ ok;
+ {N, M} ->
+ ct:fail("Failed to create ports on all ~w available"
+ "schedulers. Only created ports on ~w schedulers.", [M, N])
+ end.
save_sid(SIds) ->
SId = erlang:system_info(scheduler_id),
case lists:member(SId, SIds) of
- true -> SIds;
- false -> [SId|SIds]
+ true -> SIds;
+ false -> [SId|SIds]
end.
sid_proc(SIds) ->
NewSIds = save_sid(SIds),
receive
- {From, want_sids} ->
- From ! {self(), sids, NewSIds}
+ {From, want_sids} ->
+ From ! {self(), sids, NewSIds}
after 0 ->
- sid_proc(NewSIds)
+ sid_proc(NewSIds)
end.
verify_multi_scheduling_blocked() ->
Procs = lists:map(fun (_) ->
- spawn_link(fun () -> sid_proc([]) end)
- end,
- lists:seq(1, 3*erlang:system_info(schedulers_online))),
+ spawn_link(fun () -> sid_proc([]) end)
+ end,
+ lists:seq(1, 3*erlang:system_info(schedulers_online))),
receive after 1000 -> ok end,
SIds = lists:map(fun (P) ->
- P ! {self(), want_sids},
- receive {P, sids, PSIds} -> PSIds end
- end,
- Procs),
+ P ! {self(), want_sids},
+ receive {P, sids, PSIds} -> PSIds end
+ end,
+ Procs),
1 = length(lists:usort(lists:flatten(SIds))),
ok.
-
-
+
+
%%% Pinging functions.
stream_ping(Config, Size, CmdLine, Options) ->
@@ -2033,10 +1938,10 @@ stream_ping(Config, Size, CmdLine, Options) ->
ping(Config, Sizes, HSize, CmdLine, Options) ->
Actions = lists:map(fun(Size) ->
- [$p|Packet] = random_packet(Size, "ping"),
- {[$p|Packet], [[$P|Packet]]}
- end,
- Sizes),
+ [$p|Packet] = random_packet(Size, "ping"),
+ {[$p|Packet], [[$P|Packet]]}
+ end,
+ Sizes),
port_expect(Config, Actions, HSize, CmdLine, Options).
%% expect_input(Sizes, HSize, CmdLine, Options)
@@ -2058,7 +1963,7 @@ expect_input1(Config, [Size|Rest], Params, Expect, ReplyCommand) ->
expect_input1(Config, [], {HSize, CmdLine0, Options}, Expect, ReplyCommand) ->
CmdLine = build_cmd_line(CmdLine0, ReplyCommand, []),
port_expect(Config, [{false, lists:reverse(Expect)}],
- HSize, CmdLine, Options).
+ HSize, CmdLine, Options).
build_cmd_line(FixedCmdLine, [Cmd|Rest], []) ->
build_cmd_line(FixedCmdLine, Rest, [Cmd]);
@@ -2081,15 +1986,15 @@ build_cmd_line(FixedCmdLine, [], Result) ->
%% Returns the port.
port_expect(Config, Actions, HSize, CmdLine, Options0) ->
-% io:format("port_expect(~p, ~p, ~p, ~p)",
-% [Actions, HSize, CmdLine, Options0]),
+ % io:format("port_expect(~p, ~p, ~p, ~p)",
+ % [Actions, HSize, CmdLine, Options0]),
PortTest = port_test(Config),
Cmd = lists:concat([PortTest, " -h", HSize, " ", CmdLine]),
PortType =
- case HSize of
- 0 -> stream;
- _ -> {packet, HSize}
- end,
+ case HSize of
+ 0 -> stream;
+ _ -> {packet, HSize}
+ end,
Options = [PortType|Options0],
io:format("open_port({spawn, ~p}, ~p)", [Cmd, Options]),
Port = open_port({spawn, Cmd}, Options),
@@ -2100,11 +2005,11 @@ port_expect(Port, [{Send, Expects}|Rest], Options) when is_list(Expects) ->
port_send(Port, Send),
IsBinaryPort = lists:member(binary, Options),
Receiver =
- case {lists:member(stream, Options), line_option(Options)} of
- {false, _} -> fun receive_all/2;
- {true,false} -> fun stream_receive_all/2;
- {_, true} -> fun receive_all/2
- end,
+ case {lists:member(stream, Options), line_option(Options)} of
+ {false, _} -> fun receive_all/2;
+ {true,false} -> fun stream_receive_all/2;
+ {_, true} -> fun receive_all/2
+ end,
Receiver(Port, maybe_to_binary(Expects, IsBinaryPort)),
port_expect(Port, Rest, Options);
port_expect(_, [], _) ->
@@ -2132,34 +2037,34 @@ maybe_to_binary(Expects, false) ->
port_send(_Port, false) -> ok;
port_send(Port, Send) when is_list(Send) ->
-% io:format("port_send(~p, ~p)", [Port, Send]),
+ % io:format("port_send(~p, ~p)", [Port, Send]),
Port ! {self(), {command, Send}}.
receive_all(Port, [Expect|Rest]) ->
-% io:format("receive_all(~p, [~p|Rest])", [Port, Expect]),
+ % io:format("receive_all(~p, [~p|Rest])", [Port, Expect]),
receive
- {Port, {data, Expect}} ->
- io:format("Received ~s", [format(Expect)]),
- ok;
- {Port, {data, Other}} ->
- io:format("Received ~s; expected ~s",
- [format(Other), format(Expect)]),
- test_server:fail(bad_message);
- Other ->
- %% (We're not yet prepared for receiving both 'eol' and
- %% 'exit_status'; remember that they may appear in any order.)
- case {Expect, Rest, Other} of
- {eof, [], {Port, eof}} ->
- io:format("Received soft EOF.",[]),
- ok;
- {{exit_status, S}, [], {Port, {exit_status, S}}} ->
- io:format("Received exit status ~p.",[S]),
- ok;
- _ ->
-%%% io:format("Unexpected message: ~s", [format(Other)]),
- io:format("Unexpected message: ~w", [Other]),
- test_server:fail(unexpected_message)
- end
+ {Port, {data, Expect}} ->
+ io:format("Received ~s", [format(Expect)]),
+ ok;
+ {Port, {data, Other}} ->
+ io:format("Received ~s; expected ~s",
+ [format(Other), format(Expect)]),
+ ct:fail(bad_message);
+ Other ->
+ %% (We're not yet prepared for receiving both 'eol' and
+ %% 'exit_status'; remember that they may appear in any order.)
+ case {Expect, Rest, Other} of
+ {eof, [], {Port, eof}} ->
+ io:format("Received soft EOF.",[]),
+ ok;
+ {{exit_status, S}, [], {Port, {exit_status, S}}} ->
+ io:format("Received exit status ~p.",[S]),
+ ok;
+ _ ->
+ %%% io:format("Unexpected message: ~s", [format(Other)]),
+ io:format("Unexpected message: ~w", [Other]),
+ ct:fail(unexpected_message)
+ end
end,
receive_all(Port, Rest);
receive_all(_Port, []) ->
@@ -2174,30 +2079,30 @@ stream_receive_all1(_Port, []) ->
ok;
stream_receive_all1(Port, Expect) ->
receive
- {Port, {data, Data}} ->
- Remaining = compare(Data, Expect),
- stream_receive_all1(Port, Remaining);
- Other ->
- test_server:fail({bad_message, Other})
+ {Port, {data, Data}} ->
+ Remaining = compare(Data, Expect),
+ stream_receive_all1(Port, Remaining);
+ Other ->
+ ct:fail({bad_message, Other})
end.
compare(B1, B2) when is_binary(B1), is_binary(B2), byte_size(B1) =< byte_size(B2) ->
case split_binary(B2, size(B1)) of
- {B1,Remaining} ->
- Remaining;
- _Other ->
- test_server:fail(nomatch)
+ {B1,Remaining} ->
+ Remaining;
+ _Other ->
+ ct:fail(nomatch)
end;
compare(B1, B2) when is_binary(B1), is_binary(B2) ->
- test_server:fail(too_much_data);
+ ct:fail(too_much_data);
compare([X|Rest1], [X|Rest2]) ->
compare(Rest1, Rest2);
compare([_|_], [_|_]) ->
- test_server:fail(nomatch);
+ ct:fail(nomatch);
compare([], Remaining) ->
Remaining;
compare(_Data, []) ->
- test_server:fail(too_much_data).
+ ct:fail(too_much_data).
maybe_to_list(Bin) when is_binary(Bin) ->
binary_to_list(Bin);
@@ -2208,10 +2113,10 @@ format({Eol,List}) ->
io_lib:format("tuple<~w,~s>",[Eol, maybe_to_list(List)]);
format(List) when is_list(List) ->
case list_at_least(50, List) of
- true ->
- io_lib:format("\"~-50s...\"", [List]);
- false ->
- io_lib:format("~p", [List])
+ true ->
+ io_lib:format("\"~-50s...\"", [List]);
+ false ->
+ io_lib:format("~p", [List])
end;
format(Bin) when is_binary(Bin), size(Bin) >= 50 ->
io_lib:format("binary<~-50s...>", [binary_to_list(Bin, 1, 50)]);
@@ -2238,17 +2143,17 @@ build_packet(0, Result, _NextChar) ->
lists:reverse(Result);
build_packet(Left, Result, NextChar0) ->
NextChar =
- if
- NextChar0 >= 126 ->
- 33;
- true ->
- NextChar0+1
- end,
+ if
+ NextChar0 >= 126 ->
+ 33;
+ true ->
+ NextChar0+1
+ end,
build_packet(Left-1, [NextChar0|Result], NextChar).
sizes() ->
[10, 13, 64, 127, 128, 255, 256, 1023, 1024,
- 32767, 32768, 65535, 65536].
+ 32767, 32768, 65535, 65536].
sizes(Header_Size) ->
sizes(Header_Size, sizes(), []).
@@ -2270,11 +2175,11 @@ random_char(Chars) ->
uniform(N) ->
case rand:export_seed() of
- undefined ->
- rand:seed(exsplus),
- io:format("Random seed = ~p\n", [rand:export_seed()]);
- _ ->
- ok
+ undefined ->
+ rand:seed(exsplus),
+ io:format("Random seed = ~p\n", [rand:export_seed()]);
+ _ ->
+ ok
end,
rand:uniform(N).
@@ -2285,13 +2190,11 @@ fun_spawn(Fun, Args) ->
spawn_link(erlang, apply, [Fun, Args]).
port_test(Config) when is_list(Config) ->
- filename:join(?config(data_dir, Config), "port_test").
-
+ filename:join(proplists:get_value(data_dir, Config), "port_test").
-ports(doc) -> "Test that erlang:ports/0 returns a consistent snapshot of ports";
-ports(suite) -> [];
+%% Test that erlang:ports/0 returns a consistent snapshot of ports
ports(Config) when is_list(Config) ->
- Path = ?config(data_dir, Config),
+ Path = proplists:get_value(data_dir, Config),
ok = load_driver(Path, "exit_drv"),
receive after 1000 -> ok end, % Wait for other ports to stabilize
@@ -2318,7 +2221,7 @@ ports_snapshots(Iter, TrafficPid, OtherPorts) ->
TrafficPid ! {self(), stop},
receive {TrafficPid, EventList, TrafficPorts} -> ok end,
-
+
%%io:format("Snapshot=~p\n", [Snapshot]),
ports_verify(Snapshot, OtherPorts ++ TrafficPorts, EventList),
@@ -2330,78 +2233,77 @@ ports_traffic(MaxPorts) ->
ports_traffic_stopped(MaxPorts, {PortList, PortCnt}) ->
receive
- start ->
- %%io:format("Traffic started in ~p\n",[self()]),
- ports_traffic_started(MaxPorts, {PortList, PortCnt}, []);
- {Pid,die} ->
- lists:foreach(fun(Port)-> erlang:port_close(Port) end,
- PortList),
- Pid ! {self(),dead}
+ start ->
+ %%io:format("Traffic started in ~p\n",[self()]),
+ ports_traffic_started(MaxPorts, {PortList, PortCnt}, []);
+ {Pid,die} ->
+ lists:foreach(fun(Port)-> erlang:port_close(Port) end,
+ PortList),
+ Pid ! {self(),dead}
end.
ports_traffic_started(MaxPorts, {PortList, PortCnt}, EventList) ->
receive
- {Pid, stop} ->
- %%io:format("Traffic stopped in ~p\n",[self()]),
- Pid ! {self(), EventList, PortList},
- ports_traffic_stopped(MaxPorts, {PortList, PortCnt})
+ {Pid, stop} ->
+ %%io:format("Traffic stopped in ~p\n",[self()]),
+ Pid ! {self(), EventList, PortList},
+ ports_traffic_stopped(MaxPorts, {PortList, PortCnt})
after 0 ->
- ports_traffic_do(MaxPorts, {PortList, PortCnt}, EventList)
+ ports_traffic_do(MaxPorts, {PortList, PortCnt}, EventList)
end.
ports_traffic_do(MaxPorts, {PortList, PortCnt}, EventList) ->
N = uniform(MaxPorts),
case N > PortCnt of
- true -> % Open port
- P = open_port({spawn, "exit_drv"}, []),
- %%io:format("Created port ~p\n",[P]),
- ports_traffic_started(MaxPorts, {[P|PortList], PortCnt+1},
- [{open,P}|EventList]);
-
- false -> % Close port
- P = lists:nth(N, PortList),
- %%io:format("Close port ~p\n",[P]),
- true = erlang:port_close(P),
- ports_traffic_started(MaxPorts, {lists:delete(P,PortList), PortCnt-1},
- [{close,P}|EventList])
+ true -> % Open port
+ P = open_port({spawn, "exit_drv"}, []),
+ %%io:format("Created port ~p\n",[P]),
+ ports_traffic_started(MaxPorts, {[P|PortList], PortCnt+1},
+ [{open,P}|EventList]);
+
+ false -> % Close port
+ P = lists:nth(N, PortList),
+ %%io:format("Close port ~p\n",[P]),
+ true = erlang:port_close(P),
+ ports_traffic_started(MaxPorts, {lists:delete(P,PortList), PortCnt-1},
+ [{close,P}|EventList])
end.
ports_verify(Ports, PortsAfter, EventList) ->
%%io:format("Candidate=~p\nEvents=~p\n", [PortsAfter, EventList]),
case lists:sort(Ports) =:= lists:sort(PortsAfter) of
- true ->
- io:format("Snapshot of ~p ports verified ok.\n",[length(Ports)]),
- ok;
- false ->
- %% Note that we track the event list "backwards", undoing open/close:
- case EventList of
- [{open,P} | Tail] ->
- ports_verify(Ports, lists:delete(P,PortsAfter), Tail);
-
- [{close,P} | Tail] ->
- ports_verify(Ports, [P | PortsAfter], Tail);
-
- [] ->
- test_server:fail("Inconsistent snapshot from erlang:ports()")
- end
+ true ->
+ io:format("Snapshot of ~p ports verified ok.\n",[length(Ports)]),
+ ok;
+ false ->
+ %% Note that we track the event list "backwards", undoing open/close:
+ case EventList of
+ [{open,P} | Tail] ->
+ ports_verify(Ports, lists:delete(P,PortsAfter), Tail);
+
+ [{close,P} | Tail] ->
+ ports_verify(Ports, [P | PortsAfter], Tail);
+
+ [] ->
+ ct:fail("Inconsistent snapshot from erlang:ports()")
+ end
end.
load_driver(Dir, Driver) ->
case erl_ddll:load_driver(Dir, Driver) of
- ok -> ok;
- {error, Error} = Res ->
- io:format("~s\n", [erl_ddll:format_error(Error)]),
- Res
+ ok -> ok;
+ {error, Error} = Res ->
+ io:format("~s\n", [erl_ddll:format_error(Error)]),
+ Res
end.
-close_deaf_port(doc) -> ["Send data to port program that does not read it, then close port."
- "Primary targeting Windows to test threaded_handle_closer in sys.c"];
-close_deaf_port(suite) -> [];
+%% Send data to port program that does not read it, then close port.
+%% Primary targeting Windows to test threaded_handle_closer in sys.c
close_deaf_port(Config) when is_list(Config) ->
- Dog = test_server:timetrap(test_server:seconds(100)),
- DataDir = ?config(data_dir, Config),
+ ct:timetrap({minutes, 2}),
+ DataDir = proplists:get_value(data_dir, Config),
DeadPort = os:find_executable("dead_port", DataDir),
Port = open_port({spawn,DeadPort++" 60"},[]),
erlang:port_command(Port,"Hello, can you hear me!?!?"),
@@ -2410,7 +2312,6 @@ close_deaf_port(Config) when is_list(Config) ->
Res = close_deaf_port_1(0, DeadPort),
io:format("Waiting for OS procs to terminate...\n"),
receive after 5*1000 -> ok end,
- test_server:timetrap_cancel(Dog),
Res.
close_deaf_port_1(200, _) ->
@@ -2418,75 +2319,75 @@ close_deaf_port_1(200, _) ->
close_deaf_port_1(N, Cmd) ->
Timeout = integer_to_list(rand:uniform(5*1000)),
try open_port({spawn_executable,Cmd},[{args,[Timeout]}]) of
- Port ->
- erlang:port_command(Port,"Hello, can you hear me!?!?"),
- port_close(Port),
- close_deaf_port_1(N+1, Cmd)
+ Port ->
+ erlang:port_command(Port,"Hello, can you hear me!?!?"),
+ port_close(Port),
+ close_deaf_port_1(N+1, Cmd)
catch
- _:eagain ->
- {comment, "Could not spawn more than " ++ integer_to_list(N) ++ " OS processes."}
+ _:eagain ->
+ {comment, "Could not spawn more than " ++ integer_to_list(N) ++ " OS processes."}
end.
%% Test undocumented port_set_data/2 and port_get_data/1
%% Hammer from multiple processes a while
%% and then abrubtly close the port (OTP-12208).
port_setget_data(Config) when is_list(Config) ->
- ok = load_driver(?config(data_dir, Config), "echo_drv"),
+ ok = load_driver(proplists:get_value(data_dir, Config), "echo_drv"),
Port = erlang:open_port({spawn_driver, "echo_drv"}, []),
NSched = erlang:system_info(schedulers_online),
HeapData = {1,2,3,<<"A heap binary">>,fun()->"This is fun"end,
- list_to_binary(lists:seq(1,100))},
+ list_to_binary(lists:seq(1,100))},
PRs = lists:map(fun(I) ->
- spawn_opt(fun() -> port_setget_data_hammer(Port,HeapData,false,1) end,
- [monitor, {scheduler, I rem NSched}])
- end,
- lists:seq(1,10)),
+ spawn_opt(fun() -> port_setget_data_hammer(Port,HeapData,false,1) end,
+ [monitor, {scheduler, I rem NSched}])
+ end,
+ lists:seq(1,10)),
receive after 100 -> ok end,
Papa = self(),
lists:foreach(fun({Pid,_}) -> Pid ! {Papa,prepare_for_close} end, PRs),
lists:foreach(fun({Pid,_}) ->
- receive {Pid,prepare_for_close} -> ok end
- end,
- PRs),
+ receive {Pid,prepare_for_close} -> ok end
+ end,
+ PRs),
port_close(Port),
lists:foreach(fun({Pid,Ref}) ->
- receive {'DOWN', Ref, process, Pid, normal} -> ok end
- end,
- PRs),
+ receive {'DOWN', Ref, process, Pid, normal} -> ok end
+ end,
+ PRs),
ok.
port_setget_data_hammer(Port, HeapData, IsSet0, N) ->
Rand = rand:uniform(3),
IsSet1 = try case Rand of
- 1 -> true = erlang:port_set_data(Port, atom), true;
- 2 -> true = erlang:port_set_data(Port, HeapData), true;
- 3 -> case erlang:port_get_data(Port) of
- atom -> true;
- HeapData -> true;
- undefined -> false=IsSet0
- end
- end
- catch
- error:badarg ->
- true = get(prepare_for_close),
- io:format("~p did ~p rounds before port closed\n", [self(), N]),
- exit(normal)
- end,
+ 1 -> true = erlang:port_set_data(Port, atom), true;
+ 2 -> true = erlang:port_set_data(Port, HeapData), true;
+ 3 -> case erlang:port_get_data(Port) of
+ atom -> true;
+ HeapData -> true;
+ undefined -> false=IsSet0
+ end
+ end
+ catch
+ error:badarg ->
+ true = get(prepare_for_close),
+ io:format("~p did ~p rounds before port closed\n", [self(), N]),
+ exit(normal)
+ end,
receive {Papa, prepare_for_close} ->
- put(prepare_for_close, true),
- Papa ! {self(),prepare_for_close}
+ put(prepare_for_close, true),
+ Papa ! {self(),prepare_for_close}
after 0 ->
- ok
+ ok
end,
port_setget_data_hammer(Port, HeapData, IsSet1, N+1).
wait_until(Fun) ->
case catch Fun() of
- true ->
- ok;
- _ ->
- receive after 100 -> ok end,
- wait_until(Fun)
+ true ->
+ ok;
+ _ ->
+ receive after 100 -> ok end,
+ wait_until(Fun)
end.
diff --git a/erts/emulator/test/port_SUITE_data/dead_port.c b/erts/emulator/test/port_SUITE_data/dead_port.c
index c859dbc402..26f09f33c7 100644
--- a/erts/emulator/test/port_SUITE_data/dead_port.c
+++ b/erts/emulator/test/port_SUITE_data/dead_port.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/erts/emulator/test/port_SUITE_data/port_test.erl b/erts/emulator/test/port_SUITE_data/port_test.erl
index b07038e73d..406d376b26 100644
--- a/erts/emulator/test/port_SUITE_data/port_test.erl
+++ b/erts/emulator/test/port_SUITE_data/port_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/erts/emulator/test/port_bif_SUITE.erl b/erts/emulator/test/port_bif_SUITE.erl
index 9215d7f720..e1e1ec9fb9 100644
--- a/erts/emulator/test/port_bif_SUITE.erl
+++ b/erts/emulator/test/port_bif_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,8 +21,8 @@
-module(port_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, command/1,
+-export([all/0, suite/0, groups/0,
+ command/1,
command_e_1/1, command_e_2/1, command_e_3/1, command_e_4/1,
port_info1/1, port_info2/1,
port_info_os_pid/1, port_info_race/1,
@@ -30,11 +30,11 @@
-export([do_command_e_1/1, do_command_e_2/1, do_command_e_4/1]).
--export([init_per_testcase/2, end_per_testcase/2]).
-
-include_lib("common_test/include/ct.hrl").
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap, {minutes, 10}}].
all() ->
[command, {group, port_info}, connect, control,
@@ -46,27 +46,6 @@ groups() ->
{port_info, [],
[port_info1, port_info2, port_info_os_pid, port_info_race]}].
-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(_Func, Config) when is_list(Config) ->
- Dog=test_server:timetrap(test_server:minutes(10)),
- [{watchdog, Dog}|Config].
-end_per_testcase(_Func, Config) when is_list(Config) ->
- Dog=?config(watchdog, Config),
- test_server:timetrap_cancel(Dog).
-
command(Config) when is_list(Config) ->
load_control_drv(Config),
@@ -87,17 +66,17 @@ do_command(P, Data) ->
{P,{data,Data0}} ->
case {list_to_binary(Data0),list_to_binary([Data])} of
{B,B} -> ok;
- _ -> test_server:fail({unexpected_data,Data0})
+ _ -> ct:fail({unexpected_data,Data0})
end;
Other ->
- test_server:fail({unexpected_message,Other})
+ ct:fail({unexpected_message,Other})
end.
%% port_command/2: badarg 1st arg
command_e_1(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
Program = filename:join(DataDir, "port_test"),
process_flag(trap_exit, true),
@@ -106,9 +85,9 @@ command_e_1(Config) when is_list(Config) ->
{'EXIT', Pid, {badarg, _}} when is_pid(Pid) ->
ok;
Other ->
- test_server:fail(Other)
+ ct:fail(Other)
after 10000 ->
- test_server:fail(timeout)
+ ct:fail(timeout)
end,
ok.
@@ -119,7 +98,7 @@ do_command_e_1(Program) ->
%% port_command/2: badarg 2nd arg
command_e_2(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
Program = filename:join(DataDir, "port_test"),
process_flag(trap_exit, true),
@@ -128,9 +107,9 @@ command_e_2(Config) when is_list(Config) ->
{'EXIT', Pid, {badarg, _}} when is_pid(Pid) ->
ok;
Other ->
- test_server:fail(Other)
+ ct:fail(Other)
after 10000 ->
- test_server:fail(timeout)
+ ct:fail(timeout)
end,
ok.
@@ -141,7 +120,7 @@ do_command_e_2(Program) ->
%% port_command/2: Posix signals trapped
command_e_3(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
Program = filename:join(DataDir, "port_test"),
process_flag(trap_exit, true),
@@ -152,15 +131,15 @@ command_e_3(Config) when is_list(Config) ->
{'EXIT', Port, einval} when is_port(Port) ->
ok;
Other ->
- test_server:fail(Other)
+ ct:fail(Other)
after 10000 ->
- test_server:fail(timeout)
+ ct:fail(timeout)
end,
ok.
%% port_command/2: Posix exit signals not trapped
command_e_4(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
Program = filename:join(DataDir, "port_test"),
process_flag(trap_exit, true),
@@ -169,9 +148,9 @@ command_e_4(Config) when is_list(Config) ->
{'EXIT', Pid, {einval, _}} when is_pid(Pid) ->
ok;
Other ->
- test_server:fail(Other)
+ ct:fail(Other)
after 10000 ->
- test_server:fail(timeout)
+ ct:fail(timeout)
end,
ok.
@@ -248,7 +227,7 @@ do_port_info_os_pid() ->
{os_pid, InfoOSPid} = erlang:port_info(P, os_pid),
EchoPidStr = receive
{P, {data, EchoPidStr0}} -> EchoPidStr0
- after 10000 -> test_server:fail(timeout)
+ after 10000 -> ct:fail(timeout)
end,
{ok, [EchoPid], []} = io_lib:fread("~u\n", EchoPidStr),
{value,{os_pid, InfoOSPid}}=lists:keysearch(os_pid, 1, A),
@@ -257,7 +236,7 @@ do_port_info_os_pid() ->
ok.
port_info_race(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
Program = filename:join(DataDir, "port_test"),
Top = self(),
P1 = open_port({spawn,Program}, [{packet,1}]),
@@ -283,10 +262,9 @@ output_test(_, _, Input, Output) when Output > 16#1fffffff ->
output_test(P, Bin, Input0, Output0) ->
erlang:port_command(P, Bin),
receive
- {P,{data,Bin}} -> ok;
- Other ->
- io:format("~p", [Other]),
- ?t:fail()
+ {P,{data,Bin}} -> ok;
+ Other ->
+ ct:fail("~p", [Other])
end,
Input = Input0 + size(Bin),
Output = Output0 + size(Bin),
@@ -296,8 +274,8 @@ output_test(P, Bin, Input0, Output0) ->
%% We can't test much here, but hopefully a debug-built emulator will crasch
%% if there is something wrong with the heap allocation.
case erlang:statistics(io) of
- {{input,In},{output,Out}} when is_integer(In), is_integer(Out) ->
- ok
+ {{input,In},{output,Out}} when is_integer(In), is_integer(Out) ->
+ ok
end,
output_test(P, Bin, Input, Output).
@@ -345,7 +323,7 @@ connect(Config) when is_list(Config) ->
exit(P, you_should_die),
receive
{'EXIT',RecPid,you_should_die} -> ok;
- Other -> ?line ?t:fail({bad_message,Other})
+ Other -> ct:fail({bad_message,Other})
end,
%% Done.
@@ -410,7 +388,7 @@ test_op(P, Op) ->
<<Op:32>> = list_to_binary(R).
echo_to_busy(Config) when is_list(Config) ->
- Dog = test_server:timetrap(test_server:seconds(10)),
+ ct:timetrap({seconds, 10}),
load_control_drv(Config),
P = open_port({spawn, control_drv}, []),
erlang:port_control(P, $b, [1]), % Set to busy.
@@ -422,11 +400,10 @@ echo_to_busy(Config) when is_list(Config) ->
{Echoer, done} ->
ok;
{Echoer, Other} ->
- test_server:fail(Other);
+ ct:fail(Other);
Other ->
- test_server:fail({unexpected_message, Other})
+ ct:fail({unexpected_message, Other})
end,
- test_server:timetrap_cancel(Dog),
ok.
echoer(P, ReplyTo) ->
@@ -451,7 +428,7 @@ echo(P, Size) ->
Packet = erlang:port_control(P, $e, [unaligned_sub_bin(Bin)]).
load_control_drv(Config) when is_list(Config) ->
- DataDir = ?config(data_dir, Config),
+ DataDir = proplists:get_value(data_dir, Config),
erl_ddll:start(),
ok = load_driver(DataDir, "control_drv").
diff --git a/erts/emulator/test/port_trace_SUITE.erl b/erts/emulator/test/port_trace_SUITE.erl
new file mode 100644
index 0000000000..5d9a75bcd3
--- /dev/null
+++ b/erts/emulator/test/port_trace_SUITE.erl
@@ -0,0 +1,652 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 1999-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(port_trace_SUITE).
+
+-export([all/0, suite/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([port_specs/1, ports/1, open_close/1,
+ command/1, control/1, connect/1, call/1,
+ output/1, output2/1, output_binary/1,
+ outputv/1, set_timer/1, failure_eof/1,
+ failure_atom/1, failure_posix/1,
+ failure/1, output_term/1,
+ driver_output_term/1,
+ send_term/1, driver_send_term/1,
+ driver_remote_send_term/1]).
+
+-define(ECHO_DRV_NOOP, 0).
+-define(ECHO_DRV_OUTPUT, 1).
+-define(ECHO_DRV_OUTPUT2, 2).
+-define(ECHO_DRV_OUTPUT_BINARY, 3).
+-define(ECHO_DRV_OUTPUTV, 4).
+-define(ECHO_DRV_SET_TIMER, 5).
+-define(ECHO_DRV_FAILURE_EOF, 6).
+-define(ECHO_DRV_FAILURE_ATOM, 7).
+-define(ECHO_DRV_FAILURE_POSIX, 8).
+-define(ECHO_DRV_FAILURE, 9).
+-define(ECHO_DRV_OUTPUT_TERM, 10).
+-define(ECHO_DRV_DRIVER_OUTPUT_TERM, 11).
+-define(ECHO_DRV_SEND_TERM, 12).
+-define(ECHO_DRV_DRIVER_SEND_TERM, 13).
+-define(ECHO_DRV_SAVE_CALLER, 14).
+-define(ECHO_DRV_REMOTE_SEND_TERM, 15).
+
+suite() -> [{ct_hooks,[ts_install_cth]},
+ {timetrap, {seconds, 30}}].
+
+all() ->
+ [port_specs, ports, open_close,
+ command, control, connect, call,
+ output, output2, output_binary,
+ outputv, set_timer, failure_eof,
+ failure_atom, failure_posix,
+ failure, output_term,
+ driver_output_term,
+ send_term, driver_send_term,
+ driver_remote_send_term].
+
+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(driver_remote_send_term, Config) ->
+ case erlang:system_info(smp_support) of
+ false ->
+ {skip,"Only supported on smp systems"};
+ true ->
+ init_per_testcase(driver_remote_send_term_smp, Config)
+ end;
+init_per_testcase(Func, Config) when is_atom(Func), is_list(Config) ->
+ erlang:trace(all, false, [all]),
+ os:unsetenv("OUTPUTV"),
+ reload_drv(Config),
+ Config.
+
+end_per_testcase(_Func, _Config) ->
+ erlang:trace(all, false, [all]),
+ ok.
+
+%% Test the first argument of trace/3
+port_specs(_Config) ->
+
+ S = self(),
+
+ Tracer = fun F() ->
+ receive
+ stop ->
+ ok;
+ M ->
+ S ! M,
+ F()
+ end
+ end,
+
+ Test = fun(TraceSpec, Info1, Info2) ->
+ {TracerPid,Ref} = spawn_monitor(Tracer),
+ Prt1 = erlang:open_port({spawn, echo_drv}, [binary]),
+ erlang:trace(TraceSpec, true, ['receive', {tracer, TracerPid}]),
+ %% We disable trace messages from the testcase process
+ erlang:trace(self(), false, ['receive']),
+ Prt2 = erlang:open_port({spawn, echo_drv}, [binary]),
+
+ InfoCheck =
+ fun(Info, Prt) ->
+ if
+ Info ->
+ {tracer, TracerPid} = erlang:trace_info(Prt, tracer),
+ {flags,['receive']} = erlang:trace_info(Prt, flags);
+ not Info ->
+ {tracer,[]} = erlang:trace_info(Prt, tracer),
+ {flags,[]} = erlang:trace_info(Prt, flags)
+ end
+ end,
+ InfoCheck(Info1, Prt1),
+ InfoCheck(Info2, Prt2),
+
+ %% These may create trace messages
+ erlang:port_command(Prt1, <<?ECHO_DRV_NOOP>>),
+ erlang:port_command(Prt2, <<?ECHO_DRV_NOOP>>),
+
+ %% Test what happens when the tracer dies
+ trace_delivered(),
+ TracerPid ! stop,
+ receive {'DOWN', Ref, process, TracerPid, normal} -> ok end,
+
+ %% These should not generate any trace messages
+ erlang:port_command(Prt1, <<?ECHO_DRV_NOOP>>),
+ erlang:port_command(Prt2, <<?ECHO_DRV_NOOP>>),
+
+ InfoCheck(false, Prt1),
+ InfoCheck(false, Prt2),
+
+ erlang:port_close(Prt1),
+ erlang:port_close(Prt2),
+ erlang:trace(all, false, [all]),
+ {Prt1, Prt2}
+ end,
+
+ {_Prt11, Prt12} = Test(new, false, true),
+ [{trace, Prt12, 'receive', {S, {command,<<?ECHO_DRV_NOOP>>}}}]
+ = flush(Prt12),
+
+ {_Prt21, Prt22} = Test(new_ports, false, true),
+ [{trace, Prt22, 'receive', {S, {command,<<?ECHO_DRV_NOOP>>}}}]
+ = flush(Prt22),
+
+ {Prt31, _Prt32} = Test(existing, true, false),
+ [{trace, Prt31, 'receive', {S, {command,<<?ECHO_DRV_NOOP>>}}}]
+ = flush(Prt31),
+
+ {Prt41, _Prt42} = Test(existing_ports, true, false),
+ [{trace, Prt41, 'receive', {S, {command,<<?ECHO_DRV_NOOP>>}}}]
+ = flush(Prt41),
+
+ {Prt51, Prt52} = Test(all, true, true),
+ [{trace, Prt51, 'receive', {S, {command,<<?ECHO_DRV_NOOP>>}}}]
+ = flush(Prt51),
+ [{trace, Prt52, 'receive', {S, {command,<<?ECHO_DRV_NOOP>>}}}]
+ = flush(Prt52),
+
+ {Prt61, Prt62} = Test(ports, true, true),
+ [{trace, Prt61, 'receive', {S, {command,<<?ECHO_DRV_NOOP>>}}}]
+ = flush(Prt61),
+ [{trace, Prt62, 'receive', {S, {command,<<?ECHO_DRV_NOOP>>}}}]
+ = flush(Prt62),
+
+ ok.
+
+%% Test that the 'ports' trace flag works
+ports(_Config) ->
+
+ {Prt, S} = trace_and_open([ports],[binary]),
+
+ [{trace, Prt, open, S, echo_drv},
+ {trace, Prt, getting_linked, S}] = flush(),
+
+ register(?MODULE, Prt),
+ unregister(?MODULE),
+ register(?MODULE, Prt),
+
+ [{trace,Prt,register,port_trace_SUITE},
+ {trace,Prt,unregister,port_trace_SUITE},
+ {trace,Prt,register,port_trace_SUITE}] = flush(),
+
+ unlink(Prt),
+ link(Prt),
+
+ [{trace,Prt,getting_unlinked,S},
+ {trace,Prt,getting_linked,S}] = flush(),
+
+ erlang:port_close(Prt),
+
+ [{trace,Prt,closed,normal},
+ {trace,Prt,unregister,port_trace_SUITE},
+ {trace,Prt,unlink,S}] = flush(),
+
+ ok.
+
+%% Test that port_close and ! close generate correct trace messages
+open_close(_Config) ->
+
+ S = trace_ports([send,'receive']),
+
+ Prt = erlang:open_port({spawn, echo_drv}, [binary]),
+ erlang:port_close(Prt),
+ [{trace, Prt, 'receive', {S, close}}] = flush(),
+
+ Prt2 = erlang:open_port({spawn, echo_drv}, [binary]),
+ Prt2 ! {S, close},
+ recv({Prt2, closed}),
+ [{trace, Prt2, 'receive', {S, close}},
+ {trace, Prt2, send, closed, S}] = flush(),
+
+ catch erlang:port_close(Prt2),
+ [] = flush(),
+
+ ok.
+
+%% Test that port_command and ! command generate correct trace messages
+command(Config) ->
+
+ Flags = [send,'receive'],
+ S = trace_ports(Flags),
+ Prt = erlang:open_port({spawn, echo_drv}, [binary]),
+
+ erlang:port_command(Prt, <<?ECHO_DRV_NOOP:8>>),
+ [{trace, Prt, 'receive', {S, {command, <<?ECHO_DRV_NOOP:8>>}}}] = flush(),
+
+ erlang:port_command(Prt, [?ECHO_DRV_NOOP, <<0:8>>]),
+ [{trace, Prt, 'receive', {S, {command, <<?ECHO_DRV_NOOP:8,0:8>>}}}] = flush(),
+
+ Prt ! {S, {command, <<?ECHO_DRV_NOOP:8>>}},
+ [{trace, Prt, 'receive', {S, {command, <<?ECHO_DRV_NOOP:8>>}}}] = flush(),
+
+ OutputMsg = <<?ECHO_DRV_NOOP:8,0:(8*512)>>,
+ Prt ! {S, {command, OutputMsg}},
+ [{trace, Prt, 'receive', {S, {command, OutputMsg}}}] = flush(),
+
+ close(Prt, Flags),
+
+ os:putenv("OUTPUTV","true"),
+ reload_drv(Config),
+
+ Prt2 = erlang:open_port({spawn, echo_drv}, [binary]),
+ OutputvMsg = [<<0:8>>,<<0:(8*512)>>,<<0:(8*256)>>,<<0:8>>],
+
+ erlang:port_command(Prt2, OutputvMsg),
+ [{trace, Prt2, 'receive', {S, {command, OutputvMsg}}}] = flush(),
+
+ Prt2 ! {S, {command, OutputvMsg}},
+ [{trace, Prt2, 'receive', {S, {command, OutputvMsg}}}] = flush(),
+
+ close(Prt2, Flags),
+
+ os:unsetenv("OUTPUTV"),
+
+ ok.
+
+%% Test that port_control generate correct trace messages
+control(_Config) ->
+
+ Flags = [send,'receive'],
+ {Prt, S} = trace_and_open(Flags,[binary]),
+
+ [0] = erlang:port_control(Prt, 1, <<?ECHO_DRV_NOOP:8, 0:8>>),
+ [{trace, Prt, 'receive', {S, {control, {1, <<?ECHO_DRV_NOOP:8, 0:8>>}}}},
+ {trace, Prt, send, {Prt, {control, <<0:8>>}}, S}] = flush(),
+
+ [0] = erlang:port_control(Prt, (1 bsl 32) - 1, <<?ECHO_DRV_NOOP:8, 0:8>>),
+ [{trace, Prt, 'receive', {S, {control, {(1 bsl 32) - 1, <<?ECHO_DRV_NOOP:8, 0:8>>}}}},
+ {trace, Prt, send, {Prt, {control, <<0:8>>}}, S}] = flush(),
+
+ Msg = <<?ECHO_DRV_NOOP:8, 0:(8*512)>>,
+ Pat = lists:duplicate(512, 0),
+ Pat = erlang:port_control(Prt, 1, Msg),
+ [{trace, Prt, 'receive', {S, {control, {1, Msg}}}},
+ {trace, Prt, send, {Prt, {control, <<0:(8*512)>>}}, S}] = flush(),
+
+ close(Prt, Flags),
+
+ ok.
+
+%% Test that port_connect and ! connect generate correct trace messages
+%% This includes that the proper getting_linked messages are sent
+connect(_Config) ->
+
+
+ {Prt, S} = trace_and_open([send, 'receive', ports],[binary]),
+
+ flush(),
+
+ {Pid,Ref} = spawn_monitor(
+ fun() ->
+ receive
+ go ->
+ Prt ! {self(), {connect, S}},
+ receive {Prt, connected} -> unlink(Prt) end
+ end
+ end),
+ erlang:trace(Pid, true, [send, 'receive', procs]),
+
+ erlang:port_connect(Prt, Pid),
+ unlink(Prt),
+
+ [{trace,Prt,getting_linked,Pid},
+ {trace,Prt,'receive',{S,{connect,Pid}}},
+ {trace,Prt,send,{Prt,connected},S},
+ {trace,Prt,getting_unlinked, S}] = flush(Prt),
+
+ [{trace,Pid,getting_linked,Prt}] = flush(),
+
+ Pid ! go,
+ recv({'DOWN',Ref,process,Pid,normal}),
+
+ [{trace,Prt,'receive',{Pid,{connect,S}}},
+ {trace,Prt,send,{Prt,connected},Pid},
+ {trace,Prt,getting_unlinked,Pid}] = flush(Prt),
+
+ [{trace,Pid,'receive',go},
+ {trace,Pid,send,{Pid,{connect,S}}, Prt},
+ {trace,Pid,'receive',{Prt,connected}},
+ {trace,Pid,unlink,Prt},
+ {trace,Pid,exit,normal}] = flush(),
+
+ erlang:port_close(Prt),
+ [{trace, Prt, 'receive', {S, close}},
+ {trace, Prt, closed, normal}] = flush(),
+ ok.
+
+%% Test that port_call generate correct trace messages
+call(_Config) ->
+
+ Flags = [send,'receive'],
+ {Prt, S} = trace_and_open(Flags,[binary]),
+
+ Test = fun(Msg) ->
+ BinMsg = term_to_binary(Msg),
+
+ Msg = erlang:port_call(Prt, 0, Msg),
+ [{trace, Prt, 'receive', {S, {call, {0, BinMsg}}}},
+ {trace, Prt, send, {Prt, {call, BinMsg}}, S}] = flush()
+ end,
+
+ Test({hello, world, make_ref()}),
+ Test({hello, world, lists:seq(1,1000)}),
+
+ close(Prt, Flags),
+
+ ok.
+
+%% Test that driver_output generate correct trace messages
+output(_Config) ->
+
+ Flags = [send],
+ {Prt, S} = trace_and_open(Flags,[binary]),
+
+ erlang:port_command(Prt, <<?ECHO_DRV_OUTPUT, 123456:32>>),
+ recv({Prt,{data,<<123456:32>>}}),
+
+ [{trace, Prt, send, {Prt, {data, <<123456:32>>}}, S}] = flush(),
+
+ close(Prt, Flags),
+
+ ok.
+
+%% Test that driver_output2 generate correct trace messages
+output2(_Config) ->
+
+ Flags = [send],
+ {Prt, S} = trace_and_open(Flags,[binary]),
+
+ erlang:port_command(Prt, <<?ECHO_DRV_OUTPUT2, 123456:32>>),
+ recv({Prt,{data,[$a|<<123456:32>>]}}),
+ [{trace, Prt, send, {Prt, {data, [$a|<<123456:32>>]}}, S}] = flush(),
+
+ close(Prt, Flags),
+
+ ok.
+
+%% Test that driver_output_binary generate correct trace messages
+output_binary(_Config) ->
+
+ Flags = [send],
+ {Prt, S} = trace_and_open(Flags,[binary]),
+
+ erlang:port_command(Prt, <<?ECHO_DRV_OUTPUT_BINARY, 0, 123456:32>>),
+ recv({Prt,{data,[$a|<<123456:32>>]}}),
+ [{trace, Prt, send, {Prt, {data, [$a|<<123456:32>>]}}, S}] = flush(),
+
+ close(Prt, Flags),
+
+ ok.
+
+%% Test that driver_outputv generate correct trace messages
+outputv(_Config) ->
+
+ Flags = [send],
+ {Prt, S} = trace_and_open(Flags,[binary]),
+
+ erlang:port_command(Prt, <<?ECHO_DRV_OUTPUTV, 123456:32>>),
+ recv({Prt,{data,[$a|<<123456:32>>]}}),
+
+ [{trace, Prt, send, {Prt, {data, [$a|<<123456:32>>]}}, S}] = flush(),
+
+ erlang:port_close(Prt),
+ [] = flush(),
+
+ ok.
+
+%% Test that driver_set_timer generate correct trace messages
+set_timer(_Config) ->
+
+ Flags = [send,'receive'],
+ {Prt, S} = trace_and_open(Flags,[binary]),
+
+ erlang:port_command(Prt, <<?ECHO_DRV_SET_TIMER>>),
+ timer:sleep(100),
+ [{trace, Prt, 'receive', {S, {command, <<?ECHO_DRV_SET_TIMER>>}}},
+ {trace, Prt, 'receive', timeout}] = flush(),
+
+ close(Prt, Flags),
+
+ ok.
+
+%% Test that driver_failure* generate correct trace messages
+failure_eof(_Config) ->
+
+ Flags = [send,'receive', ports],
+ S = trace_ports(Flags),
+
+ Prt = erlang:open_port({spawn, echo_drv}, [eof, binary]),
+ [{trace, Prt, open, S, echo_drv},
+ {trace, Prt, getting_linked, S}] = flush(),
+
+ erlang:port_command(Prt, <<?ECHO_DRV_FAILURE_EOF>>),
+ recv({Prt,eof}),
+ [{trace, Prt, 'receive', {S, {command, <<?ECHO_DRV_FAILURE_EOF>>}}},
+ {trace, Prt, send, {Prt, eof}, S}] = flush(),
+
+ close(Prt, Flags),
+
+ %% Run same test without eof option
+ failure_test(<<?ECHO_DRV_FAILURE_EOF>>, normal).
+
+failure_atom(_Config) ->
+ failure_test(<<?ECHO_DRV_FAILURE_ATOM, "failure\0">>, failure).
+failure_posix(_Config) ->
+ failure_test(<<?ECHO_DRV_FAILURE_POSIX>>, eagain).
+failure(_Config) ->
+ failure_test(<<?ECHO_DRV_FAILURE, 1>>, 1).
+
+failure_test(Failure, Reason) ->
+
+ {Prt, S} = trace_and_open([send, 'receive', ports],[binary]),
+
+ [{trace, Prt, open, S, echo_drv},
+ {trace, Prt, getting_linked, S}] = flush(),
+
+ process_flag(trap_exit, true),
+ erlang:port_command(Prt, Failure),
+ try
+ recv({'EXIT',Prt,Reason})
+ after
+ process_flag(trap_exit, false)
+ end,
+ [{trace, Prt, 'receive', {S, {command, Failure}}},
+ {trace, Prt, closed, Reason},
+ {trace, Prt, unlink, S}] = flush(),
+
+ ok.
+
+%% Test that erl_drv_output_term generate correct trace messages
+output_term(_Config) ->
+
+ Flags = [send],
+ {Prt, S} = trace_and_open(Flags,[binary]),
+
+ erlang:port_command(Prt, <<?ECHO_DRV_OUTPUT_TERM, 123456:32>>),
+ recv({echo, Prt, <<123456:32>>}),
+ [{trace, Prt, send, {echo, Prt, <<123456:32>>}, S}] = flush(),
+
+ close(Prt, Flags),
+
+ ok.
+
+%% Test that driver_output_term generate correct trace messages
+driver_output_term(_Config) ->
+
+ Flags = [send],
+ {Prt, S} = trace_and_open(Flags,[binary]),
+
+ erlang:port_command(Prt, <<?ECHO_DRV_DRIVER_OUTPUT_TERM, 123456:32>>),
+ recv({echo, Prt, <<123456:32>>}),
+ [{trace, Prt, send, {echo, Prt, <<123456:32>>}, S}] = flush(),
+
+ close(Prt, Flags),
+
+ ok.
+
+%% Test that erl_drv_send_term generate correct trace messages
+send_term(_Config) ->
+
+ Flags = [send],
+ {Prt, S} = trace_and_open(Flags,[binary]),
+
+ erlang:port_command(Prt, <<?ECHO_DRV_SEND_TERM, 123456:32>>),
+ recv({echo, Prt, <<123456:32>>}),
+ [{trace, Prt, send, {echo, Prt, <<123456:32>>}, S}] = flush(),
+
+ {Pid, Ref} = spawn_monitor(fun() -> erlang:port_command(Prt, <<?ECHO_DRV_SAVE_CALLER>>) end),
+ recv({'DOWN',Ref,process,Pid,normal}),
+ erlang:port_command(Prt, <<?ECHO_DRV_SEND_TERM, 123456:32>>),
+ [{trace, Prt, send_to_non_existing_process, {echo, Prt, <<123456:32>>}, Pid}] = flush(),
+
+ close(Prt, Flags),
+
+ ok.
+
+%% Test that driver_send_term generate correct trace messages
+driver_send_term(_Config) ->
+
+ Flags = [send],
+ {Prt, S} = trace_and_open(Flags,[binary]),
+
+ erlang:port_command(Prt, <<?ECHO_DRV_DRIVER_SEND_TERM, 123456:32>>),
+ recv({echo, Prt, <<123456:32>>}),
+ [{trace, Prt, send, {echo, Prt, <<123456:32>>}, S}] = flush(),
+
+ {Pid, Ref} = spawn_monitor(fun() -> erlang:port_command(Prt, <<?ECHO_DRV_SAVE_CALLER>>) end),
+ recv({'DOWN',Ref,process,Pid,normal}),
+ erlang:port_command(Prt, <<?ECHO_DRV_SEND_TERM, 123456:32>>),
+ [{trace, Prt, send_to_non_existing_process, {echo, Prt, <<123456:32>>}, Pid}] = flush(),
+
+ close(Prt, Flags),
+
+ ok.
+
+%% Test that driver_send_term from non-scheduler thread does not
+%% generate trace messages.
+driver_remote_send_term(_Config) ->
+
+ Flags = [send],
+ {Prt, S} = trace_and_open(Flags,[binary]),
+
+ erlang:port_command(Prt, <<?ECHO_DRV_REMOTE_SEND_TERM, 123456:32>>),
+ recv({echo, Prt, <<123456:32>>}),
+ [] = flush(),
+
+ Pid = spawn_link(
+ fun() ->
+ erlang:port_command(Prt, <<?ECHO_DRV_SAVE_CALLER>>),
+ S ! ok,
+ receive M -> S ! M end
+ end),
+ recv(ok),
+ erlang:trace(Pid, true, ['receive']),
+
+ erlang:port_command(Prt, <<?ECHO_DRV_REMOTE_SEND_TERM, 123456:32>>),
+ recv({echo, Prt, <<123456:32>>}),
+ [{trace, Pid, 'receive', {echo, Prt, <<123456:32>>}}] = flush(),
+
+ close(Prt, Flags),
+
+ ok.
+
+%%%%%%%%%%%%%%%%%%%
+%% Helper functions
+%%%%%%%%%%%%%%%%%%%
+
+trace_ports(TraceFlags) ->
+ erlang:trace(new_ports, true, TraceFlags),
+ self().
+
+trace_and_open(TraceFlags, OpenFlags) ->
+ S = self(),
+ Ports = proplists:get_value(ports, TraceFlags),
+ [trace_ports(TraceFlags) || Ports],
+ Prt = erlang:open_port({spawn, echo_drv}, OpenFlags),
+ [erlang:trace(Prt, true, TraceFlags) || Ports == undefined],
+ {Prt, S}.
+
+close(Prt, Flags) ->
+ Recv = proplists:get_value('receive', Flags),
+ Ports = proplists:get_value(ports, Flags),
+ S = self(),
+
+ erlang:port_close(Prt),
+
+ if Recv, Ports ->
+ [{trace, Prt, 'receive', {S, close}},
+ {trace, Prt, closed, normal},
+ {trace, Prt, unlink, S}] = flush();
+ Recv ->
+ [{trace, Prt, 'receive', {S, close}}] = flush();
+ Ports ->
+ [{trace, Prt, closed, normal},
+ {trace, Prt, unlink, S}] = flush();
+ true ->
+ [] = flush()
+ end.
+
+trace_delivered() ->
+ Ref = erlang:trace_delivered(all),
+ receive {trace_delivered, all, Ref} -> ok end.
+
+flush() ->
+ flush(all).
+flush(From) ->
+ trace_delivered(),
+ f(From).
+
+f(From) ->
+ receive
+ M when From =:= all; element(2, M) == From ->
+ [M | f(From)]
+ after 0 ->
+ []
+ end.
+
+recv(Msg) ->
+ receive Msg -> ok after 1000 -> ct:fail({did_not_get_data,Msg,flush()}) end.
+
+load_drv(Config) ->
+ Path = proplists:get_value(data_dir, Config),
+ case erl_ddll:load_driver(Path, echo_drv) of
+ ok -> ok;
+ {error, Error} = Res ->
+ io:format("~s\n", [erl_ddll:format_error(Error)]),
+ ct:fail(Res)
+ end.
+
+reload_drv(Config) ->
+ erl_ddll:unload_driver(echo_drv),
+ load_drv(Config).
diff --git a/erts/emulator/test/port_trace_SUITE_data/Makefile.src b/erts/emulator/test/port_trace_SUITE_data/Makefile.src
new file mode 100644
index 0000000000..c1bf142ccf
--- /dev/null
+++ b/erts/emulator/test/port_trace_SUITE_data/Makefile.src
@@ -0,0 +1,3 @@
+all: echo_drv@dll@
+
+@SHLIB_RULES@
diff --git a/erts/emulator/test/port_trace_SUITE_data/echo_drv.c b/erts/emulator/test/port_trace_SUITE_data/echo_drv.c
new file mode 100644
index 0000000000..b545523192
--- /dev/null
+++ b/erts/emulator/test/port_trace_SUITE_data/echo_drv.c
@@ -0,0 +1,277 @@
+#include <stdio.h>
+#include "erl_driver.h"
+#include <errno.h>
+#include <string.h>
+
+
+/* -------------------------------------------------------------------------
+** Data types
+**/
+
+
+typedef struct _erl_drv_data {
+ ErlDrvPort erlang_port;
+ ErlDrvTermData caller;
+} EchoDrvData;
+
+struct remote_send_term {
+ char *buf;
+ int len;
+ ErlDrvTermData port;
+ ErlDrvTermData caller;
+};
+
+#define ECHO_DRV_NOOP 0
+#define ECHO_DRV_OUTPUT 1
+#define ECHO_DRV_OUTPUT2 2
+#define ECHO_DRV_OUTPUT_BINARY 3
+#define ECHO_DRV_OUTPUTV 4
+#define ECHO_DRV_SET_TIMER 5
+#define ECHO_DRV_FAILURE_EOF 6
+#define ECHO_DRV_FAILURE_ATOM 7
+#define ECHO_DRV_FAILURE_POSIX 8
+#define ECHO_DRV_FAILURE 9
+#define ECHO_DRV_OUTPUT_TERM 10
+#define ECHO_DRV_DRIVER_OUTPUT_TERM 11
+#define ECHO_DRV_SEND_TERM 12
+#define ECHO_DRV_DRIVER_SEND_TERM 13
+#define ECHO_DRV_SAVE_CALLER 14
+#define ECHO_DRV_REMOTE_SEND_TERM 15
+
+
+/* -------------------------------------------------------------------------
+** Entry struct
+**/
+
+static EchoDrvData *echo_drv_start(ErlDrvPort port, char *command);
+static void echo_drv_stop(ErlDrvData drv_data);
+static void echo_drv_output(ErlDrvData drv_data, char *buf,
+ ErlDrvSizeT len);
+static void echo_drv_outputv(ErlDrvData drv_data, ErlIOVec *iov);
+static void echo_drv_finish(void);
+static ErlDrvSSizeT echo_drv_control(ErlDrvData drv_data,
+ unsigned int command,
+ char *buf, ErlDrvSizeT len,
+ char **rbuf, ErlDrvSizeT rlen);
+static void echo_drv_timeout(ErlDrvData drv_data);
+static ErlDrvSSizeT echo_drv_call(ErlDrvData drv_data,
+ unsigned int command,
+ char *buf, ErlDrvSizeT len,
+ char **rbuf, ErlDrvSizeT rlen,
+ unsigned int *flags);
+
+static ErlDrvEntry echo_drv_entry = {
+ NULL, /* init */
+ echo_drv_start,
+ echo_drv_stop,
+ echo_drv_output,
+ NULL, /* ready_input */
+ NULL, /* ready_output */
+ "echo_drv",
+ echo_drv_finish,
+ NULL, /* handle */
+ echo_drv_control,
+ echo_drv_timeout, /* timeout */
+ NULL, /* outputv */
+ NULL, /* ready_async */
+ NULL, /* flush */
+ echo_drv_call, /* call */
+ NULL, /* event */
+ ERL_DRV_EXTENDED_MARKER,
+ ERL_DRV_EXTENDED_MAJOR_VERSION,
+ ERL_DRV_EXTENDED_MINOR_VERSION,
+ 0,
+ NULL,
+ NULL,
+ NULL
+};
+
+static void send_term_thread(void *);
+
+/* -------------------------------------------------------------------------
+** Entry functions
+**/
+
+DRIVER_INIT(echo_drv)
+{
+ char buff[5];
+ size_t size = sizeof(buff);
+
+ if (erl_drv_getenv("OUTPUTV", buff, &size) == -1) {
+ echo_drv_entry.outputv = NULL;
+ } else {
+ echo_drv_entry.outputv = echo_drv_outputv;
+ }
+
+ return &echo_drv_entry;
+}
+
+static EchoDrvData *echo_drv_start(ErlDrvPort port, char *command)
+{
+ EchoDrvData *echo_drv_data_p = driver_alloc(sizeof(EchoDrvData));
+ echo_drv_data_p->erlang_port = port;
+ echo_drv_data_p->caller = driver_caller(port);
+ return echo_drv_data_p;
+}
+
+static void echo_drv_stop(EchoDrvData *data_p) {
+ driver_free(data_p);
+}
+
+static void echo_drv_outputv(ErlDrvData drv_data, ErlIOVec *iov)
+{
+ return;
+}
+
+static void echo_drv_output(ErlDrvData drv_data, char *buf, ErlDrvSizeT len) {
+ EchoDrvData* data_p = (EchoDrvData *) drv_data;
+ ErlDrvPort port = data_p->erlang_port;
+
+ switch (buf[0]) {
+ case ECHO_DRV_OUTPUT:
+ {
+ driver_output(port, buf+1, len-1);
+ break;
+ }
+ case ECHO_DRV_OUTPUT2:
+ {
+ driver_output2(port, "a", 1, buf+1, len-1);
+ break;
+ }
+ case ECHO_DRV_OUTPUT_BINARY:
+ {
+ ErlDrvBinary *bin = driver_alloc_binary(len-1);
+ memcpy(&bin->orig_bytes, buf+1, len-1);
+ driver_output_binary(port, "a", 1, bin, 1, len - 2);
+ driver_free_binary(bin);
+ break;
+ }
+ case ECHO_DRV_OUTPUTV:
+ {
+ ErlIOVec iov;
+ ErlDrvSizeT sz;
+ driver_enq(port, buf + 1, len - 1);
+ sz = driver_peekqv(port, &iov);
+ driver_outputv(port, "a", 1, &iov, 0);
+ driver_deq(port, sz);
+ break;
+ }
+ case ECHO_DRV_SET_TIMER:
+ {
+ driver_set_timer(port, 10);
+ break;
+ }
+ case ECHO_DRV_FAILURE_EOF:
+ {
+ driver_failure_eof(port);
+ break;
+ }
+ case ECHO_DRV_FAILURE_ATOM:
+ {
+ driver_failure_atom(port, buf+1);
+ break;
+ }
+ case ECHO_DRV_FAILURE_POSIX:
+ {
+ driver_failure_posix(port, EAGAIN);
+ break;
+ }
+ case ECHO_DRV_FAILURE:
+ {
+ driver_failure(port, buf[1]);
+ break;
+ }
+ case ECHO_DRV_OUTPUT_TERM:
+ case ECHO_DRV_DRIVER_OUTPUT_TERM:
+ case ECHO_DRV_SEND_TERM:
+ case ECHO_DRV_DRIVER_SEND_TERM:
+ {
+ ErlDrvTermData term[] = {
+ ERL_DRV_ATOM, driver_mk_atom("echo"),
+ ERL_DRV_PORT, driver_mk_port(port),
+ ERL_DRV_BUF2BINARY, (ErlDrvTermData)(buf+1),
+ (ErlDrvTermData)(len - 1),
+ ERL_DRV_TUPLE, 3};
+ switch (buf[0]) {
+ case ECHO_DRV_OUTPUT_TERM:
+ erl_drv_output_term(driver_mk_port(port), term, sizeof(term) / sizeof(ErlDrvTermData));
+ break;
+ case ECHO_DRV_DRIVER_OUTPUT_TERM:
+ driver_output_term(port, term, sizeof(term) / sizeof(ErlDrvTermData));
+ break;
+ case ECHO_DRV_SEND_TERM:
+ driver_send_term(port, data_p->caller,
+ term, sizeof(term) / sizeof(ErlDrvTermData));
+ break;
+ case ECHO_DRV_DRIVER_SEND_TERM:
+ erl_drv_send_term(driver_mk_port(port), data_p->caller,
+ term, sizeof(term) / sizeof(ErlDrvTermData));
+ break;
+ }
+ break;
+ }
+ case ECHO_DRV_REMOTE_SEND_TERM:
+ {
+ ErlDrvTid tid;
+ struct remote_send_term *t = malloc(sizeof(struct remote_send_term));
+ t->len = len-1;
+ t->buf = malloc(len-1);
+ t->port = driver_mk_port(port);
+ t->caller = data_p->caller;
+ memcpy(t->buf, buf+1, t->len);
+ erl_drv_thread_create("tmp_thread", &tid, send_term_thread, t, NULL);
+ break;
+ }
+ case ECHO_DRV_SAVE_CALLER:
+ data_p->caller = driver_caller(port);
+ break;
+ default:
+ break;
+ }
+}
+
+static void echo_drv_finish() {
+
+}
+
+static ErlDrvSSizeT echo_drv_control(ErlDrvData drv_data,
+ unsigned int command,
+ char *buf, ErlDrvSizeT len,
+ char **rbuf, ErlDrvSizeT rlen)
+{
+ if ((len - 1) > rlen)
+ *rbuf = driver_alloc(len - 1);
+ memcpy(*rbuf, buf+1, len-1);
+ return len-1;
+}
+
+static void echo_drv_timeout(ErlDrvData drv_data)
+{
+
+}
+
+static ErlDrvSSizeT echo_drv_call(ErlDrvData drv_data,
+ unsigned int command,
+ char *buf, ErlDrvSizeT len,
+ char **rbuf, ErlDrvSizeT rlen,
+ unsigned int *flags)
+{
+ if ((len - command) > rlen)
+ *rbuf = driver_alloc(len - command);
+ memcpy(*rbuf, buf+command, len-command);
+ return len-command;
+}
+
+static void send_term_thread(void *a)
+{
+ struct remote_send_term *t = (struct remote_send_term*)a;
+ ErlDrvTermData term[] = {
+ ERL_DRV_ATOM, driver_mk_atom("echo"),
+ ERL_DRV_PORT, t->port,
+ ERL_DRV_BUF2BINARY, (ErlDrvTermData)(t->buf),
+ (ErlDrvTermData)(t->len),
+ ERL_DRV_TUPLE, 3};
+ erl_drv_send_term(t->port, t->caller,
+ term, sizeof(term) / sizeof(ErlDrvTermData));
+ return;
+}
diff --git a/erts/emulator/test/process_SUITE.erl b/erts/emulator/test/process_SUITE.erl
index 862fe78b85..eaa4026a8a 100644
--- a/erts/emulator/test/process_SUITE.erl
+++ b/erts/emulator/test/process_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.
@@ -46,7 +46,7 @@
process_status_exiting/1,
otp_4725/1, bad_register/1, garbage_collect/1, otp_6237/1,
process_info_messages/1, process_flag_badarg/1, process_flag_heap_size/1,
- spawn_opt_heap_size/1,
+ spawn_opt_heap_size/1, spawn_opt_max_heap_size/1,
processes_large_tab/1, processes_default_tab/1, processes_small_tab/1,
processes_this_tab/1, processes_apply_trap/1,
processes_last_call_trap/1, processes_gc_trap/1,
@@ -60,14 +60,16 @@
system_task_on_suspended/1,
gc_request_when_gc_disabled/1,
gc_request_blast_when_gc_disabled/1]).
--export([prio_server/2, prio_client/2]).
+-export([prio_server/2, prio_client/2, init/1, handle_event/2]).
-export([init_per_testcase/2, end_per_testcase/2]).
-export([hangaround/2, processes_bif_test/0, do_processes/1,
processes_term_proc_list_test/1]).
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap, {minutes, 9}}].
all() ->
[spawn_with_binaries, t_exit_1, {group, t_exit_2},
@@ -82,7 +84,8 @@ all() ->
bump_reductions, low_prio, yield, yield2, otp_4725,
bad_register, garbage_collect, process_info_messages,
process_flag_badarg, process_flag_heap_size,
- spawn_opt_heap_size, otp_6237, {group, processes_bif},
+ spawn_opt_heap_size, spawn_opt_max_heap_size, otp_6237,
+ {group, processes_bif},
{group, otp_7738}, garb_other_running,
{group, system_task}].
@@ -116,7 +119,7 @@ init_per_suite(Config) ->
[{started_apps, A}|Config].
end_per_suite(Config) ->
- As = ?config(started_apps, Config),
+ As = proplists:get_value(started_apps, Config),
lists:foreach(fun (A) -> application:stop(A) end, As),
catch erts_debug:set_internal_state(available_internal_state, false),
Config.
@@ -128,12 +131,10 @@ end_per_group(_GroupName, Config) ->
Config.
init_per_testcase(Func, Config) when is_atom(Func), is_list(Config) ->
- Dog=?t:timetrap(?t:minutes(10)),
- [{watchdog, Dog},{testcase, Func}|Config].
+ [{testcase, Func}|Config].
end_per_testcase(Func, Config) when is_atom(Func), is_list(Config) ->
- Dog=?config(watchdog, Config),
- ?t:timetrap_cancel(Dog).
+ ok.
fun_spawn(Fun) ->
spawn_link(erlang, apply, [Fun, []]).
@@ -158,11 +159,10 @@ binary_owner(Bin) when is_binary(Bin) ->
%% Tests exit/1 with a big message.
t_exit_1(Config) when is_list(Config) ->
+ ct:timetrap({seconds, 20}),
start_spawner(),
- Dog = test_server:timetrap(test_server:seconds(20)),
process_flag(trap_exit, true),
test_server:do_times(10, fun t_exit_1/0),
- test_server:timetrap_cancel(Dog),
stop_spawner(),
ok.
@@ -176,11 +176,10 @@ t_exit_1() ->
%% Tests exit/2 with a lot of data in the exit message.
t_exit_2_other(Config) when is_list(Config) ->
+ ct:timetrap({seconds, 20}),
start_spawner(),
- Dog = test_server:timetrap(test_server:seconds(20)),
process_flag(trap_exit, true),
test_server:do_times(10, fun t_exit_2_other/0),
- test_server:timetrap_cancel(Dog),
stop_spawner(),
ok.
@@ -194,34 +193,32 @@ t_exit_2_other() ->
%% Tests that exit(Pid, normal) does not kill another process.;
t_exit_2_other_normal(Config) when is_list(Config) ->
- Dog = test_server:timetrap(test_server:seconds(20)),
+ ct:timetrap({seconds, 20}),
process_flag(trap_exit, true),
Pid = fun_spawn(fun() -> receive x -> ok end end),
exit(Pid, normal),
receive
{'EXIT', Pid, Reason} ->
- test_server:fail({process_died, Reason})
+ ct:fail({process_died, Reason})
after 1000 ->
ok
end,
case process_info(Pid) of
undefined ->
- test_server:fail(process_died_on_normal);
+ ct:fail(process_died_on_normal);
List when is_list(List) ->
ok
end,
exit(Pid, kill),
- test_server:timetrap_cancel(Dog),
ok.
%% Tests that we can trap an exit message sent with exit/2 from
%% the same process.
self_exit(Config) when is_list(Config) ->
+ ct:timetrap({seconds, 10}),
start_spawner(),
- Dog = test_server:timetrap(test_server:seconds(10)),
process_flag(trap_exit, true),
test_server:do_times(200, fun self_exit/0),
- test_server:timetrap_cancel(Dog),
stop_spawner(),
ok.
@@ -240,7 +237,7 @@ normal_suicide_exit(Config) when is_list(Config) ->
Pid = fun_spawn(fun() -> exit(self(), normal) end),
receive
{'EXIT', Pid, normal} -> ok;
- Other -> test_server:fail({bad_message, Other})
+ Other -> ct:fail({bad_message, Other})
end.
%% Tests exit(self(), Term) is equivalent to exit(Term) for a process
@@ -251,7 +248,7 @@ abnormal_suicide_exit(Config) when is_list(Config) ->
Pid = fun_spawn(fun() -> exit(self(), Garbage) end),
receive
{'EXIT', Pid, Garbage} -> ok;
- Other -> test_server:fail({bad_message, Other})
+ Other -> ct:fail({bad_message, Other})
end.
%% Tests that exit(self(), die) cannot be catched.
@@ -260,21 +257,20 @@ t_exit_2_catch(Config) when is_list(Config) ->
Pid = fun_spawn(fun() -> catch exit(self(), die) end),
receive
{'EXIT', Pid, normal} ->
- test_server:fail(catch_worked);
+ ct:fail(catch_worked);
{'EXIT', Pid, die} ->
ok;
Other ->
- test_server:fail({bad_message, Other})
+ ct:fail({bad_message, Other})
end.
%% Tests trapping of an 'EXIT' message generated by a bad argument to
%% the abs/1 bif. The 'EXIT' message will intentionally be very big.
trap_exit_badarg(Config) when is_list(Config) ->
+ ct:timetrap({seconds, 10}),
start_spawner(),
- Dog = test_server:timetrap(test_server:seconds(10)),
process_flag(trap_exit, true),
test_server:do_times(10, fun trap_exit_badarg/0),
- test_server:timetrap_cancel(Dog),
stop_spawner(),
ok.
@@ -288,7 +284,7 @@ trap_exit_badarg() ->
ok;
Other ->
ok = io:format("Bad EXIT message: ~P", [Other, 30]),
- test_server:fail(bad_exit_message)
+ ct:fail(bad_exit_message)
end.
bad_guy(Arg) ->
@@ -320,10 +316,9 @@ big_binary(N, Acc) ->
%% Test receiving an EXIT message when spawning a BIF with bad arguments.
trap_exit_badarg_in_bif(Config) when is_list(Config) ->
- Dog = test_server:timetrap(test_server:seconds(10)),
+ ct:timetrap({seconds, 10}),
process_flag(trap_exit, true),
test_server:do_times(10, fun trap_exit_badarg_bif/0),
- test_server:timetrap_cancel(Dog),
ok.
trap_exit_badarg_bif() ->
@@ -332,7 +327,7 @@ trap_exit_badarg_bif() ->
{'EXIT', Pid, {badarg, _}} ->
ok;
Other ->
- test_server:fail({unexpected, Other})
+ ct:fail({unexpected, Other})
end.
%% The following sequences of events have crasched Beam.
@@ -345,15 +340,13 @@ trap_exit_badarg_bif() ->
%% 3) The process will crash the next time it executes 'receive'.
exit_and_timeout(Config) when is_list(Config) ->
- Dog = test_server:timetrap(test_server:seconds(20)),
+ ct:timetrap({seconds, 20}),
process_flag(trap_exit, true),
Parent = self(),
Low = fun_spawn(fun() -> eat_low(Parent) end),
High = fun_spawn(fun() -> eat_high(Low) end),
eat_wait_for(Low, High),
-
- test_server:timetrap_cancel(Dog),
ok.
@@ -364,7 +357,7 @@ eat_wait_for(Low, High) ->
{'EXIT', High, normal} ->
eat_wait_for(Low, High);
Other ->
- test_server:fail({bad_message, Other})
+ ct:fail({bad_message, Other})
end.
eat_low(_Parent) ->
@@ -397,14 +390,12 @@ loop(StopTime) ->
%% Tries to send two different exit messages to a process.
%% (The second one should be ignored.)
exit_twice(Config) when is_list(Config) ->
- Dog = test_server:timetrap(test_server:seconds(20)),
+ ct:timetrap({seconds, 20}),
process_flag(trap_exit, true),
Low = fun_spawn(fun etwice_low/0),
High = fun_spawn(fun() -> etwice_high(Low) end),
etwice_wait_for(Low, High),
-
- test_server:timetrap_cancel(Dog),
ok.
etwice_wait_for(Low, High) ->
@@ -412,11 +403,11 @@ etwice_wait_for(Low, High) ->
{'EXIT', Low, first} ->
ok;
{'EXIT', Low, Other} ->
- test_server:fail({wrong_exit_reason, Other});
+ ct:fail({wrong_exit_reason, Other});
{'EXIT', High, normal} ->
etwice_wait_for(Low, High);
Other ->
- test_server:fail({bad_message, Other})
+ ct:fail({bad_message, Other})
end.
etwice_low() ->
@@ -435,6 +426,8 @@ t_process_info(Config) when is_list(Config) ->
{status, running} = process_info(self(), status),
{min_heap_size, 233} = process_info(self(), min_heap_size),
{min_bin_vheap_size,46422} = process_info(self(), min_bin_vheap_size),
+ {max_heap_size, #{ size := 0, kill := true, error_logger := true}} =
+ process_info(self(), max_heap_size),
{current_function,{?MODULE,t_process_info,1}} =
process_info(self(), current_function),
{current_function,{?MODULE,t_process_info,1}} =
@@ -574,6 +567,8 @@ process_info_other_msg(Config) when is_list(Config) ->
{min_heap_size, 233} = process_info(Pid, min_heap_size),
{min_bin_vheap_size, 46422} = process_info(Pid, min_bin_vheap_size),
+ {max_heap_size, #{ size := 0, kill := true, error_logger := true}} =
+ process_info(self(), max_heap_size),
Pid ! stop,
ok.
@@ -669,10 +664,6 @@ chk_pi_order([],[]) ->
chk_pi_order([{Arg, _}| Values], [Arg|Args]) ->
chk_pi_order(Values, Args).
-process_info_2_list(doc) ->
- [];
-process_info_2_list(suite) ->
- [];
process_info_2_list(Config) when is_list(Config) ->
Proc = spawn(fun () -> receive after infinity -> ok end end),
register(process_SUITE_process_info_2_list1, self()),
@@ -705,10 +696,6 @@ process_info_2_list(Config) when is_list(Config) ->
lists:foreach(fun ({backtrace, _}) -> ok end, V3),
ok.
-process_info_lock_reschedule(doc) ->
- [];
-process_info_lock_reschedule(suite) ->
- [];
process_info_lock_reschedule(Config) when is_list(Config) ->
%% We need a process that is running and an item that requires
%% process_info to take the main process lock.
@@ -741,7 +728,7 @@ process_info_lock_reschedule(Config) when is_list(Config) ->
exit(Target2, bang),
OkStatus;
{status, BadStatus} ->
- ?t:fail(BadStatus)
+ ct:fail(BadStatus)
end.
pi_loop(_Name, _Pid, 0) ->
@@ -750,10 +737,6 @@ pi_loop(Name, Pid, N) ->
{registered_name, Name} = process_info(Pid, registered_name),
pi_loop(Name, Pid, N-1).
-process_info_lock_reschedule2(doc) ->
- [];
-process_info_lock_reschedule2(suite) ->
- [];
process_info_lock_reschedule2(Config) when is_list(Config) ->
Parent = self(),
Fun = fun () ->
@@ -809,10 +792,6 @@ do_pi_msg_len(PT, AT) ->
lists:map(fun (_) -> ok end, [a,b,c,d]),
{message_queue_len, _} = process_info(element(2,PT), element(2,AT)).
-process_info_lock_reschedule3(doc) ->
- [];
-process_info_lock_reschedule3(suite) ->
- [];
process_info_lock_reschedule3(Config) when is_list(Config) ->
%% We need a process that is running and an item that requires
%% process_info to take the main process lock.
@@ -843,7 +822,7 @@ process_info_lock_reschedule3(Config) when is_list(Config) ->
exit(Target2, bang),
OkStatus;
{status, BadStatus} ->
- ?t:fail(BadStatus)
+ ct:fail(BadStatus)
end.
process_status_exiting(Config) when is_list(Config) ->
@@ -940,10 +919,14 @@ process_info_garbage_collection(_Config) ->
Parent = self(),
Pid = spawn_link(
fun() ->
+ %% We set mqd to off_heap and send an tuple
+ %% to process in order to force mbuf_size
+ %% to be used
+ process_flag(message_queue_data, off_heap),
receive go -> ok end,
(fun F(0) ->
Parent ! deep,
- receive ok -> ok end,
+ receive {ok,_} -> ok end,
[];
F(N) ->
timer:sleep(1),
@@ -952,31 +935,52 @@ process_info_garbage_collection(_Config) ->
Parent ! shallow,
receive done -> ok end
end),
- {garbage_collection_info, Before} =
- erlang:process_info(Pid, garbage_collection_info),
+ [{garbage_collection_info, Before},{total_heap_size, THSBefore}] =
+ erlang:process_info(Pid, [garbage_collection_info, total_heap_size]),
Pid ! go, receive deep -> ok end,
- {_, Deep} = erlang:process_info(Pid, garbage_collection_info),
- Pid ! ok, receive shallow -> ok end,
- {_, After} = erlang:process_info(Pid, garbage_collection_info),
+ [{_, Deep},{_,THSDeep}] =
+ erlang:process_info(Pid, [garbage_collection_info, total_heap_size]),
+ Pid ! {ok, make_ref()}, receive shallow -> ok end,
+ [{_, After},{_, THSAfter}] =
+ erlang:process_info(Pid, [garbage_collection_info, total_heap_size]),
Pid ! done,
%% Do some general checks to see if everything seems to be roughly correct
ct:log("Before: ~p",[Before]),
ct:log("Deep: ~p",[Deep]),
ct:log("After: ~p",[After]),
+ ct:log("Before THS: ~p",[THSBefore]),
+ ct:log("Deep THS: ~p",[THSDeep]),
+ ct:log("After THS: ~p",[THSAfter]),
%% Check stack_size
- true = proplists:get_value(stack_size, Before) < proplists:get_value(stack_size, Deep),
- true = proplists:get_value(stack_size, After) < proplists:get_value(stack_size, Deep),
+ true = gv(stack_size, Before) < gv(stack_size, Deep),
+ true = gv(stack_size, After) < gv(stack_size, Deep),
%% Check used heap size
- true = proplists:get_value(heap_size, Before) + proplists:get_value(old_heap_size, Before)
- < proplists:get_value(heap_size, Deep) + proplists:get_value(old_heap_size, Deep),
- true = proplists:get_value(heap_size, Before) + proplists:get_value(old_heap_size, Before)
- < proplists:get_value(heap_size, After) + proplists:get_value(old_heap_size, After),
+ true = gv(heap_size, Before) + gv(old_heap_size, Before)
+ < gv(heap_size, Deep) + gv(old_heap_size, Deep),
+ true = gv(heap_size, Before) + gv(old_heap_size, Before)
+ < gv(heap_size, After) + gv(old_heap_size, After),
+
+ %% Check that total_heap_size == heap_block_size + old_heap_block_size + mbuf_size
+ THSBefore = gv(heap_block_size, Before)
+ + gv(old_heap_block_size, Before)
+ + gv(mbuf_size, Before),
+
+ THSDeep = gv(heap_block_size, Deep)
+ + gv(old_heap_block_size, Deep)
+ + gv(mbuf_size, Deep),
+
+ THSAfter = gv(heap_block_size, After)
+ + gv(old_heap_block_size, After)
+ + gv(mbuf_size, After),
ok.
+gv(Key,List) ->
+ proplists:get_value(Key,List).
+
%% Tests erlang:bump_reductions/1.
bump_reductions(Config) when is_list(Config) ->
erlang:garbage_collect(),
@@ -987,10 +991,10 @@ bump_reductions(Config) when is_list(Config) ->
case R2-R1 of
Diff when Diff < 100 ->
ok = io:format("R1 = ~w, R2 = ~w", [R1, R2]),
- test_server:fail({small_diff, Diff});
+ ct:fail({small_diff, Diff});
Diff when Diff > 110 ->
ok = io:format("R1 = ~w, R2 = ~w", [R1, R2]),
- test_server:fail({big_diff, Diff});
+ ct:fail({big_diff, Diff});
Diff ->
io:format("~p\n", [Diff]),
ok
@@ -1029,7 +1033,7 @@ low_prio_test(Config) when is_list(Config) ->
process_flag(trap_exit, true),
S = spawn_link(?MODULE, prio_server, [0, 0]),
PCs = spawn_prio_clients(S, erlang:system_info(schedulers_online)),
- timer:sleep(2000),
+ ct:sleep({seconds,3}),
lists:foreach(fun (P) -> exit(P, kill) end, PCs),
S ! exit,
receive {'EXIT', S, {A, B}} -> check_prio(A, B) end,
@@ -1077,8 +1081,7 @@ make_unaligned_sub_binary(Bin0) ->
<<0:3,Bin:Sz/binary,31:5>> = id(Bin1),
Bin.
-yield(doc) ->
- "Tests erlang:yield/1.";
+%% Tests erlang:yield/1
yield(Config) when is_list(Config) ->
case catch erlang:system_info(modified_timing_level) of
Level when is_integer(Level) ->
@@ -1119,7 +1122,7 @@ yield_test() ->
{Diff, _} ->
ok = io:format("R1 = ~w, R2 = ~w, Schedcnt = ~w",
[R1, R2, Schedcnt]),
- test_server:fail({measurement_error, Diff, Schedcnt})
+ ct:fail({measurement_error, Diff, Schedcnt})
end.
call_yield() ->
@@ -1156,8 +1159,6 @@ schedcnt(stop, {Ref, Pid}) when is_reference(Ref), is_pid(Pid) ->
Cnt
end.
-yield2(doc) -> [];
-yield2(suite) -> [];
yield2(Config) when is_list(Config) ->
Me = self(),
Go = make_ref(),
@@ -1208,7 +1209,7 @@ yield2(Config) when is_list(Config) ->
io:format("Reductions = ~p~n", [Reductions]),
ok;
{RedDiff, Reductions} ->
- ?t:fail({unexpected_reduction_count, Reductions})
+ ct:fail({unexpected_reduction_count, Reductions})
end,
none = next_tmsg(P),
@@ -1249,8 +1250,6 @@ fail_register(Name, Process) ->
{'EXIT',{badarg,_}} = (catch Name ! anything_goes),
ok.
-garbage_collect(doc) -> [];
-garbage_collect(suite) -> [];
garbage_collect(Config) when is_list(Config) ->
Prio = process_flag(priority, high),
true = erlang:garbage_collect(),
@@ -1289,10 +1288,7 @@ garbage_collect(Config) when is_list(Config) ->
process_flag(priority, Prio),
ok.
-process_info_messages(doc) ->
- ["This used to cause the nofrag emulator to dump core"];
-process_info_messages(suite) ->
- [];
+%% This used to cause the nofrag emulator to dump core
process_info_messages(Config) when is_list(Config) ->
process_info_messages_test(),
ok.
@@ -1350,10 +1346,6 @@ process_info_messages_test() ->
chk_badarg(Fun) ->
try Fun(), exit(no_badarg) catch error:badarg -> ok end.
-process_flag_badarg(doc) ->
- [];
-process_flag_badarg(suite) ->
- [];
process_flag_badarg(Config) when is_list(Config) ->
chk_badarg(fun () -> process_flag(gurka, banan) end),
chk_badarg(fun () -> process_flag(trap_exit, gurka) end),
@@ -1361,6 +1353,28 @@ process_flag_badarg(Config) when is_list(Config) ->
chk_badarg(fun () -> process_flag(min_heap_size, gurka) end),
chk_badarg(fun () -> process_flag(min_bin_vheap_size, gurka) end),
chk_badarg(fun () -> process_flag(min_bin_vheap_size, -1) end),
+
+ chk_badarg(fun () -> process_flag(max_heap_size, gurka) end),
+ chk_badarg(fun () -> process_flag(max_heap_size, -1) end),
+ chk_badarg(fun () ->
+ {_,Min} = process_info(self(), min_heap_size),
+ process_flag(max_heap_size, Min - 1)
+ end),
+ chk_badarg(fun () ->
+ {_,Min} = process_info(self(), min_heap_size),
+ process_flag(max_heap_size, #{size => Min - 1})
+ end),
+ chk_badarg(fun () -> process_flag(max_heap_size, #{}) end),
+ chk_badarg(fun () -> process_flag(max_heap_size, #{ kill => true }) end),
+ chk_badarg(fun () -> process_flag(max_heap_size, #{ size => 233,
+ kill => gurka }) end),
+ chk_badarg(fun () -> process_flag(max_heap_size, #{ size => 233,
+ error_logger => gurka }) end),
+ chk_badarg(fun () -> process_flag(max_heap_size, #{ size => 233,
+ kill => true,
+ error_logger => gurka }) end),
+ chk_badarg(fun () -> process_flag(max_heap_size, #{ size => 1 bsl 64 }) end),
+
chk_badarg(fun () -> process_flag(priority, 4711) end),
chk_badarg(fun () -> process_flag(save_calls, hmmm) end),
P= spawn_link(fun () -> receive die -> ok end end),
@@ -1371,8 +1385,6 @@ process_flag_badarg(Config) when is_list(Config) ->
-include_lib("stdlib/include/ms_transform.hrl").
-otp_6237(doc) -> [];
-otp_6237(suite) -> [];
otp_6237(Config) when is_list(Config) ->
Slctrs = lists:map(fun (_) ->
spawn_link(fun () ->
@@ -1439,10 +1451,6 @@ otp_6237_select_loop() ->
conses_per_red,
debug_level}).
-processes_large_tab(doc) ->
- [];
-processes_large_tab(suite) ->
- [];
processes_large_tab(Config) when is_list(Config) ->
sys_mem_cond_run(2048, fun () -> processes_large_tab_test(Config) end).
@@ -1470,7 +1478,7 @@ processes_large_tab_test(Config) ->
#ptab_list_bif_info{debug_level = Lvl} when Lvl > MaxDbgLvl ->
20;
#ptab_list_bif_info{debug_level = Lvl} when Lvl < 0 ->
- ?t:fail({debug_level, Lvl});
+ ct:fail({debug_level, Lvl});
#ptab_list_bif_info{debug_level = Lvl} ->
Lvl
end,
@@ -1488,15 +1496,11 @@ processes_large_tab_test(Config) ->
[processes_bif_info]) of
#ptab_list_bif_info{tab_chunks = Chunks} when is_integer(Chunks),
Chunks > 1 -> ok;
- PBInfo -> ?t:fail(PBInfo)
+ PBInfo -> ct:fail(PBInfo)
end,
stop_node(LargeNode),
chk_processes_bif_test_res(Res).
-processes_default_tab(doc) ->
- [];
-processes_default_tab(suite) ->
- [];
processes_default_tab(Config) when is_list(Config) ->
sys_mem_cond_run(1024, fun () -> processes_default_tab_test(Config) end).
@@ -1506,10 +1510,6 @@ processes_default_tab_test(Config) ->
stop_node(DefaultNode),
chk_processes_bif_test_res(Res).
-processes_small_tab(doc) ->
- [];
-processes_small_tab(suite) ->
- [];
processes_small_tab(Config) when is_list(Config) ->
{ok, SmallNode} = start_node(Config, "+P 1024"),
Res = rpc:call(SmallNode, ?MODULE, processes_bif_test, []),
@@ -1518,10 +1518,6 @@ processes_small_tab(Config) when is_list(Config) ->
true = PBInfo#ptab_list_bif_info.tab_chunks < 10,
chk_processes_bif_test_res(Res).
-processes_this_tab(doc) ->
- [];
-processes_this_tab(suite) ->
- [];
processes_this_tab(Config) when is_list(Config) ->
Mem = case {erlang:system_info(build_type),
erlang:system_info(allocator)} of
@@ -1535,7 +1531,7 @@ processes_this_tab(Config) when is_list(Config) ->
chk_processes_bif_test_res(ok) -> ok;
chk_processes_bif_test_res({comment, _} = Comment) -> Comment;
-chk_processes_bif_test_res(Failure) -> ?t:fail(Failure).
+chk_processes_bif_test_res(Failure) -> ct:fail(Failure).
print_processes_bif_info(#ptab_list_bif_info{min_start_reds = MinStartReds,
tab_chunks = TabChunks,
@@ -1546,7 +1542,7 @@ print_processes_bif_info(#ptab_list_bif_info{min_start_reds = MinStartReds,
term_procs_max_reds = TPMaxReds,
conses_per_red = ConsesPerRed,
debug_level = DbgLvl}) ->
- ?t:format("processes/0 bif info on node ~p:~n"
+ io:format("processes/0 bif info on node ~p:~n"
"Min start reductions = ~p~n"
"Process table chunks = ~p~n"
"Process table chunks size = ~p~n"
@@ -1587,7 +1583,7 @@ processes_unexpected_result(CorrectProcs, Procs) ->
status,
priority],
MissingProcs = CorrectProcs -- Procs,
- ?t:format("Missing processes: ~p",
+ io:format("Missing processes: ~p",
[lists:map(fun (Pid) ->
[{pid, Pid}
| case process_info(Pid, ProcInfo) of
@@ -1597,7 +1593,7 @@ processes_unexpected_result(CorrectProcs, Procs) ->
end,
MissingProcs)]),
SuperfluousProcs = Procs -- CorrectProcs,
- ?t:format("Superfluous processes: ~p",
+ io:format("Superfluous processes: ~p",
[lists:map(fun (Pid) ->
[{pid, Pid}
| case process_info(Pid, ProcInfo) of
@@ -1606,7 +1602,7 @@ processes_unexpected_result(CorrectProcs, Procs) ->
end]
end,
SuperfluousProcs)]),
- ?t:fail(unexpected_result).
+ ct:fail(unexpected_result).
hangaround(Cleaner, Type) ->
%% Type is only used to distinguish different processes from
@@ -1711,7 +1707,7 @@ do_processes_bif_test(WantReds, DieTest, Processes) ->
DoIt = make_ref(),
GetGoing = make_ref(),
{NoTestProcs, TestProcs} = spawn_initial_hangarounds(Cleaner),
- ?t:format("Testing with ~p processes~n", [NoTestProcs]),
+ io:format("Testing with ~p processes~n", [NoTestProcs]),
SpawnHangAround = fun () ->
spawn(?MODULE, hangaround, [Cleaner, new_hangaround])
end,
@@ -1753,7 +1749,7 @@ do_processes_bif_test(WantReds, DieTest, Processes) ->
Procs = lists:sort(Procs0),
CorrectProcs = lists:sort(CorrectProcs0),
LengthCorrectProcs = length(CorrectProcs),
- ?t:format("~p = length(CorrectProcs)~n", [LengthCorrectProcs]),
+ io:format("~p = length(CorrectProcs)~n", [LengthCorrectProcs]),
true = LengthCorrectProcs > NoTestProcs,
case CorrectProcs =:= Procs of
true ->
@@ -1774,12 +1770,12 @@ do_processes_bif_test(WantReds, DieTest, Processes) ->
do_processes_bif_die_test(false, _Processes) ->
- ?t:format("Skipping test killing process executing processes/0~n",[]),
+ io:format("Skipping test killing process executing processes/0~n",[]),
ok;
do_processes_bif_die_test(true, Processes) ->
do_processes_bif_die_test(5, Processes);
do_processes_bif_die_test(N, Processes) ->
- ?t:format("Doing test killing process executing processes/0~n",[]),
+ io:format("Doing test killing process executing processes/0~n",[]),
try
Tester = self(),
Oooh_Nooooooo = make_ref(),
@@ -1829,8 +1825,8 @@ do_processes_bif_die_test(N, Processes) ->
ok
catch
throw:{kill_in_trap, R} when N > 0 ->
- ?t:format("Failed to kill in trap: ~p~n", [R]),
- ?t:format("Trying again~n", []),
+ io:format("Failed to kill in trap: ~p~n", [R]),
+ io:format("Trying again~n", []),
do_processes_bif_die_test(N-1, Processes)
end.
@@ -1860,7 +1856,7 @@ wait_until_system_recover(Tmr) ->
receive
{timeout, Tmr, _} ->
Comment = "WARNING: Test processes still hanging around!",
- ?t:format("~s~n", [Comment]),
+ io:format("~s~n", [Comment]),
put(processes_bif_testcase_comment, Comment),
lists:foreach(
fun (P) when P == self() ->
@@ -1868,7 +1864,7 @@ wait_until_system_recover(Tmr) ->
(P) ->
case process_info(P, initial_call) of
{initial_call,{?MODULE, _, _} = MFA} ->
- ?t:format("~p ~p~n", [P, MFA]);
+ io:format("~p ~p~n", [P, MFA]);
{initial_call,{_, _, _}} ->
ok;
undefined ->
@@ -1884,10 +1880,6 @@ wait_until_system_recover(Tmr) ->
receive {timeout, Tmr, _} -> ok after 0 -> ok end,
ok.
-processes_last_call_trap(doc) ->
- [];
-processes_last_call_trap(suite) ->
- [];
processes_last_call_trap(Config) when is_list(Config) ->
enable_internal_state(),
Processes = fun () -> processes() end,
@@ -1910,10 +1902,6 @@ processes_last_call_trap(Config) when is_list(Config) ->
my_processes() ->
processes().
-processes_apply_trap(doc) ->
- [];
-processes_apply_trap(suite) ->
- [];
processes_apply_trap(Config) when is_list(Config) ->
enable_internal_state(),
PBInfo = erts_debug:get_internal_state(processes_bif_info),
@@ -1928,10 +1916,6 @@ processes_apply_trap(Config) when is_list(Config) ->
apply(erlang, processes, [])
end, lists:seq(1,100)).
-processes_gc_trap(doc) ->
- [];
-processes_gc_trap(suite) ->
- [];
processes_gc_trap(Config) when is_list(Config) ->
Tester = self(),
enable_internal_state(),
@@ -1970,10 +1954,6 @@ processes_gc_trap(Config) when is_list(Config) ->
exit(Suspendee, bang),
ok.
-process_flag_heap_size(doc) ->
- [];
-process_flag_heap_size(suite) ->
- [];
process_flag_heap_size(Config) when is_list(Config) ->
HSize = 2586, % must be gc fib+ number
VHSize = 318187, % must be gc fib+ number
@@ -1985,10 +1965,6 @@ process_flag_heap_size(Config) when is_list(Config) ->
VHSize = erlang:process_flag(min_bin_vheap_size, OldVHmin),
ok.
-spawn_opt_heap_size(doc) ->
- [];
-spawn_opt_heap_size(suite) ->
- [];
spawn_opt_heap_size(Config) when is_list(Config) ->
HSize = 987, % must be gc fib+ number
VHSize = 46422, % must be gc fib+ number
@@ -1999,10 +1975,110 @@ spawn_opt_heap_size(Config) when is_list(Config) ->
Pid ! stop,
ok.
-processes_term_proc_list(doc) ->
- [];
-processes_term_proc_list(suite) ->
- [];
+spawn_opt_max_heap_size(_Config) ->
+
+ error_logger:add_report_handler(?MODULE, self()),
+
+ %% Test that numerical limit works
+ max_heap_size_test(1024, 1024, true, true),
+
+ %% Test that map limit works
+ max_heap_size_test(#{ size => 1024 }, 1024, true, true),
+
+ %% Test that no kill is sent
+ max_heap_size_test(#{ size => 1024, kill => false }, 1024, false, true),
+
+ %% Test that no error_logger report is sent
+ max_heap_size_test(#{ size => 1024, error_logger => false }, 1024, true, false),
+
+ %% Test that system_flag works
+ erlang:system_flag(max_heap_size, #{ size => 0, kill => false,
+ error_logger => true}),
+ max_heap_size_test(#{ size => 1024 }, 1024, false, true),
+ max_heap_size_test(#{ size => 1024, kill => true }, 1024, true, true),
+
+ erlang:system_flag(max_heap_size, #{ size => 0, kill => true,
+ error_logger => false}),
+ max_heap_size_test(#{ size => 1024 }, 1024, true, false),
+ max_heap_size_test(#{ size => 1024, error_logger => true }, 1024, true, true),
+
+ erlang:system_flag(max_heap_size, #{ size => 1 bsl 20, kill => true,
+ error_logger => true}),
+ max_heap_size_test(#{ }, 1 bsl 20, true, true),
+
+ erlang:system_flag(max_heap_size, #{ size => 0, kill => true,
+ error_logger => true}),
+
+ %% Test that ordinary case works as expected again
+ max_heap_size_test(1024, 1024, true, true),
+
+ ok.
+
+max_heap_size_test(Option, Size, Kill, ErrorLogger)
+ when map_size(Option) == 0 ->
+ max_heap_size_test([], Size, Kill, ErrorLogger);
+max_heap_size_test(Option, Size, Kill, ErrorLogger)
+ when is_map(Option); is_integer(Option) ->
+ max_heap_size_test([{max_heap_size, Option}], Size, Kill, ErrorLogger);
+max_heap_size_test(Option, Size, Kill, ErrorLogger) ->
+ OomFun = fun F() -> timer:sleep(5),[lists:seq(1,1000)|F()] end,
+ Pid = spawn_opt(OomFun, Option),
+ {max_heap_size, MHSz} = erlang:process_info(Pid, max_heap_size),
+ ct:log("Default: ~p~nOption: ~p~nProc: ~p~n",
+ [erlang:system_info(max_heap_size), Option, MHSz]),
+
+ #{ size := Size} = MHSz,
+
+ Ref = erlang:monitor(process, Pid),
+ if Kill ->
+ receive
+ {'DOWN', Ref, process, Pid, killed} ->
+ ok
+ end;
+ true ->
+ ok
+ end,
+ if ErrorLogger ->
+ receive
+ {error, _, {emulator, _, [Pid|_]}} ->
+ ok
+ end;
+ true ->
+ ok
+ end,
+ if not Kill ->
+ exit(Pid, die),
+ receive
+ {'DOWN', Ref, process, Pid, die} ->
+ ok
+ end,
+ flush();
+ true ->
+ ok
+ end,
+ receive
+ M ->
+ ct:fail({unexpected_message, M})
+ after 10 ->
+ ok
+ end.
+
+flush() ->
+ receive
+ _M ->
+ flush()
+ after 1000 ->
+ ok
+ end.
+
+%% error_logger report handler proxy
+init(Pid) ->
+ {ok, Pid}.
+
+handle_event(Event, Pid) ->
+ Pid ! Event,
+ {ok, Pid}.
+
processes_term_proc_list(Config) when is_list(Config) ->
Tester = self(),
as_expected = processes_term_proc_list_test(false),
@@ -2152,24 +2228,12 @@ processes_term_proc_list_test(MustChk) ->
as_expected.
-otp_7738_waiting(doc) ->
- [];
-otp_7738_waiting(suite) ->
- [];
otp_7738_waiting(Config) when is_list(Config) ->
otp_7738_test(waiting).
-otp_7738_suspended(doc) ->
- [];
-otp_7738_suspended(suite) ->
- [];
otp_7738_suspended(Config) when is_list(Config) ->
otp_7738_test(suspended).
-otp_7738_resume(doc) ->
- [];
-otp_7738_resume(suite) ->
- [];
otp_7738_resume(Config) when is_list(Config) ->
otp_7738_test(resume).
@@ -2238,8 +2302,8 @@ do_otp_7738_test(Type) ->
ok
after 2000 ->
I = process_info(R, [status, message_queue_len]),
- ?t:format("~p~n", [I]),
- ?t:fail(no_progress)
+ io:format("~p~n", [I]),
+ ct:fail(no_progress)
end,
ok.
@@ -2326,7 +2390,7 @@ no_priority_inversion2(Config) when is_list(Config) ->
RH = request_gc(PL, high),
receive
{garbage_collect, _, _} ->
- ?t:fail(unexpected_gc)
+ ct:fail(unexpected_gc)
after 1000 ->
ok
end,
@@ -2435,7 +2499,7 @@ gc_request_when_gc_disabled(Config) when is_list(Config) ->
async = garbage_collect(P, [{async, ReqId}]),
receive
{garbage_collect, ReqId, Result} ->
- ?t:fail({unexpected_gc, Result});
+ ct:fail({unexpected_gc, Result});
{P, gc_state, true} ->
ok
end,
@@ -2505,15 +2569,15 @@ start_node(Config, Args) when is_list(Config) ->
Pa = filename:dirname(code:which(?MODULE)),
Name = list_to_atom(atom_to_list(?MODULE)
++ "-"
- ++ atom_to_list(?config(testcase, Config))
+ ++ atom_to_list(proplists:get_value(testcase, Config))
++ "-"
++ integer_to_list(erlang:system_time(seconds))
++ "-"
++ integer_to_list(erlang:unique_integer([positive]))),
- ?t:start_node(Name, slave, [{args, "-pa "++Pa++" "++Args}]).
+ test_server:start_node(Name, slave, [{args, "-pa "++Pa++" "++Args}]).
stop_node(Node) ->
- ?t:stop_node(Node).
+ test_server:stop_node(Node).
enable_internal_state() ->
case catch erts_debug:get_internal_state(available_internal_state) of
diff --git a/erts/emulator/test/pseudoknot_SUITE.erl b/erts/emulator/test/pseudoknot_SUITE.erl
index 58ef3cd563..ed4d40ac65 100644
--- a/erts/emulator/test/pseudoknot_SUITE.erl
+++ b/erts/emulator/test/pseudoknot_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.
diff --git a/erts/emulator/test/random_iolist.erl b/erts/emulator/test/random_iolist.erl
index 6da7da04de..555f063e0a 100644
--- a/erts/emulator/test/random_iolist.erl
+++ b/erts/emulator/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.
diff --git a/erts/emulator/test/receive_SUITE.erl b/erts/emulator/test/receive_SUITE.erl
index 635c3d27c5..83653a7a36 100644
--- a/erts/emulator/test/receive_SUITE.erl
+++ b/erts/emulator/test/receive_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.
@@ -24,13 +24,12 @@
-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([all/0, suite/0,
call_with_huge_message_queue/1,receive_in_between/1]).
--export([init_per_testcase/2,end_per_testcase/2]).
-
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap, {minutes, 3}}].
all() ->
[call_with_huge_message_queue, receive_in_between].
@@ -38,27 +37,6 @@ all() ->
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(Func, Config) when is_atom(Func), is_list(Config) ->
- Dog=?t:timetrap(?t:minutes(3)),
- [{watchdog, Dog}|Config].
-
-end_per_testcase(_Func, Config) ->
- Dog=?config(watchdog, Config),
- ?t:timetrap_cancel(Dog).
-
call_with_huge_message_queue(Config) when is_list(Config) ->
Pid = spawn_link(fun echo_loop/0),
@@ -77,8 +55,7 @@ call_with_huge_message_queue(Config) when is_list(Config) ->
Q when Q < 10 ->
ok;
Q ->
- io:format("Best Q = ~p", [Q]),
- ?t:fail()
+ ct:fail("Best Q = ~p", [Q])
end,
ok.
diff --git a/erts/emulator/test/ref_SUITE.erl b/erts/emulator/test/ref_SUITE.erl
index 6d4a998094..5f519d522e 100644
--- a/erts/emulator/test/ref_SUITE.erl
+++ b/erts/emulator/test/ref_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.
@@ -20,54 +20,29 @@
-module(ref_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([wrap_1/1]).
-export([loop_ref/1]).
-include_lib("common_test/include/ct.hrl").
-init_per_testcase(_, Config) ->
- ?line Dog=test_server:timetrap(test_server:minutes(2)),
- [{watchdog, Dog}|Config].
-
-end_per_testcase(_, 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() ->
[wrap_1].
-groups() ->
- [].
-
-init_per_suite(Config) ->
- Config.
-
-end_per_suite(_Config) ->
- ok.
-
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
-
-
-wrap_1(doc) -> "Check that refs don't wrap around easily.";
+%% Check that refs don't wrap around easily.
wrap_1(Config) when is_list(Config) ->
- ?line spawn_link(?MODULE, loop_ref, [self()]),
- ?line receive
- done ->
- test_server:fail(wrapfast)
- after 30000 ->
- ok
- end,
+ spawn_link(?MODULE, loop_ref, [self()]),
+ receive
+ done ->
+ ct:fail(wrapfast)
+ after 30000 ->
+ ok
+ end,
ok.
loop_ref(Parent) ->
diff --git a/erts/emulator/test/register_SUITE.erl b/erts/emulator/test/register_SUITE.erl
index 53bf02e085..43ae749498 100644
--- a/erts/emulator/test/register_SUITE.erl
+++ b/erts/emulator/test/register_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.
@@ -26,44 +26,17 @@
-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]).
-export([otp_8099/1]).
--define(DEFAULT_TIMEOUT, ?t:minutes(2)).
-
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap, {minutes, 2}}].
all() ->
[otp_8099].
-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) ->
- Dog = ?t:timetrap(?DEFAULT_TIMEOUT),
- [{watchdog, Dog}, {testcase, Case} | Config].
-
-end_per_testcase(_Case, Config) when is_list(Config) ->
- Dog = ?config(watchdog, Config),
- ?t:timetrap_cancel(Dog),
- ok.
-
%%
%% Test cases
%%
@@ -83,25 +56,20 @@ otp_8099(Config) when is_list(Config) ->
otp_8099_test(0) ->
ok;
otp_8099_test(N) ->
- ?line P = spawn(fun () -> otp_8099_proc() end),
- ?line case catch register(?OTP_8099_NAME, P) of
+ P = spawn(fun () -> otp_8099_proc() end),
+ case catch register(?OTP_8099_NAME, P) of
true ->
- ?line ok;
+ ok;
_ ->
- ?line OP = whereis(?OTP_8099_NAME),
- ?line (catch unregister(?OTP_8099_NAME)),
- ?line (catch exit(OP, kill)),
- ?line true = (catch register(?OTP_8099_NAME, P))
+ OP = whereis(?OTP_8099_NAME),
+ (catch unregister(?OTP_8099_NAME)),
+ (catch exit(OP, kill)),
+ true = (catch register(?OTP_8099_NAME, P))
end,
- ?line P = whereis(?OTP_8099_NAME),
- ?line exit(P, kill),
- ?line otp_8099_test(N-1).
+ P = whereis(?OTP_8099_NAME),
+ exit(P, kill),
+ otp_8099_test(N-1).
otp_8099_proc() ->
receive _ -> ok end,
otp_8099_proc().
-
-%%
-%% Utils
-%%
-
diff --git a/erts/emulator/test/save_calls_SUITE.erl b/erts/emulator/test/save_calls_SUITE.erl
index b40a5f0a56..aae7651f6d 100644
--- a/erts/emulator/test/save_calls_SUITE.erl
+++ b/erts/emulator/test/save_calls_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.
@@ -22,10 +22,7 @@
-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, init_per_testcase/2,end_per_testcase/2]).
-export([save_calls_1/1,dont_break_reductions/1]).
@@ -36,36 +33,21 @@ suite() -> [{ct_hooks,[ts_install_cth]}].
all() ->
[save_calls_1, dont_break_reductions].
-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(dont_break_reductions,Config) ->
%% Skip on --enable-native-libs as hipe rescedules after each
%% function call.
case erlang:system_info(hipe_architecture) of
- undefined ->
- Config;
- Architecture ->
- {lists, ListsBinary, _ListsFilename} = code:get_object_code(lists),
- ChunkName = hipe_unified_loader:chunk_name(Architecture),
- NativeChunk = beam_lib:chunks(ListsBinary, [ChunkName]),
- case NativeChunk of
- {ok,{_,[{_,Bin}]}} when is_binary(Bin) ->
- {skip,"Does not work for --enable-native-libs"};
- {error, beam_lib, _} -> Config
- end
+ undefined ->
+ Config;
+ Architecture ->
+ {lists, ListsBinary, _ListsFilename} = code:get_object_code(lists),
+ ChunkName = hipe_unified_loader:chunk_name(Architecture),
+ NativeChunk = beam_lib:chunks(ListsBinary, [ChunkName]),
+ case NativeChunk of
+ {ok,{_,[{_,Bin}]}} when is_binary(Bin) ->
+ {skip,"Does not work for --enable-native-libs"};
+ {error, beam_lib, _} -> Config
+ end
end;
init_per_testcase(_,Config) ->
Config.
@@ -73,91 +55,99 @@ init_per_testcase(_,Config) ->
end_per_testcase(_,_Config) ->
ok.
-dont_break_reductions(suite) ->
- [];
-dont_break_reductions(doc) ->
- ["Check that save_calls dont break reduction-based scheduling"];
+%% Check that save_calls dont break reduction-based scheduling
dont_break_reductions(Config) when is_list(Config) ->
- ?line RPS1 = reds_per_sched(0),
- ?line RPS2 = reds_per_sched(20),
- ?line Diff = abs(RPS1 - RPS2),
- ?line true = (Diff < (0.05 * RPS1)),
+ RPS1 = reds_per_sched(0),
+ RPS2 = reds_per_sched(20),
+ Diff = abs(RPS1 - RPS2),
+ true = (Diff < (0.2 * RPS1)),
ok.
reds_per_sched(SaveCalls) ->
- ?line Parent = self(),
- ?line HowMany = 10000,
- ?line Pid = spawn(fun() ->
- process_flag(save_calls,SaveCalls),
- receive
- go ->
- carmichaels_below(HowMany),
- Parent ! erlang:process_info(self(),reductions)
- end
- end),
- ?line TH = spawn(fun() -> trace_handler(0,Parent,Pid) end),
- ?line erlang:trace(Pid, true,[running,procs,{tracer,TH}]),
- ?line Pid ! go,
- ?line {Sched,Reds} = receive
- {accumulated,X} ->
- receive {reductions,Y} ->
- {X,Y}
- after 30000 ->
- timeout
- end
- after 30000 ->
- timeout
- end,
- ?line Reds div Sched.
+ Parent = self(),
+ HowMany = 10000,
+ Pid = spawn(fun() ->
+ process_flag(save_calls,SaveCalls),
+ receive
+ go ->
+ carmichaels_below(HowMany),
+ Parent ! erlang:process_info(self(),reductions)
+ end
+ end),
+ TH = spawn(fun() -> trace_handler(0,Parent,Pid) end),
+ erlang:trace(Pid, true,[running,procs,{tracer,TH}]),
+ Pid ! go,
+ {Sched,Reds} = receive
+ {accumulated,X} ->
+ receive {reductions,Y} ->
+ {X,Y}
+ after 30000 ->
+ timeout
+ end
+ after 30000 ->
+ timeout
+ end,
+ Reds div Sched.
trace_handler(Acc,Parent,Client) ->
receive
- {trace,Client,out,_} ->
- trace_handler(Acc+1,Parent,Client);
- {trace,Client,exit,_} ->
- Parent ! {accumulated, Acc};
- _ ->
- trace_handler(Acc,Parent,Client)
+ {trace,Client,out,_} ->
+ trace_handler(Acc+1,Parent,Client);
+ {trace,Client,exit,_} ->
+ Parent ! {accumulated, Acc};
+ _ ->
+ trace_handler(Acc,Parent,Client)
after 10000 ->
- ok
+ ok
end.
-save_calls_1(doc) -> "Test call saving.";
+%% Test call saving.
save_calls_1(Config) when is_list(Config) ->
case test_server:is_native(?MODULE) of
- true -> {skipped,"Native code"};
- false -> save_calls_1()
+ true -> {skipped,"Native code"};
+ false -> save_calls_1()
end.
-
+
save_calls_1() ->
- ?line erlang:process_flag(self(), save_calls, 0),
- ?line {last_calls, false} = process_info(self(), last_calls),
-
- ?line erlang:process_flag(self(), save_calls, 10),
- ?line {last_calls, _L1} = process_info(self(), last_calls),
- ?line ?MODULE:do_bipp(),
- ?line {last_calls, L2} = process_info(self(), last_calls),
- ?line L21 = lists:filter(fun is_local_function/1, L2),
- ?line case L21 of
- [{?MODULE,do_bipp,0},
- timeout,
- 'send',
- {?MODULE,do_bopp,1},
- 'receive',
- timeout,
- {?MODULE,do_bepp,0}] ->
- ok;
- X ->
- test_server:fail({l21, X})
- end,
-
- ?line erlang:process_flag(self(), save_calls, 10),
- ?line {last_calls, L3} = process_info(self(), last_calls),
- ?line L31 = lists:filter(fun is_local_function/1, L3),
- ?line [] = L31,
+ erlang:process_flag(self(), save_calls, 0),
+ {last_calls, false} = process_info(self(), last_calls),
+
+ erlang:process_flag(self(), save_calls, 10),
+ {last_calls, _L1} = process_info(self(), last_calls),
+ ?MODULE:do_bipp(),
+ {last_calls, L2} = process_info(self(), last_calls),
+ L21 = lists:filter(fun is_local_function/1, L2),
+ case L21 of
+ [{?MODULE,do_bipp,0},
+ timeout,
+ 'send',
+ {?MODULE,do_bopp,1},
+ 'receive',
+ timeout,
+ {?MODULE,do_bepp,0}] ->
+ ok;
+ X ->
+ ct:fail({l21, X})
+ end,
+
+ erlang:process_flag(self(), save_calls, 10),
+ {last_calls, L3} = process_info(self(), last_calls),
+ true = (L3 /= false),
+ L31 = lists:filter(fun is_local_function/1, L3),
+ [] = L31,
+ erlang:process_flag(self(), save_calls, 0),
+
+ %% Also check that it works on another process ...
+ Pid = spawn(fun () -> receive after infinity -> ok end end),
+ erlang:process_flag(Pid, save_calls, 10),
+ {last_calls, L4} = process_info(Pid, last_calls),
+ true = (L4 /= false),
+ L41 = lists:filter(fun is_local_function/1, L4),
+ [] = L41,
+ exit(Pid,kill),
ok.
do_bipp() ->
@@ -172,7 +162,7 @@ do_bapp() ->
do_bopp(T) ->
receive
- X -> X
+ X -> X
after T -> ok
end.
@@ -196,18 +186,18 @@ carmichaels_below(N,N2) when N >= N2 ->
0;
carmichaels_below(N,N2) ->
X = case fast_prime(N,10) of
- false -> 0;
- true ->
- case fast_prime2(N,10) of
- true ->
- %io:format("Prime: ~p~n",[N]),
- 0;
- false ->
- io:format("Carmichael: ~p (dividable by ~p)~n",
- [N,smallest_divisor(N)]),
- 1
- end
- end,
+ false -> 0;
+ true ->
+ case fast_prime2(N,10) of
+ true ->
+ %io:format("Prime: ~p~n",[N]),
+ 0;
+ false ->
+ io:format("Carmichael: ~p (dividable by ~p)~n",
+ [N,smallest_divisor(N)]),
+ 1
+ end
+ end,
X+carmichaels_below(N+2,N2).
expmod(_,E,_) when E == 0 ->
@@ -231,30 +221,30 @@ do_fast_prime(_N,0) ->
true;
do_fast_prime(N,Times) ->
case fermat(N) of
- true ->
- do_fast_prime(N,Times-1);
- false ->
- false
+ true ->
+ do_fast_prime(N,Times-1);
+ false ->
+ false
end.
-
+
fast_prime(N,T) ->
do_fast_prime(N,T).
expmod2(_,E,_) when E == 0 ->
1;
expmod2(Base,Exp,Mod) when (Exp rem 2) == 0 ->
-%% Uncomment the code below to simulate scheduling bug!
-% case erlang:process_info(self(),last_calls) of
-% {last_calls,false} -> ok;
-% _ -> erlang:yield()
-% end,
+ %% Uncomment the code below to simulate scheduling bug!
+ % case erlang:process_info(self(),last_calls) of
+ % {last_calls,false} -> ok;
+ % _ -> erlang:yield()
+ % end,
X = expmod2(Base,Exp div 2,Mod),
Y=(X*X) rem Mod,
if
- Y == 1, X =/= 1, X =/= (Mod - 1) ->
- 0;
- true ->
- Y rem Mod
+ Y == 1, X =/= 1, X =/= (Mod - 1) ->
+ 0;
+ true ->
+ Y rem Mod
end;
expmod2(Base,Exp,Mod) ->
(Base * expmod2(Base,Exp - 1,Mod)) rem Mod.
@@ -269,12 +259,12 @@ do_fast_prime2(_N,0) ->
true;
do_fast_prime2(N,Times) ->
case miller_rabbin(N) of
- true ->
- do_fast_prime2(N,Times-1);
- false ->
- false
+ true ->
+ do_fast_prime2(N,Times-1);
+ false ->
+ false
end.
-
+
fast_prime2(N,T) ->
do_fast_prime2(N,T).
@@ -283,17 +273,16 @@ smallest_divisor(N) ->
find_divisor(N,TD) ->
if
- TD*TD > N ->
- N;
- true ->
- case divides(TD,N) of
- true ->
- TD;
- false ->
- find_divisor(N,TD+1)
- end
+ TD*TD > N ->
+ N;
+ true ->
+ case divides(TD,N) of
+ true ->
+ TD;
+ false ->
+ find_divisor(N,TD+1)
+ end
end.
divides(A,B) ->
(B rem A) == 0.
-
diff --git a/erts/emulator/test/scheduler_SUITE.erl b/erts/emulator/test/scheduler_SUITE.erl
index 1f284228db..f18d79d770 100644
--- a/erts/emulator/test/scheduler_SUITE.erl
+++ b/erts/emulator/test/scheduler_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.
@@ -34,9 +34,9 @@
-include_lib("common_test/include/ct.hrl").
%-compile(export_all).
--export([all/0, suite/0,groups/0,init_per_suite/1,
- init_per_group/2,end_per_group/2,
- init_per_testcase/2, end_per_testcase/2, 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]).
-export([equal/1,
few_low/1,
@@ -54,24 +54,24 @@
sct_cmd/1,
sbt_cmd/1,
scheduler_threads/1,
+ scheduler_suspend_basic/1,
scheduler_suspend/1,
dirty_scheduler_threads/1,
- dirty_scheduler_exit/1,
reader_groups/1]).
--define(DEFAULT_TIMEOUT, ?t:minutes(15)).
-
--define(MIN_SCHEDULER_TEST_TIMEOUT, ?t:minutes(1)).
-
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap, {minutes, 15}}].
all() ->
[equal, few_low, many_low, equal_with_part_time_high,
equal_with_part_time_max,
equal_and_high_with_part_time_max, equal_with_high,
- equal_with_high_max, bound_process,
- {group, scheduler_bind}, scheduler_threads, scheduler_suspend,
- dirty_scheduler_threads, dirty_scheduler_exit,
+ equal_with_high_max,
+ bound_process,
+ {group, scheduler_bind}, scheduler_threads,
+ scheduler_suspend_basic, scheduler_suspend,
+ dirty_scheduler_threads,
reader_groups].
groups() ->
@@ -86,12 +86,6 @@ end_per_suite(Config) ->
catch erts_debug:set_internal_state(available_internal_state, false),
Config.
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
-
init_per_testcase(update_cpu_info, Config) ->
case os:find_executable("taskset") of
false ->
@@ -103,15 +97,12 @@ init_per_testcase(Case, Config) when is_list(Config) ->
init_per_tc(Case, Config).
init_per_tc(Case, Config) ->
- Dog = ?t:timetrap(?DEFAULT_TIMEOUT),
process_flag(priority, max),
erlang:display({'------------', ?MODULE, Case, '------------'}),
OkRes = ok,
- [{watchdog, Dog}, {testcase, Case}, {ok_res, OkRes} |Config].
+ [{testcase, Case}, {ok_res, OkRes} |Config].
end_per_testcase(_Case, Config) when is_list(Config) ->
- Dog = ?config(watchdog, Config),
- ?t:timetrap_cancel(Dog),
ok.
-define(ERTS_RUNQ_CHECK_BALANCE_REDS_PER_SCHED, (2000*2000)).
@@ -131,130 +122,130 @@ many_low(Config) when is_list(Config) ->
low_normal_test(Config, 2*active_schedulers(), 1000).
low_normal_test(Config, NW, LW) ->
- ?line Tracer = start_tracer(),
- ?line Low = workers(LW, low),
- ?line Normal = workers(NW, normal),
- ?line Res = do_it(Tracer, Low, Normal, [], []),
- ?line chk_result(Res, LW, NW, 0, 0, true, false, false),
- ?line workers_exit([Low, Normal]),
- ?line ok(Res, Config).
+ Tracer = start_tracer(),
+ Low = workers(LW, low),
+ Normal = workers(NW, normal),
+ Res = do_it(Tracer, Low, Normal, [], []),
+ chk_result(Res, LW, NW, 0, 0, true, false, false),
+ workers_exit([Low, Normal]),
+ ok(Res, Config).
equal_with_part_time_high(Config) when is_list(Config) ->
- ?line NW = 500,
- ?line LW = 500,
- ?line HW = 1,
- ?line Tracer = start_tracer(),
- ?line Normal = workers(NW, normal),
- ?line Low = workers(LW, low),
- ?line High = part_time_workers(HW, high),
- ?line Res = do_it(Tracer, Low, Normal, High, []),
- ?line chk_result(Res, LW, NW, HW, 0, true, true, false),
- ?line workers_exit([Low, Normal, High]),
- ?line ok(Res, Config).
+ NW = 500,
+ LW = 500,
+ HW = 1,
+ Tracer = start_tracer(),
+ Normal = workers(NW, normal),
+ Low = workers(LW, low),
+ High = part_time_workers(HW, high),
+ Res = do_it(Tracer, Low, Normal, High, []),
+ chk_result(Res, LW, NW, HW, 0, true, true, false),
+ workers_exit([Low, Normal, High]),
+ ok(Res, Config).
equal_and_high_with_part_time_max(Config) when is_list(Config) ->
- ?line NW = 500,
- ?line LW = 500,
- ?line HW = 500,
- ?line MW = 1,
- ?line Tracer = start_tracer(),
- ?line Low = workers(LW, low),
- ?line Normal = workers(NW, normal),
- ?line High = workers(HW, high),
- ?line Max = part_time_workers(MW, max),
- ?line Res = do_it(Tracer, Low, Normal, High, Max),
- ?line chk_result(Res, LW, NW, HW, MW, false, true, true),
- ?line workers_exit([Low, Normal, Max]),
- ?line ok(Res, Config).
+ NW = 500,
+ LW = 500,
+ HW = 500,
+ MW = 1,
+ Tracer = start_tracer(),
+ Low = workers(LW, low),
+ Normal = workers(NW, normal),
+ High = workers(HW, high),
+ Max = part_time_workers(MW, max),
+ Res = do_it(Tracer, Low, Normal, High, Max),
+ chk_result(Res, LW, NW, HW, MW, false, true, true),
+ workers_exit([Low, Normal, Max]),
+ ok(Res, Config).
equal_with_part_time_max(Config) when is_list(Config) ->
- ?line NW = 500,
- ?line LW = 500,
- ?line MW = 1,
- ?line Tracer = start_tracer(),
- ?line Low = workers(LW, low),
- ?line Normal = workers(NW, normal),
- ?line Max = part_time_workers(MW, max),
- ?line Res = do_it(Tracer, Low, Normal, [], Max),
- ?line chk_result(Res, LW, NW, 0, MW, true, false, true),
- ?line workers_exit([Low, Normal, Max]),
- ?line ok(Res, Config).
+ NW = 500,
+ LW = 500,
+ MW = 1,
+ Tracer = start_tracer(),
+ Low = workers(LW, low),
+ Normal = workers(NW, normal),
+ Max = part_time_workers(MW, max),
+ Res = do_it(Tracer, Low, Normal, [], Max),
+ chk_result(Res, LW, NW, 0, MW, true, false, true),
+ workers_exit([Low, Normal, Max]),
+ ok(Res, Config).
equal_with_high(Config) when is_list(Config) ->
- ?line NW = 500,
- ?line LW = 500,
- ?line HW = 1,
- ?line Tracer = start_tracer(),
- ?line Low = workers(LW, low),
- ?line Normal = workers(NW, normal),
- ?line High = workers(HW, high),
- ?line Res = do_it(Tracer, Low, Normal, High, []),
- ?line LNExe = case active_schedulers() of
+ NW = 500,
+ LW = 500,
+ HW = 1,
+ Tracer = start_tracer(),
+ Low = workers(LW, low),
+ Normal = workers(NW, normal),
+ High = workers(HW, high),
+ Res = do_it(Tracer, Low, Normal, High, []),
+ LNExe = case active_schedulers() of
S when S =< HW -> false;
_ -> true
end,
- ?line chk_result(Res, LW, NW, HW, 0, LNExe, true, false),
- ?line workers_exit([Low, Normal, High]),
- ?line ok(Res, Config).
+ chk_result(Res, LW, NW, HW, 0, LNExe, true, false),
+ workers_exit([Low, Normal, High]),
+ ok(Res, Config).
equal_with_high_max(Config) when is_list(Config) ->
- ?line NW = 500,
- ?line LW = 500,
- ?line HW = 1,
- ?line MW = 1,
- ?line Tracer = start_tracer(),
- ?line Normal = workers(NW, normal),
- ?line Low = workers(LW, low),
- ?line High = workers(HW, high),
- ?line Max = workers(MW, max),
- ?line Res = do_it(Tracer, Low, Normal, High, Max),
- ?line {LNExe, HExe} = case active_schedulers() of
+ NW = 500,
+ LW = 500,
+ HW = 1,
+ MW = 1,
+ Tracer = start_tracer(),
+ Normal = workers(NW, normal),
+ Low = workers(LW, low),
+ High = workers(HW, high),
+ Max = workers(MW, max),
+ Res = do_it(Tracer, Low, Normal, High, Max),
+ {LNExe, HExe} = case active_schedulers() of
S when S =< MW -> {false, false};
S when S =< (MW + HW) -> {false, true};
_ -> {true, true}
end,
- ?line chk_result(Res, LW, NW, HW, MW, LNExe, HExe, true),
- ?line workers_exit([Low, Normal, Max]),
- ?line ok(Res, Config).
+ chk_result(Res, LW, NW, HW, MW, LNExe, HExe, true),
+ workers_exit([Low, Normal, Max]),
+ ok(Res, Config).
bound_process(Config) when is_list(Config) ->
case erlang:system_info(run_queues) == erlang:system_info(schedulers) of
- true ->
- ?line NStartBase = 20000,
- ?line NStart = case {erlang:system_info(debug_compiled),
- erlang:system_info(lock_checking)} of
- {true, true} -> NStartBase div 100;
- {_, true} -> NStartBase div 10;
- _ -> NStartBase
- end,
- ?line MStart = 100,
- ?line Seq = lists:seq(1, 100),
- ?line Tester = self(),
- ?line Procs = lists:map(
- fun (N) when N rem 2 == 0 ->
- spawn_opt(fun () ->
- bound_loop(NStart,
- NStart,
- MStart,
- 1),
- Tester ! {self(), done}
- end,
- [{scheduler, 1}, link]);
- (_N) ->
- spawn_link(fun () ->
- bound_loop(NStart,
- NStart,
- MStart,
- false),
- Tester ! {self(), done}
- end)
- end,
- Seq),
- ?line lists:foreach(fun (P) -> receive {P, done} -> ok end end,
- Procs),
- ?line ok;
- false ->
- {skipped, "Functionality not supported"}
+ true ->
+ NStartBase = 20000,
+ NStart = case {erlang:system_info(debug_compiled),
+ erlang:system_info(lock_checking)} of
+ {true, true} -> NStartBase div 100;
+ {_, true} -> NStartBase div 10;
+ _ -> NStartBase
+ end,
+ MStart = 100,
+ Seq = lists:seq(1, 100),
+ Tester = self(),
+ Procs = lists:map(
+ fun (N) when N rem 2 == 0 ->
+ spawn_opt(fun () ->
+ bound_loop(NStart,
+ NStart,
+ MStart,
+ 1),
+ Tester ! {self(), done}
+ end,
+ [{scheduler, 1}, link]);
+ (_N) ->
+ spawn_link(fun () ->
+ bound_loop(NStart,
+ NStart,
+ MStart,
+ false),
+ Tester ! {self(), done}
+ end)
+ end,
+ Seq),
+ lists:foreach(fun (P) -> receive {P, done} -> ok end end,
+ Procs),
+ ok;
+ false ->
+ {skipped, "Functionality not supported"}
end.
bound_loop(_, 0, 0, _) ->
@@ -488,59 +479,59 @@ bound_loop(NS, N, M, Sched) ->
":L30-31t0-1c15n3p0").
-define(TOPOLOGY_F_TERM,
- [{processor,[{node,[{core,[{thread,{logical,0}},
- {thread,{logical,1}}]},
- {core,[{thread,{logical,2}},
- {thread,{logical,3}}]},
- {core,[{thread,{logical,4}},
- {thread,{logical,5}}]},
- {core,[{thread,{logical,6}},
- {thread,{logical,7}}]}]},
- {node,[{core,[{thread,{logical,8}},
- {thread,{logical,9}}]},
- {core,[{thread,{logical,10}},
- {thread,{logical,11}}]},
- {core,[{thread,{logical,12}},
- {thread,{logical,13}}]},
- {core,[{thread,{logical,14}},
- {thread,{logical,15}}]}]},
- {node,[{core,[{thread,{logical,16}},
- {thread,{logical,17}}]},
- {core,[{thread,{logical,18}},
- {thread,{logical,19}}]},
- {core,[{thread,{logical,20}},
- {thread,{logical,21}}]},
- {core,[{thread,{logical,22}},
- {thread,{logical,23}}]}]},
- {node,[{core,[{thread,{logical,24}},
- {thread,{logical,25}}]},
- {core,[{thread,{logical,26}},
- {thread,{logical,27}}]},
- {core,[{thread,{logical,28}},
- {thread,{logical,29}}]},
- {core,[{thread,{logical,30}},
- {thread,{logical,31}}]}]}]}]).
+ [{processor,[{node,[{core,[{thread,{logical,0}},
+ {thread,{logical,1}}]},
+ {core,[{thread,{logical,2}},
+ {thread,{logical,3}}]},
+ {core,[{thread,{logical,4}},
+ {thread,{logical,5}}]},
+ {core,[{thread,{logical,6}},
+ {thread,{logical,7}}]}]},
+ {node,[{core,[{thread,{logical,8}},
+ {thread,{logical,9}}]},
+ {core,[{thread,{logical,10}},
+ {thread,{logical,11}}]},
+ {core,[{thread,{logical,12}},
+ {thread,{logical,13}}]},
+ {core,[{thread,{logical,14}},
+ {thread,{logical,15}}]}]},
+ {node,[{core,[{thread,{logical,16}},
+ {thread,{logical,17}}]},
+ {core,[{thread,{logical,18}},
+ {thread,{logical,19}}]},
+ {core,[{thread,{logical,20}},
+ {thread,{logical,21}}]},
+ {core,[{thread,{logical,22}},
+ {thread,{logical,23}}]}]},
+ {node,[{core,[{thread,{logical,24}},
+ {thread,{logical,25}}]},
+ {core,[{thread,{logical,26}},
+ {thread,{logical,27}}]},
+ {core,[{thread,{logical,28}},
+ {thread,{logical,29}}]},
+ {core,[{thread,{logical,30}},
+ {thread,{logical,31}}]}]}]}]).
bindings(Node, BindType) ->
Parent = self(),
Ref = make_ref(),
Pid = spawn_link(Node,
- fun () ->
- enable_internal_state(),
- Res = (catch erts_debug:get_internal_state(
- {fake_scheduler_bindings,
- BindType})),
- Parent ! {Ref, Res}
- end),
+ fun () ->
+ enable_internal_state(),
+ Res = (catch erts_debug:get_internal_state(
+ {fake_scheduler_bindings,
+ BindType})),
+ Parent ! {Ref, Res}
+ end),
receive
- {Ref, Res} ->
- ?t:format("~p: ~p~n", [BindType, Res]),
- unlink(Pid),
- Res
+ {Ref, Res} ->
+ io:format("~p: ~p~n", [BindType, Res]),
+ unlink(Pid),
+ Res
end.
scheduler_bind_types(Config) when is_list(Config) ->
- ?line OldRelFlags = clear_erl_rel_flags(),
+ OldRelFlags = clear_erl_rel_flags(),
try
scheduler_bind_types_test(Config,
?TOPOLOGY_A_TERM,
@@ -569,267 +560,267 @@ scheduler_bind_types(Config) when is_list(Config) ->
after
restore_erl_rel_flags(OldRelFlags)
end,
- ?line ok.
+ ok.
scheduler_bind_types_test(Config, Topology, CmdLine, TermLetter) ->
- ?line ?t:format("Testing (~p): ~p~n", [TermLetter, Topology]),
- ?line {ok, Node0} = start_node(Config),
- ?line _ = rpc:call(Node0, erlang, system_flag, [cpu_topology, Topology]),
- ?line cmp(Topology, rpc:call(Node0, erlang, system_info, [cpu_topology])),
- ?line check_bind_types(Node0, TermLetter),
- ?line stop_node(Node0),
- ?line {ok, Node1} = start_node(Config, CmdLine),
- ?line cmp(Topology, rpc:call(Node1, erlang, system_info, [cpu_topology])),
- ?line check_bind_types(Node1, TermLetter),
- ?line stop_node(Node1).
+ io:format("Testing (~p): ~p~n", [TermLetter, Topology]),
+ {ok, Node0} = start_node(Config),
+ _ = rpc:call(Node0, erlang, system_flag, [cpu_topology, Topology]),
+ cmp(Topology, rpc:call(Node0, erlang, system_info, [cpu_topology])),
+ check_bind_types(Node0, TermLetter),
+ stop_node(Node0),
+ {ok, Node1} = start_node(Config, CmdLine),
+ cmp(Topology, rpc:call(Node1, erlang, system_info, [cpu_topology])),
+ check_bind_types(Node1, TermLetter),
+ stop_node(Node1).
check_bind_types(Node, a) ->
- ?line {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}
- = bindings(Node, no_spread),
- ?line {0,2,4,6,8,10,12,14,1,3,5,7,9,11,13,15}
- = bindings(Node, thread_spread),
- ?line {0,4,8,12,2,6,10,14,1,5,9,13,3,7,11,15}
- = bindings(Node, processor_spread),
- ?line {0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15}
- = bindings(Node, spread),
- ?line {0,2,4,6,1,3,5,7,8,10,12,14,9,11,13,15}
- = bindings(Node, no_node_thread_spread),
- ?line {0,4,2,6,1,5,3,7,8,12,10,14,9,13,11,15}
- = bindings(Node, no_node_processor_spread),
- ?line {0,4,2,6,8,12,10,14,1,5,3,7,9,13,11,15}
- = bindings(Node, thread_no_node_processor_spread),
- ?line {0,4,2,6,8,12,10,14,1,5,3,7,9,13,11,15}
- = bindings(Node, default_bind),
- ?line ok;
+ {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}
+ = bindings(Node, no_spread),
+ {0,2,4,6,8,10,12,14,1,3,5,7,9,11,13,15}
+ = bindings(Node, thread_spread),
+ {0,4,8,12,2,6,10,14,1,5,9,13,3,7,11,15}
+ = bindings(Node, processor_spread),
+ {0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15}
+ = bindings(Node, spread),
+ {0,2,4,6,1,3,5,7,8,10,12,14,9,11,13,15}
+ = bindings(Node, no_node_thread_spread),
+ {0,4,2,6,1,5,3,7,8,12,10,14,9,13,11,15}
+ = bindings(Node, no_node_processor_spread),
+ {0,4,2,6,8,12,10,14,1,5,3,7,9,13,11,15}
+ = bindings(Node, thread_no_node_processor_spread),
+ {0,4,2,6,8,12,10,14,1,5,3,7,9,13,11,15}
+ = bindings(Node, default_bind),
+ ok;
check_bind_types(Node, b) ->
- ?line {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}
- = bindings(Node, no_spread),
- ?line {0,2,4,6,8,10,12,14,1,3,5,7,9,11,13,15}
- = bindings(Node, thread_spread),
- ?line {0,8,2,10,4,12,6,14,1,9,3,11,5,13,7,15}
- = bindings(Node, processor_spread),
- ?line {0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15}
- = bindings(Node, spread),
- ?line {0,2,1,3,4,6,5,7,8,10,9,11,12,14,13,15}
- = bindings(Node, no_node_thread_spread),
- ?line {0,2,1,3,4,6,5,7,8,10,9,11,12,14,13,15}
- = bindings(Node, no_node_processor_spread),
- ?line {0,2,4,6,8,10,12,14,1,3,5,7,9,11,13,15}
- = bindings(Node, thread_no_node_processor_spread),
- ?line {0,2,4,6,8,10,12,14,1,3,5,7,9,11,13,15}
- = bindings(Node, default_bind),
- ?line ok;
+ {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}
+ = bindings(Node, no_spread),
+ {0,2,4,6,8,10,12,14,1,3,5,7,9,11,13,15}
+ = bindings(Node, thread_spread),
+ {0,8,2,10,4,12,6,14,1,9,3,11,5,13,7,15}
+ = bindings(Node, processor_spread),
+ {0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15}
+ = bindings(Node, spread),
+ {0,2,1,3,4,6,5,7,8,10,9,11,12,14,13,15}
+ = bindings(Node, no_node_thread_spread),
+ {0,2,1,3,4,6,5,7,8,10,9,11,12,14,13,15}
+ = bindings(Node, no_node_processor_spread),
+ {0,2,4,6,8,10,12,14,1,3,5,7,9,11,13,15}
+ = bindings(Node, thread_no_node_processor_spread),
+ {0,2,4,6,8,10,12,14,1,3,5,7,9,11,13,15}
+ = bindings(Node, default_bind),
+ ok;
check_bind_types(Node, c) ->
- ?line {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,26,27,28,29,30,31} = bindings(Node, no_spread),
- ?line {0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,1,3,5,7,9,11,13,15,
- 17,19,21,23,25,27,29,31} = bindings(Node, thread_spread),
- ?line {0,4,8,16,20,24,2,6,10,18,22,26,12,28,14,30,1,5,9,17,21,25,
- 3,7,11,19,23,27,13,29,15,31} = bindings(Node, processor_spread),
- ?line {0,8,16,24,4,20,12,28,2,10,18,26,6,22,14,30,1,9,17,25,5,21,13,29,3,11,
- 19,27,7,23,15,31} = bindings(Node, spread),
- ?line {0,2,4,6,1,3,5,7,8,10,9,11,12,14,13,15,16,18,20,22,17,19,21,23,24,26,
- 25,27,28,30,29,31} = bindings(Node, no_node_thread_spread),
- ?line {0,4,2,6,1,5,3,7,8,10,9,11,12,14,13,15,16,20,18,22,17,21,19,23,24,26,
- 25,27,28,30,29,31} = bindings(Node, no_node_processor_spread),
- ?line {0,4,2,6,8,10,12,14,16,20,18,22,24,26,28,30,1,5,3,7,9,11,13,15,17,21,
- 19,23,25,27,29,31} = bindings(Node, thread_no_node_processor_spread),
- ?line {0,4,2,6,8,10,12,14,16,20,18,22,24,26,28,30,1,5,3,7,9,11,13,15,17,21,
- 19,23,25,27,29,31} = bindings(Node, default_bind),
- ?line ok;
+ {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,26,27,28,29,30,31} = bindings(Node, no_spread),
+ {0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,1,3,5,7,9,11,13,15,
+ 17,19,21,23,25,27,29,31} = bindings(Node, thread_spread),
+ {0,4,8,16,20,24,2,6,10,18,22,26,12,28,14,30,1,5,9,17,21,25,
+ 3,7,11,19,23,27,13,29,15,31} = bindings(Node, processor_spread),
+ {0,8,16,24,4,20,12,28,2,10,18,26,6,22,14,30,1,9,17,25,5,21,13,29,3,11,
+ 19,27,7,23,15,31} = bindings(Node, spread),
+ {0,2,4,6,1,3,5,7,8,10,9,11,12,14,13,15,16,18,20,22,17,19,21,23,24,26,
+ 25,27,28,30,29,31} = bindings(Node, no_node_thread_spread),
+ {0,4,2,6,1,5,3,7,8,10,9,11,12,14,13,15,16,20,18,22,17,21,19,23,24,26,
+ 25,27,28,30,29,31} = bindings(Node, no_node_processor_spread),
+ {0,4,2,6,8,10,12,14,16,20,18,22,24,26,28,30,1,5,3,7,9,11,13,15,17,21,
+ 19,23,25,27,29,31} = bindings(Node, thread_no_node_processor_spread),
+ {0,4,2,6,8,10,12,14,16,20,18,22,24,26,28,30,1,5,3,7,9,11,13,15,17,21,
+ 19,23,25,27,29,31} = bindings(Node, default_bind),
+ ok;
check_bind_types(Node, d) ->
- ?line {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,26,27,28,29,30,31} = bindings(Node, no_spread),
- ?line {0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,1,3,5,7,9,11,13,15,
- 17,19,21,23,25,27,29,31} = bindings(Node, thread_spread),
- ?line {0,8,12,16,24,28,2,10,14,18,26,30,4,20,6,22,1,9,13,17,25,29,3,11,15,
- 19,27,31,5,21,7,23} = bindings(Node, processor_spread),
- ?line {0,8,16,24,12,28,4,20,2,10,18,26,14,30,6,22,1,9,17,25,13,29,5,21,3,11,
- 19,27,15,31,7,23} = bindings(Node, spread),
- ?line {0,2,1,3,4,6,5,7,8,10,12,14,9,11,13,15,16,18,17,19,20,22,21,23,24,26,
- 28,30,25,27,29,31} = bindings(Node, no_node_thread_spread),
- ?line {0,2,1,3,4,6,5,7,8,12,10,14,9,13,11,15,16,18,17,19,20,22,21,23,24,28,
- 26,30,25,29,27,31} = bindings(Node, no_node_processor_spread),
- ?line {0,2,4,6,8,12,10,14,16,18,20,22,24,28,26,30,1,3,5,7,9,13,11,15,17,19,
- 21,23,25,29,27,31} = bindings(Node, thread_no_node_processor_spread),
- ?line {0,2,4,6,8,12,10,14,16,18,20,22,24,28,26,30,1,3,5,7,9,13,11,15,17,19,
- 21,23,25,29,27,31} = bindings(Node, default_bind),
- ?line ok;
+ {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,26,27,28,29,30,31} = bindings(Node, no_spread),
+ {0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,1,3,5,7,9,11,13,15,
+ 17,19,21,23,25,27,29,31} = bindings(Node, thread_spread),
+ {0,8,12,16,24,28,2,10,14,18,26,30,4,20,6,22,1,9,13,17,25,29,3,11,15,
+ 19,27,31,5,21,7,23} = bindings(Node, processor_spread),
+ {0,8,16,24,12,28,4,20,2,10,18,26,14,30,6,22,1,9,17,25,13,29,5,21,3,11,
+ 19,27,15,31,7,23} = bindings(Node, spread),
+ {0,2,1,3,4,6,5,7,8,10,12,14,9,11,13,15,16,18,17,19,20,22,21,23,24,26,
+ 28,30,25,27,29,31} = bindings(Node, no_node_thread_spread),
+ {0,2,1,3,4,6,5,7,8,12,10,14,9,13,11,15,16,18,17,19,20,22,21,23,24,28,
+ 26,30,25,29,27,31} = bindings(Node, no_node_processor_spread),
+ {0,2,4,6,8,12,10,14,16,18,20,22,24,28,26,30,1,3,5,7,9,13,11,15,17,19,
+ 21,23,25,29,27,31} = bindings(Node, thread_no_node_processor_spread),
+ {0,2,4,6,8,12,10,14,16,18,20,22,24,28,26,30,1,3,5,7,9,13,11,15,17,19,
+ 21,23,25,29,27,31} = bindings(Node, default_bind),
+ ok;
check_bind_types(Node, e) ->
- ?line {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}
- = bindings(Node, no_spread),
- ?line {0,2,4,6,8,10,12,14,1,3,5,7,9,11,13,15}
- = bindings(Node, thread_spread),
- ?line {0,8,2,10,4,12,6,14,1,9,3,11,5,13,7,15}
- = bindings(Node, processor_spread),
- ?line {0,8,2,10,4,12,6,14,1,9,3,11,5,13,7,15}
- = bindings(Node, spread),
- ?line {0,2,4,6,1,3,5,7,8,10,12,14,9,11,13,15}
- = bindings(Node, no_node_thread_spread),
- ?line {0,2,4,6,1,3,5,7,8,10,12,14,9,11,13,15}
- = bindings(Node, no_node_processor_spread),
- ?line {0,2,4,6,8,10,12,14,1,3,5,7,9,11,13,15}
- = bindings(Node, thread_no_node_processor_spread),
- ?line {0,2,4,6,8,10,12,14,1,3,5,7,9,11,13,15}
- = bindings(Node, default_bind),
- ?line ok;
+ {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}
+ = bindings(Node, no_spread),
+ {0,2,4,6,8,10,12,14,1,3,5,7,9,11,13,15}
+ = bindings(Node, thread_spread),
+ {0,8,2,10,4,12,6,14,1,9,3,11,5,13,7,15}
+ = bindings(Node, processor_spread),
+ {0,8,2,10,4,12,6,14,1,9,3,11,5,13,7,15}
+ = bindings(Node, spread),
+ {0,2,4,6,1,3,5,7,8,10,12,14,9,11,13,15}
+ = bindings(Node, no_node_thread_spread),
+ {0,2,4,6,1,3,5,7,8,10,12,14,9,11,13,15}
+ = bindings(Node, no_node_processor_spread),
+ {0,2,4,6,8,10,12,14,1,3,5,7,9,11,13,15}
+ = bindings(Node, thread_no_node_processor_spread),
+ {0,2,4,6,8,10,12,14,1,3,5,7,9,11,13,15}
+ = bindings(Node, default_bind),
+ ok;
check_bind_types(Node, f) ->
- ?line {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,26,27,28,29,30,31} = bindings(Node, no_spread),
- ?line {0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,1,3,5,7,9,11,13,15,
- 17,19,21,23,25,27,29,31} = bindings(Node, thread_spread),
- ?line {0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,1,3,5,7,9,11,13,
- 15,17,19,21,23,25,27,29,31} = bindings(Node, processor_spread),
- ?line {0,8,16,24,2,10,18,26,4,12,20,28,6,14,22,30,1,9,17,25,3,11,19,27,5,13,
- 21,29,7,15,23,31} = bindings(Node, spread),
- ?line {0,2,4,6,1,3,5,7,8,10,12,14,9,11,13,15,16,18,20,22,17,19,21,23,24,26,
- 28,30,25,27,29,31} = bindings(Node, no_node_thread_spread),
- ?line {0,2,4,6,1,3,5,7,8,10,12,14,9,11,13,15,16,18,20,22,17,19,21,23,24,26,
- 28,30,25,27,29,31} = bindings(Node, no_node_processor_spread),
- ?line {0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,1,3,5,7,9,11,13,15,17,19,
- 21,23,25,27,29,31} = bindings(Node, thread_no_node_processor_spread),
- ?line {0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,1,3,5,7,9,11,13,15,17,19,
- 21,23,25,27,29,31} = bindings(Node, default_bind),
- ?line ok;
+ {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,26,27,28,29,30,31} = bindings(Node, no_spread),
+ {0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,1,3,5,7,9,11,13,15,
+ 17,19,21,23,25,27,29,31} = bindings(Node, thread_spread),
+ {0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,1,3,5,7,9,11,13,
+ 15,17,19,21,23,25,27,29,31} = bindings(Node, processor_spread),
+ {0,8,16,24,2,10,18,26,4,12,20,28,6,14,22,30,1,9,17,25,3,11,19,27,5,13,
+ 21,29,7,15,23,31} = bindings(Node, spread),
+ {0,2,4,6,1,3,5,7,8,10,12,14,9,11,13,15,16,18,20,22,17,19,21,23,24,26,
+ 28,30,25,27,29,31} = bindings(Node, no_node_thread_spread),
+ {0,2,4,6,1,3,5,7,8,10,12,14,9,11,13,15,16,18,20,22,17,19,21,23,24,26,
+ 28,30,25,27,29,31} = bindings(Node, no_node_processor_spread),
+ {0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,1,3,5,7,9,11,13,15,17,19,
+ 21,23,25,27,29,31} = bindings(Node, thread_no_node_processor_spread),
+ {0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,1,3,5,7,9,11,13,15,17,19,
+ 21,23,25,27,29,31} = bindings(Node, default_bind),
+ ok;
check_bind_types(Node, _) ->
- ?line bindings(Node, no_spread),
- ?line bindings(Node, thread_spread),
- ?line bindings(Node, processor_spread),
- ?line bindings(Node, spread),
- ?line bindings(Node, no_node_thread_spread),
- ?line bindings(Node, no_node_processor_spread),
- ?line bindings(Node, thread_no_node_processor_spread),
- ?line bindings(Node, default_bind),
- ?line ok.
+ bindings(Node, no_spread),
+ bindings(Node, thread_spread),
+ bindings(Node, processor_spread),
+ bindings(Node, spread),
+ bindings(Node, no_node_thread_spread),
+ bindings(Node, no_node_processor_spread),
+ bindings(Node, thread_no_node_processor_spread),
+ bindings(Node, default_bind),
+ ok.
cpu_topology(Config) when is_list(Config) ->
- ?line OldRelFlags = clear_erl_rel_flags(),
+ OldRelFlags = clear_erl_rel_flags(),
try
- ?line cpu_topology_test(
- Config,
- [{node,[{processor,[{core,{logical,0}},
- {core,{logical,1}}]}]},
- {processor,[{node,[{core,{logical,2}},
- {core,{logical,3}}]}]},
- {node,[{processor,[{core,{logical,4}},
- {core,{logical,5}}]}]},
- {processor,[{node,[{core,{logical,6}},
- {core,{logical,7}}]}]}],
- "+sct "
- "L0-1c0-1p0n0"
- ":L2-3c0-1n1p1"
- ":L4-5c0-1p2n2"
- ":L6-7c0-1n3p3"),
- ?line cpu_topology_test(
- Config,
- [{node,[{processor,[{core,{logical,0}},
- {core,{logical,1}}]},
- {processor,[{core,{logical,2}},
- {core,{logical,3}}]}]},
- {processor,[{node,[{core,{logical,4}},
- {core,{logical,5}}]},
- {node,[{core,{logical,6}},
- {core,{logical,7}}]}]},
- {node,[{processor,[{core,{logical,8}},
- {core,{logical,9}}]},
- {processor,[{core,{logical,10}},
- {core,{logical,11}}]}]},
- {processor,[{node,[{core,{logical,12}},
- {core,{logical,13}}]},
- {node,[{core,{logical,14}},
- {core,{logical,15}}]}]}],
- "+sct "
- "L0-1c0-1p0n0"
- ":L2-3c0-1p1n0"
- ":L4-5c0-1n1p2"
- ":L6-7c2-3n2p2"
- ":L8-9c0-1p3n3"
- ":L10-11c0-1p4n3"
- ":L12-13c0-1n4p5"
- ":L14-15c2-3n5p5"),
- ?line cpu_topology_test(
- Config,
- [{node,[{processor,[{core,{logical,0}},
- {core,{logical,1}}]}]},
- {processor,[{node,[{core,{logical,2}},
- {core,{logical,3}}]}]},
- {processor,[{node,[{core,{logical,4}},
- {core,{logical,5}}]}]},
- {node,[{processor,[{core,{logical,6}},
- {core,{logical,7}}]}]},
- {node,[{processor,[{core,{logical,8}},
- {core,{logical,9}}]}]},
- {processor,[{node,[{core,{logical,10}},
- {core,{logical,11}}]}]}],
- "+sct "
- "L0-1c0-1p0n0"
- ":L2-3c0-1n1p1"
- ":L4-5c0-1n2p2"
- ":L6-7c0-1p3n3"
- ":L8-9c0-1p4n4"
- ":L10-11c0-1n5p5")
+ cpu_topology_test(
+ Config,
+ [{node,[{processor,[{core,{logical,0}},
+ {core,{logical,1}}]}]},
+ {processor,[{node,[{core,{logical,2}},
+ {core,{logical,3}}]}]},
+ {node,[{processor,[{core,{logical,4}},
+ {core,{logical,5}}]}]},
+ {processor,[{node,[{core,{logical,6}},
+ {core,{logical,7}}]}]}],
+ "+sct "
+ "L0-1c0-1p0n0"
+ ":L2-3c0-1n1p1"
+ ":L4-5c0-1p2n2"
+ ":L6-7c0-1n3p3"),
+ cpu_topology_test(
+ Config,
+ [{node,[{processor,[{core,{logical,0}},
+ {core,{logical,1}}]},
+ {processor,[{core,{logical,2}},
+ {core,{logical,3}}]}]},
+ {processor,[{node,[{core,{logical,4}},
+ {core,{logical,5}}]},
+ {node,[{core,{logical,6}},
+ {core,{logical,7}}]}]},
+ {node,[{processor,[{core,{logical,8}},
+ {core,{logical,9}}]},
+ {processor,[{core,{logical,10}},
+ {core,{logical,11}}]}]},
+ {processor,[{node,[{core,{logical,12}},
+ {core,{logical,13}}]},
+ {node,[{core,{logical,14}},
+ {core,{logical,15}}]}]}],
+ "+sct "
+ "L0-1c0-1p0n0"
+ ":L2-3c0-1p1n0"
+ ":L4-5c0-1n1p2"
+ ":L6-7c2-3n2p2"
+ ":L8-9c0-1p3n3"
+ ":L10-11c0-1p4n3"
+ ":L12-13c0-1n4p5"
+ ":L14-15c2-3n5p5"),
+ cpu_topology_test(
+ Config,
+ [{node,[{processor,[{core,{logical,0}},
+ {core,{logical,1}}]}]},
+ {processor,[{node,[{core,{logical,2}},
+ {core,{logical,3}}]}]},
+ {processor,[{node,[{core,{logical,4}},
+ {core,{logical,5}}]}]},
+ {node,[{processor,[{core,{logical,6}},
+ {core,{logical,7}}]}]},
+ {node,[{processor,[{core,{logical,8}},
+ {core,{logical,9}}]}]},
+ {processor,[{node,[{core,{logical,10}},
+ {core,{logical,11}}]}]}],
+ "+sct "
+ "L0-1c0-1p0n0"
+ ":L2-3c0-1n1p1"
+ ":L4-5c0-1n2p2"
+ ":L6-7c0-1p3n3"
+ ":L8-9c0-1p4n4"
+ ":L10-11c0-1n5p5")
after
- restore_erl_rel_flags(OldRelFlags)
+ restore_erl_rel_flags(OldRelFlags)
end,
- ?line ok.
+ ok.
cpu_topology_test(Config, Topology, Cmd) ->
- ?line ?t:format("Testing~n ~p~n ~p~n", [Topology, Cmd]),
- ?line cpu_topology_bif_test(Config, Topology),
- ?line cpu_topology_cmdline_test(Config, Topology, Cmd),
- ?line ok.
+ io:format("Testing~n ~p~n ~p~n", [Topology, Cmd]),
+ cpu_topology_bif_test(Config, Topology),
+ cpu_topology_cmdline_test(Config, Topology, Cmd),
+ ok.
cpu_topology_bif_test(_Config, false) ->
- ?line ok;
+ ok;
cpu_topology_bif_test(Config, Topology) ->
- ?line {ok, Node} = start_node(Config),
- ?line _ = rpc:call(Node, erlang, system_flag, [cpu_topology, Topology]),
- ?line cmp(Topology, rpc:call(Node, erlang, system_info, [cpu_topology])),
- ?line stop_node(Node),
- ?line ok.
+ {ok, Node} = start_node(Config),
+ _ = rpc:call(Node, erlang, system_flag, [cpu_topology, Topology]),
+ cmp(Topology, rpc:call(Node, erlang, system_info, [cpu_topology])),
+ stop_node(Node),
+ ok.
cpu_topology_cmdline_test(_Config, _Topology, false) ->
- ?line ok;
+ ok;
cpu_topology_cmdline_test(Config, Topology, Cmd) ->
- ?line {ok, Node} = start_node(Config, Cmd),
- ?line cmp(Topology, rpc:call(Node, erlang, system_info, [cpu_topology])),
- ?line stop_node(Node),
- ?line ok.
+ {ok, Node} = start_node(Config, Cmd),
+ cmp(Topology, rpc:call(Node, erlang, system_info, [cpu_topology])),
+ stop_node(Node),
+ ok.
update_cpu_info(Config) when is_list(Config) ->
- ?line OldOnline = erlang:system_info(schedulers_online),
- ?line OldAff = get_affinity_mask(),
- ?line ?t:format("START - Affinity mask: ~p - Schedulers online: ~p - Scheduler bindings: ~p~n",
+ OldOnline = erlang:system_info(schedulers_online),
+ OldAff = get_affinity_mask(),
+ io:format("START - Affinity mask: ~p - Schedulers online: ~p - Scheduler bindings: ~p~n",
[OldAff, OldOnline, erlang:system_info(scheduler_bindings)]),
- ?line case {erlang:system_info(logical_processors_available), OldAff} of
+ case {erlang:system_info(logical_processors_available), OldAff} of
{Avail, _} when Avail == unknown; OldAff == unknown ->
%% Nothing much to test; just a smoke test
case erlang:system_info(update_cpu_info) of
- unchanged -> ?line ok;
- changed -> ?line ok
+ unchanged -> ok;
+ changed -> ok
end;
_ ->
try
- ?line adjust_schedulers_online(),
+ adjust_schedulers_online(),
case erlang:system_info(schedulers_online) of
1 ->
%% Nothing much to test; just a smoke test
- ?line ok;
+ ok;
Onln0 ->
%% unset least significant bit
- ?line Aff = (OldAff band (OldAff - 1)),
- ?line set_affinity_mask(Aff),
- ?line Onln1 = Onln0 - 1,
- ?line case adjust_schedulers_online() of
+ Aff = (OldAff band (OldAff - 1)),
+ set_affinity_mask(Aff),
+ Onln1 = Onln0 - 1,
+ case adjust_schedulers_online() of
{Onln0, Onln1} ->
- ?line Onln1 = erlang:system_info(schedulers_online),
- ?line receive after 500 -> ok end,
- ?line ?t:format("TEST - Affinity mask: ~p - Schedulers online: ~p - Scheduler bindings: ~p~n",
+ Onln1 = erlang:system_info(schedulers_online),
+ receive after 500 -> ok end,
+ io:format("TEST - Affinity mask: ~p - Schedulers online: ~p - Scheduler bindings: ~p~n",
[Aff, Onln1, erlang:system_info(scheduler_bindings)]),
- ?line unchanged = adjust_schedulers_online(),
- ?line ok;
+ unchanged = adjust_schedulers_online(),
+ ok;
Fail ->
- ?line ?t:fail(Fail)
+ ct:fail(Fail)
end
end
after
@@ -837,7 +828,7 @@ update_cpu_info(Config) when is_list(Config) ->
adjust_schedulers_online(),
erlang:system_flag(schedulers_online, OldOnline),
receive after 500 -> ok end,
- ?t:format("END - Affinity mask: ~p - Schedulers online: ~p - Scheduler bindings: ~p~n",
+ io:format("END - Affinity mask: ~p - Schedulers online: ~p - Scheduler bindings: ~p~n",
[get_affinity_mask(),
erlang:system_info(schedulers_online),
erlang:system_info(scheduler_bindings)])
@@ -884,7 +875,7 @@ get_affinity_mask(_Port, _Status, Affinity) ->
Affinity.
get_affinity_mask() ->
- case ?t:os_type() of
+ case os:type() of
{unix, linux} ->
case catch open_port({spawn, "taskset -p " ++ os:getpid()},
[exit_status]) of
@@ -928,21 +919,21 @@ set_affinity_mask(Mask) ->
end.
sct_cmd(Config) when is_list(Config) ->
- ?line Topology = ?TOPOLOGY_A_TERM,
- ?line OldRelFlags = clear_erl_rel_flags(),
+ Topology = ?TOPOLOGY_A_TERM,
+ OldRelFlags = clear_erl_rel_flags(),
try
- ?line {ok, Node} = start_node(Config, ?TOPOLOGY_A_CMD),
- ?line cmp(Topology,
+ {ok, Node} = start_node(Config, ?TOPOLOGY_A_CMD),
+ cmp(Topology,
rpc:call(Node, erlang, system_info, [cpu_topology])),
- ?line cmp(Topology,
+ cmp(Topology,
rpc:call(Node, erlang, system_flag, [cpu_topology, Topology])),
- ?line cmp(Topology,
+ cmp(Topology,
rpc:call(Node, erlang, system_info, [cpu_topology])),
- ?line stop_node(Node)
+ stop_node(Node)
after
restore_erl_rel_flags(OldRelFlags)
end,
- ?line ok.
+ ok.
-define(BIND_TYPES,
[{"u", unbound},
@@ -966,7 +957,7 @@ sbt_cmd(Config) when is_list(Config) ->
end,
case Bind of
notsup ->
- ?line {skipped, "Binding of schedulers not supported"};
+ {skipped, "Binding of schedulers not supported"};
go_for_it ->
CpuTCmd = case erlang:system_info({cpu_topology,detected}) of
undefined ->
@@ -989,14 +980,14 @@ sbt_cmd(Config) when is_list(Config) ->
end,
case CpuTCmd of
false ->
- ?line {skipped, "Don't know how to create cpu topology"};
+ {skipped, "Don't know how to create cpu topology"};
_ ->
case erlang:system_info(logical_processors) of
LP when is_integer(LP) ->
OldRelFlags = clear_erl_rel_flags(),
try
lists:foreach(fun ({ClBt, Bt}) ->
- ?line sbt_test(Config,
+ sbt_test(Config,
CpuTCmd,
ClBt,
Bt,
@@ -1006,44 +997,44 @@ sbt_cmd(Config) when is_list(Config) ->
after
restore_erl_rel_flags(OldRelFlags)
end,
- ?line ok;
+ ok;
_ ->
- ?line {skipped,
+ {skipped,
"Don't know the amount of logical processors"}
end
end
end.
sbt_test(Config, CpuTCmd, ClBt, Bt, LP) ->
- ?line ?t:format("Testing +sbt ~s (~p)~n", [ClBt, Bt]),
- ?line LPS = integer_to_list(LP),
- ?line Cmd = CpuTCmd++" +sbt "++ClBt++" +S"++LPS++":"++LPS,
- ?line {ok, Node} = start_node(Config, Cmd),
- ?line Bt = rpc:call(Node,
+ io:format("Testing +sbt ~s (~p)~n", [ClBt, Bt]),
+ LPS = integer_to_list(LP),
+ Cmd = CpuTCmd++" +sbt "++ClBt++" +S"++LPS++":"++LPS,
+ {ok, Node} = start_node(Config, Cmd),
+ Bt = rpc:call(Node,
erlang,
system_info,
[scheduler_bind_type]),
- ?line SB = rpc:call(Node,
+ SB = rpc:call(Node,
erlang,
system_info,
[scheduler_bindings]),
- ?line ?t:format("scheduler bindings: ~p~n", [SB]),
- ?line BS = case {Bt, erlang:system_info(logical_processors_available)} of
+ io:format("scheduler bindings: ~p~n", [SB]),
+ BS = case {Bt, erlang:system_info(logical_processors_available)} of
{unbound, _} -> 0;
{_, Int} when is_integer(Int) -> Int;
{_, _} -> LP
end,
- ?line lists:foldl(fun (S, 0) ->
- ?line unbound = S,
+ lists:foldl(fun (S, 0) ->
+ unbound = S,
0;
(S, N) ->
- ?line true = is_integer(S),
+ true = is_integer(S),
N-1
end,
BS,
tuple_to_list(SB)),
- ?line stop_node(Node),
- ?line ok.
+ stop_node(Node),
+ ok.
scheduler_threads(Config) when is_list(Config) ->
SmpSupport = erlang:system_info(smp_support),
@@ -1131,6 +1122,7 @@ dirty_schedulers_online_test(true) ->
dirty_schedulers_online_smp_test(erlang:system_info(schedulers_online)).
dirty_schedulers_online_smp_test(SchedOnln) when SchedOnln < 4 -> ok;
dirty_schedulers_online_smp_test(SchedOnln) ->
+ receive after 500 -> ok end,
DirtyCPUSchedOnln = erlang:system_info(dirty_cpu_schedulers_online),
SchedOnln = DirtyCPUSchedOnln,
HalfSchedOnln = SchedOnln div 2,
@@ -1139,9 +1131,11 @@ dirty_schedulers_online_smp_test(SchedOnln) ->
HalfDirtyCPUSchedOnln = erlang:system_flag(schedulers_online, SchedOnln),
DirtyCPUSchedOnln = erlang:system_flag(dirty_cpu_schedulers_online,
HalfDirtyCPUSchedOnln),
+ receive after 500 -> ok end,
HalfDirtyCPUSchedOnln = erlang:system_info(dirty_cpu_schedulers_online),
QrtrDirtyCPUSchedOnln = HalfDirtyCPUSchedOnln div 2,
SchedOnln = erlang:system_flag(schedulers_online, HalfSchedOnln),
+ receive after 500 -> ok end,
QrtrDirtyCPUSchedOnln = erlang:system_info(dirty_cpu_schedulers_online),
ok.
@@ -1167,96 +1161,161 @@ get_dsstate(Config, Cmd) ->
stop_node(Node),
{DSCPU, DSCPUOnln, DSIO}.
-dirty_scheduler_exit(Config) when is_list(Config) ->
- try
- erlang:system_info(dirty_cpu_schedulers),
- dirty_scheduler_exit_test(Config)
- catch
- error:badarg ->
- {skipped, "No dirty scheduler support"}
+scheduler_suspend_basic(Config) when is_list(Config) ->
+ case erlang:system_info(multi_scheduling) of
+ disabled ->
+ {skip, "Nothing to test"};
+ _ ->
+ Onln = erlang:system_info(schedulers_online),
+ try
+ scheduler_suspend_basic_test()
+ after
+ erlang:system_flag(schedulers_online, Onln)
+ end
end.
-dirty_scheduler_exit_test(Config) ->
- {ok, Node} = start_node(Config, "+SDio 1"),
- [ok] = mcall(Node,
- [fun() ->
- Path = ?config(data_dir, Config),
- Lib = atom_to_list(?MODULE),
- ok = erlang:load_nif(filename:join(Path,Lib), []),
- ok = test_dirty_scheduler_exit()
- end]),
- stop_node(Node),
- ok.
+scheduler_suspend_basic_test() ->
+ %% The receives after setting scheduler states are there
+ %% since the operation is not fully synchronous. For example,
+ %% we do not wait for dirty cpu schedulers online to complete
+ %% before returning from erlang:system_flag(schedulers_online, _).
-test_dirty_scheduler_exit() ->
- process_flag(trap_exit,true),
- test_dse(10,[]).
-test_dse(0,Pids) ->
- timer:sleep(100),
- kill_dse(Pids,[]);
-test_dse(N,Pids) ->
- Pid = spawn_link(fun dirty_sleeper/0),
- test_dse(N-1,[Pid|Pids]).
-kill_dse([],Killed) ->
- wait_dse(Killed);
-kill_dse([Pid|Pids],AlreadyKilled) ->
- exit(Pid,kill),
- kill_dse(Pids,[Pid|AlreadyKilled]).
-wait_dse([]) ->
- ok;
-wait_dse([Pid|Pids]) ->
- receive
- {'EXIT',Pid,killed} ->
- ok
+ erlang:system_flag(schedulers_online,
+ erlang:system_info(schedulers)),
+ try
+ erlang:system_flag(dirty_cpu_schedulers_online,
+ erlang:system_info(dirty_cpu_schedulers)),
+ receive after 500 -> ok end
+ catch
+ _ : _ ->
+ ok
end,
- wait_dse(Pids).
-dirty_sleeper() ->
- erlang:nif_error({error,?MODULE}).
+ S0 = sched_state(),
+ io:format("~p~n", [S0]),
+ {{normal,NTot0,NOnln0,NAct0},
+ {dirty_cpu,DCTot0,DCOnln0,DCAct0},
+ {dirty_io,DITot0,DIOnln0,DIAct0}} = S0,
+ enabled = erlang:system_info(multi_scheduling),
+
+ DCOne = case DCTot0 of
+ 0 -> 0;
+ _ -> 1
+ end,
+
+ blocked_normal = erlang:system_flag(multi_scheduling, block_normal),
+ blocked_normal = erlang:system_info(multi_scheduling),
+ {{normal,NTot0,NOnln0,1},
+ {dirty_cpu,DCTot0,DCOnln0,DCAct0},
+ {dirty_io,DITot0,DIOnln0,DIAct0}} = sched_state(),
+
+ NOnln0 = erlang:system_flag(schedulers_online, 1),
+ receive after 500 -> ok end,
+ {{normal,NTot0,1,1},
+ {dirty_cpu,DCTot0,DCOne,DCOne},
+ {dirty_io,DITot0,DIOnln0,DIAct0}} = sched_state(),
+
+ 1 = erlang:system_flag(schedulers_online, NOnln0),
+ receive after 500 -> ok end,
+ {{normal,NTot0,NOnln0,1},
+ {dirty_cpu,DCTot0,DCOnln0,DCAct0},
+ {dirty_io,DITot0,DIOnln0,DIAct0}} = sched_state(),
+
+ blocked = erlang:system_flag(multi_scheduling, block),
+ blocked = erlang:system_info(multi_scheduling),
+ receive after 500 -> ok end,
+ {{normal,NTot0,NOnln0,1},
+ {dirty_cpu,DCTot0,DCOnln0,0},
+ {dirty_io,DITot0,DIOnln0,0}} = sched_state(),
+
+ NOnln0 = erlang:system_flag(schedulers_online, 1),
+ receive after 500 -> ok end,
+ {{normal,NTot0,1,1},
+ {dirty_cpu,DCTot0,DCOne,0},
+ {dirty_io,DITot0,DIOnln0,0}} = sched_state(),
+
+ 1 = erlang:system_flag(schedulers_online, NOnln0),
+ receive after 500 -> ok end,
+ {{normal,NTot0,NOnln0,1},
+ {dirty_cpu,DCTot0,DCOnln0,0},
+ {dirty_io,DITot0,DIOnln0,0}} = sched_state(),
+
+ blocked = erlang:system_flag(multi_scheduling, unblock_normal),
+ blocked = erlang:system_info(multi_scheduling),
+ {{normal,NTot0,NOnln0,1},
+ {dirty_cpu,DCTot0,DCOnln0,0},
+ {dirty_io,DITot0,DIOnln0,0}} = sched_state(),
+
+ enabled = erlang:system_flag(multi_scheduling, unblock),
+ enabled = erlang:system_info(multi_scheduling),
+ receive after 500 -> ok end,
+ {{normal,NTot0,NOnln0,NAct0},
+ {dirty_cpu,DCTot0,DCOnln0,DCAct0},
+ {dirty_io,DITot0,DIOnln0,DIAct0}} = sched_state(),
+
+ NOnln0 = erlang:system_flag(schedulers_online, 1),
+ receive after 500 -> ok end,
+ {{normal,NTot0,1,1},
+ {dirty_cpu,DCTot0,DCOne,DCOne},
+ {dirty_io,DITot0,DIOnln0,DIAct0}} = sched_state(),
+
+ 1 = erlang:system_flag(schedulers_online, NOnln0),
+ receive after 500 -> ok end,
+ {{normal,NTot0,NOnln0,NAct0},
+ {dirty_cpu,DCTot0,DCOnln0,DCAct0},
+ {dirty_io,DITot0,DIOnln0,DIAct0}} = sched_state(),
+
+ ok.
+
scheduler_suspend(Config) when is_list(Config) ->
- ?line Dog = ?t:timetrap(?t:minutes(5)),
- ?line lists:foreach(fun (S) -> scheduler_suspend_test(Config, S) end,
+ ct:timetrap({minutes, 5}),
+ lists:foreach(fun (S) -> scheduler_suspend_test(Config, S) end,
[64, 32, 16, default]),
- ?line ?t:timetrap_cancel(Dog),
- ?line ok.
+ ok.
scheduler_suspend_test(Config, Schedulers) ->
- ?line Cmd = case Schedulers of
+ Cmd = case Schedulers of
default ->
"";
_ ->
S = integer_to_list(Schedulers),
"+S"++S++":"++S
end,
- ?line {ok, Node} = start_node(Config, Cmd),
- ?line [SState] = mcall(Node, [fun () ->
- erlang:system_info(schedulers_state)
- end]),
- ?line ?t:format("SState=~p~n", [SState]),
- ?line {Sched, SchedOnln, _SchedAvail} = SState,
- ?line true = is_integer(Sched),
- ?line [ok] = mcall(Node, [fun () -> sst0_loop(300) end]),
- ?line [ok] = mcall(Node, [fun () -> sst1_loop(300) end]),
- ?line [ok] = mcall(Node, [fun () -> sst2_loop(300) end]),
- ?line [ok, ok, ok, ok, ok] = mcall(Node,
- [fun () -> sst0_loop(200) end,
- fun () -> sst1_loop(200) end,
- fun () -> sst2_loop(200) end,
- fun () -> sst2_loop(200) end,
- fun () -> sst3_loop(Sched, 200) end]),
- ?line [SState] = mcall(Node, [fun () ->
- case Sched == SchedOnln of
- false ->
- Sched = erlang:system_flag(
- schedulers_online,
- SchedOnln);
- true ->
- ok
- end,
- erlang:system_info(schedulers_state)
- end]),
- ?line stop_node(Node),
- ?line ok.
+ {ok, Node} = start_node(Config, Cmd),
+ [SState] = mcall(Node, [fun () ->
+ erlang:system_info(schedulers_state)
+ end]),
+
+ io:format("SState=~p~n", [SState]),
+ {Sched, SchedOnln, _SchedAvail} = SState,
+ true = is_integer(Sched),
+ [ok] = mcall(Node, [fun () -> sst0_loop(300) end]),
+ [ok] = mcall(Node, [fun () -> sst1_loop(300) end]),
+ [ok] = mcall(Node, [fun () -> sst2_loop(300) end]),
+ [ok] = mcall(Node, [fun () -> sst4_loop(300) end]),
+ [ok] = mcall(Node, [fun () -> sst5_loop(300) end]),
+ [ok, ok, ok, ok,
+ ok, ok, ok] = mcall(Node,
+ [fun () -> sst0_loop(200) end,
+ fun () -> sst1_loop(200) end,
+ fun () -> sst2_loop(200) end,
+ fun () -> sst2_loop(200) end,
+ fun () -> sst3_loop(Sched, 200) end,
+ fun () -> sst4_loop(200) end,
+ fun () -> sst5_loop(200) end]),
+ [SState] = mcall(Node, [fun () ->
+ case Sched == SchedOnln of
+ false ->
+ Sched = erlang:system_flag(
+ schedulers_online,
+ SchedOnln);
+ true ->
+ ok
+ end,
+ erlang:system_info(schedulers_state)
+ end]),
+ stop_node(Node),
+ ok.
sst0_loop(0) ->
@@ -1320,270 +1379,283 @@ sst3_loop_with_dirty_schedulers(S, DS, N) ->
erlang:system_flag(dirty_cpu_schedulers_online, DS),
sst3_loop_with_dirty_schedulers(S, DS, N-1).
+sst4_loop(0) ->
+ ok;
+sst4_loop(N) ->
+ erlang:system_flag(multi_scheduling, block_normal),
+ erlang:system_flag(multi_scheduling, unblock_normal),
+ sst4_loop(N-1).
+
+sst5_loop(0) ->
+ ok;
+sst5_loop(N) ->
+ erlang:system_flag(multi_scheduling, block_normal),
+ erlang:system_flag(multi_scheduling, unblock_normal),
+ sst5_loop(N-1).
+
reader_groups(Config) when is_list(Config) ->
%% White box testing. These results are correct, but other results
%% could be too...
%% The actual tilepro64 topology
CPUT0 = [{processor,[{node,[{core,{logical,0}},
- {core,{logical,1}},
- {core,{logical,2}},
- {core,{logical,8}},
- {core,{logical,9}},
- {core,{logical,10}},
- {core,{logical,11}},
- {core,{logical,16}},
- {core,{logical,17}},
- {core,{logical,18}},
- {core,{logical,19}},
- {core,{logical,24}},
- {core,{logical,25}},
- {core,{logical,27}},
- {core,{logical,29}}]},
- {node,[{core,{logical,3}},
- {core,{logical,4}},
- {core,{logical,5}},
- {core,{logical,6}},
- {core,{logical,7}},
- {core,{logical,12}},
- {core,{logical,13}},
- {core,{logical,14}},
- {core,{logical,15}},
- {core,{logical,20}},
- {core,{logical,21}},
- {core,{logical,22}},
- {core,{logical,23}},
- {core,{logical,28}},
- {core,{logical,30}}]},
- {node,[{core,{logical,31}},
- {core,{logical,36}},
- {core,{logical,37}},
- {core,{logical,38}},
- {core,{logical,44}},
- {core,{logical,45}},
- {core,{logical,46}},
- {core,{logical,47}},
- {core,{logical,51}},
- {core,{logical,52}},
- {core,{logical,53}},
- {core,{logical,54}},
- {core,{logical,55}},
- {core,{logical,60}},
- {core,{logical,61}}]},
- {node,[{core,{logical,26}},
- {core,{logical,32}},
- {core,{logical,33}},
- {core,{logical,34}},
- {core,{logical,35}},
- {core,{logical,39}},
- {core,{logical,40}},
- {core,{logical,41}},
- {core,{logical,42}},
- {core,{logical,43}},
- {core,{logical,48}},
- {core,{logical,49}},
- {core,{logical,50}},
- {core,{logical,58}}]}]}],
-
- ?line [{0,1},{1,1},{2,1},{3,3},{4,3},{5,3},{6,3},{7,3},{8,1},{9,1},{10,1},
- {11,1},{12,3},{13,3},{14,4},{15,4},{16,2},{17,2},{18,2},{19,2},
- {20,4},{21,4},{22,4},{23,4},{24,2},{25,2},{26,7},{27,2},{28,4},
- {29,2},{30,4},{31,5},{32,7},{33,7},{34,7},{35,7},{36,5},{37,5},
- {38,5},{39,7},{40,7},{41,8},{42,8},{43,8},{44,5},{45,5},{46,5},
- {47,6},{48,8},{49,8},{50,8},{51,6},{52,6},{53,6},{54,6},{55,6},
- {58,8},{60,6},{61,6}]
- = reader_groups_map(CPUT0, 8),
+ {core,{logical,1}},
+ {core,{logical,2}},
+ {core,{logical,8}},
+ {core,{logical,9}},
+ {core,{logical,10}},
+ {core,{logical,11}},
+ {core,{logical,16}},
+ {core,{logical,17}},
+ {core,{logical,18}},
+ {core,{logical,19}},
+ {core,{logical,24}},
+ {core,{logical,25}},
+ {core,{logical,27}},
+ {core,{logical,29}}]},
+ {node,[{core,{logical,3}},
+ {core,{logical,4}},
+ {core,{logical,5}},
+ {core,{logical,6}},
+ {core,{logical,7}},
+ {core,{logical,12}},
+ {core,{logical,13}},
+ {core,{logical,14}},
+ {core,{logical,15}},
+ {core,{logical,20}},
+ {core,{logical,21}},
+ {core,{logical,22}},
+ {core,{logical,23}},
+ {core,{logical,28}},
+ {core,{logical,30}}]},
+ {node,[{core,{logical,31}},
+ {core,{logical,36}},
+ {core,{logical,37}},
+ {core,{logical,38}},
+ {core,{logical,44}},
+ {core,{logical,45}},
+ {core,{logical,46}},
+ {core,{logical,47}},
+ {core,{logical,51}},
+ {core,{logical,52}},
+ {core,{logical,53}},
+ {core,{logical,54}},
+ {core,{logical,55}},
+ {core,{logical,60}},
+ {core,{logical,61}}]},
+ {node,[{core,{logical,26}},
+ {core,{logical,32}},
+ {core,{logical,33}},
+ {core,{logical,34}},
+ {core,{logical,35}},
+ {core,{logical,39}},
+ {core,{logical,40}},
+ {core,{logical,41}},
+ {core,{logical,42}},
+ {core,{logical,43}},
+ {core,{logical,48}},
+ {core,{logical,49}},
+ {core,{logical,50}},
+ {core,{logical,58}}]}]}],
+
+ [{0,1},{1,1},{2,1},{3,3},{4,3},{5,3},{6,3},{7,3},{8,1},{9,1},{10,1},
+ {11,1},{12,3},{13,3},{14,4},{15,4},{16,2},{17,2},{18,2},{19,2},
+ {20,4},{21,4},{22,4},{23,4},{24,2},{25,2},{26,7},{27,2},{28,4},
+ {29,2},{30,4},{31,5},{32,7},{33,7},{34,7},{35,7},{36,5},{37,5},
+ {38,5},{39,7},{40,7},{41,8},{42,8},{43,8},{44,5},{45,5},{46,5},
+ {47,6},{48,8},{49,8},{50,8},{51,6},{52,6},{53,6},{54,6},{55,6},
+ {58,8},{60,6},{61,6}]
+ = reader_groups_map(CPUT0, 8),
CPUT1 = [n([p([c([t(l(0)),t(l(1)),t(l(2)),t(l(3))]),
- c([t(l(4)),t(l(5)),t(l(6)),t(l(7))]),
- c([t(l(8)),t(l(9)),t(l(10)),t(l(11))]),
- c([t(l(12)),t(l(13)),t(l(14)),t(l(15))])]),
- p([c([t(l(16)),t(l(17)),t(l(18)),t(l(19))]),
- c([t(l(20)),t(l(21)),t(l(22)),t(l(23))]),
- c([t(l(24)),t(l(25)),t(l(26)),t(l(27))]),
- c([t(l(28)),t(l(29)),t(l(30)),t(l(31))])])]),
- n([p([c([t(l(32)),t(l(33)),t(l(34)),t(l(35))]),
- c([t(l(36)),t(l(37)),t(l(38)),t(l(39))]),
- c([t(l(40)),t(l(41)),t(l(42)),t(l(43))]),
- c([t(l(44)),t(l(45)),t(l(46)),t(l(47))])]),
- p([c([t(l(48)),t(l(49)),t(l(50)),t(l(51))]),
- c([t(l(52)),t(l(53)),t(l(54)),t(l(55))]),
- c([t(l(56)),t(l(57)),t(l(58)),t(l(59))]),
- c([t(l(60)),t(l(61)),t(l(62)),t(l(63))])])]),
- n([p([c([t(l(64)),t(l(65)),t(l(66)),t(l(67))]),
- c([t(l(68)),t(l(69)),t(l(70)),t(l(71))]),
- c([t(l(72)),t(l(73)),t(l(74)),t(l(75))]),
- c([t(l(76)),t(l(77)),t(l(78)),t(l(79))])]),
- p([c([t(l(80)),t(l(81)),t(l(82)),t(l(83))]),
- c([t(l(84)),t(l(85)),t(l(86)),t(l(87))]),
- c([t(l(88)),t(l(89)),t(l(90)),t(l(91))]),
- c([t(l(92)),t(l(93)),t(l(94)),t(l(95))])])]),
- n([p([c([t(l(96)),t(l(97)),t(l(98)),t(l(99))]),
- c([t(l(100)),t(l(101)),t(l(102)),t(l(103))]),
- c([t(l(104)),t(l(105)),t(l(106)),t(l(107))]),
- c([t(l(108)),t(l(109)),t(l(110)),t(l(111))])]),
- p([c([t(l(112)),t(l(113)),t(l(114)),t(l(115))]),
- c([t(l(116)),t(l(117)),t(l(118)),t(l(119))]),
- c([t(l(120)),t(l(121)),t(l(122)),t(l(123))]),
- c([t(l(124)),t(l(125)),t(l(126)),t(l(127))])])])],
-
- ?line [{0,1},{1,1},{2,1},{3,1},{4,2},{5,2},{6,2},{7,2},{8,3},{9,3},
- {10,3},{11,3},{12,4},{13,4},{14,4},{15,4},{16,5},{17,5},{18,5},
- {19,5},{20,6},{21,6},{22,6},{23,6},{24,7},{25,7},{26,7},{27,7},
- {28,8},{29,8},{30,8},{31,8},{32,9},{33,9},{34,9},{35,9},{36,10},
- {37,10},{38,10},{39,10},{40,11},{41,11},{42,11},{43,11},{44,12},
- {45,12},{46,12},{47,12},{48,13},{49,13},{50,13},{51,13},{52,14},
- {53,14},{54,14},{55,14},{56,15},{57,15},{58,15},{59,15},{60,16},
- {61,16},{62,16},{63,16},{64,17},{65,17},{66,17},{67,17},{68,18},
- {69,18},{70,18},{71,18},{72,19},{73,19},{74,19},{75,19},{76,20},
- {77,20},{78,20},{79,20},{80,21},{81,21},{82,21},{83,21},{84,22},
- {85,22},{86,22},{87,22},{88,23},{89,23},{90,23},{91,23},{92,24},
- {93,24},{94,24},{95,24},{96,25},{97,25},{98,25},{99,25},{100,26},
- {101,26},{102,26},{103,26},{104,27},{105,27},{106,27},{107,27},
- {108,28},{109,28},{110,28},{111,28},{112,29},{113,29},{114,29},
- {115,29},{116,30},{117,30},{118,30},{119,30},{120,31},{121,31},
- {122,31},{123,31},{124,32},{125,32},{126,32},{127,32}]
- = reader_groups_map(CPUT1, 128),
-
- ?line [{0,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,1},{15,1},{16,1},{17,1},{18,1},{19,1},
- {20,1},{21,1},{22,1},{23,1},{24,1},{25,1},{26,1},{27,1},{28,1},
- {29,1},{30,1},{31,1},{32,1},{33,1},{34,1},{35,1},{36,1},{37,1},
- {38,1},{39,1},{40,1},{41,1},{42,1},{43,1},{44,1},{45,1},{46,1},
- {47,1},{48,1},{49,1},{50,1},{51,1},{52,1},{53,1},{54,1},{55,1},
- {56,1},{57,1},{58,1},{59,1},{60,1},{61,1},{62,1},{63,1},{64,2},
- {65,2},{66,2},{67,2},{68,2},{69,2},{70,2},{71,2},{72,2},{73,2},
- {74,2},{75,2},{76,2},{77,2},{78,2},{79,2},{80,2},{81,2},{82,2},
- {83,2},{84,2},{85,2},{86,2},{87,2},{88,2},{89,2},{90,2},{91,2},
- {92,2},{93,2},{94,2},{95,2},{96,2},{97,2},{98,2},{99,2},{100,2},
- {101,2},{102,2},{103,2},{104,2},{105,2},{106,2},{107,2},{108,2},
- {109,2},{110,2},{111,2},{112,2},{113,2},{114,2},{115,2},{116,2},
- {117,2},{118,2},{119,2},{120,2},{121,2},{122,2},{123,2},{124,2},
- {125,2},{126,2},{127,2}]
- = reader_groups_map(CPUT1, 2),
-
- ?line [{0,1},{1,1},{2,1},{3,1},{4,2},{5,2},{6,2},{7,2},{8,3},{9,3},{10,3},
- {11,3},{12,3},{13,3},{14,3},{15,3},{16,4},{17,4},{18,4},{19,4},
- {20,4},{21,4},{22,4},{23,4},{24,5},{25,5},{26,5},{27,5},{28,5},
- {29,5},{30,5},{31,5},{32,6},{33,6},{34,6},{35,6},{36,6},{37,6},
- {38,6},{39,6},{40,7},{41,7},{42,7},{43,7},{44,7},{45,7},{46,7},
- {47,7},{48,8},{49,8},{50,8},{51,8},{52,8},{53,8},{54,8},{55,8},
- {56,9},{57,9},{58,9},{59,9},{60,9},{61,9},{62,9},{63,9},{64,10},
- {65,10},{66,10},{67,10},{68,10},{69,10},{70,10},{71,10},{72,11},
- {73,11},{74,11},{75,11},{76,11},{77,11},{78,11},{79,11},{80,12},
- {81,12},{82,12},{83,12},{84,12},{85,12},{86,12},{87,12},{88,13},
- {89,13},{90,13},{91,13},{92,13},{93,13},{94,13},{95,13},{96,14},
- {97,14},{98,14},{99,14},{100,14},{101,14},{102,14},{103,14},
- {104,15},{105,15},{106,15},{107,15},{108,15},{109,15},{110,15},
- {111,15},{112,16},{113,16},{114,16},{115,16},{116,16},{117,16},
- {118,16},{119,16},{120,17},{121,17},{122,17},{123,17},{124,17},
- {125,17},{126,17},{127,17}]
- = reader_groups_map(CPUT1, 17),
-
- ?line [{0,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,1},{15,1},{16,2},{17,2},{18,2},{19,2},
- {20,2},{21,2},{22,2},{23,2},{24,2},{25,2},{26,2},{27,2},{28,2},
- {29,2},{30,2},{31,2},{32,3},{33,3},{34,3},{35,3},{36,3},{37,3},
- {38,3},{39,3},{40,3},{41,3},{42,3},{43,3},{44,3},{45,3},{46,3},
- {47,3},{48,4},{49,4},{50,4},{51,4},{52,4},{53,4},{54,4},{55,4},
- {56,4},{57,4},{58,4},{59,4},{60,4},{61,4},{62,4},{63,4},{64,5},
- {65,5},{66,5},{67,5},{68,5},{69,5},{70,5},{71,5},{72,5},{73,5},
- {74,5},{75,5},{76,5},{77,5},{78,5},{79,5},{80,6},{81,6},{82,6},
- {83,6},{84,6},{85,6},{86,6},{87,6},{88,6},{89,6},{90,6},{91,6},
- {92,6},{93,6},{94,6},{95,6},{96,7},{97,7},{98,7},{99,7},{100,7},
- {101,7},{102,7},{103,7},{104,7},{105,7},{106,7},{107,7},{108,7},
- {109,7},{110,7},{111,7},{112,7},{113,7},{114,7},{115,7},{116,7},
- {117,7},{118,7},{119,7},{120,7},{121,7},{122,7},{123,7},{124,7},
- {125,7},{126,7},{127,7}]
- = reader_groups_map(CPUT1, 7),
-
- ?line CPUT2 = [p([c(l(0)),c(l(1)),c(l(2)),c(l(3)),c(l(4))]),
- p([t(l(5)),t(l(6)),t(l(7)),t(l(8)),t(l(9))]),
- p([t(l(10))]),
- p([c(l(11)),c(l(12)),c(l(13))]),
- p([c(l(14)),c(l(15))])],
-
- ?line [{0,1},{1,1},{2,1},{3,1},{4,1},
- {5,2},{6,2},{7,2},{8,2},{9,2},
- {10,3},
- {11,4},{12,4},{13,4},
- {14,5},{15,5}] = reader_groups_map(CPUT2, 5),
-
-
- ?line [{0,1},{1,1},{2,2},{3,2},{4,2},
- {5,3},{6,3},{7,3},{8,3},{9,3},
- {10,4},
- {11,5},{12,5},{13,5},
- {14,6},{15,6}] = reader_groups_map(CPUT2, 6),
-
- ?line [{0,1},{1,1},{2,2},{3,2},{4,2},
- {5,3},{6,3},{7,3},{8,3},{9,3},
- {10,4},
- {11,5},{12,6},{13,6},
- {14,7},{15,7}] = reader_groups_map(CPUT2, 7),
-
- ?line [{0,1},{1,1},{2,2},{3,2},{4,2},
- {5,3},{6,3},{7,3},{8,3},{9,3},
- {10,4},
- {11,5},{12,6},{13,6},
- {14,7},{15,8}] = reader_groups_map(CPUT2, 8),
-
- ?line [{0,1},{1,2},{2,2},{3,3},{4,3},
- {5,4},{6,4},{7,4},{8,4},{9,4},
- {10,5},
- {11,6},{12,7},{13,7},
- {14,8},{15,9}] = reader_groups_map(CPUT2, 9),
-
- ?line [{0,1},{1,2},{2,2},{3,3},{4,3},
- {5,4},{6,4},{7,4},{8,4},{9,4},
- {10,5},
- {11,6},{12,7},{13,8},
- {14,9},{15,10}] = reader_groups_map(CPUT2, 10),
-
- ?line [{0,1},{1,2},{2,3},{3,4},{4,4},
- {5,5},{6,5},{7,5},{8,5},{9,5},
- {10,6},
- {11,7},{12,8},{13,9},
- {14,10},{15,11}] = reader_groups_map(CPUT2, 11),
-
- ?line [{0,1},{1,2},{2,3},{3,4},{4,5},
- {5,6},{6,6},{7,6},{8,6},{9,6},
- {10,7},
- {11,8},{12,9},{13,10},
- {14,11},{15,12}] = reader_groups_map(CPUT2, 100),
+ c([t(l(4)),t(l(5)),t(l(6)),t(l(7))]),
+ c([t(l(8)),t(l(9)),t(l(10)),t(l(11))]),
+ c([t(l(12)),t(l(13)),t(l(14)),t(l(15))])]),
+ p([c([t(l(16)),t(l(17)),t(l(18)),t(l(19))]),
+ c([t(l(20)),t(l(21)),t(l(22)),t(l(23))]),
+ c([t(l(24)),t(l(25)),t(l(26)),t(l(27))]),
+ c([t(l(28)),t(l(29)),t(l(30)),t(l(31))])])]),
+ n([p([c([t(l(32)),t(l(33)),t(l(34)),t(l(35))]),
+ c([t(l(36)),t(l(37)),t(l(38)),t(l(39))]),
+ c([t(l(40)),t(l(41)),t(l(42)),t(l(43))]),
+ c([t(l(44)),t(l(45)),t(l(46)),t(l(47))])]),
+ p([c([t(l(48)),t(l(49)),t(l(50)),t(l(51))]),
+ c([t(l(52)),t(l(53)),t(l(54)),t(l(55))]),
+ c([t(l(56)),t(l(57)),t(l(58)),t(l(59))]),
+ c([t(l(60)),t(l(61)),t(l(62)),t(l(63))])])]),
+ n([p([c([t(l(64)),t(l(65)),t(l(66)),t(l(67))]),
+ c([t(l(68)),t(l(69)),t(l(70)),t(l(71))]),
+ c([t(l(72)),t(l(73)),t(l(74)),t(l(75))]),
+ c([t(l(76)),t(l(77)),t(l(78)),t(l(79))])]),
+ p([c([t(l(80)),t(l(81)),t(l(82)),t(l(83))]),
+ c([t(l(84)),t(l(85)),t(l(86)),t(l(87))]),
+ c([t(l(88)),t(l(89)),t(l(90)),t(l(91))]),
+ c([t(l(92)),t(l(93)),t(l(94)),t(l(95))])])]),
+ n([p([c([t(l(96)),t(l(97)),t(l(98)),t(l(99))]),
+ c([t(l(100)),t(l(101)),t(l(102)),t(l(103))]),
+ c([t(l(104)),t(l(105)),t(l(106)),t(l(107))]),
+ c([t(l(108)),t(l(109)),t(l(110)),t(l(111))])]),
+ p([c([t(l(112)),t(l(113)),t(l(114)),t(l(115))]),
+ c([t(l(116)),t(l(117)),t(l(118)),t(l(119))]),
+ c([t(l(120)),t(l(121)),t(l(122)),t(l(123))]),
+ c([t(l(124)),t(l(125)),t(l(126)),t(l(127))])])])],
+
+ [{0,1},{1,1},{2,1},{3,1},{4,2},{5,2},{6,2},{7,2},{8,3},{9,3},
+ {10,3},{11,3},{12,4},{13,4},{14,4},{15,4},{16,5},{17,5},{18,5},
+ {19,5},{20,6},{21,6},{22,6},{23,6},{24,7},{25,7},{26,7},{27,7},
+ {28,8},{29,8},{30,8},{31,8},{32,9},{33,9},{34,9},{35,9},{36,10},
+ {37,10},{38,10},{39,10},{40,11},{41,11},{42,11},{43,11},{44,12},
+ {45,12},{46,12},{47,12},{48,13},{49,13},{50,13},{51,13},{52,14},
+ {53,14},{54,14},{55,14},{56,15},{57,15},{58,15},{59,15},{60,16},
+ {61,16},{62,16},{63,16},{64,17},{65,17},{66,17},{67,17},{68,18},
+ {69,18},{70,18},{71,18},{72,19},{73,19},{74,19},{75,19},{76,20},
+ {77,20},{78,20},{79,20},{80,21},{81,21},{82,21},{83,21},{84,22},
+ {85,22},{86,22},{87,22},{88,23},{89,23},{90,23},{91,23},{92,24},
+ {93,24},{94,24},{95,24},{96,25},{97,25},{98,25},{99,25},{100,26},
+ {101,26},{102,26},{103,26},{104,27},{105,27},{106,27},{107,27},
+ {108,28},{109,28},{110,28},{111,28},{112,29},{113,29},{114,29},
+ {115,29},{116,30},{117,30},{118,30},{119,30},{120,31},{121,31},
+ {122,31},{123,31},{124,32},{125,32},{126,32},{127,32}]
+ = reader_groups_map(CPUT1, 128),
+
+ [{0,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,1},{15,1},{16,1},{17,1},{18,1},{19,1},
+ {20,1},{21,1},{22,1},{23,1},{24,1},{25,1},{26,1},{27,1},{28,1},
+ {29,1},{30,1},{31,1},{32,1},{33,1},{34,1},{35,1},{36,1},{37,1},
+ {38,1},{39,1},{40,1},{41,1},{42,1},{43,1},{44,1},{45,1},{46,1},
+ {47,1},{48,1},{49,1},{50,1},{51,1},{52,1},{53,1},{54,1},{55,1},
+ {56,1},{57,1},{58,1},{59,1},{60,1},{61,1},{62,1},{63,1},{64,2},
+ {65,2},{66,2},{67,2},{68,2},{69,2},{70,2},{71,2},{72,2},{73,2},
+ {74,2},{75,2},{76,2},{77,2},{78,2},{79,2},{80,2},{81,2},{82,2},
+ {83,2},{84,2},{85,2},{86,2},{87,2},{88,2},{89,2},{90,2},{91,2},
+ {92,2},{93,2},{94,2},{95,2},{96,2},{97,2},{98,2},{99,2},{100,2},
+ {101,2},{102,2},{103,2},{104,2},{105,2},{106,2},{107,2},{108,2},
+ {109,2},{110,2},{111,2},{112,2},{113,2},{114,2},{115,2},{116,2},
+ {117,2},{118,2},{119,2},{120,2},{121,2},{122,2},{123,2},{124,2},
+ {125,2},{126,2},{127,2}]
+ = reader_groups_map(CPUT1, 2),
+
+ [{0,1},{1,1},{2,1},{3,1},{4,2},{5,2},{6,2},{7,2},{8,3},{9,3},{10,3},
+ {11,3},{12,3},{13,3},{14,3},{15,3},{16,4},{17,4},{18,4},{19,4},
+ {20,4},{21,4},{22,4},{23,4},{24,5},{25,5},{26,5},{27,5},{28,5},
+ {29,5},{30,5},{31,5},{32,6},{33,6},{34,6},{35,6},{36,6},{37,6},
+ {38,6},{39,6},{40,7},{41,7},{42,7},{43,7},{44,7},{45,7},{46,7},
+ {47,7},{48,8},{49,8},{50,8},{51,8},{52,8},{53,8},{54,8},{55,8},
+ {56,9},{57,9},{58,9},{59,9},{60,9},{61,9},{62,9},{63,9},{64,10},
+ {65,10},{66,10},{67,10},{68,10},{69,10},{70,10},{71,10},{72,11},
+ {73,11},{74,11},{75,11},{76,11},{77,11},{78,11},{79,11},{80,12},
+ {81,12},{82,12},{83,12},{84,12},{85,12},{86,12},{87,12},{88,13},
+ {89,13},{90,13},{91,13},{92,13},{93,13},{94,13},{95,13},{96,14},
+ {97,14},{98,14},{99,14},{100,14},{101,14},{102,14},{103,14},
+ {104,15},{105,15},{106,15},{107,15},{108,15},{109,15},{110,15},
+ {111,15},{112,16},{113,16},{114,16},{115,16},{116,16},{117,16},
+ {118,16},{119,16},{120,17},{121,17},{122,17},{123,17},{124,17},
+ {125,17},{126,17},{127,17}]
+ = reader_groups_map(CPUT1, 17),
+
+ [{0,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,1},{15,1},{16,2},{17,2},{18,2},{19,2},
+ {20,2},{21,2},{22,2},{23,2},{24,2},{25,2},{26,2},{27,2},{28,2},
+ {29,2},{30,2},{31,2},{32,3},{33,3},{34,3},{35,3},{36,3},{37,3},
+ {38,3},{39,3},{40,3},{41,3},{42,3},{43,3},{44,3},{45,3},{46,3},
+ {47,3},{48,4},{49,4},{50,4},{51,4},{52,4},{53,4},{54,4},{55,4},
+ {56,4},{57,4},{58,4},{59,4},{60,4},{61,4},{62,4},{63,4},{64,5},
+ {65,5},{66,5},{67,5},{68,5},{69,5},{70,5},{71,5},{72,5},{73,5},
+ {74,5},{75,5},{76,5},{77,5},{78,5},{79,5},{80,6},{81,6},{82,6},
+ {83,6},{84,6},{85,6},{86,6},{87,6},{88,6},{89,6},{90,6},{91,6},
+ {92,6},{93,6},{94,6},{95,6},{96,7},{97,7},{98,7},{99,7},{100,7},
+ {101,7},{102,7},{103,7},{104,7},{105,7},{106,7},{107,7},{108,7},
+ {109,7},{110,7},{111,7},{112,7},{113,7},{114,7},{115,7},{116,7},
+ {117,7},{118,7},{119,7},{120,7},{121,7},{122,7},{123,7},{124,7},
+ {125,7},{126,7},{127,7}]
+ = reader_groups_map(CPUT1, 7),
+
+ CPUT2 = [p([c(l(0)),c(l(1)),c(l(2)),c(l(3)),c(l(4))]),
+ p([t(l(5)),t(l(6)),t(l(7)),t(l(8)),t(l(9))]),
+ p([t(l(10))]),
+ p([c(l(11)),c(l(12)),c(l(13))]),
+ p([c(l(14)),c(l(15))])],
+
+ [{0,1},{1,1},{2,1},{3,1},{4,1},
+ {5,2},{6,2},{7,2},{8,2},{9,2},
+ {10,3},
+ {11,4},{12,4},{13,4},
+ {14,5},{15,5}] = reader_groups_map(CPUT2, 5),
+
+
+ [{0,1},{1,1},{2,2},{3,2},{4,2},
+ {5,3},{6,3},{7,3},{8,3},{9,3},
+ {10,4},
+ {11,5},{12,5},{13,5},
+ {14,6},{15,6}] = reader_groups_map(CPUT2, 6),
+
+ [{0,1},{1,1},{2,2},{3,2},{4,2},
+ {5,3},{6,3},{7,3},{8,3},{9,3},
+ {10,4},
+ {11,5},{12,6},{13,6},
+ {14,7},{15,7}] = reader_groups_map(CPUT2, 7),
+
+ [{0,1},{1,1},{2,2},{3,2},{4,2},
+ {5,3},{6,3},{7,3},{8,3},{9,3},
+ {10,4},
+ {11,5},{12,6},{13,6},
+ {14,7},{15,8}] = reader_groups_map(CPUT2, 8),
+
+ [{0,1},{1,2},{2,2},{3,3},{4,3},
+ {5,4},{6,4},{7,4},{8,4},{9,4},
+ {10,5},
+ {11,6},{12,7},{13,7},
+ {14,8},{15,9}] = reader_groups_map(CPUT2, 9),
+
+ [{0,1},{1,2},{2,2},{3,3},{4,3},
+ {5,4},{6,4},{7,4},{8,4},{9,4},
+ {10,5},
+ {11,6},{12,7},{13,8},
+ {14,9},{15,10}] = reader_groups_map(CPUT2, 10),
+
+ [{0,1},{1,2},{2,3},{3,4},{4,4},
+ {5,5},{6,5},{7,5},{8,5},{9,5},
+ {10,6},
+ {11,7},{12,8},{13,9},
+ {14,10},{15,11}] = reader_groups_map(CPUT2, 11),
+
+ [{0,1},{1,2},{2,3},{3,4},{4,5},
+ {5,6},{6,6},{7,6},{8,6},{9,6},
+ {10,7},
+ {11,8},{12,9},{13,10},
+ {14,11},{15,12}] = reader_groups_map(CPUT2, 100),
CPUT3 = [p([t(l(5)),t(l(6)),t(l(7)),t(l(8)),t(l(9))]),
- p([t(l(10))]),
- p([c(l(11)),c(l(12)),c(l(13))]),
- p([c(l(14)),c(l(15))]),
- p([c(l(0)),c(l(1)),c(l(2)),c(l(3)),c(l(4))])],
+ p([t(l(10))]),
+ p([c(l(11)),c(l(12)),c(l(13))]),
+ p([c(l(14)),c(l(15))]),
+ p([c(l(0)),c(l(1)),c(l(2)),c(l(3)),c(l(4))])],
- ?line [{0,5},{1,5},{2,6},{3,6},{4,6},
- {5,1},{6,1},{7,1},{8,1},{9,1},
- {10,2},{11,3},{12,3},{13,3},
- {14,4},{15,4}] = reader_groups_map(CPUT3, 6),
+ [{0,5},{1,5},{2,6},{3,6},{4,6},
+ {5,1},{6,1},{7,1},{8,1},{9,1},
+ {10,2},{11,3},{12,3},{13,3},
+ {14,4},{15,4}] = reader_groups_map(CPUT3, 6),
CPUT4 = [p([t(l(0)),t(l(1)),t(l(2)),t(l(3)),t(l(4))]),
- p([t(l(5))]),
- p([c(l(6)),c(l(7)),c(l(8))]),
- p([c(l(9)),c(l(10))]),
- p([c(l(11)),c(l(12)),c(l(13)),c(l(14)),c(l(15))])],
-
- ?line [{0,1},{1,1},{2,1},{3,1},{4,1},
- {5,2},
- {6,3},{7,3},{8,3},
- {9,4},{10,4},
- {11,5},{12,5},{13,6},{14,6},{15,6}] = reader_groups_map(CPUT4, 6),
-
- ?line [{0,1},{1,1},{2,1},{3,1},{4,1},
- {5,2},
- {6,3},{7,4},{8,4},
- {9,5},{10,5},
- {11,6},{12,6},{13,7},{14,7},{15,7}] = reader_groups_map(CPUT4, 7),
-
- ?line [{0,1},{65535,2}] = reader_groups_map([c(l(0)),c(l(65535))], 10),
-
- ?line ok.
+ p([t(l(5))]),
+ p([c(l(6)),c(l(7)),c(l(8))]),
+ p([c(l(9)),c(l(10))]),
+ p([c(l(11)),c(l(12)),c(l(13)),c(l(14)),c(l(15))])],
+
+ [{0,1},{1,1},{2,1},{3,1},{4,1},
+ {5,2},
+ {6,3},{7,3},{8,3},
+ {9,4},{10,4},
+ {11,5},{12,5},{13,6},{14,6},{15,6}] = reader_groups_map(CPUT4, 6),
+
+ [{0,1},{1,1},{2,1},{3,1},{4,1},
+ {5,2},
+ {6,3},{7,4},{8,4},
+ {9,5},{10,5},
+ {11,6},{12,6},{13,7},{14,7},{15,7}] = reader_groups_map(CPUT4, 7),
+
+ [{0,1},{65535,2}] = reader_groups_map([c(l(0)),c(l(65535))], 10),
+ ok.
reader_groups_map(CPUT, Groups) ->
@@ -1598,6 +1670,34 @@ reader_groups_map(CPUT, Groups) ->
%% Utils
%%
+sched_state() ->
+ sched_state(erlang:system_info(all_schedulers_state),
+ undefined,
+ {dirty_cpu,0,0,0},
+ {dirty_io,0,0,0}).
+
+
+sched_state([], N, DC, DI) ->
+ try
+ chk_basic(N),
+ chk_basic(DC),
+ chk_basic(DI),
+ {N, DC, DI}
+ catch
+ _ : _ ->
+ ct:fail({inconsisten_scheduler_state, {N, DC, DI}})
+ end;
+sched_state([{normal, _, _, _} = S | Rest], _S, DC, DI) ->
+ sched_state(Rest, S, DC, DI);
+sched_state([{dirty_cpu, _, _, _} = DC | Rest], S, _DC, DI) ->
+ sched_state(Rest, S, DC, DI);
+sched_state([{dirty_io, _, _, _} = DI | Rest], S, DC, _DI) ->
+ sched_state(Rest, S, DC, DI).
+
+chk_basic({_Type, Tot, Onln, Act}) ->
+ true = Tot >= Onln,
+ true = Onln >= Act.
+
l(Id) ->
{logical, Id}.
@@ -1616,21 +1716,21 @@ n(X) ->
mcall(Node, Funs) ->
Parent = self(),
Refs = lists:map(fun (Fun) ->
- Ref = make_ref(),
- spawn_link(Node,
- fun () ->
- Res = Fun(),
- unlink(Parent),
- Parent ! {Ref, Res}
- end),
- Ref
- end, Funs),
+ Ref = make_ref(),
+ spawn_link(Node,
+ fun () ->
+ Res = Fun(),
+ unlink(Parent),
+ Parent ! {Ref, Res}
+ end),
+ Ref
+ end, Funs),
lists:map(fun (Ref) ->
- receive
- {Ref, Res} ->
- Res
- end
- end, Refs).
+ receive
+ {Ref, Res} ->
+ Res
+ end
+ end, Refs).
erl_rel_flag_var() ->
"ERL_OTP"++erlang:system_info(otp_release)++"_FLAGS".
@@ -1654,101 +1754,101 @@ restore_erl_rel_flags(OldValue) ->
ok(too_slow, _Config) ->
{comment, "Too slow system to do any actual testing..."};
ok(_Res, Config) ->
- ?config(ok_res, Config).
+ proplists:get_value(ok_res, Config).
chk_result(too_slow,
- _LWorkers,
- _NWorkers,
- _HWorkers,
- _MWorkers,
- _LNShouldWork,
- _HShouldWork,
- _MShouldWork) ->
- ?line ok;
+ _LWorkers,
+ _NWorkers,
+ _HWorkers,
+ _MWorkers,
+ _LNShouldWork,
+ _HShouldWork,
+ _MShouldWork) ->
+ ok;
chk_result([{low, L, Lmin, _Lmax},
- {normal, N, Nmin, _Nmax},
- {high, H, Hmin, _Hmax},
- {max, M, Mmin, _Mmax}] = Res,
- LWorkers,
- NWorkers,
- HWorkers,
- MWorkers,
- LNShouldWork,
- HShouldWork,
- MShouldWork) ->
- ?line ?t:format("~p~n", [Res]),
- ?line Relax = relax_limits(),
+ {normal, N, Nmin, _Nmax},
+ {high, H, Hmin, _Hmax},
+ {max, M, Mmin, _Mmax}] = Res,
+ LWorkers,
+ NWorkers,
+ HWorkers,
+ MWorkers,
+ LNShouldWork,
+ HShouldWork,
+ MShouldWork) ->
+ io:format("~p~n", [Res]),
+ Relax = relax_limits(),
case {L, N} of
- {0, 0} ->
- ?line false = LNShouldWork;
- _ ->
- ?line {LminRatioLim,
- NminRatioLim,
- LNRatioLimMin,
- LNRatioLimMax} = case Relax of
- false -> {0.5, 0.5, 0.05, 0.25};
- true -> {0.05, 0.05, 0.01, 0.4}
- end,
- ?line Lavg = L/LWorkers,
- ?line Navg = N/NWorkers,
- ?line Ratio = Lavg/Navg,
- ?line LminRatio = Lmin/Lavg,
- ?line NminRatio = Nmin/Navg,
- ?line ?t:format("low min ratio=~p~n"
- "normal min ratio=~p~n"
- "low avg=~p~n"
- "normal avg=~p~n"
- "low/normal ratio=~p~n",
- [LminRatio, NminRatio, Lavg, Navg, Ratio]),
- erlang:display({low_min_ratio, LminRatio}),
- erlang:display({normal_min_ratio, NminRatio}),
- erlang:display({low_avg, Lavg}),
- erlang:display({normal_avg, Navg}),
- erlang:display({low_normal_ratio, Ratio}),
- ?line chk_lim(LminRatioLim, LminRatio, 1.0, low_min_ratio),
- ?line chk_lim(NminRatioLim, NminRatio, 1.0, normal_min_ratio),
- ?line chk_lim(LNRatioLimMin, Ratio, LNRatioLimMax, low_normal_ratio),
- ?line true = LNShouldWork,
- ?line ok
+ {0, 0} ->
+ false = LNShouldWork;
+ _ ->
+ {LminRatioLim,
+ NminRatioLim,
+ LNRatioLimMin,
+ LNRatioLimMax} = case Relax of
+ false -> {0.5, 0.5, 0.05, 0.25};
+ true -> {0.05, 0.05, 0.01, 0.4}
+ end,
+ Lavg = L/LWorkers,
+ Navg = N/NWorkers,
+ Ratio = Lavg/Navg,
+ LminRatio = Lmin/Lavg,
+ NminRatio = Nmin/Navg,
+ io:format("low min ratio=~p~n"
+ "normal min ratio=~p~n"
+ "low avg=~p~n"
+ "normal avg=~p~n"
+ "low/normal ratio=~p~n",
+ [LminRatio, NminRatio, Lavg, Navg, Ratio]),
+ erlang:display({low_min_ratio, LminRatio}),
+ erlang:display({normal_min_ratio, NminRatio}),
+ erlang:display({low_avg, Lavg}),
+ erlang:display({normal_avg, Navg}),
+ erlang:display({low_normal_ratio, Ratio}),
+ chk_lim(LminRatioLim, LminRatio, 1.0, low_min_ratio),
+ chk_lim(NminRatioLim, NminRatio, 1.0, normal_min_ratio),
+ chk_lim(LNRatioLimMin, Ratio, LNRatioLimMax, low_normal_ratio),
+ true = LNShouldWork,
+ ok
end,
case H of
- 0 ->
- ?line false = HShouldWork;
- _ ->
- ?line HminRatioLim = case Relax of
- false -> 0.5;
- true -> 0.1
- end,
- ?line Havg = H/HWorkers,
- ?line HminRatio = Hmin/Havg,
- erlang:display({high_min_ratio, HminRatio}),
- ?line chk_lim(HminRatioLim, HminRatio, 1.0, high_min_ratio),
- ?line true = HShouldWork,
- ?line ok
+ 0 ->
+ false = HShouldWork;
+ _ ->
+ HminRatioLim = case Relax of
+ false -> 0.5;
+ true -> 0.1
+ end,
+ Havg = H/HWorkers,
+ HminRatio = Hmin/Havg,
+ erlang:display({high_min_ratio, HminRatio}),
+ chk_lim(HminRatioLim, HminRatio, 1.0, high_min_ratio),
+ true = HShouldWork,
+ ok
end,
case M of
- 0 ->
- ?line false = MShouldWork;
- _ ->
- ?line MminRatioLim = case Relax of
- false -> 0.5;
- true -> 0.1
- end,
- ?line Mavg = M/MWorkers,
- ?line MminRatio = Mmin/Mavg,
- erlang:display({max_min_ratio, MminRatio}),
- ?line chk_lim(MminRatioLim, MminRatio, 1.0, max_min_ratio),
- ?line true = MShouldWork,
- ?line ok
+ 0 ->
+ false = MShouldWork;
+ _ ->
+ MminRatioLim = case Relax of
+ false -> 0.5;
+ true -> 0.1
+ end,
+ Mavg = M/MWorkers,
+ MminRatio = Mmin/Mavg,
+ erlang:display({max_min_ratio, MminRatio}),
+ chk_lim(MminRatioLim, MminRatio, 1.0, max_min_ratio),
+ true = MShouldWork,
+ ok
end,
- ?line ok.
+ ok.
chk_lim(Min, V, Max, _What) when Min =< V, V =< Max ->
ok;
chk_lim(_Min, V, _Max, What) ->
- ?t:fail({bad, What, V}).
+ ct:fail({bad, What, V}).
snd(_Msg, []) ->
[];
@@ -1759,7 +1859,7 @@ snd(Msg, [P|Ps]) ->
relax_limits() ->
case strange_system_scale() of
Scale when Scale > 1 ->
- ?t:format("Relaxing limits~n", []),
+ io:format("Relaxing limits~n", []),
true;
_ ->
false
@@ -1884,8 +1984,8 @@ do_it(Tracer, Low, Normal, High, Max, RedsPerSchedLimit) ->
EndWait = erlang:monotonic_time(milli_seconds),
BalanceWait = EndWait-StartWait,
erlang:display({balance_wait, BalanceWait}),
- Timeout = ?DEFAULT_TIMEOUT - ?t:minutes(4) - BalanceWait,
- Res = case Timeout < ?MIN_SCHEDULER_TEST_TIMEOUT of
+ Timeout = (15 - 4)*60*1000 - BalanceWait,
+ Res = case Timeout < 60*1000 of
true ->
stop_work(Low, Normal, High, Max),
too_slow;
@@ -1955,55 +2055,55 @@ part_time_workers(N, Prio) ->
tracer(Low, Normal, High, Max) ->
receive
- {tracees, Prio, Tracees} ->
- save_tracees(Prio, Tracees),
- case Prio of
- low -> tracer(Tracees++Low, Normal, High, Max);
- normal -> tracer(Low, Tracees++Normal, High, Max);
- high -> tracer(Low, Normal, Tracees++High, Max);
- max -> tracer(Low, Normal, High, Tracees++Max)
- end;
- {get_result, Ref, Who} ->
- Delivered = erlang:trace_delivered(all),
- receive
- {trace_delivered, all, Delivered} ->
- ok
- end,
- {Lc, Nc, Hc, Mc} = read_trace(),
- GetMinMax
- = fun (Prio, Procs) ->
- LargeNum = 1 bsl 64,
- case lists:foldl(fun (P, {Mn, Mx} = MnMx) ->
- {Prio, C} = get(P),
- case C < Mn of
- true ->
- case C > Mx of
- true ->
- {C, C};
- false ->
- {C, Mx}
- end;
- false ->
- case C > Mx of
- true -> {Mn, C};
- false -> MnMx
- end
- end
- end,
- {LargeNum, 0},
- Procs) of
- {LargeNum, 0} -> {0, 0};
- Res -> Res
- end
- end,
- {Lmin, Lmax} = GetMinMax(low, Low),
- {Nmin, Nmax} = GetMinMax(normal, Normal),
- {Hmin, Hmax} = GetMinMax(high, High),
- {Mmin, Mmax} = GetMinMax(max, Max),
- Who ! {trace_result, Ref, [{low, Lc, Lmin, Lmax},
- {normal, Nc, Nmin, Nmax},
- {high, Hc, Hmin, Hmax},
- {max, Mc, Mmin, Mmax}]}
+ {tracees, Prio, Tracees} ->
+ save_tracees(Prio, Tracees),
+ case Prio of
+ low -> tracer(Tracees++Low, Normal, High, Max);
+ normal -> tracer(Low, Tracees++Normal, High, Max);
+ high -> tracer(Low, Normal, Tracees++High, Max);
+ max -> tracer(Low, Normal, High, Tracees++Max)
+ end;
+ {get_result, Ref, Who} ->
+ Delivered = erlang:trace_delivered(all),
+ receive
+ {trace_delivered, all, Delivered} ->
+ ok
+ end,
+ {Lc, Nc, Hc, Mc} = read_trace(),
+ GetMinMax
+ = fun (Prio, Procs) ->
+ LargeNum = 1 bsl 64,
+ case lists:foldl(fun (P, {Mn, Mx} = MnMx) ->
+ {Prio, C} = get(P),
+ case C < Mn of
+ true ->
+ case C > Mx of
+ true ->
+ {C, C};
+ false ->
+ {C, Mx}
+ end;
+ false ->
+ case C > Mx of
+ true -> {Mn, C};
+ false -> MnMx
+ end
+ end
+ end,
+ {LargeNum, 0},
+ Procs) of
+ {LargeNum, 0} -> {0, 0};
+ Res -> Res
+ end
+ end,
+ {Lmin, Lmax} = GetMinMax(low, Low),
+ {Nmin, Nmax} = GetMinMax(normal, Normal),
+ {Hmin, Hmax} = GetMinMax(high, High),
+ {Mmin, Mmax} = GetMinMax(max, Max),
+ Who ! {trace_result, Ref, [{low, Lc, Lmin, Lmax},
+ {normal, Nc, Nmin, Nmax},
+ {high, Hc, Hmin, Hmax},
+ {max, Mc, Mmin, Mmax}]}
end.
read_trace() ->
@@ -2079,15 +2179,15 @@ start_node(Config, Args) when is_list(Config) ->
Pa = filename:dirname(code:which(?MODULE)),
Name = list_to_atom(atom_to_list(?MODULE)
++ "-"
- ++ atom_to_list(?config(testcase, Config))
+ ++ atom_to_list(proplists:get_value(testcase, Config))
++ "-"
++ integer_to_list(erlang:system_time(seconds))
++ "-"
++ integer_to_list(erlang:unique_integer([positive]))),
- ?line ?t:start_node(Name, slave, [{args, "-pa "++Pa++" "++Args}]).
+ test_server:start_node(Name, slave, [{args, "-pa "++Pa++" "++Args}]).
stop_node(Node) ->
- ?t:stop_node(Node).
+ test_server:stop_node(Node).
enable_internal_state() ->
@@ -2099,7 +2199,7 @@ enable_internal_state() ->
cmp(X, X) ->
ok;
cmp(X, Y) ->
- ?t:format("cmp failed:~n X=~p~n Y=~p~n", [X,Y]),
+ io:format("cmp failed:~n X=~p~n Y=~p~n", [X,Y]),
cmp_aux(X, Y).
@@ -2111,7 +2211,7 @@ cmp_aux(T0, T1) when is_tuple(T0), is_tuple(T1), size(T0) == size(T1) ->
cmp_aux(X, X) ->
ok;
cmp_aux(F0, F1) ->
- ?t:fail({no_match, F0, F1}).
+ ct:fail({no_match, F0, F1}).
cmp_tuple(_T0, _T1, N, Sz) when N > Sz ->
ok;
diff --git a/erts/emulator/test/scheduler_SUITE_data/Makefile.src b/erts/emulator/test/scheduler_SUITE_data/Makefile.src
deleted file mode 100644
index 859112cf19..0000000000
--- a/erts/emulator/test/scheduler_SUITE_data/Makefile.src
+++ /dev/null
@@ -1,8 +0,0 @@
-
-SCHEDULER_LIBS = scheduler_SUITE@dll@
-
-all: $(SCHEDULER_LIBS)
-
-@SHLIB_RULES@
-
-$(SCHEDULER_LIBS): scheduler_SUITE.c
diff --git a/erts/emulator/test/scheduler_SUITE_data/scheduler_SUITE.c b/erts/emulator/test/scheduler_SUITE_data/scheduler_SUITE.c
deleted file mode 100644
index 022858c114..0000000000
--- a/erts/emulator/test/scheduler_SUITE_data/scheduler_SUITE.c
+++ /dev/null
@@ -1,31 +0,0 @@
-#include <unistd.h>
-#include "erl_nif.h"
-
-static int
-load(ErlNifEnv* env, void** priv, ERL_NIF_TERM info)
-{
- ErlNifSysInfo sys_info;
- enif_system_info(&sys_info, sizeof(ErlNifSysInfo));
- if (!sys_info.smp_support || !sys_info.dirty_scheduler_support)
- return 1;
- return 0;
-}
-
-static ERL_NIF_TERM
-dirty_sleeper(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
-{
-#ifdef ERL_NIF_DIRTY_SCHEDULER_SUPPORT
- sleep(3);
-#endif
- return enif_make_atom(env, "ok");
-}
-
-static ErlNifFunc funcs[] = {
-#ifdef ERL_NIF_DIRTY_SCHEDULER_SUPPORT
- {"dirty_sleeper", 0, dirty_sleeper, ERL_NIF_DIRTY_JOB_IO_BOUND}
-#else
- {"dirty_sleeper", 0, dirty_sleeper, 0}
-#endif
-};
-
-ERL_NIF_INIT(scheduler_SUITE, funcs, &load, NULL, NULL, NULL);
diff --git a/erts/emulator/test/send_term_SUITE.erl b/erts/emulator/test/send_term_SUITE.erl
index 63c11519b8..8afe4e4ac1 100644
--- a/erts/emulator/test/send_term_SUITE.erl
+++ b/erts/emulator/test/send_term_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.
@@ -20,49 +20,25 @@
-module(send_term_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/1]).
--export([init_per_testcase/2,end_per_testcase/2]).
+-export([all/0, suite/0, basic/1]).
-export([generate_external_terms_files/1]).
-include_lib("common_test/include/ct.hrl").
-init_per_testcase(Func, Config) when is_atom(Func), is_list(Config) ->
- Dog=?t:timetrap(?t:minutes(3)),
- [{watchdog, Dog}|Config].
-
-end_per_testcase(_Func, Config) ->
- Dog=?config(watchdog, Config),
- ?t:timetrap_cancel(Dog).
-
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap, {minutes, 3}}].
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(Config) when is_list(Config) ->
Drv = "send_term_drv",
- ?line P = start_driver(Config, Drv),
+ P = start_driver(Config, Drv),
- ?line [] = term(P, 0),
- ?line Self = self(),
+ [] = term(P, 0),
+ Self = self(),
{blurf,42,[],[-42,{}|"abc"++P],"kalle",3.1416,Self,#{}} = term(P, 1),
Map41 = maps:from_list([{blurf, 42},
@@ -76,36 +52,36 @@ basic(Config) when is_list(Config) ->
{3.1416, Self},
{#{}, blurf}]),
Map42 = term(P, 42),
- ?line Deep = lists:seq(0, 199),
- ?line Deep = term(P, 2),
- ?line {B1,B2} = term(P, 3),
- ?line B1 = list_to_binary(lists:seq(0, 255)),
- ?line B2 = list_to_binary(lists:seq(23, 255-17)),
+ Deep = lists:seq(0, 199),
+ Deep = term(P, 2),
+ {B1,B2} = term(P, 3),
+ B1 = list_to_binary(lists:seq(0, 255)),
+ B2 = list_to_binary(lists:seq(23, 255-17)),
%% Pid sending. We need another process.
- ?line Child = spawn_link(fun() ->
+ Child = spawn_link(fun() ->
erlang:port_command(P, [4])
end),
- ?line {Self,Child} = receive_any(),
+ {Self,Child} = receive_any(),
%% ERL_DRV_EXT2TERM
- ?line ExpectExt2Term = expected_ext2term_drv(?config(data_dir, Config)),
- ?line ExpectExt2Term = term(P, 5),
+ ExpectExt2Term = expected_ext2term_drv(proplists:get_value(data_dir, Config)),
+ ExpectExt2Term = term(P, 5),
%% ERL_DRV_INT, ERL_DRV_UINT
- ?line case erlang:system_info({wordsize, external}) of
+ case erlang:system_info({wordsize, external}) of
4 ->
- ?line {-1, 4294967295} = term(P, 6);
+ {-1, 4294967295} = term(P, 6);
8 ->
- ?line {-1, 18446744073709551615} = term(P, 6)
+ {-1, 18446744073709551615} = term(P, 6)
end,
%% ERL_DRV_BUF2BINARY
- ?line ExpectedBinTup = {<<>>,
+ ExpectedBinTup = {<<>>,
<<>>,
list_to_binary(lists:duplicate(17,17)),
list_to_binary(lists:duplicate(1024,17))},
- ?line ExpectedBinTup = term(P, 7),
+ ExpectedBinTup = term(P, 7),
%% single terms
Singles = [{[], 8}, % ERL_DRV_NIL
@@ -140,35 +116,34 @@ basic(Config) when is_list(Config) ->
{-20233590931456, 38}, % ERL_DRV_INT64
{-9223372036854775808, 39},
{#{}, 40}], % ERL_DRV_MAP
- ?line {Terms, Ops} = lists:unzip(Singles),
- ?line Terms = term(P,Ops),
+ {Terms, Ops} = lists:unzip(Singles),
+ Terms = term(P,Ops),
AFloat = term(P, 26), % ERL_DRV_FLOAT
- ?line true = AFloat < 0.001,
- ?line true = AFloat > -0.001,
+ true = AFloat < 0.001,
+ true = AFloat > -0.001,
%% Failure cases.
- ?line [] = term(P, 127),
- ?line receive
+ [] = term(P, 127),
+ receive
Any ->
- ?line io:format("Unexpected: ~p\n", [Any]),
- ?line ?t:fail()
+ ct:fail("Unexpected: ~p\n", [Any])
after 0 ->
ok
end,
- ?line ok = chk_temp_alloc(),
+ ok = chk_temp_alloc(),
%% In a private heap system, verify that there are no binaries
%% left for the process.
- ?line erlang:garbage_collect(), %Get rid of binaries.
+ erlang:garbage_collect(), %Get rid of binaries.
case erlang:system_info(heap_type) of
private ->
- ?line {binary,[]} = process_info(self(), binary);
+ {binary,[]} = process_info(self(), binary);
_ -> ok
end,
- ?line stop_driver(P, Drv),
+ stop_driver(P, Drv),
ok.
term(P, Op) ->
@@ -184,28 +159,28 @@ chk_temp_alloc() ->
case erlang:system_info({allocator,temp_alloc}) of
false ->
%% Temp alloc is not enabled
- ?line ok;
+ ok;
TIL ->
%% Verify that we havn't got anything allocated by temp_alloc
lists:foreach(
fun ({instance, _, TI}) ->
- ?line {value, {mbcs, MBCInfo}}
+ {value, {mbcs, MBCInfo}}
= lists:keysearch(mbcs, 1, TI),
- ?line {value, {blocks, 0, _, _}}
+ {value, {blocks, 0, _, _}}
= lists:keysearch(blocks, 1, MBCInfo),
- ?line {value, {sbcs, SBCInfo}}
+ {value, {sbcs, SBCInfo}}
= lists:keysearch(sbcs, 1, TI),
- ?line {value, {blocks, 0, _, _}}
+ {value, {blocks, 0, _, _}}
= lists:keysearch(blocks, 1, SBCInfo)
end,
TIL),
- ?line ok
+ ok
end.
%% Start/stop drivers.
start_driver(Config, Name) ->
- Path = ?config(data_dir, Config),
+ Path = proplists:get_value(data_dir, Config),
erl_ddll:start(),
ok = load_driver(Path, Name),
open_port({spawn, Name}, []).
@@ -219,17 +194,17 @@ load_driver(Dir, Driver) ->
end.
stop_driver(Port, Name) ->
- ?line true = erlang:port_close(Port),
+ true = erlang:port_close(Port),
receive
{Port,Message} ->
- ?t:fail({strange_message_from_port,Message})
+ ct:fail({strange_message_from_port,Message})
after 0 ->
ok
end,
%% Unload the driver.
ok = erl_ddll:unload_driver(Name),
- ?line ok = erl_ddll:stop().
+ ok = erl_ddll:stop().
get_external_terms(DataDir) ->
{ok, Bin} = file:read_file([DataDir, "ext_terms.bin"]),
@@ -261,37 +236,36 @@ generate_external_terms_files(BaseDir) ->
RPort = hd(rpc:call(Node, erlang, ports, [])),
true = is_port(RPort),
slave:stop(Node),
- Terms =
- [{4711, -4711, [an_atom, "a list"]},
- [1000000000000000000000,-1111111111111111, "blupp!", blipp],
- {RPid, {RRef, RPort}, self(), hd(erlang:ports()), make_ref()},
- {{}, [], [], fun () -> ok end, <<"hej hopp trallalaaaaaaaaaaaaaaa">>},
- [44444444444444444444444,-44444444444, "b!", blippppppp],
- {4711, RPid, {RRef, RPort}, -4711, [an_atom, "a list"]},
- {RPid, {RRef, RPort}, hd(processes()), hd(erlang:ports())},
- {4711, -4711, [an_atom, "a list"]},
- {4711, -4711, [atom, "list"]},
- {RPid, {RRef, RPort}, hd(processes()), hd(erlang:ports())},
- {4444444444444444444,-44444, {{{{{{{{{{{{}}}}}}}}}}}}, make_ref()},
- {444444444444444444444,-44444, [[[[[[[[[[[1]]]]]]]]]]], make_ref()},
- {444444444444444444,-44444, {{{{{{{{{{{{2}}}}}}}}}}}}, make_ref()},
- {4444444444444444444444,-44444, {{{{{{{{{{{{3}}}}}}}}}}}}, make_ref()},
- {44444444444444444444,-44444, {{{{{{{{{{{{4}}}}}}}}}}}}, make_ref()},
- {4444444444444444,-44444, [[[[[[[[[[[5]]]]]]]]]]], make_ref()},
- {444444444444444444444,-44444, {{{{{{{{{{{{6}}}}}}}}}}}}, make_ref()},
- {444444444444444,-44444, {{{{{{{{{{{{7}}}}}}}}}}}}, make_ref()},
- {4444444444444444444,-44444, {{{{{{{{{{{{8}}}}}}}}}}}}, make_ref()},
- #{},
- #{1 => 11, 2 => 22, 3 => 33},
- maps:from_list([{K,K*11} || K <- lists:seq(1,100)])],
+ Terms = [{4711, -4711, [an_atom, "a list"]},
+ [1000000000000000000000,-1111111111111111, "blupp!", blipp],
+ {RPid, {RRef, RPort}, self(), hd(erlang:ports()), make_ref()},
+ {{}, [], [], fun () -> ok end, <<"hej hopp trallalaaaaaaaaaaaaaaa">>},
+ [44444444444444444444444,-44444444444, "b!", blippppppp],
+ {4711, RPid, {RRef, RPort}, -4711, [an_atom, "a list"]},
+ {RPid, {RRef, RPort}, hd(processes()), hd(erlang:ports())},
+ {4711, -4711, [an_atom, "a list"]},
+ {4711, -4711, [atom, "list"]},
+ {RPid, {RRef, RPort}, hd(processes()), hd(erlang:ports())},
+ {4444444444444444444,-44444, {{{{{{{{{{{{}}}}}}}}}}}}, make_ref()},
+ {444444444444444444444,-44444, [[[[[[[[[[[1]]]]]]]]]]], make_ref()},
+ {444444444444444444,-44444, {{{{{{{{{{{{2}}}}}}}}}}}}, make_ref()},
+ {4444444444444444444444,-44444, {{{{{{{{{{{{3}}}}}}}}}}}}, make_ref()},
+ {44444444444444444444,-44444, {{{{{{{{{{{{4}}}}}}}}}}}}, make_ref()},
+ {4444444444444444,-44444, [[[[[[[[[[[5]]]]]]]]]]], make_ref()},
+ {444444444444444444444,-44444, {{{{{{{{{{{{6}}}}}}}}}}}}, make_ref()},
+ {444444444444444,-44444, {{{{{{{{{{{{7}}}}}}}}}}}}, make_ref()},
+ {4444444444444444444,-44444, {{{{{{{{{{{{8}}}}}}}}}}}}, make_ref()},
+ #{},
+ #{1 => 11, 2 => 22, 3 => 33},
+ maps:from_list([{K,K*11} || K <- lists:seq(1,100)])],
ok = file:write_file(filename:join([BaseDir,
- "send_term_SUITE_data",
- "ext_terms.bin"]),
- term_to_binary(Terms, [compressed])),
+ "send_term_SUITE_data",
+ "ext_terms.bin"]),
+ term_to_binary(Terms, [compressed])),
{ok, IoDev} = file:open(filename:join([BaseDir,
- "send_term_SUITE_data",
- "ext_terms.h"]),
- [write]),
+ "send_term_SUITE_data",
+ "ext_terms.h"]),
+ [write]),
write_ext_terms_h(IoDev, Terms),
file:close(IoDev).
@@ -301,12 +275,12 @@ write_ext_terms_h(IoDev, Terms) ->
io:format(IoDev, "#define EXT_TERMS_H__~n",[]),
{ExtTerms, MaxSize} = make_ext_terms(Terms),
io:format(IoDev,
- "static struct {~n"
- " unsigned char ext[~p];~n"
- " int ext_size;~n"
- " unsigned char cext[~p];~n"
- " int cext_size;~n"
- "} ext_terms[] = {~n",[MaxSize, MaxSize]),
+ "static struct {~n"
+ " unsigned char ext[~p];~n"
+ " int ext_size;~n"
+ " unsigned char cext[~p];~n"
+ " int cext_size;~n"
+ "} ext_terms[] = {~n",[MaxSize, MaxSize]),
E = write_ext_terms_h(IoDev, ExtTerms, 0),
io:format(IoDev, "};~n",[]),
io:format(IoDev, "#define NO_OF_EXT_TERMS ~p~n", [E]),
diff --git a/erts/emulator/test/sensitive_SUITE.erl b/erts/emulator/test/sensitive_SUITE.erl
index 29517cdcb8..c3e303bbd1 100644
--- a/erts/emulator/test/sensitive_SUITE.erl
+++ b/erts/emulator/test/sensitive_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.
@@ -22,26 +22,18 @@
-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,
- stickiness/1,send_trace/1,recv_trace/1,proc_trace/1,call_trace/1,
- meta_trace/1,running_trace/1,gc_trace/1,seq_trace/1,
- t_process_info/1,t_process_display/1,save_calls/1]).
+-export([all/0, suite/0,
+ stickiness/1,send_trace/1,recv_trace/1,proc_trace/1,call_trace/1,
+ meta_trace/1,running_trace/1,gc_trace/1,seq_trace/1,
+ t_process_info/1,t_process_display/1,save_calls/1]).
-export([remote_process_display/0,an_exported_function/1]).
-import(lists, [keysearch/3,foreach/2,sort/1]).
-init_per_testcase(Func, Config) when is_atom(Func), is_list(Config) ->
- Dog = ?t:timetrap(?t:minutes(5)),
- [{watchdog,Dog}|Config].
-
-end_per_testcase(Func, Config) when is_atom(Func), is_list(Config) ->
- Dog = ?config(watchdog, Config),
- ?t:timetrap_cancel(Dog).
-
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap, {minutes, 5}}].
all() ->
[stickiness, send_trace, recv_trace, proc_trace,
@@ -49,164 +41,148 @@ all() ->
seq_trace, t_process_info, t_process_display,
save_calls].
-groups() ->
- [].
-
-init_per_suite(Config) ->
- Config.
-
-end_per_suite(_Config) ->
- ok.
-
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
-
-
stickiness(Config) when is_list(Config) ->
- ?line {Tracer,Mref} = spawn_monitor(fun() ->
- receive after infinity -> ok end
- end),
- ?line false = process_flag(sensitive, true),
+ {Tracer,Mref} = spawn_monitor(fun() ->
+ receive after infinity -> ok end
+ end),
+ false = process_flag(sensitive, true),
put(foo, bar),
Flags = sort([send,'receive',procs,call,running,garbage_collection,
- set_on_spawn,set_on_first_spawn,set_on_link,set_on_first_link]),
- ?line foreach(fun(F) ->
- 1 = erlang:trace(self(), true, [F,{tracer,Tracer}])
- end, Flags),
- ?line foreach(fun(F) ->
- 1 = erlang:trace(self(), false, [F,{tracer,Tracer}])
- end, Flags),
- ?line 1 = erlang:trace(self(), true, [{tracer,Tracer}|Flags]),
- ?line 1 = erlang:trace(self(), false, [{tracer,Tracer}|Flags]),
-
- ?line {messages,[]} = process_info(Tracer, messages),
+ set_on_spawn,set_on_first_spawn,set_on_link,set_on_first_link]),
+ foreach(fun(F) ->
+ 1 = erlang:trace(self(), true, [F,{tracer,Tracer}])
+ end, Flags),
+ foreach(fun(F) ->
+ 1 = erlang:trace(self(), false, [F,{tracer,Tracer}])
+ end, Flags),
+ 1 = erlang:trace(self(), true, [{tracer,Tracer}|Flags]),
+ 1 = erlang:trace(self(), false, [{tracer,Tracer}|Flags]),
+
+ {messages,[]} = process_info(Tracer, messages),
exit(Tracer, kill),
receive {'DOWN',Mref,_,_,_} -> ok end,
-
+
case process_info(self(), dictionary) of
- {dictionary,[]} -> ok;
- {dictionary,_} -> ?line ?t:fail(sensitive_flag_cleared)
+ {dictionary,[]} -> ok;
+ {dictionary,_} -> ct:fail(sensitive_flag_cleared)
end,
NewTracer = spawn_link(fun() -> receive after infinity -> ok end end),
- ?line 1 = erlang:trace(self(), true, [{tracer,NewTracer}|Flags]),
- ?line Flags = sort(element(2, erlang:trace_info(self(), flags))),
- ?line {tracer,NewTracer} = erlang:trace_info(self(), tracer),
+ 1 = erlang:trace(self(), true, [{tracer,NewTracer}|Flags]),
+ Flags = sort(element(2, erlang:trace_info(self(), flags))),
+ {tracer,NewTracer} = erlang:trace_info(self(), tracer),
%% Process still sensitive. Tracer should disappear when we clear
%% all trace flags.
- ?line 1 = erlang:trace(self(), false, [{tracer,NewTracer}|Flags]),
- ?line {tracer,[]} = erlang:trace_info(self(), tracer),
+ 1 = erlang:trace(self(), false, [{tracer,NewTracer}|Flags]),
+ {tracer,[]} = erlang:trace_info(self(), tracer),
- ?line unlink(NewTracer), exit(NewTracer, kill),
+ unlink(NewTracer), exit(NewTracer, kill),
ok.
send_trace(Config) when is_list(Config) ->
- ?line {Dead,Mref} = spawn_monitor(fun() -> ok end),
+ {Dead,Mref} = spawn_monitor(fun() -> ok end),
receive {'DOWN',Mref,_,_,_} -> ok end,
- ?line Tracer = spawn_link(fun() -> receive after infinity -> ok end end),
- ?line Sink = spawn_link(fun() -> receive after infinity -> ok end end),
+ Tracer = spawn_link(fun() -> receive after infinity -> ok end end),
+ Sink = spawn_link(fun() -> receive after infinity -> ok end end),
Self = self(),
- ?line 1 = erlang:trace(self(), true, [send,{tracer,Tracer}]),
- ?line Dead ! before,
- ?line Sink ! before,
- ?line false = process_flag(sensitive, true),
- ?line Sink ! {blurf,lists:seq(1, 50)},
- ?line true = process_flag(sensitive, true),
- ?line Sink ! lists:seq(1, 100),
- ?line Dead ! forget_me,
- ?line true = process_flag(sensitive, false),
- ?line Sink ! after1,
- ?line false = process_flag(sensitive, false),
- ?line Sink ! after2,
- ?line Dead ! after2,
- ?line wait_trace(Self),
-
- ?line {messages,Messages} = process_info(Tracer, messages),
- ?line [{trace,Self,send_to_non_existing_process,before,Dead},
- {trace,Self,send,before,Sink},
- {trace,Self,send,after1,Sink},
- {trace,Self,send,after2,Sink},
- {trace,Self,send_to_non_existing_process,after2,Dead}] = Messages,
-
- ?line unlink(Tracer), exit(Tracer, kill),
- ?line unlink(Sink), exit(Sink, kill),
+ 1 = erlang:trace(self(), true, [send,{tracer,Tracer}]),
+ Dead ! before,
+ Sink ! before,
+ false = process_flag(sensitive, true),
+ Sink ! {blurf,lists:seq(1, 50)},
+ true = process_flag(sensitive, true),
+ Sink ! lists:seq(1, 100),
+ Dead ! forget_me,
+ true = process_flag(sensitive, false),
+ Sink ! after1,
+ false = process_flag(sensitive, false),
+ Sink ! after2,
+ Dead ! after2,
+ wait_trace(Self),
+
+ {messages,Messages} = process_info(Tracer, messages),
+ [{trace,Self,send_to_non_existing_process,before,Dead},
+ {trace,Self,send,before,Sink},
+ {trace,Self,send,after1,Sink},
+ {trace,Self,send,after2,Sink},
+ {trace,Self,send_to_non_existing_process,after2,Dead}] = Messages,
+
+ unlink(Tracer), exit(Tracer, kill),
+ unlink(Sink), exit(Sink, kill),
ok.
recv_trace(Config) when is_list(Config) ->
Parent = self(),
- ?line Tracer = spawn_link(fun() -> receive after infinity -> ok end end),
- ?line Sender = spawn_link(fun() -> recv_trace_sender(Parent) end),
+ Tracer = spawn_link(fun() -> receive after infinity -> ok end end),
+ Sender = spawn_link(fun() -> recv_trace_sender(Parent) end),
- ?line 1 = erlang:trace(self(), true, ['receive',{tracer,Tracer}]),
+ 1 = erlang:trace(self(), true, ['receive',{tracer,Tracer}]),
Sender ! 1,
receive a -> wait_trace(Sender) end,
- ?line false = process_flag(sensitive, true),
+ false = process_flag(sensitive, true),
Sender ! 2,
receive {b,[x,y,z]} -> wait_trace(Sender) end,
-
- ?line true = process_flag(sensitive, false),
+
+ true = process_flag(sensitive, false),
Sender ! 3,
receive c -> wait_trace(Sender) end,
-
- ?line {messages,Messages} = process_info(Tracer, messages),
+
+ {messages,Messages} = process_info(Tracer, messages),
[{trace,Parent,'receive',a},
{trace,Parent,'receive',{trace_delivered,_,_}},
{trace,Parent,'receive',c}|_] = Messages,
- ?line unlink(Tracer), exit(Tracer, kill),
- ?line unlink(Sender), exit(Sender, kill),
+ unlink(Tracer), exit(Tracer, kill),
+ unlink(Sender), exit(Sender, kill),
ok.
recv_trace_sender(Pid) ->
receive
- 1 -> Pid ! a;
- 2 -> Pid ! {b,[x,y,z]};
- 3 -> Pid ! c
+ 1 -> Pid ! a;
+ 2 -> Pid ! {b,[x,y,z]};
+ 3 -> Pid ! c
end,
recv_trace_sender(Pid).
proc_trace(Config) when is_list(Config) ->
Self = self(),
- ?line Tracer = spawn_link(fun() -> receive after infinity -> ok end end),
+ Tracer = spawn_link(fun() -> receive after infinity -> ok end end),
- ?line 1 = erlang:trace(self(), true, [procs,{tracer,Tracer}]),
- ?line false = process_flag(sensitive, true),
+ 1 = erlang:trace(self(), true, [procs,{tracer,Tracer}]),
+ false = process_flag(sensitive, true),
spawn(fun() -> ok end),
- ?line register(nisse, self()),
- ?line unregister(nisse),
- ?line link(Tracer),
- ?line unlink(Tracer),
- ?line Linker0 = spawn_link(fun() -> ok end),
+ register(nisse, self()),
+ unregister(nisse),
+ link(Tracer),
+ unlink(Tracer),
+ Linker0 = spawn_link(fun() -> ok end),
Mref0 = erlang:monitor(process, Linker0),
- ?line {_,Mref} = spawn_monitor(fun() -> link(Self), unlink(Self) end),
+ {_,Mref} = spawn_monitor(fun() -> link(Self), unlink(Self) end),
receive {'DOWN',Mref0,_,_,_} -> ok end,
receive {'DOWN',Mref,_,_,_} -> ok end,
- ?line true = process_flag(sensitive, false),
+ true = process_flag(sensitive, false),
Dead = spawn(fun() -> ok end),
- ?line register(arne, self()),
- ?line unregister(arne),
- ?line {Linker,Mref2} = spawn_monitor(fun() -> link(Self), unlink(Self) end),
+ register(arne, self()),
+ unregister(arne),
+ {Linker,Mref2} = spawn_monitor(fun() -> link(Self), unlink(Self) end),
receive {'DOWN',Mref2,_,_,_} -> ok end,
- ?line Last = spawn_link(fun() -> ok end),
+ Last = spawn_link(fun() -> ok end),
receive after 10 -> ok end,
- ?line wait_trace(all),
- ?line {messages,Messages} = process_info(Tracer, messages),
+ wait_trace(all),
+ {messages,Messages} = process_info(Tracer, messages),
[{trace,Self,spawn,Dead,{erlang,apply,_}},
{trace,Self,register,arne},
{trace,Self,unregister,arne},
@@ -217,80 +193,80 @@ proc_trace(Config) when is_list(Config) ->
{trace,Self,link,Last},
{trace,Self,getting_unlinked,Last}] = Messages,
- ?line unlink(Tracer), exit(Tracer, kill),
+ unlink(Tracer), exit(Tracer, kill),
ok.
call_trace(Config) when is_list(Config) ->
Self = self(),
- ?line Tracer = spawn_link(fun() -> receive after infinity -> ok end end),
-
- ?line 1 = erlang:trace(self(), true, [call,{tracer,Tracer}]),
- ?line 1 = erlang:trace_pattern({?MODULE,an_exported_function,1},
- true, [global]),
- ?line 1 = erlang:trace_pattern({erlang,list_to_binary,1}, true, [global]),
- ?line 1 = erlang:trace_pattern({erlang,binary_to_list,1}, true, [local]),
- ?line Local = erlang:trace_pattern({?MODULE,'_','_'}, true, [local]),
-
- ?line false = process_flag(sensitive, true),
- ?line {ok,42} = a_local_function(42),
- ?line 7 = an_exported_function(6),
- ?line <<7,8,9,10>> = list_to_binary(id([7,8,9,10])),
- ?line [42,43] = binary_to_list(id(<<42,43>>)),
- ?line true = process_flag(sensitive, false),
-
- ?line {ok,{a,b}} = a_local_function({a,b}),
- ?line 1 = an_exported_function(0),
- ?line <<1,2,3>> = list_to_binary(id([1,2,3])),
- ?line [42,43,44] = binary_to_list(id(<<42,43,44>>)),
-
- ?line wait_trace(Self),
-
- ?line {messages,Messages} = process_info(Tracer, messages),
- ?line [{trace,Self,call,{?MODULE,a_local_function,[{a,b}]}},
- {trace,Self,call,{?MODULE,an_exported_function,[0]}},
- {trace,Self,call,{?MODULE,id,[_]}},
- {trace,Self,call,{erlang,list_to_binary,[[1,2,3]]}},
- {trace,Self,call,{sensitive_SUITE,id,[<<42,43,44>>]}},
- {trace,Self,call,{erlang,binary_to_list,[<<42,43,44>>]}},
- {trace,Self,call,{?MODULE,wait_trace,[Self]}}] = Messages,
-
- ?line Local = erlang:trace_pattern({?MODULE,'_','_'}, false, [local]),
- ?line erlang:trace_pattern({erlang,'_','_'}, false, [local]),
- ?line erlang:trace_pattern({'_','_','_'}, false, [global]),
-
- ?line unlink(Tracer), exit(Tracer, kill),
+ Tracer = spawn_link(fun() -> receive after infinity -> ok end end),
+
+ 1 = erlang:trace(self(), true, [call,{tracer,Tracer}]),
+ 1 = erlang:trace_pattern({?MODULE,an_exported_function,1},
+ true, [global]),
+ 1 = erlang:trace_pattern({erlang,list_to_binary,1}, true, [global]),
+ 1 = erlang:trace_pattern({erlang,binary_to_list,1}, true, [local]),
+ Local = erlang:trace_pattern({?MODULE,'_','_'}, true, [local]),
+
+ false = process_flag(sensitive, true),
+ {ok,42} = a_local_function(42),
+ 7 = an_exported_function(6),
+ <<7,8,9,10>> = list_to_binary(id([7,8,9,10])),
+ [42,43] = binary_to_list(id(<<42,43>>)),
+ true = process_flag(sensitive, false),
+
+ {ok,{a,b}} = a_local_function({a,b}),
+ 1 = an_exported_function(0),
+ <<1,2,3>> = list_to_binary(id([1,2,3])),
+ [42,43,44] = binary_to_list(id(<<42,43,44>>)),
+
+ wait_trace(Self),
+
+ {messages,Messages} = process_info(Tracer, messages),
+ [{trace,Self,call,{?MODULE,a_local_function,[{a,b}]}},
+ {trace,Self,call,{?MODULE,an_exported_function,[0]}},
+ {trace,Self,call,{?MODULE,id,[_]}},
+ {trace,Self,call,{erlang,list_to_binary,[[1,2,3]]}},
+ {trace,Self,call,{sensitive_SUITE,id,[<<42,43,44>>]}},
+ {trace,Self,call,{erlang,binary_to_list,[<<42,43,44>>]}},
+ {trace,Self,call,{?MODULE,wait_trace,[Self]}}] = Messages,
+
+ Local = erlang:trace_pattern({?MODULE,'_','_'}, false, [local]),
+ erlang:trace_pattern({erlang,'_','_'}, false, [local]),
+ erlang:trace_pattern({'_','_','_'}, false, [global]),
+
+ unlink(Tracer), exit(Tracer, kill),
ok.
meta_trace(Config) when is_list(Config) ->
Self = self(),
- ?line Tracer = spawn_link(fun() -> receive after infinity -> ok end end),
-
- ?line Local = erlang:trace_pattern({?MODULE,'_','_'}, true, [{meta,Tracer}]),
- ?line 1 = erlang:trace_pattern({erlang,list_to_binary,1}, true, [{meta,Tracer}]),
-
- ?line false = process_flag(sensitive, true),
- ?line {ok,blurf} = a_local_function(blurf),
- ?line 100 = an_exported_function(99),
- ?line <<8,9,10>> = list_to_binary(id([8,9,10])),
- ?line true = process_flag(sensitive, false),
-
- ?line {ok,{x,y}} = a_local_function({x,y}),
- ?line 1 = an_exported_function(0),
- ?line <<10>> = list_to_binary(id([10])),
- ?line wait_trace(Self),
-
- ?line Local = erlang:trace_pattern({?MODULE,'_','_'}, false, [meta]),
- ?line 1 = erlang:trace_pattern({erlang,list_to_binary,1}, false, [meta]),
- ?line a_local_function(0),
-
- ?line {messages,Messages} = process_info(Tracer, messages),
- ?line [{trace_ts,Self,call,{?MODULE,a_local_function,[{x,y}]},{_,_,_}},
- {trace_ts,Self,call,{?MODULE,an_exported_function,[0]},{_,_,_}},
- {trace_ts,Self,call,{?MODULE,id,[_]},{_,_,_}},
- {trace_ts,Self,call,{erlang,list_to_binary,[[10]]},{_,_,_}},
- {trace_ts,Self,call,{?MODULE,wait_trace,[Self]},{_,_,_}}] = Messages,
-
- ?line unlink(Tracer), exit(Tracer, kill),
+ Tracer = spawn_link(fun() -> receive after infinity -> ok end end),
+
+ Local = erlang:trace_pattern({?MODULE,'_','_'}, true, [{meta,Tracer}]),
+ 1 = erlang:trace_pattern({erlang,list_to_binary,1}, true, [{meta,Tracer}]),
+
+ false = process_flag(sensitive, true),
+ {ok,blurf} = a_local_function(blurf),
+ 100 = an_exported_function(99),
+ <<8,9,10>> = list_to_binary(id([8,9,10])),
+ true = process_flag(sensitive, false),
+
+ {ok,{x,y}} = a_local_function({x,y}),
+ 1 = an_exported_function(0),
+ <<10>> = list_to_binary(id([10])),
+ wait_trace(Self),
+
+ Local = erlang:trace_pattern({?MODULE,'_','_'}, false, [meta]),
+ 1 = erlang:trace_pattern({erlang,list_to_binary,1}, false, [meta]),
+ a_local_function(0),
+
+ {messages,Messages} = process_info(Tracer, messages),
+ [{trace_ts,Self,call,{?MODULE,a_local_function,[{x,y}]},{_,_,_}},
+ {trace_ts,Self,call,{?MODULE,an_exported_function,[0]},{_,_,_}},
+ {trace_ts,Self,call,{?MODULE,id,[_]},{_,_,_}},
+ {trace_ts,Self,call,{erlang,list_to_binary,[[10]]},{_,_,_}},
+ {trace_ts,Self,call,{?MODULE,wait_trace,[Self]},{_,_,_}}] = Messages,
+
+ unlink(Tracer), exit(Tracer, kill),
ok.
a_local_function(A) ->
@@ -301,66 +277,66 @@ an_exported_function(X) ->
running_trace(Config) when is_list(Config) ->
Self = self(),
- ?line Tracer = spawn_link(fun() -> receive after infinity -> ok end end),
+ Tracer = spawn_link(fun() -> receive after infinity -> ok end end),
- ?line false = process_flag(sensitive, true),
- ?line 1 = erlang:trace(Self, true, [running,{tracer,Tracer}]),
+ false = process_flag(sensitive, true),
+ 1 = erlang:trace(Self, true, [running,{tracer,Tracer}]),
erlang:yield(), erlang:yield(), erlang:yield(), erlang:yield(),
erlang:yield(), erlang:yield(), erlang:yield(), erlang:yield(),
- ?line true = process_flag(sensitive, false),
+ true = process_flag(sensitive, false),
erlang:yield(),
- ?line 1 = erlang:trace(Self, false, [running,{tracer,Tracer}]),
+ 1 = erlang:trace(Self, false, [running,{tracer,Tracer}]),
- ?line wait_trace(Self),
- ?line {messages,Messages} = process_info(Tracer, messages),
- ?line [{trace,Self,out,{sensitive_SUITE,running_trace,1}},
- {trace,Self,in,{sensitive_SUITE,running_trace,1}}] = Messages,
+ wait_trace(Self),
+ {messages,Messages} = process_info(Tracer, messages),
+ [{trace,Self,out,{sensitive_SUITE,running_trace,1}},
+ {trace,Self,in,{sensitive_SUITE,running_trace,1}}] = Messages,
- ?line unlink(Tracer), exit(Tracer, kill),
+ unlink(Tracer), exit(Tracer, kill),
ok.
gc_trace(Config) when is_list(Config) ->
Self = self(),
- ?line Tracer = spawn_link(fun() -> receive after infinity -> ok end end),
+ Tracer = spawn_link(fun() -> receive after infinity -> ok end end),
- ?line false = process_flag(sensitive, true),
- ?line 1 = erlang:trace(Self, true, [garbage_collection,{tracer,Tracer}]),
+ false = process_flag(sensitive, true),
+ 1 = erlang:trace(Self, true, [garbage_collection,{tracer,Tracer}]),
erlang:garbage_collect(), erlang:garbage_collect(),
erlang:garbage_collect(), erlang:garbage_collect(),
erlang:garbage_collect(), erlang:garbage_collect(),
erlang:garbage_collect(), erlang:garbage_collect(),
- ?line true = process_flag(sensitive, false),
+ true = process_flag(sensitive, false),
erlang:garbage_collect(),
- ?line 1 = erlang:trace(Self, false, [garbage_collection,{tracer,Tracer}]),
+ 1 = erlang:trace(Self, false, [garbage_collection,{tracer,Tracer}]),
- ?line wait_trace(Self),
- ?line {messages,Messages} = process_info(Tracer, messages),
- ?line [{trace,Self,gc_start,_},{trace,Self,gc_end,_}] = Messages,
+ wait_trace(Self),
+ {messages,Messages} = process_info(Tracer, messages),
+ [{trace,Self,gc_major_start,_},{trace,Self,gc_major_end,_}] = Messages,
- ?line unlink(Tracer), exit(Tracer, kill),
+ unlink(Tracer), exit(Tracer, kill),
ok.
seq_trace(Config) when is_list(Config) ->
Self = self(),
- ?line Tracer = spawn_link(fun() -> receive after infinity -> ok end end),
- ?line seq_trace:set_system_tracer(Tracer),
-
- ?line false = process_flag(sensitive, true),
-
- ?line Echo = spawn_link(fun() ->
- receive
- {Pid,Message} ->
- Pid ! {reply,Message}
- end
- end),
- ?line Sender = spawn_link(fun() ->
- seq_trace:set_token(label, 42),
- seq_trace:set_token('receive', true),
- seq_trace:set_token(send, true),
- seq_trace:set_token(print, true),
- seq_trace:print(42, "trace started"),
- Self ! blurf
- end),
+ Tracer = spawn_link(fun() -> receive after infinity -> ok end end),
+ seq_trace:set_system_tracer(Tracer),
+
+ false = process_flag(sensitive, true),
+
+ Echo = spawn_link(fun() ->
+ receive
+ {Pid,Message} ->
+ Pid ! {reply,Message}
+ end
+ end),
+ Sender = spawn_link(fun() ->
+ seq_trace:set_token(label, 42),
+ seq_trace:set_token('receive', true),
+ seq_trace:set_token(send, true),
+ seq_trace:set_token(print, true),
+ seq_trace:print(42, "trace started"),
+ Self ! blurf
+ end),
seq_trace:set_token(label, 17),
seq_trace:set_token('receive', true),
seq_trace:set_token(send, true),
@@ -370,49 +346,49 @@ seq_trace(Config) when is_list(Config) ->
receive {reply,hello} -> ok end,
receive blurf -> ok end,
- ?line wait_trace(all),
+ wait_trace(all),
+
+ {messages,Messages} = process_info(Tracer, messages),
+ [{seq_trace,17,{'receive',{0,2},Self,Echo,{Self,hello}}},
+ {seq_trace,17,{send,{2,3},Echo,Self,{reply,hello}}}] =
+ [M || {seq_trace,17,_}=M <- Messages],
- ?line {messages,Messages} = process_info(Tracer, messages),
- ?line [{seq_trace,17,{'receive',{0,2},Self,Echo,{Self,hello}}},
- {seq_trace,17,{send,{2,3},Echo,Self,{reply,hello}}}] =
- [M || {seq_trace,17,_}=M <- Messages],
+ [{seq_trace,42,{print,{0,1},Sender,[],"trace started"}},
+ {seq_trace,42,{send,{0,2},Sender,Self,blurf}}] =
+ [M || {seq_trace,42,_}=M <- Messages],
- ?line [{seq_trace,42,{print,{0,1},Sender,[],"trace started"}},
- {seq_trace,42,{send,{0,2},Sender,Self,blurf}}] =
- [M || {seq_trace,42,_}=M <- Messages],
-
- ?line unlink(Tracer), exit(Tracer, kill),
- ?line unlink(Echo), exit(Echo, kill),
- ?line unlink(Sender), exit(Sender, kill),
+ unlink(Tracer), exit(Tracer, kill),
+ unlink(Echo), exit(Echo, kill),
+ unlink(Sender), exit(Sender, kill),
ok.
t_process_info(Config) when is_list(Config) ->
Parent = self(),
- ?line Pid = spawn_link(fun() ->
- put(foo, bar),
- false = process_flag(sensitive, true),
- Parent ! go,
- receive
- revert ->
- true = process_flag(sensitive, false),
- Parent ! go_again,
- receive never -> ok end
- end end),
+ Pid = spawn_link(fun() ->
+ put(foo, bar),
+ false = process_flag(sensitive, true),
+ Parent ! go,
+ receive
+ revert ->
+ true = process_flag(sensitive, false),
+ Parent ! go_again,
+ receive never -> ok end
+ end end),
receive go -> ok end,
- ?line put(foo, bar),
- ?line self() ! Pid ! {i,am,a,message},
+ put(foo, bar),
+ self() ! Pid ! {i,am,a,message},
- ?line false = process_flag(sensitive, true),
- ?line t_process_info_suppressed(self()),
- ?line t_process_info_suppressed(Pid),
+ false = process_flag(sensitive, true),
+ t_process_info_suppressed(self()),
+ t_process_info_suppressed(Pid),
- ?line true = process_flag(sensitive, false),
+ true = process_flag(sensitive, false),
Pid ! revert,
receive go_again -> ok end,
- ?line t_process_info_normal(self()),
- ?line t_process_info_normal(Pid),
+ t_process_info_normal(self()),
+ t_process_info_normal(Pid),
ok.
t_process_info_suppressed(Pid) ->
@@ -423,7 +399,7 @@ t_process_info_suppressed(Pid) ->
t_process_info_normal(Pid) ->
{value,{foo,bar}} = keysearch(foo, 1, my_process_info(Pid, dictionary)),
case process_info(Pid, backtrace) of
- {backtrace,Bin} when size(Bin) > 20 -> ok
+ {backtrace,Bin} when size(Bin) > 20 -> ok
end,
[{i,am,a,message}] = my_process_info(Pid, messages).
@@ -431,16 +407,16 @@ my_process_info(Pid, Tag) ->
{Tag,Value} = process_info(Pid, Tag),
All = process_info(Pid),
case keysearch(Tag, 1, All) of
- false -> Value;
- {value,{Tag,Value}} -> Value
+ false -> Value;
+ {value,{Tag,Value}} -> Value
end.
t_process_display(Config) when is_list(Config) ->
- ?line Dir = filename:dirname(code:which(?MODULE)),
- ?line Cmd = atom_to_list(lib:progname()) ++ " -noinput -pa " ++ Dir ++
- " -run " ++ ?MODULE_STRING ++ " remote_process_display",
- ?line io:put_chars(Cmd),
- ?line P = open_port({spawn,Cmd}, [in,stderr_to_stdout,eof]),
+ Dir = filename:dirname(code:which(?MODULE)),
+ Cmd = atom_to_list(lib:progname()) ++ " -noinput -pa " ++ Dir ++
+ " -run " ++ ?MODULE_STRING ++ " remote_process_display",
+ io:put_chars(Cmd),
+ P = open_port({spawn,Cmd}, [in,stderr_to_stdout,eof]),
<<"done",_/binary>> = get_all(P),
ok.
@@ -456,27 +432,26 @@ get_all(P) ->
get_all(P, Acc) ->
receive
- {P,{data,S}} ->
- get_all(P, [Acc|S]);
- {P,eof} ->
- iolist_to_binary(Acc)
+ {P,{data,S}} ->
+ get_all(P, [Acc|S]);
+ {P,eof} ->
+ iolist_to_binary(Acc)
end.
save_calls(Config) when is_list(Config) ->
process_flag(save_calls, 10),
false = process_flag(sensitive, true),
- ?line {last_calls,LastCalls} = process_info(self(), last_calls),
- ?line [{erlang,process_flag,2}] = LastCalls,
- ?line [2,4,6] = lists:map(fun(E) -> 2*E end, [1,2,3]),
- ?line {last_calls,LastCalls} = process_info(self(), last_calls),
+ {last_calls,LastCalls} = process_info(self(), last_calls),
+ [{erlang,process_flag,2}] = LastCalls,
+ [2,4,6] = lists:map(fun(E) -> 2*E end, [1,2,3]),
+ {last_calls,LastCalls} = process_info(self(), last_calls),
ok.
wait_trace(Pid) ->
Ref = erlang:trace_delivered(Pid),
receive
- {trace_delivered,Pid,Ref} -> ok
+ {trace_delivered,Pid,Ref} -> ok
end.
-
+
id(I) -> I.
-
diff --git a/erts/emulator/test/signal_SUITE.erl b/erts/emulator/test/signal_SUITE.erl
index e176fe52d6..0b11fa13f5 100644
--- a/erts/emulator/test/signal_SUITE.erl
+++ b/erts/emulator/test/signal_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.
@@ -28,12 +28,10 @@
-module(signal_SUITE).
-author('[email protected]').
--define(DEFAULT_TIMEOUT_SECONDS, 120).
-
%-define(line_trace, 1).
-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([all/0, suite/0,init_per_suite/1, end_per_suite/1]).
+-export([init_per_testcase/2, end_per_testcase/2]).
% Test cases
-export([xm_sig_order/1,
@@ -51,16 +49,12 @@
pending_exit_group_leader/1,
exit_before_pending_exit/1]).
--export([init_per_testcase/2, end_per_testcase/2]).
-
init_per_testcase(Func, Config) when is_atom(Func), is_list(Config) ->
- ?line Dog = ?t:timetrap(?t:seconds(?DEFAULT_TIMEOUT_SECONDS)),
available_internal_state(true),
- ?line [{testcase, Func},{watchdog, Dog}|Config].
+ [{testcase, Func}|Config].
end_per_testcase(_Func, Config) ->
- ?line Dog = ?config(watchdog, Config),
- ?line ?t:timetrap_cancel(Dog).
+ ok.
init_per_suite(Config) ->
Config.
@@ -70,7 +64,9 @@ end_per_suite(_Config) ->
catch erts_debug:set_internal_state(not_running_optimization, true),
available_internal_state(false).
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap, {minutes, 2}}].
all() ->
[xm_sig_order, pending_exit_unlink_process,
@@ -83,41 +79,30 @@ all() ->
pending_exit_process_info_2, pending_exit_group_leader,
exit_before_pending_exit].
-groups() ->
- [].
-
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
-
-xm_sig_order(doc) -> ["Test that exit signals and messages are received "
- "in correct order"];
-xm_sig_order(suite) -> [];
+%% Test that exit signals and messages are received in correct order
xm_sig_order(Config) when is_list(Config) ->
- ?line LNode = node(),
- ?line repeat(fun () -> xm_sig_order_test(LNode) end, 1000),
- ?line {ok, RNode} = start_node(Config),
- ?line repeat(fun () -> xm_sig_order_test(RNode) end, 1000),
- ?line stop_node(RNode),
- ?line ok.
+ LNode = node(),
+ repeat(fun () -> xm_sig_order_test(LNode) end, 1000),
+ {ok, RNode} = start_node(Config),
+ repeat(fun () -> xm_sig_order_test(RNode) end, 1000),
+ stop_node(RNode),
+ ok.
xm_sig_order_test(Node) ->
- ?line P = spawn(Node, fun () -> xm_sig_order_proc() end),
- ?line M = erlang:monitor(process, P),
- ?line P ! may_reach,
- ?line P ! may_reach,
- ?line P ! may_reach,
- ?line exit(P, good_signal_order),
- ?line P ! may_not_reach,
- ?line P ! may_not_reach,
- ?line P ! may_not_reach,
- ?line receive
+ P = spawn(Node, fun () -> xm_sig_order_proc() end),
+ M = erlang:monitor(process, P),
+ P ! may_reach,
+ P ! may_reach,
+ P ! may_reach,
+ exit(P, good_signal_order),
+ P ! may_not_reach,
+ P ! may_not_reach,
+ P ! may_not_reach,
+ receive
{'DOWN', M, process, P, R} ->
- ?line good_signal_order = R
+ good_signal_order = R
end.
xm_sig_order_proc() ->
@@ -128,168 +113,149 @@ xm_sig_order_proc() ->
end,
xm_sig_order_proc().
-pending_exit_unlink_process(doc) -> [];
-pending_exit_unlink_process(suite) -> [];
pending_exit_unlink_process(Config) when is_list(Config) ->
- ?line pending_exit_test(self(), unlink).
+ pending_exit_test(self(), unlink).
-pending_exit_unlink_dist_process(doc) -> [];
-pending_exit_unlink_dist_process(suite) -> [];
pending_exit_unlink_dist_process(Config) when is_list(Config) ->
- ?line {ok, Node} = start_node(Config),
- ?line From = spawn(Node, fun () -> receive after infinity -> ok end end),
- ?line Res = pending_exit_test(From, unlink),
- ?line stop_node(Node),
- ?line Res.
-
-pending_exit_unlink_port(doc) -> [];
-pending_exit_unlink_port(suite) -> [];
+ {ok, Node} = start_node(Config),
+ From = spawn(Node, fun () -> receive after infinity -> ok end end),
+ Res = pending_exit_test(From, unlink),
+ stop_node(Node),
+ Res.
+
pending_exit_unlink_port(Config) when is_list(Config) ->
- ?line pending_exit_test(hd(erlang:ports()), unlink).
+ pending_exit_test(hd(erlang:ports()), unlink).
-pending_exit_trap_exit(doc) -> [];
-pending_exit_trap_exit(suite) -> [];
pending_exit_trap_exit(Config) when is_list(Config) ->
- ?line pending_exit_test(self(), trap_exit).
+ pending_exit_test(self(), trap_exit).
-pending_exit_receive(doc) -> [];
-pending_exit_receive(suite) -> [];
pending_exit_receive(Config) when is_list(Config) ->
- ?line pending_exit_test(self(), 'receive').
+ pending_exit_test(self(), 'receive').
-pending_exit_exit(doc) -> [];
-pending_exit_exit(suite) -> [];
pending_exit_exit(Config) when is_list(Config) ->
- ?line pending_exit_test(self(), exit).
+ pending_exit_test(self(), exit).
-pending_exit_gc(doc) -> [];
-pending_exit_gc(suite) -> [];
pending_exit_gc(Config) when is_list(Config) ->
- ?line pending_exit_test(self(), gc).
+ pending_exit_test(self(), gc).
pending_exit_test(From, Type) ->
- ?line case catch erlang:system_info(smp_support) of
- true ->
- ?line OTE = process_flag(trap_exit, true),
- ?line Ref = make_ref(),
- ?line Master = self(),
- ?line ExitBySignal = case Type of
- gc ->
- lists:duplicate(10000,
- exit_by_signal);
- _ ->
- exit_by_signal
- end,
- ?line Pid = spawn_link(
- fun () ->
- receive go -> ok end,
- false = have_pending_exit(),
- exit = fake_exit(From,
- self(),
- ExitBySignal),
- true = have_pending_exit(),
- Master ! {self(), Ref, Type},
- case Type of
- gc ->
- force_gc(),
- erlang:yield();
- unlink ->
- unlink(From);
- trap_exit ->
- process_flag(trap_exit, true);
- 'receive' ->
- receive _ -> ok
- after 0 -> ok
- end;
- exit ->
- ok
- end,
- exit(exit_by_myself)
- end),
- ?line Mon = erlang:monitor(process, Pid),
- ?line Pid ! go,
- ?line Reason = receive
- {'DOWN', Mon, process, Pid, R} ->
- ?line receive
- {Pid, Ref, Type} ->
- ?line ok
- after 0 ->
- ?line ?t:fail(premature_exit)
- end,
- ?line case Type of
- exit ->
- ?line exit_by_myself = R;
- _ ->
- ?line ExitBySignal = R
- end
- end,
- ?line receive
- {'EXIT', Pid, R2} ->
- ?line Reason = R2
- end,
- ?line process_flag(trap_exit, OTE),
- ?line ok,
- {comment,
- "Test only valid with current SMP emulator."};
- _ ->
- {skipped,
- "SMP support not enabled. "
- "Test only valid with current SMP emulator."}
- end.
+ case catch erlang:system_info(smp_support) of
+ true ->
+ OTE = process_flag(trap_exit, true),
+ Ref = make_ref(),
+ Master = self(),
+ ExitBySignal = case Type of
+ gc ->
+ lists:duplicate(10000,
+ exit_by_signal);
+ _ ->
+ exit_by_signal
+ end,
+ Pid = spawn_link(
+ fun () ->
+ receive go -> ok end,
+ false = have_pending_exit(),
+ exit = fake_exit(From,
+ self(),
+ ExitBySignal),
+ true = have_pending_exit(),
+ Master ! {self(), Ref, Type},
+ case Type of
+ gc ->
+ force_gc(),
+ erlang:yield();
+ unlink ->
+ unlink(From);
+ trap_exit ->
+ process_flag(trap_exit, true);
+ 'receive' ->
+ receive _ -> ok
+ after 0 -> ok
+ end;
+ exit ->
+ ok
+ end,
+ exit(exit_by_myself)
+ end),
+ Mon = erlang:monitor(process, Pid),
+ Pid ! go,
+ Reason = receive
+ {'DOWN', Mon, process, Pid, R} ->
+ receive
+ {Pid, Ref, Type} ->
+ ok
+ after 0 ->
+ ct:fail(premature_exit)
+ end,
+ case Type of
+ exit ->
+ exit_by_myself = R;
+ _ ->
+ ExitBySignal = R
+ end
+ end,
+ receive
+ {'EXIT', Pid, R2} ->
+ Reason = R2
+ end,
+ process_flag(trap_exit, OTE),
+ ok,
+ {comment, "Test only valid with current SMP emulator."};
+ _ ->
+ {skipped, "SMP support not enabled. Test only valid with current SMP emulator."}
+ end.
-exit_before_pending_exit(doc) -> [];
-exit_before_pending_exit(suite) -> [];
exit_before_pending_exit(Config) when is_list(Config) ->
%% This is a testcase testcase very specific to the smp
%% implementation as it is of the time of writing.
%%
%% The testcase tries to check that a process can
%% exit by itself even though it has a pending exit.
- ?line OTE = process_flag(trap_exit, true),
- ?line Master = self(),
- ?line Tester = spawn_link(
- fun () ->
- Opts = case {erlang:system_info(run_queues),
- erlang:system_info(schedulers_online)} of
- {RQ, SO} when RQ =:= 1; SO =:= 1 -> [];
- _ ->
- process_flag(scheduler, 1),
- [{scheduler, 2}]
- end,
- P = self(),
- Exiter = spawn_opt(fun () ->
- receive
- {exit_me, P, R} ->
- exit(P, R)
- end
- end, Opts),
- erlang:yield(),
- Exiter ! {exit_me, self(), exited_by_exiter},
- %% We want to get a pending exit
- %% before we exit ourselves. We
- %% don't want to be scheduled out
- %% since we will then see the
- %% pending exit.
- %%
- %% Do something that takes
- %% relatively long time but
- %% consumes few reductions...
- repeat(fun() -> erlang:system_info(procs) end,10),
- %% ... then exit.
- Master ! {self(),
- pending_exit,
- have_pending_exit()},
- exit(exited_by_myself)
- end),
- ?line PendingExit = receive {Tester, pending_exit, PE} -> PE end,
- ?line receive
+ OTE = process_flag(trap_exit, true),
+ Master = self(),
+ Tester = spawn_link(
+ fun () ->
+ Opts = case {erlang:system_info(run_queues),
+ erlang:system_info(schedulers_online)} of
+ {RQ, SO} when RQ =:= 1; SO =:= 1 -> [];
+ _ ->
+ process_flag(scheduler, 1),
+ [{scheduler, 2}]
+ end,
+ P = self(),
+ Exiter = spawn_opt(fun () ->
+ receive
+ {exit_me, P, R} ->
+ exit(P, R)
+ end
+ end, Opts),
+ erlang:yield(),
+ Exiter ! {exit_me, self(), exited_by_exiter},
+ %% We want to get a pending exit
+ %% before we exit ourselves. We
+ %% don't want to be scheduled out
+ %% since we will then see the
+ %% pending exit.
+ %%
+ %% Do something that takes
+ %% relatively long time but
+ %% consumes few reductions...
+ repeat(fun() -> erlang:system_info(procs) end,10),
+ %% ... then exit.
+ Master ! {self(),
+ pending_exit,
+ have_pending_exit()},
+ exit(exited_by_myself)
+ end),
+ PendingExit = receive {Tester, pending_exit, PE} -> PE end,
+ receive
{'EXIT', Tester, exited_by_myself} ->
- ?line process_flag(trap_exit, OTE),
- ?line ok;
+ process_flag(trap_exit, OTE),
+ ok;
Msg ->
- ?line ?t:fail({unexpected_message, Msg})
+ ct:fail({unexpected_message, Msg})
end,
NoScheds = integer_to_list(erlang:system_info(schedulers_online)),
{comment,
@@ -304,101 +270,101 @@ exit_before_pending_exit(Config) when is_list(Config) ->
-define(PE_INFO_REPEAT, 100).
pending_exit_is_process_alive(Config) when is_list(Config) ->
- ?line S = exit_op_test_init(),
- ?line TestFun = fun (P) -> false = is_process_alive(P) end,
- ?line repeated_exit_op_test(TestFun, ?PE_INFO_REPEAT),
- ?line verify_pending_exit_success(S),
- ?line comment().
+ S = exit_op_test_init(),
+ TestFun = fun (P) -> false = is_process_alive(P) end,
+ repeated_exit_op_test(TestFun, ?PE_INFO_REPEAT),
+ verify_pending_exit_success(S),
+ comment().
pending_exit_process_info_1(Config) when is_list(Config) ->
- ?line S = exit_op_test_init(),
- ?line TestFun = fun (P) ->
+ S = exit_op_test_init(),
+ TestFun = fun (P) ->
undefined = process_info(P)
end,
- ?line repeated_exit_op_test(TestFun, ?PE_INFO_REPEAT),
- ?line verify_pending_exit_success(S),
- ?line comment().
+ repeated_exit_op_test(TestFun, ?PE_INFO_REPEAT),
+ verify_pending_exit_success(S),
+ comment().
pending_exit_process_info_2(Config) when is_list(Config) ->
- ?line S0 = exit_op_test_init(),
- ?line repeated_exit_op_test(fun (P) ->
+ S0 = exit_op_test_init(),
+ repeated_exit_op_test(fun (P) ->
undefined = process_info(P, messages)
end, ?PE_INFO_REPEAT),
- ?line S1 = verify_pending_exit_success(S0),
- ?line repeated_exit_op_test(fun (P) ->
+ S1 = verify_pending_exit_success(S0),
+ repeated_exit_op_test(fun (P) ->
undefined = process_info(P, status)
end, ?PE_INFO_REPEAT),
- ?line S2 = verify_pending_exit_success(S1),
- ?line repeated_exit_op_test(fun (P) ->
+ S2 = verify_pending_exit_success(S1),
+ repeated_exit_op_test(fun (P) ->
undefined = process_info(P, links)
end, ?PE_INFO_REPEAT),
- ?line S3 = verify_pending_exit_success(S2),
- ?line repeated_exit_op_test(fun (P) ->
+ S3 = verify_pending_exit_success(S2),
+ repeated_exit_op_test(fun (P) ->
undefined = process_info(P, [messages])
end, ?PE_INFO_REPEAT),
- ?line S4 = verify_pending_exit_success(S3),
- ?line repeated_exit_op_test(fun (P) ->
+ S4 = verify_pending_exit_success(S3),
+ repeated_exit_op_test(fun (P) ->
undefined = process_info(P, [status])
end, ?PE_INFO_REPEAT),
- ?line S5 = verify_pending_exit_success(S4),
- ?line repeated_exit_op_test(fun (P) ->
+ S5 = verify_pending_exit_success(S4),
+ repeated_exit_op_test(fun (P) ->
undefined = process_info(P, [links])
end, ?PE_INFO_REPEAT),
- ?line S6 = verify_pending_exit_success(S5),
- ?line repeated_exit_op_test(fun (P) ->
+ S6 = verify_pending_exit_success(S5),
+ repeated_exit_op_test(fun (P) ->
undefined = process_info(P, [status,
links])
end, ?PE_INFO_REPEAT),
- ?line S7 = verify_pending_exit_success(S6),
- ?line repeated_exit_op_test(fun (P) ->
+ S7 = verify_pending_exit_success(S6),
+ repeated_exit_op_test(fun (P) ->
undefined = process_info(P, [messages,
status])
end, ?PE_INFO_REPEAT),
- ?line S8 = verify_pending_exit_success(S7),
- ?line repeated_exit_op_test(fun (P) ->
+ S8 = verify_pending_exit_success(S7),
+ repeated_exit_op_test(fun (P) ->
undefined = process_info(P, [messages,
links])
end, ?PE_INFO_REPEAT),
- ?line S9 = verify_pending_exit_success(S8),
- ?line repeated_exit_op_test(
+ S9 = verify_pending_exit_success(S8),
+ repeated_exit_op_test(
fun (P) ->
undefined = process_info(P, [message_queue_len,
status])
end, ?PE_INFO_REPEAT),
- ?line S10 = verify_pending_exit_success(S9),
- ?line repeated_exit_op_test(fun (P) ->
+ S10 = verify_pending_exit_success(S9),
+ repeated_exit_op_test(fun (P) ->
undefined = process_info(P, [messages,
links,
status])
end, ?PE_INFO_REPEAT),
- ?line verify_pending_exit_success(S10),
- ?line comment().
+ verify_pending_exit_success(S10),
+ comment().
pending_exit_process_display(Config) when is_list(Config) ->
- ?line S = exit_op_test_init(),
- ?line TestFun = fun (P) ->
+ S = exit_op_test_init(),
+ TestFun = fun (P) ->
badarg = try
erlang:process_display(P, backtrace)
catch
error:badarg -> badarg
end
end,
- ?line repeated_exit_op_test(TestFun, ?PE_INFO_REPEAT),
- ?line verify_pending_exit_success(S),
- ?line comment().
+ repeated_exit_op_test(TestFun, ?PE_INFO_REPEAT),
+ verify_pending_exit_success(S),
+ comment().
pending_exit_group_leader(Config) when is_list(Config) ->
- ?line S = exit_op_test_init(),
- ?line TestFun = fun (P) ->
+ S = exit_op_test_init(),
+ TestFun = fun (P) ->
badarg = try
group_leader(self(), P)
catch
error:badarg -> badarg
end
end,
- ?line repeated_exit_op_test(TestFun, ?PE_INFO_REPEAT),
- ?line verify_pending_exit_success(S),
- ?line comment().
+ repeated_exit_op_test(TestFun, ?PE_INFO_REPEAT),
+ verify_pending_exit_success(S),
+ comment().
%%
%% -- Internal utils --------------------------------------------------------
@@ -517,14 +483,14 @@ repeat(Fun, N) when is_integer(N) ->
start_node(Config) ->
Name = list_to_atom(atom_to_list(?MODULE)
- ++ "-" ++ atom_to_list(?config(testcase, Config))
+ ++ "-" ++ atom_to_list(proplists:get_value(testcase, Config))
++ "-" ++ integer_to_list(erlang:system_time(seconds))
++ "-" ++ integer_to_list(erlang:unique_integer([positive]))),
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).
have_pending_exit() ->
have_pending_exit(self()).
@@ -540,15 +506,15 @@ fake_exit(From, To, Reason) ->
available_internal_state(Bool) when Bool == true; Bool == false ->
case {Bool,
- (catch erts_debug:get_internal_state(available_internal_state))} of
- {true, true} ->
- true;
- {false, true} ->
- erts_debug:set_internal_state(available_internal_state, false),
- true;
- {true, _} ->
- erts_debug:set_internal_state(available_internal_state, true),
- false;
- {false, _} ->
- false
+ (catch erts_debug:get_internal_state(available_internal_state))} of
+ {true, true} ->
+ true;
+ {false, true} ->
+ erts_debug:set_internal_state(available_internal_state, false),
+ true;
+ {true, _} ->
+ erts_debug:set_internal_state(available_internal_state, true),
+ false;
+ {false, _} ->
+ false
end.
diff --git a/erts/emulator/test/smoke_test_SUITE.erl b/erts/emulator/test/smoke_test_SUITE.erl
index 2df19cd20b..042c7225d5 100644
--- a/erts/emulator/test/smoke_test_SUITE.erl
+++ b/erts/emulator/test/smoke_test_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.
@@ -23,35 +23,18 @@
-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,
+-export([all/0, suite/0,
init_per_testcase/2, end_per_testcase/2]).
-export([boot_combo/1, native_atomics/1, jump_table/1]).
--define(DEFAULT_TIMEOUT, ?t:minutes(2)).
-
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap, {minutes, 2}}].
all() ->
[boot_combo, native_atomics, jump_table].
-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(boot_combo = Case, Config) when is_list(Config) ->
case erlang:system_info(build_type) of
opt ->
@@ -63,12 +46,9 @@ init_per_testcase(Case, Config) when is_list(Config) ->
init_per_tc(Case, Config).
init_per_tc(Case, Config) ->
- Dog = ?t:timetrap(?DEFAULT_TIMEOUT),
- [{testcase, Case},{watchdog, Dog}|Config].
+ [{testcase, Case}|Config].
end_per_testcase(_Case, Config) when is_list(Config) ->
- Dog = ?config(watchdog, Config),
- ?t:timetrap_cancel(Dog),
ok.
%%%
@@ -111,13 +91,13 @@ native_atomics(Config) when is_list(Config) ->
NA64Key = "64-bit native atomics",
DWNAKey = "Double word native atomics",
EthreadInfo = erlang:system_info(ethread_info),
- ?t:format("~p~n", [EthreadInfo]),
+ io:format("~p~n", [EthreadInfo]),
{value,{NA32Key, NA32, _}} = lists:keysearch(NA32Key, 1, EthreadInfo),
{value,{NA64Key, NA64, _}} = lists:keysearch(NA64Key, 1, EthreadInfo),
{value,{DWNAKey, DWNA, _}} = lists:keysearch(DWNAKey, 1, EthreadInfo),
case {erlang:system_info(build_type), erlang:system_info(smp_support), NA32, NA64, DWNA} of
{opt, true, "no", "no", _} ->
- ?t:fail(optimized_smp_runtime_without_native_atomics);
+ ct:fail(optimized_smp_runtime_without_native_atomics);
{_, false, "no", "no", _} ->
{comment, "No native atomics"};
_ ->
@@ -134,7 +114,7 @@ jump_table(Config) when is_list(Config) ->
false ->
case erlang:system_info(build_type) of
opt ->
- ?t:fail(optimized_without_beam_jump_table);
+ ct:fail(optimized_without_beam_jump_table);
BT ->
{comment, "No beam jump table, but build type is " ++ atom_to_list(BT)}
end
@@ -149,7 +129,7 @@ chk_boot(Config, Args, Fun) ->
true = os:putenv("ERL_ZFLAGS", Args),
Success = make_ref(),
Parent = self(),
- ?t:format("--- Testing ~s~n", [Args]),
+ io:format("--- Testing ~s~n", [Args]),
{ok, Node} = start_node(Config),
Pid = spawn_link(Node, fun () ->
Fun(),
@@ -159,7 +139,7 @@ chk_boot(Config, Args, Fun) ->
{Pid, Success} ->
Node = node(Pid),
stop_node(Node),
- ?t:format("--- Success!~n", []),
+ io:format("--- Success!~n", []),
ok
end.
@@ -170,14 +150,14 @@ start_node(Config, Args) when is_list(Config) ->
Pa = filename:dirname(code:which(?MODULE)),
Name = list_to_atom(atom_to_list(?MODULE)
++ "-"
- ++ atom_to_list(?config(testcase, Config))
+ ++ atom_to_list(proplists:get_value(testcase, Config))
++ "-"
++ integer_to_list(erlang:system_time(seconds))
++ "-"
++ integer_to_list(erlang:unique_integer([positive]))),
Opts = [{args, "-pa "++Pa++" "++Args}],
- ?t:start_node(Name, slave, Opts).
+ test_server:start_node(Name, slave, Opts).
stop_node(Node) ->
- ?t:stop_node(Node).
+ test_server:stop_node(Node).
diff --git a/erts/emulator/test/statistics_SUITE.erl b/erts/emulator/test/statistics_SUITE.erl
index df96b018a1..71ef003b25 100644
--- a/erts/emulator/test/statistics_SUITE.erl
+++ b/erts/emulator/test/statistics_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.
@@ -22,10 +22,7 @@
%% Tests the statistics/1 bif.
--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,
wall_clock_zero_diff/1, wall_clock_update/1,
runtime_zero_diff/1,
runtime_update/1, runtime_diff/1,
@@ -40,16 +37,9 @@
-include_lib("common_test/include/ct.hrl").
-init_per_testcase(_, Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(300)),
- [{watchdog, Dog}|Config].
-
-end_per_testcase(_, 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, 4}}].
all() ->
[{group, wall_clock}, {group, runtime}, reductions,
@@ -65,61 +55,42 @@ groups() ->
[runtime_zero_diff, runtime_update, runtime_diff]},
{run_queue, [], [run_queue_one]}].
-init_per_suite(Config) ->
- Config.
-
-end_per_suite(_Config) ->
- ok.
-
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
-
-
-
%%% Testing statistics(wall_clock).
-
-
-wall_clock_zero_diff(doc) ->
- "Tests that the 'Wall clock since last call' element of the result "
- "is zero when statistics(runtime) is called twice in succession.";
+%% Tests that the 'Wall clock since last call' element of the result
+%% is zero when statistics(runtime) is called twice in succession.
wall_clock_zero_diff(Config) when is_list(Config) ->
wall_clock_zero_diff1(16).
wall_clock_zero_diff1(N) when N > 0 ->
- ?line {Time, _} = statistics(wall_clock),
- ?line case statistics(wall_clock) of
- {Time, 0} -> ok;
- _ -> wall_clock_zero_diff1(N-1)
+ {Time, _} = statistics(wall_clock),
+ case statistics(wall_clock) of
+ {Time, 0} -> ok;
+ _ -> wall_clock_zero_diff1(N-1)
end;
wall_clock_zero_diff1(0) ->
- ?line test_server:fail("Difference never zero.").
+ ct:fail("Difference never zero.").
-wall_clock_update(doc) ->
- "Test that the time differences returned by two calls to "
- "statistics(wall_clock) are compatible, and are within a small number "
- "of ms of the amount of real time we waited for.";
+%% Test that the time differences returned by two calls to
+%% statistics(wall_clock) are compatible, and are within a small number
+%% of ms of the amount of real time we waited for.
wall_clock_update(Config) when is_list(Config) ->
wall_clock_update1(6).
wall_clock_update1(N) when N > 0 ->
- ?line {T1_wc_time, _} = statistics(wall_clock),
- ?line receive after 1000 -> ok end,
- ?line {T2_wc_time, Wc_Diff} = statistics(wall_clock),
-
- ?line Wc_Diff = T2_wc_time - T1_wc_time,
- ?line test_server:format("Wall clock diff = ~p; should be = 1000..1040~n",
- [Wc_Diff]),
- case ?t:is_debug() of
- false ->
- ?line true = Wc_Diff =< 1040;
- true ->
- ?line true = Wc_Diff =< 2000 %Be more tolerant in debug-compiled emulator.
+ {T1_wc_time, _} = statistics(wall_clock),
+ receive after 1000 -> ok end,
+ {T2_wc_time, Wc_Diff} = statistics(wall_clock),
+
+ Wc_Diff = T2_wc_time - T1_wc_time,
+ io:format("Wall clock diff = ~p; should be = 1000..1040~n", [Wc_Diff]),
+ case test_server:is_debug() of
+ false ->
+ true = Wc_Diff =< 1040;
+ true ->
+ true = Wc_Diff =< 2000 %Be more tolerant in debug-compiled emulator.
end,
- ?line true = Wc_Diff >= 1000,
+ true = Wc_Diff >= 1000,
wall_clock_update1(N-1);
wall_clock_update1(0) ->
ok.
@@ -128,64 +99,60 @@ wall_clock_update1(0) ->
%%% Test statistics(runtime).
-runtime_zero_diff(doc) ->
- "Tests that the difference between the times returned from two consectuitive "
- "calls to statistics(runtime) is zero.";
+%% Tests that the difference between the times returned from two consectuitive
+%% calls to statistics(runtime) is zero.
runtime_zero_diff(Config) when is_list(Config) ->
- ?line runtime_zero_diff1(16).
+ runtime_zero_diff1(16).
runtime_zero_diff1(N) when N > 0 ->
- ?line {T1, _} = statistics(runtime),
- ?line case statistics(runtime) of
- {T1, 0} -> ok;
- _ -> runtime_zero_diff1(N-1)
- end;
+ {T1, _} = statistics(runtime),
+ case statistics(runtime) of
+ {T1, 0} -> ok;
+ _ -> runtime_zero_diff1(N-1)
+ end;
runtime_zero_diff1(0) ->
- ?line test_server:fail("statistics(runtime) never returned zero difference").
+ ct:fail("statistics(runtime) never returned zero difference").
-runtime_update(doc) ->
- "Test that the statistics(runtime) returns a substanstially "
- "updated difference after running a process that takes all CPU "
- " power of the Erlang process for a second.";
+%% Test that the statistics(runtime) returns a substanstially
+%% updated difference after running a process that takes all CPU
+%% power of the Erlang process for a second.
runtime_update(Config) when is_list(Config) ->
- case ?t:is_cover() of
- false ->
- ?line process_flag(priority, high),
- do_runtime_update(10);
- true ->
- {skip,"Cover-compiled"}
+ case test_server:is_cover() of
+ false ->
+ process_flag(priority, high),
+ do_runtime_update(10);
+ true ->
+ {skip,"Cover-compiled"}
end.
do_runtime_update(0) ->
{comment,"Never close enough"};
do_runtime_update(N) ->
- ?line {T1,Diff0} = statistics(runtime),
- ?line spawn_link(fun cpu_heavy/0),
+ {T1,Diff0} = statistics(runtime),
+ spawn_link(fun cpu_heavy/0),
receive after 1000 -> ok end,
- ?line {T2,Diff} = statistics(runtime),
- ?line true = is_integer(T1+T2+Diff0+Diff),
- ?line test_server:format("T1 = ~p, T2 = ~p, Diff = ~p, T2-T1 = ~p",
- [T1,T2,Diff,T2-T1]),
- ?line if
- T2 - T1 =:= Diff, 900 =< Diff, Diff =< 1500 -> ok;
- true -> do_runtime_update(N-1)
- end.
-
+ {T2,Diff} = statistics(runtime),
+ true = is_integer(T1+T2+Diff0+Diff),
+ io:format("T1 = ~p, T2 = ~p, Diff = ~p, T2-T1 = ~p", [T1,T2,Diff,T2-T1]),
+ if
+ T2 - T1 =:= Diff, 900 =< Diff, Diff =< 1500 -> ok;
+ true -> do_runtime_update(N-1)
+ end.
+
cpu_heavy() ->
cpu_heavy().
-runtime_diff(doc) ->
- "Test that the difference between two consecutive absolute runtimes is "
- "equal to the last relative runtime. The loop runs a lot of times since "
- "the bug which this test case tests for showed up only rarely.";
+%% Test that the difference between two consecutive absolute runtimes is
+%% equal to the last relative runtime. The loop runs a lot of times since
+%% the bug which this test case tests for showed up only rarely.
runtime_diff(Config) when is_list(Config) ->
runtime_diff1(1000).
runtime_diff1(N) when N > 0 ->
- ?line {T1_wc_time, _} = statistics(runtime),
- ?line do_much(),
- ?line {T2_wc_time, Wc_Diff} = statistics(runtime),
- ?line Wc_Diff = T2_wc_time - T1_wc_time,
+ {T1_wc_time, _} = statistics(runtime),
+ do_much(),
+ {T2_wc_time, Wc_Diff} = statistics(runtime),
+ Wc_Diff = T2_wc_time - T1_wc_time,
runtime_diff1(N-1);
runtime_diff1(0) ->
ok.
@@ -203,10 +170,9 @@ do_much(N) ->
do_much(N-1).
-reductions(doc) ->
- "Test that statistics(reductions) is callable, and that "
- "Total_Reductions and Reductions_Since_Last_Call make sense. "
- "(This to fail on pre-R3A version of JAM.";
+%% Test that statistics(reductions) is callable, and that
+%% Total_Reductions and Reductions_Since_Last_Call make sense.
+%% This to fail on pre-R3A version of JAM.
reductions(Config) when is_list(Config) ->
{Reductions, _} = statistics(reductions),
@@ -219,13 +185,13 @@ reductions(Config) when is_list(Config) ->
reductions(300, Reductions, Mask).
reductions(N, Previous, Mask) when N > 0 ->
- ?line {Reductions, Diff} = statistics(reductions),
- ?line build_some_garbage(),
- ?line if Reductions > 0 -> ok end,
- ?line if Diff >= 0 -> ok end,
+ {Reductions, Diff} = statistics(reductions),
+ build_some_garbage(),
+ if Reductions > 0 -> ok end,
+ if Diff >= 0 -> ok end,
io:format("Previous = ~p, Reductions = ~p, Diff = ~p, DiffShouldBe = ~p",
- [Previous, Reductions, Diff, (Reductions-Previous) band Mask]),
- ?line if Reductions == ((Previous+Diff) band Mask) -> reductions(N-1, Reductions, Mask) end;
+ [Previous, Reductions, Diff, (Reductions-Previous) band Mask]),
+ if Reductions == ((Previous+Diff) band Mask) -> reductions(N-1, Reductions, Mask) end;
reductions(0, _, _) ->
ok.
@@ -234,126 +200,123 @@ build_some_garbage() ->
%% a garbage collection in the scheduler.
processes().
-reductions_big(doc) ->
- "Test that the number of reductions can be returned as a big number.";
+%% Test that the number of reductions can be returned as a big number.
reductions_big(Config) when is_list(Config) ->
- ?line reductions_big_loop(),
+ reductions_big_loop(),
ok.
reductions_big_loop() ->
erlang:yield(),
case statistics(reductions) of
- {Red, Diff} when Red >= 16#7ffFFFF ->
- ok = io:format("Reductions = ~w, Diff = ~w", [Red, Diff]);
- _ ->
- reductions_big_loop()
+ {Red, Diff} when Red >= 16#7ffFFFF ->
+ ok = io:format("Reductions = ~w, Diff = ~w", [Red, Diff]);
+ _ ->
+ reductions_big_loop()
end.
%%% Tests of statistics(run_queue).
-run_queue_one(doc) ->
- "Tests that statistics(run_queue) returns 1 if we start a "
- "CPU-bound process.";
+%% Tests that statistics(run_queue) returns 1 if we start a
+%% CPU-bound process.
run_queue_one(Config) when is_list(Config) ->
- ?line MS = erlang:system_flag(multi_scheduling, block),
- ?line run_queue_one_test(Config),
- ?line erlang:system_flag(multi_scheduling, unblock),
+ MS = erlang:system_flag(multi_scheduling, block),
+ run_queue_one_test(Config),
+ erlang:system_flag(multi_scheduling, unblock),
case MS of
- blocked ->
- {comment,
- "Multi-scheduling blocked during test. This test-case "
- "was not written to work with multiple schedulers."};
- _ -> ok
+ blocked ->
+ {comment,
+ "Multi-scheduling blocked during test. This test-case "
+ "was not written to work with multiple schedulers."};
+ _ -> ok
end.
-
+
run_queue_one_test(Config) when is_list(Config) ->
- ?line _Hog = spawn_link(?MODULE, hog, [self()]),
- ?line receive
- hog_started -> ok
- end,
- ?line receive after 100 -> ok end, % Give hog a head start.
- ?line case statistics(run_queue) of
- N when N >= 1 -> ok;
- Other -> ?line ?t:fail({unexpected,Other})
- end,
+ _Hog = spawn_link(?MODULE, hog, [self()]),
+ receive
+ hog_started -> ok
+ end,
+ receive after 100 -> ok end, % Give hog a head start.
+ case statistics(run_queue) of
+ N when N >= 1 -> ok;
+ Other -> ct:fail({unexpected,Other})
+ end,
ok.
%% CPU-bound process, going at low priority. It will always be ready
%% to run.
hog(Pid) ->
- ?line process_flag(priority, low),
- ?line Pid ! hog_started,
- ?line Mon = erlang:monitor(process, Pid),
- ?line hog_iter(0, Mon).
+ process_flag(priority, low),
+ Pid ! hog_started,
+ Mon = erlang:monitor(process, Pid),
+ hog_iter(0, Mon).
hog_iter(N, Mon) when N > 0 ->
receive
- {'DOWN', Mon, _, _, _} -> ok
+ {'DOWN', Mon, _, _, _} -> ok
after 0 ->
- ?line hog_iter(N-1, Mon)
+ hog_iter(N-1, Mon)
end;
hog_iter(0, Mon) ->
- ?line hog_iter(10000, Mon).
+ hog_iter(10000, Mon).
%%% Tests of statistics(scheduler_wall_time).
-scheduler_wall_time(doc) ->
- "Tests that statistics(scheduler_wall_time) works as intended";
+%% Tests that statistics(scheduler_wall_time) works as intended
scheduler_wall_time(Config) when is_list(Config) ->
%% Should return undefined if system_flag is not turned on yet
undefined = statistics(scheduler_wall_time),
%% Turn on statistics
false = erlang:system_flag(scheduler_wall_time, true),
try
- Schedulers = erlang:system_info(schedulers_online),
- %% Let testserver and everyone else finish their work
- timer:sleep(1500),
- %% Empty load
- EmptyLoad = get_load(),
- {false, _} = {lists:any(fun(Load) -> Load > 50 end, EmptyLoad),EmptyLoad},
- MeMySelfAndI = self(),
- StartHog = fun() ->
- Pid = spawn(?MODULE, hog, [self()]),
- receive hog_started -> MeMySelfAndI ! go end,
- Pid
- end,
- P1 = StartHog(),
- %% Max on one, the other schedulers empty (hopefully)
- %% Be generous the process can jump between schedulers
- %% which is ok and we don't want the test to fail for wrong reasons
- _L1 = [S1Load|EmptyScheds1] = get_load(),
- {true,_} = {S1Load > 50,S1Load},
- {false,_} = {lists:any(fun(Load) -> Load > 50 end, EmptyScheds1),EmptyScheds1},
- {true,_} = {lists:sum(EmptyScheds1) < 60,EmptyScheds1},
-
- %% 50% load
- HalfHogs = [StartHog() || _ <- lists:seq(1, (Schedulers-1) div 2)],
- HalfLoad = lists:sum(get_load()) div Schedulers,
- if Schedulers < 2, HalfLoad > 80 -> ok; %% Ok only one scheduler online and one hog
- %% We want roughly 50% load
- HalfLoad > 40, HalfLoad < 60 -> ok;
- true -> exit({halfload, HalfLoad})
- end,
-
- %% 100% load
- LastHogs = [StartHog() || _ <- lists:seq(1, Schedulers div 2)],
- FullScheds = get_load(),
- {false,_} = {lists:any(fun(Load) -> Load < 80 end, FullScheds),FullScheds},
- FullLoad = lists:sum(FullScheds) div Schedulers,
- if FullLoad > 90 -> ok;
- true -> exit({fullload, FullLoad})
- end,
-
- [exit(Pid, kill) || Pid <- [P1|HalfHogs++LastHogs]],
- AfterLoad = get_load(),
- {false,_} = {lists:any(fun(Load) -> Load > 25 end, AfterLoad),AfterLoad},
- true = erlang:system_flag(scheduler_wall_time, false)
+ Schedulers = erlang:system_info(schedulers_online),
+ %% Let testserver and everyone else finish their work
+ timer:sleep(1500),
+ %% Empty load
+ EmptyLoad = get_load(),
+ {false, _} = {lists:any(fun(Load) -> Load > 50 end, EmptyLoad),EmptyLoad},
+ MeMySelfAndI = self(),
+ StartHog = fun() ->
+ Pid = spawn(?MODULE, hog, [self()]),
+ receive hog_started -> MeMySelfAndI ! go end,
+ Pid
+ end,
+ P1 = StartHog(),
+ %% Max on one, the other schedulers empty (hopefully)
+ %% Be generous the process can jump between schedulers
+ %% which is ok and we don't want the test to fail for wrong reasons
+ _L1 = [S1Load|EmptyScheds1] = get_load(),
+ {true,_} = {S1Load > 50,S1Load},
+ {false,_} = {lists:any(fun(Load) -> Load > 50 end, EmptyScheds1),EmptyScheds1},
+ {true,_} = {lists:sum(EmptyScheds1) < 60,EmptyScheds1},
+
+ %% 50% load
+ HalfHogs = [StartHog() || _ <- lists:seq(1, (Schedulers-1) div 2)],
+ HalfLoad = lists:sum(get_load()) div Schedulers,
+ if Schedulers < 2, HalfLoad > 80 -> ok; %% Ok only one scheduler online and one hog
+ %% We want roughly 50% load
+ HalfLoad > 40, HalfLoad < 60 -> ok;
+ true -> exit({halfload, HalfLoad})
+ end,
+
+ %% 100% load
+ LastHogs = [StartHog() || _ <- lists:seq(1, Schedulers div 2)],
+ FullScheds = get_load(),
+ {false,_} = {lists:any(fun(Load) -> Load < 80 end, FullScheds),FullScheds},
+ FullLoad = lists:sum(FullScheds) div Schedulers,
+ if FullLoad > 90 -> ok;
+ true -> exit({fullload, FullLoad})
+ end,
+
+ [exit(Pid, kill) || Pid <- [P1|HalfHogs++LastHogs]],
+ AfterLoad = get_load(),
+ {false,_} = {lists:any(fun(Load) -> Load > 25 end, AfterLoad),AfterLoad},
+ true = erlang:system_flag(scheduler_wall_time, false)
after
- erlang:system_flag(scheduler_wall_time, false)
+ erlang:system_flag(scheduler_wall_time, false)
end.
get_load() ->
@@ -367,62 +330,59 @@ load_percentage([{Id, WN, TN}|Ss], [{Id, WP, TP}|Ps]) ->
load_percentage([], []) -> [].
-garbage_collection(doc) ->
- "Tests that statistics(garbage_collection) is callable. "
- "It is not clear how to test anything more.";
+%% Tests that statistics(garbage_collection) is callable.
+%% It is not clear how to test anything more.
garbage_collection(Config) when is_list(Config) ->
- ?line Bin = list_to_binary(lists:duplicate(19999, 42)),
- ?line case statistics(garbage_collection) of
- {Gcs0,R,0} when is_integer(Gcs0), is_integer(R) ->
- ?line io:format("Reclaimed: ~p", [R]),
- ?line Gcs = garbage_collection_1(Gcs0, Bin),
- ?line io:format("Reclaimed: ~p",
- [element(2, statistics(garbage_collection))]),
- {comment,integer_to_list(Gcs-Gcs0)++" GCs"}
- end.
+ Bin = list_to_binary(lists:duplicate(19999, 42)),
+ case statistics(garbage_collection) of
+ {Gcs0,R,0} when is_integer(Gcs0), is_integer(R) ->
+ io:format("Reclaimed: ~p", [R]),
+ Gcs = garbage_collection_1(Gcs0, Bin),
+ io:format("Reclaimed: ~p",
+ [element(2, statistics(garbage_collection))]),
+ {comment,integer_to_list(Gcs-Gcs0)++" GCs"}
+ end.
garbage_collection_1(Gcs0, Bin) ->
case statistics(garbage_collection) of
- {Gcs,Reclaimed,0} when Gcs >= Gcs0 ->
- if
- Reclaimed > 16#7ffffff ->
- Gcs;
- true ->
- _ = binary_to_list(Bin),
- erlang:garbage_collect(),
- garbage_collection_1(Gcs, Bin)
- end
+ {Gcs,Reclaimed,0} when Gcs >= Gcs0 ->
+ if
+ Reclaimed > 16#7ffffff ->
+ Gcs;
+ true ->
+ _ = binary_to_list(Bin),
+ erlang:garbage_collect(),
+ garbage_collection_1(Gcs, Bin)
+ end
end.
-io(doc) ->
- "Tests that statistics(io) is callable. "
- "This could be improved to test something more.";
+%% Tests that statistics(io) is callable.
+%% This could be improved to test something more.
io(Config) when is_list(Config) ->
- ?line case statistics(io) of
- {{input,In},{output,Out}} when is_integer(In), is_integer(Out) -> ok
- end.
+ case statistics(io) of
+ {{input,In},{output,Out}} when is_integer(In), is_integer(Out) -> ok
+ end.
-badarg(doc) ->
- "Tests that some illegal arguments to statistics fails.";
+%% Tests that some illegal arguments to statistics fails.
badarg(Config) when is_list(Config) ->
- ?line case catch statistics(1) of
- {'EXIT', {badarg, _}} -> ok
- end,
- ?line case catch statistics(bad_atom) of
- {'EXIT', {badarg, _}} -> ok
- end.
+ case catch statistics(1) of
+ {'EXIT', {badarg, _}} -> ok
+ end,
+ case catch statistics(bad_atom) of
+ {'EXIT', {badarg, _}} -> ok
+ end.
tok_loop() ->
tok_loop().
run_queues_lengths_active_tasks(Config) ->
TokLoops = lists:map(fun (_) ->
- spawn_opt(fun () ->
- tok_loop()
- end,
- [link, {priority, low}])
- end,
- lists:seq(1,10)),
+ spawn_opt(fun () ->
+ tok_loop()
+ end,
+ [link, {priority, low}])
+ end,
+ lists:seq(1,10)),
TRQLs0 = statistics(total_run_queue_lengths),
TATs0 = statistics(total_active_tasks),
@@ -465,15 +425,14 @@ run_queues_lengths_active_tasks(Config) ->
erlang:system_flag(schedulers_online, SO),
lists:foreach(fun (P) ->
- unlink(P),
- exit(P, bang)
- end,
- TokLoops),
+ unlink(P),
+ exit(P, bang)
+ end,
+ TokLoops),
ok.
-msacc(doc) ->
- "Tests that statistics(microstate_statistics) works.";
+%% Tests that statistics(microstate_statistics) works.
msacc(Config) ->
%% Test if crypto nif is available
@@ -499,9 +458,9 @@ msacc(Config) ->
end, maps:to_list(msacc_sum_states()))
),
if Sum > 0 ->
- ok;
+ ok;
true ->
- ct:fail({no_states_triggered, MsaccStats})
+ ct:fail({no_states_triggered, MsaccStats})
end;
_ ->
@@ -517,7 +476,7 @@ msacc(Config) ->
%% aux will be zero if we do not have smp support
%% or no async threads
case erlang:system_info(smp_support) orelse
- erlang:system_info(thread_pool_size) > 0
+ erlang:system_info(thread_pool_size) > 0
of
false ->
ok;
@@ -581,4 +540,4 @@ msacc_sum_states() ->
NewValue = Value+maps:get(Key,Acc),
maps:update(Key, NewValue, Acc)
end, Cnt, Counters)
- end,InitialCounters,Stats).
+ end,InitialCounters,Stats).
diff --git a/erts/emulator/test/system_info_SUITE.erl b/erts/emulator/test/system_info_SUITE.erl
index ae18b280cf..f31d474c20 100644
--- a/erts/emulator/test/system_info_SUITE.erl
+++ b/erts/emulator/test/system_info_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.
@@ -33,53 +33,23 @@
-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]).
--export([process_count/1, system_version/1, misc_smoke_tests/1, heap_size/1, wordsize/1, memory/1,
- ets_limit/1]).
+-export([process_count/1, system_version/1, misc_smoke_tests/1,
+ heap_size/1, wordsize/1, memory/1, ets_limit/1]).
--define(DEFAULT_TIMEOUT, ?t:minutes(2)).
-
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap, {minutes, 2}}].
all() ->
[process_count, system_version, misc_smoke_tests,
heap_size, wordsize, memory, ets_limit].
-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) ->
- Dog = ?t:timetrap(?DEFAULT_TIMEOUT),
- [{watchdog, Dog}|Config].
-
-end_per_testcase(_Case, Config) when is_list(Config) ->
- Dog = ?config(watchdog, Config),
- ?t:timetrap_cancel(Dog),
- ok.
-
%%%
%%% The test cases -------------------------------------------------------------
%%%
-process_count(doc) -> [];
-process_count(suite) -> [];
process_count(Config) when is_list(Config) ->
case catch erlang:system_info(modified_timing_level) of
Level when is_integer(Level) ->
@@ -92,37 +62,37 @@ process_count(Config) when is_list(Config) ->
end.
process_count_test() ->
- ?line OldPrio = process_flag(priority, max),
- ?line check_procs(10),
- ?line check_procs(11234),
- ?line check_procs(57),
- ?line check_procs(1030),
- ?line check_procs(687),
- ?line check_procs(7923),
- ?line check_procs(5302),
- ?line check_procs(12456),
- ?line check_procs(14),
- ?line check_procs(1125),
- ?line check_procs(236),
- ?line check_procs(125),
- ?line check_procs(2346),
- ?line process_flag(priority, OldPrio),
- ?line ok.
+ OldPrio = process_flag(priority, max),
+ check_procs(10),
+ check_procs(11234),
+ check_procs(57),
+ check_procs(1030),
+ check_procs(687),
+ check_procs(7923),
+ check_procs(5302),
+ check_procs(12456),
+ check_procs(14),
+ check_procs(1125),
+ check_procs(236),
+ check_procs(125),
+ check_procs(2346),
+ process_flag(priority, OldPrio),
+ ok.
check_procs(N) ->
- ?line CP = length(processes()),
- ?line Procs = start_procs(N),
- ?line check_pc(CP+N),
- ?line stop_procs(Procs),
- ?line check_pc(CP).
+ CP = length(processes()),
+ Procs = start_procs(N),
+ check_pc(CP+N),
+ stop_procs(Procs),
+ check_pc(CP).
check_pc(E) ->
- ?line P = length(processes()),
- ?line SI = erlang:system_info(process_count),
- ?line ?t:format("E=~p; P=~p; SI=~p~n", [E, P, SI]),
- ?line E = P,
- ?line P = SI.
+ P = length(processes()),
+ SI = erlang:system_info(process_count),
+ io:format("E=~p; P=~p; SI=~p~n", [E, P, SI]),
+ E = P,
+ P = SI.
start_procs(N) ->
lists:map(fun (_) ->
@@ -143,43 +113,34 @@ stop_procs(PMs) ->
end, PMs).
-system_version(doc) -> [];
-system_version(suite) -> [];
system_version(Config) when is_list(Config) ->
- ?line {comment, erlang:system_info(system_version)}.
+ {comment, erlang:system_info(system_version)}.
-misc_smoke_tests(doc) -> [];
-misc_smoke_tests(suite) -> [];
misc_smoke_tests(Config) when is_list(Config) ->
- ?line true = is_binary(erlang:system_info(info)),
- ?line true = is_binary(erlang:system_info(procs)),
- ?line true = is_binary(erlang:system_info(loaded)),
- ?line true = is_binary(erlang:system_info(dist)),
- ?line ok = try erlang:system_info({cpu_topology,erts_get_cpu_topology_error_case}), fail catch error:badarg -> ok end,
+ true = is_binary(erlang:system_info(info)),
+ true = is_binary(erlang:system_info(procs)),
+ true = is_binary(erlang:system_info(loaded)),
+ true = is_binary(erlang:system_info(dist)),
+ ok = try erlang:system_info({cpu_topology,erts_get_cpu_topology_error_case}), fail catch error:badarg -> ok end,
true = lists:member(erlang:system_info(tolerant_timeofday), [enabled, disabled]),
- ?line ok.
+ ok.
-heap_size(doc) -> [];
-heap_size(suite) -> [];
heap_size(Config) when is_list(Config) ->
- ?line {min_bin_vheap_size, VHmin} = erlang:system_info(min_bin_vheap_size),
- ?line {min_heap_size, Hmin} = erlang:system_info(min_heap_size),
- ?line GCinf = erlang:system_info(garbage_collection),
- ?line VHmin = proplists:get_value(min_bin_vheap_size, GCinf),
- ?line Hmin = proplists:get_value(min_heap_size, GCinf),
+ {min_bin_vheap_size, VHmin} = erlang:system_info(min_bin_vheap_size),
+ {min_heap_size, Hmin} = erlang:system_info(min_heap_size),
+ GCinf = erlang:system_info(garbage_collection),
+ VHmin = proplists:get_value(min_bin_vheap_size, GCinf),
+ Hmin = proplists:get_value(min_heap_size, GCinf),
ok.
-wordsize(suite) ->
- [];
-wordsize(doc) ->
- ["Tests the various wordsize variants"];
+%% Tests the various wordsize variants
wordsize(Config) when is_list(Config) ->
- ?line A = erlang:system_info(wordsize),
- ?line true = is_integer(A),
- ?line A = erlang:system_info({wordsize,internal}),
- ?line B = erlang:system_info({wordsize,external}),
- ?line true = A =< B,
+ A = erlang:system_info(wordsize),
+ true = is_integer(A),
+ A = erlang:system_info({wordsize,internal}),
+ B = erlang:system_info({wordsize,external}),
+ true = A =< B,
case {B,A} of
{4,4} ->
{comment, "True 32-bit emulator"};
@@ -189,7 +150,7 @@ wordsize(Config) when is_list(Config) ->
exit({unexpected_wordsizes,Other})
end.
-memory(doc) -> ["Verify that erlang:memory/0 and memory results in crashdump produce are similar"];
+%% Verify that erlang:memory/0 and memory results in crashdump produce are similar
memory(Config) when is_list(Config) ->
%%
%% Verify that erlang:memory/0 and memory results in
@@ -244,8 +205,7 @@ memory_test(_Config) ->
end)
end,
1000 div erlang:system_info(schedulers_online))
- end,
- []),
+ end, []),
cmp_memory(MWs, "spawn procs"),
Ps = lists:flatten(DPs),
@@ -253,14 +213,12 @@ memory_test(_Config) ->
mem_workers_call(MWs,
fun () ->
lists:foreach(fun (P) -> link(P) end, Ps)
- end,
- []),
+ end, []),
cmp_memory(MWs, "link procs"),
mem_workers_call(MWs,
fun () ->
lists:foreach(fun (P) -> unlink(P) end, Ps)
- end,
- []),
+ end, []),
cmp_memory(MWs, "unlink procs"),
mem_workers_call(MWs,
@@ -277,8 +235,7 @@ memory_test(_Config) ->
true = is_reference(Tmr),
put('BIF_TMRS', [Tmr|Tmrs])
end, Ps)
- end,
- []),
+ end, []),
cmp_memory(MWs, "start BIF timer procs"),
mem_workers_call(MWs,
@@ -289,8 +246,7 @@ memory_test(_Config) ->
end, get('BIF_TMRS')),
put('BIF_TMRS', undefined),
garbage_collect()
- end,
- []),
+ end, []),
erts_debug:set_internal_state(wait, deallocations),
cmp_memory(MWs, "cancel BIF timer procs"),
@@ -299,8 +255,7 @@ memory_test(_Config) ->
lists:map(fun (P) ->
monitor(process, P)
end, Ps)
- end,
- []),
+ end, []),
cmp_memory(MWs, "monitor procs"),
Ms = lists:flatten(DMs),
mem_workers_call(MWs,
@@ -308,8 +263,7 @@ memory_test(_Config) ->
lists:foreach(fun (M) ->
demonitor(M)
end, Ms)
- end,
- []),
+ end, []),
cmp_memory(MWs, "demonitor procs"),
mem_workers_call(MWs,
@@ -317,8 +271,7 @@ memory_test(_Config) ->
lists:foreach(fun (P) ->
P ! {a, "message", make_ref()}
end, Ps)
- end,
- []),
+ end, []),
cmp_memory(MWs, "message procs"),
mem_workers_call(MWs,
@@ -341,8 +294,7 @@ memory_test(_Config) ->
fun () ->
put(binary_data,
mapn(fun (_) -> list_to_binary(lists:duplicate(256,$?)) end, 100))
- end,
- []),
+ end, []),
cmp_memory(MWs, "store binary data"),
@@ -350,8 +302,7 @@ memory_test(_Config) ->
fun () ->
put(binary_data, false),
garbage_collect()
- end,
- []),
+ end, []),
cmp_memory(MWs, "release binary data"),
mem_workers_call(MWs,
@@ -359,8 +310,7 @@ memory_test(_Config) ->
list_to_atom("an ugly atom "++integer_to_list(erlang:system_info(scheduler_id))),
list_to_atom("another ugly atom "++integer_to_list(erlang:system_info(scheduler_id))),
list_to_atom("yet another ugly atom "++integer_to_list(erlang:system_info(scheduler_id)))
- end,
- []),
+ end, []),
cmp_memory(MWs, "new atoms"),
@@ -371,16 +321,14 @@ memory_test(_Config) ->
ets:insert(T, {banan, lists:seq(1,1024)}),
ets:insert(T, {appelsin, make_ref()}),
put(ets_id, T)
- end,
- []),
+ end, []),
cmp_memory(MWs, "store ets data"),
mem_workers_call(MWs,
fun () ->
ets:delete(get(ets_id)),
put(ets_id, false)
- end,
- []),
+ end, []),
cmp_memory(MWs, "remove ets data"),
lists:foreach(fun (MW) ->
@@ -390,8 +338,7 @@ memory_test(_Config) ->
receive
{'DOWN', Mon, _, _, _} -> ok
end
- end,
- MWs),
+ end, MWs),
ok.
mem_worker() ->
@@ -406,22 +353,19 @@ mem_worker() ->
mem_workers_call(MWs, Fun, Args) ->
lists:foreach(fun (MW) ->
- MW ! {call, self(), Fun, Args}
- end,
- MWs),
+ MW ! {call, self(), Fun, Args}
+ end, MWs),
lists:map(fun (MW) ->
- receive
- {reply, MW, Res} ->
- Res
- end
- end,
- MWs).
+ receive
+ {reply, MW, Res} ->
+ Res
+ end
+ end, MWs).
mem_workers_cast(MWs, Fun, Args) ->
lists:foreach(fun (MW) ->
MW ! {cast, self(), Fun, Args}
- end,
- MWs).
+ end, MWs).
spawn_mem_workers() ->
spawn_mem_workers(erlang:system_info(schedulers_online)).
@@ -434,7 +378,6 @@ spawn_mem_workers(N) ->
link]) | spawn_mem_workers(N-1)].
-
mem_get(X, Mem) ->
case lists:keyfind(X, 1, Mem) of
{X, Val} -> Val;
@@ -502,25 +445,25 @@ cmp_memory(MWs, Str) ->
"crash dump memory = ~p~n",
[Str, EM, EDM]),
- ?line check_sane_memory(EM),
- ?line check_sane_memory(EDM),
+ check_sane_memory(EM),
+ check_sane_memory(EDM),
%% We expect these to always give us exactly the same result
- ?line cmp_memory(atom, EM, EDM, 1),
- ?line cmp_memory(atom_used, EM, EDM, 1),
- ?line cmp_memory(binary, EM, EDM, 1),
- ?line cmp_memory(code, EM, EDM, 1),
- ?line cmp_memory(ets, EM, EDM, 1),
+ cmp_memory(atom, EM, EDM, 1),
+ cmp_memory(atom_used, EM, EDM, 1),
+ cmp_memory(binary, EM, EDM, 1),
+ cmp_memory(code, EM, EDM, 1),
+ cmp_memory(ets, EM, EDM, 1),
%% Total, processes, processes_used, and system will seldom
%% give us exactly the same result since the two readings
%% aren't taken atomically.
- ?line cmp_memory(total, EM, EDM, 1.05),
- ?line cmp_memory(processes, EM, EDM, 1.05),
- ?line cmp_memory(processes_used, EM, EDM, 1.05),
- ?line cmp_memory(system, EM, EDM, 1.05),
+ cmp_memory(total, EM, EDM, 1.05),
+ cmp_memory(processes, EM, EDM, 1.05),
+ cmp_memory(processes_used, EM, EDM, 1.05),
+ cmp_memory(system, EM, EDM, 1.05),
ok.
@@ -529,9 +472,7 @@ mapn(_Fun, 0) ->
mapn(Fun, N) ->
[Fun(N) | mapn(Fun, N-1)].
-ets_limit(doc) ->
- "Verify system_info(ets_limit) reflects max ETS table settings.";
-ets_limit(suite) -> [];
+%% Verify system_info(ets_limit) reflects max ETS table settings.
ets_limit(Config0) when is_list(Config0) ->
Config = [{testcase,ets_limit}|Config0],
true = is_integer(get_ets_limit(Config)),
@@ -565,12 +506,12 @@ start_node(Config, Envs) when is_list(Config) ->
Pa = filename:dirname(code:which(?MODULE)),
Name = list_to_atom(atom_to_list(?MODULE)
++ "-"
- ++ atom_to_list(?config(testcase, Config))
+ ++ atom_to_list(proplists:get_value(testcase, Config))
++ "-"
++ integer_to_list(erlang:system_time(seconds))
++ "-"
++ integer_to_list(erlang:unique_integer([positive]))),
- ?t:start_node(Name, peer, [{args, "-pa "++Pa}, {env, Envs}]).
+ test_server:start_node(Name, peer, [{args, "-pa "++Pa}, {env, Envs}]).
stop_node(Node) ->
- ?t:stop_node(Node).
+ test_server:stop_node(Node).
diff --git a/erts/emulator/test/system_profile_SUITE.erl b/erts/emulator/test/system_profile_SUITE.erl
index c63a119f9d..2e359b11ce 100644
--- a/erts/emulator/test/system_profile_SUITE.erl
+++ b/erts/emulator/test/system_profile_SUITE.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.
@@ -23,61 +23,29 @@
-module(system_profile_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,
system_profile_on_and_off/1,
- runnable_procs/1,
- runnable_ports/1,
+ runnable_procs/1, runnable_ports/1,
dont_profile_profiler/1,
- scheduler/1
- ]).
-
--export([init_per_testcase/2, end_per_testcase/2]).
+ scheduler/1, sane_location/1]).
-export([profiler_process/1, ring_loop/1, port_echo_start/0,
list_load/0, run_load/2]).
-include_lib("common_test/include/ct.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.
-
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap, {minutes, 1}}].
all() ->
[system_profile_on_and_off, runnable_procs,
- runnable_ports, scheduler, dont_profile_profiler].
-
-groups() ->
- [].
-
-init_per_suite(Config) ->
- Config.
-
-end_per_suite(_Config) ->
- ok.
-
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
-
+ runnable_ports, scheduler, dont_profile_profiler,
+ sane_location].
%% No specification clause needed for an init function in a conf case!!!
%% Test switching system_profiling on and off.
-system_profile_on_and_off(suite) ->
- [];
-system_profile_on_and_off(doc) ->
- ["Tests switching system_profiling on and off."];
system_profile_on_and_off(Config) when is_list(Config) ->
Pid = start_profiler_process(),
@@ -106,12 +74,7 @@ system_profile_on_and_off(Config) when is_list(Config) ->
exit(Pid,kill),
ok.
-%% Test runnable_procs
-
-runnable_procs(suite) ->
- [];
-runnable_procs(doc) ->
- ["Tests system_profiling with runnable_procs."];
+%% Tests system_profiling with runnable_procs.
runnable_procs(Config) when is_list(Config) ->
lists:foreach(fun (TsType) ->
Arg = case TsType of
@@ -148,10 +111,7 @@ do_runnable_procs({TsType, TsTypeFlag}) ->
exit(Pid,kill),
ok.
-runnable_ports(suite) ->
- [];
-runnable_ports(doc) ->
- ["Tests system_profiling with runnable_port."];
+%% Tests system_profiling with runnable_port.
runnable_ports(Config) when is_list(Config) ->
lists:foreach(fun (TsType) ->
Arg = case TsType of
@@ -184,10 +144,7 @@ do_runnable_ports({TsType, TsTypeFlag}, Config) ->
exit(Pid,kill),
ok.
-scheduler(suite) ->
- [];
-scheduler(doc) ->
- ["Tests system_profiling with scheduler."];
+%% Tests system_profiling with scheduler.
scheduler(Config) when is_list(Config) ->
case {erlang:system_info(smp_support), erlang:system_info(schedulers_online)} of
{false,_} -> {skipped, "No need for scheduler test when smp support is disabled."};
@@ -209,11 +166,7 @@ scheduler(Config) when is_list(Config) ->
strict_monotonic_timestamp])
end.
-% the profiler pid should not be profiled
-dont_profile_profiler(suite) ->
- [];
-dont_profile_profiler(doc) ->
- ["Ensure system profiler process is not profiled."];
+%% Ensure system profiler process is not profiled.
dont_profile_profiler(Config) when is_list(Config) ->
Pid = start_profiler_process(),
@@ -231,6 +184,33 @@ dont_profile_profiler(Config) when is_list(Config) ->
exit(Pid,kill),
ok.
+%% Check sane location (of exits)
+sane_location(Config) when is_list(Config) ->
+ Check = spawn_link(fun() -> flush_sane_location() end),
+ erlang:system_profile(Check, [runnable_procs]),
+ Me = self(),
+ Pids = [spawn_link(fun() -> wat(Me) end) || _ <- lists:seq(1,100)],
+ [receive {Pid,ok} -> ok end || Pid <- Pids],
+ Check ! {Me, done},
+ receive {Check,ok} -> ok end,
+ ok.
+
+wat(Pid) ->
+ Pid ! {self(), ok}.
+
+flush_sane_location() ->
+ receive
+ {profile,_,_,{M,F,A},_} when is_atom(M), is_atom(F),
+ is_integer(A) ->
+ flush_sane_location();
+ {profile,_,_,0,_} ->
+ flush_sane_location();
+ {Pid,done} when is_pid(Pid) ->
+ Pid ! {self(), ok};
+ M ->
+ ct:fail({badness,M})
+ end.
+
%%% Check scheduler profiling
@@ -421,7 +401,7 @@ ring_loop(RelayTo) ->
%% API
echo(Config) ->
- Path = ?config(data_dir, Config),
+ Path = proplists:get_value(data_dir, Config),
erl_ddll:load_driver(Path, echo_drv),
Pid = spawn_link(?MODULE, port_echo_start, []),
Pid ! {self(), get_ports},
@@ -481,7 +461,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) ->
@@ -492,7 +472,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) ->
@@ -500,7 +480,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) ->
@@ -510,7 +490,7 @@ check_ts(strict_monotonic_timestamp, Ts) ->
true = is_integer(UMI)
catch
_ : _ ->
- ?t:fail({unexpected_timestamp, Ts})
+ ct:fail({unexpected_timestamp, Ts})
end,
ok.
diff --git a/erts/emulator/test/time_SUITE.erl b/erts/emulator/test/time_SUITE.erl
index f6f99a0c81..87b8c62cfa 100644
--- a/erts/emulator/test/time_SUITE.erl
+++ b/erts/emulator/test/time_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.
@@ -103,32 +103,29 @@ end_per_group(_GroupName, Config) ->
Config.
-local_to_univ_utc(suite) ->
- [];
-local_to_univ_utc(doc) ->
- ["Test that DST = true on timezones without DST is ignored"];
+%% Test that DST = true on timezones without DST is ignored
local_to_univ_utc(Config) when is_list(Config) ->
case os:type() of
{unix,_} ->
%% TZ variable has a meaning
- ?line {ok, Node} =
+ {ok, Node} =
test_server:start_node(local_univ_utc,peer,
[{args, "-env TZ UTC"}]),
- ?line {{2008,8,1},{0,0,0}} =
+ {{2008,8,1},{0,0,0}} =
rpc:call(Node,
erlang,localtime_to_universaltime,
[{{2008, 8, 1}, {0, 0, 0}},
false]),
- ?line {{2008,8,1},{0,0,0}} =
+ {{2008,8,1},{0,0,0}} =
rpc:call(Node,
erlang,localtime_to_universaltime,
[{{2008, 8, 1}, {0, 0, 0}},
true]),
- ?line [{{2008,8,1},{0,0,0}}] =
+ [{{2008,8,1},{0,0,0}}] =
rpc:call(Node,
calendar,local_time_to_universal_time_dst,
[{{2008, 8, 1}, {0, 0, 0}}]),
- ?line test_server:stop_node(Node),
+ test_server:stop_node(Node),
ok;
_ ->
{skip,"Only valid on Unix"}
@@ -138,24 +135,24 @@ local_to_univ_utc(Config) when is_list(Config) ->
%% Tests conversion from univeral to local time.
univ_to_local(Config) when is_list(Config) ->
- ?line test_univ_to_local(test_data()).
+ test_univ_to_local(test_data()).
test_univ_to_local([{Utc, Local}|Rest]) ->
- ?line io:format("Testing ~p => ~p~n", [Local, Utc]),
- ?line Local = erlang:universaltime_to_localtime(Utc),
- ?line test_univ_to_local(Rest);
+ io:format("Testing ~p => ~p~n", [Local, Utc]),
+ Local = erlang:universaltime_to_localtime(Utc),
+ test_univ_to_local(Rest);
test_univ_to_local([]) ->
ok.
%% Tests conversion from local to universal time.
local_to_univ(Config) when is_list(Config) ->
- ?line test_local_to_univ(test_data()).
+ test_local_to_univ(test_data()).
test_local_to_univ([{Utc, Local}|Rest]) ->
- ?line io:format("Testing ~p => ~p~n", [Utc, Local]),
- ?line Utc = erlang:localtime_to_universaltime(Local),
- ?line test_local_to_univ(Rest);
+ io:format("Testing ~p => ~p~n", [Utc, Local]),
+ Utc = erlang:localtime_to_universaltime(Local),
+ test_local_to_univ(Rest);
test_local_to_univ([]) ->
ok.
@@ -163,11 +160,11 @@ test_local_to_univ([]) ->
%% generate a badarg.
bad_univ_to_local(Config) when is_list(Config) ->
- ?line bad_test_univ_to_local(bad_dates()).
+ bad_test_univ_to_local(bad_dates()).
bad_test_univ_to_local([Utc|Rest]) ->
- ?line io:format("Testing ~p~n", [Utc]),
- ?line case catch erlang:universaltime_to_localtime(Utc) of
+ io:format("Testing ~p~n", [Utc]),
+ case catch erlang:universaltime_to_localtime(Utc) of
{'EXIT', {badarg, _}} -> bad_test_univ_to_local(Rest)
end;
bad_test_univ_to_local([]) ->
@@ -177,11 +174,11 @@ bad_test_univ_to_local([]) ->
%% generate a badarg.
bad_local_to_univ(Config) when is_list(Config) ->
- ?line bad_test_local_to_univ(bad_dates()).
+ bad_test_local_to_univ(bad_dates()).
bad_test_local_to_univ([Local|Rest]) ->
- ?line io:format("Testing ~p~n", [Local]),
- ?line case catch erlang:localtime_to_universaltime(Local) of
+ io:format("Testing ~p~n", [Local]),
+ case catch erlang:localtime_to_universaltime(Local) of
{'EXIT', {badarg, _}} -> bad_test_local_to_univ(Rest)
end;
bad_test_local_to_univ([]) ->
@@ -212,28 +209,22 @@ test_seconds_to_univ([]) ->
%% Test that the the different time functions return
-%% consistent results. (See the test case for assumptions
-%% and limitations.)
-consistency(Config) when is_list(Config) ->
- %% Test the following equations:
- %% date() & time() == erlang:localtime()
- %% erlang:universaltime() + timezone == erlang:localtime()
+%% consistent results.
+consistency(_Config) ->
+ %% Test that:
+ %% * date() & time() gives the same time as erlang:localtime()
%%
- %% Assumptions:
- %% Middle-European time zone, EU rules for daylight-saving time.
- %%
- %% Limitations:
- %% Localtime and universaltime must be in the same month.
- %% Daylight-saving calculations are incorrect from the last
- %% Sunday of March and October to the end of the month.
+ %% * the difference between erlang:universaltime() and
+ %% erlang:localtime() is reasonable (with assuming any
+ %% particular timezone)
- ?line ok = compare_date_time_and_localtime(16),
- ?line ok = compare_local_and_universal(16).
+ ok = compare_date_time_and_localtime(16),
+ compare_local_and_universal(16).
compare_date_time_and_localtime(Times) when Times > 0 ->
- ?line {Year, Mon, Day} = date(),
- ?line {Hour, Min, Sec} = time(),
- ?line case erlang:localtime() of
+ {Year, Mon, Day} = date(),
+ {Hour, Min, Sec} = time(),
+ case erlang:localtime() of
{{Year, Mon, Day}, {Hour, Min, Sec}} -> ok;
_ -> compare_date_time_and_localtime(Times-1)
end;
@@ -241,22 +232,18 @@ compare_date_time_and_localtime(0) ->
error.
compare_local_and_universal(Times) when Times > 0 ->
- case compare(erlang:universaltime(), erlang:localtime()) of
- true -> ok;
- false -> compare_local_and_universal(Times-1)
- end;
-compare_local_and_universal(0) ->
- error.
+ Utc = erlang:universaltime(),
+ Local = erlang:localtime(),
+ io:format("local = ~p, utc = ~p", [Local,Utc]),
-compare(Utc0, Local) ->
- io:format("local = ~p, utc = ~p", [Local, Utc0]),
- Utc = linear_time(Utc0)+effective_timezone(Utc0)*3600,
- case linear_time(Local) of
- Utc -> true;
- Other ->
- io:format("Failed: local = ~p, utc = ~p~n",
- [Other, Utc]),
- false
+ AcceptableDiff = 14*3600,
+ case linear_time(Utc) - linear_time(Local) of
+ Diff when abs(Diff) < AcceptableDiff ->
+ ok;
+ Diff ->
+ io:format("More than ~p seconds difference betwen "
+ "local and universal time", [Diff]),
+ ct:fail(huge_diff)
end.
%% This function converts a date and time to a linear time.
@@ -283,42 +270,10 @@ days_in_february(Year) ->
_ -> 28
end.
-%% This functions returns either the normal timezone or the
-%% the DST timezone, depending on the given UTC time.
-%%
-%% XXX This function uses an approximation of the EU rule for
-%% daylight saving time. This function will fail in the
-%% following intervals: After the last Sunday in March upto
-%% the end of March, and after the last Sunday in October
-%% upto the end of October.
-
-effective_timezone(Time) ->
- case os:type() of
- {unix,_} ->
- case os:cmd("date '+%Z'") of
- "SAST"++_ ->
- 2;
- _ ->
- effective_timezone1(Time)
- end;
- _ ->
- effective_timezone1(Time)
- end.
-
-effective_timezone1({{_Year,Mon,_Day}, _}) when Mon < 4 ->
- ?timezone;
-effective_timezone1({{_Year,Mon,_Day}, _}) when Mon > 10 ->
- ?timezone;
-effective_timezone1(_) ->
- ?dst_timezone.
-
%% Test (the bif) os:timestamp/0, which is something quite like, but not
%% similar to erlang:now...
-timestamp(suite) ->
- [];
-timestamp(doc) ->
- ["Test that os:timestamp works."];
+%% Test that os:timestamp works.
timestamp(Config) when is_list(Config) ->
try
repeating_timestamp_check(100000)
@@ -334,7 +289,7 @@ timestamp(Config) when is_list(Config) ->
true ->
{skip, "Seems to be time warp test run..."};
false ->
- test_server:fail(Failure)
+ ct:fail(Failure)
end
end.
@@ -368,9 +323,7 @@ repeating_timestamp_check(N) ->
C < 1000000 ->
ok;
true ->
- test_server:fail(
- lists:flatten(
- io_lib:format("Strange return from os:timestamp/0 ~w~n",[TS])))
+ ct:fail("Strange return from os:timestamp/0 ~w~n",[TS])
end,
%% I assume the now and timestamp should not differ more than 1 hour,
%% which is safe assuming the system has not had a large time-warp
@@ -403,22 +356,22 @@ repeating_timestamp_check(N) ->
%% times (in microseconds).
now_unique(Config) when is_list(Config) ->
- ?line now_unique(1000, now(), []),
- ?line fast_now_unique(100000, now()).
+ now_unique(1000, now(), []),
+ fast_now_unique(100000, now()).
now_unique(N, Previous, Result) when N > 0 ->
- ?line case now() of
+ case now() of
Previous ->
- test_server:fail("now/0 returned the same value twice");
+ ct:fail("now/0 returned the same value twice");
New ->
now_unique(N-1, New, [New|Result])
end;
now_unique(0, _, [Then|Rest]) ->
- ?line now_calc_increment(Rest, microsecs(Then), []).
+ now_calc_increment(Rest, microsecs(Then), []).
now_calc_increment([Then|Rest], Previous, _Result) ->
- ?line This = microsecs(Then),
- ?line now_calc_increment(Rest, This, [Previous-This]);
+ This = microsecs(Then),
+ now_calc_increment(Rest, This, [Previous-This]);
now_calc_increment([], _, Differences) ->
{comment, "Median increment: " ++ integer_to_list(median(Differences))}.
@@ -426,15 +379,15 @@ fast_now_unique(0, _) -> ok;
fast_now_unique(N, Then) ->
case now() of
Then ->
- ?line ?t:fail("now/0 returned the same value twice");
+ ct:fail("now/0 returned the same value twice");
Now ->
fast_now_unique(N-1, Now)
end.
median(Unsorted_List) ->
- ?line Length = length(Unsorted_List),
- ?line List = lists:sort(Unsorted_List),
- ?line case Length rem 2 of
+ Length = length(Unsorted_List),
+ List = lists:sort(Unsorted_List),
+ case Length rem 2 of
0 -> % Even length.
[A, B] = lists:nthtail((Length div 2)-1, List),
(A+B)/2;
@@ -450,31 +403,30 @@ microsecs({Mega_Secs, Secs, Microsecs}) ->
%% calls to erlang:localtime().
now_update(Config) when is_list(Config) ->
- case ?t:is_debug() of
- false -> ?line now_update1(10);
+ case test_server:is_debug() of
+ false -> now_update1(10);
true -> {skip,"Unreliable in DEBUG build"}
end.
now_update1(N) when N > 0 ->
- ?line T1_linear = linear_time(erlang:localtime()),
- ?line T1_now = microsecs(now()),
+ T1_linear = linear_time(erlang:localtime()),
+ T1_now = microsecs(now()),
- ?line receive after 1008 -> ok end,
+ receive after 1008 -> ok end,
- ?line T2_linear = linear_time(erlang:localtime()),
- ?line T2_now = microsecs(now()),
+ T2_linear = linear_time(erlang:localtime()),
+ T2_now = microsecs(now()),
- ?line Linear_Diff = (T2_linear-T1_linear)*1000000,
- ?line Now_Diff = T2_now-T1_now,
- test_server:format("Localtime diff = ~p; now() diff = ~p",
- [Linear_Diff, Now_Diff]),
- ?line case abs(Linear_Diff - Now_Diff) of
+ Linear_Diff = (T2_linear-T1_linear)*1000000,
+ Now_Diff = T2_now-T1_now,
+ io:format("Localtime diff = ~p; now() diff = ~p", [Linear_Diff, Now_Diff]),
+ case abs(Linear_Diff - Now_Diff) of
Abs_Delta when Abs_Delta =< 40000 -> ok;
_ -> now_update1(N-1)
end;
now_update1(0) ->
- ?line test_server:fail().
+ ct:fail("now_update zero").
time_warp_modes(Config) when is_list(Config) ->
%% All time warp modes always supported in
@@ -551,14 +503,14 @@ check_time_warp_mode(Config, TimeCorrection, TimeWarpMode) ->
io:format("Uptime inconsistency", []),
case {TimeCorrection, erlang:system_info(time_correction)} of
{true, true} ->
- ?t:fail(uptime_inconsistency);
+ ct:fail(uptime_inconsistency);
{true, false} ->
_ = erlang:time_offset(),
receive
{'CHANGE', Mon, time_offset, clock_service, _} ->
ignore
after 1000 ->
- ?t:fail(uptime_inconsistency)
+ ct:fail(uptime_inconsistency)
end;
_ ->
ignore
@@ -728,10 +680,10 @@ check_time_offset_res_conv(Mon, Res) ->
TORes2 ->
case check_time_offset_change(Mon, TO, 1000) of
{TO, false} ->
- ?t:fail({time_unit_conversion_inconsistency,
+ ct:fail({time_unit_conversion_inconsistency,
TO, TORes, TORes2});
{_NewTO, true} ->
- ?t:format("time_offset changed", []),
+ io:format("time_offset changed", []),
check_time_offset_res_conv(Mon, Res)
end
end.
@@ -781,15 +733,15 @@ chk_random_values(FR, TR) ->
Values = lists:map(fun (_) -> rand:uniform(1 bsl 65) - (1 bsl 64) end,
lists:seq(1, 100000)),
CheckFun = fun (V) ->
- CV = erlang:convert_time_unit(V, FR, TR),
- case {(FR*CV) div TR =< V,
- (FR*(CV+1)) div TR >= V} of
- {true, true} ->
- ok;
- Failure ->
- ?t:fail({Failure, CV, V, FR, TR})
- end
- end,
+ CV = erlang:convert_time_unit(V, FR, TR),
+ case {(FR*CV) div TR =< V,
+ (FR*(CV+1)) div TR >= V} of
+ {true, true} ->
+ ok;
+ Failure ->
+ ct:fail({Failure, CV, V, FR, TR})
+ end
+ end,
lists:foreach(CheckFun, Values).
@@ -801,7 +753,7 @@ chk_values_per_value(_FromRes, _ToRes,
case ((MinFromValuesPerToValue =< FromValueCount)
andalso (FromValueCount =< MaxFromValuesPerToValue)) of
false ->
- ?t:fail({MinFromValuesPerToValue,
+ ct:fail({MinFromValuesPerToValue,
FromValueCount,
MaxFromValuesPerToValue});
true ->
@@ -811,28 +763,28 @@ chk_values_per_value(FromRes, ToRes, Value, EndValue,
MinFromValuesPerToValue, MaxFromValuesPerToValue,
ToValue, FromValueCount) ->
case erlang:convert_time_unit(Value, FromRes, ToRes) of
- ToValue ->
- chk_values_per_value(FromRes, ToRes,
- Value+1, EndValue,
- MinFromValuesPerToValue,
- MaxFromValuesPerToValue,
- ToValue, FromValueCount+1);
- NewToValue ->
- case ((MinFromValuesPerToValue =< FromValueCount)
- andalso (FromValueCount =< MaxFromValuesPerToValue)) of
- false ->
- ?t:fail({MinFromValuesPerToValue,
- FromValueCount,
- MaxFromValuesPerToValue});
- true ->
-% io:format("~p -> ~p [~p]~n",
-% [Value, NewToValue, FromValueCount]),
- chk_values_per_value(FromRes, ToRes,
- Value+1, EndValue,
- MinFromValuesPerToValue,
- MaxFromValuesPerToValue,
- NewToValue, 1)
- end
+ ToValue ->
+ chk_values_per_value(FromRes, ToRes,
+ Value+1, EndValue,
+ MinFromValuesPerToValue,
+ MaxFromValuesPerToValue,
+ ToValue, FromValueCount+1);
+ NewToValue ->
+ case ((MinFromValuesPerToValue =< FromValueCount)
+ andalso (FromValueCount =< MaxFromValuesPerToValue)) of
+ false ->
+ ct:fail({MinFromValuesPerToValue,
+ FromValueCount,
+ MaxFromValuesPerToValue});
+ true ->
+ % io:format("~p -> ~p [~p]~n",
+ % [Value, NewToValue, FromValueCount]),
+ chk_values_per_value(FromRes, ToRes,
+ Value+1, EndValue,
+ MinFromValuesPerToValue,
+ MaxFromValuesPerToValue,
+ NewToValue, 1)
+ end
end.
erlang_timestamp(Config) when is_list(Config) ->
@@ -845,11 +797,11 @@ erlang_timestamp(Config) when is_list(Config) ->
check_erlang_timestamp(Done, Mon, TO) ->
receive
- {timeout, Done, timeout} ->
- erlang:demonitor(Mon, [flush]),
- ok
+ {timeout, Done, timeout} ->
+ erlang:demonitor(Mon, [flush]),
+ ok
after 0 ->
- do_check_erlang_timestamp(Done, Mon, TO)
+ do_check_erlang_timestamp(Done, Mon, TO)
end.
do_check_erlang_timestamp(Done, Mon, TO) ->
@@ -874,13 +826,13 @@ do_check_erlang_timestamp(Done, Mon, TO) ->
check_erlang_timestamp(Done, Mon, NewTO);
false ->
io:format("TsMin=~p TsTime=~p TsMax=~p~n", [TsMin, TsTime, TsMax]),
- ?t:format("Detected inconsistency; "
+ io:format("Detected inconsistency; "
"checking for time_offset change...", []),
case check_time_offset_change(Mon, TO, 1000) of
{TO, false} ->
- ?t:fail(timestamp_inconsistency);
+ ct:fail(timestamp_inconsistency);
{NewTO, true} ->
- ?t:format("time_offset changed", []),
+ io:format("time_offset changed", []),
check_erlang_timestamp(Done, Mon, NewTO)
end
end.
@@ -921,13 +873,13 @@ test_data() ->
_ ->
{?timezone,?dst_timezone}
end,
- ?line test_data(nondst_dates(), TZ) ++
+ test_data(nondst_dates(), TZ) ++
test_data(dst_dates(), DSTTZ) ++
crossover_test_data(crossover_dates(), TZ).
%% test_data1() ->
-%% ?line test_data(nondst_dates(), ?timezone) ++
+%% test_data(nondst_dates(), ?timezone) ++
%% test_data(dst_dates(), ?dst_timezone) ++
%% crossover_test_data(crossover_dates(), ?timezone).
@@ -935,16 +887,16 @@ crossover_test_data([{Year, Month, Day}|Rest], TimeZone) when TimeZone > 0 ->
Hour = 23,
Min = 35,
Sec = 55,
- ?line Utc = {{Year, Month, Day}, {Hour, Min, Sec}},
- ?line Local = {{Year, Month, Day+1}, {Hour+TimeZone-24, Min, Sec}},
- ?line [{Utc, Local}|crossover_test_data(Rest, TimeZone)];
+ Utc = {{Year, Month, Day}, {Hour, Min, Sec}},
+ Local = {{Year, Month, Day+1}, {Hour+TimeZone-24, Min, Sec}},
+ [{Utc, Local}|crossover_test_data(Rest, TimeZone)];
crossover_test_data([{Year, Month, Day}|Rest], TimeZone) when TimeZone < 0 ->
Hour = 0,
Min = 23,
Sec = 12,
- ?line Utc = {{Year, Month, Day}, {Hour, Min, Sec}},
- ?line Local = {{Year, Month, Day-1}, {Hour+TimeZone+24, Min, Sec}},
- ?line [{Utc, Local}|crossover_test_data(Rest, TimeZone)];
+ Utc = {{Year, Month, Day}, {Hour, Min, Sec}},
+ Local = {{Year, Month, Day-1}, {Hour+TimeZone+24, Min, Sec}},
+ [{Utc, Local}|crossover_test_data(Rest, TimeZone)];
crossover_test_data([], _) ->
[].
@@ -952,9 +904,9 @@ test_data([Date|Rest], TimeZone) ->
Hour = 12,
Min = 45,
Sec = 7,
- ?line Utc = {Date, {Hour, Min, Sec}},
- ?line Local = {Date, {Hour+TimeZone, Min, Sec}},
- ?line [{Utc, Local}|test_data(Rest, TimeZone)];
+ Utc = {Date, {Hour, Min, Sec}},
+ Local = {Date, {Hour+TimeZone, Min, Sec}},
+ [{Utc, Local}|test_data(Rest, TimeZone)];
test_data([], _) ->
[].
@@ -1045,7 +997,7 @@ start_node(Config) ->
start_node(Config, "").
start_node(Config, Args) ->
- TestCase = ?config(testcase, Config),
+ TestCase = proplists:get_value(testcase, Config),
PA = filename:dirname(code:which(?MODULE)),
ESTime = erlang:monotonic_time(1) + erlang:time_offset(1),
Unique = erlang:unique_integer([positive]),
diff --git a/erts/emulator/test/timer_bif_SUITE.erl b/erts/emulator/test/timer_bif_SUITE.erl
index f4615d6810..a5f11bd959 100644
--- a/erts/emulator/test/timer_bif_SUITE.erl
+++ b/erts/emulator/test/timer_bif_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,8 +20,7 @@
-module(timer_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,
+-export([all/0, suite/0, init_per_suite/1, end_per_suite/1,
init_per_testcase/2,end_per_testcase/2]).
-export([start_timer_1/1, send_after_1/1, send_after_2/1, send_after_3/1,
cancel_timer_1/1,
@@ -40,16 +39,13 @@
-define(AUTO_CANCEL_YIELD_LIMIT, 100).
init_per_testcase(_Case, Config) ->
- ?line Dog=test_server:timetrap(test_server:seconds(30)),
case catch erts_debug:get_internal_state(available_internal_state) of
true -> ok;
_ -> erts_debug:set_internal_state(available_internal_state, true)
end,
- [{watchdog, Dog}|Config].
+ Config.
-end_per_testcase(_Case, Config) ->
- Dog = ?config(watchdog, Config),
- test_server:timetrap_cancel(Dog),
+end_per_testcase(_Case, _Config) ->
ok.
init_per_suite(Config) ->
@@ -59,7 +55,9 @@ init_per_suite(Config) ->
end_per_suite(_Config) ->
catch erts_debug:set_internal_state(available_internal_state, false).
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap, {minutes, 5}}].
all() ->
[start_timer_1, send_after_1, send_after_2,
@@ -72,17 +70,8 @@ all() ->
% same_time_yielding_with_cancel_other_accessor,
auto_cancel_yielding].
-groups() ->
- [].
-
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
-
-start_timer_1(doc) -> ["Basic start_timer/3 functionality"];
+%% Basic start_timer/3 functionality
start_timer_1(Config) when is_list(Config) ->
Ref1 = erlang:start_timer(1000, self(), plopp),
ok = get(1100, {timeout, Ref1, plopp}),
@@ -102,54 +91,54 @@ start_timer_1(Config) when is_list(Config) ->
no_message = get(900, {timeout, Ref3, plopp}),
ok.
-send_after_1(doc) -> ["Basic send_after/3 functionality"];
+%% Basic send_after/3 functionality
send_after_1(Config) when is_list(Config) ->
- ?line Ref3 = erlang:send_after(1000, self(), plipp),
- ?line ok = get(1500, plipp),
- ?line false = erlang:read_timer(Ref3),
+ Ref3 = erlang:send_after(1000, self(), plipp),
+ ok = get(1500, plipp),
+ false = erlang:read_timer(Ref3),
ok.
-start_timer_big(doc) -> ["Big timeouts for start_timer/3"];
+%% Big timeouts for start_timer/3
start_timer_big(Config) when is_list(Config) ->
- ?line Big = 1 bsl 31,
- ?line R = erlang:start_timer(Big, self(), hej),
- ?line timer:sleep(200),
- ?line Left = erlang:cancel_timer(R),
- ?line case Big - Left of
- Diff when Diff >= 200, Diff < 10000 ->
- ok;
- _Diff ->
- test_server:fail({big, Big, Left})
- end,
+ Big = 1 bsl 31,
+ R = erlang:start_timer(Big, self(), hej),
+ timer:sleep(200),
+ Left = erlang:cancel_timer(R),
+ case Big - Left of
+ Diff when Diff >= 200, Diff < 10000 ->
+ ok;
+ _Diff ->
+ ct:fail({big, Big, Left})
+ end,
ok.
-send_after_big(doc) -> ["Big timeouts for send_after/3"];
+%% Big timeouts for send_after/3
send_after_big(Config) when is_list(Config) ->
- ?line Big = 1 bsl 31,
- ?line R = erlang:send_after(Big, self(), hej),
- ?line timer:sleep(200),
- ?line Left = erlang:cancel_timer(R),
- ?line case Big - Left of
- Diff when Diff >= 200, Diff < 10000 ->
- ok;
- _Diff ->
- test_server:fail({big, Big, Left})
- end,
+ Big = 1 bsl 31,
+ R = erlang:send_after(Big, self(), hej),
+ timer:sleep(200),
+ Left = erlang:cancel_timer(R),
+ case Big - Left of
+ Diff when Diff >= 200, Diff < 10000 ->
+ ok;
+ _Diff ->
+ ct:fail({big, Big, Left})
+ end,
ok.
-send_after_2(doc) -> ["send_after/3: messages in the right order, kind version"];
+%% send_after/3: messages in the right order, kind version
send_after_2(Config) when is_list(Config) ->
- ?line _ = erlang:send_after(5000, self(), last),
- ?line _ = erlang:send_after(0, self(), a0),
- ?line _ = erlang:send_after(200, self(), a2),
- ?line _ = erlang:send_after(100, self(), a1),
- ?line _ = erlang:send_after(500, self(), a5),
- ?line _ = erlang:send_after(300, self(), a3),
- ?line _ = erlang:send_after(400, self(), a4),
- ?line [a0,a1,a2,a3,a4,a5,last] = collect(last),
+ _ = erlang:send_after(5000, self(), last),
+ _ = erlang:send_after(0, self(), a0),
+ _ = erlang:send_after(200, self(), a2),
+ _ = erlang:send_after(100, self(), a1),
+ _ = erlang:send_after(500, self(), a5),
+ _ = erlang:send_after(300, self(), a3),
+ _ = erlang:send_after(400, self(), a4),
+ [a0,a1,a2,a3,a4,a5,last] = collect(last),
ok.
-send_after_3(doc) -> ["send_after/3: messages in the right order, worse than send_after_2"];
+%% send_after/3: messages in the right order, worse than send_after_2
send_after_3(Config) when is_list(Config) ->
_ = erlang:send_after(100, self(), b1),
_ = erlang:send_after(101, self(), b2),
@@ -157,74 +146,70 @@ send_after_3(Config) when is_list(Config) ->
_ = erlang:send_after(103, self(), last),
[b1, b2, b3, last] = collect(last),
-% This behaviour is not guaranteed:
-% ?line _ = erlang:send_after(100, self(), c1),
-% ?line _ = erlang:send_after(100, self(), c2),
-% ?line _ = erlang:send_after(100, self(), c3),
-% ?line _ = erlang:send_after(100, self(), last),
-% ?line [c1, c2, c3, last] = collect(last),
+ % This behaviour is not guaranteed:
+ % _ = erlang:send_after(100, self(), c1),
+ % _ = erlang:send_after(100, self(), c2),
+ % _ = erlang:send_after(100, self(), c3),
+ % _ = erlang:send_after(100, self(), last),
+ % [c1, c2, c3, last] = collect(last),
ok.
-cancel_timer_1(doc) -> ["Check trivial cancel_timer/1 behaviour"];
+%% Check trivial cancel_timer/1 behaviour
cancel_timer_1(Config) when is_list(Config) ->
- ?line false = erlang:cancel_timer(make_ref()),
+ false = erlang:cancel_timer(make_ref()),
ok.
-start_timer_e(doc) -> ["Error cases for start_timer/3"];
+%% Error cases for start_timer/3
start_timer_e(Config) when is_list(Config) ->
- ?line {'EXIT', _} = (catch erlang:start_timer(-4, self(), hej)),
- ?line {'EXIT', _} = (catch erlang:start_timer(1 bsl 64,
- self(), hej)),
+ {'EXIT', _} = (catch erlang:start_timer(-4, self(), hej)),
+ {'EXIT', _} = (catch erlang:start_timer(1 bsl 64,
+ self(), hej)),
- ?line {'EXIT', _} = (catch erlang:start_timer(4.5, self(), hej)),
- ?line {'EXIT', _} = (catch erlang:start_timer(a, self(), hej)),
+ {'EXIT', _} = (catch erlang:start_timer(4.5, self(), hej)),
+ {'EXIT', _} = (catch erlang:start_timer(a, self(), hej)),
- ?line Node = start_slave(),
- ?line Pid = spawn(Node, timer, sleep, [10000]),
- ?line {'EXIT', _} = (catch erlang:start_timer(1000, Pid, hej)),
- ?line stop_slave(Node),
+ Node = start_slave(),
+ Pid = spawn(Node, timer, sleep, [10000]),
+ {'EXIT', _} = (catch erlang:start_timer(1000, Pid, hej)),
+ stop_slave(Node),
ok.
-send_after_e(doc) -> ["Error cases for send_after/3"];
-send_after_e(suite) -> [];
+%% Error cases for send_after/3
send_after_e(Config) when is_list(Config) ->
- ?line {'EXIT', _} = (catch erlang:send_after(-4, self(), hej)),
- ?line {'EXIT', _} = (catch erlang:send_after(1 bsl 64,
- self(), hej)),
+ {'EXIT', _} = (catch erlang:send_after(-4, self(), hej)),
+ {'EXIT', _} = (catch erlang:send_after(1 bsl 64,
+ self(), hej)),
- ?line {'EXIT', _} = (catch erlang:send_after(4.5, self(), hej)),
- ?line {'EXIT', _} = (catch erlang:send_after(a, self(), hej)),
+ {'EXIT', _} = (catch erlang:send_after(4.5, self(), hej)),
+ {'EXIT', _} = (catch erlang:send_after(a, self(), hej)),
- ?line Node = start_slave(),
- ?line Pid = spawn(Node, timer, sleep, [10000]),
- ?line {'EXIT', _} = (catch erlang:send_after(1000, Pid, hej)),
- ?line stop_slave(Node),
+ Node = start_slave(),
+ Pid = spawn(Node, timer, sleep, [10000]),
+ {'EXIT', _} = (catch erlang:send_after(1000, Pid, hej)),
+ stop_slave(Node),
ok.
-cancel_timer_e(doc) -> ["Error cases for cancel_timer/1"];
-cancel_timer_e(suite) -> [];
+%% Error cases for cancel_timer/1
cancel_timer_e(Config) when is_list(Config) ->
- ?line {'EXIT', _} = (catch erlang:cancel_timer(1)),
- ?line {'EXIT', _} = (catch erlang:cancel_timer(self())),
- ?line {'EXIT', _} = (catch erlang:cancel_timer(a)),
+ {'EXIT', _} = (catch erlang:cancel_timer(1)),
+ {'EXIT', _} = (catch erlang:cancel_timer(self())),
+ {'EXIT', _} = (catch erlang:cancel_timer(a)),
ok.
-read_timer_trivial(doc) -> ["Trivial and error test cases for read_timer/1."];
-read_timer_trivial(suite) -> [];
+%% Trivial and error test cases for read_timer/1.
read_timer_trivial(Config) when is_list(Config) ->
- ?line false = erlang:read_timer(make_ref()),
- ?line {'EXIT', _} = (catch erlang:read_timer(42)),
- ?line {'EXIT', _} = (catch erlang:read_timer(423497834744444444457667444444)),
- ?line {'EXIT', _} = (catch erlang:read_timer(self())),
- ?line {'EXIT', _} = (catch erlang:read_timer(ab)),
+ false = erlang:read_timer(make_ref()),
+ {'EXIT', _} = (catch erlang:read_timer(42)),
+ {'EXIT', _} = (catch erlang:read_timer(423497834744444444457667444444)),
+ {'EXIT', _} = (catch erlang:read_timer(self())),
+ {'EXIT', _} = (catch erlang:read_timer(ab)),
ok.
-read_timer(doc) -> ["Test that read_timer/1 seems to return the correct values."];
-read_timer(suite) -> [];
+%% Test that read_timer/1 seems to return the correct values.
read_timer(Config) when is_list(Config) ->
process_flag(scheduler, 1),
Big = 1 bsl 31,
@@ -234,22 +219,21 @@ read_timer(Config) when is_list(Config) ->
Left = erlang:read_timer(R),
Left2 = erlang:cancel_timer(R),
case Left == Left2 of
- true -> ok;
- false -> Left = Left2 + 1
+ true -> ok;
+ false -> Left = Left2 + 1
end,
false = erlang:read_timer(R),
case Big - Left of
- Diff when Diff >= 200, Diff < 10000 ->
- ok;
- _Diff ->
- test_server:fail({big, Big, Left})
+ Diff when Diff >= 200, Diff < 10000 ->
+ ok;
+ _Diff ->
+ ct:fail({big, Big, Left})
end,
process_flag(scheduler, 0),
ok.
-read_timer_async(doc) -> ["Test that read_timer/1 seems to return the correct values."];
-read_timer_async(suite) -> [];
+%% Test that read_timer/1 seems to return the correct values.
read_timer_async(Config) when is_list(Config) ->
process_flag(scheduler, 1),
Big = 1 bsl 33,
@@ -266,73 +250,69 @@ read_timer_async(Config) when is_list(Config) ->
{read_timer, R, Left} = receive_one(),
{cancel_timer, R, Left2} = receive_one(),
case Left == Left2 of
- true -> ok;
- false -> Left = Left2 + 1
+ true -> ok;
+ false -> Left = Left2 + 1
end,
{read_timer, R, false} = receive_one(),
case Big - Left of
- Diff when Diff >= 200, Diff < 10000 ->
- ok;
- _Diff ->
- test_server:fail({big, Big, Left})
+ Diff when Diff >= 200, Diff < 10000 ->
+ ok;
+ _Diff ->
+ ct:fail({big, Big, Left})
end,
process_flag(scheduler, 0),
ok.
-cleanup(doc) -> [];
-cleanup(suite) -> [];
cleanup(Config) when is_list(Config) ->
- ?line Mem = mem(),
+ Mem = mem(),
%% Timer on dead process
- ?line P1 = spawn(fun () -> ok end),
- ?line wait_until(fun () -> process_is_cleaned_up(P1) end),
- ?line T1 = erlang:start_timer(?SHORT_TIMEOUT*2, P1, "hej"),
- ?line T2 = erlang:send_after(?SHORT_TIMEOUT*2, P1, "hej"),
+ P1 = spawn(fun () -> ok end),
+ wait_until(fun () -> process_is_cleaned_up(P1) end),
+ T1 = erlang:start_timer(?SHORT_TIMEOUT*2, P1, "hej"),
+ T2 = erlang:send_after(?SHORT_TIMEOUT*2, P1, "hej"),
receive after 1000 -> ok end,
- ?line Mem = mem(),
- ?line false = erlang:read_timer(T1),
- ?line false = erlang:read_timer(T2),
- ?line Mem = mem(),
+ Mem = mem(),
+ false = erlang:read_timer(T1),
+ false = erlang:read_timer(T2),
+ Mem = mem(),
%% Process dies before timeout
- ?line P2 = spawn(fun () -> receive after (?SHORT_TIMEOUT div 10) -> ok end end),
- ?line T3 = erlang:start_timer(?SHORT_TIMEOUT*2, P2, "hej"),
- ?line T4 = erlang:send_after(?SHORT_TIMEOUT*2, P2, "hej"),
- ?line true = mem_larger_than(Mem),
- ?line true = is_integer(erlang:read_timer(T3)),
- ?line true = is_integer(erlang:read_timer(T4)),
- ?line wait_until(fun () -> process_is_cleaned_up(P2) end),
+ P2 = spawn(fun () -> receive after (?SHORT_TIMEOUT div 10) -> ok end end),
+ T3 = erlang:start_timer(?SHORT_TIMEOUT*2, P2, "hej"),
+ T4 = erlang:send_after(?SHORT_TIMEOUT*2, P2, "hej"),
+ true = mem_larger_than(Mem),
+ true = is_integer(erlang:read_timer(T3)),
+ true = is_integer(erlang:read_timer(T4)),
+ wait_until(fun () -> process_is_cleaned_up(P2) end),
receive after 1000 -> ok end,
- ?line false = erlang:read_timer(T3),
- ?line false = erlang:read_timer(T4),
- ?line Mem = mem(),
+ false = erlang:read_timer(T3),
+ false = erlang:read_timer(T4),
+ Mem = mem(),
%% Cancel timer
- ?line P3 = spawn(fun () -> receive after ?SHORT_TIMEOUT*4 -> ok end end),
- ?line T5 = erlang:start_timer(?SHORT_TIMEOUT*2, P3, "hej"),
- ?line T6 = erlang:send_after(?SHORT_TIMEOUT*2, P3, "hej"),
- ?line true = mem_larger_than(Mem),
- ?line true = is_integer(erlang:cancel_timer(T5)),
- ?line true = is_integer(erlang:cancel_timer(T6)),
- ?line false = erlang:read_timer(T5),
- ?line false = erlang:read_timer(T6),
- ?line exit(P3, kill),
- ?line wait_until(fun () -> process_is_cleaned_up(P3) end),
- ?line Mem = mem(),
+ P3 = spawn(fun () -> receive after ?SHORT_TIMEOUT*4 -> ok end end),
+ T5 = erlang:start_timer(?SHORT_TIMEOUT*2, P3, "hej"),
+ T6 = erlang:send_after(?SHORT_TIMEOUT*2, P3, "hej"),
+ true = mem_larger_than(Mem),
+ true = is_integer(erlang:cancel_timer(T5)),
+ true = is_integer(erlang:cancel_timer(T6)),
+ false = erlang:read_timer(T5),
+ false = erlang:read_timer(T6),
+ exit(P3, kill),
+ wait_until(fun () -> process_is_cleaned_up(P3) end),
+ Mem = mem(),
%% Timeout
- ?line Ref = make_ref(),
- ?line T7 = erlang:start_timer(?SHORT_TIMEOUT+1, self(), Ref),
- ?line T8 = erlang:send_after(?SHORT_TIMEOUT+1, self(), Ref),
- ?line true = mem_larger_than(Mem),
- ?line true = is_integer(erlang:read_timer(T7)),
- ?line true = is_integer(erlang:read_timer(T8)),
- ?line receive {timeout, T7, Ref} -> ok end,
- ?line receive Ref -> ok end,
- ?line Mem = mem(),
- ?line ok.
-
-
-evil_timers(doc) -> [];
-evil_timers(suite) -> [];
+ Ref = make_ref(),
+ T7 = erlang:start_timer(?SHORT_TIMEOUT+1, self(), Ref),
+ T8 = erlang:send_after(?SHORT_TIMEOUT+1, self(), Ref),
+ true = mem_larger_than(Mem),
+ true = is_integer(erlang:read_timer(T7)),
+ true = is_integer(erlang:read_timer(T8)),
+ receive {timeout, T7, Ref} -> ok end,
+ receive Ref -> ok end,
+ Mem = mem(),
+ ok.
+
+
evil_timers(Config) when is_list(Config) ->
%% Create a composite term consisting of at least:
%% * externals (remote pids, ports, and refs)
@@ -344,38 +324,38 @@ evil_timers(Config) when is_list(Config) ->
%% * lists
%% since data of these types have to be adjusted if moved
%% in memory
- ?line Self = self(),
- ?line R1 = make_ref(),
- ?line Node = start_slave(),
- ?line spawn_link(Node,
- fun () ->
- Self ! {R1,
- [lists:sublist(erlang:ports(), 3),
- [make_ref(), make_ref(), make_ref()],
- lists:sublist(processes(), 3),
- [fun () -> gurka end,
- fun (A) -> A + 1 end,
- fun (A, B) -> A + B end]]}
- end),
- ?line ExtList = receive {R1, L} -> L end,
- ?line stop_slave(Node),
- ?line BinList = [<<"bla">>,
- <<"blipp">>,
- <<"blupp">>,
- list_to_binary(lists:duplicate(1000000,$a)),
- list_to_binary(lists:duplicate(1000000,$b)),
- list_to_binary(lists:duplicate(1000000,$c))],
- ?line FunList = [fun () -> gurka end,
- fun (A) -> A + 1 end,
- fun (A, B) -> A + B end],
- ?line PidList = lists:sublist(processes(), 3),
- ?line PortList = lists:sublist(erlang:ports(), 3),
- ?line RefList = [make_ref(), make_ref(), make_ref()],
- ?line BigList = [111111111111, 22222222222222, 333333333333333333],
- ?line Msg = {BinList,[FunList,{RefList,ExtList,PidList,PortList,BigList}]},
- %% ?line ?t:format("Msg=~p~n",[Msg]),
-
- ?line Prio = process_flag(priority, max),
+ Self = self(),
+ R1 = make_ref(),
+ Node = start_slave(),
+ spawn_link(Node,
+ fun () ->
+ Self ! {R1,
+ [lists:sublist(erlang:ports(), 3),
+ [make_ref(), make_ref(), make_ref()],
+ lists:sublist(processes(), 3),
+ [fun () -> gurka end,
+ fun (A) -> A + 1 end,
+ fun (A, B) -> A + B end]]}
+ end),
+ ExtList = receive {R1, L} -> L end,
+ stop_slave(Node),
+ BinList = [<<"bla">>,
+ <<"blipp">>,
+ <<"blupp">>,
+ list_to_binary(lists:duplicate(1000000,$a)),
+ list_to_binary(lists:duplicate(1000000,$b)),
+ list_to_binary(lists:duplicate(1000000,$c))],
+ FunList = [fun () -> gurka end,
+ fun (A) -> A + 1 end,
+ fun (A, B) -> A + B end],
+ PidList = lists:sublist(processes(), 3),
+ PortList = lists:sublist(erlang:ports(), 3),
+ RefList = [make_ref(), make_ref(), make_ref()],
+ BigList = [111111111111, 22222222222222, 333333333333333333],
+ Msg = {BinList,[FunList,{RefList,ExtList,PidList,PortList,BigList}]},
+ %% io:format("Msg=~p~n",[Msg]),
+
+ Prio = process_flag(priority, max),
%%
%% In the smp case there are four major cases we want to test:
%%
@@ -388,8 +368,8 @@ evil_timers(Config) when is_list(Config) ->
%% be allocated in the previously allocated message buffer along
%% with Msg, i.e. the previously allocated message buffer will be
%% reallocated and potentially moved.
- ?line TimeOutMsgs0 = evil_setup_timers(200, Self, Msg),
- ?line RecvTimeOutMsgs0 = evil_recv_timeouts(200),
+ TimeOutMsgs0 = evil_setup_timers(200, Self, Msg),
+ RecvTimeOutMsgs0 = evil_recv_timeouts(200),
%% 2. A timer started with erlang:start_timer(Time, Receiver, Msg),
%% where Msg is an immediate term, expires, and the receivers main
%% lock *can not* be acquired immediately (typically when the
@@ -397,8 +377,8 @@ evil_timers(Config) when is_list(Config) ->
%%
%% The wrap tuple will in this case be allocated in a new
%% message buffer.
- ?line TimeOutMsgs1 = evil_setup_timers(200, Self, immediate),
- ?line RecvTimeOutMsgs1 = evil_recv_timeouts(200),
+ TimeOutMsgs1 = evil_setup_timers(200, Self, immediate),
+ RecvTimeOutMsgs1 = evil_recv_timeouts(200),
%% 3. A timer started with erlang:start_timer(Time, Receiver, Msg),
%% where Msg is a composite term, expires, and the receivers main
%% lock *can* be acquired immediately (typically when the receiver
@@ -407,13 +387,13 @@ evil_timers(Config) when is_list(Config) ->
%% The wrap tuple will in this case be allocated on the receivers
%% heap, and Msg is passed in the previously allocated message
%% buffer.
- ?line R2 = make_ref(),
- ?line spawn_link(fun () ->
- Self ! {R2, evil_setup_timers(200, Self, Msg)}
- end),
- ?line receive after 1000 -> ok end,
- ?line TimeOutMsgs2 = receive {R2, TOM2} -> TOM2 end,
- ?line RecvTimeOutMsgs2 = evil_recv_timeouts(200),
+ R2 = make_ref(),
+ spawn_link(fun () ->
+ Self ! {R2, evil_setup_timers(200, Self, Msg)}
+ end),
+ receive after 1000 -> ok end,
+ TimeOutMsgs2 = receive {R2, TOM2} -> TOM2 end,
+ RecvTimeOutMsgs2 = evil_recv_timeouts(200),
%% 4. A timer started with erlang:start_timer(Time, Receiver, Msg),
%% where Msg is an immediate term, expires, and the Receivers main
%% lock *can* be acquired immediately (typically when the receiver
@@ -421,109 +401,107 @@ evil_timers(Config) when is_list(Config) ->
%%
%% The wrap tuple will in this case be allocated on the receivers
%% heap.
- ?line R3 = make_ref(),
- ?line spawn_link(fun () ->
- Self ! {R3, evil_setup_timers(200,Self,immediate)}
- end),
- ?line receive after 1000 -> ok end,
- ?line TimeOutMsgs3 = receive {R3, TOM3} -> TOM3 end,
- ?line RecvTimeOutMsgs3 = evil_recv_timeouts(200),
+ R3 = make_ref(),
+ spawn_link(fun () ->
+ Self ! {R3, evil_setup_timers(200,Self,immediate)}
+ end),
+ receive after 1000 -> ok end,
+ TimeOutMsgs3 = receive {R3, TOM3} -> TOM3 end,
+ RecvTimeOutMsgs3 = evil_recv_timeouts(200),
%% Garge collection will hopefully crash the emulator if something
%% is wrong...
- ?line garbage_collect(),
- ?line garbage_collect(),
- ?line garbage_collect(),
+ garbage_collect(),
+ garbage_collect(),
+ garbage_collect(),
%% Make sure we got the timeouts we expected
%%
%% Note timeouts are *not* guaranteed to be delivered in order
- ?line ok = match(lists:sort(RecvTimeOutMsgs0), lists:sort(TimeOutMsgs0)),
- ?line ok = match(lists:sort(RecvTimeOutMsgs1), lists:sort(TimeOutMsgs1)),
- ?line ok = match(lists:sort(RecvTimeOutMsgs2), lists:sort(TimeOutMsgs2)),
- ?line ok = match(lists:sort(RecvTimeOutMsgs3), lists:sort(TimeOutMsgs3)),
+ ok = match(lists:sort(RecvTimeOutMsgs0), lists:sort(TimeOutMsgs0)),
+ ok = match(lists:sort(RecvTimeOutMsgs1), lists:sort(TimeOutMsgs1)),
+ ok = match(lists:sort(RecvTimeOutMsgs2), lists:sort(TimeOutMsgs2)),
+ ok = match(lists:sort(RecvTimeOutMsgs3), lists:sort(TimeOutMsgs3)),
- ?line process_flag(priority, Prio),
- ?line ok.
+ process_flag(priority, Prio),
+ ok.
evil_setup_timers(N, Receiver, Msg) ->
- ?line evil_setup_timers(0, N, Receiver, Msg, []).
+ evil_setup_timers(0, N, Receiver, Msg, []).
evil_setup_timers(N, N, _Receiver, _Msg, TOs) ->
- ?line TOs;
+ TOs;
evil_setup_timers(N, Max, Receiver, Msg, TOs) ->
- ?line TRef = erlang:start_timer(N, Receiver, Msg),
- ?line evil_setup_timers(N+1, Max, Receiver, Msg, [{timeout,TRef,Msg}|TOs]).
+ TRef = erlang:start_timer(N, Receiver, Msg),
+ evil_setup_timers(N+1, Max, Receiver, Msg, [{timeout,TRef,Msg}|TOs]).
evil_recv_timeouts(M) ->
- ?line evil_recv_timeouts([], 0, M).
+ evil_recv_timeouts([], 0, M).
evil_recv_timeouts(TOs, N, N) ->
- ?line TOs;
+ TOs;
evil_recv_timeouts(TOs, N, M) ->
- ?line receive
- {timeout, _, _} = TO ->
- ?line evil_recv_timeouts([TO|TOs], N+1, M)
- after 0 ->
- ?line evil_recv_timeouts(TOs, N, M)
- end.
-
-registered_process(doc) -> [];
-registered_process(suite) -> [];
+ receive
+ {timeout, _, _} = TO ->
+ evil_recv_timeouts([TO|TOs], N+1, M)
+ after 0 ->
+ evil_recv_timeouts(TOs, N, M)
+ end.
+
registered_process(Config) when is_list(Config) ->
- ?line Mem = mem(),
+ Mem = mem(),
%% Cancel
- ?line T1 = erlang:start_timer(?SHORT_TIMEOUT+1, ?MODULE, "hej"),
- ?line T2 = erlang:send_after(?SHORT_TIMEOUT+1, ?MODULE, "hej"),
- ?line undefined = whereis(?MODULE),
- ?line true = mem_larger_than(Mem),
- ?line true = is_integer(erlang:cancel_timer(T1)),
- ?line true = is_integer(erlang:cancel_timer(T2)),
- ?line false = erlang:read_timer(T1),
- ?line false = erlang:read_timer(T2),
- ?line Mem = mem(),
+ T1 = erlang:start_timer(?SHORT_TIMEOUT+1, ?MODULE, "hej"),
+ T2 = erlang:send_after(?SHORT_TIMEOUT+1, ?MODULE, "hej"),
+ undefined = whereis(?MODULE),
+ true = mem_larger_than(Mem),
+ true = is_integer(erlang:cancel_timer(T1)),
+ true = is_integer(erlang:cancel_timer(T2)),
+ false = erlang:read_timer(T1),
+ false = erlang:read_timer(T2),
+ Mem = mem(),
%% Timeout register after start
- ?line Ref1 = make_ref(),
- ?line T3 = erlang:start_timer(?SHORT_TIMEOUT+1, ?MODULE, Ref1),
- ?line T4 = erlang:send_after(?SHORT_TIMEOUT+1, ?MODULE, Ref1),
- ?line undefined = whereis(?MODULE),
- ?line true = mem_larger_than(Mem),
- ?line true = is_integer(erlang:read_timer(T3)),
- ?line true = is_integer(erlang:read_timer(T4)),
- ?line true = register(?MODULE, self()),
- ?line receive {timeout, T3, Ref1} -> ok end,
- ?line receive Ref1 -> ok end,
- ?line Mem = mem(),
+ Ref1 = make_ref(),
+ T3 = erlang:start_timer(?SHORT_TIMEOUT+1, ?MODULE, Ref1),
+ T4 = erlang:send_after(?SHORT_TIMEOUT+1, ?MODULE, Ref1),
+ undefined = whereis(?MODULE),
+ true = mem_larger_than(Mem),
+ true = is_integer(erlang:read_timer(T3)),
+ true = is_integer(erlang:read_timer(T4)),
+ true = register(?MODULE, self()),
+ receive {timeout, T3, Ref1} -> ok end,
+ receive Ref1 -> ok end,
+ Mem = mem(),
%% Timeout register before start
- ?line Ref2 = make_ref(),
- ?line T5 = erlang:start_timer(?SHORT_TIMEOUT+1, ?MODULE, Ref2),
- ?line T6 = erlang:send_after(?SHORT_TIMEOUT+1, ?MODULE, Ref2),
- ?line true = mem_larger_than(Mem),
- ?line true = is_integer(erlang:read_timer(T5)),
- ?line true = is_integer(erlang:read_timer(T6)),
- ?line receive {timeout, T5, Ref2} -> ok end,
- ?line receive Ref2 -> ok end,
- ?line Mem = mem(),
- ?line true = unregister(?MODULE),
- ?line ok.
+ Ref2 = make_ref(),
+ T5 = erlang:start_timer(?SHORT_TIMEOUT+1, ?MODULE, Ref2),
+ T6 = erlang:send_after(?SHORT_TIMEOUT+1, ?MODULE, Ref2),
+ true = mem_larger_than(Mem),
+ true = is_integer(erlang:read_timer(T5)),
+ true = is_integer(erlang:read_timer(T6)),
+ receive {timeout, T5, Ref2} -> ok end,
+ receive Ref2 -> ok end,
+ Mem = mem(),
+ true = unregister(?MODULE),
+ ok.
same_time_yielding(Config) when is_list(Config) ->
Mem = mem(),
SchdlrsOnln = erlang:system_info(schedulers_online),
Tmo = erlang:monotonic_time(milli_seconds) + 3000,
Tmrs = lists:map(fun (I) ->
- process_flag(scheduler, (I rem SchdlrsOnln) + 1),
- erlang:start_timer(Tmo, self(), hej, [{abs, true}])
- end,
- lists:seq(1, (?TIMEOUT_YIELD_LIMIT*3+1)*SchdlrsOnln)),
+ process_flag(scheduler, (I rem SchdlrsOnln) + 1),
+ erlang:start_timer(Tmo, self(), hej, [{abs, true}])
+ end,
+ lists:seq(1, (?TIMEOUT_YIELD_LIMIT*3+1)*SchdlrsOnln)),
true = mem_larger_than(Mem),
lists:foreach(fun (Tmr) -> receive {timeout, Tmr, hej} -> ok end end, Tmrs),
Done = erlang:monotonic_time(milli_seconds),
true = Done >= Tmo,
case erlang:system_info(build_type) of
- opt -> true = Done < Tmo + 200;
- _ -> true = Done < Tmo + 1000
+ opt -> true = Done < Tmo + 200;
+ _ -> true = Done < Tmo + 1000
end,
Mem = mem(),
ok.
@@ -539,19 +517,19 @@ same_time_yielding_with_cancel_other(Config) when is_list(Config) ->
do_cancel_tmrs(Tmo, Tmrs, Tester) ->
BeginCancel = erlang:convert_time_unit(Tmo,
- milli_seconds,
- micro_seconds) - 100,
+ milli_seconds,
+ micro_seconds) - 100,
busy_wait_until(fun () ->
- erlang:monotonic_time(micro_seconds) >= BeginCancel
- end),
+ erlang:monotonic_time(micro_seconds) >= BeginCancel
+ end),
lists:foreach(fun (Tmr) ->
- erlang:cancel_timer(Tmr,
- [{async, true},
- {info, true}])
- end, Tmrs),
+ erlang:cancel_timer(Tmr,
+ [{async, true},
+ {info, true}])
+ end, Tmrs),
case Tester == self() of
- true -> ok;
- false -> forward_msgs(Tester)
+ true -> ok;
+ false -> forward_msgs(Tester)
end.
same_time_yielding_with_cancel_test(Other, Accessor) ->
@@ -560,57 +538,57 @@ same_time_yielding_with_cancel_test(Other, Accessor) ->
Tmo = erlang:monotonic_time(milli_seconds) + 3000,
Tester = self(),
Cancelor = case Other of
- false ->
- Tester;
- true ->
- spawn(fun () ->
- receive
- {timers, Tmrs} ->
- do_cancel_tmrs(Tmo, Tmrs, Tester)
- end
- end)
- end,
+ false ->
+ Tester;
+ true ->
+ spawn(fun () ->
+ receive
+ {timers, Tmrs} ->
+ do_cancel_tmrs(Tmo, Tmrs, Tester)
+ end
+ end)
+ end,
Opts = case Accessor of
- false -> [{abs, true}];
- true -> [{accessor, Cancelor}, {abs, true}]
- end,
+ false -> [{abs, true}];
+ true -> [{accessor, Cancelor}, {abs, true}]
+ end,
Tmrs = lists:map(fun (I) ->
- process_flag(scheduler, (I rem SchdlrsOnln) + 1),
- erlang:start_timer(Tmo, self(), hej, Opts)
- end,
- lists:seq(1, (?TIMEOUT_YIELD_LIMIT*3+1)*SchdlrsOnln)),
+ process_flag(scheduler, (I rem SchdlrsOnln) + 1),
+ erlang:start_timer(Tmo, self(), hej, Opts)
+ end,
+ lists:seq(1, (?TIMEOUT_YIELD_LIMIT*3+1)*SchdlrsOnln)),
true = mem_larger_than(Mem),
case Other of
- false ->
- do_cancel_tmrs(Tmo, Tmrs, Tester);
- true ->
- Cancelor ! {timers, Tmrs}
+ false ->
+ do_cancel_tmrs(Tmo, Tmrs, Tester);
+ true ->
+ Cancelor ! {timers, Tmrs}
end,
{Tmos, Cncls} = lists:foldl(fun (Tmr, {T, C}) ->
- receive
- {timeout, Tmr, hej} ->
- receive
- {cancel_timer, Tmr, Info} ->
- false = Info,
- {T+1, C}
- end;
- {cancel_timer, Tmr, false} ->
- receive
- {timeout, Tmr, hej} ->
- {T+1, C}
- end;
- {cancel_timer, Tmr, TimeLeft} ->
- true = is_integer(TimeLeft),
- {T, C+1}
- end
- end,
- {0, 0},
- Tmrs),
+ receive
+ {timeout, Tmr, hej} ->
+ receive
+ {cancel_timer, Tmr, Info} ->
+ false = Info,
+ {T+1, C}
+ end;
+ {cancel_timer, Tmr, false} ->
+ receive
+ {timeout, Tmr, hej} ->
+ {T+1, C}
+ end;
+ {cancel_timer, Tmr, TimeLeft} ->
+ true = is_integer(TimeLeft),
+ {T, C+1}
+ end
+ end,
+ {0, 0},
+ Tmrs),
io:format("Timeouts: ~p Cancels: ~p~n", [Tmos, Cncls]),
Mem = mem(),
case Other of
- true -> exit(Cancelor, bang);
- false -> ok
+ true -> exit(Cancelor, bang);
+ false -> ok
end,
{comment,
"Timeouts: " ++ integer_to_list(Tmos) ++ " Cancels: "
@@ -620,16 +598,16 @@ auto_cancel_yielding(Config) when is_list(Config) ->
Mem = mem(),
SchdlrsOnln = erlang:system_info(schedulers_online),
P = spawn(fun () ->
- lists:foreach(
- fun (I) ->
- process_flag(scheduler, (I rem SchdlrsOnln)+1),
- erlang:start_timer((1 bsl 28)+I*10, self(), hej)
- end,
- lists:seq(1,
- ((?AUTO_CANCEL_YIELD_LIMIT*3+1)
- *SchdlrsOnln))),
- receive after infinity -> ok end
- end),
+ lists:foreach(
+ fun (I) ->
+ process_flag(scheduler, (I rem SchdlrsOnln)+1),
+ erlang:start_timer((1 bsl 28)+I*10, self(), hej)
+ end,
+ lists:seq(1,
+ ((?AUTO_CANCEL_YIELD_LIMIT*3+1)
+ *SchdlrsOnln))),
+ receive after infinity -> ok end
+ end),
true = mem_larger_than(Mem),
exit(P, bang),
wait_until(fun () -> process_is_cleaned_up(P) end),
@@ -641,46 +619,46 @@ process_is_cleaned_up(P) when is_pid(P) ->
wait_until(Pred) when is_function(Pred) ->
case catch Pred() of
- true -> ok;
- _ -> receive after 50 -> ok end, wait_until(Pred)
+ true -> ok;
+ _ -> receive after 50 -> ok end, wait_until(Pred)
end.
busy_wait_until(Pred) when is_function(Pred) ->
case catch Pred() of
- true -> ok;
- _ -> busy_wait_until(Pred)
+ true -> ok;
+ _ -> busy_wait_until(Pred)
end.
forward_msgs(To) ->
receive
- Msg ->
- To ! Msg
+ Msg ->
+ To ! Msg
end,
forward_msgs(To).
get(Time, Msg) ->
receive
- Msg ->
- ok
+ Msg ->
+ ok
after Time
- ->
- no_message
+ ->
+ no_message
end.
get_msg() ->
receive
- Msg ->
- {ok, Msg}
+ Msg ->
+ {ok, Msg}
after 0 ->
- empty
+ empty
end.
start_slave() ->
- ?line Pa = filename:dirname(code:which(?MODULE)),
- ?line Name = atom_to_list(?MODULE)
- ++ "-" ++ integer_to_list(erlang:system_time(seconds))
- ++ "-" ++ integer_to_list(erlang:unique_integer([positive])),
- {ok, Node} = ?t:start_node(Name, slave, [{args, "-pa " ++ Pa}]),
+ Pa = filename:dirname(code:which(?MODULE)),
+ Name = atom_to_list(?MODULE)
+ ++ "-" ++ integer_to_list(erlang:system_time(seconds))
+ ++ "-" ++ integer_to_list(erlang:unique_integer([positive])),
+ {ok, Node} = test_server:start_node(Name, slave, [{args, "-pa " ++ Pa}]),
Node.
stop_slave(Node) ->
@@ -691,18 +669,18 @@ collect(Last) ->
receive_one() ->
receive
- Msg ->
- Msg
+ Msg ->
+ Msg
end.
collect(Last, Msgs0) ->
Msg = receive_one(),
Msgs = Msgs0 ++ [Msg],
case Msg of
- Last ->
- Msgs;
- _ ->
- collect(Last, Msgs)
+ Last ->
+ Msgs;
+ _ ->
+ collect(Last, Msgs)
end.
match(X, X) ->
@@ -751,8 +729,8 @@ mem() ->
erts_debug:set_internal_state(wait, timer_cancellations),
erts_debug:set_internal_state(wait, deallocations),
case mem_get() of
- {-1, -1} -> no_fix_alloc;
- {A, U} -> io:format("mem = ~p ~p~n", [A, U]), U
+ {-1, -1} -> no_fix_alloc;
+ {A, U} -> io:format("mem = ~p ~p~n", [A, U]), U
end.
mem_get() ->
@@ -765,8 +743,8 @@ mem_recv(0, _Ref, AU) ->
AU;
mem_recv(N, Ref, AU) ->
receive
- {Ref, _, IL} ->
- mem_recv(N-1, Ref, mem_parse_ilists(IL, AU))
+ {Ref, _, IL} ->
+ mem_recv(N-1, Ref, mem_parse_ilists(IL, AU))
end.
@@ -779,19 +757,19 @@ mem_parse_ilist({fix_alloc, false}, _) ->
{-1, -1};
mem_parse_ilist({fix_alloc, _, IDL}, {A, U}) ->
case lists:keyfind(fix_types, 1, IDL) of
- {fix_types, TL} ->
- {ThisA, ThisU} = mem_get_btm_aus(TL, 0, 0),
- {ThisA + A, ThisU + U};
- {fix_types, Mask, TL} ->
- {ThisA, ThisU} = mem_get_btm_aus(TL, 0, 0),
- {(ThisA + A) band Mask , (ThisU + U) band Mask}
+ {fix_types, TL} ->
+ {ThisA, ThisU} = mem_get_btm_aus(TL, 0, 0),
+ {ThisA + A, ThisU + U};
+ {fix_types, Mask, TL} ->
+ {ThisA, ThisU} = mem_get_btm_aus(TL, 0, 0),
+ {(ThisA + A) band Mask , (ThisU + U) band Mask}
end.
mem_get_btm_aus([], A, U) ->
{A, U};
mem_get_btm_aus([{BtmType, BtmA, BtmU} | Types],
- A, U) when BtmType == bif_timer;
- BtmType == accessor_bif_timer ->
+ A, U) when BtmType == bif_timer;
+ BtmType == accessor_bif_timer ->
mem_get_btm_aus(Types, BtmA+A, BtmU+U);
mem_get_btm_aus([_|Types], A, U) ->
mem_get_btm_aus(Types, A, U).
diff --git a/erts/emulator/test/trace_SUITE.erl b/erts/emulator/test/trace_SUITE.erl
index 02c2c7a93a..da6a6bdea4 100644
--- a/erts/emulator/test/trace_SUITE.erl
+++ b/erts/emulator/test/trace_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.
@@ -24,14 +24,15 @@
%%% Tests the trace BIF.
%%%
--export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
- init_per_group/2,end_per_group/2, receive_trace/1, self_send/1,
+-export([all/0, suite/0, link_receive_call_correlation/0,
+ receive_trace/1, link_receive_call_correlation/1, self_send/1,
timeout_trace/1, send_trace/1,
- procs_trace/1, dist_procs_trace/1,
+ procs_trace/1, dist_procs_trace/1, procs_new_trace/1,
suspend/1, mutual_suspend/1, suspend_exit/1, suspender_exit/1,
suspend_system_limit/1, suspend_opts/1, suspend_waiting/1,
new_clear/1, existing_clear/1,
set_on_spawn/1, set_on_first_spawn/1, cpu_timestamp/1,
+ set_on_link/1, set_on_first_link/1,
system_monitor_args/1, more_system_monitor_args/1,
system_monitor_long_gc_1/1, system_monitor_long_gc_2/1,
system_monitor_large_heap_1/1, system_monitor_large_heap_2/1,
@@ -43,78 +44,144 @@
%%% Internal exports
-export([process/1]).
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap, {seconds, 5}}].
all() ->
- [cpu_timestamp, receive_trace, self_send, timeout_trace,
+ [cpu_timestamp, receive_trace, link_receive_call_correlation,
+ self_send, timeout_trace,
send_trace, procs_trace, dist_procs_trace, suspend,
mutual_suspend, suspend_exit, suspender_exit,
suspend_system_limit, suspend_opts, suspend_waiting,
new_clear, existing_clear, set_on_spawn,
- set_on_first_spawn, system_monitor_args,
+ set_on_first_spawn, set_on_link, set_on_first_link,
+ system_monitor_args,
more_system_monitor_args, system_monitor_long_gc_1,
system_monitor_long_gc_2, system_monitor_large_heap_1,
- system_monitor_long_schedule,
+ system_monitor_long_schedule,
system_monitor_large_heap_2, bad_flag, trace_delivered].
-groups() ->
- [].
-
-init_per_suite(Config) ->
- Config.
-
-end_per_suite(_Config) ->
- ok.
-
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
-
-
%% No longer testing anything, just reporting whether cpu_timestamp
%% is enabled or not.
cpu_timestamp(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(5)),
-
%% Test whether cpu_timestamp is implemented on this platform.
- ?line Works = try erlang:trace(all, true, [cpu_timestamp]) of
- _ ->
- ?line erlang:trace(all, false, [cpu_timestamp]),
- true
- catch
- error:badarg -> false
- end,
-
- ?line test_server:timetrap_cancel(Dog),
+ Works = try erlang:trace(all, true, [cpu_timestamp]) of
+ _ ->
+ erlang:trace(all, false, [cpu_timestamp]),
+ true
+ catch
+ error:badarg -> false
+ end,
{comment,case Works of
- false -> "cpu_timestamp is NOT implemented/does not work";
- true -> "cpu_timestamp works"
- end}.
+ false -> "cpu_timestamp is NOT implemented/does not work";
+ true -> "cpu_timestamp works"
+ end}.
%% Tests that trace(Pid, How, ['receive']) works.
receive_trace(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(5)),
- ?line Receiver = fun_spawn(fun receiver/0),
- ?line process_flag(trap_exit, true),
+ Receiver = fun_spawn(fun receiver/0),
%% Trace the process; make sure that we receive the trace messages.
- ?line 1 = erlang:trace(Receiver, true, ['receive']),
- ?line Hello = {hello, world},
- ?line Receiver ! Hello,
- ?line {trace, Receiver, 'receive', Hello} = receive_first(),
- ?line Hello2 = {hello, again, world},
- ?line Receiver ! Hello2,
- ?line {trace, Receiver, 'receive', Hello2} = receive_first(),
- ?line receive_nothing(),
+ 1 = erlang:trace(Receiver, true, ['receive']),
+ Hello = {hello, world},
+ Receiver ! Hello,
+ {trace, Receiver, 'receive', Hello} = receive_first_trace(),
+ Hello2 = {hello, again, world},
+ Receiver ! Hello2,
+ {trace, Receiver, 'receive', Hello2} = receive_first_trace(),
+ receive_nothing(),
+
+ %% Test 'receive' with matchspec
+ F1 = fun ({Pat, IsMatching}) ->
+ set_trace_pattern('receive', Pat, []),
+ Receiver ! Hello,
+ case IsMatching of
+ true ->
+ {trace, Receiver, 'receive', Hello} = receive_first_trace();
+ false ->
+ ok
+ end,
+ receive_nothing()
+ end,
+ From = self(),
+ Node = node(),
+ lists:foreach(F1, [{no, true},
+ {[{[Node, undefined,"Unexpected"],[],[]}], false},
+ {[{[Node, From,'_'],[],[]}], true},
+ {[{[Node, '$1','_'],[{'=/=','$1',From}],[]}], false},
+ {[{['$1', '_','_'],[{'=:=','$1',Node}],[]}], true},
+ {false, false},
+ {true, true}]),
+
+ %% Remote messages
+ OtherName = atom_to_list(?MODULE)++"_receive_trace",
+ {ok, OtherNode} = start_node(OtherName),
+ RemoteProc = spawn_link(OtherNode, ?MODULE, process, [self()]),
+ io:format("RemoteProc = ~p ~n", [RemoteProc]),
+
+ RemoteProc ! {send_please, Receiver, Hello},
+ {trace, Receiver, 'receive', Hello} = receive_first_trace(),
+ RemoteProc ! {send_please, Receiver, 99},
+ {trace, Receiver, 'receive', 99} = receive_first_trace(),
+
+ %% Remote with matchspec
+ F2 = fun (To, {Pat, IsMatching}) ->
+ set_trace_pattern('receive', Pat, []),
+ RemoteProc ! {send_please, To, Hello},
+ case IsMatching of
+ true ->
+ {trace, Receiver, 'receive', Hello} = receive_first_trace();
+ false ->
+ ok
+ end,
+ receive_nothing()
+ end,
+ F2(Receiver, {no, true}),
+ F2(Receiver, {[{[OtherNode, undefined,"Unexpected"],[],[]}], false}),
+ F2(Receiver, {[{[OtherNode, RemoteProc,'_'],[],[]},
+ {[OtherNode, undefined,'_'],[],[]}], true}),
+ F2(Receiver, {[{[OtherNode, '$1','_'],
+ [{'orelse',{'=:=','$1',undefined},{'=/=',{node,'$1'},{node}}}],
+ []}], true}),
+ F2(Receiver, {[{['$1', '_','_'], [{'=:=','$1',OtherNode}], []}], true}),
+ F2(Receiver, {false, false}),
+ F2(Receiver, {true, true}),
+
+ %% Remote to named with matchspec
+ Name = trace_SUITE_receiver,
+ register(Name, Receiver),
+ NN = {Name, node()},
+ F2(NN, {no, true}),
+ F2(NN, {[{[OtherNode, undefined,"Unexpected"],[],[]}], false}),
+ F2(NN, {[{[OtherNode, RemoteProc,'_'],[],[]},
+ {[OtherNode, undefined,'_'],[],[]}], true}),
+ F2(NN, {[{[OtherNode, '$1','_'],
+ [{'orelse',{'=:=','$1',undefined},{'=/=',{node,'$1'},{node}}}],
+ []}], true}),
+ F2(NN, {[{['$1', '_','_'], [{'==','$1',OtherNode}], []}], true}),
+ F2(NN, {false, false}),
+ F2(NN, {true, true}),
+
+ unlink(RemoteProc),
+ true = stop_node(OtherNode),
+
+ %% Timeout
+ Receiver ! {set_timeout, 10},
+ {trace, Receiver, 'receive', {set_timeout, 10}} = receive_first_trace(),
+ {trace, Receiver, 'receive', timeout} = receive_first_trace(),
+ erlang:trace_pattern('receive', [{[clock_service,undefined,timeout], [], []}], []),
+ Receiver ! {set_timeout, 7},
+ {trace, Receiver, 'receive', timeout} = receive_first_trace(),
+ erlang:trace_pattern('receive', true, []),
%% Another process should not be able to trace Receiver.
- ?line Intruder = fun_spawn(fun() -> erlang:trace(Receiver, true, ['receive']) end),
- ?line {'EXIT', Intruder, {badarg, _}} = receive_first(),
+ process_flag(trap_exit, true),
+ Intruder = fun_spawn(fun() -> erlang:trace(Receiver, true, ['receive']) end),
+ {'EXIT', Intruder, {badarg, _}} = receive_first(),
%% Untrace the process; we should not receive anything.
?line 1 = erlang:trace(Receiver, false, ['receive']),
@@ -122,400 +189,663 @@ receive_trace(Config) when is_list(Config) ->
?line Receiver ! any_garbage,
?line receive_nothing(),
- %% Done.
- ?line test_server:timetrap_cancel(Dog),
+ %% Verify restrictions in matchspec for 'receive'
+ F3 = fun (Pat) -> {'EXIT', {badarg,_}} = (catch erlang:trace_pattern('receive', Pat, [])) end,
+ WC = ['_','_','_'],
+ F3([{WC,[],[{message, {process_dump}}]}]),
+ F3([{WC,[{is_seq_trace}],[]}]),
+ F3([{WC,[],[{set_seq_token,label,4711}]}]),
+ F3([{WC,[],[{get_seq_token}]}]),
+ F3([{WC,[],[{enable_trace,call}]}]),
+ F3([{WC,[],[{enable_trace,self(),call}]}]),
+ F3([{WC,[],[{disable_trace,call}]}]),
+ F3([{WC,[],[{disable_trace,self(),call}]}]),
+ F3([{WC,[],[{trace,[call],[]}]}]),
+ F3([{WC,[],[{trace,self(),[],[call]}]}]),
+ F3([{WC,[],[{caller}]}]),
+ F3([{WC,[],[{silent,true}]}]),
+
ok.
-self_send(doc) -> ["Test that traces are generated for messages sent ",
- "and received to/from self()."];
+%% Tests that receive of a message always happens before a call with
+%% that message and that links/unlinks are ordered together with the
+%% 'receive'.
+link_receive_call_correlation() ->
+ [{timetrap, {minutes, 5}}].
+link_receive_call_correlation(Config) when is_list(Config) ->
+ Receiver = fun_spawn(fun F() ->
+ receive
+ stop -> ok;
+ M -> receive_msg(M), F()
+ end
+ end),
+ process_flag(trap_exit, true),
+
+ %% Trace the process; make sure that we receive the trace messages.
+ 1 = erlang:trace(Receiver, true, ['receive', procs, call, timestamp, scheduler_id]),
+ 1 = erlang:trace_pattern({?MODULE, receive_msg, '_'}, [], [local]),
+
+ Num = 100000,
+
+ (fun F(0) -> [];
+ F(N) ->
+ if N rem 2 == 0 ->
+ link(Receiver);
+ true ->
+ unlink(Receiver)
+ end,
+ [Receiver ! N | F(N-1)]
+ end)(Num),
+
+ Receiver ! stop,
+ MonRef = erlang:monitor(process, Receiver),
+ receive {'DOWN', MonRef, _, _, _} -> ok end,
+ Ref = erlang:trace_delivered(Receiver),
+ receive {trace_delivered, _, Ref} -> ok end,
+
+ Msgs = (fun F() -> receive M -> [M | F()] after 1 -> [] end end)(),
+
+ case check_consistent(Receiver, Num, Num, Num, Msgs) of
+ ok ->
+ ok;
+ {error, Reason} ->
+ ct:log("~p", [Msgs]),
+ ct:fail({error, Reason})
+ end.
+
+-define(schedid, , _).
+
+check_consistent(_Pid, Recv, Call, _LU, [Msg | _]) when Recv > Call ->
+ {error, Msg};
+check_consistent(Pid, Recv, Call, LU, [Msg | Msgs]) ->
+
+ case Msg of
+ {trace, Pid, 'receive', Recv ?schedid} ->
+ check_consistent(Pid,Recv - 1, Call, LU, Msgs);
+ {trace_ts, Pid, 'receive', Recv ?schedid, _} ->
+ check_consistent(Pid,Recv - 1, Call, LU, Msgs);
+
+ {trace, Pid, call, {?MODULE, receive_msg, [Call]} ?schedid} ->
+ check_consistent(Pid,Recv, Call - 1, LU, Msgs);
+ {trace_ts, Pid, call, {?MODULE, receive_msg, [Call]} ?schedid, _} ->
+ check_consistent(Pid,Recv, Call - 1, LU, Msgs);
+
+ %% We check that for each receive we have gotten a
+ %% getting_linked or getting_unlinked message. Also
+ %% if we receive a getting_linked, then the next
+ %% message we expect to receive is an even number
+ %% and odd number for getting_unlinked.
+ {trace, Pid, getting_linked, _Self ?schedid}
+ when Recv rem 2 == 0, Recv == LU ->
+ check_consistent(Pid, Recv, Call, LU - 1, Msgs);
+ {trace_ts, Pid, getting_linked, _Self ?schedid, _}
+ when Recv rem 2 == 0, Recv == LU ->
+ check_consistent(Pid, Recv, Call, LU - 1, Msgs);
+
+ {trace, Pid, getting_unlinked, _Self ?schedid}
+ when Recv rem 2 == 1, Recv == LU ->
+ check_consistent(Pid, Recv, Call, LU - 1, Msgs);
+ {trace_ts, Pid, getting_unlinked, _Self ?schedid, _}
+ when Recv rem 2 == 1, Recv == LU ->
+ check_consistent(Pid, Recv, Call, LU - 1, Msgs);
+
+ {trace,Pid,'receive',Ignore ?schedid}
+ when Ignore == stop; Ignore == timeout ->
+ check_consistent(Pid, Recv, Call, LU, Msgs);
+ {trace_ts,Pid,'receive',Ignore ?schedid,_}
+ when Ignore == stop; Ignore == timeout ->
+ check_consistent(Pid, Recv, Call, LU, Msgs);
+
+ {trace, Pid, exit, normal ?schedid} ->
+ check_consistent(Pid, Recv, Call, LU, Msgs);
+ {trace_ts, Pid, exit, normal ?schedid, _} ->
+ check_consistent(Pid, Recv, Call, LU, Msgs);
+ {'EXIT', Pid, normal} ->
+ check_consistent(Pid, Recv, Call, LU, Msgs);
+ Msg ->
+ {error, Msg}
+ end;
+check_consistent(_, 0, 0, 0, []) ->
+ ok;
+check_consistent(_, Recv, Call, LU, []) ->
+ {error,{Recv, Call, LU}}.
+
+receive_msg(M) ->
+ M.
+
+%% Test that traces are generated for messages sent
+%% and received to/from self().
self_send(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(5)),
- ?line Fun =
- fun(Self, Parent) -> receive
- go_ahead ->
- self() ! from_myself,
- Self(Self, Parent);
- from_myself ->
- Parent ! done
- end
- end,
- ?line Self = self(),
- ?line SelfSender = fun_spawn(Fun, [Fun, Self]),
- ?line erlang:trace(SelfSender, true, ['receive', 'send']),
- ?line SelfSender ! go_ahead,
- ?line receive {trace, SelfSender, 'receive', go_ahead} -> ok end,
- ?line receive {trace, SelfSender, 'receive', from_myself} -> ok end,
- ?line receive
- {trace,SelfSender,send,from_myself,SelfSender} -> ok
- end,
- ?line receive {trace,SelfSender,send,done,Self} -> ok end,
- ?line receive done -> ok end,
-
- ?line test_server:timetrap_cancel(Dog),
+ Fun =
+ fun(Self, Parent) -> receive
+ go_ahead ->
+ self() ! from_myself,
+ Self(Self, Parent);
+ from_myself ->
+ Parent ! done
+ end
+ end,
+ Self = self(),
+ SelfSender = fun_spawn(Fun, [Fun, Self]),
+ erlang:trace(SelfSender, true, ['receive', 'send']),
+ SelfSender ! go_ahead,
+ receive {trace, SelfSender, 'receive', go_ahead} -> ok end,
+ receive {trace, SelfSender, 'receive', from_myself} -> ok end,
+ receive
+ {trace,SelfSender,send,from_myself,SelfSender} -> ok
+ end,
+ receive {trace,SelfSender,send,done,Self} -> ok end,
+ receive done -> ok end,
ok.
%% Test that we can receive timeout traces.
timeout_trace(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(5)),
-
- ?line Process = fun_spawn(fun process/0),
- ?line 1 = erlang:trace(Process, true, ['receive']),
- ?line Process ! timeout_please,
- ?line {trace, Process, 'receive', timeout_please} = receive_first(),
- ?line {trace, Process, 'receive', timeout} = receive_first(),
- ?line receive_nothing(),
-
- ?line test_server:timetrap_cancel(Dog),
+ Process = fun_spawn(fun process/0),
+ 1 = erlang:trace(Process, true, ['receive']),
+ Process ! timeout_please,
+ {trace, Process, 'receive', timeout_please} = receive_first_trace(),
+ {trace, Process, 'receive', timeout} = receive_first_trace(),
+ receive_nothing(),
ok.
%% Tests that trace(Pid, How, [send]) works.
send_trace(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(5)),
- ?line process_flag(trap_exit, true),
- ?line Sender = fun_spawn(fun sender/0),
- ?line Receiver = fun_spawn(fun receiver/0),
+ process_flag(trap_exit, true),
+ Sender = fun_spawn(fun sender/0),
+ Receiver = fun_spawn(fun receiver/0),
%% Check that a message sent to another process is traced.
- ?line 1 = erlang:trace(Sender, true, [send]),
- ?line Sender ! {send_please, Receiver, to_receiver},
- ?line {trace, Sender, send, to_receiver, Receiver} = receive_first(),
- ?line receive_nothing(),
+ 1 = erlang:trace(Sender, true, [send]),
+ F1 = fun (Pat) ->
+ set_trace_pattern(send, Pat, []),
+ Sender ! {send_please, Receiver, to_receiver},
+ {trace, Sender, send, to_receiver, Receiver} = receive_first_trace(),
+ receive_nothing()
+ end,
+ lists:foreach(F1, [no,
+ [{[Receiver,to_receiver],[],[]}],
+ [{['_','_'],[],[]}],
+ [{['$1','_'],[{is_pid,'$1'}],[]}],
+ [{['_','$1'],[{is_atom,'$1'}],[]}],
+ true]),
+
+ %% Test {message, Msg}
+ F1m = fun ({Pat, Msg}) ->
+ set_trace_pattern(send, Pat, []),
+ Sender ! {send_please, Receiver, to_receiver},
+ {trace, Sender, send, to_receiver, Receiver, Msg} = receive_first_trace(),
+ receive_nothing()
+ end,
+ lists:foreach(F1m, [{[{['_','_'],[],[{message, 4711}]}], 4711},
+ {[{['_','_'],[],[{message, "4711"}]}], "4711"}
+ ]),
+
+ %% Test {message, {process_dump}}
+ set_trace_pattern(send, [{['_','_'],[],[{message, {process_dump}}]}], []),
+ Sender ! {send_please, Receiver, to_receiver},
+ {trace, Sender, send, to_receiver, Receiver, ProcDump} = receive_first_trace(),
+ true = is_binary(ProcDump),
+ receive_nothing(),
+
+ %% Same test with false match spec
+ F2 = fun (Pat) ->
+ set_trace_pattern(send, Pat, []),
+ Sender ! {send_please, Receiver, to_receiver},
+ receive_nothing()
+ end,
+ lists:foreach(F2, [[{[Sender,to_receiver],[],[]}],
+ [{[Receiver,nomatch],[],[]}],
+ [{['$1','_'],[{is_atom,'$1'}],[]}],
+ [{['_','$1'],[{is_pid,'$1'}],[]}],
+ false,
+ [{['_','_'],[],[{message,false}]}],
+ [{['_','_'],[],[{silent,true}]}]]),
+ erlang:trace_pattern(send, true, []),
+ erlang:trace(Sender, false, [silent]),
%% Check that a message sent to another registered process is traced.
register(?MODULE,Receiver),
- Sender ! {send_please, ?MODULE, to_receiver},
- {trace, Sender, send, to_receiver, ?MODULE} = receive_first(),
- receive_nothing(),
+ F3 = fun (Pat) ->
+ set_trace_pattern(send, Pat, []),
+ Sender ! {send_please, ?MODULE, to_receiver},
+ {trace, Sender, send, to_receiver, ?MODULE} = receive_first_trace(),
+ receive_nothing()
+ end,
+ lists:foreach(F3, [no,
+ [{[?MODULE,to_receiver],[],[]}],
+ [{['_','_'],[],[]}],
+ [{['$1','_'],[{is_atom,'$1'}],[]}],
+ [{['_','$1'],[{is_atom,'$1'}],[]}],
+ true]),
+ %% Again with false match spec
+ F4 = fun (Pat) ->
+ set_trace_pattern(send, Pat, []),
+ Sender ! {send_please, ?MODULE, to_receiver},
+ receive_nothing()
+ end,
+ lists:foreach(F4, [[{[nomatch,to_receiver],[],[]}],
+ [{[?MODULE,nomatch],[],[]}],
+ [{['$1','_'],[{is_pid,'$1'}],[]}],
+ [{['_','$1'],[{is_pid,'$1'}],[]}],
+ [{['_','_'],[],[{message,false}]}],
+ [{['_','_'],[],[{silent,true}]}]
+ ]),
unregister(?MODULE),
+ erlang:trace_pattern(send, true, []),
+ erlang:trace(Sender, false, [silent]),
%% Check that a message sent to this process is traced.
- ?line Sender ! {send_please, self(), to_myself},
- ?line receive to_myself -> ok end,
- ?line Self = self(),
- ?line {trace, Sender, send, to_myself, Self} = receive_first(),
- ?line receive_nothing(),
+ F5 = fun (Pat) ->
+ set_trace_pattern(send, Pat, []),
+ Sender ! {send_please, self(), to_myself},
+ receive to_myself -> ok end,
+ Self = self(),
+ {trace, Sender, send, to_myself, Self} = receive_first_trace(),
+ receive_nothing()
+ end,
+ lists:foreach(F5, [no,
+ [{[self(),to_myself],[],[]}],
+ [{['_','_'],[],[]}],
+ true]),
%% Check that a message sent to dead process is traced.
{Pid,Ref} = spawn_monitor(fun() -> ok end),
receive {'DOWN',Ref,_,_,_} -> ok end,
- Sender ! {send_please, Pid, to_dead},
- {trace, Sender, send_to_non_existing_process, to_dead, Pid} = receive_first(),
- receive_nothing(),
+ F6 = fun (Pat) ->
+ set_trace_pattern(send, Pat, []),
+ Sender ! {send_please, Pid, to_dead},
+ {trace, Sender, send_to_non_existing_process, to_dead, Pid} = receive_first_trace(),
+ receive_nothing()
+ end,
+ lists:foreach(F6, [no,
+ [{[Pid,to_dead],[],[]}],
+ [{['_','_'],[],[]}],
+ true]),
%% Check that a message sent to unknown registrated process is traced.
BadargSender = fun_spawn(fun sender/0),
1 = erlang:trace(BadargSender, true, [send]),
unlink(BadargSender),
BadargSender ! {send_please, not_registered, to_unknown},
- {trace, BadargSender, send, to_unknown, not_registered} = receive_first(),
+ {trace, BadargSender, send, to_unknown, not_registered} = receive_first_trace(),
receive_nothing(),
%% Another process should not be able to trace Sender.
- ?line Intruder = fun_spawn(fun() -> erlang:trace(Sender, true, [send]) end),
- ?line {'EXIT', Intruder, {badarg, _}} = receive_first(),
+ Intruder = fun_spawn(fun() -> erlang:trace(Sender, true, [send]) end),
+ {'EXIT', Intruder, {badarg, _}} = receive_first(),
%% Untrace the sender process and make sure that we receive no more
%% trace messages.
- ?line 1 = erlang:trace(Sender, false, [send]),
- ?line Sender ! {send_please, Receiver, to_receiver},
- ?line Sender ! {send_please, self(), to_myself_again},
- ?line receive to_myself_again -> ok end,
- ?line receive_nothing(),
+ 1 = erlang:trace(Sender, false, [send]),
+ Sender ! {send_please, Receiver, to_receiver},
+ Sender ! {send_please, self(), to_myself_again},
+ receive to_myself_again -> ok end,
+ receive_nothing(),
+ {'EXIT',{badarg,_}} = (catch erlang:trace_pattern(send, true, [global])),
+ {'EXIT',{badarg,_}} = (catch erlang:trace_pattern(send, true, [local])),
+ {'EXIT',{badarg,_}} = (catch erlang:trace_pattern(send, true, [meta])),
+ {'EXIT',{badarg,_}} = (catch erlang:trace_pattern(send, true, [{meta,self()}])),
+ {'EXIT',{badarg,_}} = (catch erlang:trace_pattern(send, true, [call_count])),
+ {'EXIT',{badarg,_}} = (catch erlang:trace_pattern(send, true, [call_time])),
+ {'EXIT',{badarg,_}} = (catch erlang:trace_pattern(send, restart, [])),
+ {'EXIT',{badarg,_}} = (catch erlang:trace_pattern(send, pause, [])),
+ {'EXIT',{badarg,_}} = (catch erlang:trace_pattern(send, [{['_','_'],[],[{caller}]}], [])),
+
%% Done.
- ?line test_server:timetrap_cancel(Dog),
ok.
+set_trace_pattern(_, no, _) -> 0;
+set_trace_pattern(MFA, Pat, Flg) ->
+ R = erlang:trace_pattern(MFA, Pat, Flg),
+ {match_spec, Pat} = erlang:trace_info(MFA, match_spec),
+ R.
+
%% Test trace(Pid, How, [procs]).
procs_trace(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(5)),
- ?line Name = list_to_atom(atom_to_list(?MODULE)++"_procs_trace"),
- ?line Self = self(),
- ?line process_flag(trap_exit, true),
+ Name = list_to_atom(atom_to_list(?MODULE)++"_procs_trace"),
+ Self = self(),
+ process_flag(trap_exit, true),
%%
- ?line Proc1 = spawn_link(?MODULE, process, [Self]),
- ?line io:format("Proc1 = ~p ~n", [Proc1]),
- ?line Proc2 = spawn(?MODULE, process, [Self]),
- ?line io:format("Proc2 = ~p ~n", [Proc2]),
+ Proc1 = spawn_link(?MODULE, process, [Self]),
+ io:format("Proc1 = ~p ~n", [Proc1]),
+ Proc2 = spawn(?MODULE, process, [Self]),
+ io:format("Proc2 = ~p ~n", [Proc2]),
%%
- ?line 1 = erlang:trace(Proc1, true, [procs]),
- ?line MFA = {?MODULE, process, [Self]},
+ 1 = erlang:trace(Proc1, true, [procs, set_on_first_spawn]),
+ MFA = {?MODULE, process, [Self]},
%%
%% spawn, link
- ?line Proc1 ! {spawn_link_please, Self, MFA},
- ?line Proc3 = receive {spawned, Proc1, P3} -> P3 end,
- ?line {trace, Proc1, spawn, Proc3, MFA} = receive_first(),
- ?line io:format("Proc3 = ~p ~n", [Proc3]),
- ?line {trace, Proc1, link, Proc3} = receive_first(),
- ?line receive_nothing(),
+ Proc1 ! {spawn_link_please, Self, MFA},
+ Proc3 = receive {spawned, Proc1, P3} -> P3 end,
+ receive {trace, Proc3, spawned, Proc1, MFA} -> ok end,
+ receive {trace, Proc3, getting_linked, Proc1} -> ok end,
+ {trace, Proc1, spawn, Proc3, MFA} = receive_first_trace(),
+ io:format("Proc3 = ~p ~n", [Proc3]),
+ {trace, Proc1, link, Proc3} = receive_first_trace(),
+ receive_nothing(),
%%
%% getting_unlinked by exit()
- ?line Proc1 ! {trap_exit_please, true},
- ?line Reason3 = make_ref(),
- ?line Proc1 ! {send_please, Proc3, {exit_please, Reason3}},
- ?line receive {Proc1, {'EXIT', Proc3, Reason3}} -> ok end,
- ?line {trace, Proc1, getting_unlinked, Proc3} = receive_first(),
- ?line Proc1 ! {trap_exit_please, false},
- ?line receive_nothing(),
+ Proc1 ! {trap_exit_please, true},
+ Reason3 = make_ref(),
+ Proc1 ! {send_please, Proc3, {exit_please, Reason3}},
+ receive {Proc1, {'EXIT', Proc3, Reason3}} -> ok end,
+ receive {trace, Proc3, exit, Reason3} -> ok end,
+ {trace, Proc1, getting_unlinked, Proc3} = receive_first_trace(),
+ Proc1 ! {trap_exit_please, false},
+ receive_nothing(),
%%
%% link
- ?line Proc1 ! {link_please, Proc2},
- ?line {trace, Proc1, link, Proc2} = receive_first(),
- ?line receive_nothing(),
+ Proc1 ! {link_please, Proc2},
+ {trace, Proc1, link, Proc2} = receive_first_trace(),
+ receive_nothing(),
%%
%% unlink
- ?line Proc1 ! {unlink_please, Proc2},
- ?line {trace, Proc1, unlink, Proc2} = receive_first(),
- ?line receive_nothing(),
+ Proc1 ! {unlink_please, Proc2},
+ {trace, Proc1, unlink, Proc2} = receive_first_trace(),
+ receive_nothing(),
%%
%% getting_linked
- ?line Proc2 ! {link_please, Proc1},
- ?line {trace, Proc1, getting_linked, Proc2} = receive_first(),
- ?line receive_nothing(),
+ Proc2 ! {link_please, Proc1},
+ {trace, Proc1, getting_linked, Proc2} = receive_first_trace(),
+ receive_nothing(),
%%
%% getting_unlinked
- ?line Proc2 ! {unlink_please, Proc1},
- ?line {trace, Proc1, getting_unlinked, Proc2} = receive_first(),
- ?line receive_nothing(),
+ Proc2 ! {unlink_please, Proc1},
+ {trace, Proc1, getting_unlinked, Proc2} = receive_first_trace(),
+ receive_nothing(),
%%
%% register
- ?line true = register(Name, Proc1),
- ?line {trace, Proc1, register, Name} = receive_first(),
- ?line receive_nothing(),
+ true = register(Name, Proc1),
+ {trace, Proc1, register, Name} = receive_first_trace(),
+ receive_nothing(),
%%
%% unregister
- ?line true = unregister(Name),
- ?line {trace, Proc1, unregister, Name} = receive_first(),
- ?line receive_nothing(),
+ true = unregister(Name),
+ {trace, Proc1, unregister, Name} = receive_first_trace(),
+ receive_nothing(),
%%
%% exit (with registered name, due to link)
- ?line Reason4 = make_ref(),
- ?line Proc1 ! {spawn_link_please, Self, MFA},
- ?line Proc4 = receive {spawned, Proc1, P4} -> P4 end,
- ?line {trace, Proc1, spawn, Proc4, MFA} = receive_first(),
- ?line io:format("Proc4 = ~p ~n", [Proc4]),
- ?line {trace, Proc1, link, Proc4} = receive_first(),
- ?line Proc1 ! {register_please, Name, Proc1},
- ?line {trace, Proc1, register, Name} = receive_first(),
- ?line Proc4 ! {exit_please, Reason4},
- ?line receive {'EXIT', Proc1, Reason4} -> ok end,
- ?line {trace, Proc1, exit, Reason4} = receive_first(),
- ?line {trace, Proc1, unregister, Name} = receive_first(),
- ?line receive_nothing(),
+ Reason4 = make_ref(),
+ Proc1 ! {spawn_link_please, Self, MFA},
+ Proc4 = receive {spawned, Proc1, P4} -> P4 end,
+ {trace, Proc1, spawn, Proc4, MFA} = receive_first_trace(),
+ io:format("Proc4 = ~p ~n", [Proc4]),
+ {trace, Proc1, link, Proc4} = receive_first_trace(),
+ Proc1 ! {register_please, Name, Proc1},
+ {trace, Proc1, register, Name} = receive_first_trace(),
+ Proc4 ! {exit_please, Reason4},
+ receive {'EXIT', Proc1, Reason4} -> ok end,
+ {trace, Proc1, exit, Reason4} = receive_first_trace(),
+ {trace, Proc1, unregister, Name} = receive_first_trace(),
+ receive_nothing(),
%%
%% exit (not linked to tracing process)
- ?line 1 = erlang:trace(Proc2, true, [procs]),
- ?line Reason2 = make_ref(),
- ?line Proc2 ! {exit_please, Reason2},
- ?line {trace, Proc2, exit, Reason2} = receive_first(),
- ?line receive_nothing(),
- %%
- %% Done.
- ?line test_server:timetrap_cancel(Dog),
+ 1 = erlang:trace(Proc2, true, [procs]),
+ Reason2 = make_ref(),
+ Proc2 ! {exit_please, Reason2},
+ {trace, Proc2, exit, Reason2} = receive_first_trace(),
+ receive_nothing(),
ok.
dist_procs_trace(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(15)),
- ?line OtherName = atom_to_list(?MODULE)++"_dist_procs_trace",
- ?line {ok, OtherNode} = start_node(OtherName),
- ?line Self = self(),
- ?line process_flag(trap_exit, true),
+ ct:timetrap({seconds, 15}),
+ OtherName = atom_to_list(?MODULE)++"_dist_procs_trace",
+ {ok, OtherNode} = start_node(OtherName),
+ Self = self(),
+ process_flag(trap_exit, true),
%%
- ?line Proc1 = spawn_link(?MODULE, process, [Self]),
- ?line io:format("Proc1 = ~p ~n", [Proc1]),
- ?line Proc2 = spawn(OtherNode, ?MODULE, process, [Self]),
- ?line io:format("Proc2 = ~p ~n", [Proc2]),
+ Proc1 = spawn_link(?MODULE, process, [Self]),
+ io:format("Proc1 = ~p ~n", [Proc1]),
+ Proc2 = spawn(OtherNode, ?MODULE, process, [Self]),
+ io:format("Proc2 = ~p ~n", [Proc2]),
%%
- ?line 1 = erlang:trace(Proc1, true, [procs]),
- ?line MFA = {?MODULE, process, [Self]},
+ 1 = erlang:trace(Proc1, true, [procs]),
+ MFA = {?MODULE, process, [Self]},
%%
%% getting_unlinked by exit()
- ?line Proc1 ! {spawn_link_please, Self, OtherNode, MFA},
- ?line Proc1 ! {trap_exit_please, true},
- ?line Proc3 = receive {spawned, Proc1, P3} -> P3 end,
- ?line io:format("Proc3 = ~p ~n", [Proc3]),
- ?line {trace, Proc1, getting_linked, Proc3} = receive_first(),
- ?line Reason3 = make_ref(),
- ?line Proc1 ! {send_please, Proc3, {exit_please, Reason3}},
- ?line receive {Proc1, {'EXIT', Proc3, Reason3}} -> ok end,
- ?line {trace, Proc1, getting_unlinked, Proc3} = receive_first(),
- ?line Proc1 ! {trap_exit_please, false},
- ?line receive_nothing(),
+ Proc1 ! {spawn_link_please, Self, OtherNode, MFA},
+ Proc1 ! {trap_exit_please, true},
+ Proc3 = receive {spawned, Proc1, P3} -> P3 end,
+ io:format("Proc3 = ~p ~n", [Proc3]),
+ {trace, Proc1, getting_linked, Proc3} = receive_first_trace(),
+ Reason3 = make_ref(),
+ Proc1 ! {send_please, Proc3, {exit_please, Reason3}},
+ receive {Proc1, {'EXIT', Proc3, Reason3}} -> ok end,
+ {trace, Proc1, getting_unlinked, Proc3} = receive_first_trace(),
+ Proc1 ! {trap_exit_please, false},
+ receive_nothing(),
%%
%% link
- ?line Proc1 ! {link_please, Proc2},
- ?line {trace, Proc1, link, Proc2} = receive_first(),
- ?line receive_nothing(),
+ Proc1 ! {link_please, Proc2},
+ {trace, Proc1, link, Proc2} = receive_first_trace(),
+ receive_nothing(),
%%
%% unlink
- ?line Proc1 ! {unlink_please, Proc2},
- ?line {trace, Proc1, unlink, Proc2} = receive_first(),
- ?line receive_nothing(),
+ Proc1 ! {unlink_please, Proc2},
+ {trace, Proc1, unlink, Proc2} = receive_first_trace(),
+ receive_nothing(),
%%
%% getting_linked
- ?line Proc2 ! {link_please, Proc1},
- ?line {trace, Proc1, getting_linked, Proc2} = receive_first(),
- ?line receive_nothing(),
+ Proc2 ! {link_please, Proc1},
+ {trace, Proc1, getting_linked, Proc2} = receive_first_trace(),
+ receive_nothing(),
%%
%% getting_unlinked
- ?line Proc2 ! {unlink_please, Proc1},
- ?line {trace, Proc1, getting_unlinked, Proc2} = receive_first(),
- ?line receive_nothing(),
+ Proc2 ! {unlink_please, Proc1},
+ {trace, Proc1, getting_unlinked, Proc2} = receive_first_trace(),
+ receive_nothing(),
+
%%
%% exit (with registered name, due to link)
- ?line Name = list_to_atom(OtherName),
- ?line Reason2 = make_ref(),
- ?line Proc1 ! {link_please, Proc2},
- ?line {trace, Proc1, link, Proc2} = receive_first(),
- ?line Proc1 ! {register_please, Name, Proc1},
- ?line {trace, Proc1, register, Name} = receive_first(),
- ?line Proc2 ! {exit_please, Reason2},
- ?line receive {'EXIT', Proc1, Reason2} -> ok end,
- ?line {trace, Proc1, exit, Reason2} = receive_first(),
- ?line {trace, Proc1, unregister, Name} = receive_first(),
- ?line receive_nothing(),
+ Name = list_to_atom(OtherName),
+ Reason2 = make_ref(),
+ Proc1 ! {link_please, Proc2},
+ {trace, Proc1, link, Proc2} = receive_first_trace(),
+ Proc1 ! {register_please, Name, Proc1},
+ {trace, Proc1, register, Name} = receive_first_trace(),
+ Proc2 ! {exit_please, Reason2},
+ receive {'EXIT', Proc1, Reason2} -> ok end,
+ {trace, Proc1, exit, Reason2} = receive_first_trace(),
+ {trace, Proc1, unregister, Name} = receive_first_trace(),
+ receive_nothing(),
%%
%% Done.
- ?line true = stop_node(OtherNode),
- ?line test_server:timetrap_cancel(Dog),
+ true = stop_node(OtherNode),
ok.
+%% Test trace(new, How, [procs]).
+procs_new_trace(Config) when is_list(Config) ->
+ Self = self(),
+ process_flag(trap_exit, true),
+ %%
+ Proc1 = spawn_link(?MODULE, process, [Self]),
+ io:format("Proc1 = ~p ~n", [Proc1]),
+ %%
+ 0 = erlang:trace(new, true, [procs]),
+
+ MFA = {?MODULE, process, [Self]},
+ %%
+ %% spawn, link
+ Proc1 ! {spawn_link_please, Self, MFA},
+ Proc3 = receive {spawned, Proc1, P3} -> P3 end,
+ receive {trace, Proc3, spawned, Proc1, MFA} -> ok end,
+ receive {trace, Proc3, getting_linked, Proc1} -> ok end,
+ io:format("Proc3 = ~p ~n", [Proc3]),
+ receive_nothing(),
+ %%
+ %%
+ %% exit (not linked to tracing process)
+ Reason1 = make_ref(),
+ Proc1 ! {exit_please, Reason1},
+ receive {'EXIT', Proc1, Reason1} -> ok end,
+ {trace, Proc3, exit, Reason1} = receive_first_trace(),
+ receive_nothing(),
+ ok.
%% Tests trace(Pid, How, [set_on_spawn]).
set_on_spawn(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(5)),
- ?line Listener = fun_spawn(fun process/0),
+ Listener = fun_spawn(fun process/0),
%% Create and trace a process with the set_on_spawn flag.
%% Make sure it is traced.
- ?line Father_SOS = fun_spawn(fun process/0),
- ?line 1 = erlang:trace(Father_SOS, true, [send, set_on_spawn]),
- ?line true = is_send_traced(Father_SOS, Listener, sos_father),
+ Father_SOS = fun_spawn(fun process/0),
+ 1 = erlang:trace(Father_SOS, true, [send, set_on_spawn]),
+ true = is_send_traced(Father_SOS, Listener, sos_father),
%% Have the process spawn of two children and test that they
%% are traced.
- ?line [Child1, Child2] = spawn_children(Father_SOS, 2),
- ?line true = is_send_traced(Child1, Listener, child1),
- ?line true = is_send_traced(Child2, Listener, child2),
+ [Child1, Child2] = spawn_children(Father_SOS, 2),
+ true = is_send_traced(Child1, Listener, child1),
+ true = is_send_traced(Child2, Listener, child2),
%% Second generation.
[Child11, Child12] = spawn_children(Child1, 2),
- ?line true = is_send_traced(Child11, Listener, child11),
- ?line true = is_send_traced(Child12, Listener, child12),
-
- %% Done.
- ?line test_server:timetrap_cancel(Dog),
+ true = is_send_traced(Child11, Listener, child11),
+ true = is_send_traced(Child12, Listener, child12),
ok.
%% Tests trace(Pid, How, [set_on_first_spawn]).
set_on_first_spawn(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(10)),
- ?line Listener = fun_spawn(fun process/0),
+ ct:timetrap({seconds, 10}),
+ Listener = fun_spawn(fun process/0),
%% Create and trace a process with the set_on_first_spawn flag.
%% Make sure it is traced.
- ?line Parent = fun_spawn(fun process/0),
- ?line 1 = erlang:trace(Parent, true, [send, set_on_first_spawn]),
- ?line is_send_traced(Parent, Listener, sos_father),
+ Parent = fun_spawn(fun process/0),
+ 1 = erlang:trace(Parent, true, [send, set_on_first_spawn]),
+ is_send_traced(Parent, Listener, sos_father),
%% Have the process spawn off three children and test that the
%% first is traced.
- ?line [Child1, Child2, Child3] = spawn_children(Parent, 3),
- ?line true = is_send_traced(Child1, Listener, child1),
- ?line false = is_send_traced(Child2, Listener, child2),
- ?line false = is_send_traced(Child3, Listener, child3),
- ?line receive_nothing(),
+ [Child1, Child2, Child3] = spawn_children(Parent, 3),
+ true = is_send_traced(Child1, Listener, child1),
+ false = is_send_traced(Child2, Listener, child2),
+ false = is_send_traced(Child3, Listener, child3),
+ receive_nothing(),
+ ok.
- %% Done.
- ?line test_server:timetrap_cancel(Dog),
+%% Tests trace(Pid, How, [set_on_link]).
+
+set_on_link(Config) ->
+ Listener = fun_spawn(fun process/0),
+
+ %% Create and trace a process with the set_on_link flag.
+ %% Make sure it is traced.
+ Father_SOL = fun_spawn(fun process/0),
+ 1 = erlang:trace(Father_SOL, true, [send, set_on_link]),
+ true = is_send_traced(Father_SOL, Listener, sol_father),
+
+ %% Have the process spawn of two children and test that they
+ %% are traced.
+ [Child1, Child2] = spawn_children(Father_SOL, 2),
+ true = is_send_traced(Child1, Listener, child1),
+ true = is_send_traced(Child2, Listener, child2),
+
+ %% Second generation.
+ [Child11, Child12] = spawn_children(Child1, 2),
+ true = is_send_traced(Child11, Listener, child11),
+ true = is_send_traced(Child12, Listener, child12),
ok.
+%% Tests trace(Pid, How, [set_on_first_spawn]).
+
+set_on_first_link(Config) ->
+ ct:timetrap({seconds, 10}),
+ Listener = fun_spawn(fun process/0),
-system_monitor_args(doc) ->
- ["Tests arguments to erlang:system_monitor/0-2)"];
+ %% Create and trace a process with the set_on_first_spawn flag.
+ %% Make sure it is traced.
+ Parent = fun_spawn(fun process/0),
+ 1 = erlang:trace(Parent, true, [send, set_on_first_link]),
+ is_send_traced(Parent, Listener, sol_father),
+
+ %% Have the process spawn off three children and test that the
+ %% first is traced.
+ [Child1, Child2, Child3] = spawn_children(Parent, 3),
+ true = is_send_traced(Child1, Listener, child1),
+ false = is_send_traced(Child2, Listener, child2),
+ false = is_send_traced(Child3, Listener, child3),
+ receive_nothing(),
+ ok.
+
+
+
+%% Tests arguments to erlang:system_monitor/0,1,2
system_monitor_args(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(5)),
- ?line Self = self(),
+ Self = self(),
%%
- ?line OldMonitor = erlang:system_monitor(undefined),
- ?line undefined = erlang:system_monitor(Self, [{long_gc,0}]),
- ?line MinT = case erlang:system_monitor() of
- {Self,[{long_gc,T}]} when is_integer(T), T > 0 -> T;
- Other1 -> test_server:fault(Other1)
- end,
- ?line {Self,[{long_gc,MinT}]} = erlang:system_monitor(),
- ?line {Self,[{long_gc,MinT}]} =
- erlang:system_monitor({Self,[{large_heap,0}]}),
- ?line MinN = case erlang:system_monitor() of
- {Self,[{large_heap,N}]} when is_integer(N), N > 0 -> N;
- Other2 -> test_server:fault(Other2)
- end,
- ?line {Self,[{large_heap,MinN}]} = erlang:system_monitor(),
- ?line {Self,[{large_heap,MinN}]} =
- erlang:system_monitor(Self, [busy_port]),
- ?line {Self,[busy_port]} = erlang:system_monitor(),
- ?line {Self,[busy_port]} =
- erlang:system_monitor({Self,[busy_dist_port]}),
- ?line {Self,[busy_dist_port]} = erlang:system_monitor(),
- ?line All = lists:sort([busy_port,busy_dist_port,
- {long_gc,1},{large_heap,65535}]),
- ?line {Self,[busy_dist_port]} = erlang:system_monitor(Self, All),
- ?line {Self,A1} = erlang:system_monitor(),
- ?line All = lists:sort(A1),
- ?line {Self,A1} = erlang:system_monitor(Self, []),
- ?line Pid = spawn(fun () -> receive {Self,die} -> exit(die) end end),
- ?line Mref = erlang:monitor(process, Pid),
- ?line undefined = erlang:system_monitor(Pid, All),
- ?line {Pid,A2} = erlang:system_monitor(),
- ?line All = lists:sort(A2),
- ?line Pid ! {Self,die},
- ?line receive {'DOWN',Mref,_,_,_} -> ok end,
- ?line undefined = erlang:system_monitor(OldMonitor),
- ?line erlang:yield(),
- ?line OldMonitor = erlang:system_monitor(),
+ OldMonitor = erlang:system_monitor(undefined),
+ undefined = erlang:system_monitor(Self, [{long_gc,0}]),
+ MinT = case erlang:system_monitor() of
+ {Self,[{long_gc,T}]} when is_integer(T), T > 0 -> T;
+ Other1 -> test_server:fault(Other1)
+ end,
+ {Self,[{long_gc,MinT}]} = erlang:system_monitor(),
+ {Self,[{long_gc,MinT}]} =
+ erlang:system_monitor({Self,[{large_heap,0}]}),
+ MinN = case erlang:system_monitor() of
+ {Self,[{large_heap,N}]} when is_integer(N), N > 0 -> N;
+ Other2 -> test_server:fault(Other2)
+ end,
+ {Self,[{large_heap,MinN}]} = erlang:system_monitor(),
+ {Self,[{large_heap,MinN}]} =
+ erlang:system_monitor(Self, [busy_port]),
+ {Self,[busy_port]} = erlang:system_monitor(),
+ {Self,[busy_port]} =
+ erlang:system_monitor({Self,[busy_dist_port]}),
+ {Self,[busy_dist_port]} = erlang:system_monitor(),
+ All = lists:sort([busy_port,busy_dist_port,
+ {long_gc,1},{large_heap,65535}]),
+ {Self,[busy_dist_port]} = erlang:system_monitor(Self, All),
+ {Self,A1} = erlang:system_monitor(),
+ All = lists:sort(A1),
+ {Self,A1} = erlang:system_monitor(Self, []),
+ Pid = spawn(fun () -> receive {Self,die} -> exit(die) end end),
+ Mref = erlang:monitor(process, Pid),
+ undefined = erlang:system_monitor(Pid, All),
+ {Pid,A2} = erlang:system_monitor(),
+ All = lists:sort(A2),
+ Pid ! {Self,die},
+ receive {'DOWN',Mref,_,_,_} -> ok end,
+ undefined = erlang:system_monitor(OldMonitor),
+ erlang:yield(),
+ OldMonitor = erlang:system_monitor(),
%%
- ?line {'EXIT',{badarg,_}} = (catch erlang:system_monitor(atom)),
- ?line {'EXIT',{badarg,_}} = (catch erlang:system_monitor({})),
- ?line {'EXIT',{badarg,_}} = (catch erlang:system_monitor({1})),
- ?line {'EXIT',{badarg,_}} = (catch erlang:system_monitor({1,2,3})),
- ?line {'EXIT',{badarg,_}} =
- (catch erlang:system_monitor({Self,atom})),
- ?line {'EXIT',{badarg,_}} =
- (catch erlang:system_monitor(atom, atom)),
- ?line {'EXIT',{badarg,_}} =
- (catch erlang:system_monitor({Self,[busy_port|busy_dist_port]})),
- ?line {'EXIT',{badarg,_}} =
- (catch erlang:system_monitor(Self, [{long_gc,-1}])),
- ?line {'EXIT',{badarg,_}} =
- (catch erlang:system_monitor({Self,[{long_gc,atom}]})),
- ?line {'EXIT',{badarg,_}} =
- (catch erlang:system_monitor(Self,[{large_heap,-1}])),
- ?line {'EXIT',{badarg,_}} =
- (catch erlang:system_monitor({Self,[{large_heap,atom}]})),
- %% Done.
- ?line test_server:timetrap_cancel(Dog),
+ {'EXIT',{badarg,_}} = (catch erlang:system_monitor(atom)),
+ {'EXIT',{badarg,_}} = (catch erlang:system_monitor({})),
+ {'EXIT',{badarg,_}} = (catch erlang:system_monitor({1})),
+ {'EXIT',{badarg,_}} = (catch erlang:system_monitor({1,2,3})),
+ {'EXIT',{badarg,_}} =
+ (catch erlang:system_monitor({Self,atom})),
+ {'EXIT',{badarg,_}} =
+ (catch erlang:system_monitor(atom, atom)),
+ {'EXIT',{badarg,_}} =
+ (catch erlang:system_monitor({Self,[busy_port|busy_dist_port]})),
+ {'EXIT',{badarg,_}} =
+ (catch erlang:system_monitor(Self, [{long_gc,-1}])),
+ {'EXIT',{badarg,_}} =
+ (catch erlang:system_monitor({Self,[{long_gc,atom}]})),
+ {'EXIT',{badarg,_}} =
+ (catch erlang:system_monitor(Self,[{large_heap,-1}])),
+ {'EXIT',{badarg,_}} =
+ (catch erlang:system_monitor({Self,[{large_heap,atom}]})),
ok.
-more_system_monitor_args(doc) ->
- ["Tests arguments to erlang:system_monitor/0-2)"];
+%% Tests arguments to erlang:system_monitor/0,1,2
more_system_monitor_args(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(5)),
-
- ?line try_l(64000),
- ?line try_l(16#7ffffff),
- ?line try_l(16#3fffffff),
- ?line try_l(16#7fffffff),
- ?line try_l(16#ffffffff),
-
- %% Done.
- ?line test_server:timetrap_cancel(Dog),
+ try_l(64000),
+ try_l(16#7ffffff),
+ try_l(16#3fffffff),
+ try_l(16#7fffffff),
+ try_l(16#ffffffff),
ok.
try_l(Val) ->
@@ -523,29 +853,29 @@ try_l(Val) ->
Arbitrary1 = 77777,
Arbitrary2 = 88888,
- ?line erlang:system_monitor(undefined),
+ erlang:system_monitor(undefined),
- ?line undefined = erlang:system_monitor(Self, [{long_gc,Val},{large_heap,Arbitrary1}]),
+ undefined = erlang:system_monitor(Self, [{long_gc,Val},{large_heap,Arbitrary1}]),
- ?line {Self,Comb0} = erlang:system_monitor(Self, [{long_gc,Arbitrary2},{large_heap,Val}]),
- ?line [{large_heap,Arbitrary1},{long_gc,Val}] = lists:sort(Comb0),
+ {Self,Comb0} = erlang:system_monitor(Self, [{long_gc,Arbitrary2},{large_heap,Val}]),
+ [{large_heap,Arbitrary1},{long_gc,Val}] = lists:sort(Comb0),
- ?line {Self,Comb1} = erlang:system_monitor(undefined),
- ?line [{large_heap,Val},{long_gc,Arbitrary2}] = lists:sort(Comb1).
+ {Self,Comb1} = erlang:system_monitor(undefined),
+ [{large_heap,Val},{long_gc,Arbitrary2}] = lists:sort(Comb1).
monitor_sys(Parent) ->
receive
- {monitor,Pid,long_schedule,Data} when is_pid(Pid) ->
- io:format("Long schedule of ~w: ~w~n",[Pid,Data]),
- Parent ! {Pid,Data},
- monitor_sys(Parent);
- {monitor,Port,long_schedule,Data} when is_port(Port) ->
- {name,Name} = erlang:port_info(Port,name),
- io:format("Long schedule of ~w (~p): ~w~n",[Port,Name,Data]),
- Parent ! {Port,Data},
- monitor_sys(Parent);
- Other ->
- erlang:display(Other)
+ {monitor,Pid,long_schedule,Data} when is_pid(Pid) ->
+ io:format("Long schedule of ~w: ~w~n",[Pid,Data]),
+ Parent ! {Pid,Data},
+ monitor_sys(Parent);
+ {monitor,Port,long_schedule,Data} when is_port(Port) ->
+ {name,Name} = erlang:port_info(Port,name),
+ io:format("Long schedule of ~w (~p): ~w~n",[Port,Name,Data]),
+ Parent ! {Port,Data},
+ monitor_sys(Parent);
+ Other ->
+ erlang:display(Other)
end.
start_monitor() ->
@@ -555,18 +885,15 @@ start_monitor() ->
erlang:yield(), % Need to be rescheduled for the trace to take
ok.
-system_monitor_long_schedule(suite) ->
- [];
-system_monitor_long_schedule(doc) ->
- ["Tests erlang:system_monitor(Pid, [{long_schedule,Time}])"];
+%% Tests erlang:system_monitor(Pid, [{long_schedule,Time}])
system_monitor_long_schedule(Config) when is_list(Config) ->
- Path = ?config(data_dir, Config),
+ Path = proplists:get_value(data_dir, Config),
erl_ddll:start(),
case (catch load_driver(Path, slow_drv)) of
- ok ->
- do_system_monitor_long_schedule();
- _Error ->
- {skip, "Unable to load slow_drv (windows or no usleep()?)"}
+ ok ->
+ do_system_monitor_long_schedule();
+ _Error ->
+ {skip, "Unable to load slow_drv (windows or no usleep()?)"}
end.
do_system_monitor_long_schedule() ->
start_monitor(),
@@ -574,18 +901,18 @@ do_system_monitor_long_schedule() ->
"ok" = erlang:port_control(Port,0,[]),
Self = self(),
receive
- {Self,L} when is_list(L) ->
- ok
+ {Self,L} when is_list(L) ->
+ ok
after 1000 ->
- ?t:fail(no_trace_of_pid)
+ ct:fail(no_trace_of_pid)
end,
"ok" = erlang:port_control(Port,1,[]),
"ok" = erlang:port_control(Port,2,[]),
receive
- {Port,LL} when is_list(LL) ->
- ok
+ {Port,LL} when is_list(LL) ->
+ ok
after 1000 ->
- ?t:fail(no_trace_of_port)
+ ct:fail(no_trace_of_port)
end,
port_close(Port),
erlang:system_monitor(undefined),
@@ -594,214 +921,200 @@ do_system_monitor_long_schedule() ->
-define(LONG_GC_SLEEP, 670).
-system_monitor_long_gc_1(suite) ->
- [];
-system_monitor_long_gc_1(doc) ->
- ["Tests erlang:system_monitor(Pid, [{long_gc,Time}])"];
+%% Tests erlang:system_monitor(Pid, [{long_gc,Time}])
system_monitor_long_gc_1(Config) when is_list(Config) ->
erts_debug:set_internal_state(available_internal_state, true),
try
- case erts_debug:get_internal_state(force_heap_frags) of
- true ->
- {skip,"emulator with FORCE_HEAP_FRAGS defined"};
- false ->
- %% Add ?LONG_GC_SLEEP ms to all gc
- ?line erts_debug:set_internal_state(test_long_gc_sleep,
- ?LONG_GC_SLEEP),
- ?line LoadFun = fun () ->
- garbage_collect(),
- self()
- end,
- ?line long_gc(LoadFun, false)
- end
+ case erts_debug:get_internal_state(force_heap_frags) of
+ true ->
+ {skip,"emulator with FORCE_HEAP_FRAGS defined"};
+ false ->
+ %% Add ?LONG_GC_SLEEP ms to all gc
+ erts_debug:set_internal_state(test_long_gc_sleep,
+ ?LONG_GC_SLEEP),
+ LoadFun = fun () ->
+ garbage_collect(),
+ self()
+ end,
+ long_gc(LoadFun, false)
+ end
after
- erts_debug:set_internal_state(test_long_gc_sleep, 0),
- erts_debug:set_internal_state(available_internal_state, false)
+ erts_debug:set_internal_state(test_long_gc_sleep, 0),
+ erts_debug:set_internal_state(available_internal_state, false)
end.
-system_monitor_long_gc_2(suite) ->
- [];
-system_monitor_long_gc_2(doc) ->
- ["Tests erlang:system_monitor(Pid, [{long_gc,Time}])"];
+%% Tests erlang:system_monitor(Pid, [{long_gc,Time}])
system_monitor_long_gc_2(Config) when is_list(Config) ->
erts_debug:set_internal_state(available_internal_state, true),
try
- case erts_debug:get_internal_state(force_heap_frags) of
- true ->
- {skip,"emulator with FORCE_HEAP_FRAGS defined"};
- false ->
- %% Add ?LONG_GC_SLEEP ms to all gc
- ?line erts_debug:set_internal_state(test_long_gc_sleep,
- ?LONG_GC_SLEEP),
- ?line Parent = self(),
- ?line LoadFun =
- fun () ->
- Ref = make_ref(),
- Pid =
- spawn_link(
- fun () ->
- garbage_collect(),
- Parent ! {Ref, self()}
- end),
- receive {Ref, Pid} -> Pid end
- end,
- ?line long_gc(LoadFun, true),
- ?line long_gc(LoadFun, true),
- ?line long_gc(LoadFun, true)
- end
+ case erts_debug:get_internal_state(force_heap_frags) of
+ true ->
+ {skip,"emulator with FORCE_HEAP_FRAGS defined"};
+ false ->
+ %% Add ?LONG_GC_SLEEP ms to all gc
+ erts_debug:set_internal_state(test_long_gc_sleep,
+ ?LONG_GC_SLEEP),
+ Parent = self(),
+ LoadFun =
+ fun () ->
+ Ref = make_ref(),
+ Pid =
+ spawn_link(
+ fun () ->
+ garbage_collect(),
+ Parent ! {Ref, self()}
+ end),
+ receive {Ref, Pid} -> Pid end
+ end,
+ long_gc(LoadFun, true),
+ long_gc(LoadFun, true),
+ long_gc(LoadFun, true)
+ end
after
- erts_debug:set_internal_state(test_long_gc_sleep, 0),
- erts_debug:set_internal_state(available_internal_state, false)
+ erts_debug:set_internal_state(test_long_gc_sleep, 0),
+ erts_debug:set_internal_state(available_internal_state, false)
end.
long_gc(LoadFun, ExpectMonMsg) ->
- ?line Self = self(),
- ?line Time = 1,
- ?line OldMonitor = erlang:system_monitor(Self, [{long_gc,Time}]),
- ?line Pid = LoadFun(),
- ?line Ref = erlang:trace_delivered(Pid),
- ?line receive {trace_delivered, Pid, Ref} -> ok end,
- ?line {Self,[{long_gc,Time}]} = erlang:system_monitor(OldMonitor),
- ?line case {long_gc_check(Pid, Time, undefined), ExpectMonMsg} of
- {ok, true} when Pid =/= Self ->
- ok;
- {ok, false} ->
- ?line ?t:fail(unexpected_system_monitor_message_received);
- {undefined, false} ->
- ok;
- {undefined, true} ->
- ?line ?t:fail(no_system_monitor_message_received)
- end.
+ Self = self(),
+ Time = 1,
+ OldMonitor = erlang:system_monitor(Self, [{long_gc,Time}]),
+ Pid = LoadFun(),
+ Ref = erlang:trace_delivered(Pid),
+ receive {trace_delivered, Pid, Ref} -> ok end,
+ {Self,[{long_gc,Time}]} = erlang:system_monitor(OldMonitor),
+ case {long_gc_check(Pid, Time, undefined), ExpectMonMsg} of
+ {ok, true} when Pid =/= Self ->
+ ok;
+ {ok, false} ->
+ ct:fail(unexpected_system_monitor_message_received);
+ {undefined, false} ->
+ ok;
+ {undefined, true} ->
+ ct:fail(no_system_monitor_message_received)
+ end.
long_gc_check(Pid, Time, Result) ->
receive
- {monitor,Pid,long_gc,L} = Monitor ->
- case lists:foldl(
- fun (_, error) ->
- error;
- ({timeout,T}, N) when is_integer(T),
- Time =< T, T =< 10*?LONG_GC_SLEEP ->
- %% OTP-7622. The time T must be within reasonable limits
- %% for the test to pass.
- N-1;
- ({heap_size,_}, N) ->
- N-1;
- ({old_heap_size,_}, N) ->
- N-1;
- ({stack_size,_}, N) ->
- N-1;
- ({mbuf_size,_}, N) ->
- N-1;
- ({heap_block_size,_}, N) ->
- N-1;
- ({old_heap_block_size,_}, N) ->
- N-1;
- (_, _) ->
- error
- end, 7, L) of
- 0 ->
- long_gc_check(Pid, Time, ok);
- error ->
- {error,Monitor}
- end;
- {monitor,_,long_gc,_} ->
- long_gc_check(Pid, Time, Result);
- Other ->
- {error,Other}
+ {monitor,Pid,long_gc,L} = Monitor ->
+ case lists:foldl(
+ fun (_, error) ->
+ error;
+ ({timeout,T}, N) when is_integer(T),
+ Time =< T, T =< 10*?LONG_GC_SLEEP ->
+ %% OTP-7622. The time T must be within reasonable limits
+ %% for the test to pass.
+ N-1;
+ ({heap_size,_}, N) ->
+ N-1;
+ ({old_heap_size,_}, N) ->
+ N-1;
+ ({stack_size,_}, N) ->
+ N-1;
+ ({mbuf_size,_}, N) ->
+ N-1;
+ ({heap_block_size,_}, N) ->
+ N-1;
+ ({old_heap_block_size,_}, N) ->
+ N-1;
+ (_, _) ->
+ error
+ end, 7, L) of
+ 0 ->
+ long_gc_check(Pid, Time, ok);
+ error ->
+ {error,Monitor}
+ end;
+ {monitor,_,long_gc,_} ->
+ long_gc_check(Pid, Time, Result);
+ Other ->
+ {error,Other}
after 0 ->
- Result
+ Result
end.
-system_monitor_large_heap_1(suite) ->
- [];
-system_monitor_large_heap_1(doc) ->
- ["Tests erlang:system_monitor(Pid, [{large_heap,Size}])"];
+%% Tests erlang:system_monitor(Pid, [{large_heap,Size}])
system_monitor_large_heap_1(Config) when is_list(Config) ->
- ?line LoadFun =
- fun (Size) ->
- List = seq(1,2*Size),
- garbage_collect(),
- true = lists:prefix([1], List),
- self()
- end,
- ?line large_heap(LoadFun, false).
-
-system_monitor_large_heap_2(suite) ->
- [];
-system_monitor_large_heap_2(doc) ->
- ["Tests erlang:system_monitor(Pid, [{large_heap,Size}])"];
+ LoadFun =
+ fun (Size) ->
+ List = seq(1,2*Size),
+ garbage_collect(),
+ true = lists:prefix([1], List),
+ self()
+ end,
+ large_heap(LoadFun, false).
+
+%% Tests erlang:system_monitor(Pid, [{large_heap,Size}])
system_monitor_large_heap_2(Config) when is_list(Config) ->
- ?line Parent = self(),
- ?line LoadFun =
- fun (Size) ->
- Ref = make_ref(),
- Pid =
- spawn_opt(fun () ->
- garbage_collect(),
- Parent ! {Ref, self()}
- end,
- [link, {min_heap_size, 2*Size}]),
- receive {Ref, Pid} -> Pid end
- end,
- ?line large_heap(LoadFun, true).
+ Parent = self(),
+ LoadFun =
+ fun (Size) ->
+ Ref = make_ref(),
+ Pid =
+ spawn_opt(fun () ->
+ garbage_collect(),
+ Parent ! {Ref, self()}
+ end,
+ [link, {min_heap_size, 2*Size}]),
+ receive {Ref, Pid} -> Pid end
+ end,
+ large_heap(LoadFun, true).
large_heap(LoadFun, ExpectMonMsg) ->
- ?line Dog = test_server:timetrap(test_server:seconds(20)),
- %%
- ?line Size = 65535,
- ?line Self = self(),
- ?line NewMonitor = {Self,[{large_heap,Size}]},
- ?line OldMonitor = erlang:system_monitor(NewMonitor),
- ?line Pid = LoadFun(Size),
- ?line Ref = erlang:trace_delivered(Pid),
- ?line receive {trace_delivered, Pid, Ref} -> ok end,
- ?line {Self,[{large_heap,Size}]} = erlang:system_monitor(OldMonitor),
- ?line case {large_heap_check(Pid, Size, undefined), ExpectMonMsg} of
- {ok, true} when Pid =/= Self ->
- ?line ok;
- {ok, false} ->
- ?line ?t:fail(unexpected_system_monitor_message_received);
- {undefined, false} ->
- ?line ok;
- {undefined, true} ->
- ?line ?t:fail(no_system_monitor_message_received)
- end,
+ ct:timetrap({seconds, 20}),
%%
- ?line test_server:timetrap_cancel(Dog),
+ Size = 65535,
+ Self = self(),
+ NewMonitor = {Self,[{large_heap,Size}]},
+ OldMonitor = erlang:system_monitor(NewMonitor),
+ Pid = LoadFun(Size),
+ Ref = erlang:trace_delivered(Pid),
+ receive {trace_delivered, Pid, Ref} -> ok end,
+ {Self,[{large_heap,Size}]} = erlang:system_monitor(OldMonitor),
+ case {large_heap_check(Pid, Size, undefined), ExpectMonMsg} of
+ {ok, true} when Pid =/= Self ->
+ ok;
+ {ok, false} ->
+ ct:fail(unexpected_system_monitor_message_received);
+ {undefined, false} ->
+ ok;
+ {undefined, true} ->
+ ct:fail(no_system_monitor_message_received)
+ end,
ok.
large_heap_check(Pid, Size, Result) ->
receive
- {monitor,Pid,large_heap,L} = Monitor ->
- case lists:foldl(
- fun (_, error) ->
- error;
- ({heap_size,_}, N) ->
- N-1;
- ({old_heap_size,_}, N) ->
- N-1;
- ({stack_size,_}, N) ->
- N-1;
- ({mbuf_size,_}, N) ->
- N-1;
- ({heap_block_size,_}, N) ->
- N-1;
- ({old_heap_block_size,_}, N) ->
- N-1;
- (_, _) ->
- error
- end, 6, L) of
- 0 ->
- large_heap_check(Pid, Size, ok);
- error ->
- {error,Monitor}
- end;
- {monitor,_,large_heap,_} ->
- large_heap_check(Pid, Size, Result);
- Other ->
- {error,Other}
+ {monitor,Pid,large_heap,L} = Monitor ->
+ case lists:foldl(
+ fun (_, error) ->
+ error;
+ ({heap_size,_}, N) ->
+ N-1;
+ ({old_heap_size,_}, N) ->
+ N-1;
+ ({stack_size,_}, N) ->
+ N-1;
+ ({mbuf_size,_}, N) ->
+ N-1;
+ ({heap_block_size,_}, N) ->
+ N-1;
+ ({old_heap_block_size,_}, N) ->
+ N-1;
+ (_, _) ->
+ error
+ end, 6, L) of
+ 0 ->
+ large_heap_check(Pid, Size, ok);
+ error ->
+ {error,Monitor}
+ end;
+ {monitor,_,large_heap,_} ->
+ large_heap_check(Pid, Size, Result);
+ Other ->
+ {error,Other}
after 0 ->
- Result
+ Result
end.
seq(N, M) ->
@@ -816,11 +1129,11 @@ seq(N, M, R) ->
is_send_traced(Pid, Listener, Msg) ->
Pid ! {send_please, Listener, Msg},
receive
- Any ->
- {trace, Pid, send, Msg, Listener} = Any,
- true
+ Any ->
+ {trace, Pid, send, Msg, Listener} = Any,
+ true
after 1000 ->
- false
+ false
end.
%% This procedure assumes that the Parent process is send traced.
@@ -834,146 +1147,131 @@ spawn_children(Parent, Number, Result) ->
Self = self(),
Parent ! {spawn_please, Self, fun process/0},
Child =
- receive
- {trace, Parent, send, {spawned, Pid}, Self} -> Pid
- end,
receive
- {spawned, Child} ->
- spawn_children(Parent, Number-1, [Child|Result])
+ {trace, Parent, send, {spawned, Pid}, Self} -> Pid
+ end,
+ receive
+ {spawned, Child} ->
+ spawn_children(Parent, Number-1, [Child|Result])
end.
-suspend(doc) -> "Test erlang:suspend/1 and erlang:resume/1.";
+%% Test erlang:suspend/1 and erlang:resume/1.
suspend(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:minutes(2)),
-
- ?line Worker = fun_spawn(fun worker/0),
+ ct:timetrap({minutes,2}),
+ Worker = fun_spawn(fun worker/0),
%% Suspend a process and test that it is suspended.
- ?line ok = do_suspend(Worker, 10000),
-
- %% Done.
- ?line test_server:timetrap_cancel(Dog),
+ ok = do_suspend(Worker, 10000),
ok.
do_suspend(_Pid, 0) ->
- ?line ok;
+ ok;
do_suspend(Pid, N) ->
%% Suspend a process and test that it is suspended.
- ?line true = erlang:suspend_process(Pid),
- ?line {status, suspended} = process_info(Pid, status),
+ true = erlang:suspend_process(Pid),
+ {status, suspended} = process_info(Pid, status),
%% Unsuspend the process and make sure it starts working.
- ?line true = erlang:resume_process(Pid),
- ?line case process_info(Pid, status) of
- {status, runnable} -> ?line ok;
- {status, running} -> ?line ok;
- {status, garbage_collecting} -> ?line ok;
- ST -> ?line ?t:fail(ST)
- end,
- ?line erlang:yield(),
- ?line do_suspend(Pid, N-1).
-
-
-
-mutual_suspend(doc) ->
- [];
-mutual_suspend(suite) ->
- [];
+ true = erlang:resume_process(Pid),
+ case process_info(Pid, status) of
+ {status, runnable} -> ok;
+ {status, running} -> ok;
+ {status, garbage_collecting} -> ok;
+ ST -> ct:fail(ST)
+ end,
+ erlang:yield(),
+ do_suspend(Pid, N-1).
+
+
+
mutual_suspend(Config) when is_list(Config) ->
- ?line TimeoutSecs = 5*60,
- ?line Dog = test_server:timetrap(test_server:minutes(TimeoutSecs)),
- ?line Parent = self(),
- ?line Fun = fun () ->
- receive
- {go, Pid} ->
- do_mutual_suspend(Pid, 100000)
- end,
- Parent ! {done, self()},
- receive after infinity -> ok end
- end,
- ?line P1 = spawn_link(Fun),
- ?line P2 = spawn_link(Fun),
- ?line T1 = erlang:start_timer((TimeoutSecs - 5)*1000, self(), oops),
- ?line T2 = erlang:start_timer((TimeoutSecs - 5)*1000, self(), oops),
- ?line P1 ! {go, P2},
- ?line P2 ! {go, P1},
- ?line Res1 = receive
- {done, P1} -> done;
- {timeout,T1,_} -> timeout
- end,
- ?line Res2 = receive
- {done, P2} -> done;
- {timeout,T2,_} -> timeout
- end,
- ?line P1S = process_info(P1, status),
- ?line P2S = process_info(P2, status),
- ?line ?t:format("P1S=~p P2S=~p", [P1S, P2S]),
- ?line false = {status, suspended} == P1S,
- ?line false = {status, suspended} == P2S,
- ?line unlink(P1), exit(P1, bang),
- ?line unlink(P2), exit(P2, bang),
- ?line done = Res1,
- ?line done = Res2,
- %% Done.
- ?line test_server:timetrap_cancel(Dog),
- ?line ok.
-
+ TimeoutSecs = 5*60,
+ ct:timetrap({seconds, TimeoutSecs}),
+ Parent = self(),
+ Fun = fun () ->
+ receive
+ {go, Pid} ->
+ do_mutual_suspend(Pid, 100000)
+ end,
+ Parent ! {done, self()},
+ receive after infinity -> ok end
+ end,
+ P1 = spawn_link(Fun),
+ P2 = spawn_link(Fun),
+ T1 = erlang:start_timer((TimeoutSecs - 5)*1000, self(), oops),
+ T2 = erlang:start_timer((TimeoutSecs - 5)*1000, self(), oops),
+ P1 ! {go, P2},
+ P2 ! {go, P1},
+ Res1 = receive
+ {done, P1} -> done;
+ {timeout,T1,_} -> timeout
+ end,
+ Res2 = receive
+ {done, P2} -> done;
+ {timeout,T2,_} -> timeout
+ end,
+ P1S = process_info(P1, status),
+ P2S = process_info(P2, status),
+ io:format("P1S=~p P2S=~p", [P1S, P2S]),
+ false = {status, suspended} == P1S,
+ false = {status, suspended} == P2S,
+ unlink(P1), exit(P1, bang),
+ unlink(P2), exit(P2, bang),
+ done = Res1,
+ done = Res2,
+ ok.
+
do_mutual_suspend(_Pid, 0) ->
- ?line ok;
+ ok;
do_mutual_suspend(Pid, N) ->
%% Suspend a process and test that it is suspended.
- ?line true = erlang:suspend_process(Pid),
- ?line {status, suspended} = process_info(Pid, status),
+ true = erlang:suspend_process(Pid),
+ {status, suspended} = process_info(Pid, status),
%% Unsuspend the process.
- ?line true = erlang:resume_process(Pid),
- ?line do_mutual_suspend(Pid, N-1).
+ true = erlang:resume_process(Pid),
+ do_mutual_suspend(Pid, N-1).
-suspend_exit(doc) ->
- [];
-suspend_exit(suite) ->
- [];
suspend_exit(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:minutes(2)),
+ ct:timetrap({minutes, 2}),
rand:seed(exsplus, {4711,17,4711}),
- ?line do_suspend_exit(5000),
- ?line test_server:timetrap_cancel(Dog),
- ?line ok.
+ do_suspend_exit(5000),
+ ok.
do_suspend_exit(0) ->
- ?line ok;
+ ok;
do_suspend_exit(N) ->
Work = rand:uniform(50),
- ?line Parent = self(),
- ?line {Suspendee, Mon2}
- = spawn_monitor(fun () ->
- suspend_exit_work(Work),
- exit(normal)
- end),
- ?line {Suspender, Mon1}
- = spawn_monitor(
- fun () ->
- suspend_exit_work(Work div 2),
- Parent ! {doing_suspend, self()},
- case catch erlang:suspend_process(Suspendee) of
- {'EXIT', _} ->
- ok;
- true ->
- ?line erlang:resume_process(Suspendee)
- end
- end),
- ?line receive
- {doing_suspend, Suspender} ->
- case N rem 2 of
- 0 -> exit(Suspender, bang);
- 1 -> ok
- end
- end,
- ?line receive {'DOWN', Mon1, process, Suspender, _} -> ok end,
- ?line receive {'DOWN', Mon2, process, Suspendee, _} -> ok end,
- ?line do_suspend_exit(N-1).
-
-
-
-
+ Parent = self(),
+ {Suspendee, Mon2}
+ = spawn_monitor(fun () ->
+ suspend_exit_work(Work),
+ exit(normal)
+ end),
+ {Suspender, Mon1}
+ = spawn_monitor(
+ fun () ->
+ suspend_exit_work(Work div 2),
+ Parent ! {doing_suspend, self()},
+ case catch erlang:suspend_process(Suspendee) of
+ {'EXIT', _} ->
+ ok;
+ true ->
+ erlang:resume_process(Suspendee)
+ end
+ end),
+ receive
+ {doing_suspend, Suspender} ->
+ case N rem 2 of
+ 0 -> exit(Suspender, bang);
+ 1 -> ok
+ end
+ end,
+ receive {'DOWN', Mon1, process, Suspender, _} -> ok end,
+ receive {'DOWN', Mon2, process, Suspendee, _} -> ok end,
+ do_suspend_exit(N-1).
+
+
+
+
suspend_exit_work(0) ->
ok;
suspend_exit_work(N) ->
@@ -985,320 +1283,305 @@ suspend_exit_work(N) ->
chk_suspended(P, Bool, Line) ->
{Bool, Line} = {({status, suspended} == process_info(P, status)), Line}.
-suspender_exit(doc) ->
- [];
-suspender_exit(suite) ->
- [];
suspender_exit(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:minutes(3)),
- ?line P1 = spawn_link(fun () -> receive after infinity -> ok end end),
- ?line {'EXIT', _} = (catch erlang:resume_process(P1)),
- ?line {P2, M2} = spawn_monitor(
- fun () ->
- ?CHK_SUSPENDED(P1, false),
- erlang:suspend_process(P1),
- ?CHK_SUSPENDED(P1, true),
- erlang:suspend_process(P1),
- erlang:suspend_process(P1),
- erlang:suspend_process(P1),
- ?CHK_SUSPENDED(P1, true),
- erlang:resume_process(P1),
- erlang:resume_process(P1),
- erlang:resume_process(P1),
- ?CHK_SUSPENDED(P1, true),
- erlang:resume_process(P1),
- ?CHK_SUSPENDED(P1, false),
- erlang:suspend_process(P1),
- erlang:suspend_process(P1),
- erlang:suspend_process(P1),
- ?CHK_SUSPENDED(P1, true),
- exit(bang)
- end),
- ?line receive
- {'DOWN', M2,process,P2,R2} ->
- ?line bang = R2,
- ?line ?CHK_SUSPENDED(P1, false)
- end,
- ?line Parent = self(),
- ?line {P3, M3} = spawn_monitor(
- fun () ->
- erlang:suspend_process(P1),
- ?CHK_SUSPENDED(P1, true),
- Parent ! self(),
- receive after infinity -> ok end
- end),
- ?line {P4, M4} = spawn_monitor(
- fun () ->
- erlang:suspend_process(P1),
- ?CHK_SUSPENDED(P1, true),
- Parent ! self(),
- receive after infinity -> ok end
- end),
- ?line {P5, M5} = spawn_monitor(
- fun () ->
- erlang:suspend_process(P1),
- ?CHK_SUSPENDED(P1, true),
- Parent ! self(),
- receive after infinity -> ok end
- end),
- ?line {P6, M6} = spawn_monitor(
- fun () ->
- erlang:suspend_process(P1),
- ?CHK_SUSPENDED(P1, true),
- Parent ! self(),
- receive after infinity -> ok end
- end),
- ?line {P7, M7} = spawn_monitor(
- fun () ->
- erlang:suspend_process(P1),
- ?CHK_SUSPENDED(P1, true),
- Parent ! self(),
- receive after infinity -> ok end
- end),
- ?line receive P3 -> ok end,
- ?line receive P4 -> ok end,
- ?line receive P5 -> ok end,
- ?line receive P6 -> ok end,
- ?line receive P7 -> ok end,
- ?line ?CHK_SUSPENDED(P1, true),
- ?line exit(P3, bang),
- ?line receive
- {'DOWN',M3,process,P3,R3} ->
- ?line bang = R3,
- ?line ?CHK_SUSPENDED(P1, true)
- end,
- ?line exit(P4, bang),
- ?line receive
- {'DOWN',M4,process,P4,R4} ->
- ?line bang = R4,
- ?line ?CHK_SUSPENDED(P1, true)
- end,
- ?line exit(P5, bang),
- ?line receive
- {'DOWN',M5,process,P5,R5} ->
- ?line bang = R5,
- ?line ?CHK_SUSPENDED(P1, true)
- end,
- ?line exit(P6, bang),
- ?line receive
- {'DOWN',M6,process,P6,R6} ->
- ?line bang = R6,
- ?line ?CHK_SUSPENDED(P1, true)
- end,
- ?line exit(P7, bang),
- ?line receive
- {'DOWN',M7,process,P7,R7} ->
- ?line bang = R7,
- ?line ?CHK_SUSPENDED(P1, false)
- end,
- ?line unlink(P1),
- ?line exit(P1, bong),
- ?line test_server:timetrap_cancel(Dog),
- ?line ok.
-
-suspend_system_limit(doc) ->
- [];
-suspend_system_limit(suite) ->
- [];
+ ct:timetrap({minutes, 3}),
+ P1 = spawn_link(fun () -> receive after infinity -> ok end end),
+ {'EXIT', _} = (catch erlang:resume_process(P1)),
+ {P2, M2} = spawn_monitor(
+ fun () ->
+ ?CHK_SUSPENDED(P1, false),
+ erlang:suspend_process(P1),
+ ?CHK_SUSPENDED(P1, true),
+ erlang:suspend_process(P1),
+ erlang:suspend_process(P1),
+ erlang:suspend_process(P1),
+ ?CHK_SUSPENDED(P1, true),
+ erlang:resume_process(P1),
+ erlang:resume_process(P1),
+ erlang:resume_process(P1),
+ ?CHK_SUSPENDED(P1, true),
+ erlang:resume_process(P1),
+ ?CHK_SUSPENDED(P1, false),
+ erlang:suspend_process(P1),
+ erlang:suspend_process(P1),
+ erlang:suspend_process(P1),
+ ?CHK_SUSPENDED(P1, true),
+ exit(bang)
+ end),
+ receive
+ {'DOWN', M2,process,P2,R2} ->
+ bang = R2,
+ ?CHK_SUSPENDED(P1, false)
+ end,
+ Parent = self(),
+ {P3, M3} = spawn_monitor(
+ fun () ->
+ erlang:suspend_process(P1),
+ ?CHK_SUSPENDED(P1, true),
+ Parent ! self(),
+ receive after infinity -> ok end
+ end),
+ {P4, M4} = spawn_monitor(
+ fun () ->
+ erlang:suspend_process(P1),
+ ?CHK_SUSPENDED(P1, true),
+ Parent ! self(),
+ receive after infinity -> ok end
+ end),
+ {P5, M5} = spawn_monitor(
+ fun () ->
+ erlang:suspend_process(P1),
+ ?CHK_SUSPENDED(P1, true),
+ Parent ! self(),
+ receive after infinity -> ok end
+ end),
+ {P6, M6} = spawn_monitor(
+ fun () ->
+ erlang:suspend_process(P1),
+ ?CHK_SUSPENDED(P1, true),
+ Parent ! self(),
+ receive after infinity -> ok end
+ end),
+ {P7, M7} = spawn_monitor(
+ fun () ->
+ erlang:suspend_process(P1),
+ ?CHK_SUSPENDED(P1, true),
+ Parent ! self(),
+ receive after infinity -> ok end
+ end),
+ receive P3 -> ok end,
+ receive P4 -> ok end,
+ receive P5 -> ok end,
+ receive P6 -> ok end,
+ receive P7 -> ok end,
+ ?CHK_SUSPENDED(P1, true),
+ exit(P3, bang),
+ receive
+ {'DOWN',M3,process,P3,R3} ->
+ bang = R3,
+ ?CHK_SUSPENDED(P1, true)
+ end,
+ exit(P4, bang),
+ receive
+ {'DOWN',M4,process,P4,R4} ->
+ bang = R4,
+ ?CHK_SUSPENDED(P1, true)
+ end,
+ exit(P5, bang),
+ receive
+ {'DOWN',M5,process,P5,R5} ->
+ bang = R5,
+ ?CHK_SUSPENDED(P1, true)
+ end,
+ exit(P6, bang),
+ receive
+ {'DOWN',M6,process,P6,R6} ->
+ bang = R6,
+ ?CHK_SUSPENDED(P1, true)
+ end,
+ exit(P7, bang),
+ receive
+ {'DOWN',M7,process,P7,R7} ->
+ bang = R7,
+ ?CHK_SUSPENDED(P1, false)
+ end,
+ unlink(P1),
+ exit(P1, bong),
+ ok.
+
suspend_system_limit(Config) when is_list(Config) ->
case os:getenv("ERL_EXTREME_TESTING") of
- "true" ->
- ?line Dog = test_server:timetrap(test_server:minutes(3*60)),
- ?line P = spawn_link(fun () -> receive after infinity -> ok end end),
- ?line suspend_until_system_limit(P),
- ?line unlink(P),
- ?line exit(P, bye),
- ?line test_server:timetrap_cancel(Dog),
- ?line ok;
- _ ->
- {skip, "Takes too long time for normal testing"}
+ "true" ->
+ ct:timetrap({minutes, 3*60}),
+ P = spawn_link(fun () -> receive after infinity -> ok end end),
+ suspend_until_system_limit(P),
+ unlink(P),
+ exit(P, bye),
+ ok;
+ _ ->
+ {skip, "Takes too long time for normal testing"}
end.
suspend_until_system_limit(P) ->
- ?line suspend_until_system_limit(P, 0, 0).
+ suspend_until_system_limit(P, 0, 0).
suspend_until_system_limit(P, N, M) ->
NewM = case M of
- 1 ->
- ?line ?CHK_SUSPENDED(P, true), 2;
- 1000000 ->
- erlang:display(N), 1;
- _ ->
- M+1
- end,
- ?line case catch erlang:suspend_process(P) of
- true ->
- suspend_until_system_limit(P, N+1, NewM);
- {'EXIT', R} when R == system_limit;
- element(1, R) == system_limit ->
- ?line ?t:format("system limit at ~p~n", [N]),
- ?line resume_from_system_limit(P, N, 0);
- Error ->
- ?line ?t:fail(Error)
- end.
+ 1 ->
+ ?CHK_SUSPENDED(P, true), 2;
+ 1000000 ->
+ erlang:display(N), 1;
+ _ ->
+ M+1
+ end,
+ case catch erlang:suspend_process(P) of
+ true ->
+ suspend_until_system_limit(P, N+1, NewM);
+ {'EXIT', R} when R == system_limit;
+ element(1, R) == system_limit ->
+ io:format("system limit at ~p~n", [N]),
+ resume_from_system_limit(P, N, 0);
+ Error ->
+ ct:fail(Error)
+ end.
resume_from_system_limit(P, 0, _) ->
- ?line ?CHK_SUSPENDED(P, false),
- ?line {'EXIT', _} = (catch erlang:resume_process(P)),
- ?line ok;
+ ?CHK_SUSPENDED(P, false),
+ {'EXIT', _} = (catch erlang:resume_process(P)),
+ ok;
resume_from_system_limit(P, N, M) ->
- ?line NewM = case M of
- 1 ->
- ?line ?CHK_SUSPENDED(P, true), 2;
- 1000000 ->
- erlang:display(N), 1;
- _ ->
- M+1
- end,
- ?line erlang:resume_process(P),
- ?line resume_from_system_limit(P, N-1, NewM).
+ NewM = case M of
+ 1 ->
+ ?CHK_SUSPENDED(P, true), 2;
+ 1000000 ->
+ erlang:display(N), 1;
+ _ ->
+ M+1
+ end,
+ erlang:resume_process(P),
+ resume_from_system_limit(P, N-1, NewM).
-record(susp_info, {async = 0,
- dbl_async = 0,
- synced = 0,
- async_once = 0}).
-
-suspend_opts(doc) ->
- [];
-suspend_opts(suite) ->
- [];
+ dbl_async = 0,
+ synced = 0,
+ async_once = 0}).
+
suspend_opts(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:minutes(3)),
- ?line Self = self(),
- ?line wait_for_empty_runq(10),
- ?line Tok = spawn_link(fun () ->
- Self ! self(),
- tok_trace_loop(Self, 0, 1000000000)
- end),
- ?line TC = 1000,
- ?line receive Tok -> ok end,
- ?line SF = fun (N, #susp_info {async = A,
- dbl_async = AA,
- synced = S,
- async_once = AO} = Acc) ->
- ?line erlang:suspend_process(Tok, [asynchronous]),
- ?line Res = case {suspend_count(Tok), N rem 4} of
- {0, 2} ->
- ?line erlang:suspend_process(Tok,
- [asynchronous]),
- case suspend_count(Tok) of
- 2 ->
- ?line erlang:resume_process(Tok),
- ?line Acc#susp_info{async = A+1};
- 0 ->
- ?line erlang:resume_process(Tok),
- ?line Acc#susp_info{async = A+1,
- dbl_async = AA+1}
- end;
- {0, 1} ->
- ?line erlang:suspend_process(Tok,
- [asynchronous,
- unless_suspending]),
- case suspend_count(Tok) of
- 1 ->
- ?line Acc#susp_info{async = A+1};
- 0 ->
- ?line Acc#susp_info{async = A+1,
- async_once = AO+1}
- end;
- {0, 0} ->
- ?line erlang:suspend_process(Tok,
- [unless_suspending]),
- ?line 1 = suspend_count(Tok),
- ?line Acc#susp_info{async = A+1,
- synced = S+1};
- {0, _} ->
- ?line Acc#susp_info{async = A+1};
- _ ->
- Acc
- end,
- ?line erlang:resume_process(Tok),
- ?line erlang:yield(),
- ?line Res
- end,
- ?line SI = repeat_acc(SF, TC, #susp_info{}),
- ?line erlang:suspend_process(Tok, [asynchronous]),
+ ct:timetrap({minutes, 3}),
+ Self = self(),
+ wait_for_empty_runq(10),
+ Tok = spawn_link(fun () ->
+ Self ! self(),
+ tok_trace_loop(Self, 0, 1000000000)
+ end),
+ TC = 1000,
+ receive Tok -> ok end,
+ SF = fun (N, #susp_info {async = A,
+ dbl_async = AA,
+ synced = S,
+ async_once = AO} = Acc) ->
+ erlang:suspend_process(Tok, [asynchronous]),
+ Res = case {suspend_count(Tok), N rem 4} of
+ {0, 2} ->
+ erlang:suspend_process(Tok,
+ [asynchronous]),
+ case suspend_count(Tok) of
+ 2 ->
+ erlang:resume_process(Tok),
+ Acc#susp_info{async = A+1};
+ 0 ->
+ erlang:resume_process(Tok),
+ Acc#susp_info{async = A+1,
+ dbl_async = AA+1}
+ end;
+ {0, 1} ->
+ erlang:suspend_process(Tok,
+ [asynchronous,
+ unless_suspending]),
+ case suspend_count(Tok) of
+ 1 ->
+ Acc#susp_info{async = A+1};
+ 0 ->
+ Acc#susp_info{async = A+1,
+ async_once = AO+1}
+ end;
+ {0, 0} ->
+ erlang:suspend_process(Tok,
+ [unless_suspending]),
+ 1 = suspend_count(Tok),
+ Acc#susp_info{async = A+1,
+ synced = S+1};
+ {0, _} ->
+ Acc#susp_info{async = A+1};
+ _ ->
+ Acc
+ end,
+ erlang:resume_process(Tok),
+ erlang:yield(),
+ Res
+ end,
+ SI = repeat_acc(SF, TC, #susp_info{}),
+ erlang:suspend_process(Tok, [asynchronous]),
%% Verify that it eventually suspends
- ?line WaitTime0 = 10,
- ?line WaitTime1 = case {erlang:system_info(debug_compiled),
- erlang:system_info(lock_checking)} of
- {false, false} ->
- WaitTime0;
- {false, true} ->
- WaitTime0*5;
- _ ->
- WaitTime0*10
- end,
- ?line WaitTime = case {erlang:system_info(schedulers_online),
- erlang:system_info(logical_processors)} of
- {Schdlrs, CPUs} when is_integer(CPUs),
- Schdlrs =< CPUs ->
- WaitTime1;
- _ ->
- WaitTime1*10
- end,
- ?line receive after WaitTime -> ok end,
- ?line 1 = suspend_count(Tok),
- ?line erlang:suspend_process(Tok, [asynchronous]),
- ?line 2 = suspend_count(Tok),
- ?line erlang:suspend_process(Tok, [asynchronous]),
- ?line 3 = suspend_count(Tok),
- ?line erlang:suspend_process(Tok),
- ?line 4 = suspend_count(Tok),
- ?line erlang:suspend_process(Tok),
- ?line 5 = suspend_count(Tok),
- ?line erlang:suspend_process(Tok, [unless_suspending]),
- ?line 5 = suspend_count(Tok),
- ?line erlang:suspend_process(Tok, [unless_suspending,
- asynchronous]),
- ?line 5 = suspend_count(Tok),
- ?line erlang:resume_process(Tok),
- ?line erlang:resume_process(Tok),
- ?line erlang:resume_process(Tok),
- ?line erlang:resume_process(Tok),
- ?line 1 = suspend_count(Tok),
- ?line ?t:format("Main suspends: ~p~n"
- "Main async: ~p~n"
- "Double async: ~p~n"
- "Async once: ~p~n"
- "Synced: ~p~n",
- [TC,
- SI#susp_info.async,
- SI#susp_info.dbl_async,
- SI#susp_info.async_once,
- SI#susp_info.synced]),
- ?line case erlang:system_info(schedulers_online) of
- 1 ->
- ?line ok;
- _ ->
- ?line true = SI#susp_info.async =/= 0
- end,
- ?line unlink(Tok),
- ?line exit(Tok, bang),
- ?line test_server:timetrap_cancel(Dog),
- ?line ok.
+ WaitTime0 = 10,
+ WaitTime1 = case {erlang:system_info(debug_compiled),
+ erlang:system_info(lock_checking)} of
+ {false, false} ->
+ WaitTime0;
+ {false, true} ->
+ WaitTime0*5;
+ _ ->
+ WaitTime0*10
+ end,
+ WaitTime = case {erlang:system_info(schedulers_online),
+ erlang:system_info(logical_processors)} of
+ {Schdlrs, CPUs} when is_integer(CPUs),
+ Schdlrs =< CPUs ->
+ WaitTime1;
+ _ ->
+ WaitTime1*10
+ end,
+ receive after WaitTime -> ok end,
+ 1 = suspend_count(Tok),
+ erlang:suspend_process(Tok, [asynchronous]),
+ 2 = suspend_count(Tok),
+ erlang:suspend_process(Tok, [asynchronous]),
+ 3 = suspend_count(Tok),
+ erlang:suspend_process(Tok),
+ 4 = suspend_count(Tok),
+ erlang:suspend_process(Tok),
+ 5 = suspend_count(Tok),
+ erlang:suspend_process(Tok, [unless_suspending]),
+ 5 = suspend_count(Tok),
+ erlang:suspend_process(Tok, [unless_suspending,
+ asynchronous]),
+ 5 = suspend_count(Tok),
+ erlang:resume_process(Tok),
+ erlang:resume_process(Tok),
+ erlang:resume_process(Tok),
+ erlang:resume_process(Tok),
+ 1 = suspend_count(Tok),
+ io:format("Main suspends: ~p~n"
+ "Main async: ~p~n"
+ "Double async: ~p~n"
+ "Async once: ~p~n"
+ "Synced: ~p~n",
+ [TC,
+ SI#susp_info.async,
+ SI#susp_info.dbl_async,
+ SI#susp_info.async_once,
+ SI#susp_info.synced]),
+ case erlang:system_info(schedulers_online) of
+ 1 ->
+ ok;
+ _ ->
+ true = SI#susp_info.async =/= 0
+ end,
+ unlink(Tok),
+ exit(Tok, bang),
+ ok.
suspend_count(Suspendee) ->
suspend_count(self(), Suspendee).
suspend_count(Suspender, Suspendee) ->
{suspending, SList} = process_info(Suspender, suspending),
-
+
case lists:keysearch(Suspendee, 1, SList) of
- {value, {_Suspendee, 0, 0}} ->
- ?line ?t:fail({bad_suspendee_list, SList});
- {value, {Suspendee, Count, 0}} when is_integer(Count), Count > 0 ->
- {status, suspended} = process_info(Suspendee, status),
- Count;
- {value, {Suspendee, 0, Outstanding}} when is_integer(Outstanding),
- Outstanding > 0 ->
- 0;
- false ->
- 0;
- Error ->
- ?line ?t:fail({bad_suspendee_list, Error, SList})
+ {value, {_Suspendee, 0, 0}} ->
+ ct:fail({bad_suspendee_list, SList});
+ {value, {Suspendee, Count, 0}} when is_integer(Count), Count > 0 ->
+ {status, suspended} = process_info(Suspendee, status),
+ Count;
+ {value, {Suspendee, 0, Outstanding}} when is_integer(Outstanding),
+ Outstanding > 0 ->
+ 0;
+ false ->
+ 0;
+ Error ->
+ ct:fail({bad_suspendee_list, Error, SList})
end.
-
+
repeat_acc(Fun, N, Acc) ->
repeat_acc(Fun, 0, N, Acc).
@@ -1306,121 +1589,101 @@ repeat_acc(_Fun, N, N, Acc) ->
Acc;
repeat_acc(Fun, N, M, Acc) ->
repeat_acc(Fun, N+1, M, Fun(N, Acc)).
-
+
%% Tests that waiting process can be suspended
%% (bug in R2D and earlier; see OTP-1488).
-suspend_waiting(doc) -> "Test that a waiting process can be suspended.";
+%% Test that a waiting process can be suspended.
suspend_waiting(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(5)),
-
- ?line Process = fun_spawn(fun process/0),
- ?line receive after 1 -> ok end,
- ?line true = erlang:suspend_process(Process),
- ?line {status, suspended} = process_info(Process, status),
-
- %% Done.
- ?line test_server:timetrap_cancel(Dog),
+ Process = fun_spawn(fun process/0),
+ receive after 1 -> ok end,
+ true = erlang:suspend_process(Process),
+ {status, suspended} = process_info(Process, status),
ok.
-
-new_clear(doc) ->
- "Test that erlang:trace(new, true, ...) is cleared when tracer dies.";
+%% Test that erlang:trace(new, true, ...) is cleared when tracer dies.
new_clear(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(5)),
-
- ?line Tracer = spawn(fun receiver/0),
- ?line 0 = erlang:trace(new, true, [send, {tracer, Tracer}]),
- ?line {flags, [send]} = erlang:trace_info(new, flags),
- ?line {tracer, Tracer} = erlang:trace_info(new, tracer),
- ?line Mref = erlang:monitor(process, Tracer),
- ?line true = exit(Tracer, done),
+ Tracer = spawn(fun receiver/0),
+ 0 = erlang:trace(new, true, [send, {tracer, Tracer}]),
+ {flags, [send]} = erlang:trace_info(new, flags),
+ {tracer, Tracer} = erlang:trace_info(new, tracer),
+ Mref = erlang:monitor(process, Tracer),
+ true = exit(Tracer, done),
receive
- {'DOWN',Mref,_,_,_} -> ok
+ {'DOWN',Mref,_,_,_} -> ok
end,
- ?line {flags, []} = erlang:trace_info(new, flags),
- ?line {tracer, []} = erlang:trace_info(new, tracer),
-
- %% Done.
- ?line test_server:timetrap_cancel(Dog),
-
+ {flags, []} = erlang:trace_info(new, flags),
+ {tracer, []} = erlang:trace_info(new, tracer),
ok.
-existing_clear(doc) ->
- "Test that erlang:trace(all, false, ...) works without tracer.";
+%% Test that erlang:trace(all, false, ...) works without tracer.
existing_clear(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(5)),
- ?line Self = self(),
-
- ?line Tracer = fun_spawn(fun receiver/0),
- ?line N = erlang:trace(existing, true, [send, {tracer, Tracer}]),
- ?line {flags, [send]} = erlang:trace_info(Self, flags),
- ?line {tracer, Tracer} = erlang:trace_info(Self, tracer),
- ?line M = erlang:trace(all, false, [all]),
- ?line io:format("Started trace on ~p processes and stopped on ~p~n",
- [N, M]),
- ?line {flags, []} = erlang:trace_info(Self, flags),
- ?line {tracer, []} = erlang:trace_info(Self, tracer),
- ?line M = N + 1, % Since trace could not be enabled on the tracer.
+ Self = self(),
+
+ Tracer = fun_spawn(fun receiver/0),
+ N = erlang:trace(existing, true, [send, {tracer, Tracer}]),
+ {flags, [send]} = erlang:trace_info(Self, flags),
+ {tracer, Tracer} = erlang:trace_info(Self, tracer),
+ M = erlang:trace(all, false, [all]),
+ io:format("Started trace on ~p processes and stopped on ~p~n",
+ [N, M]),
+ {flags, []} = erlang:trace_info(Self, flags),
+ {tracer, []} = erlang:trace_info(Self, tracer),
+ M = N, % Used to be N + 1, but from 19.0 the tracer is also traced
- %% Done.
- ?line test_server:timetrap_cancel(Dog),
ok.
-bad_flag(doc) -> "Test that an invalid flag cause badarg";
-bad_flag(suite) -> [];
+%% Test that an invalid flag cause badarg
bad_flag(Config) when is_list(Config) ->
%% A bad flag could deadlock the SMP emulator in erts-5.5
- ?line {'EXIT', {badarg, _}} = (catch erlang:trace(new,
- true,
- [not_a_valid_flag])),
- ?line ok.
+ {'EXIT', {badarg, _}} = (catch erlang:trace(new,
+ true,
+ [not_a_valid_flag])),
+ ok.
-trace_delivered(doc) -> "Test erlang:trace_delivered/1";
-trace_delivered(suite) -> [];
+%% Test erlang:trace_delivered/1
trace_delivered(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(60)),
- ?line TokLoops = 10000,
- ?line Go = make_ref(),
- ?line Parent = self(),
- ?line Tok = spawn(fun () ->
- receive Go -> gone end,
- tok_trace_loop(Parent, 0, TokLoops)
- end),
- ?line 1 = erlang:trace(Tok, true, [procs]),
- ?line Mon = erlang:monitor(process, Tok),
- ?line NoOfTraceMessages = 4*TokLoops + 1,
- ?line io:format("Expect a total of ~p trace messages~n",
- [NoOfTraceMessages]),
- ?line Tok ! Go,
- ?line NoOfTraceMessages = drop_trace_until_down(Tok, Mon),
- ?line receive
- Msg ->
- ?line ?t:fail({unexpected_message, Msg})
- after 1000 ->
- ?line test_server:timetrap_cancel(Dog),
- ?line ok
- end.
+ ct:timetrap({minutes, 1}),
+ TokLoops = 10000,
+ Go = make_ref(),
+ Parent = self(),
+ Tok = spawn(fun () ->
+ receive Go -> gone end,
+ tok_trace_loop(Parent, 0, TokLoops)
+ end),
+ 1 = erlang:trace(Tok, true, [procs]),
+ Mon = erlang:monitor(process, Tok),
+ NoOfTraceMessages = 4*TokLoops + 1,
+ io:format("Expect a total of ~p trace messages~n",
+ [NoOfTraceMessages]),
+ Tok ! Go,
+ NoOfTraceMessages = drop_trace_until_down(Tok, Mon),
+ receive
+ Msg ->
+ ct:fail({unexpected_message, Msg})
+ after 1000 ->
+ ok
+ end.
drop_trace_until_down(Proc, Mon) ->
drop_trace_until_down(Proc, Mon, false, 0, 0).
drop_trace_until_down(Proc, Mon, TDRef, N, D) ->
case receive Msg -> Msg end of
- {trace_delivered, Proc, TDRef} ->
- io:format("~p trace messages on 'DOWN'~n", [D]),
- io:format("Got a total of ~p trace messages~n", [N]),
- N;
- {'DOWN', Mon, process, Proc, _} ->
- Ref = erlang:trace_delivered(Proc),
- drop_trace_until_down(Proc, Mon, Ref, N, N);
- Trace when is_tuple(Trace),
- element(1, Trace) == trace,
- element(2, Trace) == Proc ->
- drop_trace_until_down(Proc, Mon, TDRef, N+1, D)
+ {trace_delivered, Proc, TDRef} ->
+ io:format("~p trace messages on 'DOWN'~n", [D]),
+ io:format("Got a total of ~p trace messages~n", [N]),
+ N;
+ {'DOWN', Mon, process, Proc, _} ->
+ Ref = erlang:trace_delivered(Proc),
+ drop_trace_until_down(Proc, Mon, Ref, N, N);
+ Trace when is_tuple(Trace),
+ element(1, Trace) == trace,
+ element(2, Trace) == Proc ->
+ drop_trace_until_down(Proc, Mon, TDRef, N+1, D)
end.
tok_trace_loop(_, N, N) ->
@@ -1437,16 +1700,23 @@ tok_trace_loop(Parent, N, M) ->
receive_first() ->
receive
- Any -> Any
+ Any -> Any
+ end.
+
+%% Waits for and returns the first message in the message queue.
+
+receive_first_trace() ->
+ receive
+ Any when element(1,Any) =:= trace; element(1,Any) =:= trace_ts -> Any
end.
%% Ensures that there is no message in the message queue.
receive_nothing() ->
receive
- Any ->
- test_server:fail({unexpected_message, Any})
- after 200 ->
+ Any ->
+ ct:fail({unexpected_message, Any})
+ after 100 ->
ok
end.
@@ -1455,39 +1725,39 @@ receive_nothing() ->
process(Dest) ->
receive
- {send_please, To, What} ->
- To ! What,
- process(Dest);
- {spawn_link_please, ReplyTo, {M, F, A}} ->
- Pid = spawn_link(M, F, A),
- ReplyTo ! {spawned, self(), Pid},
- process(Dest);
- {spawn_link_please, ReplyTo, Node, {M, F, A}} ->
- Pid = spawn_link(Node, M, F, A),
- ReplyTo ! {spawned, self(), Pid},
- process(Dest);
- {link_please, Pid} ->
- link(Pid),
- process(Dest);
- {unlink_please, Pid} ->
- unlink(Pid),
- process(Dest);
- {register_please, Name, Pid} ->
- register(Name, Pid),
- process(Dest);
- {unregister_please, Name} ->
- unregister(Name),
- process(Dest);
- {exit_please, Reason} ->
- exit(Reason);
- {trap_exit_please, State} ->
- process_flag(trap_exit, State),
- process(Dest);
- Other ->
- Dest ! {self(), Other},
- process(Dest)
+ {send_please, To, What} ->
+ To ! What,
+ process(Dest);
+ {spawn_link_please, ReplyTo, {M, F, A}} ->
+ Pid = spawn_link(M, F, A),
+ ReplyTo ! {spawned, self(), Pid},
+ process(Dest);
+ {spawn_link_please, ReplyTo, Node, {M, F, A}} ->
+ Pid = spawn_link(Node, M, F, A),
+ ReplyTo ! {spawned, self(), Pid},
+ process(Dest);
+ {link_please, Pid} ->
+ link(Pid),
+ process(Dest);
+ {unlink_please, Pid} ->
+ unlink(Pid),
+ process(Dest);
+ {register_please, Name, Pid} ->
+ register(Name, Pid),
+ process(Dest);
+ {unregister_please, Name} ->
+ unregister(Name),
+ process(Dest);
+ {exit_please, Reason} ->
+ exit(Reason);
+ {trap_exit_please, State} ->
+ process_flag(trap_exit, State),
+ process(Dest);
+ Other ->
+ Dest ! {self(), Other},
+ process(Dest)
after 3000 ->
- exit(timeout)
+ exit(timeout)
end.
@@ -1495,17 +1765,17 @@ process(Dest) ->
process() ->
receive
- {spawn_please, ReplyTo, Fun} ->
- Pid = fun_spawn(Fun),
- ReplyTo ! {spawned, Pid},
- process();
- {send_please, To, What} ->
- To ! What,
- process();
- timeout_please ->
- receive after 1 -> process() end;
- _Other ->
- process()
+ {spawn_please, ReplyTo, Fun} ->
+ Pid = fun_spawn(Fun),
+ ReplyTo ! {spawned, Pid},
+ process();
+ {send_please, To, What} ->
+ To ! What,
+ process();
+ timeout_please ->
+ receive after 1 -> process() end;
+ _Other ->
+ process()
end.
@@ -1513,18 +1783,23 @@ process() ->
sender() ->
receive
- {send_please, To, What} ->
- To ! What,
- sender()
+ {send_please, To, What} ->
+ To ! What,
+ sender()
end.
%% Just consumes messages from its message queue.
receiver() ->
- receive
- _Any -> receiver()
- end.
+ receiver(infinity).
+
+receiver(Timeout) ->
+ receiver(receive
+ {set_timeout, NewTimeout} -> NewTimeout;
+ _Any -> Timeout
+ after Timeout -> infinity %% reset
+ end).
%% Works as long as it receives CPU time. Will always be RUNNABLE.
@@ -1544,8 +1819,8 @@ fun_spawn(Fun, Args) ->
start_node(Name) ->
Pa = filename:dirname(code:which(?MODULE)),
Cookie = atom_to_list(erlang:get_cookie()),
- test_server:start_node(Name, slave,
- [{args, "-setcookie " ++ Cookie ++" -pa " ++ Pa}]).
+ test_server:start_node(Name, slave,
+ [{args, "-setcookie " ++ Cookie ++" -pa " ++ Pa}]).
stop_node(Node) ->
test_server:stop_node(Node).
@@ -1553,11 +1828,11 @@ stop_node(Node) ->
wait_for_empty_runq(DeadLine) ->
case statistics(run_queue) of
- 0 -> true;
- RQLen ->
- erlang:display("Waiting for empty run queue"),
- MSDL = DeadLine*1000,
- wait_for_empty_runq(MSDL, MSDL, RQLen)
+ 0 -> true;
+ RQLen ->
+ erlang:display("Waiting for empty run queue"),
+ MSDL = DeadLine*1000,
+ wait_for_empty_runq(MSDL, MSDL, RQLen)
end.
wait_for_empty_runq(DeadLine, Left, RQLen) when Left =< 0 ->
@@ -1568,48 +1843,48 @@ wait_for_empty_runq(DeadLine, Left, _RQLen) ->
UntilDeadLine = Left - Wait,
receive after Wait -> ok end,
case statistics(run_queue) of
- 0 ->
- erlang:display("Waited for "
- ++ integer_to_list(DeadLine
- - UntilDeadLine)
- ++ " ms for empty run queue."),
- true;
- NewRQLen ->
- wait_for_empty_runq(DeadLine,
- UntilDeadLine,
- NewRQLen)
+ 0 ->
+ erlang:display("Waited for "
+ ++ integer_to_list(DeadLine
+ - UntilDeadLine)
+ ++ " ms for empty run queue."),
+ true;
+ NewRQLen ->
+ wait_for_empty_runq(DeadLine,
+ UntilDeadLine,
+ NewRQLen)
end.
issue_non_empty_runq_warning(DeadLine, RQLen) ->
PIs = lists:foldl(
- fun (P, Acc) ->
- case process_info(P,
- [status,
- initial_call,
- current_function,
- registered_name,
- reductions,
- message_queue_len]) of
- [{status, Runnable} | _] = PI when Runnable /= waiting,
- Runnable /= suspended ->
- [[{pid, P} | PI] | Acc];
- _ ->
- Acc
- end
- end,
- [],
- processes()),
- ?t:format("WARNING: Unexpected runnable processes in system (waited ~p sec).~n"
- " Run queue length: ~p~n"
- " Self: ~p~n"
- " Processes info: ~p~n",
- [DeadLine div 1000, RQLen, self(), PIs]),
+ fun (P, Acc) ->
+ case process_info(P,
+ [status,
+ initial_call,
+ current_function,
+ registered_name,
+ reductions,
+ message_queue_len]) of
+ [{status, Runnable} | _] = PI when Runnable /= waiting,
+ Runnable /= suspended ->
+ [[{pid, P} | PI] | Acc];
+ _ ->
+ Acc
+ end
+ end,
+ [],
+ processes()),
+ io:format("WARNING: Unexpected runnable processes in system (waited ~p sec).~n"
+ " Run queue length: ~p~n"
+ " Self: ~p~n"
+ " Processes info: ~p~n",
+ [DeadLine div 1000, RQLen, self(), PIs]),
receive after 1000 -> ok end.
load_driver(Dir, Driver) ->
case erl_ddll:load_driver(Dir, Driver) of
- ok -> ok;
- {error, Error} = Res ->
- io:format("~s\n", [erl_ddll:format_error(Error)]),
- Res
+ ok -> ok;
+ {error, Error} = Res ->
+ io:format("~s\n", [erl_ddll:format_error(Error)]),
+ Res
end.
diff --git a/erts/emulator/test/trace_bif_SUITE.erl b/erts/emulator/test/trace_bif_SUITE.erl
index ae98cc7189..491b37ae46 100644
--- a/erts/emulator/test/trace_bif_SUITE.erl
+++ b/erts/emulator/test/trace_bif_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.
@@ -22,8 +22,7 @@
-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([all/0, suite/0]).
-export([trace_bif/1, trace_bif_timestamp/1, trace_on_and_off/1,
trace_bif_local/1,
trace_bif_timestamp_local/1, trace_bif_return/1, not_run/1,
@@ -42,99 +41,82 @@ all() ->
trace_bif_return, trace_info_old_code]
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"}.
-trace_on_and_off(doc) ->
- "Tests switching tracing on and off.";
+%% Tests switching tracing on and off.
trace_on_and_off(Config) when is_list(Config) ->
- ?line Pid = spawn(?MODULE, bif_process, []),
- ?line Self = self(),
- ?line 1 = erlang:trace(Pid, true, [call,timestamp]),
- ?line {flags, Flags} = erlang:trace_info(Pid,flags),
- ?line [call,timestamp] = lists:sort(Flags),
- ?line {tracer, Self} = erlang:trace_info(Pid,tracer),
- ?line 1 = erlang:trace(Pid, false, [timestamp]),
- ?line {flags,[call]} = erlang:trace_info(Pid,flags),
- ?line {tracer, Self} = erlang:trace_info(Pid,tracer),
- ?line 1 = erlang:trace(Pid, false, [call]),
- ?line {flags,[]} = erlang:trace_info(Pid,flags),
- ?line {tracer, []} = erlang:trace_info(Pid,tracer),
- ?line exit(Pid,kill),
+ Pid = spawn(?MODULE, bif_process, []),
+ Self = self(),
+ 1 = erlang:trace(Pid, true, [call,timestamp]),
+ {flags, Flags} = erlang:trace_info(Pid,flags),
+ [call,timestamp] = lists:sort(Flags),
+ {tracer, Self} = erlang:trace_info(Pid,tracer),
+ 1 = erlang:trace(Pid, false, [timestamp]),
+ {flags,[call]} = erlang:trace_info(Pid,flags),
+ {tracer, Self} = erlang:trace_info(Pid,tracer),
+ 1 = erlang:trace(Pid, false, [call]),
+ {flags,[]} = erlang:trace_info(Pid,flags),
+ {tracer, []} = erlang:trace_info(Pid,tracer),
+ exit(Pid,kill),
ok.
-trace_bif(doc) -> "Test tracing BIFs.";
+%% Test tracing BIFs.
trace_bif(Config) when is_list(Config) ->
do_trace_bif([]).
-trace_bif_local(doc) -> "Test tracing BIFs with local flag.";
+%% Test tracing BIFs with local flag.
trace_bif_local(Config) when is_list(Config) ->
do_trace_bif([local]).
do_trace_bif(Flags) ->
- ?line Pid = spawn(?MODULE, bif_process, []),
- ?line 1 = erlang:trace(Pid, true, [call]),
- ?line erlang:trace_pattern({erlang,'_','_'}, [], Flags),
- ?line Pid ! {do_bif, time, []},
- ?line receive_trace_msg({trace,Pid,call,{erlang,time, []}}),
- ?line Pid ! {do_bif, statistics, [runtime]},
- ?line receive_trace_msg({trace,Pid,call,
- {erlang,statistics, [runtime]}}),
-
- ?line Pid ! {do_time_bif},
- ?line receive_trace_msg({trace,Pid,call,
- {erlang,time, []}}),
-
- ?line Pid ! {do_statistics_bif},
- ?line receive_trace_msg({trace,Pid,call,
- {erlang,statistics, [runtime]}}),
-
- ?line 1 = erlang:trace(Pid, false, [call]),
- ?line erlang:trace_pattern({erlang,'_','_'}, false, Flags),
- ?line exit(Pid, die),
+ Pid = spawn(?MODULE, bif_process, []),
+ 1 = erlang:trace(Pid, true, [call]),
+ erlang:trace_pattern({erlang,'_','_'}, [], Flags),
+ Pid ! {do_bif, time, []},
+ receive_trace_msg({trace,Pid,call,{erlang,time, []}}),
+ Pid ! {do_bif, statistics, [runtime]},
+ receive_trace_msg({trace,Pid,call,
+ {erlang,statistics, [runtime]}}),
+
+ Pid ! {do_time_bif},
+ receive_trace_msg({trace,Pid,call,
+ {erlang,time, []}}),
+
+ Pid ! {do_statistics_bif},
+ receive_trace_msg({trace,Pid,call,
+ {erlang,statistics, [runtime]}}),
+
+ 1 = erlang:trace(Pid, false, [call]),
+ erlang:trace_pattern({erlang,'_','_'}, false, Flags),
+ exit(Pid, die),
ok.
-trace_bif_timestamp(doc) -> "Test tracing BIFs with timestamps.";
+%% Test tracing BIFs with timestamps.
trace_bif_timestamp(Config) when is_list(Config) ->
do_trace_bif_timestamp([], timestamp, [timestamp]),
do_trace_bif_timestamp([], timestamp,
- [timestamp,
- monotonic_timestamp,
- strict_monotonic_timestamp]),
+ [timestamp,
+ monotonic_timestamp,
+ strict_monotonic_timestamp]),
do_trace_bif_timestamp([], strict_monotonic_timestamp,
- [strict_monotonic_timestamp]),
+ [strict_monotonic_timestamp]),
do_trace_bif_timestamp([], strict_monotonic_timestamp,
- [monotonic_timestamp, strict_monotonic_timestamp]),
+ [monotonic_timestamp, strict_monotonic_timestamp]),
do_trace_bif_timestamp([], monotonic_timestamp, [monotonic_timestamp]).
-
-trace_bif_timestamp_local(doc) ->
- "Test tracing BIFs with timestamps and local flag.";
+
+%% Test tracing BIFs with timestamps and local flag.
trace_bif_timestamp_local(Config) when is_list(Config) ->
do_trace_bif_timestamp([local], timestamp, [timestamp]),
do_trace_bif_timestamp([local], timestamp,
- [timestamp,
- monotonic_timestamp,
- strict_monotonic_timestamp]),
+ [timestamp,
+ monotonic_timestamp,
+ strict_monotonic_timestamp]),
do_trace_bif_timestamp([local], strict_monotonic_timestamp,
- [strict_monotonic_timestamp]),
+ [strict_monotonic_timestamp]),
do_trace_bif_timestamp([local], strict_monotonic_timestamp,
- [monotonic_timestamp, strict_monotonic_timestamp]),
+ [monotonic_timestamp, strict_monotonic_timestamp]),
do_trace_bif_timestamp([local], monotonic_timestamp, [monotonic_timestamp]).
do_trace_bif_timestamp(Flags, TsType, TsFlags) ->
@@ -146,22 +128,22 @@ do_trace_bif_timestamp(Flags, TsType, TsFlags) ->
Ts0 = make_ts(TsType),
Pid ! {do_bif, time, []},
Ts1 = receive_trace_msg_ts({trace_ts,Pid,call,{erlang,time,[]}},
- Ts0,TsType),
+ Ts0,TsType),
Pid ! {do_bif, statistics, [runtime]},
Ts2 = receive_trace_msg_ts({trace_ts,Pid,call,
- {erlang,statistics, [runtime]}},
- Ts1, TsType),
+ {erlang,statistics, [runtime]}},
+ Ts1, TsType),
Pid ! {do_time_bif},
Ts3 = receive_trace_msg_ts({trace_ts,Pid,call,
- {erlang,time, []}},
- Ts2, TsType),
+ {erlang,time, []}},
+ Ts2, TsType),
Pid ! {do_statistics_bif},
Ts4 = receive_trace_msg_ts({trace_ts,Pid,call,
- {erlang,statistics, [runtime]}},
- Ts3, TsType),
+ {erlang,statistics, [runtime]}},
+ Ts3, TsType),
check_ts(TsType, Ts4, make_ts(TsType)),
@@ -170,11 +152,11 @@ do_trace_bif_timestamp(Flags, TsType, TsFlags) ->
Pid ! {do_statistics_bif},
receive_trace_msg({trace,Pid,call,
- {erlang,statistics, [runtime]}}),
+ {erlang,statistics, [runtime]}}),
Pid ! {do_bif, statistics, [runtime]},
receive_trace_msg({trace,Pid,call,
- {erlang,statistics, [runtime]}}),
+ {erlang,statistics, [runtime]}}),
1 = erlang:trace(Pid, false, [call]),
erlang:trace_pattern({erlang,'_','_'}, false, Flags),
@@ -182,18 +164,17 @@ do_trace_bif_timestamp(Flags, TsType, TsFlags) ->
exit(Pid, die),
ok.
-trace_bif_return(doc) ->
- "Test tracing BIF's with return/return_to trace.";
+%% Test tracing BIF's with return/return_to trace.
trace_bif_return(Config) when is_list(Config) ->
do_trace_bif_return(timestamp, [timestamp]),
do_trace_bif_return(timestamp,
- [timestamp,
- monotonic_timestamp,
- strict_monotonic_timestamp]),
+ [timestamp,
+ monotonic_timestamp,
+ strict_monotonic_timestamp]),
do_trace_bif_return(strict_monotonic_timestamp,
- [strict_monotonic_timestamp]),
+ [strict_monotonic_timestamp]),
do_trace_bif_return(strict_monotonic_timestamp,
- [monotonic_timestamp, strict_monotonic_timestamp]),
+ [monotonic_timestamp, strict_monotonic_timestamp]),
do_trace_bif_return(monotonic_timestamp, [monotonic_timestamp]).
do_trace_bif_return(TsType, TsFlags) ->
@@ -201,114 +182,108 @@ do_trace_bif_return(TsType, TsFlags) ->
Pid=spawn(?MODULE, bif_process, []),
1 = erlang:trace(Pid, true, [call,return_to]++TsFlags),
erlang:trace_pattern({erlang,'_','_'}, [{'_',[],[{return_trace}]}],
- [local]),
+ [local]),
Ts0 = make_ts(TsType),
Pid ! {do_bif, time, []},
Ts1 = receive_trace_msg_ts({trace_ts,Pid,call,{erlang,time,[]}},
- Ts0, TsType),
+ Ts0, TsType),
Ts2 = receive_trace_msg_ts_return_from({trace_ts,Pid,return_from,
- {erlang,time,0}},
- Ts1, TsType),
+ {erlang,time,0}},
+ Ts1, TsType),
Ts3 = receive_trace_msg_ts_return_to({trace_ts,Pid,return_to,
- {?MODULE, bif_process,0}},
- Ts2, TsType),
-
-
+ {?MODULE, bif_process,0}},
+ Ts2, TsType),
+
+
Pid ! {do_bif, statistics, [runtime]},
Ts4 = receive_trace_msg_ts({trace_ts,Pid,call,
- {erlang,statistics, [runtime]}},
- Ts3, TsType),
+ {erlang,statistics, [runtime]}},
+ Ts3, TsType),
Ts5 = receive_trace_msg_ts_return_from({trace_ts,Pid,return_from,
- {erlang,statistics,1}},
- Ts4, TsType),
+ {erlang,statistics,1}},
+ Ts4, TsType),
Ts6 = receive_trace_msg_ts_return_to({trace_ts,Pid,return_to,
- {?MODULE, bif_process,0}},
- Ts5, TsType),
-
-
+ {?MODULE, bif_process,0}},
+ Ts5, TsType),
+
+
Pid ! {do_time_bif},
Ts7 = receive_trace_msg_ts({trace_ts,Pid,call,
- {erlang,time, []}},
- Ts6, TsType),
+ {erlang,time, []}},
+ Ts6, TsType),
Ts8 = receive_trace_msg_ts_return_from({trace_ts,Pid,return_from,
- {erlang,time,0}},
- Ts7, TsType),
+ {erlang,time,0}},
+ Ts7, TsType),
Ts9 = receive_trace_msg_ts_return_to({trace_ts,Pid,return_to,
- {?MODULE, bif_process,0}},
- Ts8, TsType),
+ {?MODULE, bif_process,0}},
+ Ts8, TsType),
Pid ! {do_statistics_bif},
Ts10 = receive_trace_msg_ts({trace_ts,Pid,call,
- {erlang,statistics, [runtime]}},
- Ts9, TsType),
+ {erlang,statistics, [runtime]}},
+ Ts9, TsType),
Ts11 = receive_trace_msg_ts_return_from({trace_ts,Pid,return_from,
- {erlang,statistics,1}},
- Ts10, TsType),
+ {erlang,statistics,1}},
+ Ts10, TsType),
Ts12 = receive_trace_msg_ts_return_to({trace_ts,Pid,return_to,
- {?MODULE, bif_process,0}},
- Ts11, TsType),
+ {?MODULE, bif_process,0}},
+ Ts11, TsType),
check_ts(TsType, Ts12, make_ts(TsType)),
+ erlang:trace_pattern({erlang,'_','_'}, false, [local]),
ok.
-
-
+
+
receive_trace_msg(Mess) ->
receive
- Mess ->
- ok;
- Other ->
- io:format("Expected: ~p,~nGot: ~p~n", [Mess, Other]),
- ?t:fail()
+ Mess ->
+ ok;
+ Other ->
+ ct:fail("Expected: ~p,~nGot: ~p~n", [Mess, Other])
after 5000 ->
- io:format("Expected: ~p,~nGot: timeout~n", [Mess]),
- ?t:fail()
+ ct:fail("Expected: ~p,~nGot: timeout~n", [Mess])
end.
receive_trace_msg_ts({trace_ts, Pid, call, {erlang,F,A}}, PrevTs, TsType) ->
receive
- {trace_ts, Pid, call, {erlang, F, A}, Ts} ->
- check_ts(TsType, PrevTs, Ts),
- Ts;
- Other ->
- io:format("Expected: {trace, ~p, call, {~p, ~p, ~p}, TimeStamp}},~n"
- "Got: ~p~n",
- [Pid, erlang, F, A, Other]),
- ?t:fail()
- after 5000 ->
- io:format("Got timeout~n", []),
- ?t:fail()
+ {trace_ts, Pid, call, {erlang, F, A}, Ts} = M ->
+ io:format("~p (PrevTs: ~p)~n",[M, PrevTs]),
+ check_ts(TsType, PrevTs, Ts),
+ Ts;
+ Other ->
+ ct:fail("Expected: {trace, ~p, call, {~p, ~p, ~p}, TimeStamp}},~n"
+ "Got: ~p~n",
+ [Pid, erlang, F, A, Other])
+ after 5000 ->
+ ct:fail("Got timeout~n", [])
end.
receive_trace_msg_ts_return_from({trace_ts, Pid, return_from, {erlang,F,A}}, PrevTs, TsType) ->
receive
- {trace_ts, Pid, return_from, {erlang, F, A}, _Value, Ts} ->
- check_ts(TsType, PrevTs, Ts),
- Ts;
- Other ->
- io:format("Expected: {trace_ts, ~p, return_from, {~p, ~p, ~p}, Value, TimeStamp}},~n"
- "Got: ~p~n",
- [Pid, erlang, F, A, Other]),
- ?t:fail()
- after 5000 ->
- io:format("Got timeout~n", []),
- ?t:fail()
+ {trace_ts, Pid, return_from, {erlang, F, A}, _Value, Ts} = M ->
+ io:format("~p (PrevTs: ~p)~n",[M, PrevTs]),
+ check_ts(TsType, PrevTs, Ts),
+ Ts;
+ Other ->
+ ct:fail("Expected: {trace_ts, ~p, return_from, {~p, ~p, ~p}, Value, TimeStamp}},~n"
+ "Got: ~p~n", [Pid, erlang, F, A, Other])
+ after 5000 ->
+ ct:fail("Got timeout~n", [])
end.
receive_trace_msg_ts_return_to({trace_ts, Pid, return_to, {M,F,A}}, PrevTs, TsType) ->
receive
- {trace_ts, Pid, return_to, {M, F, A}, Ts} ->
- check_ts(TsType, PrevTs, Ts),
- Ts;
- Other ->
- io:format("Expected: {trace_ts, ~p, return_to, {~p, ~p, ~p}, TimeStamp}},~n"
- "Got: ~p~n",
- [Pid, M, F, A, Other]),
- ?t:fail()
- after 5000 ->
- io:format("Got timeout~n", []),
- ?t:fail()
+ {trace_ts, Pid, return_to, {M, F, A}, Ts} = Msg ->
+ io:format("~p (PrevTs: ~p)~n",[Msg, PrevTs]),
+ check_ts(TsType, PrevTs, Ts),
+ Ts;
+ Other ->
+ ct:fail("Expected: {trace_ts, ~p, return_to, {~p, ~p, ~p}, TimeStamp}},~n"
+ "Got: ~p~n", [Pid, M, F, A, Other])
+ after 5000 ->
+ ct:fail("Got timeout~n", [])
end.
make_ts(timestamp) ->
@@ -340,37 +315,37 @@ check_ts(strict_monotonic_timestamp, PrevTs, Ts) ->
bif_process() ->
receive
- {do_bif, Name, Args} ->
- apply(erlang, Name, Args),
- bif_process();
- {do_time_bif} ->
- %% Match the return value to ensure that the time() call
- %% is not optimized away.
- {_,_,_} = time(),
- bif_process();
- {do_statistics_bif} ->
- statistics(runtime),
- bif_process();
- _Stuff ->
- bif_process()
+ {do_bif, Name, Args} ->
+ apply(erlang, Name, Args),
+ bif_process();
+ {do_time_bif} ->
+ %% Match the return value to ensure that the time() call
+ %% is not optimized away.
+ {_,_,_} = time(),
+ bif_process();
+ {do_statistics_bif} ->
+ statistics(runtime),
+ bif_process();
+ _Stuff ->
+ bif_process()
end.
-
-trace_info_old_code(doc) -> "trace_info on deleted module (OTP-5057).";
+
+%% trace_info on deleted module (OTP-5057).
trace_info_old_code(Config) when is_list(Config) ->
- ?line MFA = {M,F,0} = {test,foo,0},
- ?line Fname = atom_to_list(M)++".erl",
- ?line AbsForms =
- [{attribute,a(1),module,M}, % -module(M).
- {attribute,a(2),export,[{F,0}]}, % -export([F/0]).
- {function,a(3),F,0, % F() ->
- [{clause,a(4),[],[],[{atom,a(4),F}]}]}], % F.
+ MFA = {M,F,0} = {test,foo,0},
+ Fname = atom_to_list(M)++".erl",
+ AbsForms =
+ [{attribute,a(1),module,M}, % -module(M).
+ {attribute,a(2),export,[{F,0}]}, % -export([F/0]).
+ {function,a(3),F,0, % F() ->
+ [{clause,a(4),[],[],[{atom,a(4),F}]}]}], % F.
%%
- ?line {ok,M,Mbin} = compile:forms(AbsForms),
- ?line {module,M} = code:load_binary(M, Fname, Mbin),
- ?line true = erlang:delete_module(M),
- ?line {traced,undefined} = erlang:trace_info(MFA, traced),
+ {ok,M,Mbin} = compile:forms(AbsForms),
+ {module,M} = code:load_binary(M, Fname, Mbin),
+ true = erlang:delete_module(M),
+ {traced,undefined} = erlang:trace_info(MFA, traced),
ok.
a(L) ->
diff --git a/erts/emulator/test/trace_call_count_SUITE.erl b/erts/emulator/test/trace_call_count_SUITE.erl
index e358791f1f..5f871835bc 100644
--- a/erts/emulator/test/trace_call_count_SUITE.erl
+++ b/erts/emulator/test/trace_call_count_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.
@@ -70,18 +70,17 @@ config(priv_dir,_) ->
pause_and_restart/1, combo/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, {minutes, 4}}].
all() ->
case test_server:is_native(trace_call_count_SUITE) of
@@ -109,38 +108,23 @@ end_per_group(_GroupName, Config) ->
not_run(Config) when is_list(Config) ->
{skipped,"Native code"}.
-basic(suite) ->
- [];
-basic(doc) ->
- ["Tests basic call count trace"];
+%% Tests basic call count trace
basic(Config) when is_list(Config) ->
basic_test().
-on_and_off(suite) ->
- [];
-on_and_off(doc) ->
- ["Tests turning trace parameters on and off"];
+%% Tests turning trace parameters on and off
on_and_off(Config) when is_list(Config) ->
on_and_off_test().
-info(suite) ->
- [];
-info(doc) ->
- ["Tests the trace_info BIF"];
+%% Tests the trace_info BIF
info(Config) when is_list(Config) ->
info_test().
-pause_and_restart(suite) ->
- [];
-pause_and_restart(doc) ->
- ["Tests pausing and restarting call counters"];
+%% Tests pausing and restarting call counters
pause_and_restart(Config) when is_list(Config) ->
pause_and_restart_test().
-combo(suite) ->
- [];
-combo(doc) ->
- ["Tests combining local call trace and meta trace with call count trace"];
+%% Tests combining local call trace and meta trace with call count trace
combo(Config) when is_list(Config) ->
combo_test().
@@ -161,168 +145,168 @@ combo(Config) when is_list(Config) ->
%%%
basic_test() ->
- ?line P = erlang:trace_pattern({'_','_','_'}, false, [call_count]),
- ?line M = 1000,
+ P = erlang:trace_pattern({'_','_','_'}, false, [call_count]),
+ M = 1000,
%%
- ?line 1 = erlang:trace_pattern({?MODULE,seq,'_'}, true, [call_count]),
- ?line 2 = erlang:trace_pattern({?MODULE,seq_r,'_'}, true, [call_count]),
- ?line L = seq(1, M, fun(X) -> X+1 end),
- ?line {call_count,M} = erlang:trace_info({?MODULE,seq,3}, call_count),
- ?line {call_count,0} = erlang:trace_info({?MODULE,seq_r,3}, call_count),
- ?line Lr = seq_r(1, M, fun(X) -> X+1 end),
- ?line {call_count,M} = erlang:trace_info({?MODULE,seq,3}, call_count),
- ?line {call_count,1} = erlang:trace_info({?MODULE,seq_r,3}, call_count),
- ?line {call_count,M} = erlang:trace_info({?MODULE,seq_r,4}, call_count),
- ?line L = lists:reverse(Lr),
+ 1 = erlang:trace_pattern({?MODULE,seq,'_'}, true, [call_count]),
+ 2 = erlang:trace_pattern({?MODULE,seq_r,'_'}, true, [call_count]),
+ L = seq(1, M, fun(X) -> X+1 end),
+ {call_count,M} = erlang:trace_info({?MODULE,seq,3}, call_count),
+ {call_count,0} = erlang:trace_info({?MODULE,seq_r,3}, call_count),
+ Lr = seq_r(1, M, fun(X) -> X+1 end),
+ {call_count,M} = erlang:trace_info({?MODULE,seq,3}, call_count),
+ {call_count,1} = erlang:trace_info({?MODULE,seq_r,3}, call_count),
+ {call_count,M} = erlang:trace_info({?MODULE,seq_r,4}, call_count),
+ L = lists:reverse(Lr),
%%
- ?line P = erlang:trace_pattern({'_','_','_'}, false, [call_count]),
+ P = erlang:trace_pattern({'_','_','_'}, false, [call_count]),
ok.
%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
on_and_off_test() ->
- ?line P = erlang:trace_pattern({'_','_','_'}, false, [call_count]),
- ?line M = 100,
+ P = erlang:trace_pattern({'_','_','_'}, false, [call_count]),
+ M = 100,
%%
- ?line 1 = erlang:trace_pattern({?MODULE,seq,'_'}, true, [call_count]),
- ?line L = seq(1, M, fun(X) -> X+1 end),
- ?line {call_count,M} = erlang:trace_info({?MODULE,seq,3}, call_count),
- ?line N = erlang:trace_pattern({?MODULE,'_','_'}, true, [call_count]),
- ?line L = seq(1, M, fun(X) -> X+1 end),
- ?line {call_count,M} = erlang:trace_info({?MODULE,seq,3}, call_count),
- ?line P = erlang:trace_pattern({'_','_','_'}, true, [call_count]),
- ?line L = seq(1, M, fun(X) -> X+1 end),
- ?line {call_count,M} = erlang:trace_info({?MODULE,seq,3}, call_count),
- ?line 1 = erlang:trace_pattern({?MODULE,seq,'_'}, false, [call_count]),
- ?line {call_count,false} = erlang:trace_info({?MODULE,seq,3}, call_count),
- ?line L = seq(1, M, fun(X) -> X+1 end),
- ?line {call_count,false} = erlang:trace_info({?MODULE,seq,3}, call_count),
- ?line {call_count,0} = erlang:trace_info({?MODULE,seq_r,4}, call_count),
- ?line Lr = seq_r(1, M, fun(X) -> X+1 end),
- ?line {call_count,M} = erlang:trace_info({?MODULE,seq_r,4}, call_count),
- ?line N = erlang:trace_pattern({?MODULE,'_','_'}, false, [call_count]),
- ?line {call_count,false} = erlang:trace_info({?MODULE,seq_r,4}, call_count),
- ?line Lr = seq_r(1, M, fun(X) -> X+1 end),
- ?line {call_count,false} = erlang:trace_info({?MODULE,seq_r,4}, call_count),
- ?line L = lists:reverse(Lr),
+ 1 = erlang:trace_pattern({?MODULE,seq,'_'}, true, [call_count]),
+ L = seq(1, M, fun(X) -> X+1 end),
+ {call_count,M} = erlang:trace_info({?MODULE,seq,3}, call_count),
+ N = erlang:trace_pattern({?MODULE,'_','_'}, true, [call_count]),
+ L = seq(1, M, fun(X) -> X+1 end),
+ {call_count,M} = erlang:trace_info({?MODULE,seq,3}, call_count),
+ P = erlang:trace_pattern({'_','_','_'}, true, [call_count]),
+ L = seq(1, M, fun(X) -> X+1 end),
+ {call_count,M} = erlang:trace_info({?MODULE,seq,3}, call_count),
+ 1 = erlang:trace_pattern({?MODULE,seq,'_'}, false, [call_count]),
+ {call_count,false} = erlang:trace_info({?MODULE,seq,3}, call_count),
+ L = seq(1, M, fun(X) -> X+1 end),
+ {call_count,false} = erlang:trace_info({?MODULE,seq,3}, call_count),
+ {call_count,0} = erlang:trace_info({?MODULE,seq_r,4}, call_count),
+ Lr = seq_r(1, M, fun(X) -> X+1 end),
+ {call_count,M} = erlang:trace_info({?MODULE,seq_r,4}, call_count),
+ N = erlang:trace_pattern({?MODULE,'_','_'}, false, [call_count]),
+ {call_count,false} = erlang:trace_info({?MODULE,seq_r,4}, call_count),
+ Lr = seq_r(1, M, fun(X) -> X+1 end),
+ {call_count,false} = erlang:trace_info({?MODULE,seq_r,4}, call_count),
+ L = lists:reverse(Lr),
%%
- ?line P = erlang:trace_pattern({'_','_','_'}, false, [call_count]),
+ P = erlang:trace_pattern({'_','_','_'}, false, [call_count]),
ok.
%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
info_test() ->
- ?line P = erlang:trace_pattern({'_','_','_'}, false, [call_count]),
+ P = erlang:trace_pattern({'_','_','_'}, false, [call_count]),
%%
- ?line 1 = erlang:trace_pattern({?MODULE,seq,3}, true, [call_count]),
- ?line {call_count,0} = erlang:trace_info({?MODULE,seq,3}, call_count),
- ?line 1 = erlang:trace_pattern({?MODULE,seq,'_'}, pause, [call_count]),
- ?line {call_count,0} = erlang:trace_info({?MODULE,seq,3}, call_count),
- ?line {all,[_|_]=L} = erlang:trace_info({?MODULE,seq,3}, all),
- ?line {value,{call_count,0}} = lists:keysearch(call_count, 1, L),
- ?line 1 = erlang:trace_pattern({?MODULE,seq,'_'}, restart, [call_count]),
- ?line {call_count,0} = erlang:trace_info({?MODULE,seq,3}, call_count),
- ?line 1 = erlang:trace_pattern({?MODULE,seq,'_'}, false, [call_count]),
- ?line {call_count,false} = erlang:trace_info({?MODULE,seq,3}, call_count),
- ?line {all,false} = erlang:trace_info({?MODULE,seq,3}, all),
+ 1 = erlang:trace_pattern({?MODULE,seq,3}, true, [call_count]),
+ {call_count,0} = erlang:trace_info({?MODULE,seq,3}, call_count),
+ 1 = erlang:trace_pattern({?MODULE,seq,'_'}, pause, [call_count]),
+ {call_count,0} = erlang:trace_info({?MODULE,seq,3}, call_count),
+ {all,[_|_]=L} = erlang:trace_info({?MODULE,seq,3}, all),
+ {value,{call_count,0}} = lists:keysearch(call_count, 1, L),
+ 1 = erlang:trace_pattern({?MODULE,seq,'_'}, restart, [call_count]),
+ {call_count,0} = erlang:trace_info({?MODULE,seq,3}, call_count),
+ 1 = erlang:trace_pattern({?MODULE,seq,'_'}, false, [call_count]),
+ {call_count,false} = erlang:trace_info({?MODULE,seq,3}, call_count),
+ {all,false} = erlang:trace_info({?MODULE,seq,3}, all),
%%
- ?line P = erlang:trace_pattern({'_','_','_'}, false, [call_count]),
+ P = erlang:trace_pattern({'_','_','_'}, false, [call_count]),
ok.
%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
pause_and_restart_test() ->
- ?line P = erlang:trace_pattern({'_','_','_'}, false, [call_count]),
- ?line M = 100,
+ P = erlang:trace_pattern({'_','_','_'}, false, [call_count]),
+ M = 100,
%%
- ?line 1 = erlang:trace_pattern({?MODULE,seq,'_'}, true, [call_count]),
- ?line {call_count,0} = erlang:trace_info({?MODULE,seq,3}, call_count),
- ?line L = seq(1, M, fun(X) -> X+1 end),
- ?line {call_count,M} = erlang:trace_info({?MODULE,seq,3}, call_count),
- ?line 1 = erlang:trace_pattern({?MODULE,seq,'_'}, pause, [call_count]),
- ?line {call_count,M} = erlang:trace_info({?MODULE,seq,3}, call_count),
- ?line L = seq(1, M, fun(X) -> X+1 end),
- ?line {call_count,M} = erlang:trace_info({?MODULE,seq,3}, call_count),
- ?line 1 = erlang:trace_pattern({?MODULE,seq,'_'}, restart, [call_count]),
- ?line {call_count,0} = erlang:trace_info({?MODULE,seq,3}, call_count),
- ?line L = seq(1, M, fun(X) -> X+1 end),
- ?line {call_count,M} = erlang:trace_info({?MODULE,seq,3}, call_count),
+ 1 = erlang:trace_pattern({?MODULE,seq,'_'}, true, [call_count]),
+ {call_count,0} = erlang:trace_info({?MODULE,seq,3}, call_count),
+ L = seq(1, M, fun(X) -> X+1 end),
+ {call_count,M} = erlang:trace_info({?MODULE,seq,3}, call_count),
+ 1 = erlang:trace_pattern({?MODULE,seq,'_'}, pause, [call_count]),
+ {call_count,M} = erlang:trace_info({?MODULE,seq,3}, call_count),
+ L = seq(1, M, fun(X) -> X+1 end),
+ {call_count,M} = erlang:trace_info({?MODULE,seq,3}, call_count),
+ 1 = erlang:trace_pattern({?MODULE,seq,'_'}, restart, [call_count]),
+ {call_count,0} = erlang:trace_info({?MODULE,seq,3}, call_count),
+ L = seq(1, M, fun(X) -> X+1 end),
+ {call_count,M} = erlang:trace_info({?MODULE,seq,3}, call_count),
%%
- ?line P = erlang:trace_pattern({'_','_','_'}, false, [call_count]),
+ P = erlang:trace_pattern({'_','_','_'}, false, [call_count]),
ok.
%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
combo_test() ->
- ?line Self = self(),
-
- ?line MetaMatchSpec = [{'_',[],[{return_trace}]}],
- ?line Flags = lists:sort([call, return_to]),
- ?line LocalTracer = spawn_link(fun () -> relay_n(5, Self) end),
- ?line MetaTracer = spawn_link(fun () -> relay_n(9, Self) end),
- ?line 2 = erlang:trace_pattern({?MODULE,seq_r,'_'}, [], [local]),
- ?line 2 = erlang:trace_pattern({?MODULE,seq_r,'_'},
- MetaMatchSpec,
- [{meta,MetaTracer}, call_count]),
- ?line 1 = erlang:trace(Self, true, [{tracer,LocalTracer} | Flags]),
+ Self = self(),
+
+ MetaMatchSpec = [{'_',[],[{return_trace}]}],
+ Flags = lists:sort([call, return_to]),
+ LocalTracer = spawn_link(fun () -> relay_n(5, Self) end),
+ MetaTracer = spawn_link(fun () -> relay_n(9, Self) end),
+ 2 = erlang:trace_pattern({?MODULE,seq_r,'_'}, [], [local]),
+ 2 = erlang:trace_pattern({?MODULE,seq_r,'_'},
+ MetaMatchSpec,
+ [{meta,MetaTracer}, call_count]),
+ 1 = erlang:trace(Self, true, [{tracer,LocalTracer} | Flags]),
%%
- ?line {traced,local} =
- erlang:trace_info({?MODULE,seq_r,3}, traced),
- ?line {match_spec,[]} =
- erlang:trace_info({?MODULE,seq_r,3}, match_spec),
- ?line {meta,MetaTracer} =
- erlang:trace_info({?MODULE,seq_r,3}, meta),
- ?line {meta_match_spec,MetaMatchSpec} =
- erlang:trace_info({?MODULE,seq_r,3}, meta_match_spec),
- ?line {call_count,0} =
- erlang:trace_info({?MODULE,seq_r,3}, call_count),
+ {traced,local} =
+ erlang:trace_info({?MODULE,seq_r,3}, traced),
+ {match_spec,[]} =
+ erlang:trace_info({?MODULE,seq_r,3}, match_spec),
+ {meta,MetaTracer} =
+ erlang:trace_info({?MODULE,seq_r,3}, meta),
+ {meta_match_spec,MetaMatchSpec} =
+ erlang:trace_info({?MODULE,seq_r,3}, meta_match_spec),
+ {call_count,0} =
+ erlang:trace_info({?MODULE,seq_r,3}, call_count),
%%
- ?line {all,[_|_]=TraceInfo} =
- erlang:trace_info({?MODULE,seq_r,3}, all),
- ?line {value,{traced,local}} =
- lists:keysearch(traced, 1, TraceInfo),
- ?line {value,{match_spec,[]}} =
- lists:keysearch(match_spec, 1, TraceInfo),
- ?line {value,{meta,MetaTracer}} =
- lists:keysearch(meta, 1, TraceInfo),
- ?line {value,{meta_match_spec,MetaMatchSpec}} =
- lists:keysearch(meta_match_spec, 1, TraceInfo),
- ?line {value,{call_count,0}} =
- lists:keysearch(call_count, 1, TraceInfo),
+ {all,[_|_]=TraceInfo} =
+ erlang:trace_info({?MODULE,seq_r,3}, all),
+ {value,{traced,local}} =
+ lists:keysearch(traced, 1, TraceInfo),
+ {value,{match_spec,[]}} =
+ lists:keysearch(match_spec, 1, TraceInfo),
+ {value,{meta,MetaTracer}} =
+ lists:keysearch(meta, 1, TraceInfo),
+ {value,{meta_match_spec,MetaMatchSpec}} =
+ lists:keysearch(meta_match_spec, 1, TraceInfo),
+ {value,{call_count,0}} =
+ lists:keysearch(call_count, 1, TraceInfo),
%%
- ?line [3,2,1] = seq_r(1, 3, fun(X) -> X+1 end),
+ [3,2,1] = seq_r(1, 3, fun(X) -> X+1 end),
%%
- ?line List = collect(100),
- ?line {MetaR, LocalR} =
- lists:foldl(
- fun ({P,X}, {M,L}) when P == MetaTracer ->
- {[X|M],L};
- ({P,X}, {M,L}) when P == LocalTracer ->
- {M,[X|L]}
- end,
- {[],[]},
- List),
- ?line Meta = lists:reverse(MetaR),
- ?line Local = lists:reverse(LocalR),
- ?line [?CTT(Self,{?MODULE,seq_r,[1,3,_]}),
- ?CTT(Self,{?MODULE,seq_r,[1,3,_,[]]}),
- ?CTT(Self,{?MODULE,seq_r,[2,3,_,[1]]}),
- ?CTT(Self,{?MODULE,seq_r,[3,3,_,[2,1]]}),
- ?RFT(Self,{?MODULE,seq_r,4},[3,2,1]),
- ?RFT(Self,{?MODULE,seq_r,4},[3,2,1]),
- ?RFT(Self,{?MODULE,seq_r,4},[3,2,1]),
- ?RFT(Self,{?MODULE,seq_r,3},[3,2,1])] = Meta,
- ?line [?CT(Self,{?MODULE,seq_r,[1,3,_]}),
- ?CT(Self,{?MODULE,seq_r,[1,3,_,[]]}),
- ?CT(Self,{?MODULE,seq_r,[2,3,_,[1]]}),
- ?CT(Self,{?MODULE,seq_r,[3,3,_,[2,1]]}),
- ?RT(Self,{?MODULE,combo_test,0})] = Local,
- ?line {call_count,1} = erlang:trace_info({?MODULE,seq_r,3}, call_count),
- ?line {call_count,3} = erlang:trace_info({?MODULE,seq_r,4}, call_count),
+ List = collect(100),
+ {MetaR, LocalR} =
+ lists:foldl(
+ fun ({P,X}, {M,L}) when P == MetaTracer ->
+ {[X|M],L};
+ ({P,X}, {M,L}) when P == LocalTracer ->
+ {M,[X|L]}
+ end,
+ {[],[]},
+ List),
+ Meta = lists:reverse(MetaR),
+ Local = lists:reverse(LocalR),
+ [?CTT(Self,{?MODULE,seq_r,[1,3,_]}),
+ ?CTT(Self,{?MODULE,seq_r,[1,3,_,[]]}),
+ ?CTT(Self,{?MODULE,seq_r,[2,3,_,[1]]}),
+ ?CTT(Self,{?MODULE,seq_r,[3,3,_,[2,1]]}),
+ ?RFT(Self,{?MODULE,seq_r,4},[3,2,1]),
+ ?RFT(Self,{?MODULE,seq_r,4},[3,2,1]),
+ ?RFT(Self,{?MODULE,seq_r,4},[3,2,1]),
+ ?RFT(Self,{?MODULE,seq_r,3},[3,2,1])] = Meta,
+ [?CT(Self,{?MODULE,seq_r,[1,3,_]}),
+ ?CT(Self,{?MODULE,seq_r,[1,3,_,[]]}),
+ ?CT(Self,{?MODULE,seq_r,[2,3,_,[1]]}),
+ ?CT(Self,{?MODULE,seq_r,[3,3,_,[2,1]]}),
+ ?RT(Self,{?MODULE,combo_test,0})] = Local,
+ {call_count,1} = erlang:trace_info({?MODULE,seq_r,3}, call_count),
+ {call_count,3} = erlang:trace_info({?MODULE,seq_r,4}, call_count),
%%
- ?line erlang:trace_pattern({'_','_','_'}, false, [local,meta,call_count]),
- ?line erlang:trace_pattern(on_load, false, [local,meta,call_count]),
- ?line erlang:trace(all, false, [all]),
+ erlang:trace_pattern({'_','_','_'}, false, [local,meta,call_count]),
+ erlang:trace_pattern(on_load, false, [local,meta,call_count]),
+ erlang:trace(all, false, [all]),
ok.
%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -352,8 +336,8 @@ relay_n(0, _) ->
ok;
relay_n(N, Dest) ->
receive Msg ->
- Dest ! {self(), Msg},
- relay_n(N-1, Dest)
+ Dest ! {self(), Msg},
+ relay_n(N-1, Dest)
end.
@@ -367,15 +351,15 @@ collect(Time) ->
collect(A, 0) ->
receive
- Mess ->
- collect([Mess | A], 0)
+ Mess ->
+ collect([Mess | A], 0)
after 0 ->
- A
+ A
end;
collect(A, Ref) ->
receive
- {timeout, Ref, done} ->
- collect(A, 0);
- Mess ->
- collect([Mess | A], Ref)
+ {timeout, Ref, done} ->
+ collect(A, 0);
+ Mess ->
+ collect([Mess | A], Ref)
end.
diff --git a/erts/emulator/test/trace_call_time_SUITE.erl b/erts/emulator/test/trace_call_time_SUITE.erl
index a802aa12b8..40c8bc4340 100644
--- a/erts/emulator/test/trace_call_time_SUITE.erl
+++ b/erts/emulator/test/trace_call_time_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.
@@ -61,29 +61,27 @@
-include_lib("common_test/include/ct.hrl").
%% 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,
+-export([all/0, suite/0,
init_per_testcase/2, end_per_testcase/2, not_run/1]).
-export([basic/1, on_and_off/1, info/1,
pause_and_restart/1, scheduling/1, called_function/1, combo/1,
bif/1, nif/1]).
init_per_testcase(_Case, Config) ->
- ?line Dog=test_server:timetrap(test_server:seconds(400)),
erlang:trace_pattern({'_','_','_'}, false, [local,meta,call_time,call_count]),
erlang:trace_pattern(on_load, false, [local,meta,call_time,call_count]),
timer:now_diff(now(),now()),
- [{watchdog, Dog}|Config].
+ Config.
-end_per_testcase(_Case, Config) ->
+end_per_testcase(_Case, _Config) ->
erlang:trace_pattern({'_','_','_'}, false, [local,meta,call_time,call_count]),
erlang:trace_pattern(on_load, false, [local,meta,call_time,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, {minutes, 10}}].
all() ->
case test_server:is_native(trace_call_time_SUITE) of
@@ -93,382 +91,339 @@ all() ->
combo, bif, nif, called_function, dead_tracer]
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 call count trace"];
+%% Tests basic call time trace
basic(Config) when is_list(Config) ->
- ?line P = erlang:trace_pattern({'_','_','_'}, false, [call_time]),
- ?line M = 1000,
+ P = erlang:trace_pattern({'_','_','_'}, false, [call_time]),
+ M = 1000,
%%
- ?line 1 = erlang:trace_pattern({?MODULE,seq, '_'}, true, [call_time]),
- ?line 2 = erlang:trace_pattern({?MODULE,seq_r,'_'}, true, [call_time]),
- ?line Pid = setup(),
- ?line {L, T1} = execute(Pid, fun() -> seq(1, M, fun(X) -> (X+1) end) end),
- ?line ok = check_trace_info({?MODULE, seq, 3}, [{Pid, M, 0, 0}], T1),
- ?line ok = check_trace_info({?MODULE, seq_r, 3}, [], none),
-
- ?line {Lr, T2} = execute(Pid, fun() -> seq_r(1, M, fun(X) -> (X+1) end) end),
- ?line ok = check_trace_info({?MODULE, seq, 3}, [{Pid, M, 0, 0}], T1),
- ?line ok = check_trace_info({?MODULE, seq_r, 3}, [{Pid, 1, 0, 0}], T2/M),
- ?line ok = check_trace_info({?MODULE, seq_r, 4}, [{Pid, M, 0, 0}], T2),
- ?line L = lists:reverse(Lr),
+ 1 = erlang:trace_pattern({?MODULE,seq, '_'}, true, [call_time]),
+ 2 = erlang:trace_pattern({?MODULE,seq_r,'_'}, true, [call_time]),
+ Pid = setup(),
+ {L, T1} = execute(Pid, fun() -> seq(1, M, fun(X) -> (X+1) end) end),
+ ok = check_trace_info({?MODULE, seq, 3}, [{Pid, M, 0, 0}], T1),
+ ok = check_trace_info({?MODULE, seq_r, 3}, [], none),
+
+ {Lr, T2} = execute(Pid, fun() -> seq_r(1, M, fun(X) -> (X+1) end) end),
+ ok = check_trace_info({?MODULE, seq, 3}, [{Pid, M, 0, 0}], T1),
+ ok = check_trace_info({?MODULE, seq_r, 3}, [{Pid, 1, 0, 0}], T2/M),
+ ok = check_trace_info({?MODULE, seq_r, 4}, [{Pid, M, 0, 0}], T2),
+ L = lists:reverse(Lr),
%%
- ?line P = erlang:trace_pattern({'_','_','_'}, false, [call_time]),
- ?line Pid ! quit,
+ P = erlang:trace_pattern({'_','_','_'}, false, [call_time]),
+ Pid ! quit,
ok.
%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-on_and_off(suite) ->
- [];
-on_and_off(doc) ->
- ["Tests turning trace parameters on and off"];
+%% "Tests turning trace parameters on and off
on_and_off(Config) when is_list(Config) ->
- ?line P = erlang:trace_pattern({'_','_','_'}, false, [call_time]),
- ?line M = 100,
+ P = erlang:trace_pattern({'_','_','_'}, false, [call_time]),
+ M = 100,
%%
- ?line 1 = erlang:trace_pattern({?MODULE,seq,'_'}, true, [call_time]),
- ?line Pid = setup(),
- ?line {L, T1} = execute(Pid, {?MODULE, seq, [1, M, fun(X) -> X+1 end]}),
- ?line ok = check_trace_info({?MODULE, seq, 3}, [{Pid, M, 0, 0}], T1),
-
- ?line N = erlang:trace_pattern({?MODULE,'_','_'}, true, [call_time]),
- ?line {L, T2} = execute(Pid, fun() -> seq(1, M, fun(X) -> X+1 end) end),
- ?line ok = check_trace_info({?MODULE, seq, 3}, [{Pid, M, 0, 0}], T2),
-
- ?line P = erlang:trace_pattern({'_','_','_'}, true, [call_time]),
- ?line {L, T3} = execute(Pid, fun() -> seq(1, M, fun(X) -> X+1 end) end),
- ?line ok = check_trace_info({?MODULE, seq, 3}, [{Pid, M, 0, 0}], T3),
-
- ?line 1 = erlang:trace_pattern({?MODULE,seq,'_'}, false, [call_time]),
- ?line ok = check_trace_info({?MODULE, seq, 3}, false, none),
- ?line {L, _T4} = execute(Pid, fun() -> seq(1, M, fun(X) -> X+1 end) end),
- ?line ok = check_trace_info({?MODULE, seq, 3}, false, none),
- ?line ok = check_trace_info({?MODULE, seq_r, 4}, [], none),
- ?line {Lr, T5} = execute(Pid, fun() -> seq_r(1, M, fun(X) -> X+1 end) end),
- ?line ok = check_trace_info({?MODULE, seq_r, 4}, [{Pid,M,0,0}], T5),
-
- ?line N = erlang:trace_pattern({?MODULE,'_','_'}, false, [call_time]),
- ?line ok = check_trace_info({?MODULE, seq_r, 4}, false, none),
- ?line {Lr, _T6} = execute(Pid, fun() -> seq_r(1, M, fun(X) -> X+1 end) end),
- ?line ok = check_trace_info({?MODULE, seq_r, 4}, false, none),
- ?line L = lists:reverse(Lr),
+ 1 = erlang:trace_pattern({?MODULE,seq,'_'}, true, [call_time]),
+ Pid = setup(),
+ {L, T1} = execute(Pid, {?MODULE, seq, [1, M, fun(X) -> X+1 end]}),
+ ok = check_trace_info({?MODULE, seq, 3}, [{Pid, M, 0, 0}], T1),
+
+ N = erlang:trace_pattern({?MODULE,'_','_'}, true, [call_time]),
+ {L, T2} = execute(Pid, fun() -> seq(1, M, fun(X) -> X+1 end) end),
+ ok = check_trace_info({?MODULE, seq, 3}, [{Pid, M, 0, 0}], T2),
+
+ P = erlang:trace_pattern({'_','_','_'}, true, [call_time]),
+ {L, T3} = execute(Pid, fun() -> seq(1, M, fun(X) -> X+1 end) end),
+ ok = check_trace_info({?MODULE, seq, 3}, [{Pid, M, 0, 0}], T3),
+
+ 1 = erlang:trace_pattern({?MODULE,seq,'_'}, false, [call_time]),
+ ok = check_trace_info({?MODULE, seq, 3}, false, none),
+ {L, _T4} = execute(Pid, fun() -> seq(1, M, fun(X) -> X+1 end) end),
+ ok = check_trace_info({?MODULE, seq, 3}, false, none),
+ ok = check_trace_info({?MODULE, seq_r, 4}, [], none),
+ {Lr, T5} = execute(Pid, fun() -> seq_r(1, M, fun(X) -> X+1 end) end),
+ ok = check_trace_info({?MODULE, seq_r, 4}, [{Pid,M,0,0}], T5),
+
+ N = erlang:trace_pattern({?MODULE,'_','_'}, false, [call_time]),
+ ok = check_trace_info({?MODULE, seq_r, 4}, false, none),
+ {Lr, _T6} = execute(Pid, fun() -> seq_r(1, M, fun(X) -> X+1 end) end),
+ ok = check_trace_info({?MODULE, seq_r, 4}, false, none),
+ L = lists:reverse(Lr),
%%
- ?line Pid ! quit,
- ?line P = erlang:trace_pattern({'_','_','_'}, false, [call_time]),
+ Pid ! quit,
+ P = erlang:trace_pattern({'_','_','_'}, false, [call_time]),
ok.
%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-info(suite) ->
- [];
-info(doc) ->
- ["Tests the trace_info BIF"];
+%% Tests the trace_info BIF
info(Config) when is_list(Config) ->
- ?line P = erlang:trace_pattern({'_','_','_'}, false, [call_time]),
+ P = erlang:trace_pattern({'_','_','_'}, false, [call_time]),
%%
- ?line 1 = erlang:trace_pattern({?MODULE,seq,3}, true, [call_time]),
- ?line {call_time,[]} = erlang:trace_info({?MODULE,seq,3}, call_time),
- ?line 1 = erlang:trace_pattern({?MODULE,seq,'_'}, pause, [call_time]),
- ?line {call_time,[]} = erlang:trace_info({?MODULE,seq,3}, call_time),
- ?line {all,[_|_]=L} = erlang:trace_info({?MODULE,seq,3}, all),
- ?line {value,{call_time,[]}} = lists:keysearch(call_time, 1, L),
- ?line 1 = erlang:trace_pattern({?MODULE,seq,'_'}, restart, [call_time]),
- ?line {call_time,[]} = erlang:trace_info({?MODULE,seq,3}, call_time),
- ?line 1 = erlang:trace_pattern({?MODULE,seq,'_'}, false, [call_time]),
- ?line {call_time,false} = erlang:trace_info({?MODULE,seq,3}, call_time),
- ?line {all,false} = erlang:trace_info({?MODULE,seq,3}, all),
+ 1 = erlang:trace_pattern({?MODULE,seq,3}, true, [call_time]),
+ {call_time,[]} = erlang:trace_info({?MODULE,seq,3}, call_time),
+ 1 = erlang:trace_pattern({?MODULE,seq,'_'}, pause, [call_time]),
+ {call_time,[]} = erlang:trace_info({?MODULE,seq,3}, call_time),
+ {all,[_|_]=L} = erlang:trace_info({?MODULE,seq,3}, all),
+ {value,{call_time,[]}} = lists:keysearch(call_time, 1, L),
+ 1 = erlang:trace_pattern({?MODULE,seq,'_'}, restart, [call_time]),
+ {call_time,[]} = erlang:trace_info({?MODULE,seq,3}, call_time),
+ 1 = erlang:trace_pattern({?MODULE,seq,'_'}, false, [call_time]),
+ {call_time,false} = erlang:trace_info({?MODULE,seq,3}, call_time),
+ {all,false} = erlang:trace_info({?MODULE,seq,3}, all),
%%
- ?line P = erlang:trace_pattern({'_','_','_'}, false, [call_time]),
+ P = erlang:trace_pattern({'_','_','_'}, false, [call_time]),
ok.
%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-pause_and_restart(suite) ->
- [];
-pause_and_restart(doc) ->
- ["Tests pausing and restarting call time counters"];
+%% Tests pausing and restarting call time counters
pause_and_restart(Config) when is_list(Config) ->
- ?line P = erlang:trace_pattern({'_','_','_'}, false, [call_time]),
- ?line M = 100,
- ?line Pid = setup(),
+ P = erlang:trace_pattern({'_','_','_'}, false, [call_time]),
+ M = 100,
+ Pid = setup(),
%%
- ?line 1 = erlang:trace_pattern({?MODULE,seq,'_'}, true, [call_time]),
- ?line ok = check_trace_info({?MODULE, seq, 3}, [], none),
- ?line {L, T1} = execute(Pid, fun() -> seq(1, M, fun(X) -> X+1 end) end),
- ?line ok = check_trace_info({?MODULE, seq, 3}, [{Pid,M,0,0}], T1),
- ?line 1 = erlang:trace_pattern({?MODULE,seq,'_'}, pause, [call_time]),
- ?line ok = check_trace_info({?MODULE, seq, 3}, [{Pid,M,0,0}], T1),
- ?line {L, T2} = execute(Pid, fun() -> seq(1, M, fun(X) -> X+1 end) end),
- ?line ok = check_trace_info({?MODULE, seq, 3}, [{Pid,M,0,0}], T2),
- ?line 1 = erlang:trace_pattern({?MODULE,seq,'_'}, restart, [call_time]),
- ?line ok = check_trace_info({?MODULE, seq, 3}, [], none),
- ?line {L, T3} = execute(Pid, fun() -> seq(1, M, fun(X) -> X+1 end) end),
- ?line ok = check_trace_info({?MODULE, seq, 3}, [{Pid,M,0,0}], T3),
+ 1 = erlang:trace_pattern({?MODULE,seq,'_'}, true, [call_time]),
+ ok = check_trace_info({?MODULE, seq, 3}, [], none),
+ {L, T1} = execute(Pid, fun() -> seq(1, M, fun(X) -> X+1 end) end),
+ ok = check_trace_info({?MODULE, seq, 3}, [{Pid,M,0,0}], T1),
+ 1 = erlang:trace_pattern({?MODULE,seq,'_'}, pause, [call_time]),
+ ok = check_trace_info({?MODULE, seq, 3}, [{Pid,M,0,0}], T1),
+ {L, T2} = execute(Pid, fun() -> seq(1, M, fun(X) -> X+1 end) end),
+ ok = check_trace_info({?MODULE, seq, 3}, [{Pid,M,0,0}], T2),
+ 1 = erlang:trace_pattern({?MODULE,seq,'_'}, restart, [call_time]),
+ ok = check_trace_info({?MODULE, seq, 3}, [], none),
+ {L, T3} = execute(Pid, fun() -> seq(1, M, fun(X) -> X+1 end) end),
+ ok = check_trace_info({?MODULE, seq, 3}, [{Pid,M,0,0}], T3),
%%
- ?line Pid ! quit,
- ?line P = erlang:trace_pattern({'_','_','_'}, false, [call_time]),
+ Pid ! quit,
+ P = erlang:trace_pattern({'_','_','_'}, false, [call_time]),
ok.
%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-scheduling(suite) ->
- [];
-scheduling(doc) ->
- ["Tests in/out scheduling of call time counters"];
+%% Tests in/out scheduling of call time counters
scheduling(Config) when is_list(Config) ->
- ?line P = erlang:trace_pattern({'_','_','_'}, false, [call_time]),
- ?line M = 1000000,
- ?line Np = erlang:system_info(schedulers_online),
- ?line F = 12,
+ P = erlang:trace_pattern({'_','_','_'}, false, [call_time]),
+ M = 1000000,
+ Np = erlang:system_info(schedulers_online),
+ F = 12,
%% setup load processes
%% (single, no internal calls)
- ?line erlang:trace_pattern({?MODULE,loaded,1}, true, [call_time]),
+ erlang:trace_pattern({?MODULE,loaded,1}, true, [call_time]),
- ?line Pids = [setup() || _ <- lists:seq(1, F*Np)],
- ?line {_Ls,T1} = execute(Pids, {?MODULE,loaded,[M]}),
- ?line [Pid ! quit || Pid <- Pids],
+ Pids = [setup() || _ <- lists:seq(1, F*Np)],
+ {_Ls,T1} = execute(Pids, {?MODULE,loaded,[M]}),
+ [Pid ! quit || Pid <- Pids],
%% logic dictates that each process will get ~ 1/F of the schedulers time
- ?line {call_time, CT} = erlang:trace_info({?MODULE,loaded,1}, call_time),
-
- ?line lists:foreach(fun (Pid) ->
- ?line ok = case check_process_time(lists:keysearch(Pid, 1, CT), M, F, T1) of
- schedule_time_error ->
- test_server:comment("Warning: Failed time ratio"),
- ok;
- Other -> Other
- end
- end, Pids),
- ?line P = erlang:trace_pattern({'_','_','_'}, false, [call_time]),
+ {call_time, CT} = erlang:trace_info({?MODULE,loaded,1}, call_time),
+
+ lists:foreach(fun (Pid) ->
+ ok = case check_process_time(lists:keysearch(Pid, 1, CT), M, F, T1) of
+ schedule_time_error ->
+ test_server:comment("Warning: Failed time ratio"),
+ ok;
+ Other -> Other
+ end
+ end, Pids),
+ P = erlang:trace_pattern({'_','_','_'}, false, [call_time]),
ok.
%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-combo(suite) ->
- [];
-combo(doc) ->
- ["Tests combining local call trace and meta trace with call time trace"];
+%% "Tests combining local call trace and meta trace with call time trace
combo(Config) when is_list(Config) ->
- ?line Self = self(),
- ?line Nbc = 3,
- ?line MetaMs = [{'_',[],[{return_trace}]}],
- ?line Flags = lists:sort([call, return_to]),
- ?line LocalTracer = spawn_link(fun () -> relay_n(5 + Nbc + 3, Self) end),
- ?line MetaTracer = spawn_link(fun () -> relay_n(9 + Nbc + 3, Self) end),
- ?line 2 = erlang:trace_pattern({?MODULE,seq_r,'_'}, [], [local]),
- ?line 2 = erlang:trace_pattern({?MODULE,seq_r,'_'}, true, [call_time]),
- ?line 2 = erlang:trace_pattern({?MODULE,seq_r,'_'}, MetaMs, [{meta,MetaTracer}]),
- ?line 2 = erlang:trace_pattern({?MODULE,seq_r,'_'}, true, [call_count]),
+ Self = self(),
+ Nbc = 3,
+ MetaMs = [{'_',[],[{return_trace}]}],
+ Flags = lists:sort([call, return_to]),
+ LocalTracer = spawn_link(fun () -> relay_n(5 + Nbc + 3, Self) end),
+ MetaTracer = spawn_link(fun () -> relay_n(9 + Nbc + 3, Self) end),
+ 2 = erlang:trace_pattern({?MODULE,seq_r,'_'}, [], [local]),
+ 2 = erlang:trace_pattern({?MODULE,seq_r,'_'}, true, [call_time]),
+ 2 = erlang:trace_pattern({?MODULE,seq_r,'_'}, MetaMs, [{meta,MetaTracer}]),
+ 2 = erlang:trace_pattern({?MODULE,seq_r,'_'}, true, [call_count]),
% bifs
- ?line 2 = erlang:trace_pattern({erlang, term_to_binary, '_'}, [], [local]),
- ?line 2 = erlang:trace_pattern({erlang, term_to_binary, '_'}, true, [call_time]),
- ?line 2 = erlang:trace_pattern({erlang, term_to_binary, '_'}, MetaMs, [{meta,MetaTracer}]),
+ 2 = erlang:trace_pattern({erlang, term_to_binary, '_'}, [], [local]),
+ 2 = erlang:trace_pattern({erlang, term_to_binary, '_'}, true, [call_time]),
+ 2 = erlang:trace_pattern({erlang, term_to_binary, '_'}, MetaMs, [{meta,MetaTracer}]),
%% not implemented
- %?line 2 = erlang:trace_pattern({erlang, term_to_binary, '_'}, true, [call_count]),
+ %2 = erlang:trace_pattern({erlang, term_to_binary, '_'}, true, [call_count]),
- ?line 1 = erlang:trace(Self, true, [{tracer,LocalTracer} | Flags]),
+ 1 = erlang:trace(Self, true, [{tracer,LocalTracer} | Flags]),
%%
- ?line {traced,local} =
- erlang:trace_info({?MODULE,seq_r,3}, traced),
- ?line {match_spec,[]} =
- erlang:trace_info({?MODULE,seq_r,3}, match_spec),
- ?line {meta,MetaTracer} =
- erlang:trace_info({?MODULE,seq_r,3}, meta),
- ?line {meta_match_spec,MetaMs} =
- erlang:trace_info({?MODULE,seq_r,3}, meta_match_spec),
- ?line ok = check_trace_info({?MODULE, seq_r, 3}, [], none),
+ {traced,local} =
+ erlang:trace_info({?MODULE,seq_r,3}, traced),
+ {match_spec,[]} =
+ erlang:trace_info({?MODULE,seq_r,3}, match_spec),
+ {meta,MetaTracer} =
+ erlang:trace_info({?MODULE,seq_r,3}, meta),
+ {meta_match_spec,MetaMs} =
+ erlang:trace_info({?MODULE,seq_r,3}, meta_match_spec),
+ ok = check_trace_info({?MODULE, seq_r, 3}, [], none),
%% check empty trace_info for ?MODULE:seq_r/3
- ?line {all,[_|_]=TraceInfo} = erlang:trace_info({?MODULE,seq_r,3}, all),
- ?line {value,{traced,local}} = lists:keysearch(traced, 1, TraceInfo),
- ?line {value,{match_spec,[]}} = lists:keysearch(match_spec, 1, TraceInfo),
- ?line {value,{meta,MetaTracer}} = lists:keysearch(meta, 1, TraceInfo),
- ?line {value,{meta_match_spec,MetaMs}} = lists:keysearch(meta_match_spec, 1, TraceInfo),
- ?line {value,{call_count,0}} = lists:keysearch(call_count, 1, TraceInfo),
- ?line {value,{call_time,[]}} = lists:keysearch(call_time, 1, TraceInfo),
+ {all,[_|_]=TraceInfo} = erlang:trace_info({?MODULE,seq_r,3}, all),
+ {value,{traced,local}} = lists:keysearch(traced, 1, TraceInfo),
+ {value,{match_spec,[]}} = lists:keysearch(match_spec, 1, TraceInfo),
+ {value,{meta,MetaTracer}} = lists:keysearch(meta, 1, TraceInfo),
+ {value,{meta_match_spec,MetaMs}} = lists:keysearch(meta_match_spec, 1, TraceInfo),
+ {value,{call_count,0}} = lists:keysearch(call_count, 1, TraceInfo),
+ {value,{call_time,[]}} = lists:keysearch(call_time, 1, TraceInfo),
%% check empty trace_info for erlang:term_to_binary/1
- ?line {all, [_|_] = TraceInfoBif} = erlang:trace_info({erlang, term_to_binary, 1}, all),
- ?line {value,{traced,local}} = lists:keysearch(traced, 1, TraceInfoBif),
- ?line {value,{match_spec,[]}} = lists:keysearch(match_spec, 1, TraceInfoBif),
- ?line {value,{meta, MetaTracer}} = lists:keysearch(meta, 1, TraceInfoBif),
- ?line {value,{meta_match_spec,MetaMs}} = lists:keysearch(meta_match_spec, 1, TraceInfoBif),
+ {all, [_|_] = TraceInfoBif} = erlang:trace_info({erlang, term_to_binary, 1}, all),
+ {value,{traced,local}} = lists:keysearch(traced, 1, TraceInfoBif),
+ {value,{match_spec,[]}} = lists:keysearch(match_spec, 1, TraceInfoBif),
+ {value,{meta, MetaTracer}} = lists:keysearch(meta, 1, TraceInfoBif),
+ {value,{meta_match_spec,MetaMs}} = lists:keysearch(meta_match_spec, 1, TraceInfoBif),
%% not implemented
- ?line {value,{call_count,false}} = lists:keysearch(call_count, 1, TraceInfoBif),
- %?line {value,{call_count,0}} = lists:keysearch(call_count, 1, TraceInfoBif),
- ?line {value,{call_time,[]}} = lists:keysearch(call_time, 1, TraceInfoBif),
+ {value,{call_count,false}} = lists:keysearch(call_count, 1, TraceInfoBif),
+ %{value,{call_count,0}} = lists:keysearch(call_count, 1, TraceInfoBif),
+ {value,{call_time,[]}} = lists:keysearch(call_time, 1, TraceInfoBif),
%%
- ?line [3,2,1] = seq_r(1, 3, fun(X) -> X+1 end),
- ?line T0 = erlang:monotonic_time(),
- ?line with_bif(Nbc),
- ?line T1 = erlang:monotonic_time(),
- ?line TimeB = erlang:convert_time_unit(T1-T0, native, micro_seconds),
+ [3,2,1] = seq_r(1, 3, fun(X) -> X+1 end),
+ T0 = erlang:monotonic_time(),
+ with_bif(Nbc),
+ T1 = erlang:monotonic_time(),
+ TimeB = erlang:convert_time_unit(T1-T0, native, micro_seconds),
%%
- ?line List = collect(100),
- ?line {MetaR, LocalR} =
- lists:foldl(
- fun ({P,X}, {M,L}) when P == MetaTracer ->
- {[X|M],L};
- ({P,X}, {M,L}) when P == LocalTracer ->
- {M,[X|L]}
- end,
- {[],[]},
- List),
- ?line Meta = lists:reverse(MetaR),
- ?line Local = lists:reverse(LocalR),
-
- ?line [?CTT(Self,{?MODULE,seq_r,[1,3,_]}),
- ?CTT(Self,{?MODULE,seq_r,[1,3,_,[]]}),
- ?CTT(Self,{?MODULE,seq_r,[2,3,_,[1]]}),
- ?CTT(Self,{?MODULE,seq_r,[3,3,_,[2,1]]}),
- ?RFT(Self,{?MODULE,seq_r,4},[3,2,1]),
- ?RFT(Self,{?MODULE,seq_r,4},[3,2,1]),
- ?RFT(Self,{?MODULE,seq_r,4},[3,2,1]),
- ?RFT(Self,{?MODULE,seq_r,3},[3,2,1]),
- ?CTT(Self,{erlang,term_to_binary,[3]}), % bif
- ?RFT(Self,{erlang,term_to_binary,1},<<131,97,3>>),
- ?CTT(Self,{erlang,term_to_binary,[2]}),
- ?RFT(Self,{erlang,term_to_binary,1},<<131,97,2>>)
- ] = Meta,
-
- ?line [?CT(Self,{?MODULE,seq_r,[1,3,_]}),
- ?CT(Self,{?MODULE,seq_r,[1,3,_,[]]}),
- ?CT(Self,{?MODULE,seq_r,[2,3,_,[1]]}),
- ?CT(Self,{?MODULE,seq_r,[3,3,_,[2,1]]}),
- ?RT(Self,{?MODULE,combo,1}),
- ?CT(Self,{erlang,term_to_binary,[3]}), % bif
- ?RT(Self,{?MODULE,with_bif,1}),
- ?CT(Self,{erlang,term_to_binary,[2]}),
- ?RT(Self,{?MODULE,with_bif,1})
- ] = Local,
-
- ?line ok = check_trace_info({?MODULE, seq_r, 3}, [{Self,1,0,0}], 1),
- ?line ok = check_trace_info({?MODULE, seq_r, 4}, [{Self,3,0,0}], 1),
- ?line ok = check_trace_info({?MODULE, seq_r, 3}, [{Self,1,0,0}], 1),
- ?line ok = check_trace_info({?MODULE, seq_r, 4}, [{Self,3,0,0}], 1),
- ?line ok = check_trace_info({erlang, term_to_binary, 1}, [{self(), Nbc - 1, 0, 0}], TimeB),
+ List = collect(100),
+ {MetaR, LocalR} =
+ lists:foldl(
+ fun ({P,X}, {M,L}) when P == MetaTracer ->
+ {[X|M],L};
+ ({P,X}, {M,L}) when P == LocalTracer ->
+ {M,[X|L]}
+ end,
+ {[],[]},
+ List),
+ Meta = lists:reverse(MetaR),
+ Local = lists:reverse(LocalR),
+
+ [?CTT(Self,{?MODULE,seq_r,[1,3,_]}),
+ ?CTT(Self,{?MODULE,seq_r,[1,3,_,[]]}),
+ ?CTT(Self,{?MODULE,seq_r,[2,3,_,[1]]}),
+ ?CTT(Self,{?MODULE,seq_r,[3,3,_,[2,1]]}),
+ ?RFT(Self,{?MODULE,seq_r,4},[3,2,1]),
+ ?RFT(Self,{?MODULE,seq_r,4},[3,2,1]),
+ ?RFT(Self,{?MODULE,seq_r,4},[3,2,1]),
+ ?RFT(Self,{?MODULE,seq_r,3},[3,2,1]),
+ ?CTT(Self,{erlang,term_to_binary,[3]}), % bif
+ ?RFT(Self,{erlang,term_to_binary,1},<<131,97,3>>),
+ ?CTT(Self,{erlang,term_to_binary,[2]}),
+ ?RFT(Self,{erlang,term_to_binary,1},<<131,97,2>>)
+ ] = Meta,
+
+ [?CT(Self,{?MODULE,seq_r,[1,3,_]}),
+ ?CT(Self,{?MODULE,seq_r,[1,3,_,[]]}),
+ ?CT(Self,{?MODULE,seq_r,[2,3,_,[1]]}),
+ ?CT(Self,{?MODULE,seq_r,[3,3,_,[2,1]]}),
+ ?RT(Self,{?MODULE,combo,1}),
+ ?CT(Self,{erlang,term_to_binary,[3]}), % bif
+ ?RT(Self,{?MODULE,with_bif,1}),
+ ?CT(Self,{erlang,term_to_binary,[2]}),
+ ?RT(Self,{?MODULE,with_bif,1})
+ ] = Local,
+
+ ok = check_trace_info({?MODULE, seq_r, 3}, [{Self,1,0,0}], 1),
+ ok = check_trace_info({?MODULE, seq_r, 4}, [{Self,3,0,0}], 1),
+ ok = check_trace_info({?MODULE, seq_r, 3}, [{Self,1,0,0}], 1),
+ ok = check_trace_info({?MODULE, seq_r, 4}, [{Self,3,0,0}], 1),
+ ok = check_trace_info({erlang, term_to_binary, 1}, [{self(), Nbc - 1, 0, 0}], TimeB),
%%
- ?line erlang:trace_pattern({'_','_','_'}, false, [local,meta,call_time]),
- ?line erlang:trace_pattern(on_load, false, [local,meta,call_time]),
- ?line erlang:trace(all, false, [all]),
+ erlang:trace_pattern({'_','_','_'}, false, [local,meta,call_time]),
+ erlang:trace_pattern(on_load, false, [local,meta,call_time]),
+ erlang:trace(all, false, [all]),
ok.
%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-bif(suite) ->
- [];
-bif(doc) ->
- ["Tests tracing of bifs"];
+%% Tests tracing of bifs
bif(Config) when is_list(Config) ->
- ?line P = erlang:trace_pattern({'_','_','_'}, false, [call_time]),
- ?line M = 1000000,
+ P = erlang:trace_pattern({'_','_','_'}, false, [call_time]),
+ M = 1000000,
%%
- ?line 2 = erlang:trace_pattern({erlang, binary_to_term, '_'}, true, [call_time]),
- ?line 2 = erlang:trace_pattern({erlang, term_to_binary, '_'}, true, [call_time]),
- ?line Pid = setup(),
- ?line {L, T1} = execute(Pid, fun() -> with_bif(M) end),
+ 2 = erlang:trace_pattern({erlang, binary_to_term, '_'}, true, [call_time]),
+ 2 = erlang:trace_pattern({erlang, term_to_binary, '_'}, true, [call_time]),
+ Pid = setup(),
+ {L, T1} = execute(Pid, fun() -> with_bif(M) end),
- ?line ok = check_trace_info({erlang, binary_to_term, 1}, [{Pid, M - 1, 0, 0}], T1/2),
- ?line ok = check_trace_info({erlang, term_to_binary, 1}, [{Pid, M - 1, 0, 0}], T1/2),
+ ok = check_trace_info({erlang, binary_to_term, 1}, [{Pid, M - 1, 0, 0}], T1/2),
+ ok = check_trace_info({erlang, term_to_binary, 1}, [{Pid, M - 1, 0, 0}], T1/2),
% disable term2binary
- ?line 2 = erlang:trace_pattern({erlang, term_to_binary, '_'}, false, [call_time]),
+ 2 = erlang:trace_pattern({erlang, term_to_binary, '_'}, false, [call_time]),
- ?line {L, T2} = execute(Pid, fun() -> with_bif(M) end),
+ {L, T2} = execute(Pid, fun() -> with_bif(M) end),
- ?line ok = check_trace_info({erlang, binary_to_term, 1}, [{Pid, M*2 - 2, 0, 0}], T1/2 + T2),
- ?line ok = check_trace_info({erlang, term_to_binary, 1}, false, none),
+ ok = check_trace_info({erlang, binary_to_term, 1}, [{Pid, M*2 - 2, 0, 0}], T1/2 + T2),
+ ok = check_trace_info({erlang, term_to_binary, 1}, false, none),
%%
- ?line P = erlang:trace_pattern({'_','_','_'}, false, [call_time]),
- ?line Pid ! quit,
+ P = erlang:trace_pattern({'_','_','_'}, false, [call_time]),
+ Pid ! quit,
ok.
%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-nif(suite) ->
- [];
-nif(doc) ->
- ["Tests tracing of nifs"];
+%% Tests tracing of nifs
nif(Config) when is_list(Config) ->
load_nif(Config),
- ?line P = erlang:trace_pattern({'_','_','_'}, false, [call_time]),
- ?line M = 1000000,
+ P = erlang:trace_pattern({'_','_','_'}, false, [call_time]),
+ M = 1000000,
%%
- ?line 1 = erlang:trace_pattern({?MODULE, nif_dec, '_'}, true, [call_time]),
- ?line 1 = erlang:trace_pattern({?MODULE, with_nif, '_'}, true, [call_time]),
- ?line Pid = setup(),
- ?line {_, T1} = execute(Pid, fun() -> with_nif(M) end),
+ 1 = erlang:trace_pattern({?MODULE, nif_dec, '_'}, true, [call_time]),
+ 1 = erlang:trace_pattern({?MODULE, with_nif, '_'}, true, [call_time]),
+ Pid = setup(),
+ {_, T1} = execute(Pid, fun() -> with_nif(M) end),
% the nif is called M - 1 times, the last time the function with 'with_nif'
% returns ok and does not call the nif.
- ?line ok = check_trace_info({?MODULE, nif_dec, 1}, [{Pid, M-1, 0, 0}], T1/5*4),
- ?line ok = check_trace_info({?MODULE, with_nif, 1}, [{Pid, M, 0, 0}], T1/5),
+ ok = check_trace_info({?MODULE, nif_dec, 1}, [{Pid, M-1, 0, 0}], T1/5*4),
+ ok = check_trace_info({?MODULE, with_nif, 1}, [{Pid, M, 0, 0}], T1/5),
%%
- ?line P = erlang:trace_pattern({'_','_','_'}, false, [call_time]),
- ?line Pid ! quit,
+ P = erlang:trace_pattern({'_','_','_'}, false, [call_time]),
+ Pid ! quit,
ok.
%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-called_function(suite) ->
- [];
-called_function(doc) ->
- ["Tests combining nested function calls and that the time accumulates to the right function"];
+%% Tests combining nested function calls and that the time accumulates to the right function
called_function(Config) when is_list(Config) ->
- ?line P = erlang:trace_pattern({'_','_','_'}, false, [call_time]),
- ?line M = 2100,
- ?line Pid = setup(),
+ P = erlang:trace_pattern({'_','_','_'}, false, [call_time]),
+ M = 2100,
+ Pid = setup(),
%%
- ?line 1 = erlang:trace_pattern({?MODULE,a_function,'_'}, true, [call_time]),
- ?line {L, T1} = execute(Pid, {?MODULE, a_function, [M]}),
- ?line ok = check_trace_info({?MODULE, a_function, 1}, [{Pid, M, 0, 0}], T1),
+ 1 = erlang:trace_pattern({?MODULE,a_function,'_'}, true, [call_time]),
+ {L, T1} = execute(Pid, {?MODULE, a_function, [M]}),
+ ok = check_trace_info({?MODULE, a_function, 1}, [{Pid, M, 0, 0}], T1),
- ?line 1 = erlang:trace_pattern({?MODULE,a_called_function,'_'}, true, [call_time]),
- ?line {L, T2} = execute(Pid, {?MODULE, a_function, [M]}),
- ?line ok = check_trace_info({?MODULE, a_function, 1}, [{Pid, M+M, 0, 0}], T1 + M*?SINGLE_CALL_US_TIME),
- ?line ok = check_trace_info({?MODULE, a_called_function, 1}, [{Pid, M, 0, 0}], T2),
+ 1 = erlang:trace_pattern({?MODULE,a_called_function,'_'}, true, [call_time]),
+ {L, T2} = execute(Pid, {?MODULE, a_function, [M]}),
+ ok = check_trace_info({?MODULE, a_function, 1}, [{Pid, M+M, 0, 0}], T1 + M*?SINGLE_CALL_US_TIME),
+ ok = check_trace_info({?MODULE, a_called_function, 1}, [{Pid, M, 0, 0}], T2),
- ?line 1 = erlang:trace_pattern({?MODULE,dec,'_'}, true, [call_time]),
- ?line {L, T3} = execute(Pid, {?MODULE, a_function, [M]}),
- ?line ok = check_trace_info({?MODULE, a_function, 1}, [{Pid, M+M+M, 0, 0}], T1 + (M+M)*?SINGLE_CALL_US_TIME),
- ?line ok = check_trace_info({?MODULE, a_called_function, 1}, [{Pid, M+M, 0, 0}], T2 + M*?SINGLE_CALL_US_TIME ),
- ?line ok = check_trace_info({?MODULE, dec, 1}, [{Pid, M, 0, 0}], T3),
+ 1 = erlang:trace_pattern({?MODULE,dec,'_'}, true, [call_time]),
+ {L, T3} = execute(Pid, {?MODULE, a_function, [M]}),
+ ok = check_trace_info({?MODULE, a_function, 1}, [{Pid, M+M+M, 0, 0}], T1 + (M+M)*?SINGLE_CALL_US_TIME),
+ ok = check_trace_info({?MODULE, a_called_function, 1}, [{Pid, M+M, 0, 0}], T2 + M*?SINGLE_CALL_US_TIME ),
+ ok = check_trace_info({?MODULE, dec, 1}, [{Pid, M, 0, 0}], T3),
- ?line Pid ! quit,
- ?line P = erlang:trace_pattern({'_','_','_'}, false, [call_time]),
+ Pid ! quit,
+ P = erlang:trace_pattern({'_','_','_'}, false, [call_time]),
ok.
%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -482,8 +437,8 @@ dead_tracer(Config) when is_list(Config) ->
Ref = erlang:monitor(process, FirstTracer),
FirstTracer ! quit,
receive
- {'DOWN',Ref,process,FirstTracer,normal} ->
- ok
+ {'DOWN',Ref,process,FirstTracer,normal} ->
+ ok
end,
erlang:yield(),
@@ -513,26 +468,26 @@ dead_tracer(Config) when is_list(Config) ->
other_than_self(Info) ->
[{Pid,MFA} || {MFA,[{Pid,_,_,_}]} <- Info,
- Pid =/= self()].
+ Pid =/= self()].
tell_tracer(Tracer, Fun) ->
Tracer ! {execute,self(),Fun},
receive
- {Tracer,executed} ->
- ok
+ {Tracer,executed} ->
+ ok
end.
tracer() ->
spawn_link(fun Loop() ->
- receive
- quit ->
- ok;
- {execute,From,Fun} ->
- Fun(),
- From ! {self(),executed},
- Loop()
- end
- end).
+ receive
+ quit ->
+ ok;
+ {execute,From,Fun} ->
+ Fun(),
+ From ! {self(),executed},
+ Loop()
+ end
+ end).
turn_on_tracing(Pid) ->
_ = erlang:trace(Pid, true, [call,set_on_spawn]),
@@ -542,18 +497,18 @@ turn_on_tracing(Pid) ->
collect_all_info() ->
collect_all_info([{?MODULE,F,A} || {F,A} <- module_info(functions)] ++
- erlang:system_info(snifs)).
+ erlang:system_info(snifs)).
collect_all_info([MFA|T]) ->
CallTime = erlang:trace_info(MFA, call_time),
erlang:trace_pattern(MFA, restart, [call_time]),
case CallTime of
- {call_time,false} ->
- collect_all_info(T);
- {call_time,[]} ->
- collect_all_info(T);
- {call_time,[_|_]=List} ->
- [{MFA,List}|collect_all_info(T)]
+ {call_time,false} ->
+ collect_all_info(T);
+ {call_time,[]} ->
+ collect_all_info(T);
+ {call_time,[_|_]=List} ->
+ [{MFA,List}|collect_all_info(T)]
end;
collect_all_info([]) -> [].
@@ -566,8 +521,8 @@ collect_all_info([]) -> [].
%% Local helpers
load_nif(Config) ->
- ?line Path = ?config(data_dir, Config),
- ?line ok = erlang:load_nif(filename:join(Path,"trace_nif"), 0).
+ Path = proplists:get_value(data_dir, Config),
+ ok = erlang:load_nif(filename:join(Path,"trace_nif"), 0).
%% Stack recursive seq
@@ -614,39 +569,39 @@ seq_r(Start, Stop, Succ, R) ->
% Check call time tracing data and print mismatches
check_trace_info(Mfa, [{Pid, C,_,_}] = Expect, Time) ->
case erlang:trace_info(Mfa, call_time) of
- % Time tests are somewhat problematic. We want to know if Time (EXPECTED_TIME) and S*1000000 + Us (ACTUAL_TIME)
- % is the same.
- % If the ratio EXPECTED_TIME/ACTUAL_TIME is ~ 1 or if EXPECTED_TIME - ACTUAL_TIME is near zero, the test is ok.
- {call_time,[{Pid,C,S,Us}]} when S >= 0, Us >= 0, abs(1 - Time/(S*1000000 + Us)) < ?R_ERROR; abs(Time - S*1000000 - Us) < ?US_ERROR ->
- ok;
- {call_time,[{Pid,C,S,Us}]} ->
- Sum = S*1000000 + Us,
- io:format("Expected ~p -> {call_time, ~p (Time ~p us)}~n - got ~w s. ~w us. = ~w us. - ~w -> delta ~w (ratio ~.2f, should be 1.0)~n",
- [Mfa, Expect, Time, S, Us, Sum, Time, Sum - Time, Time/Sum]),
- time_error;
- Other ->
- io:format("Expected ~p -> {call_time, ~p (Time ~p us)}~n - got ~p~n", [ Mfa, Expect, Time, Other]),
- time_count_error
+ % Time tests are somewhat problematic. We want to know if Time (EXPECTED_TIME) and S*1000000 + Us (ACTUAL_TIME)
+ % is the same.
+ % If the ratio EXPECTED_TIME/ACTUAL_TIME is ~ 1 or if EXPECTED_TIME - ACTUAL_TIME is near zero, the test is ok.
+ {call_time,[{Pid,C,S,Us}]} when S >= 0, Us >= 0, abs(1 - Time/(S*1000000 + Us)) < ?R_ERROR; abs(Time - S*1000000 - Us) < ?US_ERROR ->
+ ok;
+ {call_time,[{Pid,C,S,Us}]} ->
+ Sum = S*1000000 + Us,
+ io:format("Expected ~p -> {call_time, ~p (Time ~p us)}~n - got ~w s. ~w us. = ~w us. - ~w -> delta ~w (ratio ~.2f, should be 1.0)~n",
+ [Mfa, Expect, Time, S, Us, Sum, Time, Sum - Time, Time/Sum]),
+ time_error;
+ Other ->
+ io:format("Expected ~p -> {call_time, ~p (Time ~p us)}~n - got ~p~n", [ Mfa, Expect, Time, Other]),
+ time_count_error
end;
check_trace_info(Mfa, Expect, _) ->
case erlang:trace_info(Mfa, call_time) of
- {call_time, Expect} ->
- ok;
- Other ->
- io:format("Expected ~p -> {call_time, ~p}~n - got ~p~n", [Mfa, Expect, Other]),
- result_not_expected_error
+ {call_time, Expect} ->
+ ok;
+ Other ->
+ io:format("Expected ~p -> {call_time, ~p}~n - got ~p~n", [Mfa, Expect, Other]),
+ result_not_expected_error
end.
%check process time
check_process_time({value,{Pid, M, S, Us}}, M, F, Time) ->
- ?line Sum = S*1000000 + Us,
+ Sum = S*1000000 + Us,
if
- abs(1 - (F/(Time/Sum))) < ?R_ERROR ->
- ok;
- true ->
- io:format("- Pid ~p, Got ratio ~.2f, expected ratio ~w~n", [Pid, Time/Sum,F]),
- schedule_time_error
+ abs(1 - (F/(Time/Sum))) < ?R_ERROR ->
+ ok;
+ true ->
+ io:format("- Pid ~p, Got ratio ~.2f, expected ratio ~w~n", [Pid, Time/Sum,F]),
+ schedule_time_error
end;
check_process_time(Other, M, _, _) ->
io:format(" - Got ~p, expected count ~w~n", [Other, M]),
@@ -659,8 +614,8 @@ relay_n(0, _) ->
ok;
relay_n(N, Dest) ->
receive Msg ->
- Dest ! {self(), Msg},
- relay_n(N-1, Dest)
+ Dest ! {self(), Msg},
+ relay_n(N-1, Dest)
end.
@@ -674,17 +629,17 @@ collect(Time) ->
collect(A, 0) ->
receive
- Mess ->
- collect([Mess | A], 0)
+ Mess ->
+ collect([Mess | A], 0)
after 0 ->
- A
+ A
end;
collect(A, Ref) ->
receive
- {timeout, Ref, done} ->
- collect(A, 0);
- Mess ->
- collect([Mess | A], Ref)
+ {timeout, Ref, done} ->
+ collect(A, 0);
+ Mess ->
+ collect([Mess | A], Ref)
end.
setup() ->
@@ -712,12 +667,12 @@ execute(P, Mfa) ->
loop() ->
receive
- quit ->
- ok;
- {Pid, execute, Fun } when is_function(Fun) ->
- Pid ! {self(), answer, erlang:apply(Fun, [])},
- loop();
- {Pid, execute, {M, F, A}} ->
- Pid ! {self(), answer, erlang:apply(M, F, A)},
- loop()
+ quit ->
+ ok;
+ {Pid, execute, Fun } when is_function(Fun) ->
+ Pid ! {self(), answer, erlang:apply(Fun, [])},
+ loop();
+ {Pid, execute, {M, F, A}} ->
+ Pid ! {self(), answer, erlang:apply(M, F, A)},
+ loop()
end.
diff --git a/erts/emulator/test/trace_local_SUITE.erl b/erts/emulator/test/trace_local_SUITE.erl
index 503a773545..74c05f24e0 100644
--- a/erts/emulator/test/trace_local_SUITE.erl
+++ b/erts/emulator/test/trace_local_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.
@@ -29,69 +29,44 @@
-export([exported/1, exported_wrap/1, loop/4, apply_slave_async/5,
match/2, clause/2, id/1, undef/1, lists_reverse/2]).
-%%
-%% Define to run outside of test server
-%%
-%% (rotten feature)
-%%
-%%-define(STANDALONE,1).
-
+
%%
%% Define for debug output
%%
%%-define(debug,1).
--ifdef(STANDALONE).
--define(config(A,B),config(A,B)).
--export([config/2]).
--define(DEFAULT_RECEIVE_TIMEOUT, 1000).
--else.
-include_lib("common_test/include/ct.hrl").
-define(DEFAULT_RECEIVE_TIMEOUT, infinity).
--endif.
-
+
-ifdef(debug).
--ifdef(STANDALONE).
--define(line, erlang:display({?MODULE,?LINE}), ).
--endif.
-define(dbgformat(A,B),io:format(A,B)).
-else.
--ifdef(STANDALONE).
--define(line, noop, ).
--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, basic/1, bit_syntax/1,
- return/1, on_and_off/1, systematic_on_off/1,
- stack_grow/1,info/1, delete/1,
- exception/1, exception_apply/1,
- exception_function/1, exception_apply_function/1,
- exception_nocatch/1, exception_nocatch_apply/1,
- exception_nocatch_function/1, exception_nocatch_apply_function/1,
- exception_meta/1, exception_meta_apply/1,
- exception_meta_function/1, exception_meta_apply_function/1,
- exception_meta_nocatch/1, exception_meta_nocatch_apply/1,
- exception_meta_nocatch_function/1,
- exception_meta_nocatch_apply_function/1,
- concurrency/1,
- init_per_testcase/2, end_per_testcase/2]).
+-export([all/0, suite/0,
+ basic/1, bit_syntax/1,
+ return/1, on_and_off/1, systematic_on_off/1,
+ stack_grow/1,info/1, delete/1,
+ exception/1, exception_apply/1,
+ exception_function/1, exception_apply_function/1,
+ exception_nocatch/1, exception_nocatch_apply/1,
+ exception_nocatch_function/1, exception_nocatch_apply_function/1,
+ exception_meta/1, exception_meta_apply/1,
+ exception_meta_function/1, exception_meta_apply_function/1,
+ exception_meta_nocatch/1, exception_meta_nocatch_apply/1,
+ exception_meta_nocatch_function/1,
+ exception_meta_nocatch_apply_function/1,
+ concurrency/1,
+ init_per_testcase/2, end_per_testcase/2]).
+
init_per_testcase(_Case, Config) ->
- ?line Dog=test_server:timetrap(test_server:minutes(2)),
- [{watchdog, Dog}|Config].
+ Config.
end_per_testcase(_Case, Config) ->
shutdown(),
- Dog=?config(watchdog, Config),
- test_server:timetrap_cancel(Dog),
%% Reloading the module will clear all trace patterns, and
%% in a debug-compiled emulator run assertions of the counters
@@ -99,168 +74,127 @@ end_per_testcase(_Case, Config) ->
c:l(?MODULE).
-
-
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap, {minutes, 2}}].
all() ->
case test_server:is_native(trace_local_SUITE) of
- true -> [not_run];
- false ->
- [basic, bit_syntax, return, on_and_off, systematic_on_off,
- stack_grow,
- info, delete, exception, exception_apply,
- exception_function, exception_apply_function,
- exception_nocatch, exception_nocatch_apply,
- exception_nocatch_function,
- exception_nocatch_apply_function, exception_meta,
- exception_meta_apply, exception_meta_function,
- exception_meta_apply_function, exception_meta_nocatch,
- exception_meta_nocatch_apply,
- exception_meta_nocatch_function,
- exception_meta_nocatch_apply_function,
- concurrency]
+ true -> [not_run];
+ false ->
+ [basic, bit_syntax, return, on_and_off, systematic_on_off,
+ stack_grow,
+ info, delete, exception, exception_apply,
+ exception_function, exception_apply_function,
+ exception_nocatch, exception_nocatch_apply,
+ exception_nocatch_function,
+ exception_nocatch_apply_function, exception_meta,
+ exception_meta_apply, exception_meta_function,
+ exception_meta_apply_function, exception_meta_nocatch,
+ exception_meta_nocatch_apply,
+ exception_meta_nocatch_function,
+ exception_meta_nocatch_apply_function,
+ concurrency]
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(doc) ->
- ["Tests basic local call-trace"];
+%% Tests basic local call-trace
basic(Config) when is_list(Config) ->
basic_test().
-bit_syntax(doc) ->
- "OTP-7399: Make sure that code that uses the optimized bit syntax matching "
- "can be traced without crashing the emulator.";
+%% OTP-7399: Make sure that code that uses the optimized bit syntax matching
+%% can be traced without crashing the emulator.
bit_syntax(Config) when is_list(Config) ->
bit_syntax_test().
-return(doc) ->
- ["Tests the different types of return trace"];
+%% Tests the different types of return trace
return(Config) when is_list(Config) ->
return_test().
-
-on_and_off(doc) ->
- ["Tests turning trace parameters on and off, "
- "both for trace and trace_pattern"];
+
+%% Tests turning trace parameters on and off,
+%% both for trace and trace_pattern
on_and_off(Config) when is_list(Config) ->
on_and_off_test().
-
-stack_grow(doc) ->
- ["Tests the stack growth during return traces"];
+
+%% Tests the stack growth during return traces
stack_grow(Config) when is_list(Config) ->
stack_grow_test().
-
-info(doc) ->
- ["Tests the trace_info BIF"];
+
+%% Tests the trace_info BIF
info(Config) when is_list(Config) ->
info_test().
-
-delete(doc) ->
- ["Tests putting trace on deleted modules"];
+
+%% Tests putting trace on deleted modules
delete(Config) when is_list(Config) ->
delete_test(Config).
-exception(doc) ->
- ["Tests exception_trace"];
+%% Tests exception_trace
exception(Config) when is_list(Config) ->
exception_test([]).
-exception_apply(doc) ->
- ["Tests exception_trace"];
+%% Tests exception_trace
exception_apply(Config) when is_list(Config) ->
exception_test([apply]).
-exception_function(doc) ->
- ["Tests exception_trace"];
+%% Tests exception_trace
exception_function(Config) when is_list(Config) ->
exception_test([function]).
-exception_apply_function(doc) ->
- ["Tests exception_trace"];
+%% Tests exception_trace
exception_apply_function(Config) when is_list(Config) ->
exception_test([apply,function]).
-exception_nocatch(doc) ->
- ["Tests exception_trace"];
+%% Tests exception_trace
exception_nocatch(Config) when is_list(Config) ->
exception_test([nocatch]).
-exception_nocatch_apply(doc) ->
- ["Tests exception_trace"];
+%% Tests exception_trace
exception_nocatch_apply(Config) when is_list(Config) ->
exception_test([nocatch,apply]).
-exception_nocatch_function(doc) ->
- ["Tests exception_trace"];
+%% Tests exception_trace
exception_nocatch_function(Config) when is_list(Config) ->
exception_test([nocatch,function]).
-exception_nocatch_apply_function(doc) ->
- ["Tests exception_trace"];
+%% Tests exception_trace
exception_nocatch_apply_function(Config) when is_list(Config) ->
exception_test([nocatch,apply,function]).
-exception_meta(doc) ->
- ["Tests meta exception_trace"];
+%% Tests meta exception_trace
exception_meta(Config) when is_list(Config) ->
exception_test([meta]).
-exception_meta_apply(doc) ->
- ["Tests meta exception_trace"];
+%% Tests meta exception_trace
exception_meta_apply(Config) when is_list(Config) ->
exception_test([meta,apply]).
-exception_meta_function(doc) ->
- ["Tests meta exception_trace"];
+%% Tests meta exception_trace
exception_meta_function(Config) when is_list(Config) ->
exception_test([meta,function]).
-exception_meta_apply_function(doc) ->
- ["Tests meta exception_trace"];
+%% Tests meta exception_trace
exception_meta_apply_function(Config) when is_list(Config) ->
exception_test([meta,apply,function]).
-exception_meta_nocatch(doc) ->
- ["Tests meta exception_trace"];
+%% Tests meta exception_trace
exception_meta_nocatch(Config) when is_list(Config) ->
exception_test([meta,nocatch]).
-exception_meta_nocatch_apply(doc) ->
- ["Tests meta exception_trace"];
+%% Tests meta exception_trace
exception_meta_nocatch_apply(Config) when is_list(Config) ->
exception_test([meta,nocatch,apply]).
-exception_meta_nocatch_function(doc) ->
- ["Tests meta exception_trace"];
+%% Tests meta exception_trace
exception_meta_nocatch_function(Config) when is_list(Config) ->
exception_test([meta,nocatch,function]).
-exception_meta_nocatch_apply_function(doc) ->
- ["Tests meta exception_trace"];
+%% Tests meta exception_trace
exception_meta_nocatch_apply_function(Config) when is_list(Config) ->
exception_test([meta,nocatch,apply,function]).
--endif.
-
-
%%% Message patterns and expect functions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -309,28 +243,28 @@ expect_pid(Pid, Msg) when is_tuple(Msg) ->
same(Msg, expect_receive(Pid));
expect_pid(Pid, Fun) when is_function(Fun, 1) ->
case Fun(expect_receive(Pid)) of
- next ->
- expect_pid(Pid, Fun);
- done ->
- ok;
- Other ->
- expect_pid(Pid, Other)
+ next ->
+ expect_pid(Pid, Fun);
+ done ->
+ ok;
+ Other ->
+ expect_pid(Pid, Other)
end.
expect_receive(Pid) when is_pid(Pid) ->
receive
- Msg when is_tuple(Msg),
- element(1, Msg) == trace,
- element(2, Msg) =/= Pid;
- %%
- is_tuple(Msg),
- element(1, Msg) == trace_ts,
- element(2, Msg) =/= Pid ->
- expect_receive(Pid);
- Msg ->
- expect_msg(Pid, Msg)
+ Msg when is_tuple(Msg),
+ element(1, Msg) == trace,
+ element(2, Msg) =/= Pid;
+ %%
+ is_tuple(Msg),
+ element(1, Msg) == trace_ts,
+ element(2, Msg) =/= Pid ->
+ expect_receive(Pid);
+ Msg ->
+ expect_msg(Pid, Msg)
after 100 ->
- {nm}
+ {nm}
end.
expect_msg(P, ?pCT(P,M,F,Args)) -> {ct,{M,F},Args};
@@ -343,18 +277,18 @@ expect_msg(P, ?pRT(P,M,F,Arity)) -> {rt,{M,F,Arity}};
expect_msg(P, ?pRTT(P,M,F,Arity)) -> {rtt,{M,F,Arity}};
expect_msg(P, Msg) when is_tuple(Msg) ->
case tuple_to_list(Msg) of
- [trace,P|T] ->
- list_to_tuple([trace|T]);
- [trace_ts,P|[_|_]=T] ->
- list_to_tuple([trace_ts|reverse(tl(reverse(T)))]);
- _ ->
- Msg
+ [trace,P|T] ->
+ list_to_tuple([trace|T]);
+ [trace_ts,P|[_|_]=T] ->
+ list_to_tuple([trace_ts|reverse(tl(reverse(T)))]);
+ _ ->
+ Msg
end.
same(A, B) ->
case [A|B] of
- [X|X] ->
- ok
+ [X|X] ->
+ ok
end.
@@ -362,73 +296,73 @@ same(A, B) ->
%%% tests %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
basic_test() ->
- ?line setup([call]),
+ setup([call]),
NumMatches = erlang:trace_pattern({?MODULE,'_','_'},[],[local]),
NumMatches = erlang:trace_pattern({?MODULE,'_','_'},[],[local]),
- ?line erlang:trace_pattern({?MODULE,slave,'_'},false,[local]),
- ?line [1,1,1,1] = apply_slave(?MODULE,exported_wrap,[1]),
- ?line ?CT(?MODULE,exported_wrap,[1]),
- ?line ?CT(?MODULE,exported,[1]),
- ?line ?CT(?MODULE,local,[1]),
- ?line ?CT(?MODULE,local2,[1]),
- ?line ?CT(?MODULE,local_tail,[1]),
- ?line erlang:trace_pattern({?MODULE,'_','_'},[],[]),
- ?line erlang:trace_pattern({?MODULE,slave,'_'},false,[local]),
- ?line [1,1,1,1] = apply_slave(?MODULE,exported_wrap,[1]),
- ?line ?CT(?MODULE,exported_wrap,[1]),
- ?line [1,1,1,1] = lambda_slave(fun() ->
- exported_wrap(1)
- end),
- ?line ?NM,
- ?line erlang:trace_pattern({?MODULE,'_','_'},[],[local]),
- ?line erlang:trace_pattern({?MODULE,slave,'_'},false,[local]),
- ?line [1,1,1,1] = lambda_slave(fun() ->
- exported_wrap(1)
- end),
- ?line ?CT(?MODULE,_,_), %% The fun
- ?line ?CT(?MODULE,exported_wrap,[1]),
- ?line ?CT(?MODULE,exported,[1]),
- ?line ?CT(?MODULE,local,[1]),
- ?line ?CT(?MODULE,local2,[1]),
- ?line ?CT(?MODULE,local_tail,[1]),
- ?line erlang:trace_pattern({?MODULE,'_','_'},false,[local]),
- ?line shutdown(),
- ?line ?NM,
+ erlang:trace_pattern({?MODULE,slave,'_'},false,[local]),
+ [1,1,1,1] = apply_slave(?MODULE,exported_wrap,[1]),
+ ?CT(?MODULE,exported_wrap,[1]),
+ ?CT(?MODULE,exported,[1]),
+ ?CT(?MODULE,local,[1]),
+ ?CT(?MODULE,local2,[1]),
+ ?CT(?MODULE,local_tail,[1]),
+ erlang:trace_pattern({?MODULE,'_','_'},[],[]),
+ erlang:trace_pattern({?MODULE,slave,'_'},false,[local]),
+ [1,1,1,1] = apply_slave(?MODULE,exported_wrap,[1]),
+ ?CT(?MODULE,exported_wrap,[1]),
+ [1,1,1,1] = lambda_slave(fun() ->
+ exported_wrap(1)
+ end),
+ ?NM,
+ erlang:trace_pattern({?MODULE,'_','_'},[],[local]),
+ erlang:trace_pattern({?MODULE,slave,'_'},false,[local]),
+ [1,1,1,1] = lambda_slave(fun() ->
+ exported_wrap(1)
+ end),
+ ?CT(?MODULE,_,_), %% The fun
+ ?CT(?MODULE,exported_wrap,[1]),
+ ?CT(?MODULE,exported,[1]),
+ ?CT(?MODULE,local,[1]),
+ ?CT(?MODULE,local2,[1]),
+ ?CT(?MODULE,local_tail,[1]),
+ erlang:trace_pattern({?MODULE,'_','_'},false,[local]),
+ shutdown(),
+ ?NM,
ok.
%% OTP-7399.
bit_syntax_test() ->
- ?line setup([call]),
- ?line erlang:trace_pattern({?MODULE,'_','_'},[],[local]),
- ?line erlang:trace_pattern({?MODULE,slave,'_'},false,[local]),
-
- ?line lambda_slave(fun() ->
- 6 = bs_sum_a(<<1,2,3>>, 0),
- 10 = bs_sum_b(0, <<1,2,3,4>>),
- 26 = bs_sum_c(<<3:4,5:4,7:4,11:4>>, 0)
- end),
- ?line ?CT(?MODULE,_,[]), %Ignore call to the fun.
-
- ?line ?CT(?MODULE,bs_sum_a,[<<1,2,3>>,0]),
- ?line ?CT(?MODULE,bs_sum_a,[<<2,3>>,1]),
- ?line ?CT(?MODULE,bs_sum_a,[<<3>>,3]),
- ?line ?CT(?MODULE,bs_sum_a,[<<>>,6]),
-
- ?line ?CT(?MODULE,bs_sum_b,[0,<<1,2,3,4>>]),
- ?line ?CT(?MODULE,bs_sum_b,[1,<<2,3,4>>]),
- ?line ?CT(?MODULE,bs_sum_b,[3,<<3,4>>]),
- ?line ?CT(?MODULE,bs_sum_b,[6,<<4>>]),
- ?line ?CT(?MODULE,bs_sum_b,[10,<<>>]),
-
- ?line ?CT(?MODULE,bs_sum_c,[<<3:4,5:4,7:4,11:4>>, 0]),
- ?line ?CT(?MODULE,bs_sum_c,[<<5:4,7:4,11:4>>, 3]),
- ?line ?CT(?MODULE,bs_sum_c,[<<7:4,11:4>>, 8]),
- ?line ?CT(?MODULE,bs_sum_c,[<<11:4>>, 15]),
- ?line ?CT(?MODULE,bs_sum_c,[<<>>, 26]),
-
- ?line erlang:trace_pattern({?MODULE,'_','_'},false,[local]),
- ?line shutdown(),
- ?line ?NM,
+ setup([call]),
+ erlang:trace_pattern({?MODULE,'_','_'},[],[local]),
+ erlang:trace_pattern({?MODULE,slave,'_'},false,[local]),
+
+ lambda_slave(fun() ->
+ 6 = bs_sum_a(<<1,2,3>>, 0),
+ 10 = bs_sum_b(0, <<1,2,3,4>>),
+ 26 = bs_sum_c(<<3:4,5:4,7:4,11:4>>, 0)
+ end),
+ ?CT(?MODULE,_,[]), %Ignore call to the fun.
+
+ ?CT(?MODULE,bs_sum_a,[<<1,2,3>>,0]),
+ ?CT(?MODULE,bs_sum_a,[<<2,3>>,1]),
+ ?CT(?MODULE,bs_sum_a,[<<3>>,3]),
+ ?CT(?MODULE,bs_sum_a,[<<>>,6]),
+
+ ?CT(?MODULE,bs_sum_b,[0,<<1,2,3,4>>]),
+ ?CT(?MODULE,bs_sum_b,[1,<<2,3,4>>]),
+ ?CT(?MODULE,bs_sum_b,[3,<<3,4>>]),
+ ?CT(?MODULE,bs_sum_b,[6,<<4>>]),
+ ?CT(?MODULE,bs_sum_b,[10,<<>>]),
+
+ ?CT(?MODULE,bs_sum_c,[<<3:4,5:4,7:4,11:4>>, 0]),
+ ?CT(?MODULE,bs_sum_c,[<<5:4,7:4,11:4>>, 3]),
+ ?CT(?MODULE,bs_sum_c,[<<7:4,11:4>>, 8]),
+ ?CT(?MODULE,bs_sum_c,[<<11:4>>, 15]),
+ ?CT(?MODULE,bs_sum_c,[<<>>, 26]),
+
+ erlang:trace_pattern({?MODULE,'_','_'},false,[local]),
+ shutdown(),
+ ?NM,
ok.
@@ -442,149 +376,149 @@ bs_sum_c(<<H:4,T/bits>>, Acc) -> bs_sum_c(T, H+Acc);
bs_sum_c(<<>>, Acc) -> Acc.
return_test() ->
- ?line setup([call]),
- ?line erlang:trace_pattern({?MODULE,'_','_'},[{'_',[],[{return_trace}]}],
- [local]),
- ?line erlang:trace_pattern({erlang,hash,'_'},[{'_',[],[{return_trace}]}],
- [local]),
- ?line erlang:trace_pattern({?MODULE,slave,'_'},false,[local]),
- ?line [1,1,1,1] = apply_slave(?MODULE,exported_wrap,[1]),
- ?line ?CT(?MODULE,exported_wrap,[1]),
- ?line ?CT(?MODULE,exported,[1]),
- ?line ?CT(?MODULE,local,[1]),
- ?line ?CT(?MODULE,local2,[1]),
- ?line ?CT(?MODULE,local_tail,[1]),
- ?line ?CT(erlang,hash,[1,1]),
- ?line ?RF(erlang,hash,2,1),
- ?line ?RF(?MODULE,local_tail,1,[1,1]),
- ?line ?RF(?MODULE,local2,1,[1,1]),
- ?line ?RF(?MODULE,local,1,[1,1,1]),
- ?line ?RF(?MODULE,exported,1,[1,1,1,1]),
- ?line ?RF(?MODULE,exported_wrap,1,[1,1,1,1]),
- ?line shutdown(),
- ?line setup([call,return_to]),
- ?line erlang:trace_pattern({?MODULE,'_','_'},[],
- [local]),
- ?line erlang:trace_pattern({erlang,hash,'_'},[],
- [local]),
- ?line erlang:trace_pattern({?MODULE,slave,'_'},false,[local]),
- ?line [1,1,1,1] = apply_slave(?MODULE,exported_wrap,[1]),
- ?line ?CT(?MODULE,exported_wrap,[1]),
- ?line ?CT(?MODULE,exported,[1]),
- ?line ?CT(?MODULE,local,[1]),
- ?line ?CT(?MODULE,local2,[1]),
- ?line ?CT(?MODULE,local_tail,[1]),
- ?line ?CT(erlang,hash,[1,1]),
- ?line ?RT(?MODULE,local_tail,1),
- ?line ?RT(?MODULE,local,1),
- ?line ?RT(?MODULE,exported,1),
- ?line ?RT(?MODULE,slave,2),
- ?line shutdown(),
- ?line setup([call,return_to]),
- ?line erlang:trace_pattern({?MODULE,'_','_'},[{'_',[],[{return_trace}]}],
- [local]),
- ?line erlang:trace_pattern({erlang,hash,'_'},[{'_',[],[{return_trace}]}],
- [local]),
- ?line erlang:trace_pattern({?MODULE,slave,'_'},false,[local]),
- ?line [1,1,1,1] = apply_slave(?MODULE,exported_wrap,[1]),
- ?line ?CT(?MODULE,exported_wrap,[1]),
- ?line ?CT(?MODULE,exported,[1]),
- ?line ?CT(?MODULE,local,[1]),
- ?line ?CT(?MODULE,local2,[1]),
- ?line ?CT(?MODULE,local_tail,[1]),
- ?line ?CT(erlang,hash,[1,1]),
- ?line ?RF(erlang,hash,2,1),
- ?line ?RT(?MODULE,local_tail,1),
- ?line ?RF(?MODULE,local_tail,1,[1,1]),
- ?line ?RF(?MODULE,local2,1,[1,1]),
- ?line ?RT(?MODULE,local,1),
- ?line ?RF(?MODULE,local,1,[1,1,1]),
- ?line ?RT(?MODULE,exported,1),
- ?line ?RF(?MODULE,exported,1,[1,1,1,1]),
- ?line ?RF(?MODULE,exported_wrap,1,[1,1,1,1]),
- ?line ?RT(?MODULE,slave,2),
- ?line shutdown(),
- ?line ?NM,
+ setup([call]),
+ erlang:trace_pattern({?MODULE,'_','_'},[{'_',[],[{return_trace}]}],
+ [local]),
+ erlang:trace_pattern({erlang,hash,'_'},[{'_',[],[{return_trace}]}],
+ [local]),
+ erlang:trace_pattern({?MODULE,slave,'_'},false,[local]),
+ [1,1,1,1] = apply_slave(?MODULE,exported_wrap,[1]),
+ ?CT(?MODULE,exported_wrap,[1]),
+ ?CT(?MODULE,exported,[1]),
+ ?CT(?MODULE,local,[1]),
+ ?CT(?MODULE,local2,[1]),
+ ?CT(?MODULE,local_tail,[1]),
+ ?CT(erlang,hash,[1,1]),
+ ?RF(erlang,hash,2,1),
+ ?RF(?MODULE,local_tail,1,[1,1]),
+ ?RF(?MODULE,local2,1,[1,1]),
+ ?RF(?MODULE,local,1,[1,1,1]),
+ ?RF(?MODULE,exported,1,[1,1,1,1]),
+ ?RF(?MODULE,exported_wrap,1,[1,1,1,1]),
+ shutdown(),
+ setup([call,return_to]),
+ erlang:trace_pattern({?MODULE,'_','_'},[],
+ [local]),
+ erlang:trace_pattern({erlang,hash,'_'},[],
+ [local]),
+ erlang:trace_pattern({?MODULE,slave,'_'},false,[local]),
+ [1,1,1,1] = apply_slave(?MODULE,exported_wrap,[1]),
+ ?CT(?MODULE,exported_wrap,[1]),
+ ?CT(?MODULE,exported,[1]),
+ ?CT(?MODULE,local,[1]),
+ ?CT(?MODULE,local2,[1]),
+ ?CT(?MODULE,local_tail,[1]),
+ ?CT(erlang,hash,[1,1]),
+ ?RT(?MODULE,local_tail,1),
+ ?RT(?MODULE,local,1),
+ ?RT(?MODULE,exported,1),
+ ?RT(?MODULE,slave,2),
+ shutdown(),
+ setup([call,return_to]),
+ erlang:trace_pattern({?MODULE,'_','_'},[{'_',[],[{return_trace}]}],
+ [local]),
+ erlang:trace_pattern({erlang,hash,'_'},[{'_',[],[{return_trace}]}],
+ [local]),
+ erlang:trace_pattern({?MODULE,slave,'_'},false,[local]),
+ [1,1,1,1] = apply_slave(?MODULE,exported_wrap,[1]),
+ ?CT(?MODULE,exported_wrap,[1]),
+ ?CT(?MODULE,exported,[1]),
+ ?CT(?MODULE,local,[1]),
+ ?CT(?MODULE,local2,[1]),
+ ?CT(?MODULE,local_tail,[1]),
+ ?CT(erlang,hash,[1,1]),
+ ?RF(erlang,hash,2,1),
+ ?RT(?MODULE,local_tail,1),
+ ?RF(?MODULE,local_tail,1,[1,1]),
+ ?RF(?MODULE,local2,1,[1,1]),
+ ?RT(?MODULE,local,1),
+ ?RF(?MODULE,local,1,[1,1,1]),
+ ?RT(?MODULE,exported,1),
+ ?RF(?MODULE,exported,1,[1,1,1,1]),
+ ?RF(?MODULE,exported_wrap,1,[1,1,1,1]),
+ ?RT(?MODULE,slave,2),
+ shutdown(),
+ ?NM,
ok.
on_and_off_test() ->
- ?line Pid = setup([call]),
- ?line 1 = erlang:trace_pattern({?MODULE,local_tail,1},[],[local]),
- ?line erlang:trace_pattern({?MODULE,slave,'_'},false,[local]),
- ?line LocalTail = fun() ->
- local_tail(1)
- end,
- ?line [1,1] = lambda_slave(LocalTail),
- ?line ?CT(?MODULE,local_tail,[1]),
- ?line erlang:trace(Pid,true,[return_to]),
- ?line [1,1] = lambda_slave(LocalTail),
- ?line ?CT(?MODULE,local_tail,[1]),
- ?line ?RT(?MODULE,_,_),
- ?line 0 = erlang:trace_pattern({?MODULE,local_tail,1},[],[global]),
- ?line [1,1] = lambda_slave(LocalTail),
- ?line ?NM,
- ?line 1 = erlang:trace_pattern({?MODULE,exported_wrap,1},[],[global]),
- ?line [1,1,1,1] = apply_slave(?MODULE,exported_wrap,[1]),
- ?line ?CT(?MODULE,exported_wrap,[1]),
- ?line 1 = erlang:trace_pattern({?MODULE,exported_wrap,1},[],[local]),
- ?line [1,1,1,1] = apply_slave(?MODULE,exported_wrap,[1]),
- ?line ?CT(?MODULE,exported_wrap,[1]),
- ?line ?RT(?MODULE,slave,2),
- ?line 1 = erlang:trace_pattern({erlang,hash,2},[],[local]),
- ?line [1,1,1,1] = apply_slave(?MODULE,exported_wrap,[1]),
- ?line ?CT(?MODULE,exported_wrap,[1]),
- ?line ?CT(erlang,hash,[1,1]),
- ?line ?RT(?MODULE,local_tail,1),
- ?line ?RT(?MODULE,slave,2),
- ?line erlang:trace(Pid,true,[timestamp]),
- ?line [1,1,1,1] = apply_slave(?MODULE,exported_wrap,[1]),
- ?line ?CTT(?MODULE,exported_wrap,[1]),
- ?line ?CTT(erlang,hash,[1,1]),
- ?line ?RTT(?MODULE,local_tail,1),
- ?line ?RTT(?MODULE,slave,2),
- ?line erlang:trace(Pid,false,[return_to,timestamp]),
- ?line [1,1,1,1] = apply_slave(?MODULE,exported_wrap,[1]),
- ?line ?CT(?MODULE,exported_wrap,[1]),
- ?line ?CT(erlang,hash,[1,1]),
- ?line erlang:trace(Pid,true,[return_to]),
- ?line 1 = erlang:trace_pattern({erlang,hash,2},[],[]),
- ?line [1,1,1,1] = apply_slave(?MODULE,exported_wrap,[1]),
- ?line ?CT(?MODULE,exported_wrap,[1]),
- ?line ?CT(erlang,hash,[1,1]),
- ?line ?RT(?MODULE,slave,2),
- ?line 1 = erlang:trace_pattern({?MODULE,exported_wrap,1},[],[]),
- ?line [1,1,1,1] = apply_slave(?MODULE,exported_wrap,[1]),
- ?line ?CT(?MODULE,exported_wrap,[1]),
- ?line ?CT(erlang,hash,[1,1]),
- ?line shutdown(),
- ?line erlang:trace_pattern({'_','_','_'},false,[local]),
- ?line N = erlang:trace_pattern({erlang,'_','_'},true,[local]),
- ?line case erlang:trace_pattern({erlang,'_','_'},false,[local]) of
- N ->
- ok;
- Else ->
- exit({number_mismatch, {expected, N}, {got, Else}})
- end,
- ?line case erlang:trace_pattern({erlang,'_','_'},false,[local]) of
- N ->
- ok;
- Else2 ->
- exit({number_mismatch, {expected, N}, {got, Else2}})
- end,
- ?line M = erlang:trace_pattern({erlang,'_','_'},true,[]),
- ?line case erlang:trace_pattern({erlang,'_','_'},false,[]) of
- M ->
- ok;
- Else3 ->
- exit({number_mismatch, {expected, N}, {got, Else3}})
- end,
- ?line case erlang:trace_pattern({erlang,'_','_'},false,[]) of
- M ->
- ok;
- Else4 ->
- exit({number_mismatch, {expected, N}, {got, Else4}})
- end,
- ?line ?NM,
+ Pid = setup([call]),
+ 1 = erlang:trace_pattern({?MODULE,local_tail,1},[],[local]),
+ erlang:trace_pattern({?MODULE,slave,'_'},false,[local]),
+ LocalTail = fun() ->
+ local_tail(1)
+ end,
+ [1,1] = lambda_slave(LocalTail),
+ ?CT(?MODULE,local_tail,[1]),
+ erlang:trace(Pid,true,[return_to]),
+ [1,1] = lambda_slave(LocalTail),
+ ?CT(?MODULE,local_tail,[1]),
+ ?RT(?MODULE,_,_),
+ 0 = erlang:trace_pattern({?MODULE,local_tail,1},[],[global]),
+ [1,1] = lambda_slave(LocalTail),
+ ?NM,
+ 1 = erlang:trace_pattern({?MODULE,exported_wrap,1},[],[global]),
+ [1,1,1,1] = apply_slave(?MODULE,exported_wrap,[1]),
+ ?CT(?MODULE,exported_wrap,[1]),
+ 1 = erlang:trace_pattern({?MODULE,exported_wrap,1},[],[local]),
+ [1,1,1,1] = apply_slave(?MODULE,exported_wrap,[1]),
+ ?CT(?MODULE,exported_wrap,[1]),
+ ?RT(?MODULE,slave,2),
+ 1 = erlang:trace_pattern({erlang,hash,2},[],[local]),
+ [1,1,1,1] = apply_slave(?MODULE,exported_wrap,[1]),
+ ?CT(?MODULE,exported_wrap,[1]),
+ ?CT(erlang,hash,[1,1]),
+ ?RT(?MODULE,local_tail,1),
+ ?RT(?MODULE,slave,2),
+ erlang:trace(Pid,true,[timestamp]),
+ [1,1,1,1] = apply_slave(?MODULE,exported_wrap,[1]),
+ ?CTT(?MODULE,exported_wrap,[1]),
+ ?CTT(erlang,hash,[1,1]),
+ ?RTT(?MODULE,local_tail,1),
+ ?RTT(?MODULE,slave,2),
+ erlang:trace(Pid,false,[return_to,timestamp]),
+ [1,1,1,1] = apply_slave(?MODULE,exported_wrap,[1]),
+ ?CT(?MODULE,exported_wrap,[1]),
+ ?CT(erlang,hash,[1,1]),
+ erlang:trace(Pid,true,[return_to]),
+ 1 = erlang:trace_pattern({erlang,hash,2},[],[]),
+ [1,1,1,1] = apply_slave(?MODULE,exported_wrap,[1]),
+ ?CT(?MODULE,exported_wrap,[1]),
+ ?CT(erlang,hash,[1,1]),
+ ?RT(?MODULE,slave,2),
+ 1 = erlang:trace_pattern({?MODULE,exported_wrap,1},[],[]),
+ [1,1,1,1] = apply_slave(?MODULE,exported_wrap,[1]),
+ ?CT(?MODULE,exported_wrap,[1]),
+ ?CT(erlang,hash,[1,1]),
+ shutdown(),
+ erlang:trace_pattern({'_','_','_'},false,[local]),
+ N = erlang:trace_pattern({erlang,'_','_'},true,[local]),
+ case erlang:trace_pattern({erlang,'_','_'},false,[local]) of
+ N ->
+ ok;
+ Else ->
+ exit({number_mismatch, {expected, N}, {got, Else}})
+ end,
+ case erlang:trace_pattern({erlang,'_','_'},false,[local]) of
+ N ->
+ ok;
+ Else2 ->
+ exit({number_mismatch, {expected, N}, {got, Else2}})
+ end,
+ M = erlang:trace_pattern({erlang,'_','_'},true,[]),
+ case erlang:trace_pattern({erlang,'_','_'},false,[]) of
+ M ->
+ ok;
+ Else3 ->
+ exit({number_mismatch, {expected, N}, {got, Else3}})
+ end,
+ case erlang:trace_pattern({erlang,'_','_'},false,[]) of
+ M ->
+ ok;
+ Else4 ->
+ exit({number_mismatch, {expected, N}, {got, Else4}})
+ end,
+ ?NM,
ok.
systematic_on_off(Config) when is_list(Config) ->
@@ -634,12 +568,12 @@ systematic_on_off_1(Local) ->
verify_trace_info(Global, Local) ->
case erlang:trace_info({?MODULE,exported_wrap,1}, all) of
- {all,false} ->
- false = Global,
- [] = Local;
- {all,Ps} ->
- io:format("~p\n", [Ps]),
- [verify_trace_info(P, Global, Local) || P <- Ps]
+ {all,false} ->
+ false = Global,
+ [] = Local;
+ {all,Ps} ->
+ io:format("~p\n", [Ps]),
+ [verify_trace_info(P, Global, Local) || P <- Ps]
end,
global_call(Global, Local),
local_call(Local),
@@ -651,12 +585,10 @@ verify_trace_info({match_spec,[]}, _, _) -> ok;
verify_trace_info({meta_match_spec,[]}, _, _) -> ok;
verify_trace_info({LocalFlag,Bool}, _, Local) when is_boolean(Bool) ->
try
- Bool = lists:member(LocalFlag, Local)
+ Bool = lists:member(LocalFlag, Local)
catch
- error:_ ->
- io:format("Line ~p: {~p,~p}, false, ~p\n",
- [?LINE,LocalFlag,Bool,Local]),
- ?t:fail()
+ error:_ ->
+ ct:fail("Line ~p: {~p,~p}, false, ~p\n", [?LINE,LocalFlag,Bool,Local])
end;
verify_trace_info({meta,Pid}, false, Local) when is_pid(Pid) ->
true = lists:member(meta, Local);
@@ -668,10 +600,10 @@ verify_trace_info({call_count,_}, false, Local) ->
global_call(Global, Local) ->
apply_slave(?MODULE, exported_wrap, [global_call]),
case Global of
- false ->
- recv_local_call(Local, [global_call]);
- true ->
- ?CT(?MODULE, exported_wrap, [global_call])
+ false ->
+ recv_local_call(Local, [global_call]);
+ true ->
+ ?CT(?MODULE, exported_wrap, [global_call])
end.
local_call(Local) ->
@@ -680,16 +612,16 @@ local_call(Local) ->
recv_local_call(Local, Args) ->
case lists:member(local, Local) of
- false ->
- ok;
- true ->
- ?CT(?MODULE, exported_wrap, Args)
+ false ->
+ ok;
+ true ->
+ ?CT(?MODULE, exported_wrap, Args)
end,
case lists:member(meta, Local) of
- false ->
- ok;
- true ->
- ?CTT(?MODULE, exported_wrap, Args)
+ false ->
+ ok;
+ true ->
+ ?CTT(?MODULE, exported_wrap, Args)
end,
ok.
@@ -698,99 +630,99 @@ combinations([_]=One) ->
combinations([H|T]) ->
Cs = combinations(T),
[[H|C] || C <- Cs] ++ Cs.
-
+
stack_grow_test() ->
- ?line setup([call,return_to]),
- ?line 1 = erlang:trace_pattern({?MODULE,loop,4},
- [{'_',[],[{return_trace}]}],[local]),
- ?line erlang:trace_pattern({?MODULE,slave,'_'},false,[local]),
- ?line Num = 1 bsl 15,
- ?line Fun =
- fun(_F,0) -> ok;
- (F,N) ->
- receive _A ->
- receive _B ->
- receive _C ->
- F(F,N-1)
- end
- end
- end
- end,
- ?line apply_slave_async(?MODULE,loop,[{hej,hopp},[a,b,c],4.5,Num]),
- ?line Fun(Fun,Num + 1),
- ?line ?NM,
+ setup([call,return_to]),
+ 1 = erlang:trace_pattern({?MODULE,loop,4},
+ [{'_',[],[{return_trace}]}],[local]),
+ erlang:trace_pattern({?MODULE,slave,'_'},false,[local]),
+ Num = 1 bsl 15,
+ Fun =
+ fun(_F,0) -> ok;
+ (F,N) ->
+ receive _A ->
+ receive _B ->
+ receive _C ->
+ F(F,N-1)
+ end
+ end
+ end
+ end,
+ apply_slave_async(?MODULE,loop,[{hej,hopp},[a,b,c],4.5,Num]),
+ Fun(Fun,Num + 1),
+ ?NM,
ok.
info_test() ->
- ?line Flags1 = lists:sort([call,return_to]),
- ?line Pid = setup(Flags1),
- ?line Prog = [{['$1'],[{is_integer,'$1'}],[{message, false}]},
- {'_',[],[]}],
- ?line erlang:trace_pattern({?MODULE,exported_wrap,1},Prog,[local]),
- ?line erlang:trace_pattern({?MODULE,slave,'_'},false,[local]),
- ?line Self = self(),
- ?line {flags,L} = erlang:trace_info(Pid,flags),
- ?line case lists:sort(L) of
- Flags1 ->
- ok;
- Wrong1 ->
- exit({bad_result, {erlang,trace_info,[Pid,flags]},
- {expected, Flags1}, {got, Wrong1}})
- end,
- ?line {tracer,Tracer} = erlang:trace_info(Pid,tracer),
- ?line case Tracer of
- Self ->
- ok;
- Wrong2 ->
- exit({bad_result, {erlang,trace_info,[Pid,tracer]},
- {expected, Self}, {got, Wrong2}})
- end,
- ?line {traced,local} = erlang:trace_info({?MODULE,exported_wrap,1},traced),
- ?line {match_spec, MS} =
- erlang:trace_info({?MODULE,exported_wrap,1},match_spec),
- ?line case MS of
- Prog ->
- ok;
- Wrong3 ->
- exit({bad_result, {erlang,trace_info,
- [{?MODULE,exported_wrap,1},
- match_spec]},
- {expected, Prog}, {got, Wrong3}})
- end,
- ?line erlang:garbage_collect(self()),
- ?line receive
- after 1 ->
- ok
- end,
- ?line io:format("~p~n",[MS]),
- ?line {match_spec,MS2} =
- erlang:trace_info({?MODULE,exported_wrap,1},match_spec),
- ?line io:format("~p~n",[MS2]),
- ?line erlang:trace_pattern({?MODULE,exported_wrap,1},[],[]),
- ?line {traced,global} =
- erlang:trace_info({?MODULE,exported_wrap,1},traced),
- ?line {match_spec,[]} =
- erlang:trace_info({?MODULE,exported_wrap,1},match_spec),
- ?line {traced,undefined} =
- erlang:trace_info({?MODULE,exported_wrap,2},traced),
- ?line {match_spec,undefined} =
- erlang:trace_info({?MODULE,exported_wrap,2},match_spec),
- ?line {traced,false} = erlang:trace_info({?MODULE,exported,1},traced),
- ?line {match_spec,false} =
- erlang:trace_info({?MODULE,exported,1},match_spec),
- ?line shutdown(),
+ Flags1 = lists:sort([call,return_to]),
+ Pid = setup(Flags1),
+ Prog = [{['$1'],[{is_integer,'$1'}],[{message, false}]},
+ {'_',[],[]}],
+ erlang:trace_pattern({?MODULE,exported_wrap,1},Prog,[local]),
+ erlang:trace_pattern({?MODULE,slave,'_'},false,[local]),
+ Self = self(),
+ {flags,L} = erlang:trace_info(Pid,flags),
+ case lists:sort(L) of
+ Flags1 ->
+ ok;
+ Wrong1 ->
+ exit({bad_result, {erlang,trace_info,[Pid,flags]},
+ {expected, Flags1}, {got, Wrong1}})
+ end,
+ {tracer,Tracer} = erlang:trace_info(Pid,tracer),
+ case Tracer of
+ Self ->
+ ok;
+ Wrong2 ->
+ exit({bad_result, {erlang,trace_info,[Pid,tracer]},
+ {expected, Self}, {got, Wrong2}})
+ end,
+ {traced,local} = erlang:trace_info({?MODULE,exported_wrap,1},traced),
+ {match_spec, MS} =
+ erlang:trace_info({?MODULE,exported_wrap,1},match_spec),
+ case MS of
+ Prog ->
+ ok;
+ Wrong3 ->
+ exit({bad_result, {erlang,trace_info,
+ [{?MODULE,exported_wrap,1},
+ match_spec]},
+ {expected, Prog}, {got, Wrong3}})
+ end,
+ erlang:garbage_collect(self()),
+ receive
+ after 1 ->
+ ok
+ end,
+ io:format("~p~n",[MS]),
+ {match_spec,MS2} =
+ erlang:trace_info({?MODULE,exported_wrap,1},match_spec),
+ io:format("~p~n",[MS2]),
+ erlang:trace_pattern({?MODULE,exported_wrap,1},[],[]),
+ {traced,global} =
+ erlang:trace_info({?MODULE,exported_wrap,1},traced),
+ {match_spec,[]} =
+ erlang:trace_info({?MODULE,exported_wrap,1},match_spec),
+ {traced,undefined} =
+ erlang:trace_info({?MODULE,exported_wrap,2},traced),
+ {match_spec,undefined} =
+ erlang:trace_info({?MODULE,exported_wrap,2},match_spec),
+ {traced,false} = erlang:trace_info({?MODULE,exported,1},traced),
+ {match_spec,false} =
+ erlang:trace_info({?MODULE,exported,1},match_spec),
+ shutdown(),
ok.
delete_test(Config) ->
- ?line Priv = ?config(priv_dir, Config),
- ?line Data = ?config(data_dir, Config),
- ?line File = filename:join(Data, "trace_local_dummy"),
- ?line {ok,trace_local_dummy} = c:c(File, [{outdir,Priv}]),
- ?line code:purge(trace_local_dummy),
- ?line code:delete(trace_local_dummy),
- ?line 0 = erlang:trace_pattern({trace_local_dummy,'_','_'},true,[local]),
- ?line ?NM,
+ Priv = proplists:get_value(priv_dir, Config),
+ Data = proplists:get_value(data_dir, Config),
+ File = filename:join(Data, "trace_local_dummy"),
+ {ok,trace_local_dummy} = c:c(File, [{outdir,Priv}]),
+ code:purge(trace_local_dummy),
+ code:delete(trace_local_dummy),
+ 0 = erlang:trace_pattern({trace_local_dummy,'_','_'},true,[local]),
+ ?NM,
ok.
@@ -798,34 +730,34 @@ delete_test(Config) ->
%%% exception_test %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
exception_test(Opts) ->
- ?line {ProcFlags,PatFlags} =
- case proplists:get_bool(meta, Opts) of
- true -> {[timestamp],[meta]};
- false -> {[call,return_to,timestamp],[local]}
- end,
- ?line case proplists:get_bool(nocatch, Opts) of
- false ->
- ?line Exceptions = exceptions(),
- ?line exception_test_setup(ProcFlags, PatFlags),
- ?line lists:foreach(
- fun ({Func,Args}) ->
- ?line exception_test(Opts, Func, Args)
- end,
- Exceptions),
- ?line shutdown();
- true ->
- ?line Exceptions = exceptions(),
- ?line lists:foreach(
- fun ({Func,Args}) ->
- ?line exception_test_setup(
- [procs|ProcFlags],
- PatFlags),
- ?line exception_test(Opts, Func, Args),
- ?line shutdown()
- end,
- Exceptions)
- end,
- ?line ok.
+ {ProcFlags,PatFlags} =
+ case proplists:get_bool(meta, Opts) of
+ true -> {[timestamp],[meta]};
+ false -> {[call,return_to,timestamp],[local]}
+ end,
+ case proplists:get_bool(nocatch, Opts) of
+ false ->
+ Exceptions = exceptions(),
+ exception_test_setup(ProcFlags, PatFlags),
+ lists:foreach(
+ fun ({Func,Args}) ->
+ exception_test(Opts, Func, Args)
+ end,
+ Exceptions),
+ shutdown();
+ true ->
+ Exceptions = exceptions(),
+ lists:foreach(
+ fun ({Func,Args}) ->
+ exception_test_setup(
+ [procs|ProcFlags],
+ PatFlags),
+ exception_test(Opts, Func, Args),
+ shutdown()
+ end,
+ Exceptions)
+ end,
+ ok.
exceptions() ->
Ref = make_ref(),
@@ -848,65 +780,65 @@ exceptions() ->
{{?MODULE,lists_reverse}, [LL,[]]}].
exception_test_setup(ProcFlags, PatFlags) ->
- ?line Pid = setup(ProcFlags),
- ?line io:format("=== exception_test_setup(~p, ~p): ~p~n",
- [ProcFlags,PatFlags,Pid]),
- ?line Mprog = [{'_',[],[{exception_trace}]}],
- ?line erlang:trace_pattern({?MODULE,'_','_'}, Mprog, PatFlags),
- ?line erlang:trace_pattern({?MODULE,slave,'_'},false,PatFlags),
- ?line [1,1,1,1,1] =
- [erlang:trace_pattern({erlang,F,A}, Mprog, PatFlags)
- || {F,A} <- [{exit,1},{error,1},{error,2},{throw,1},{'++',2}]],
- ?line 1 = erlang:trace_pattern({lists,reverse,2}, Mprog, PatFlags),
- ?line ok.
+ Pid = setup(ProcFlags),
+ io:format("=== exception_test_setup(~p, ~p): ~p~n",
+ [ProcFlags,PatFlags,Pid]),
+ Mprog = [{'_',[],[{exception_trace}]}],
+ erlang:trace_pattern({?MODULE,'_','_'}, Mprog, PatFlags),
+ erlang:trace_pattern({?MODULE,slave,'_'},false,PatFlags),
+ [1,1,1,1,1] =
+ [erlang:trace_pattern({erlang,F,A}, Mprog, PatFlags)
+ || {F,A} <- [{exit,1},{error,1},{error,2},{throw,1},{'++',2}]],
+ 1 = erlang:trace_pattern({lists,reverse,2}, Mprog, PatFlags),
+ ok.
-record(exc_opts, {nocatch=false, meta=false}).
exception_test(Opts, Func0, Args0) ->
- ?line io:format("=== exception_test(~p, ~p, ~p)~n",
- [Opts,Func0,abbr(Args0)]),
- ?line Apply = proplists:get_bool(apply, Opts),
- ?line Function = proplists:get_bool(function, Opts),
- ?line Nocatch = proplists:get_bool(nocatch, Opts),
- ?line Meta = proplists:get_bool(meta, Opts),
- ?line ExcOpts = #exc_opts{nocatch=Nocatch,meta=Meta},
-
+ io:format("=== exception_test(~p, ~p, ~p)~n",
+ [Opts,Func0,abbr(Args0)]),
+ Apply = proplists:get_bool(apply, Opts),
+ Function = proplists:get_bool(function, Opts),
+ Nocatch = proplists:get_bool(nocatch, Opts),
+ Meta = proplists:get_bool(meta, Opts),
+ ExcOpts = #exc_opts{nocatch=Nocatch,meta=Meta},
+
%% Func0 and Args0 are for the innermost call, now we will
%% wrap them in wrappers...
- ?line {Func1,Args1} =
- case Function of
- true -> {fun exc/2,[Func0,Args0]};
- false -> {Func0,Args0}
- end,
-
- ?line {Func,Args} =
- case Apply of
- true -> {{erlang,apply},[Func1,Args1]};
- false -> {Func1,Args1}
- end,
-
- ?line R1 = exc_slave(ExcOpts, Func, Args),
- ?line Stack2 = [{?MODULE,exc_top,3,[]},{?MODULE,slave,2,[]}],
- ?line Stack3 = [{?MODULE,exc,2,[]}|Stack2],
- ?line Rs =
- case x_exc_top(ExcOpts, Func, Args) of % Emulation
- {crash,{Reason,Stack}}=R when is_list(Stack) ->
- [R,
- {crash,{Reason,Stack++Stack2}},
- {crash,{Reason,Stack++Stack3}}];
- R ->
- [R]
- end,
- ?line exception_validate(R1, Rs),
- ?line case R1 of
- {crash,Crash} ->
- ?line expect({trace_ts,exit,Crash});
- _ when not Meta ->
- ?line expect({rtt,{?MODULE,slave,2}});
- _ ->
- ok
- end,
- ?line expect({nm}).
+ {Func1,Args1} =
+ case Function of
+ true -> {fun exc/2,[Func0,Args0]};
+ false -> {Func0,Args0}
+ end,
+
+ {Func,Args} =
+ case Apply of
+ true -> {{erlang,apply},[Func1,Args1]};
+ false -> {Func1,Args1}
+ end,
+
+ R1 = exc_slave(ExcOpts, Func, Args),
+ Stack2 = [{?MODULE,exc_top,3,[]},{?MODULE,slave,2,[]}],
+ Stack3 = [{?MODULE,exc,2,[]}|Stack2],
+ Rs =
+ case x_exc_top(ExcOpts, Func, Args) of % Emulation
+ {crash,{Reason,Stack}}=R when is_list(Stack) ->
+ [R,
+ {crash,{Reason,Stack++Stack2}},
+ {crash,{Reason,Stack++Stack3}}];
+ R ->
+ [R]
+ end,
+ exception_validate(R1, Rs),
+ case R1 of
+ {crash,Crash} ->
+ expect({trace_ts,exit,Crash});
+ _ when not Meta ->
+ expect({rtt,{?MODULE,slave,2}});
+ _ ->
+ ok
+ end,
+ expect({nm}).
exception_validate(R0, Rs0) ->
R = clean_location(R0),
@@ -915,16 +847,16 @@ exception_validate(R0, Rs0) ->
exception_validate_1(R1, [R2|Rs]) ->
case [R1|R2] of
- [R|R] ->
- ok;
- [{crash,{badarg,[{lists,reverse,[L1a,L1b],_}|T]}}|
- {crash,{badarg,[{lists,reverse,[L2a,L2b],_}|T]}}] ->
- same({crash,{badarg,[{lists,reverse,
- [lists:reverse(L1b, L1a),[]],[]}|T]}},
- {crash,{badarg,[{lists,reverse,
- [lists:reverse(L2b, L2a),[]],[]}|T]}});
- _ when is_list(Rs), Rs =/= [] ->
- exception_validate(R1, Rs)
+ [R|R] ->
+ ok;
+ [{crash,{badarg,[{lists,reverse,[L1a,L1b],_}|T]}}|
+ {crash,{badarg,[{lists,reverse,[L2a,L2b],_}|T]}}] ->
+ same({crash,{badarg,[{lists,reverse,
+ [lists:reverse(L1b, L1a),[]],[]}|T]}},
+ {crash,{badarg,[{lists,reverse,
+ [lists:reverse(L2b, L2a),[]],[]}|T]}});
+ _ when is_list(Rs), Rs =/= [] ->
+ exception_validate(R1, Rs)
end.
clean_location({crash,{Reason,Stk0}}) ->
@@ -942,20 +874,20 @@ concurrency(_Config) ->
%% if an aligned word-sized write is not atomic.
Ps0 = [spawn_monitor(fun() -> infinite_loop() end) ||
- _ <- lists:seq(1, 2*N)],
+ _ <- lists:seq(1, 2*N)],
OnAndOff = fun() -> concurrency_on_and_off() end,
Ps1 = [spawn_monitor(OnAndOff)|Ps0],
- ?t:sleep(1000),
+ timer:sleep(1000),
%% Now spawn off N more processes that turn on off and off
%% a local trace pattern.
Ps = [spawn_monitor(OnAndOff) || _ <- lists:seq(1, N)] ++ Ps1,
- ?t:sleep(1000),
+ timer:sleep(1000),
%% Clean up.
[exit(Pid, kill) || {Pid,_} <- Ps],
[receive
- {'DOWN',Ref,process,Pid,killed} -> ok
+ {'DOWN',Ref,process,Pid,killed} -> ok
end || {Pid,Ref} <- Ps],
erlang:trace_pattern({?MODULE,infinite_loop,0}, false, [local]),
ok.
@@ -999,16 +931,16 @@ local_tail(Val) ->
exc_top(ExcOpts, Func, Args) ->
case ExcOpts#exc_opts.nocatch of
- false ->
- try exc_jump(Func, Args) of
- Value ->
- {value,Value}
- catch
- Class:Reason ->
- {Class,Reason}
- end;
- true ->
- {value,exc_jump(Func, Args)}
+ false ->
+ try exc_jump(Func, Args) of
+ Value ->
+ {value,Value}
+ catch
+ Class:Reason ->
+ {Class,Reason}
+ end;
+ true ->
+ {value,exc_jump(Func, Args)}
end.
%% x_* functions emulate the non-x_* ones.
@@ -1017,42 +949,42 @@ exc_top(ExcOpts, Func, Args) ->
%% The only possible place for exception
%% is below exc/2.
x_exc_top(ExcOpts, Func, Args) ->
- ?line Rtt = not ExcOpts#exc_opts.meta,
- ?line expect({ctt,{?MODULE,exc_top},[ExcOpts,Func,Args]}),
- ?line case x_exc_jump(ExcOpts, Func, Args) of
- Result when not ExcOpts#exc_opts.nocatch ->
- ?line expect([Rtt,{rtt,{?MODULE,exc_top,3}},
- ?LINE,{rft,{?MODULE,exc_top,3},Result}]),
- ?line Result;
- {value,_}=Result ->
-
- ?line expect([Rtt,{rtt,{?MODULE,exc_top,3}},
- ?LINE,{rft,{?MODULE,exc_top,3},Result}]),
- ?line Result;
- {exit,Reason}=CR ->
- ?line expect({eft,{?MODULE,exc_top,3},CR}),
- ?line {crash,Reason};
- {error,Reason}=CR ->
- ?line expect({eft,{?MODULE,exc_top,3},CR}),
- ?line {crash,{Reason,x_exc_stacktrace()}};
- CR ->
- ?line expect({eft,{?MODULE,exc_top,3},CR}),
- ?line {crash,CR}
- end.
+ Rtt = not ExcOpts#exc_opts.meta,
+ expect({ctt,{?MODULE,exc_top},[ExcOpts,Func,Args]}),
+ case x_exc_jump(ExcOpts, Func, Args) of
+ Result when not ExcOpts#exc_opts.nocatch ->
+ expect([Rtt,{rtt,{?MODULE,exc_top,3}},
+ ?LINE,{rft,{?MODULE,exc_top,3},Result}]),
+ Result;
+ {value,_}=Result ->
+
+ expect([Rtt,{rtt,{?MODULE,exc_top,3}},
+ ?LINE,{rft,{?MODULE,exc_top,3},Result}]),
+ Result;
+ {exit,Reason}=CR ->
+ expect({eft,{?MODULE,exc_top,3},CR}),
+ {crash,Reason};
+ {error,Reason}=CR ->
+ expect({eft,{?MODULE,exc_top,3},CR}),
+ {crash,{Reason,x_exc_stacktrace()}};
+ CR ->
+ expect({eft,{?MODULE,exc_top,3},CR}),
+ {crash,CR}
+ end.
exc_jump(Func, Args) ->
exc(Func, Args, jump).
x_exc_jump(ExcOpts, Func, Args) ->
- ?line expect({ctt,{?MODULE,exc_jump},[Func,Args]}),
- ?line case x_exc(ExcOpts, Func, Args, jump) of
- {value,Value}=Result ->
- ?line expect({rft,{?MODULE,exc_jump,2},Value}),
- ?line Result;
- CR ->
- ?line expect({eft,{?MODULE,exc_jump,2},CR}),
- ?line CR
- end.
+ expect({ctt,{?MODULE,exc_jump},[Func,Args]}),
+ case x_exc(ExcOpts, Func, Args, jump) of
+ {value,Value}=Result ->
+ expect({rft,{?MODULE,exc_jump,2},Value}),
+ Result;
+ CR ->
+ expect({eft,{?MODULE,exc_jump,2},CR}),
+ CR
+ end.
exc(Func, Args, jump) ->
exc(Func, Args, do);
@@ -1060,25 +992,25 @@ exc(Func, Args, do) ->
exc(Func, Args).
x_exc(ExcOpts, Func, Args, jump) ->
- ?line expect({ctt,{?MODULE,exc},[Func,Args,jump]}),
- ?line case x_exc(ExcOpts, Func, Args, do) of
- {value,Value}=Result ->
- ?line expect({rft,{?MODULE,exc,3},Value}),
- ?line Result;
- CR ->
- ?line expect({eft,{?MODULE,exc,3},CR}),
- ?line CR
- end;
+ expect({ctt,{?MODULE,exc},[Func,Args,jump]}),
+ case x_exc(ExcOpts, Func, Args, do) of
+ {value,Value}=Result ->
+ expect({rft,{?MODULE,exc,3},Value}),
+ Result;
+ CR ->
+ expect({eft,{?MODULE,exc,3},CR}),
+ CR
+ end;
x_exc(ExcOpts, Func, Args, do) ->
- ?line expect({ctt,{?MODULE,exc},[Func,Args,do]}),
- ?line case x_exc(ExcOpts, Func, Args) of
- {value,Value}=Result ->
- ?line expect({rft,{?MODULE,exc,3},Value}),
- ?line Result;
- CR ->
- ?line expect({eft,{?MODULE,exc,3},CR}),
- ?line CR
- end.
+ expect({ctt,{?MODULE,exc},[Func,Args,do]}),
+ case x_exc(ExcOpts, Func, Args) of
+ {value,Value}=Result ->
+ expect({rft,{?MODULE,exc,3},Value}),
+ Result;
+ CR ->
+ expect({eft,{?MODULE,exc,3},CR}),
+ CR
+ end.
exc({erlang,apply}, [{M,F},A]) ->
erlang:apply(M, F, id(A));
@@ -1108,114 +1040,114 @@ exc(Func, [A,B]) when is_function(Func, 2) ->
Func(A, id(B)).
x_exc(ExcOpts, {erlang,apply}=Func0, [{_,_}=Func,Args]=Args0) ->
- ?line expect({ctt,{?MODULE,exc},[Func0,Args0]}),
- ?line x_exc_body(ExcOpts, Func, Args, true);
+ expect({ctt,{?MODULE,exc},[Func0,Args0]}),
+ x_exc_body(ExcOpts, Func, Args, true);
x_exc(ExcOpts, {erlang,apply}=Func0, [Func,Args]=Args0)
when is_function(Func, 2)->
- ?line expect({ctt,{?MODULE,exc},[Func0,Args0]}),
- ?line x_exc_func(ExcOpts, Func, Args, Args);
+ expect({ctt,{?MODULE,exc},[Func0,Args0]}),
+ x_exc_func(ExcOpts, Func, Args, Args);
x_exc(ExcOpts, {_,_}=Func, Args) ->
- ?line expect({ctt,{?MODULE,exc},[Func,Args]}),
- ?line x_exc_body(ExcOpts, Func, Args, false);
+ expect({ctt,{?MODULE,exc},[Func,Args]}),
+ x_exc_body(ExcOpts, Func, Args, false);
x_exc(ExcOpts, Func0, [_,Args]=Args0)
when is_function(Func0, 2) ->
- ?line expect({ctt,{?MODULE,exc},[Func0,Args0]}),
- ?line x_exc_func(ExcOpts, Func0, Args0, Args).
+ expect({ctt,{?MODULE,exc},[Func0,Args0]}),
+ x_exc_func(ExcOpts, Func0, Args0, Args).
x_exc_func(ExcOpts, Func, [Func1,Args1]=Args, Id) ->
%% Assumes the called fun =:= fun exc/2,
%% will utterly fail otherwise.
- ?line Rtt = not ExcOpts#exc_opts.meta,
- ?line {module,M} = erlang:fun_info(Func, module),
- ?line {name,F} = erlang:fun_info(Func, name),
- ?line expect([{ctt,{?MODULE,id},[Id]},
- ?LINE,{rft,{?MODULE,id,1},Id},
- ?LINE,Rtt,{rtt,{?MODULE,exc,2}},
- ?LINE,{ctt,{M,F},Args}]),
- ?line case x_exc(ExcOpts, Func1, Args1) of
- {value,Value}=Result ->
- ?line expect([{rft,{M,F,2},Value},
- ?LINE,{rft,{?MODULE,exc,2},Value}]),
- ?line Result;
- CR ->
- ?line expect([{eft,{M,F,2},CR},
- ?LINE,{eft,{?MODULE,exc,2},CR}]),
- ?line CR
- end.
+ Rtt = not ExcOpts#exc_opts.meta,
+ {module,M} = erlang:fun_info(Func, module),
+ {name,F} = erlang:fun_info(Func, name),
+ expect([{ctt,{?MODULE,id},[Id]},
+ ?LINE,{rft,{?MODULE,id,1},Id},
+ ?LINE,Rtt,{rtt,{?MODULE,exc,2}},
+ ?LINE,{ctt,{M,F},Args}]),
+ case x_exc(ExcOpts, Func1, Args1) of
+ {value,Value}=Result ->
+ expect([{rft,{M,F,2},Value},
+ ?LINE,{rft,{?MODULE,exc,2},Value}]),
+ Result;
+ CR ->
+ expect([{eft,{M,F,2},CR},
+ ?LINE,{eft,{?MODULE,exc,2},CR}]),
+ CR
+ end.
x_exc_body(ExcOpts, {M,F}=Func, Args, Apply) ->
- ?line Nocatch = ExcOpts#exc_opts.nocatch,
- ?line Rtt = not ExcOpts#exc_opts.meta,
- ?line Id = case Apply of
- true -> Args;
- false -> lists:last(Args)
- end,
- ?line expect([{ctt,{?MODULE,id},[Id]},
- ?LINE,{rft,{?MODULE,id,1},Id},
- ?LINE,Rtt,{rtt,{?MODULE,exc,2}},
- ?LINE,{ctt,{M,F},Args}]),
- ?line Arity = length(Args),
- ?line try exc(Func, Args) of
- Value ->
- ?line x_exc_value(Rtt, M, F, Args, Arity, Value),
- ?line case expect() of
- {rtt,{M,F,Arity}} when Rtt, Apply ->
- %% We may get the above when
- %% applying a BIF.
- ?line expect({rft,{?MODULE,exc,2},Value});
- {rtt,{?MODULE,exc,2}} when Rtt, not Apply ->
- %% We may get the above when
- %% calling a BIF.
- ?line expect({rft,{?MODULE,exc,2},Value});
- {rft,{?MODULE,exc,2},Value} ->
- ?line ok
- end,
- ?line {value,Value}
- catch
- Thrown when Nocatch ->
- ?line CR = {error,{nocatch,Thrown}},
- ?line x_exc_exception(Rtt, M, F, Args, Arity, CR),
- ?line expect({eft,{?MODULE,exc,2},CR}),
- ?line CR;
- Class:Reason ->
- ?line CR = {Class,Reason},
- ?line x_exc_exception(Rtt, M, F, Args, Arity, CR),
- ?line expect({eft,{?MODULE,exc,2},CR}),
- ?line CR
- end.
+ Nocatch = ExcOpts#exc_opts.nocatch,
+ Rtt = not ExcOpts#exc_opts.meta,
+ Id = case Apply of
+ true -> Args;
+ false -> lists:last(Args)
+ end,
+ expect([{ctt,{?MODULE,id},[Id]},
+ ?LINE,{rft,{?MODULE,id,1},Id},
+ ?LINE,Rtt,{rtt,{?MODULE,exc,2}},
+ ?LINE,{ctt,{M,F},Args}]),
+ Arity = length(Args),
+ try exc(Func, Args) of
+ Value ->
+ x_exc_value(Rtt, M, F, Args, Arity, Value),
+ case expect() of
+ {rtt,{M,F,Arity}} when Rtt, Apply ->
+ %% We may get the above when
+ %% applying a BIF.
+ expect({rft,{?MODULE,exc,2},Value});
+ {rtt,{?MODULE,exc,2}} when Rtt, not Apply ->
+ %% We may get the above when
+ %% calling a BIF.
+ expect({rft,{?MODULE,exc,2},Value});
+ {rft,{?MODULE,exc,2},Value} ->
+ ok
+ end,
+ {value,Value}
+ catch
+ Thrown when Nocatch ->
+ CR = {error,{nocatch,Thrown}},
+ x_exc_exception(Rtt, M, F, Args, Arity, CR),
+ expect({eft,{?MODULE,exc,2},CR}),
+ CR;
+ Class:Reason ->
+ CR = {Class,Reason},
+ x_exc_exception(Rtt, M, F, Args, Arity, CR),
+ expect({eft,{?MODULE,exc,2},CR}),
+ CR
+ end.
x_exc_value(Rtt, ?MODULE, lists_reverse, [La,Lb], 2, R) ->
- ?line L = lists:reverse(Lb, La),
- ?line expect([fun ({ctt,{lists,reverse},[L1,L2]}) ->
- ?line same(L, lists:reverse(L2, L1)),
- ?line next;
- (Msg) ->
- ?line same({rft,{lists,reverse,2},R}, Msg),
- ?line same(R, lists:reverse(L, [])),
- ?line done
- end,
- ?LINE,Rtt,{rtt,{?MODULE,lists_reverse,2}},
- ?LINE,{rft,{?MODULE,lists_reverse,2},R}]);
+ L = lists:reverse(Lb, La),
+ expect([fun ({ctt,{lists,reverse},[L1,L2]}) ->
+ same(L, lists:reverse(L2, L1)),
+ next;
+ (Msg) ->
+ same({rft,{lists,reverse,2},R}, Msg),
+ same(R, lists:reverse(L, [])),
+ done
+ end,
+ ?LINE,Rtt,{rtt,{?MODULE,lists_reverse,2}},
+ ?LINE,{rft,{?MODULE,lists_reverse,2},R}]);
x_exc_value(_Rtt, M, F, _, Arity, Value) ->
- ?line expect({rft,{M,F,Arity},Value}).
+ expect({rft,{M,F,Arity},Value}).
x_exc_exception(_Rtt, ?MODULE, lists_reverse, [La,Lb], 2, CR) ->
- ?line L = lists:reverse(Lb, La),
- ?line expect([fun ({ctt,{lists,reverse},[L1,L2]}) ->
- ?line same(L, lists:reverse(L2, L1)),
- ?line next;
- (Msg) ->
- ?line same({eft,{lists,reverse,2},CR}, Msg),
- ?line done
- end,
- ?LINE,{eft,{?MODULE,lists_reverse,2},CR}]);
+ L = lists:reverse(Lb, La),
+ expect([fun ({ctt,{lists,reverse},[L1,L2]}) ->
+ same(L, lists:reverse(L2, L1)),
+ next;
+ (Msg) ->
+ same({eft,{lists,reverse,2},CR}, Msg),
+ done
+ end,
+ ?LINE,{eft,{?MODULE,lists_reverse,2},CR}]);
x_exc_exception(Rtt, ?MODULE, undef, [_], 1, {Class,Reason}=CR) ->
- ?line expect([{ctt,{erlang,Class},[Reason]},
- ?LINE,{eft,{erlang,Class,1},CR},
- ?LINE,Rtt,{rtt,{error_handler,crash,1}},
- ?LINE,{eft,{?MODULE,undef,1},CR}]);
+ expect([{ctt,{erlang,Class},[Reason]},
+ ?LINE,{eft,{erlang,Class,1},CR},
+ ?LINE,Rtt,{rtt,{error_handler,crash,1}},
+ ?LINE,{eft,{?MODULE,undef,1},CR}]);
x_exc_exception(_Rtt, M, F, _, Arity, CR) ->
- ?line expect({eft,{M,F,Arity},CR}).
+ expect({eft,{M,F,Arity},CR}).
x_exc_stacktrace() ->
x_exc_stacktrace(erlang:get_stacktrace()).
@@ -1252,24 +1184,24 @@ lists_reverse(A, B) ->
slave(Dest, Sync) ->
Dest ! Sync,
receive
- {From,Tag,{apply,M,F,A}} when is_pid(From) ->
- ?line ?dbgformat("Apply: ~p:~p/~p (~p)~n",[M,F,length(A),A]),
- ?line Res = apply(M,F,A),
- ?line ?dbgformat("done Apply: ~p:~p/~p (~p)~n",[M,F,length(A),A]),
- From ! {Tag,Res},
- slave(From, Tag);
- {From,Tag,{lambda,Fun}} when is_pid(From) ->
- Res = Fun(),
- From ! {Tag,Res},
- slave(From, Tag);
- {From,Tag,{exc_top,Catch,Func,Args}} when is_pid(From) ->
- ?line ?dbgformat("Exc: ~p ~p~p ~n",[Catch,Func,Args]),
- ?line Res = exc_top(Catch, Func, Args),
- ?line ?dbgformat("done Exc: ~p ~p~p ~n",[Catch,Func,Args]),
- From ! {Tag,Res},
- slave(From,Tag);
- die ->
- exit(normal)
+ {From,Tag,{apply,M,F,A}} when is_pid(From) ->
+ ?dbgformat("Apply: ~p:~p/~p (~p)~n",[M,F,length(A),A]),
+ Res = apply(M,F,A),
+ ?dbgformat("done Apply: ~p:~p/~p (~p)~n",[M,F,length(A),A]),
+ From ! {Tag,Res},
+ slave(From, Tag);
+ {From,Tag,{lambda,Fun}} when is_pid(From) ->
+ Res = Fun(),
+ From ! {Tag,Res},
+ slave(From, Tag);
+ {From,Tag,{exc_top,Catch,Func,Args}} when is_pid(From) ->
+ ?dbgformat("Exc: ~p ~p~p ~n",[Catch,Func,Args]),
+ Res = exc_top(Catch, Func, Args),
+ ?dbgformat("done Exc: ~p ~p~p ~n",[Catch,Func,Args]),
+ From ! {Tag,Res},
+ slave(From,Tag);
+ die ->
+ exit(normal)
end.
setup(ProcFlags) ->
@@ -1280,30 +1212,34 @@ setup(ProcFlags) ->
Pid = spawn(fun () -> slave(Self, Sync) end),
Mref = erlang:monitor(process, Pid),
receive
- Sync ->
- put(slave, {Pid,Mref}),
- case ProcFlags of
- [] -> ok;
- _ ->
- erlang:trace(Pid, true, ProcFlags)
- end,
- Pid
+ Sync ->
+ put(slave, {Pid,Mref}),
+ case ProcFlags of
+ [] -> ok;
+ _ ->
+ erlang:trace(Pid, true, ProcFlags)
+ end,
+ Pid
end.
shutdown() ->
trace_off(),
- {Pid,Mref} = get(slave),
- try erlang:is_process_alive(Pid) of
- true ->
- Pid ! die,
- receive
- {'DOWN',Mref,process,Pid,Reason} ->
- Reason
- end;
- _ ->
- not_alive
- catch _:_ ->
- undefined
+ case get(slave) of
+ {Pid,Mref} ->
+ try erlang:is_process_alive(Pid) of
+ true ->
+ Pid ! die,
+ receive
+ {'DOWN',Mref,process,Pid,Reason} ->
+ Reason
+ end;
+ _ ->
+ not_alive
+ catch _:_ ->
+ undefined
+ end;
+ _ ->
+ undefined
end.
trace_off() ->
@@ -1311,7 +1247,7 @@ trace_off() ->
erlang:trace_pattern({'_','_','_'},false,[local]),
erlang:trace_pattern({'_','_','_'},false,[meta]),
erlang:trace(all, false, [all]).
-
+
apply_slave_async(M,F,A) ->
{Pid,Mref} = get(slave),
@@ -1332,8 +1268,8 @@ lambda_slave(Fun) ->
exc_slave(Opts, Func, Args) ->
try request({exc_top,Opts,Func,Args})
catch
- Reason ->
- {crash,Reason}
+ Reason ->
+ {crash,Reason}
end.
request(Request) ->
@@ -1344,13 +1280,13 @@ request(Request) ->
result(Tag, Mref) ->
receive
- {Tag,Result} ->
- receive
- Tag ->
- Result
- end;
- {'DOWN',Mref,process,_Pid,Reason} ->
- throw(Reason)
+ {Tag,Result} ->
+ receive
+ Tag ->
+ Result
+ end;
+ {'DOWN',Mref,process,_Pid,Reason} ->
+ throw(Reason)
end.
@@ -1363,25 +1299,25 @@ receive_next() ->
receive_next(TO) ->
receive
- M ->
- M
+ M ->
+ M
after TO ->
- ?t:fail(timeout)
+ ct:fail(timeout)
end.
receive_no_next(TO) ->
receive M ->
- ?t:fail({unexpected_message,[M|flush(TO)]})
+ ct:fail({unexpected_message,[M|flush(TO)]})
after TO ->
- ok
+ ok
end.
flush(T) ->
receive
- M ->
- [M|flush(T)]
+ M ->
+ [M|flush(T)]
after T ->
- []
+ []
end.
@@ -1416,19 +1352,19 @@ abbr(Term, _) -> Term.
%%
abbr_tuple(Tuple, N, J) when J =< size(Tuple) ->
if J > N; N =< 0 ->
- ['...'];
+ ['...'];
true ->
- [abbr(element(J, Tuple), N-1)|abbr_tuple(Tuple, J+1, N)]
+ [abbr(element(J, Tuple), N-1)|abbr_tuple(Tuple, J+1, N)]
end;
abbr_tuple(_, _, _) ->
[].
%%
abbr_list(_, 0, R) ->
case io_lib:printable_list(R) of
- true ->
- reverse(R, "...");
- false ->
- reverse(R, '...')
+ true ->
+ reverse(R, "...");
+ false ->
+ reverse(R, '...')
end;
abbr_list([H|T], N, R) ->
M = N-1,
diff --git a/erts/emulator/test/trace_local_SUITE_data/trace_local_dummy.erl b/erts/emulator/test/trace_local_SUITE_data/trace_local_dummy.erl
index a5947de4aa..a886323302 100644
--- a/erts/emulator/test/trace_local_SUITE_data/trace_local_dummy.erl
+++ b/erts/emulator/test/trace_local_SUITE_data/trace_local_dummy.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/erts/emulator/test/trace_meta_SUITE.erl b/erts/emulator/test/trace_meta_SUITE.erl
index 8f732f0a5f..b6a6fd5404 100644
--- a/erts/emulator/test/trace_meta_SUITE.erl
+++ b/erts/emulator/test/trace_meta_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.
@@ -66,22 +66,21 @@ 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,
+-export([all/0, suite/0,
init_per_testcase/2, end_per_testcase/2, not_run/1]).
-export([basic/1, return/1, on_and_off/1, stack_grow/1,
info/1, tracer/1, combo/1, nosilent/1]).
init_per_testcase(_Case, Config) ->
- Dog=test_server:timetrap(test_server:minutes(5)),
- [{watchdog, Dog}|Config].
+ Config.
end_per_testcase(_Case, Config) ->
shutdown(),
- 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() ->
case test_server:is_native(trace_meta_SUITE) of
@@ -91,74 +90,39 @@ case test_server:is_native(trace_meta_SUITE) of
combo, nosilent]
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 meta trace"];
+%% Tests basic meta trace
basic(Config) when is_list(Config) ->
basic_test().
-return(suite) ->
- [];
-return(doc) ->
- ["Tests return trace"];
+%% Tests return trace
return(Config) when is_list(Config) ->
return_test().
-on_and_off(suite) ->
- [];
-on_and_off(doc) ->
- ["Tests turning trace parameters on and off"];
+%% Tests turning trace parameters on and off
on_and_off(Config) when is_list(Config) ->
on_and_off_test().
-stack_grow(doc) ->
- ["Tests the stack growth during return traces"];
+%% Tests the stack growth during return traces
stack_grow(Config) when is_list(Config) ->
stack_grow_test().
-info(doc) ->
- ["Tests the trace_info BIF"];
+%% Tests the trace_info BIF
info(Config) when is_list(Config) ->
info_test().
-tracer(suite) ->
- [];
-tracer(doc) ->
- ["Tests stopping and changing tracer process"];
+%% Tests stopping and changing tracer process
tracer(Config) when is_list(Config) ->
tracer_test().
-combo(suite) ->
- [];
-combo(doc) ->
- ["Tests combining local call trace with meta trace"];
+%% Tests combining local call trace with meta trace
combo(Config) when is_list(Config) ->
combo_test().
-nosilent(suite) ->
- [];
-nosilent(doc) ->
- ["Tests that meta trace is not silenced by the silent process flag"];
+%% Tests that meta trace is not silenced by the silent process flag
nosilent(Config) when is_list(Config) ->
nosilent_test().
@@ -546,7 +510,7 @@ combo_test() ->
{?RT(Slave,{?MODULE,receiver,1}),
?RF(Slave,{erlang,phash2,2},0)} ->
ok;
- Error1 -> ?t:fail({unexpected_message, Error1})
+ Error1 -> ct:fail({unexpected_message, Error1})
end,
case {receive_next_bytag(LocalTracer),
receive_next_bytag(LocalTracer)} of
@@ -556,7 +520,7 @@ combo_test() ->
{?RT(Slave,{?MODULE,slave,1}),
?RF(Slave,{?MODULE,receiver,1},Ref)} ->
ok;
- Error2 -> ?t:fail({unexpected_message, Error2})
+ Error2 -> ct:fail({unexpected_message, Error2})
end,
shutdown(),
?NM,
@@ -745,13 +709,13 @@ receive_next(TO) ->
M ->
M
after TO ->
- ?t:fail(timeout)
+ ct:fail(timeout)
end.
receive_no_next(TO) ->
receive
M ->
- ?t:fail({unexpected_message, M})
+ ct:fail({unexpected_message, M})
after
TO ->
ok
diff --git a/erts/emulator/test/trace_nif_SUITE.erl b/erts/emulator/test/trace_nif_SUITE.erl
index 3ac891b1dd..8d5bff2a48 100644
--- a/erts/emulator/test/trace_nif_SUITE.erl
+++ b/erts/emulator/test/trace_nif_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,8 +22,7 @@
-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([all/0, suite/0]).
-export([trace_nif/1,
trace_nif_timestamp/1,
trace_nif_local/1,
@@ -45,259 +44,230 @@ all() ->
trace_nif_return]
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"}.
-trace_nif(doc) -> "Test tracing NIFs.";
+%% Test tracing NIFs.
trace_nif(Config) when is_list(Config) ->
load_nif(Config),
-
+
do_trace_nif([]).
-trace_nif_local(doc) -> "Test tracing NIFs with local flag.";
+%% Test tracing NIFs with local flag.
trace_nif_local(Config) when is_list(Config) ->
load_nif(Config),
do_trace_nif([local]).
-trace_nif_meta(doc) -> "Test tracing NIFs with meta flag.";
+%% Test tracing NIFs with meta flag.
trace_nif_meta(Config) when is_list(Config) ->
load_nif(Config),
- ?line Pid=spawn_link(?MODULE, nif_process, []),
- ?line erlang:trace_pattern({?MODULE,nif,'_'}, [], [meta]),
-
- ?line Pid ! {apply_nif, nif, []},
- ?line receive_trace_msg_ts({trace_ts,Pid,call,{?MODULE,nif,[]}}),
-
- ?line Pid ! {apply_nif, nif, ["Arg1"]},
- ?line receive_trace_msg_ts({trace_ts,Pid,call,
- {?MODULE,nif, ["Arg1"]}}),
-
- ?line Pid ! {call_nif, nif, []},
- ?line receive_trace_msg_ts({trace_ts,Pid,call,
- {?MODULE,nif, []}}),
-
- ?line Pid ! {call_nif, nif, ["Arg1"]},
- ?line receive_trace_msg_ts({trace_ts,Pid,call,
- {?MODULE,nif, ["Arg1"]}}),
+ Pid=spawn_link(?MODULE, nif_process, []),
+ erlang:trace_pattern({?MODULE,nif,'_'}, [], [meta]),
+
+ Pid ! {apply_nif, nif, []},
+ receive_trace_msg_ts({trace_ts,Pid,call,{?MODULE,nif,[]}}),
+
+ Pid ! {apply_nif, nif, ["Arg1"]},
+ receive_trace_msg_ts({trace_ts,Pid,call,
+ {?MODULE,nif, ["Arg1"]}}),
+
+ Pid ! {call_nif, nif, []},
+ receive_trace_msg_ts({trace_ts,Pid,call,
+ {?MODULE,nif, []}}),
+
+ Pid ! {call_nif, nif, ["Arg1"]},
+ receive_trace_msg_ts({trace_ts,Pid,call,
+ {?MODULE,nif, ["Arg1"]}}),
ok.
do_trace_nif(Flags) ->
- ?line Pid = spawn(?MODULE, nif_process, []),
- ?line 1 = erlang:trace(Pid, true, [call]),
- ?line erlang:trace_pattern({?MODULE,nif,'_'}, [], Flags),
- ?line Pid ! {apply_nif, nif, []},
- ?line receive_trace_msg({trace,Pid,call,{?MODULE,nif, []}}),
- ?line Pid ! {apply_nif, nif, ["Arg1"]},
- ?line receive_trace_msg({trace,Pid,call,{?MODULE,nif, ["Arg1"]}}),
+ Pid = spawn(?MODULE, nif_process, []),
+ 1 = erlang:trace(Pid, true, [call]),
+ erlang:trace_pattern({?MODULE,nif,'_'}, [], Flags),
+ Pid ! {apply_nif, nif, []},
+ receive_trace_msg({trace,Pid,call,{?MODULE,nif, []}}),
+ Pid ! {apply_nif, nif, ["Arg1"]},
+ receive_trace_msg({trace,Pid,call,{?MODULE,nif, ["Arg1"]}}),
+
+ Pid ! {call_nif, nif, []},
+ receive_trace_msg({trace, Pid, call, {?MODULE,nif, []}}),
- ?line Pid ! {call_nif, nif, []},
- ?line receive_trace_msg({trace, Pid, call, {?MODULE,nif, []}}),
+ Pid ! {call_nif, nif, ["Arg1"]},
+ receive_trace_msg({trace, Pid, call, {?MODULE,nif, ["Arg1"]}}),
- ?line Pid ! {call_nif, nif, ["Arg1"]},
- ?line receive_trace_msg({trace, Pid, call, {?MODULE,nif, ["Arg1"]}}),
-
%% Switch off
- ?line 1 = erlang:trace(Pid, false, [call]),
+ 1 = erlang:trace(Pid, false, [call]),
- ?line Pid ! {apply_nif, nif, []},
+ Pid ! {apply_nif, nif, []},
receive_nothing(),
- ?line Pid ! {apply_nif, nif, ["Arg1"]},
+ Pid ! {apply_nif, nif, ["Arg1"]},
receive_nothing(),
- ?line Pid ! {call_nif, nif, []},
+ Pid ! {call_nif, nif, []},
receive_nothing(),
- ?line Pid ! {call_nif, nif, ["Arg1"]},
+ Pid ! {call_nif, nif, ["Arg1"]},
receive_nothing(),
%% Switch on again
- ?line 1 = erlang:trace(Pid, true, [call]),
- ?line erlang:trace_pattern({?MODULE,nif,'_'}, [], Flags),
- ?line Pid ! {apply_nif, nif, []},
- ?line receive_trace_msg({trace,Pid,call,{?MODULE,nif, []}}),
- ?line Pid ! {apply_nif, nif, ["Arg1"]},
- ?line receive_trace_msg({trace,Pid,call,{?MODULE,nif, ["Arg1"]}}),
-
- ?line Pid ! {call_nif, nif, []},
- ?line receive_trace_msg({trace, Pid, call, {?MODULE,nif, []}}),
-
- ?line Pid ! {call_nif, nif, ["Arg1"]},
- ?line receive_trace_msg({trace, Pid, call, {?MODULE,nif, ["Arg1"]}}),
-
- ?line 1 = erlang:trace(Pid, false, [call]),
- ?line erlang:trace_pattern({?MODULE,nif,'_'}, false, Flags),
- ?line exit(Pid, die),
+ 1 = erlang:trace(Pid, true, [call]),
+ erlang:trace_pattern({?MODULE,nif,'_'}, [], Flags),
+ Pid ! {apply_nif, nif, []},
+ receive_trace_msg({trace,Pid,call,{?MODULE,nif, []}}),
+ Pid ! {apply_nif, nif, ["Arg1"]},
+ receive_trace_msg({trace,Pid,call,{?MODULE,nif, ["Arg1"]}}),
+
+ Pid ! {call_nif, nif, []},
+ receive_trace_msg({trace, Pid, call, {?MODULE,nif, []}}),
+
+ Pid ! {call_nif, nif, ["Arg1"]},
+ receive_trace_msg({trace, Pid, call, {?MODULE,nif, ["Arg1"]}}),
+
+ 1 = erlang:trace(Pid, false, [call]),
+ erlang:trace_pattern({?MODULE,nif,'_'}, false, Flags),
+ exit(Pid, die),
ok.
-trace_nif_timestamp(doc) -> "Test tracing NIFs with timestamps.";
+%% Test tracing NIFs with timestamps.
trace_nif_timestamp(Config) when is_list(Config) ->
load_nif(Config),
do_trace_nif_timestamp([]).
-trace_nif_timestamp_local(doc) ->
- "Test tracing NIFs with timestamps and local flag.";
+%% Test tracing NIFs with timestamps and local flag.
trace_nif_timestamp_local(Config) when is_list(Config) ->
load_nif(Config),
do_trace_nif_timestamp([local]).
do_trace_nif_timestamp(Flags) ->
- ?line Pid=spawn(?MODULE, nif_process, []),
- ?line 1 = erlang:trace(Pid, true, [call,timestamp]),
- ?line erlang:trace_pattern({?MODULE,nif,'_'}, [], Flags),
-
- ?line Pid ! {apply_nif, nif, []},
- ?line receive_trace_msg_ts({trace_ts,Pid,call,{?MODULE,nif,[]}}),
-
- ?line Pid ! {apply_nif, nif, ["Arg1"]},
- ?line receive_trace_msg_ts({trace_ts,Pid,call,
- {?MODULE,nif, ["Arg1"]}}),
-
- ?line Pid ! {call_nif, nif, []},
- ?line receive_trace_msg_ts({trace_ts,Pid,call,
- {?MODULE,nif, []}}),
-
- ?line Pid ! {call_nif, nif, ["Arg1"]},
- ?line receive_trace_msg_ts({trace_ts,Pid,call,
- {?MODULE,nif, ["Arg1"]}}),
-
+ Pid=spawn(?MODULE, nif_process, []),
+ 1 = erlang:trace(Pid, true, [call,timestamp]),
+ erlang:trace_pattern({?MODULE,nif,'_'}, [], Flags),
+
+ Pid ! {apply_nif, nif, []},
+ receive_trace_msg_ts({trace_ts,Pid,call,{?MODULE,nif,[]}}),
+
+ Pid ! {apply_nif, nif, ["Arg1"]},
+ receive_trace_msg_ts({trace_ts,Pid,call,
+ {?MODULE,nif, ["Arg1"]}}),
+
+ Pid ! {call_nif, nif, []},
+ receive_trace_msg_ts({trace_ts,Pid,call,
+ {?MODULE,nif, []}}),
+
+ Pid ! {call_nif, nif, ["Arg1"]},
+ receive_trace_msg_ts({trace_ts,Pid,call,
+ {?MODULE,nif, ["Arg1"]}}),
+
%% We should be able to turn off the timestamp.
- ?line 1 = erlang:trace(Pid, false, [timestamp]),
-
- ?line Pid ! {call_nif, nif, []},
- ?line receive_trace_msg({trace,Pid,call,
- {?MODULE,nif, []}}),
-
- ?line Pid ! {apply_nif, nif, ["tjoho"]},
- ?line receive_trace_msg({trace,Pid,call,
- {?MODULE,nif, ["tjoho"]}}),
-
- ?line 1 = erlang:trace(Pid, false, [call]),
- ?line erlang:trace_pattern({erlang,'_','_'}, false, Flags),
-
- ?line exit(Pid, die),
+ 1 = erlang:trace(Pid, false, [timestamp]),
+
+ Pid ! {call_nif, nif, []},
+ receive_trace_msg({trace,Pid,call,
+ {?MODULE,nif, []}}),
+
+ Pid ! {apply_nif, nif, ["tjoho"]},
+ receive_trace_msg({trace,Pid,call,
+ {?MODULE,nif, ["tjoho"]}}),
+
+ 1 = erlang:trace(Pid, false, [call]),
+ erlang:trace_pattern({erlang,'_','_'}, false, Flags),
+
+ exit(Pid, die),
ok.
-trace_nif_return(doc) ->
- "Test tracing NIF's with return/return_to trace.";
+%% Test tracing NIF's with return/return_to trace.
trace_nif_return(Config) when is_list(Config) ->
load_nif(Config),
- ?line Pid=spawn(?MODULE, nif_process, []),
- ?line 1 = erlang:trace(Pid, true, [call,timestamp,return_to]),
- ?line erlang:trace_pattern({?MODULE,nif,'_'}, [{'_',[],[{return_trace}]}],
- [local]),
-
- ?line Pid ! {apply_nif, nif, []},
- ?line receive_trace_msg_ts({trace_ts,Pid,call,{?MODULE,nif,[]}}),
- ?line receive_trace_msg_ts_return_from({trace_ts,Pid,return_from,
- {?MODULE,nif,0}}),
- ?line receive_trace_msg_ts_return_to({trace_ts,Pid,return_to,
- {?MODULE, nif_process,0}}),
-
- ?line Pid ! {call_nif, nif, ["Arg1"]},
- ?line receive_trace_msg_ts({trace_ts,Pid,call,
- {?MODULE,nif, ["Arg1"]}}),
- ?line receive_trace_msg_ts_return_from({trace_ts,Pid,return_from,
- {?MODULE,nif,1}}),
- ?line receive_trace_msg_ts_return_to({trace_ts,Pid,return_to,
- {?MODULE, nif_process,0}}),
+ Pid=spawn(?MODULE, nif_process, []),
+ 1 = erlang:trace(Pid, true, [call,timestamp,return_to]),
+ erlang:trace_pattern({?MODULE,nif,'_'}, [{'_',[],[{return_trace}]}],
+ [local]),
+
+ Pid ! {apply_nif, nif, []},
+ receive_trace_msg_ts({trace_ts,Pid,call,{?MODULE,nif,[]}}),
+ receive_trace_msg_ts_return_from({trace_ts,Pid,return_from,
+ {?MODULE,nif,0}}),
+ receive_trace_msg_ts_return_to({trace_ts,Pid,return_to,
+ {?MODULE, nif_process,0}}),
+
+ Pid ! {call_nif, nif, ["Arg1"]},
+ receive_trace_msg_ts({trace_ts,Pid,call,
+ {?MODULE,nif, ["Arg1"]}}),
+ receive_trace_msg_ts_return_from({trace_ts,Pid,return_from,
+ {?MODULE,nif,1}}),
+ receive_trace_msg_ts_return_to({trace_ts,Pid,return_to,
+ {?MODULE, nif_process,0}}),
ok.
receive_trace_msg(Mess) ->
receive
- Mess ->
- ok;
- Other ->
- io:format("Expected: ~p,~nGot: ~p~n", [Mess, Other]),
- ?t:fail()
+ Mess ->
+ ok;
+ Other ->
+ ct:fail("Expected: ~p,~nGot: ~p~n", [Mess, Other])
after 5000 ->
- io:format("Expected: ~p,~nGot: timeout~n", [Mess]),
- ?t:fail()
+ ct:fail("Expected: ~p,~nGot: timeout~n", [Mess])
end.
receive_nothing() ->
- ?line timeout = receive M -> M after 100 -> timeout end.
+ timeout = receive M -> M after 100 -> timeout end.
receive_trace_msg_ts({trace_ts, Pid, call, {M,F,A}}) ->
receive
- {trace_ts, Pid, call, {M, F, A}, _Ts} ->
- ok;
- Other ->
- io:format("Expected: {trace, ~p, call, {~p, ~p, ~p}, TimeStamp}},~n"
- "Got: ~p~n",
- [Pid, M, F, A, Other]),
- ?t:fail()
+ {trace_ts, Pid, call, {M, F, A}, _Ts} ->
+ ok;
+ Other ->
+ ct:fail("Expected: {trace, ~p, call, {~p, ~p, ~p}, TimeStamp}},~n"
+ "Got: ~p~n", [Pid, M, F, A, Other])
after 5000 ->
- io:format("Got timeout~n", []),
- ?t:fail()
+ ct:fail("Got timeout~n", [])
end.
receive_trace_msg_ts_return_from({trace_ts, Pid, return_from, {M,F,A}}) ->
receive
- {trace_ts, Pid, return_from, {M, F, A}, _Value, _Ts} ->
- ok;
- Other ->
- io:format("Expected: {trace_ts, ~p, return_from, {~p, ~p, ~p}, Value, TimeStamp}},~n"
- "Got: ~p~n",
- [Pid, M, F, A, Other]),
- ?t:fail()
+ {trace_ts, Pid, return_from, {M, F, A}, _Value, _Ts} ->
+ ok;
+ Other ->
+ ct:fail("Expected: {trace_ts, ~p, return_from, {~p, ~p, ~p}, Value, TimeStamp}},~n"
+ "Got: ~p~n", [Pid, M, F, A, Other])
after 5000 ->
- io:format("Got timeout~n", []),
- ?t:fail()
+ ct:fail("Got timeout~n", [])
end.
receive_trace_msg_ts_return_to({trace_ts, Pid, return_to, {M,F,A}}) ->
receive
- {trace_ts, Pid, return_to, {M, F, A}, _Ts} ->
- ok;
- Other ->
- io:format("Expected: {trace_ts, ~p, return_to, {~p, ~p, ~p}, TimeStamp}},~n"
- "Got: ~p~n",
- [Pid, M, F, A, Other]),
- ?t:fail()
+ {trace_ts, Pid, return_to, {M, F, A}, _Ts} ->
+ ok;
+ Other ->
+ ct:fail("Expected: {trace_ts, ~p, return_to, {~p, ~p, ~p}, TimeStamp}},~n"
+ "Got: ~p~n", [Pid, M, F, A, Other])
after 5000 ->
- io:format("Got timeout~n", []),
- ?t:fail()
+ ct:fail("Got timeout~n", [])
end.
nif_process() ->
receive
- {apply_nif, Name, Args} ->
- ?line {ok,Args} = apply(?MODULE, Name, Args);
-
- {call_nif, Name, []} ->
- ?line {ok, []} = ?MODULE:Name();
-
- {call_nif, Name, [A1]} ->
- ?line {ok, [A1]} = ?MODULE:Name(A1);
-
- {call_nif, Name, [A1,A2]} ->
- ?line {ok,[A1,A2]} = ?MODULE:Name(A1,A2);
-
- {call_nif, Name, [A1,A2,A3]} ->
- ?line {ok,[A1,A2,A3]} = ?MODULE:Name(A1,A2,A3)
+ {apply_nif, Name, Args} ->
+ {ok,Args} = apply(?MODULE, Name, Args);
+
+ {call_nif, Name, []} ->
+ {ok, []} = ?MODULE:Name();
+
+ {call_nif, Name, [A1]} ->
+ {ok, [A1]} = ?MODULE:Name(A1);
+
+ {call_nif, Name, [A1,A2]} ->
+ {ok,[A1,A2]} = ?MODULE:Name(A1,A2);
+
+ {call_nif, Name, [A1,A2,A3]} ->
+ {ok,[A1,A2,A3]} = ?MODULE:Name(A1,A2,A3)
end,
nif_process().
load_nif(Config) ->
- ?line Path = ?config(data_dir, Config),
-
- ?line ok = erlang:load_nif(filename:join(Path,"trace_nif"), 0).
+ Path = proplists:get_value(data_dir, Config),
+
+ ok = erlang:load_nif(filename:join(Path,"trace_nif"), 0).
nif() ->
@@ -305,4 +275,3 @@ nif() ->
nif(A1) ->
{"Stub1",[A1]}. %exit(["nif/1 stub called",A1]).
-
diff --git a/erts/emulator/test/trace_port_SUITE.erl b/erts/emulator/test/trace_port_SUITE.erl
index b169a264be..a66563d15b 100644
--- a/erts/emulator/test/trace_port_SUITE.erl
+++ b/erts/emulator/test/trace_port_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.
@@ -21,239 +21,205 @@
-module(trace_port_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,
call_trace/1,
return_trace/1,
send/1,
receive_trace/1,
process_events/1,
schedule/1,
- fake_schedule/1,
- fake_schedule_after_register/1,
- fake_schedule_after_getting_linked/1,
- fake_schedule_after_getting_unlinked/1,
gc/1,
default_tracer/1,
tracer_port_crash/1]).
-include_lib("common_test/include/ct.hrl").
-test_cases() ->
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap, {seconds, 30}}].
+
+all() ->
[call_trace, return_trace, send, receive_trace,
- process_events, schedule, fake_schedule,
- fake_schedule_after_register,
- fake_schedule_after_getting_linked,
- fake_schedule_after_getting_unlinked, gc,
+ process_events, schedule, gc,
default_tracer, tracer_port_crash].
-suite() -> [{ct_hooks,[ts_install_cth]}].
-
-all() ->
- test_cases().
-
-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(Func, Config) when is_atom(Func), is_list(Config) ->
- Dog = ?t:timetrap(?t:seconds(30)),
- [{watchdog, Dog}|Config].
-
-end_per_testcase(_Func, Config) ->
- Dog = ?config(watchdog, Config),
- ?t:timetrap_cancel(Dog).
-
-call_trace(doc) -> "Test sending call trace messages to a port.";
+%% Test sending call trace messages to a port.
call_trace(Config) when is_list(Config) ->
case test_server:is_native(?MODULE) orelse
- test_server:is_native(lists) of
- true ->
- {skip,"Native code"};
- false ->
- ?line start_tracer(Config),
- Self = self(),
- ?line trace_func({lists,reverse,1}, []),
- ?line trace_pid(Self, true, [call]),
- ?line trace_info(Self, flags),
- ?line trace_info(Self, tracer),
- ?line [b,a] = lists:reverse([a,b]),
- ?line expect({trace,Self,call,{lists,reverse,[[a,b]]}}),
-
- ?line trace_pid(Self, true, [timestamp]),
- ?line trace_info(Self, flags),
- ?line Huge = huge_data(),
- ?line lists:reverse(Huge),
- ?line expect({trace_ts,Self,call,{lists,reverse,[Huge]},ts}),
-
- ?line trace_pid(Self, true, [arity]),
- ?line trace_info(Self, flags),
- ?line [y,x] = lists:reverse([x,y]),
- ?line expect({trace_ts,Self,call,{lists,reverse,1},ts}),
-
- ?line trace_pid(Self, false, [timestamp]),
- ?line trace_info(Self, flags),
- ?line [z,y,x] = lists:reverse([x,y,z]),
- ?line expect({trace,Self,call,{lists,reverse,1}}),
-
- %% OTP-7399. Delayed sub-binary creation optimization.
- ?line trace_pid(Self, false, [arity]),
- ?line trace_info(Self, flags),
- ?line trace_func({?MODULE,bs_sum_c,2}, [], [local]),
- ?line 26 = bs_sum_c(<<3:4,5:4,7:4,11:4>>, 0),
- ?line trace_func({?MODULE,bs_sum_c,2}, false, [local]),
- ?line expect({trace,Self,call,{?MODULE,bs_sum_c,[<<3:4,5:4,7:4,11:4>>,0]}}),
- ?line expect({trace,Self,call,{?MODULE,bs_sum_c,[<<5:4,7:4,11:4>>,3]}}),
- ?line expect({trace,Self,call,{?MODULE,bs_sum_c,[<<7:4,11:4>>,8]}}),
- ?line expect({trace,Self,call,{?MODULE,bs_sum_c,[<<11:4>>,15]}}),
- ?line expect({trace,Self,call,{?MODULE,bs_sum_c,[<<>>,26]}}),
-
- ?line trace_func({lists,reverse,1}, false),
- ok
+ test_server:is_native(lists) of
+ true ->
+ {skip,"Native code"};
+ false ->
+ start_tracer(Config),
+ Self = self(),
+ trace_func({lists,reverse,1}, []),
+ trace_pid(Self, true, [call]),
+ trace_info(Self, flags),
+ trace_info(Self, tracer),
+ [b,a] = lists:reverse([a,b]),
+ expect({trace,Self,call,{lists,reverse,[[a,b]]}}),
+
+ trace_pid(Self, true, [timestamp]),
+ trace_info(Self, flags),
+ Huge = huge_data(),
+ lists:reverse(Huge),
+ expect({trace_ts,Self,call,{lists,reverse,[Huge]},ts}),
+
+ trace_pid(Self, true, [arity]),
+ trace_info(Self, flags),
+ [y,x] = lists:reverse([x,y]),
+ expect({trace_ts,Self,call,{lists,reverse,1},ts}),
+
+ trace_pid(Self, false, [timestamp]),
+ trace_info(Self, flags),
+ [z,y,x] = lists:reverse([x,y,z]),
+ expect({trace,Self,call,{lists,reverse,1}}),
+
+ %% OTP-7399. Delayed sub-binary creation optimization.
+ trace_pid(Self, false, [arity]),
+ trace_info(Self, flags),
+ trace_func({?MODULE,bs_sum_c,2}, [], [local]),
+ 26 = bs_sum_c(<<3:4,5:4,7:4,11:4>>, 0),
+ trace_func({?MODULE,bs_sum_c,2}, false, [local]),
+ expect({trace,Self,call,{?MODULE,bs_sum_c,[<<3:4,5:4,7:4,11:4>>,0]}}),
+ expect({trace,Self,call,{?MODULE,bs_sum_c,[<<5:4,7:4,11:4>>,3]}}),
+ expect({trace,Self,call,{?MODULE,bs_sum_c,[<<7:4,11:4>>,8]}}),
+ expect({trace,Self,call,{?MODULE,bs_sum_c,[<<11:4>>,15]}}),
+ expect({trace,Self,call,{?MODULE,bs_sum_c,[<<>>,26]}}),
+
+ trace_func({lists,reverse,1}, false),
+ ok
end.
bs_sum_c(<<H:4,T/bits>>, Acc) -> bs_sum_c(T, H+Acc);
bs_sum_c(<<>>, Acc) -> Acc.
-return_trace(doc) -> "Test the new return trace.";
+%% Test the new return trace.
return_trace(Config) when is_list(Config) ->
case test_server:is_native(?MODULE) orelse
- test_server:is_native(lists) of
- true ->
- {skip,"Native code"};
- false ->
- ?line start_tracer(Config),
- Self = self(),
- MFA = {lists,reverse,1},
-
- %% Plain (no timestamp, small data).
-
- ?line trace_func(MFA, [{['$1'],[],[{return_trace},
- {message,false}]}]),
- ?line trace_pid(Self, true, [call]),
- ?line trace_info(Self, flags),
- ?line trace_info(Self, tracer),
- ?line trace_info(MFA, match_spec),
- ?line {traced,global} = trace_info(MFA, traced),
- ?line [b,a] = lists:reverse([a,b]),
- ?line expect({trace,Self,return_from,MFA,[b,a]}),
-
- %% Timestamp, huge data.
- ?line trace_pid(Self, true, [timestamp]),
- ?line Result = lists:reverse(huge_data()),
- ?line expect({trace_ts,Self,return_from,MFA,Result,ts}),
-
- %% Turn off trace.
- ?line trace_func(MFA, false),
- ?line trace_info(MFA, match_spec),
- ?line {traced,false} = trace_info(MFA, traced),
- ok
+ test_server:is_native(lists) of
+ true ->
+ {skip,"Native code"};
+ false ->
+ start_tracer(Config),
+ Self = self(),
+ MFA = {lists,reverse,1},
+
+ %% Plain (no timestamp, small data).
+
+ trace_func(MFA, [{['$1'],[],[{return_trace},
+ {message,false}]}]),
+ trace_pid(Self, true, [call]),
+ trace_info(Self, flags),
+ trace_info(Self, tracer),
+ trace_info(MFA, match_spec),
+ {traced,global} = trace_info(MFA, traced),
+ [b,a] = lists:reverse([a,b]),
+ expect({trace,Self,return_from,MFA,[b,a]}),
+
+ %% Timestamp, huge data.
+ trace_pid(Self, true, [timestamp]),
+ Result = lists:reverse(huge_data()),
+ expect({trace_ts,Self,return_from,MFA,Result,ts}),
+
+ %% Turn off trace.
+ trace_func(MFA, false),
+ trace_info(MFA, match_spec),
+ {traced,false} = trace_info(MFA, traced),
+ ok
end.
-send(doc) -> "Test sending send trace messages to a port.";
+%% Test sending send trace messages to a port.
send(Config) when is_list(Config) ->
- ?line Tracer = start_tracer(Config),
+ Tracer = start_tracer(Config),
Self = self(),
- ?line Sender = fun_spawn(fun sender/0),
- ?line trac(Sender, true, [send]),
+ Sender = fun_spawn(fun sender/0),
+ trac(Sender, true, [send]),
%% Simple message, no timestamp.
- ?line Bin = list_to_binary(lists:seq(1, 10)),
- ?line Msg = {some_data,Bin},
+ Bin = list_to_binary(lists:seq(1, 10)),
+ Msg = {some_data,Bin},
Sender ! {send_please,self(),Msg},
receive Msg -> ok end,
- ?line expect({trace,Sender,send,Msg,Self}),
+ expect({trace,Sender,send,Msg,Self}),
%% Timestamp.
BiggerMsg = {even_bigger,Msg},
- ?line trac(Sender, true, [send,timestamp]),
+ trac(Sender, true, [send,timestamp]),
Sender ! {send_please,self(),BiggerMsg},
receive BiggerMsg -> ok end,
- ?line expect({trace_ts,Sender,send,BiggerMsg,Self,ts}),
+ expect({trace_ts,Sender,send,BiggerMsg,Self,ts}),
%% Huge message.
- ?line HugeMsg = huge_data(),
+ HugeMsg = huge_data(),
Sender ! {send_please,self(),HugeMsg},
receive HugeMsg -> ok end,
- ?line expect({trace_ts,Sender,send,HugeMsg,Self,ts}),
+ expect({trace_ts,Sender,send,HugeMsg,Self,ts}),
%% Kill trace port and force a trace. The emulator should not crasch.
- ?line unlink(Tracer),
- ?line exit(Tracer, kill),
+ unlink(Tracer),
+ exit(Tracer, kill),
erlang:yield(), % Make sure that port gets killed.
Sender ! {send_please,Self,good_bye},
receive good_bye -> ok end,
ok.
-receive_trace(doc) -> "Test sending receive traces to a port.";
+%% Test sending receive traces to a port.
receive_trace(Config) when is_list(Config) ->
- ?line start_tracer(Config),
- ?line Receiver = fun_spawn(fun receiver/0),
- ?line trac(Receiver, true, ['receive']),
+ start_tracer(Config),
+ Receiver = fun_spawn(fun receiver/0),
+ trac(Receiver, true, ['receive']),
Receiver ! {hello,world},
- ?line expect({trace,Receiver,'receive',{hello,world}}),
+ expect({trace,Receiver,'receive',{hello,world}}),
- ?line trac(Receiver, true, ['receive',timestamp]),
+ trac(Receiver, true, ['receive',timestamp]),
Huge = {hello,huge_data()},
Receiver ! {hello,huge_data()},
- ?line expect({trace_ts,Receiver,'receive',Huge,ts}),
+ expect({trace_ts,Receiver,'receive',Huge,ts}),
ok.
-process_events(doc) -> "Tests a few process events (like getting linked).";
+%% Tests a few process events (like getting linked).
process_events(Config) when is_list(Config) ->
- ?line start_tracer(Config),
+ start_tracer(Config),
Self = self(),
- ?line Receiver = fun_spawn(fun receiver/0),
- ?line trac(Receiver, true, [procs]),
+ Receiver = fun_spawn(fun receiver/0),
+ trac(Receiver, true, [procs]),
unlink(Receiver), %It is already linked.
- ?line expect({trace,Receiver,getting_unlinked,Self}),
+ expect({trace,Receiver,getting_unlinked,Self}),
link(Receiver),
- ?line expect({trace,Receiver,getting_linked,Self}),
- ?line trac(Receiver, true, [procs,timestamp]),
+ expect({trace,Receiver,getting_linked,Self}),
+ trac(Receiver, true, [procs,timestamp]),
unlink(Receiver),
- ?line expect({trace_ts,Receiver,getting_unlinked,Self,ts}),
+ expect({trace_ts,Receiver,getting_unlinked,Self,ts}),
link(Receiver),
- ?line expect({trace_ts,Receiver,getting_linked,Self,ts}),
+ expect({trace_ts,Receiver,getting_linked,Self,ts}),
unlink(Receiver),
- ?line expect({trace_ts,Receiver,getting_unlinked,Self,ts}),
+ expect({trace_ts,Receiver,getting_unlinked,Self,ts}),
Huge = huge_data(),
exit(Receiver, Huge),
- ?line expect({trace_ts,Receiver,exit,Huge,ts}),
+ expect({trace_ts,Receiver,exit,Huge,ts}),
ok.
-schedule(doc) -> "Test sending scheduling events to a port.";
+%% Test sending scheduling events to a port.
schedule(Config) when is_list(Config) ->
- ?line start_tracer(Config),
- ?line Receiver = fun_spawn(fun receiver/0),
- ?line trac(Receiver, true, [running]),
+ start_tracer(Config),
+ Receiver = fun_spawn(fun receiver/0),
+ trac(Receiver, true, [running]),
Receiver ! hi,
expect({trace,Receiver,in,{?MODULE,receiver,0}}),
expect({trace,Receiver,out,{?MODULE,receiver,0}}),
- ?line trac(Receiver, true, [running,timestamp]),
+ trac(Receiver, true, [running,timestamp]),
Receiver ! hi_again,
expect({trace_ts,Receiver,in,{?MODULE,receiver,0},ts}),
@@ -261,253 +227,93 @@ schedule(Config) when is_list(Config) ->
ok.
-run_fake_sched_test(Fun, Config) when is_function(Fun), is_list(Config) ->
- ?line case catch erlang:system_info(smp_support) of
- true ->
- ?line {skipped,
- "No need for faked schedule out/in trace messages "
- "when smp support is enabled"};
- _ ->
- ?line Fun(Config)
- end.
-
-fake_schedule(doc) -> "Tests time compensating fake out/in scheduling.";
-fake_schedule(Config) when is_list(Config) ->
- ?line run_fake_sched_test(fun fake_schedule_test/1, Config).
-
-fake_schedule_test(Config) when is_list(Config) ->
- ?line Tracer = start_tracer(Config),
- ?line Port = get(tracer_port),
- ?line General = fun_spawn(fun general/0),
- %%
- ?line trac(General, true, [send, running]),
- %%
- %% Test that fake out/in scheduling is not generated unless
- %% both 'running' and 'timestamp' is active.
- ?line [] = erlang:port_control(Port, $h, []),
- ?line General ! nop,
- ?line expect({trace, General, in, {?MODULE, general, 0}}),
- ?line expect({trace, General, out, {?MODULE, general, 0}}),
- ?line expect(),
- %%
- ?line trac(General, false, [running]),
- ?line trac(General, true, [timestamp]),
- %%
- ?line Ref1 = make_ref(),
- ?line Msg1 = {Port, {data, term_to_binary(Ref1)}},
- ?line [] = erlang:port_control(Port, $h, []),
- ?line General ! {send, Tracer, Msg1},
- ?line expect({trace_ts, General, send, Msg1, Tracer, ts}),
- ?line expect(Ref1),
- ?line expect(),
- %%
- ?line trac(General, true, [running]),
- %%
- %% Test that fake out/in scheduling can be generated by the driver
- ?line Ref2 = make_ref(),
- ?line Msg2 = {Port, {data, term_to_binary(Ref2)}},
- ?line [] = erlang:port_control(Port, $h, []),
- ?line General ! {send, Tracer, Msg2},
- ?line {_,_,_,_,Ts} =
- expect({trace_ts, General, in, {?MODULE, general, 0}, ts}),
- ?line expect({trace_ts, General, out, 0, Ts}),
- ?line expect({trace_ts, General, in, 0, ts}),
- ?line expect({trace_ts, General, send, Msg2, Tracer, ts}),
- ?line expect(Ref2),
- ?line expect({trace_ts, General, out, {?MODULE, general, 0}, ts}),
- ?line expect(),
- %%
- %% Test that fake out/in scheduling is not generated after an
- %% 'out' scheduling event
- ?line Ref3 = make_ref(),
- ?line Msg3 = {Port, {data, term_to_binary(Ref3)}},
- ?line General ! {apply, {erlang, port_control, [Port, $h, []]}},
- ?line expect({trace_ts, General, in, {?MODULE, general, 0}, ts}),
- ?line expect({trace_ts, General, out, {?MODULE, general, 0}, ts}),
- ?line General ! {send, Tracer, Msg3},
- ?line expect({trace_ts, General, in, {?MODULE, general, 0}, ts}),
- ?line expect({trace_ts, General, send, Msg3, Tracer, ts}),
- ?line expect(Ref3),
- ?line expect({trace_ts, General, out, {?MODULE, general, 0}, ts}),
- ?line expect(),
- %%
- ok.
-
-fake_schedule_after_register(doc) ->
- "Tests fake out/in scheduling contents.";
-fake_schedule_after_register(Config) when is_list(Config) ->
- ?line run_fake_sched_test(fun fake_schedule_after_register_test/1, Config).
-
-fake_schedule_after_register_test(Config) when is_list(Config) ->
- ?line start_tracer(Config),
- ?line Port = get(tracer_port),
- ?line G1 = fun_spawn(fun general/0),
- ?line G2 = fun_spawn(fun general/0),
- %%
- ?line trac(G1, true, [running, timestamp, procs]),
- ?line trac(G2, true, [running, timestamp]),
- %%
- %% Test fake out/in scheduling after certain messages
- ?line erlang:yield(),
- ?line G2 ! {apply, {erlang, port_control, [Port, $h, []]}},
- ?line G2 ! {apply, {erlang, register, [fake_schedule_after_register, G1]}},
- ?line expect({trace_ts, G2, in, {?MODULE, general, 0}, ts}),
- ?line {_,_,_,_,Ts} =
- expect({trace_ts, G1, register, fake_schedule_after_register, ts}),
- ?line expect({trace_ts, G2, out, 0, Ts}),
- ?line expect({trace_ts, G2, in, 0, ts}),
- ?line expect({trace_ts, G2, out, {?MODULE, general, 0}, ts}),
- ?line expect(),
- %%
- ok.
-
-fake_schedule_after_getting_linked(doc) ->
- "Tests fake out/in scheduling contents.";
-fake_schedule_after_getting_linked(Config) when is_list(Config) ->
- ?line run_fake_sched_test(fun fake_schedule_after_getting_linked_test/1,
- Config).
-
-fake_schedule_after_getting_linked_test(Config) when is_list(Config) ->
- ?line start_tracer(Config),
- ?line Port = get(tracer_port),
- ?line G1 = fun_spawn(fun general/0),
- ?line G2 = fun_spawn(fun general/0),
- %%
- ?line trac(G1, true, [running, timestamp, procs]),
- ?line trac(G2, true, [running, timestamp]),
- %%
- %% Test fake out/in scheduling after certain messages
- ?line erlang:yield(),
- ?line G2 ! {apply, {erlang, port_control, [Port, $h, []]}},
- ?line G2 ! {apply, {erlang, link, [G1]}},
- ?line expect({trace_ts, G2, in, {?MODULE, general, 0}, ts}),
- ?line {_,_,_,_,Ts} =
- expect({trace_ts, G1, getting_linked, G2, ts}),
- ?line expect({trace_ts, G2, out, 0, Ts}),
- ?line expect({trace_ts, G2, in, 0, ts}),
- ?line expect({trace_ts, G2, out, {?MODULE, general, 0}, ts}),
- ?line expect(),
- %%
- ok.
-
-fake_schedule_after_getting_unlinked(doc) ->
- "Tests fake out/in scheduling contents.";
-fake_schedule_after_getting_unlinked(Config) when is_list(Config) ->
- ?line run_fake_sched_test(fun fake_schedule_after_getting_unlinked_test/1,
- Config).
-
-fake_schedule_after_getting_unlinked_test(Config) when is_list(Config) ->
- ?line start_tracer(Config),
- ?line Port = get(tracer_port),
- ?line G1 = fun_spawn(fun general/0),
- ?line G2 = fun_spawn(fun general/0),
- %%
- ?line trac(G1, true, [running, procs]),
- ?line trac(G2, true, [running, timestamp]),
- %%
- %% Test fake out/in scheduling after certain messages
- ?line erlang:yield(),
- ?line G2 ! {apply, {erlang, link, [G1]}},
- ?line G2 ! {apply, {erlang, port_control, [Port, $h, []]}},
- ?line G2 ! {apply, {erlang, unlink, [G1]}},
- ?line expect({trace_ts, G2, in, {?MODULE, general, 0}, ts}),
- ?line expect({trace, G1, getting_linked, G2}),
- ?line expect({trace, G1, getting_unlinked, G2}),
- ?line expect({trace_ts, G2, out, 0, ts}),
- ?line expect({trace_ts, G2, in, 0, ts}),
- ?line expect({trace_ts, G2, out, {?MODULE, general, 0}, ts}),
- ?line expect(),
- %%
- ok.
-
-gc(doc) -> "Test sending garbage collection events to a port.";
+%% Test sending garbage collection events to a port.
gc(Config) when is_list(Config) ->
- ?line start_tracer(Config),
- ?line Garber = fun_spawn(fun garber/0, [{min_heap_size, 5000}]),
- ?line trac(Garber, true, [garbage_collection]),
- ?line trace_info(Garber, flags),
+ start_tracer(Config),
+ Garber = fun_spawn(fun garber/0, [{min_heap_size, 5000}]),
+ trac(Garber, true, [garbage_collection]),
+ trace_info(Garber, flags),
- ?line trace_info(Garber, flags),
+ trace_info(Garber, flags),
Garber ! hi,
- expect({trace,Garber,gc_start,info}),
- expect({trace,Garber,gc_end,info}),
+ expect({trace,Garber,gc_major_start,info}),
+ expect({trace,Garber,gc_major_end,info}),
- ?line trac(Garber, true, [garbage_collection,timestamp]),
+ trac(Garber, true, [garbage_collection,timestamp]),
Garber ! hi,
- expect({trace_ts,Garber,gc_start,info,ts}),
- expect({trace_ts,Garber,gc_end,info,ts}),
+ expect({trace_ts,Garber,gc_major_start,info,ts}),
+ expect({trace_ts,Garber,gc_major_end,info,ts}),
ok.
-default_tracer(doc) ->
- "Test a port as default tracer.";
+%% Test a port as default tracer.
default_tracer(Config) when is_list(Config) ->
- ?line Tracer = start_tracer(Config),
- ?line TracerMonitor = erlang:monitor(process, Tracer),
- ?line Port = get(tracer_port),
+ Tracer = start_tracer(Config),
+ TracerMonitor = erlang:monitor(process, Tracer),
+ Port = get(tracer_port),
%%
- ?line N = erlang:trace(all, true, [send, {tracer, Port}]),
- ?line {flags, [send]} = erlang:trace_info(self(), flags),
- ?line {tracer, Port} = erlang:trace_info(self(), tracer),
- ?line {flags, [send]} = erlang:trace_info(new, flags),
- ?line {tracer, Port} = erlang:trace_info(new, tracer),
- ?line G1 = fun_spawn(fun general/0),
- ?line {flags, [send]} = erlang:trace_info(G1, flags),
- ?line {tracer, Port} = erlang:trace_info(G1, tracer),
- ?line unlink(Tracer),
- ?line exit(Port, done),
- ?line receive
- {'DOWN', TracerMonitor, process, Tracer, TracerExitReason} ->
- ?line done = TracerExitReason
- end,
- ?line {flags, []} = erlang:trace_info(self(), flags),
- ?line {tracer, []} = erlang:trace_info(self(), tracer),
- ?line {flags, []} = erlang:trace_info(new, flags),
- ?line {tracer, []} = erlang:trace_info(new, tracer),
- ?line M = erlang:trace(all, false, [all]),
- ?line {flags, []} = erlang:trace_info(self(), flags),
- ?line {tracer, []} = erlang:trace_info(self(), tracer),
- ?line {flags, []} = erlang:trace_info(G1, flags),
- ?line {tracer, []} = erlang:trace_info(G1, tracer),
- ?line G1 ! {apply,{erlang,exit,[normal]}},
- ?line io:format("~p = ~p.~n", [M, N]),
- ?line M = N,
+ N = erlang:trace(all, true, [send, {tracer, Port}]),
+ {flags, [send]} = erlang:trace_info(self(), flags),
+ {tracer, Port} = erlang:trace_info(self(), tracer),
+ {flags, [send]} = erlang:trace_info(new, flags),
+ {tracer, Port} = erlang:trace_info(new, tracer),
+ G1 = fun_spawn(fun general/0),
+ {flags, [send]} = erlang:trace_info(G1, flags),
+ {tracer, Port} = erlang:trace_info(G1, tracer),
+ unlink(Tracer),
+ exit(Port, done),
+ receive
+ {'DOWN', TracerMonitor, process, Tracer, TracerExitReason} ->
+ done = TracerExitReason
+ end,
+ {flags, []} = erlang:trace_info(self(), flags),
+ {tracer, []} = erlang:trace_info(self(), tracer),
+ {flags, []} = erlang:trace_info(new, flags),
+ {tracer, []} = erlang:trace_info(new, tracer),
+ M = erlang:trace(all, false, [all]),
+ {flags, []} = erlang:trace_info(self(), flags),
+ {tracer, []} = erlang:trace_info(self(), tracer),
+ {flags, []} = erlang:trace_info(G1, flags),
+ {tracer, []} = erlang:trace_info(G1, tracer),
+ G1 ! {apply,{erlang,exit,[normal]}},
+ io:format("~p = ~p.~n", [M, N]),
+ M = N - 1, % G1 has been started, but Tracer and Port have died
ok.
tracer_port_crash(Config) when is_list(Config) ->
case test_server:is_native(?MODULE) orelse
- test_server:is_native(lists) of
- true ->
- {skip,"Native code"};
- false ->
- Tr = start_tracer(Config),
- Port = get(tracer_port),
- Tracee = spawn(fun () ->
- register(trace_port_linker, self()),
- link(Port),
- receive go -> ok end,
- lists:reverse([1,b,c]),
- receive die -> ok end
- end),
- Tr ! {unlink_tracer_port, self()},
- receive {unlinked_tracer_port, Tr} -> ok end,
- port_control(Port, $c, []), %% Make port commands crash tracer port...
- trace_func({lists,reverse,1}, []),
- trace_pid(Tracee, true, [call]),
- trace_info(Tracee, flags),
- trace_info(self(), tracer),
- Tracee ! go,
- receive after 1000 -> ok end,
- case whereis(trace_port_linker) of
- undefined ->
- ok;
- Id ->
-% erts_debug:set_internal_state(available_internal_state, true),
-% erts_debug:set_internal_state(abort, {trace_port_linker, Id})
- ?t:fail({trace_port_linker, Id})
- end,
- undefined = process_info(Tracee),
- ok
+ test_server:is_native(lists) of
+ true ->
+ {skip,"Native code"};
+ false ->
+ Tr = start_tracer(Config),
+ Port = get(tracer_port),
+ Tracee = spawn(fun () ->
+ register(trace_port_linker, self()),
+ link(Port),
+ receive go -> ok end,
+ lists:reverse([1,b,c]),
+ receive die -> ok end
+ end),
+ Tr ! {unlink_tracer_port, self()},
+ receive {unlinked_tracer_port, Tr} -> ok end,
+ port_control(Port, $c, []), %% Make port commands crash tracer port...
+ trace_func({lists,reverse,1}, []),
+ trace_pid(Tracee, true, [call]),
+ trace_info(Tracee, flags),
+ trace_info(self(), tracer),
+ Tracee ! go,
+ receive after 1000 -> ok end,
+ case whereis(trace_port_linker) of
+ undefined ->
+ ok;
+ Id ->
+ % erts_debug:set_internal_state(available_internal_state, true),
+ % erts_debug:set_internal_state(abort, {trace_port_linker, Id})
+ ct:fail({trace_port_linker, Id})
+ end,
+ undefined = process_info(Tracee),
+ ok
end.
%%% Help functions.
@@ -523,106 +329,106 @@ huge_data(N) ->
expect() ->
receive
- Other ->
- ok = io:format("Unexpected; got ~p", [Other]),
- test_server:fail({unexpected, Other})
+ Other ->
+ ok = io:format("Unexpected; got ~p", [Other]),
+ ct:fail({unexpected, Other})
after 200 ->
- ok
+ ok
end.
expect({trace_ts,E1,E2,info,ts}=Message) ->
receive
- {trace_ts,E1,E2,_Info,_Ts}=MessageTs ->
- ok = io:format("Expected and got ~p", [MessageTs]),
- MessageTs;
- Other ->
- io:format("Expected ~p; got ~p", [Message,Other]),
- test_server:fail({unexpected,Other})
+ {trace_ts,E1,E2,_Info,_Ts}=MessageTs ->
+ ok = io:format("Expected and got ~p", [MessageTs]),
+ MessageTs;
+ Other ->
+ io:format("Expected ~p; got ~p", [Message,Other]),
+ ct:fail({unexpected,Other})
after 5000 ->
- io:format("Expected ~p; got nothing", [Message]),
- test_server:fail(no_trace_message)
+ io:format("Expected ~p; got nothing", [Message]),
+ ct:fail(no_trace_message)
end;
expect({trace,E1,E2,info}=Message) ->
receive
- {trace,E1,E2,_Info}=MessageTs ->
- ok = io:format("Expected and got ~p", [MessageTs]),
- MessageTs;
- Other ->
- io:format("Expected ~p; got ~p", [Message,Other]),
- test_server:fail({unexpected,Other})
+ {trace,E1,E2,_Info}=MessageTs ->
+ ok = io:format("Expected and got ~p", [MessageTs]),
+ MessageTs;
+ Other ->
+ io:format("Expected ~p; got ~p", [Message,Other]),
+ ct:fail({unexpected,Other})
after 5000 ->
- io:format("Expected ~p; got nothing", [Message]),
- test_server:fail(no_trace_message)
+ io:format("Expected ~p; got nothing", [Message]),
+ ct:fail(no_trace_message)
end;
expect({trace_ts,E1,E2,E3,ts}=Message) ->
receive
- {trace_ts,E1,E2,E3,_Ts}=MessageTs ->
- ok = io:format("Expected and got ~p", [MessageTs]),
- MessageTs;
- Other ->
- io:format("Expected ~p; got ~p", [Message,Other]),
- test_server:fail({unexpected,Other})
+ {trace_ts,E1,E2,E3,_Ts}=MessageTs ->
+ ok = io:format("Expected and got ~p", [MessageTs]),
+ MessageTs;
+ Other ->
+ io:format("Expected ~p; got ~p", [Message,Other]),
+ ct:fail({unexpected,Other})
after 5000 ->
- io:format("Expected ~p; got nothing", [Message]),
- test_server:fail(no_trace_message)
+ io:format("Expected ~p; got nothing", [Message]),
+ ct:fail(no_trace_message)
end;
expect({trace_ts,E1,E2,E3,E4,ts}=Message) ->
receive
- {trace_ts,E1,E2,E3,E4,_Ts}=MessageTs ->
- ok = io:format("Expected and got ~p", [MessageTs]),
- MessageTs;
- Other ->
- io:format("Expected ~p; got ~p", [Message,Other]),
- test_server:fail({unexpected,Other})
+ {trace_ts,E1,E2,E3,E4,_Ts}=MessageTs ->
+ ok = io:format("Expected and got ~p", [MessageTs]),
+ MessageTs;
+ Other ->
+ io:format("Expected ~p; got ~p", [Message,Other]),
+ ct:fail({unexpected,Other})
after 5000 ->
- io:format("Expected ~p; got nothing", [Message]),
- test_server:fail(no_trace_message)
+ io:format("Expected ~p; got nothing", [Message]),
+ ct:fail(no_trace_message)
end;
expect(Message) ->
receive
- Message ->
- ok = io:format("Expected and got ~p", [Message]),
- Message;
- Other ->
- io:format("Expected ~p; got ~p", [Message,Other]),
- test_server:fail({unexpected,Other})
+ Message ->
+ ok = io:format("Expected and got ~p", [Message]),
+ Message;
+ Other ->
+ io:format("Expected ~p; got ~p", [Message,Other]),
+ ct:fail({unexpected,Other})
after 5000 ->
- io:format("Expected ~p; got nothing", [Message]),
- test_server:fail(no_trace_message)
+ io:format("Expected ~p; got nothing", [Message]),
+ ct:fail(no_trace_message)
end.
trac(What, On, Flags0) ->
Flags = [{tracer,get(tracer_port)}|Flags0],
get(tracer) ! {apply,self(),{erlang,trace,[What,On,Flags]}},
Res = receive
- {apply_result,Result} -> Result
- end,
+ {apply_result,Result} -> Result
+ end,
ok = io:format("erlang:trace(~p, ~p, ~p) -> ~p",
- [What,On,Flags,Res]),
+ [What,On,Flags,Res]),
Res.
-
+
trace_info(What, Key) ->
get(tracer) ! {apply,self(),{erlang,trace_info,[What,Key]}},
Res = receive
- {apply_result,Result} -> Result
- end,
+ {apply_result,Result} -> Result
+ end,
ok = io:format("erlang:trace_info(~p, ~p) -> ~p",
- [What,Key,Res]),
+ [What,Key,Res]),
Res.
-
+
trace_func(MFA, MatchProg) ->
get(tracer) ! {apply,self(),{erlang,trace_pattern,[MFA,MatchProg]}},
Res = receive
- {apply_result,Result} -> Result
- end,
+ {apply_result,Result} -> Result
+ end,
ok = io:format("erlang:trace_pattern(~p, ~p) -> ~p", [MFA,MatchProg,Res]),
Res.
trace_func(MFA, MatchProg, Flags) ->
get(tracer) ! {apply,self(),{erlang,trace_pattern,[MFA,MatchProg,Flags]}},
Res = receive
- {apply_result,Result} -> Result
- end,
+ {apply_result,Result} -> Result
+ end,
ok = io:format("erlang:trace_pattern(~p, ~p) -> ~p", [MFA,MatchProg,Res]),
Res.
@@ -630,29 +436,29 @@ trace_pid(Pid, On, Flags0) ->
Flags = [{tracer,get(tracer_port)}|Flags0],
get(tracer) ! {apply,self(),{erlang,trace,[Pid,On,Flags]}},
Res = receive
- {apply_result,Result} -> Result
- end,
+ {apply_result,Result} -> Result
+ end,
ok = io:format("erlang:trace(~p, ~p, ~p) -> ~p",
- [Pid,On,Flags,Res]),
+ [Pid,On,Flags,Res]),
Res.
start_tracer(Config) ->
- Path = ?config(data_dir, Config),
+ Path = proplists:get_value(data_dir, Config),
ok = load_driver(Path, echo_drv),
Self = self(),
put(tracer, fun_spawn(fun() -> tracer(Self) end)),
receive
- {started,Port} ->
- put(tracer_port, Port)
+ {started,Port} ->
+ put(tracer_port, Port)
end,
get(tracer).
load_driver(Dir, Driver) ->
case erl_ddll:load_driver(Dir, Driver) of
- ok -> ok;
- {error, Error} = Res ->
- io:format("~s\n", [erl_ddll:format_error(Error)]),
- Res
+ ok -> ok;
+ {error, Error} = Res ->
+ io:format("~s\n", [erl_ddll:format_error(Error)]),
+ Res
end.
tracer(RelayTo) ->
@@ -662,18 +468,18 @@ tracer(RelayTo) ->
tracer_loop(RelayTo, Port) ->
receive
- {apply,From,{M,F,A}} ->
- From ! {apply_result,apply(M, F, A)},
- tracer_loop(RelayTo, Port);
- {Port,{data,Msg}} ->
- RelayTo ! binary_to_term(Msg),
- tracer_loop(RelayTo, Port);
- {unlink_tracer_port, From} ->
- unlink(Port),
- From ! {unlinked_tracer_port, self()},
- tracer_loop(RelayTo, Port);
- Other ->
- exit({bad_message,Other})
+ {apply,From,{M,F,A}} ->
+ From ! {apply_result,apply(M, F, A)},
+ tracer_loop(RelayTo, Port);
+ {Port,{data,Msg}} ->
+ RelayTo ! binary_to_term(Msg),
+ tracer_loop(RelayTo, Port);
+ {unlink_tracer_port, From} ->
+ unlink(Port),
+ From ! {unlinked_tracer_port, self()},
+ tracer_loop(RelayTo, Port);
+ Other ->
+ exit({bad_message,Other})
end.
fun_spawn(Fun) ->
@@ -697,43 +503,43 @@ fun_spawn(Fun, Opts) ->
sender() ->
receive
- {send_please, To, What} ->
- To ! What,
- sender()
+ {send_please, To, What} ->
+ To ! What,
+ sender()
end.
%% Just consumes messages from its message queue.
receiver() ->
receive
- _Any -> receiver()
+ _Any -> receiver()
end.
%% Does a garbage collection when it receives a message.
garber() ->
receive
- _Any ->
- lists:seq(1, 100),
- erlang:garbage_collect(),
- garber()
+ _Any ->
+ lists:seq(1, 100),
+ erlang:garbage_collect(),
+ garber()
end.
%% All-purpose process
general() ->
receive
- {apply, {M, F, Args}} ->
- erlang:apply(M, F, Args),
- general();
- {send, Dest, Msg} ->
- Dest ! Msg,
- general();
- {call_f_1, Arg} ->
- f(Arg),
- general();
- nop ->
- general()
+ {apply, {M, F, Args}} ->
+ erlang:apply(M, F, Args),
+ general();
+ {send, Dest, Msg} ->
+ Dest ! Msg,
+ general();
+ {call_f_1, Arg} ->
+ f(Arg),
+ general();
+ nop ->
+ general()
end.
f(Arg) ->
diff --git a/erts/emulator/test/tracer_SUITE.erl b/erts/emulator/test/tracer_SUITE.erl
new file mode 100644
index 0000000000..20fb7e475e
--- /dev/null
+++ b/erts/emulator/test/tracer_SUITE.erl
@@ -0,0 +1,617 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 1997-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(tracer_SUITE).
+
+%%%
+%%% Tests the tracer module interface
+%%%
+
+-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([load/1, unload/1, reload/1, invalid_tracers/1]).
+-export([send/1, recv/1, spawn/1, exit/1, link/1, unlink/1,
+ getting_linked/1, getting_unlinked/1, register/1, unregister/1,
+ in/1, out/1, gc_start/1, gc_end/1]).
+
+suite() -> [{ct_hooks,[ts_install_cth]},
+ {timetrap, {minutes, 1}}].
+
+all() ->
+ [load, unload, reload, invalid_tracers, {group, basic}].
+
+groups() ->
+ [{ basic, [], [send, recv, spawn, exit, link, unlink, getting_linked,
+ getting_unlinked, register, unregister, in, out,
+ gc_start, gc_end]}].
+
+init_per_suite(Config) ->
+ erlang:trace_pattern({'_','_','_'}, false, [local]),
+ erlang:trace_pattern({'_','_','_'}, false, []),
+ purge(),
+ 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 =:= load; TC =:= reload ->
+
+ DataDir = proplists:get_value(data_dir, Config),
+
+ Pid = erlang:spawn(fun F() ->
+ receive
+ {get, Pid} ->
+ Pid ! DataDir,
+ F()
+ end
+ end),
+ register(tracer_test_config, Pid),
+ Config;
+init_per_testcase(_, Config) ->
+ DataDir = proplists:get_value(data_dir, Config),
+ case catch tracer_test:enabled(trace_status, self(), self()) of
+ discard ->
+ ok;
+ _ ->
+ tracer_test:load(DataDir)
+ end,
+ Config.
+
+end_per_testcase(TC, _Config) when TC =:= load; TC =:= reload ->
+ purge(),
+ exit(whereis(tracer_test_config), kill),
+ ok;
+end_per_testcase(_, _Config) ->
+ purge(),
+ ok.
+
+load(_Config) ->
+ purge(),
+ 1 = erlang:trace(self(), true, [{tracer, tracer_test, []}, call]),
+ purge(),
+ 1 = erlang:trace_pattern({?MODULE, all, 0}, [],
+ [{meta, tracer_test, []}]),
+ ok.
+
+unload(_Config) ->
+
+ ServerFun = fun F(0, undefined) ->
+ receive
+ {N, Pid} -> F(N, Pid)
+ end;
+ F(0, Pid) ->
+ Pid ! done,
+ F(0, undefined);
+ F(N, Pid) ->
+ ?MODULE:all(),
+ F(N-1, Pid)
+ end,
+
+ Pid = erlang:spawn_link(fun() -> ServerFun(0, undefined) end),
+
+
+ Tc = fun(N) ->
+ Pid ! {N, self()},
+ receive done -> ok after 1000 -> ct:fail(timeout) end,
+ trace_delivered(Pid)
+ end,
+
+ 1 = erlang:trace(Pid, true, [{tracer, tracer_test,
+ {#{ call => trace }, self(), []}},
+ call]),
+ 1 = erlang:trace_pattern({?MODULE, all, 0}, [], []),
+
+ Tc(1),
+ receive _M -> ok after 0 -> ct:fail(timeout) end,
+ receive M0 -> ct:fail({unexpected_message0, M0}) after 0 -> ok end,
+
+ code:purge(tracer_test),
+ code:delete(tracer_test),
+
+ Tc(1),
+ receive M1 -> ct:fail({unexpected_message1, M1}) after 0 -> ok end,
+
+ code:purge(tracer_test),
+
+ Tc(1),
+ receive M2 -> ct:fail({unexpected_message2, M2}) after 0 -> ok end,
+
+ ok.
+
+%% This testcase is here to make sure there are not
+%% segfaults when reloading the current nifs.
+reload(_Config) ->
+
+ Tracer = spawn_opt(fun F() -> receive _M -> F() end end,
+ [{message_queue_data, off_heap}]),
+ erlang:link(Tracer),
+ Tracee = spawn_link(fun reload_loop/0),
+
+ [begin
+ Ref = make_ref(),
+ State = {#{ call => trace }, Tracer, [Ref]},
+ erlang:trace(Tracee, true, [{tracer, tracer_test,State}, call]),
+ erlang:trace_pattern({?MODULE, all, 0}, []),
+
+ false = code:purge(tracer_test),
+ {module, _} = code:load_file(tracer_test),
+
+ %% There is a race involved in between when the internal nif cache
+ %% is purged and when the reload_loop needs the tracer module
+ %% so the tracer may be removed or still there.
+ case erlang:trace_info(Tracee, tracer) of
+ {tracer, []} -> ok;
+ {tracer, {tracer_test, State}} -> ok
+ end,
+
+ false = code:purge(tracer_test),
+ true = code:delete(tracer_test),
+ false = code:purge(tracer_test),
+ timer:sleep(10)
+ end || _ <- lists:seq(1,15)],
+
+ ok.
+
+reload_loop() ->
+ ?MODULE:all(),
+ ?MODULE:all(),
+ ?MODULE:all(),
+ ?MODULE:all(),
+ ?MODULE:all(),
+ timer:sleep(1),
+ reload_loop().
+
+invalid_tracers(_Config) ->
+ FailTrace = fun(A) ->
+ try erlang:trace(self(), true, A) of
+ _ -> ct:fail(A)
+ catch _:_ -> ok end
+ end,
+
+ FailTrace([{tracer, foobar}, call]),
+ FailTrace([{tracer, foobar, []}, call]),
+ FailTrace([{tracer, make_ref(), []}, call]),
+ FailTrace([{tracer, lists, []}, call]),
+
+ FailTP = fun(MS,FL) ->
+ try erlang:trace_pattern({?MODULE,all,0}, MS, FL) of
+ _ -> ct:fail({MS, FL})
+ catch _:_ -> ok end
+ end,
+
+ FailTP([],[{meta, foobar}]),
+ FailTP([],[{meta, foobar, []}]),
+ FailTP([],[{meta, make_ref(), []}]),
+ FailTP([],[{meta, lists, []}]),
+
+ ok.
+
+
+
+send(_Config) ->
+
+ Self = self(),
+ Tc = fun(Pid) ->
+ Pid ! fun() -> Self ! ok end,
+ receive ok -> ok after 100 -> ct:fail(timeout) end
+ end,
+
+ Expect = fun(Pid, State, EOpts) ->
+ receive
+ Msg ->
+ {send, State, Pid, ok, Self, Opts} = Msg,
+ check_opts(EOpts, Opts)
+ end
+ end,
+ test(send, Tc, Expect).
+
+
+recv(_Config) ->
+
+ Tc = fun(Pid) ->
+ Pid ! ok
+ end,
+
+ Expect = fun(Pid, State, EOpts) ->
+ receive
+ Msg ->
+ {'receive', State, Pid, ok, undefined, Opts} = Msg,
+ check_opts(EOpts, Opts)
+ end
+ end,
+
+ test('receive', Tc, Expect, false).
+
+spawn(_Config) ->
+
+ Tc = fun(Pid) ->
+ Pid ! fun() -> erlang:spawn(lists,seq,[1,10]), ok end
+ end,
+
+ Expect =
+ fun(Pid, State, EOpts) ->
+ receive
+ Msg ->
+ {spawn, State, Pid, NewPid,
+ {lists,seq,[1,10]}, Opts} = Msg,
+ check_opts(EOpts, Opts),
+ true = is_pid(NewPid) andalso NewPid /= Pid
+ end
+ end,
+
+ test(spawn, procs, Tc, Expect, false).
+
+exit(_Config) ->
+ Tc = fun(Pid) ->
+ Pid ! fun() -> exit end
+ end,
+
+ Expect =
+ fun(Pid, State, EOpts) ->
+ receive
+ Msg ->
+ {exit, State, Pid, normal, undefined, Opts} = Msg,
+ check_opts(EOpts, Opts)
+ end
+ end,
+
+ test(exit, procs, Tc, Expect, true, true).
+
+link(_Config) ->
+
+ Tc = fun(Pid) ->
+ Pid ! fun() ->
+ SPid = erlang:spawn(fun() -> receive _ -> ok end end),
+ erlang:link(SPid),
+ ok
+ end
+ end,
+
+ Expect =
+ fun(Pid, State, EOpts) ->
+ receive
+ Msg ->
+ {link, State, Pid, NewPid, undefined, Opts} = Msg,
+ check_opts(EOpts, Opts),
+ true = is_pid(NewPid) andalso NewPid /= Pid
+ end
+ end,
+
+ test(link, procs, Tc, Expect, false).
+
+unlink(_Config) ->
+
+ Tc = fun(Pid) ->
+ Pid ! fun() ->
+ SPid = erlang:spawn(fun() -> receive _ -> ok end end),
+ erlang:link(SPid),
+ erlang:unlink(SPid),
+ ok
+ end
+ end,
+
+ Expect =
+ fun(Pid, State, EOpts) ->
+ receive
+ Msg ->
+ {unlink, State, Pid, NewPid, undefined, Opts} = Msg,
+ check_opts(EOpts, Opts),
+ true = is_pid(NewPid) andalso NewPid /= Pid
+ end
+ end,
+
+ test(unlink, procs, Tc, Expect, false).
+
+getting_linked(_Config) ->
+
+ Tc = fun(Pid) ->
+ Pid ! fun() ->
+ Self = self(),
+ erlang:spawn(fun() -> erlang:link(Self) end),
+ ok
+ end
+ end,
+
+ Expect =
+ fun(Pid, State, EOpts) ->
+ receive
+ Msg ->
+ {getting_linked, State, Pid, NewPid, undefined, Opts} = Msg,
+ check_opts(EOpts, Opts),
+ true = is_pid(NewPid) andalso NewPid /= Pid
+ end
+ end,
+
+ test(getting_linked, procs, Tc, Expect, false).
+
+getting_unlinked(_Config) ->
+ Tc = fun(Pid) ->
+ Pid ! fun() ->
+ Self = self(),
+ erlang:spawn(fun() ->
+ erlang:link(Self),
+ erlang:unlink(Self)
+ end),
+ ok
+ end
+ end,
+
+ Expect =
+ fun(Pid, State, EOpts) ->
+ receive
+ Msg ->
+ {getting_unlinked, State, Pid, NewPid, undefined, Opts} = Msg,
+ check_opts(EOpts, Opts),
+ true = is_pid(NewPid) andalso NewPid /= Pid
+ end
+ end,
+
+ test(getting_unlinked, procs, Tc, Expect, false).
+
+register(_Config) ->
+
+ Tc = fun(Pid) ->
+ Pid ! fun() ->
+ erlang:register(?MODULE, self()),
+ erlang:unregister(?MODULE),
+ ok
+ end
+ end,
+
+ Expect =
+ fun(Pid, State, EOpts) ->
+ receive
+ Msg ->
+ {register, State, Pid, ?MODULE, undefined, Opts} = Msg,
+ check_opts(EOpts, Opts)
+ end
+ end,
+
+ test(register, procs, Tc, Expect, false).
+
+unregister(_Config) ->
+
+ Tc = fun(Pid) ->
+ Pid ! fun() ->
+ erlang:register(?MODULE, self()),
+ erlang:unregister(?MODULE),
+ ok
+ end
+ end,
+
+ Expect =
+ fun(Pid, State, EOpts) ->
+ receive
+ Msg ->
+ {unregister, State, Pid, ?MODULE, undefined, Opts} = Msg,
+ check_opts(EOpts, Opts)
+ end
+ end,
+
+ test(unregister, procs, Tc, Expect, false).
+
+in(_Config) ->
+
+ Tc = fun(Pid) ->
+ Self = self(),
+ Pid ! fun() -> receive after 10 -> Self ! ok end end,
+ receive ok -> ok end
+ end,
+
+ Expect =
+ fun(Pid, State, EOpts) ->
+ N = (fun F(N) ->
+ receive
+ Msg ->
+ {in, State, Pid, _,
+ undefined, Opts} = Msg,
+ check_opts(EOpts, Opts),
+ F(N+1)
+ after 0 -> N
+ end
+ end)(0),
+ true = N > 0
+ end,
+
+ test(in, running, Tc, Expect, false).
+
+out(_Config) ->
+ Tc = fun(Pid) ->
+ Pid ! fun() -> receive after 10 -> exit end end,
+ Ref = erlang:monitor(process, Pid),
+ receive {'DOWN', Ref, _, _, _} -> ok end
+ end,
+
+ Expect =
+ fun(Pid, State, EOpts) ->
+ %% We cannot predict how many out schedules there will be
+ N = (fun F(N) ->
+ receive
+ Msg ->
+ {out, State, Pid, _,
+ undefined, Opts} = Msg,
+ check_opts(EOpts, Opts),
+ F(N+1)
+ after 0 -> N
+ end
+ end)(0),
+ true = N > 0
+ end,
+
+ test(out, running, Tc, Expect, false, true).
+
+gc_start(_Config) ->
+
+ Tc = fun(Pid) ->
+ Pid ! fun() ->
+ erlang:garbage_collect(),
+ ok
+ end
+ end,
+
+ Expect =
+ fun(Pid, State, EOpts) ->
+ receive
+ Msg ->
+ {gc_major_start, State, Pid, _, undefined, Opts} = Msg,
+ check_opts(EOpts, Opts)
+ end
+ end,
+
+ test(gc_major_start, garbage_collection, Tc, Expect, false).
+
+gc_end(_Config) ->
+
+ Tc = fun(Pid) ->
+ Pid ! fun() ->
+ erlang:garbage_collect(),
+ ok
+ end
+ end,
+
+ Expect =
+ fun(Pid, State, EOpts) ->
+ receive
+ Msg ->
+ {gc_major_end, State, Pid, _, undefined, Opts} = Msg,
+ check_opts(EOpts, Opts)
+ end
+ end,
+
+ test(gc_major_end, garbage_collection, Tc, Expect, false).
+
+test(Event, Tc, Expect) ->
+ test(Event, Tc, Expect, false).
+test(Event, Tc, Expect, Removes) ->
+ test(Event, Event, Tc, Expect, Removes).
+test(Event, TraceFlag, Tc, Expect, Removes) ->
+ test(Event, TraceFlag, Tc, Expect, Removes, false).
+test(Event, TraceFlag, Tc, Expect, _Removes, Dies) ->
+
+ ComplexState = {fun() -> ok end, <<0:(128*8)>>},
+ Opts = #{ timestamp => undefined,
+ scheduler_id => undefined,
+ match_spec_result => true },
+
+ %% Test that trace works
+ State1 = {#{ Event => trace }, self(), ComplexState},
+ Pid1 = start_tracee(),
+ 1 = erlang:trace(Pid1, true, [TraceFlag, {tracer, tracer_test, State1}]),
+ Tc(Pid1),
+ ok = trace_delivered(Pid1),
+
+ Expect(Pid1, State1, Opts),
+ receive M11 -> ct:fail({unexpected, M11}) after 0 -> ok end,
+ if not Dies ->
+ {flags, [TraceFlag]} = erlang:trace_info(Pid1, flags),
+ {tracer, {tracer_test, State1}} = erlang:trace_info(Pid1, tracer),
+ erlang:trace(Pid1, false, [TraceFlag]);
+ true -> ok
+ end,
+
+ %% Test that trace works with scheduler id and timestamp
+ Pid1T = start_tracee(),
+ 1 = erlang:trace(Pid1T, true, [TraceFlag, {tracer, tracer_test, State1},
+ timestamp, scheduler_id]),
+ Tc(Pid1T),
+ ok = trace_delivered(Pid1T),
+
+ Expect(Pid1T, State1, Opts#{ scheduler_id := number,
+ timestamp := timestamp}),
+ receive M11T -> ct:fail({unexpected, M11T}) after 0 -> ok end,
+ if not Dies ->
+ {flags, [scheduler_id, TraceFlag, timestamp]}
+ = erlang:trace_info(Pid1T, flags),
+ {tracer, {tracer_test, State1}} = erlang:trace_info(Pid1T, tracer),
+ erlang:trace(Pid1T, false, [TraceFlag]);
+ true -> ok
+ end,
+
+ %% Test that discard works
+ Pid2 = start_tracee(),
+ State2 = {#{ Event => discard }, self(), ComplexState},
+ 1 = erlang:trace(Pid2, true, [TraceFlag, {tracer, tracer_test, State2}]),
+ Tc(Pid2),
+ ok = trace_delivered(Pid2),
+ receive M2 -> ct:fail({unexpected, M2}) after 0 -> ok end,
+ if not Dies ->
+ {flags, [TraceFlag]} = erlang:trace_info(Pid2, flags),
+ {tracer, {tracer_test, State2}} = erlang:trace_info(Pid2, tracer),
+ erlang:trace(Pid2, false, [TraceFlag]);
+ true ->
+ ok
+ end,
+
+ ok.
+
+check_opts(#{ scheduler_id := number } = E, #{ scheduler_id := N } = O)
+ when is_integer(N) ->
+ E1 = maps:remove(scheduler_id, E),
+ O1 = maps:remove(scheduler_id, O),
+ if E1 == O1 -> ok;
+ true -> ct:fail({invalid_opts, E, O})
+ end;
+check_opts(Opts, Opts) ->
+ ok;
+check_opts(E,O) ->
+ ct:fail({invalid_opts, E, O}).
+
+start_tracee() ->
+ spawn_link(
+ fun F() ->
+ receive
+ Action when is_function(Action) ->
+ case Action() of
+ ok ->
+ F();
+ Err ->
+ Err
+ end;
+ _ ->
+ F()
+ end
+ end).
+
+trace_delivered(Pid) ->
+ Ref = erlang:trace_delivered(Pid),
+ receive
+ {trace_delivered, Pid, Ref} ->
+ ok
+ after 1000 ->
+ timeout
+ end.
+
+purge() ->
+ %% Make sure module is not loaded
+ case erlang:module_loaded(tracer_test) of
+ true ->
+ code:purge(tracer_test),
+ true = code:delete(tracer_test),
+ code:purge(tracer_test);
+ _ ->
+ ok
+ end.
diff --git a/erts/emulator/test/tracer_SUITE_data/Makefile.src b/erts/emulator/test/tracer_SUITE_data/Makefile.src
new file mode 100644
index 0000000000..154bd70ccc
--- /dev/null
+++ b/erts/emulator/test/tracer_SUITE_data/Makefile.src
@@ -0,0 +1,8 @@
+
+NIF_LIBS = tracer_test@dll@
+
+all: $(NIF_LIBS)
+
+@SHLIB_RULES@
+
+$(NIF_LIBS): tracer_test.c
diff --git a/erts/emulator/test/tracer_SUITE_data/tracer_test.c b/erts/emulator/test/tracer_SUITE_data/tracer_test.c
new file mode 100644
index 0000000000..908f35da9c
--- /dev/null
+++ b/erts/emulator/test/tracer_SUITE_data/tracer_test.c
@@ -0,0 +1,116 @@
+/*
+ * %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", 6, trace}
+};
+
+ERL_NIF_INIT(tracer_test, nif_funcs, load, NULL, upgrade, unload)
+
+static ERL_NIF_TERM atom_discard;
+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_discard = enif_make_atom(env, "discard");
+ 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);
+
+ if (!enif_get_tuple(env, argv[1], &state_arity, &state_tuple))
+ return atom_discard;
+
+ if (enif_get_map_value(env, state_tuple[0], argv[0], &value)) {
+ return value;
+ } else {
+ return atom_discard;
+ }
+}
+
+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;
+ const ERL_NIF_TERM *state_tuple;
+ ASSERT(argc == 6);
+
+ enif_get_tuple(env, argv[1], &state_arity, &state_tuple);
+
+ tuple = enif_alloc(sizeof(ERL_NIF_TERM)*(argc));
+ memcpy(tuple,argv,sizeof(ERL_NIF_TERM)*argc);
+
+ msg = enif_make_tuple_from_array(env, tuple, argc);
+ enif_get_local_pid(env, state_tuple[1], &to);
+ enif_send(env, &to, NULL, msg);
+ enif_free(tuple);
+
+ return atom_ok;
+}
diff --git a/erts/emulator/test/tracer_test.erl b/erts/emulator/test/tracer_test.erl
new file mode 100644
index 0000000000..d4778f4531
--- /dev/null
+++ b/erts/emulator/test/tracer_test.erl
@@ -0,0 +1,55 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 1997-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(tracer_test).
+
+%%%
+%%% Test tracer
+%%%
+
+-export([enabled/3, trace/6]).
+-export([load/1, load/2]).
+-on_load(load/0).
+
+enabled(_, _, _) ->
+ erlang:nif_error(nif_not_loaded).
+
+trace(_, _, _, _, _, _) ->
+ erlang:nif_error(nif_not_loaded).
+
+load() ->
+ case whereis(tracer_test_config) of
+ undefined ->
+ ok;
+ Pid ->
+ Pid ! {get, self()},
+ receive
+ {Conf, Postfix} ->
+ load(Conf, Postfix);
+ Conf ->
+ load(Conf)
+ end
+ end.
+
+load(DataDir) ->
+ load(DataDir, "").
+load(DataDir, Postfix) ->
+ SoFile = atom_to_list(?MODULE) ++ Postfix,
+ erlang:load_nif(filename:join(DataDir, SoFile) , 0).
diff --git a/erts/emulator/test/tuple_SUITE.erl b/erts/emulator/test/tuple_SUITE.erl
index 2c2f93e7ee..79b681b4d1 100644
--- a/erts/emulator/test/tuple_SUITE.erl
+++ b/erts/emulator/test/tuple_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.
@@ -64,7 +64,7 @@ init_per_suite(Config) ->
[{started_apps, A}|Config].
end_per_suite(Config) ->
- As = ?config(started_apps, Config),
+ As = proplists:get_value(started_apps, Config),
lists:foreach(fun (A) -> application:stop(A) end, As),
Config.
@@ -259,7 +259,7 @@ t_make_tuple(Size, Element) ->
lists:foreach(fun(El) when El =:= Element ->
ok;
(Other) ->
- test_server:fail({got, Other, expected, Element})
+ ct:fail({got, Other, expected, Element})
end, tuple_to_list(Tuple)).
%% Tests the erlang:make_tuple/3 BIF.
@@ -385,14 +385,14 @@ tuple_in_guard(Config) when is_list(Config) ->
Tuple1 == {element(1, Tuple2),element(2, Tuple2)} ->
ok;
true ->
- test_server:fail()
+ ct:fail("failed")
end,
if
Tuple2 == {element(1, Tuple2),element(2, Tuple2),
element(3, Tuple2)} ->
ok;
true ->
- test_server:fail()
+ ct:fail("failed")
end,
ok.
diff --git a/erts/emulator/test/unique_SUITE.erl b/erts/emulator/test/unique_SUITE.erl
index bbbcf3fa2a..c5aa80c7b4 100644
--- a/erts/emulator/test/unique_SUITE.erl
+++ b/erts/emulator/test/unique_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.
@@ -20,9 +20,7 @@
-module(unique_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, init_per_suite/1, end_per_suite/1]).
-export([unique_monotonic_integer_white_box/1,
unique_integer_white_box/1]).
@@ -33,25 +31,14 @@
-define(PRINT(V), print_ret_val(?FILE, ?LINE, V)).
-
-init_per_testcase(Case, Config) ->
- ?line Dog=test_server:timetrap(test_server:minutes(2)),
- [{watchdog, Dog}, {testcase, Case}|Config].
-
-end_per_testcase(_, 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, 4}}].
all() ->
[unique_monotonic_integer_white_box,
unique_integer_white_box].
-groups() ->
- [].
-
init_per_suite(Config) ->
erts_debug:set_internal_state(available_internal_state, true),
Config.
@@ -60,12 +47,6 @@ end_per_suite(_Config) ->
erts_debug:set_internal_state(available_internal_state, false),
ok.
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
-
%%
%%
%% Unique counter white box test case
@@ -80,15 +61,15 @@ unique_monotonic_integer_white_box(Config) when is_list(Config) ->
%% the system when moving the strict monotonic counter
%% around in a non-strict monotonic way...
Test = spawn(Node,
- fun () ->
- unique_monotonic_integer_white_box_test(TestServer, Success)
- end),
+ fun () ->
+ unique_monotonic_integer_white_box_test(TestServer, Success)
+ end),
Mon = erlang:monitor(process, Test),
receive
- {'DOWN', Mon, process, Test, Error} ->
- ?t:fail(Error);
- Success ->
- ok
+ {'DOWN', Mon, process, Test, Error} ->
+ ct:fail(Error);
+ Success ->
+ ok
end,
erlang:demonitor(Mon, [flush]),
stop_node(Node),
@@ -96,9 +77,9 @@ unique_monotonic_integer_white_box(Config) when is_list(Config) ->
set_unique_monotonic_integer_state(MinCounter, NextValue) ->
true = erts_debug:set_internal_state(unique_monotonic_integer_state,
- NextValue-MinCounter-1).
-
-
+ NextValue-MinCounter-1).
+
+
unique_monotonic_integer_white_box_test(TestServer, Success) ->
erts_debug:set_internal_state(available_internal_state, true),
@@ -130,10 +111,10 @@ unique_monotonic_integer_white_box_test(TestServer, Success) ->
?PRINT({max_counter, MaxCounter}),
case WordSize of
- 4 ->
- MinCounter = MinSint64;
- 8 ->
- MinCounter = MinSmall
+ 4 ->
+ MinCounter = MinSint64;
+ 8 ->
+ MinCounter = MinSmall
end,
StartState = erts_debug:get_internal_state(unique_monotonic_integer_state),
@@ -141,20 +122,20 @@ unique_monotonic_integer_white_box_test(TestServer, Success) ->
%% Verify that we get expected results over all internal limits...
case MinCounter < MinSmall of
- false ->
- 8 = WordSize,
- ok;
- true ->
- 4 = WordSize,
- ?PRINT(over_min_small),
- set_unique_monotonic_integer_state(MinCounter, MinSmall-2),
- true = (?P(erlang:unique_integer([monotonic])) == MinSmall - 2),
- true = (?P(erlang:unique_integer([monotonic])) == MinSmall - 1),
- true = (?P(erlang:unique_integer([monotonic])) == MinSmall),
- true = (?P(erlang:unique_integer([monotonic])) == MinSmall + 1),
- true = (?P(erlang:unique_integer([monotonic])) == MinSmall + 2),
- garbage_collect(),
- ok
+ false ->
+ 8 = WordSize,
+ ok;
+ true ->
+ 4 = WordSize,
+ ?PRINT(over_min_small),
+ set_unique_monotonic_integer_state(MinCounter, MinSmall-2),
+ true = (?P(erlang:unique_integer([monotonic])) == MinSmall - 2),
+ true = (?P(erlang:unique_integer([monotonic])) == MinSmall - 1),
+ true = (?P(erlang:unique_integer([monotonic])) == MinSmall),
+ true = (?P(erlang:unique_integer([monotonic])) == MinSmall + 1),
+ true = (?P(erlang:unique_integer([monotonic])) == MinSmall + 2),
+ garbage_collect(),
+ ok
end,
?PRINT(over_zero), %% Not really an interesting limit, but...
@@ -176,27 +157,27 @@ unique_monotonic_integer_white_box_test(TestServer, Success) ->
garbage_collect(),
case MaxCounter > MaxSint64 of
- false ->
- 4 = WordSize,
- ok;
- true ->
- 8 = WordSize,
- ?PRINT(over_max_sint64),
- set_unique_monotonic_integer_state(MinCounter, MaxSint64-2),
- true = (?P(erlang:unique_integer([monotonic])) == MaxSint64 - 2),
- true = (?P(erlang:unique_integer([monotonic])) == MaxSint64 - 1),
- true = (?P(erlang:unique_integer([monotonic])) == MaxSint64),
- true = (?P(erlang:unique_integer([monotonic])) == MaxSint64 + 1),
- true = (?P(erlang:unique_integer([monotonic])) == MaxSint64 + 2),
- garbage_collect()
+ false ->
+ 4 = WordSize,
+ ok;
+ true ->
+ 8 = WordSize,
+ ?PRINT(over_max_sint64),
+ set_unique_monotonic_integer_state(MinCounter, MaxSint64-2),
+ true = (?P(erlang:unique_integer([monotonic])) == MaxSint64 - 2),
+ true = (?P(erlang:unique_integer([monotonic])) == MaxSint64 - 1),
+ true = (?P(erlang:unique_integer([monotonic])) == MaxSint64),
+ true = (?P(erlang:unique_integer([monotonic])) == MaxSint64 + 1),
+ true = (?P(erlang:unique_integer([monotonic])) == MaxSint64 + 2),
+ garbage_collect()
end,
?PRINT(over_max_min_counter),
set_unique_monotonic_integer_state(MinCounter, if MaxCounter == MaxSint64 ->
- MaxCounter-2;
- true ->
- MinCounter-3
- end),
+ MaxCounter-2;
+ true ->
+ MinCounter-3
+ end),
true = (?P(erlang:unique_integer([monotonic])) == MaxCounter - 2),
true = (?P(erlang:unique_integer([monotonic])) == MaxCounter - 1),
true = (?P(erlang:unique_integer([monotonic])) == MaxCounter),
@@ -208,7 +189,7 @@ unique_monotonic_integer_white_box_test(TestServer, Success) ->
%% Restore initial state and hope we didn't mess it up for the
%% system...
true = erts_debug:set_internal_state(unique_monotonic_integer_state,
- StartState),
+ StartState),
TestServer ! Success.
@@ -219,16 +200,16 @@ unique_monotonic_integer_white_box_test(TestServer, Success) ->
%%
-record(uniqint_info, {min_int,
- max_int,
- max_small,
- schedulers,
- sched_bits}).
+ max_int,
+ max_small,
+ schedulers,
+ sched_bits}).
unique_integer_white_box(Config) when is_list(Config) ->
UinqintInfo = init_uniqint_info(),
#uniqint_info{min_int = MinInt,
- max_int = MaxInt,
- max_small = MaxSmall} = UinqintInfo,
+ max_int = MaxInt,
+ max_small = MaxSmall} = UinqintInfo,
io:format("****************************************************~n", []),
io:format("*** Around MIN_UNIQ_INT ~p ***~n", [MinInt]),
io:format("****************************************************~n", []),
@@ -258,7 +239,7 @@ unique_integer_white_box(Config) when is_list(Config) ->
io:format("****************************************************~n", []),
check_unique_integer_around(MaxInt, UinqintInfo),
ok.
-
+
%%% Internal unique_integer_white_box/1 test case
@@ -270,12 +251,12 @@ calc_sched_bits(NoScheds, Shift) ->
schedulers() ->
S = erlang:system_info(schedulers),
try
- DCPUS = erlang:system_info(dirty_cpu_schedulers),
- DIOS = erlang:system_info(dirty_io_schedulers),
- S+DCPUS+DIOS
+ DCPUS = erlang:system_info(dirty_cpu_schedulers),
+ DIOS = erlang:system_info(dirty_io_schedulers),
+ S+DCPUS+DIOS
catch
- _ : _ ->
- S
+ _ : _ ->
+ S
end.
init_uniqint_info() ->
@@ -292,33 +273,33 @@ init_uniqint_info() ->
MaxInt = ((((1 bsl 64) - 1) bsl SchedBits) bor Schedulers) + MinSmall,
io:format("MaxInt=~p~n", [MaxInt]),
#uniqint_info{min_int = MinSmall,
- max_int = MaxInt,
- max_small = MaxSmall,
- schedulers = Schedulers,
- sched_bits = SchedBits}.
+ max_int = MaxInt,
+ max_small = MaxSmall,
+ schedulers = Schedulers,
+ sched_bits = SchedBits}.
valid_uniqint(Int, #uniqint_info{min_int = MinInt} = UinqintInfo) when Int < MinInt ->
valid_uniqint(MinInt, UinqintInfo);
valid_uniqint(Int, #uniqint_info{min_int = MinInt,
- sched_bits = SchedBits,
- schedulers = Scheds}) ->
+ sched_bits = SchedBits,
+ schedulers = Scheds}) ->
Int1 = Int - MinInt,
{Inc, ThreadNo} = case Int1 band ((1 bsl SchedBits) - 1) of
- TN when TN > Scheds ->
- {1, Scheds};
- TN ->
- {0, TN}
- end,
+ TN when TN > Scheds ->
+ {1, Scheds};
+ TN ->
+ {0, TN}
+ end,
Counter = ((Int1 bsr SchedBits) + Inc) rem (1 bsl 64),
((Counter bsl SchedBits) bor ThreadNo) + MinInt.
smaller_valid_uniqint(Int, UinqintInfo) ->
Cand = Int-1,
case valid_uniqint(Cand, UinqintInfo) of
- RI when RI < Int ->
- RI;
- _ ->
- smaller_valid_uniqint(Cand, UinqintInfo)
+ RI when RI < Int ->
+ RI;
+ _ ->
+ smaller_valid_uniqint(Cand, UinqintInfo)
end.
int32_to_bigendian_list(Int) ->
@@ -329,7 +310,7 @@ int32_to_bigendian_list(Int) ->
Int band 16#ff].
mk_uniqint(Int, #uniqint_info {min_int = MinInt,
- sched_bits = SchedBits} = _UinqintInfo) ->
+ sched_bits = SchedBits} = _UinqintInfo) ->
Int1 = Int - MinInt,
ThrId = Int1 band ((1 bsl SchedBits) - 1),
Value = (Int1 bsr SchedBits) band ((1 bsl 64) - 1),
@@ -345,36 +326,36 @@ check_uniqint(Int, UinqintInfo) ->
UniqInt = mk_uniqint(Int, UinqintInfo),
io:format("UniqInt=~p ", [UniqInt]),
case UniqInt =:= Int of
- true ->
- io:format("OK~n~n", []);
- false ->
- io:format("result Int=~p FAILED~n", [Int]),
- exit(badres)
+ true ->
+ io:format("OK~n~n", []);
+ false ->
+ io:format("result Int=~p FAILED~n", [Int]),
+ exit(badres)
end.
check_unique_integer_around(Int, #uniqint_info{min_int = MinInt,
- max_int = MaxInt} = UinqintInfo) ->
+ max_int = MaxInt} = UinqintInfo) ->
{Start, End} = case {Int =< MinInt+100, Int >= MaxInt-100} of
- {true, false} ->
- {MinInt, MinInt+100};
- {false, false} ->
- {smaller_valid_uniqint(Int-100, UinqintInfo),
- valid_uniqint(Int+100, UinqintInfo)};
- {false, true} ->
- {MaxInt-100, MaxInt}
- end,
+ {true, false} ->
+ {MinInt, MinInt+100};
+ {false, false} ->
+ {smaller_valid_uniqint(Int-100, UinqintInfo),
+ valid_uniqint(Int+100, UinqintInfo)};
+ {false, true} ->
+ {MaxInt-100, MaxInt}
+ end,
lists:foldl(fun (I, OldRefInt) ->
- RefInt = valid_uniqint(I, UinqintInfo),
- case OldRefInt =:= RefInt of
- true ->
- ok;
- false ->
- check_uniqint(RefInt, UinqintInfo)
- end,
- RefInt
- end,
- none,
- lists:seq(Start, End)).
+ RefInt = valid_uniqint(I, UinqintInfo),
+ case OldRefInt =:= RefInt of
+ true ->
+ ok;
+ false ->
+ check_uniqint(RefInt, UinqintInfo)
+ end,
+ RefInt
+ end,
+ none,
+ lists:seq(Start, End)).
%% helpers
@@ -386,17 +367,17 @@ print_ret_val(File, Line, Value) ->
start_node(Config) ->
start_node(Config, []).
start_node(Config, Opts) when is_list(Config), is_list(Opts) ->
- ?line Pa = filename:dirname(code:which(?MODULE)),
- ?line A = erlang:monotonic_time(1) + erlang:time_offset(1),
- ?line B = erlang:unique_integer([positive]),
- ?line Name = list_to_atom(atom_to_list(?MODULE)
- ++ "-"
- ++ atom_to_list(?config(testcase, Config))
- ++ "-"
- ++ integer_to_list(A)
- ++ "-"
- ++ integer_to_list(B)),
- ?line ?t:start_node(Name, slave, [{args, Opts++" -pa "++Pa}]).
+ Pa = filename:dirname(code:which(?MODULE)),
+ A = erlang:monotonic_time(1) + erlang:time_offset(1),
+ B = erlang:unique_integer([positive]),
+ Name = list_to_atom(atom_to_list(?MODULE)
+ ++ "-"
+ ++ atom_to_list(proplists:get_value(testcase, Config))
+ ++ "-"
+ ++ integer_to_list(A)
+ ++ "-"
+ ++ integer_to_list(B)),
+ test_server:start_node(Name, slave, [{args, Opts++" -pa "++Pa}]).
stop_node(Node) ->
- ?t:stop_node(Node).
+ test_server:stop_node(Node).
diff --git a/erts/emulator/test/z_SUITE.erl b/erts/emulator/test/z_SUITE.erl
index 0037a9a477..d1085c1958 100644
--- a/erts/emulator/test/z_SUITE.erl
+++ b/erts/emulator/test/z_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.
@@ -32,146 +32,115 @@
-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]).
-export([schedulers_alive/1, node_container_refc_check/1,
long_timers/1, pollset_size/1,
check_io_debug/1, get_check_io_info/0]).
--define(DEFAULT_TIMEOUT, ?t:minutes(5)).
-
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap, {minutes, 5}}].
all() ->
[schedulers_alive, node_container_refc_check,
long_timers, pollset_size, check_io_debug].
-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) ->
- Dog = ?t:timetrap(?DEFAULT_TIMEOUT),
- [{watchdog, Dog}|Config].
-
-end_per_testcase(_Case, Config) when is_list(Config) ->
- Dog = ?config(watchdog, Config),
- ?t:timetrap_cancel(Dog),
- ok.
-
%%%
%%% The test cases -------------------------------------------------------------
%%%
-schedulers_alive(doc) -> ["Tests that all schedulers are actually used"];
-schedulers_alive(suite) -> [];
+%% Tests that all schedulers are actually used
schedulers_alive(Config) when is_list(Config) ->
- ?line Master = self(),
- ?line NoSchedulersOnline = erlang:system_flag(
- schedulers_online,
- erlang:system_info(schedulers)),
- ?line NoSchedulers = erlang:system_info(schedulers),
+ Master = self(),
+ NoSchedulersOnline = erlang:system_flag(
+ schedulers_online,
+ erlang:system_info(schedulers)),
+ NoSchedulers = erlang:system_info(schedulers),
UsedScheds =
- try
- ?line ?t:format("Number of schedulers configured: ~p~n", [NoSchedulers]),
- ?line case erlang:system_info(multi_scheduling) of
- blocked ->
- ?line ?t:fail(multi_scheduling_blocked);
- disabled ->
- ?line ok;
- enabled ->
- ?t:format("Testing blocking process exit~n"),
- BF = fun () ->
- blocked = erlang:system_flag(multi_scheduling,
- block),
- Master ! {self(), blocking},
- receive after infinity -> ok end
- end,
- ?line Blocker = spawn_link(BF),
- ?line Mon = erlang:monitor(process, Blocker),
- ?line receive {Blocker, blocking} -> ok end,
- ?line [Blocker]
- = erlang:system_info(multi_scheduling_blockers),
- ?line unlink(Blocker),
- ?line exit(Blocker, kill),
- ?line receive {'DOWN', Mon, _, _, _} -> ok end,
- ?line enabled = erlang:system_info(multi_scheduling),
- ?line [] = erlang:system_info(multi_scheduling_blockers),
- ?line ok
- end,
- ?t:format("Testing blocked~n"),
- ?line erlang:system_flag(multi_scheduling, block),
- ?line case erlang:system_info(multi_scheduling) of
- enabled ->
- ?line ?t:fail(multi_scheduling_enabled);
- blocked ->
- ?line [Master] = erlang:system_info(multi_scheduling_blockers);
- disabled -> ?line ok
- end,
- ?line Ps = lists:map(
- fun (_) ->
- spawn_link(fun () ->
- run_on_schedulers(none,
- [],
- Master)
- end)
- end,
- lists:seq(1,NoSchedulers)),
- ?line receive after 1000 -> ok end,
- ?line {_, 1} = verify_all_schedulers_used({[],0}, 1),
- ?line lists:foreach(fun (P) ->
- unlink(P),
- exit(P, bang)
- end,
- Ps),
- ?line case erlang:system_flag(multi_scheduling, unblock) of
- blocked -> ?line ?t:fail(multi_scheduling_blocked);
- disabled -> ?line ok;
- enabled -> ?line ok
- end,
- erts_debug:set_internal_state(available_internal_state, true),
- %% node_and_dist_references will use emulator interal thread blocking...
- erts_debug:get_internal_state(node_and_dist_references),
- erts_debug:set_internal_state(available_internal_state, false),
- ?t:format("Testing not blocked~n"),
- ?line Ps2 = lists:map(
- fun (_) ->
- spawn_link(fun () ->
- run_on_schedulers(none,
- [],
- Master)
- end)
- end,
- lists:seq(1,NoSchedulers)),
- ?line receive after 1000 -> ok end,
- ?line {_, NoSIDs} = verify_all_schedulers_used({[],0},NoSchedulers),
- ?line lists:foreach(fun (P) ->
- unlink(P),
- exit(P, bang)
- end,
- Ps2),
- NoSIDs
- after
- NoSchedulers = erlang:system_flag(schedulers_online,
- NoSchedulersOnline),
- NoSchedulersOnline = erlang:system_info(schedulers_online)
- end,
- ?line {comment, "Number of schedulers " ++ integer_to_list(UsedScheds)}.
+ try
+ io:format("Number of schedulers configured: ~p~n", [NoSchedulers]),
+ case erlang:system_info(multi_scheduling) of
+ blocked ->
+ ct:fail(multi_scheduling_blocked);
+ disabled ->
+ ok;
+ enabled ->
+ io:format("Testing blocking process exit~n"),
+ BF = fun () ->
+ blocked = erlang:system_flag(multi_scheduling,
+ block),
+ Master ! {self(), blocking},
+ receive after infinity -> ok end
+ end,
+ Blocker = spawn_link(BF),
+ Mon = erlang:monitor(process, Blocker),
+ receive {Blocker, blocking} -> ok end,
+ [Blocker]
+ = erlang:system_info(multi_scheduling_blockers),
+ unlink(Blocker),
+ exit(Blocker, kill),
+ receive {'DOWN', Mon, _, _, _} -> ok end,
+ enabled = erlang:system_info(multi_scheduling),
+ [] = erlang:system_info(multi_scheduling_blockers),
+ ok
+ end,
+ io:format("Testing blocked~n"),
+ erlang:system_flag(multi_scheduling, block),
+ case erlang:system_info(multi_scheduling) of
+ enabled ->
+ ct:fail(multi_scheduling_enabled);
+ blocked ->
+ [Master] = erlang:system_info(multi_scheduling_blockers);
+ disabled -> ok
+ end,
+ Ps = lists:map(
+ fun (_) ->
+ spawn_link(fun () ->
+ run_on_schedulers(none,
+ [],
+ Master)
+ end)
+ end,
+ lists:seq(1,NoSchedulers)),
+ receive after 1000 -> ok end,
+ {_, 1} = verify_all_schedulers_used({[],0}, 1),
+ lists:foreach(fun (P) ->
+ unlink(P),
+ exit(P, bang)
+ end, Ps),
+ case erlang:system_flag(multi_scheduling, unblock) of
+ blocked -> ct:fail(multi_scheduling_blocked);
+ disabled -> ok;
+ enabled -> ok
+ end,
+ erts_debug:set_internal_state(available_internal_state, true),
+ %% node_and_dist_references will use emulator interal thread blocking...
+ erts_debug:get_internal_state(node_and_dist_references),
+ erts_debug:set_internal_state(available_internal_state, false),
+ io:format("Testing not blocked~n"),
+ Ps2 = lists:map(
+ fun (_) ->
+ spawn_link(fun () ->
+ run_on_schedulers(none,
+ [],
+ Master)
+ end)
+ end,
+ lists:seq(1,NoSchedulers)),
+ receive after 1000 -> ok end,
+ {_, NoSIDs} = verify_all_schedulers_used({[],0},NoSchedulers),
+ lists:foreach(fun (P) ->
+ unlink(P),
+ exit(P, bang)
+ end, Ps2),
+ NoSIDs
+ after
+ NoSchedulers = erlang:system_flag(schedulers_online,
+ NoSchedulersOnline),
+ NoSchedulersOnline = erlang:system_info(schedulers_online)
+ end,
+ {comment, "Number of schedulers " ++ integer_to_list(UsedScheds)}.
run_on_schedulers(LastSID, SIDs, ReportTo) ->
@@ -198,66 +167,56 @@ wait_on_used_scheduler({SIDs, SIDsLen} = State) ->
true ->
wait_on_used_scheduler(State);
false ->
- ?t:format("Scheduler ~p used~n", [SID]),
+ io:format("Scheduler ~p used~n", [SID]),
{[SID|SIDs], SIDsLen+1}
end
end.
verify_all_schedulers_used({UsedSIDs, UsedSIDsLen} = State, NoSchedulers) ->
- ?line case NoSchedulers of
+ case NoSchedulers of
UsedSIDsLen ->
- ?line State;
+ State;
NoSchdlrs when NoSchdlrs < UsedSIDsLen ->
- ?line ?t:fail({more_schedulers_used_than_exist,
+ ct:fail({more_schedulers_used_than_exist,
{existing_schedulers, NoSchdlrs},
{used_schedulers, UsedSIDsLen},
{used_scheduler_ids, UsedSIDs}});
_ ->
- ?line NewState = wait_on_used_scheduler(State),
- ?line verify_all_schedulers_used(NewState, NoSchedulers)
+ NewState = wait_on_used_scheduler(State),
+ verify_all_schedulers_used(NewState, NoSchedulers)
end.
-node_container_refc_check(doc) -> [];
-node_container_refc_check(suite) -> [];
node_container_refc_check(Config) when is_list(Config) ->
- ?line node_container_SUITE:node_container_refc_check(node()),
- ?line ok.
+ node_container_SUITE:node_container_refc_check(node()),
+ ok.
-long_timers(doc) ->
- [];
-long_timers(suite) ->
- [];
long_timers(Config) when is_list(Config) ->
- ?line ok = long_timers_test:check_result().
+ ok = long_timers_test:check_result().
-pollset_size(doc) ->
- [];
-pollset_size(suite) ->
- [];
pollset_size(Config) when is_list(Config) ->
- ?line Name = pollset_size_testcase_initial_state_holder,
- ?line Mon = erlang:monitor(process, Name),
- ?line (catch Name ! {get_initial_check_io_result, self()}),
- ?line InitChkIo = receive
+ Name = pollset_size_testcase_initial_state_holder,
+ Mon = erlang:monitor(process, Name),
+ (catch Name ! {get_initial_check_io_result, self()}),
+ InitChkIo = receive
{initial_check_io_result, ICIO} ->
- ?line erlang:demonitor(Mon, [flush]),
- ?line ICIO;
+ erlang:demonitor(Mon, [flush]),
+ ICIO;
{'DOWN', Mon, _, _, Reason} ->
- ?line ?t:fail({non_existing, Name, Reason})
+ ct:fail({non_existing, Name, Reason})
end,
- ?line FinChkIo = get_check_io_info(),
- ?line io:format("Initial: ~p~nFinal: ~p~n", [InitChkIo, FinChkIo]),
- ?line InitPollsetSize = lists:keysearch(total_poll_set_size, 1, InitChkIo),
- ?line FinPollsetSize = lists:keysearch(total_poll_set_size, 1, FinChkIo),
+ FinChkIo = get_check_io_info(),
+ io:format("Initial: ~p~nFinal: ~p~n", [InitChkIo, FinChkIo]),
+ InitPollsetSize = lists:keysearch(total_poll_set_size, 1, InitChkIo),
+ FinPollsetSize = lists:keysearch(total_poll_set_size, 1, FinChkIo),
HasGethost = case has_gethost() of true -> 1; _ -> 0 end,
- ?line case InitPollsetSize =:= FinPollsetSize of
+ case InitPollsetSize =:= FinPollsetSize of
true ->
case InitPollsetSize of
{value, {total_poll_set_size, Size}} ->
- ?line {comment,
+ {comment,
"Pollset size: " ++ integer_to_list(Size)};
_ ->
- ?line {skipped,
+ {skipped,
"Pollset size information not available"}
end;
false ->
@@ -266,27 +225,23 @@ pollset_size(Config) when is_list(Config) ->
%% that is ok as long as there are at least 2
%% descriptors (dist listen socket and
%% epmd socket) in the pollset.
- ?line {value, {total_poll_set_size, InitSize}}
+ {value, {total_poll_set_size, InitSize}}
= InitPollsetSize,
- ?line {value, {total_poll_set_size, FinSize}}
+ {value, {total_poll_set_size, FinSize}}
= FinPollsetSize,
- ?line true = FinSize < (InitSize + HasGethost),
- ?line true = 2 =< FinSize,
- ?line {comment,
+ true = FinSize < (InitSize + HasGethost),
+ true = 2 =< FinSize,
+ {comment,
"Start pollset size: "
++ integer_to_list(InitSize)
++ " End pollset size: "
++ integer_to_list(FinSize)}
end.
-check_io_debug(doc) ->
- [];
-check_io_debug(suite) ->
- [];
check_io_debug(Config) when is_list(Config) ->
- ?line case lists:keysearch(name, 1, erlang:system_info(check_io)) of
- {value, {name, erts_poll}} -> ?line check_io_debug_test();
- _ -> ?line {skipped, "Not implemented in this emulator"}
+ case lists:keysearch(name, 1, erlang:system_info(check_io)) of
+ {value, {name, erts_poll}} -> check_io_debug_test();
+ _ -> {skipped, "Not implemented in this emulator"}
end.
check_io_debug_test() ->
@@ -309,8 +264,8 @@ check_io_debug_test() ->
%% port returns an EAGAIN
ok
end,
- ?line 0 = NoDrvEvStructs,
- ?line ok.
+ 0 = NoDrvEvStructs,
+ ok.
has_gethost() ->
has_gethost(erlang:ports()).
@@ -356,6 +311,3 @@ get_check_io_info() ->
receive after 100 -> ok end,
get_check_io_info()
end.
-
-
-
diff --git a/erts/emulator/utils/beam_makeops b/erts/emulator/utils/beam_makeops
index f805e7cc64..4407f7e289 100755
--- a/erts/emulator/utils/beam_makeops
+++ b/erts/emulator/utils/beam_makeops
@@ -2,7 +2,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.
@@ -48,7 +48,7 @@ $pack_shift[4] = ['0', 'BEAM_LOOSE_SHIFT', # Only for 64 bit wordsize
'(3*BEAM_LOOSE_SHIFT)'];
$pack_mask[2] = ['BEAM_LOOSE_MASK', $WHOLE_WORD];
-$pack_mask[3] = ['BEAM_TIGHT_MASK', 'BEAM_TIGHT_MASK', $WHOLE_WORD];
+$pack_mask[3] = ['BEAM_TIGHT_MASK', 'BEAM_TIGHT_MASK', 'BEAM_TIGHT_MASK'];
$pack_mask[4] = ['BEAM_LOOSE_MASK', # Only for 64 bit wordsize
'BEAM_LOOSE_MASK',
'BEAM_LOOSE_MASK',
@@ -113,7 +113,6 @@ my @if_line;
#
my $te_max_vars = 0; # Max number of variables ever needed.
my %gen_transform;
-my %min_window;
my %match_engine_ops; # All opcodes for the match engine.
my %gen_transform_offset;
my @transformations;
@@ -252,6 +251,7 @@ $args_per_word[5] = 3;
$args_per_word[6] = 3;
if ($wordsize == 64) {
+ $pack_mask[3] = ['BEAM_TIGHT_MASK', 'BEAM_TIGHT_MASK', $WHOLE_WORD];
$args_per_word[4] = 4;
}
@@ -382,7 +382,6 @@ while (<>) {
$gen_arity{$name} = $arity;
$gen_to_spec{"$name/$arity"} = undef;
$num_specific{"$name/$arity"} = 0;
- $min_window{"$name/$arity"} = 255;
$obsolete[$op_num] = defined $obsolete;
} else { # Unnumbered generic operation.
push(@unnumbered_generic, [$name, $arity]);
@@ -440,7 +439,6 @@ $num_file_opcodes = @gen_opname;
$gen_arity{$name} = $arity;
$gen_to_spec{"$name/$arity"} = undef;
$num_specific{"$name/$arity"} = 0;
- $min_window{"$name/$arity"} = 255;
}
}
@@ -607,7 +605,7 @@ sub emulator_output {
$is_transformed{$name,$arity} or
error("instruction $key has no specific instruction");
$spec_op = -1 unless defined $spec_op;
- &init_item($name, $arity, $spec_op, $num_specific, $tr, $min_window{$key});
+ &init_item($name, $arity, $spec_op, $num_specific, $tr);
}
}
print "};\n";
@@ -627,19 +625,25 @@ sub emulator_output {
print "#define NUM_SPECIFIC_OPS ", scalar(@op_to_name), "\n";
print "#define SCRATCH_X_REG 1023\n";
print "\n";
- print "#ifdef ARCH_64\n";
- print "# define BEAM_WIDE_MASK 0xFFFFUL\n";
- print "# define BEAM_LOOSE_MASK 0xFFFFUL\n";
- print "# define BEAM_TIGHT_MASK 0xFFFFUL\n";
- print "# define BEAM_WIDE_SHIFT 32\n";
- print "# define BEAM_LOOSE_SHIFT 16\n";
- print "# define BEAM_TIGHT_SHIFT 16\n";
- print "#else\n";
- print "# define BEAM_LOOSE_MASK 0xFFF\n";
- print "# define BEAM_TIGHT_MASK 0xFFC\n";
- print "# define BEAM_LOOSE_SHIFT 16\n";
- print "# define BEAM_TIGHT_SHIFT 10\n";
- print "#endif\n";
+ if ($wordsize == 32) {
+ print "#if defined(ARCH_64)\n";
+ print qq[ #error "32-bit architecture assumed, but ARCH_64 is defined"\n];
+ print "#endif\n";
+ print "#define BEAM_LOOSE_MASK 0xFFF\n";
+ print "#define BEAM_TIGHT_MASK 0xFFC\n";
+ print "#define BEAM_LOOSE_SHIFT 16\n";
+ print "#define BEAM_TIGHT_SHIFT 10\n";
+ } elsif ($wordsize == 64) {
+ print "#if !defined(ARCH_64)\n";
+ print qq[ #error "64-bit architecture assumed, but ARCH_64 not defined"\n];
+ print "#endif\n";
+ print "#define BEAM_WIDE_MASK 0xFFFFUL\n";
+ print "#define BEAM_LOOSE_MASK 0xFFFFUL\n";
+ print "#define BEAM_TIGHT_MASK 0xFFFFUL\n";
+ print "#define BEAM_WIDE_SHIFT 32\n";
+ print "#define BEAM_LOOSE_SHIFT 16\n";
+ print "#define BEAM_TIGHT_SHIFT 16\n";
+ }
print "\n";
#
@@ -1405,8 +1409,7 @@ sub tr_gen {
foreach $ref (@g) {
my($line, $orig_transform, $from_ref, $to_ref) = @$ref;
- my $used_ref = used_vars($from_ref, $to_ref);
- my $so_far = tr_gen_from($line, $used_ref, @$from_ref);
+ my $so_far = tr_gen_from($line, @$from_ref);
tr_gen_to($line, $orig_transform, $so_far, @$to_ref);
}
@@ -1457,58 +1460,14 @@ sub tr_gen {
print "};\n\n";
}
-sub used_vars {
- my($from_ref,$to_ref) = @_;
- my %used;
- my %seen;
-
- foreach my $ref (@$from_ref) {
- my($name,$arity,@ops) = @$ref;
- if ($name =~ /^[.]/) {
- foreach my $var (@ops) {
- $used{$var} = 1;
- }
- } else {
- # Any variable that is used at least twice on the
- # left-hand side is used. (E.g. "move R R".)
- foreach my $op (@ops) {
- my($var, $type, $type_val) = @$op;
- next if $var eq '';
- $used{$var} = 1 if $seen{$var};
- $seen{$var} = 1;
- }
- }
- }
-
- foreach my $ref (@$to_ref) {
- my($name, $arity, @ops) = @$ref;
- if ($name =~ /^[.]/) {
- foreach my $var (@ops) {
- $used{$var} = 1;
- }
- } else {
- foreach my $op (@ops) {
- my($var, $type, $type_val) = @$op;
- next if $var eq '';
- $used{$var} = 1;
- }
- }
- }
- \%used;
-}
-
sub tr_gen_from {
- my($line,$used_ref,@tr) = @_;
+ my($line,@tr) = @_;
my(%var) = ();
my(%var_type);
my($var_num) = 0;
my(@code);
- my($min_window) = 0;
- my(@fix_rest_args);
- my(@fix_pred_funcs);
my($op, $ref); # Loop variables.
my $where = "left side of transformation in line $line: ";
- my %var_used = %$used_ref;
my $may_fail = 0;
my $is_first = 1;
@@ -1530,8 +1489,20 @@ sub tr_gen_from {
my $var;
my(@args);
- push(@fix_pred_funcs, scalar(@code));
- push(@code, [$name, @ops]);
+ foreach $var (@ops) {
+ error($where, "variable '$var' unbound")
+ unless defined $var{$var};
+ if ($var_type{$var} eq 'scalar') {
+ push(@args, "var[$var{$var}]");
+ } else {
+ push(@args, "rest_args");
+ }
+ }
+ my $pi = tr_next_index(\@pred_table, \%pred_table, $name, @args);
+ my $op = make_op("$name()", 'pred', $pi);
+ my @slots = grep(/^\d+/, map { $var{$_} } @ops);
+ op_slot_usage($op, @slots);
+ push(@code, $op);
next;
}
@@ -1544,7 +1515,6 @@ sub tr_gen_from {
$opnum = $gen_opnum{$name,$arity};
push(@code, make_op("$name/$arity", 'next_instr', $opnum));
- $min_window++;
foreach $op (@ops) {
my($var, $type, $type_val, $cond, $val) = @$op;
my $ignored_var = "$var (ignored)";
@@ -1593,15 +1563,21 @@ sub tr_gen_from {
if (defined $var{$var}) {
$ignored_var = '';
$may_fail = 1;
- push(@code, &make_op($var, 'is_same_var', $var{$var}));
+ my $op = make_op($var, 'is_same_var', $var{$var});
+ op_slot_usage($op, $var{$var});
+ push(@code, $op);
} elsif ($type eq '*') {
- #
- # Reserve a hole for a 'rest_args' instruction.
- #
+ foreach my $type (values %var_type) {
+ error("only one use of a '*' variable is " .
+ "allowed on the left hand side of " .
+ "a transformation")
+ if $type eq 'array';
+ }
$ignored_var = '';
- push(@fix_rest_args, scalar(@code));
- push(@code, $var);
- } elsif ($var_used{$var}) {
+ $var{$var} = 'unnumbered';
+ $var_type{$var} = 'array';
+ push(@code, make_op($var, 'rest_args'));
+ } else {
$ignored_var = '';
$var_type{$var} = 'scalar';
$var{$var} = $var_num;
@@ -1629,46 +1605,14 @@ sub tr_gen_from {
#
push(@code, make_op($may_fail ? '' : 'always reached', 'commit'));
- #
- # If there is an rest_args instruction, we must insert its correct
- # variable number (higher than any other).
- #
- my $index;
- &error("only one use of a '*' variable is allowed on the left hand side of a transformation")
- if @fix_rest_args > 1;
- foreach $index (@fix_rest_args) {
- my $var = $code[$index];
- $var{$var} = $var_num++;
- $var_type{$var} = 'array';
- splice(@code, $index, 1, &make_op($var, 'rest_args', $var{$var}));
- }
-
- foreach $index (@fix_pred_funcs) {
- my($name, @ops) = @{$code[$index]};
- my(@args);
- my $var;
-
- foreach $var (@ops) {
- &error($where, "variable '$var' unbound")
- unless defined $var{$var};
- if ($var_type{$var} eq 'scalar') {
- push(@args, "var[$var{$var}]");
- } else {
- push(@args, "var+$var{$var}");
- }
- }
- my $pi = tr_next_index(\@pred_table, \%pred_table, $name, @args);
- splice(@code, $index, 1, make_op("$name()", 'pred', $pi));
- }
-
$te_max_vars = $var_num
if $te_max_vars < $var_num;
- [$min_window, \%var, \%var_type, \@code];
+ [\%var, \%var_type, \@code];
}
sub tr_gen_to {
my($line, $orig_transform, $so_far, @tr) = @_;
- my($min_window, $var_ref, $var_type_ref, $code_ref) = @$so_far;
+ my($var_ref, $var_type_ref, $code_ref) = @$so_far;
my(%var) = %$var_ref;
my(%var_type) = %$var_type_ref;
my(@code) = @$code_ref;
@@ -1697,13 +1641,16 @@ sub tr_gen_to {
if ($var_type{$var} eq 'scalar') {
push(@args, "var[$var{$var}]");
} else {
- push(@args, "var+$var{$var}");
+ push(@args, "rest_args");
}
}
pop(@code); # Get rid of 'commit' instruction
my $index = tr_next_index(\@call_table, \%call_table,
$name, @args);
- push(@code, make_op("$name()", 'call_end', $index));
+ my $op = make_op("$name()", 'call_end', $index);
+ my @slots = grep(/^\d+/, map { $var{$_} } @ops);
+ op_slot_usage($op, @slots);
+ push(@code, $op);
last;
}
@@ -1725,11 +1672,13 @@ sub tr_gen_to {
my($var, $type, $type_val) = @$op;
if ($type eq '*') {
- push(@code, make_op($var, 'store_rest_args', $var{$var}));
+ push(@code, make_op($var, 'store_rest_args'));
} elsif ($var ne '') {
&error($where, "variable '$var' unbound")
unless defined $var{$var};
- push(@code, &make_op($var, 'store_var_next_arg', $var{$var}));
+ my $op = make_op($var, 'store_var_next_arg', $var{$var});
+ op_slot_usage($op, $var{$var});
+ push(@code, $op);
} elsif ($type ne '') {
push(@code, &make_op('', 'store_type', "TAG_$type"));
if ($type_val) {
@@ -1744,6 +1693,10 @@ sub tr_gen_to {
push(@code, make_op('', 'end'))
unless is_instr($code[$#code], 'call_end');
+ tr_maybe_keep(\@code);
+ tr_maybe_rename(\@code);
+ tr_remove_unused(\@code);
+
#
# Chain together all codes segments having the same first operation.
#
@@ -1752,8 +1705,6 @@ sub tr_gen_to {
my($dummy, $arity);
($dummy, $op, $arity) = @$first;
my($comment) = "\n/*\n * Line $line:\n * $orig_transform\n */\n\n";
- $min_window{$key} = $min_window
- if $min_window{$key} > $min_window;
my $prev_last;
$prev_last = pop(@{$gen_transform{$key}})
@@ -1771,6 +1722,148 @@ sub tr_gen_to {
push(@{$gen_transform{$key}}, @code),
}
+sub tr_maybe_keep {
+ my($ref) = @_;
+ my @last_instr;
+ my $pos;
+ my $reused_instr;
+
+ for (my $i = 0; $i < @$ref; $i++) {
+ my $instr = $$ref[$i];
+ my($size, $instr_ref, $comment) = @$instr;
+ my($op, @args) = @$instr_ref;
+ if ($op eq 'next_instr') {
+ @last_instr = ($args[0]);
+ } elsif ($op eq 'set_var_next_arg') {
+ push @last_instr, $args[0];
+ } elsif ($op eq 'next_arg') {
+ push @last_instr, 'ignored';
+ } elsif ($op eq 'new_instr') {
+ unless (defined $pos) {
+ # 'new_instr' immediately after 'commit'.
+ $reused_instr = $args[0];
+ return unless shift(@last_instr) == $reused_instr;
+ $pos = $i - 1;
+ } else {
+ # Second 'new_instr' after 'commit'. The instructions
+ # from $pos up to and including $i - 1 rebuilds the
+ # existing instruction exactly.
+ my $name = $gen_opname[$reused_instr];
+ my $arity = $gen_arity[$reused_instr];
+ my $reuse = make_op("$name/$arity", 'keep');
+ splice @$ref, $pos, $i-$pos, ($reuse);
+ return;
+ }
+ } elsif ($op eq 'store_var_next_arg') {
+ return unless shift(@last_instr) eq $args[0];
+ } elsif (defined $pos) {
+ return;
+ }
+ }
+}
+
+sub tr_maybe_rename {
+ my($ref) = @_;
+ my $s = 'left';
+ my $a = 0;
+ my $num_args = 0;
+ my $new_instr;
+ my $first;
+ my $i;
+
+ for ($i = 1; $i < @$ref; $i++) {
+ my $instr = $$ref[$i];
+ my($size, $instr_ref, $comment) = @$instr;
+ my($op, @args) = @$instr_ref;
+
+ if ($s eq 'left') {
+ if ($op eq 'set_var_next_arg') {
+ if ($num_args == $a and $args[0] == $a) {
+ $num_args++;
+ }
+ $a++;
+ } elsif ($op eq 'next_arg') {
+ $a++;
+ } elsif ($op eq 'commit') {
+ $a = 0;
+ $first = $i;
+ $s = 'committed';
+ } elsif ($op eq 'next_instr') {
+ return;
+ }
+ } elsif ($s eq 'committed') {
+ if ($op eq 'new_instr') {
+ $new_instr = $args[0];
+ $a = 0;
+ $s = 'right';
+ } else {
+ return;
+ }
+ } elsif ($s eq 'right') {
+ if ($op eq 'store_var_next_arg' && $args[0] == $a) {
+ $a++;
+ } elsif ($op eq 'end' && $a <= $num_args) {
+ my $name = $gen_opname[$new_instr];
+ my $arity = $gen_arity[$new_instr];
+ my $new_op = make_op("$name/$arity", 'rename', $new_instr);
+ splice @$ref, $first, $i-$first+1, ($new_op);
+ return;
+ } else {
+ return;
+ }
+ }
+ }
+}
+
+sub tr_remove_unused {
+ my($ref) = @_;
+ my %used;
+
+ # Collect all used variables.
+ for my $instr (@$ref) {
+ my $uref = $$instr[3];
+ for my $slot (@$uref) {
+ $used{$slot} = 1;
+ }
+ }
+
+ # Replace 'set_var_next_arg' with 'next_arg' if the variable
+ # is never used.
+ for my $instr (@$ref) {
+ my($size, $instr_ref, $comment) = @$instr;
+ my($op, @args) = @$instr_ref;
+ if ($op eq 'set_var_next_arg') {
+ my $var = $args[0];
+ next if $used{$var};
+ $instr = make_op("$comment (ignored)", 'next_arg');
+ }
+ }
+
+ # Delete a sequence of 'next_arg' instructions when they are
+ # redundant before instructions such as 'commit'.
+ my @opcode;
+ my %ending = (call_end => 1,
+ commit => 1,
+ next_instr => 1,
+ pred => 1,
+ rename => 1,
+ keep => 1);
+ for (my $i = 0; $i < @$ref; $i++) {
+ my $instr = $$ref[$i];
+ my($size, $instr_ref, $comment) = @$instr;
+ my($opcode) = @$instr_ref;
+
+ if ($ending{$opcode}) {
+ my $first = $i;
+ $first-- while $first > 0 and $opcode[$first-1] eq 'next_arg';
+ my $n = $i - $first;
+ splice @$ref, $first, $n;
+ $i -= $n;
+ }
+ $opcode[$i] = $opcode;
+ }
+}
+
sub tr_code_len {
my($sum) = 0;
my($ref);
@@ -1783,7 +1876,12 @@ sub tr_code_len {
sub make_op {
my($comment, @op) = @_;
- [scalar(@op), [@op], $comment];
+ [scalar(@op), [@op], $comment, []];
+}
+
+sub op_slot_usage {
+ my($op_ref, @slots) = @_;
+ $$op_ref[3] = \@slots;
}
sub is_instr {
diff --git a/erts/emulator/utils/beam_strip b/erts/emulator/utils/beam_strip
index 0e7bc46b63..2a2d761940 100755
--- a/erts/emulator/utils/beam_strip
+++ b/erts/emulator/utils/beam_strip
@@ -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/erts/emulator/utils/count b/erts/emulator/utils/count
index c4dd42c949..e0a5e8bb9a 100755
--- a/erts/emulator/utils/count
+++ b/erts/emulator/utils/count
@@ -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/erts/emulator/utils/loaded b/erts/emulator/utils/loaded
index ab77ffdb6c..5e0a29c014 100644
--- a/erts/emulator/utils/loaded
+++ b/erts/emulator/utils/loaded
@@ -2,7 +2,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/erts/emulator/utils/make_alloc_types b/erts/emulator/utils/make_alloc_types
index 925b9d5810..33afe139a2 100755
--- a/erts/emulator/utils/make_alloc_types
+++ b/erts/emulator/utils/make_alloc_types
@@ -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/erts/emulator/utils/make_compiler_flags b/erts/emulator/utils/make_compiler_flags
index d75ea0817e..47491a4832 100755
--- a/erts/emulator/utils/make_compiler_flags
+++ b/erts/emulator/utils/make_compiler_flags
@@ -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/erts/emulator/utils/make_driver_tab b/erts/emulator/utils/make_driver_tab
index 3203c7110a..ffb5f58ebf 100755
--- a/erts/emulator/utils/make_driver_tab
+++ b/erts/emulator/utils/make_driver_tab
@@ -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.
@@ -31,7 +31,7 @@ my $file = "";
my $nif = "";
my @emu_drivers = ();
my @static_drivers = ();
-my @nifs = ();
+my @static_nifs = ();
my $mode = 1;
while (@ARGV) {
@@ -55,9 +55,14 @@ while (@ARGV) {
push(@static_drivers, $d);
}
if ($mode == 2) {
- push(@nifs, $d);
+ push(@static_nifs, $d);
}
next;
+ } elsif ($mode == 2) {
+ $d = basename $d;
+ $d =~ s/_nif(\..*|)$//; # strip nif.* or just nif
+ push(@static_nifs, $d);
+ next;
}
$d = basename $d;
$d =~ s/drv(\..*|)$//; # strip drv.* or just drv
@@ -120,7 +125,7 @@ typedef struct ErtsStaticNifEntry_ {
EOF
# prototypes
-foreach (@nifs) {
+foreach (@static_nifs) {
my $d = ${_};
$d =~ s/\.debug//; # strip .debug
print "void *".$d."_nif_init(void);\n";
@@ -129,7 +134,7 @@ foreach (@nifs) {
# The array itself
print "static ErtsStaticNifEntry static_nif_tab[] =\n{\n";
-foreach (@nifs) {
+foreach (@static_nifs) {
my $d = ${_};
$d =~ s/\.debug//; # strip .debug
print "{\"${_}\",&".$d."_nif_init},\n";
diff --git a/erts/emulator/utils/make_preload b/erts/emulator/utils/make_preload
index 62c4419589..f489bc2a39 100755
--- a/erts/emulator/utils/make_preload
+++ b/erts/emulator/utils/make_preload
@@ -2,7 +2,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/erts/emulator/utils/make_tables b/erts/emulator/utils/make_tables
index 233e95f176..c158778f43 100755
--- a/erts/emulator/utils/make_tables
+++ b/erts/emulator/utils/make_tables
@@ -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/erts/emulator/utils/make_version b/erts/emulator/utils/make_version
index 37bdff181a..e02a42c66d 100755
--- a/erts/emulator/utils/make_version
+++ b/erts/emulator/utils/make_version
@@ -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/erts/emulator/utils/mkver.c b/erts/emulator/utils/mkver.c
index 6641873712..6183246433 100644
--- a/erts/emulator/utils/mkver.c
+++ b/erts/emulator/utils/mkver.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/erts/emulator/valgrind/suppress.patched.3.6.0 b/erts/emulator/valgrind/suppress.patched.3.6.0
index 16cecf2dba..fcde4a0123 100644
--- a/erts/emulator/valgrind/suppress.patched.3.6.0
+++ b/erts/emulator/valgrind/suppress.patched.3.6.0
@@ -368,7 +368,7 @@ Memcheck:Addr4
...
fun:erts_print_scheduler_info
...
-fun:erl_exit
+fun:erts_exit
fun:broken_halt_test
fun:erts_debug_set_internal_state_2
fun:process_main
diff --git a/erts/emulator/valgrind/suppress.standard b/erts/emulator/valgrind/suppress.standard
index a1f3f82364..bb07c92fc1 100644
--- a/erts/emulator/valgrind/suppress.standard
+++ b/erts/emulator/valgrind/suppress.standard
@@ -336,7 +336,7 @@ Memcheck:Addr4
...
fun:erts_print_scheduler_info
...
-fun:erl_exit
+fun:erts_exit
fun:broken_halt_test
fun:erts_debug_set_internal_state_2
fun:process_main
diff --git a/erts/emulator/zlib/zlib.mk b/erts/emulator/zlib/zlib.mk
index 53d7badd64..3f0d64d250 100644
--- a/erts/emulator/zlib/zlib.mk
+++ b/erts/emulator/zlib/zlib.mk
@@ -4,7 +4,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/erts/epmd/Makefile b/erts/epmd/Makefile
index 25a33462ee..d3308ddedc 100644
--- a/erts/epmd/Makefile
+++ b/erts/epmd/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/erts/epmd/epmd.mk b/erts/epmd/epmd.mk
index 08245b784e..b1fd04dc04 100644
--- a/erts/epmd/epmd.mk
+++ b/erts/epmd/epmd.mk
@@ -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/erts/epmd/src/Makefile b/erts/epmd/src/Makefile
index 3e09a40566..4ae13fe05a 100644
--- a/erts/epmd/src/Makefile
+++ b/erts/epmd/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/erts/epmd/src/Makefile.in b/erts/epmd/src/Makefile.in
index 1266be44cb..da4370d5f9 100644
--- a/erts/epmd/src/Makefile.in
+++ b/erts/epmd/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/erts/epmd/src/epmd.c b/erts/epmd/src/epmd.c
index 21ce4e52b0..44e997e609 100644
--- a/erts/epmd/src/epmd.c
+++ b/erts/epmd/src/epmd.c
@@ -2,7 +2,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.
@@ -343,7 +343,7 @@ static void run_daemon(EpmdVars *g)
for (fd = 0; fd < g->max_conn ; fd++) /* close all files ... */
close(fd);
/* Syslog on linux will try to write to whatever if we dont
- inform it of that the log is closed. */
+ inform it that the log is closed. */
closelog();
/* These shouldn't be needed but for safety... */
@@ -592,8 +592,10 @@ void epmd_cleanup_exit(EpmdVars *g, int exitval)
free(g->argv);
}
#ifdef HAVE_SYSTEMD_DAEMON
- sd_notifyf(0, "STATUS=Exited.\n"
- "ERRNO=%i", exitval);
+ if (g->is_systemd){
+ sd_notifyf(0, "STATUS=Exited.\n"
+ "ERRNO=%i", exitval);
+ }
#endif /* HAVE_SYSTEMD_DAEMON */
exit(exitval);
}
diff --git a/erts/epmd/src/epmd.h b/erts/epmd/src/epmd.h
index 10483bb5a2..cffcd4ae7a 100644
--- a/erts/epmd/src/epmd.h
+++ b/erts/epmd/src/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/erts/epmd/src/epmd_cli.c b/erts/epmd/src/epmd_cli.c
index a8fe865d9a..6fd27d46ea 100644
--- a/erts/epmd/src/epmd_cli.c
+++ b/erts/epmd/src/epmd_cli.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.
@@ -136,19 +136,33 @@ void epmd_call(EpmdVars *g,int what)
static int conn_to_epmd(EpmdVars *g)
{
struct EPMD_SOCKADDR_IN address;
+ size_t salen = 0;
int connect_sock;
-
- connect_sock = socket(FAMILY, SOCK_STREAM, 0);
- if (connect_sock<0)
- goto error;
+ unsigned short sport = g->port;
+
+#if defined(EPMD6)
+ SET_ADDR6(address, in6addr_loopback, sport);
+ salen = sizeof(struct sockaddr_in6);
+
+ connect_sock = socket(AF_INET6, SOCK_STREAM, 0);
+ if (connect_sock>=0) {
+
+ if (connect(connect_sock, (struct sockaddr*)&address, salen) == 0)
+ return connect_sock;
- { /* store port number in unsigned short */
- unsigned short sport = g->port;
- SET_ADDR(address, EPMD_ADDR_LOOPBACK, sport);
+ close(connect_sock);
}
+#endif
+ SET_ADDR(address, htonl(INADDR_LOOPBACK), sport);
+ salen = sizeof(struct sockaddr_in);
- if (connect(connect_sock, (struct sockaddr*)&address, sizeof address) < 0)
+ connect_sock = socket(AF_INET, SOCK_STREAM, 0);
+ if (connect_sock<0)
goto error;
+
+ if (connect(connect_sock, (struct sockaddr*)&address, salen) < 0)
+ goto error;
+
return connect_sock;
error:
diff --git a/erts/epmd/src/epmd_int.h b/erts/epmd/src/epmd_int.h
index e222abb4b7..ed9bbdb8cd 100644
--- a/erts/epmd/src/epmd_int.h
+++ b/erts/epmd/src/epmd_int.h
@@ -2,7 +2,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.
@@ -48,6 +48,7 @@
# ifndef WINDOWS_H_INCLUDES_WINSOCK2_H
# include <winsock2.h>
# endif
+# include <ws2tcpip.h>
# include <windows.h>
# include <process.h>
#endif
@@ -114,6 +115,10 @@
# include <systemd/sd-daemon.h>
#endif /* HAVE_SYSTEMD_DAEMON */
+#if defined(HAVE_IN6) && defined(AF_INET6) && defined(HAVE_INET_PTON)
+# define EPMD6
+#endif
+
/* ************************************************************************ */
/* Replace some functions by others by making the function name a macro */
@@ -167,33 +172,53 @@
/* ************************************************************************ */
/* Macros that let us use IPv6 */
-#if defined(HAVE_IN6) && defined(AF_INET6) && defined(EPMD6)
+#if HAVE_IN6
+# if ! defined(HAVE_IN6ADDR_ANY) || ! HAVE_IN6ADDR_ANY
+# if HAVE_DECL_IN6ADDR_ANY_INIT
+static const struct in6_addr in6addr_any = { { IN6ADDR_ANY_INIT } };
+# else
+static const struct in6_addr in6addr_any =
+ { { { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } } };
+# endif /* HAVE_IN6ADDR_ANY_INIT */
+# endif /* ! HAVE_DECL_IN6ADDR_ANY */
+
+# if ! defined(HAVE_IN6ADDR_LOOPBACK) || ! HAVE_IN6ADDR_LOOPBACK
+# if HAVE_DECL_IN6ADDR_LOOPBACK_INIT
+static const struct in6_addr in6addr_loopback =
+ { { IN6ADDR_LOOPBACK_INIT } };
+# else
+static const struct in6_addr in6addr_loopback =
+ { { { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 } } };
+# endif /* HAVE_IN6ADDR_LOOPBACK_INIT */
+# endif /* ! HAVE_DECL_IN6ADDR_LOOPBACK */
+#endif /* HAVE_IN6 */
+
+#define IS_ADDR_LOOPBACK(addr) ((addr).s_addr == htonl(INADDR_LOOPBACK))
+
+#if defined(EPMD6)
-#define EPMD_SOCKADDR_IN sockaddr_in6
-#define EPMD_IN_ADDR in6_addr
-#define EPMD_S_ADDR s6_addr
-#define EPMD_ADDR_LOOPBACK in6addr_loopback.s6_addr
-#define EPMD_ADDR_ANY in6addr_any.s6_addr
+#define EPMD_SOCKADDR_IN sockaddr_storage
#define FAMILY AF_INET6
-#define SET_ADDR(dst, addr, port) do { \
- memset((char*)&(dst), 0, sizeof(dst)); \
- memcpy((char*)&(dst).sin6_addr.s6_addr, (char*)&(addr), 16); \
- (dst).sin6_family = AF_INET6; \
- (dst).sin6_flowinfo = 0; \
- (dst).sin6_port = htons(port); \
+#define SET_ADDR6(dst, addr, port) do { \
+ struct sockaddr_in6 *sa = (struct sockaddr_in6 *)&(dst); \
+ memset(sa, 0, sizeof(dst)); \
+ sa->sin6_family = AF_INET6; \
+ sa->sin6_addr = (addr); \
+ sa->sin6_port = htons(port); \
} while(0)
-#define IS_ADDR_LOOPBACK(addr) \
- (memcmp((addr).s6_addr, in6addr_loopback.s6_addr, 16) == 0)
+#define SET_ADDR(dst, addr, port) do { \
+ struct sockaddr_in *sa = (struct sockaddr_in *)&(dst); \
+ memset(sa, 0, sizeof(dst)); \
+ sa->sin_family = AF_INET; \
+ sa->sin_addr.s_addr = (addr); \
+ sa->sin_port = htons(port); \
+ } while(0)
#else /* Not IP v6 */
#define EPMD_SOCKADDR_IN sockaddr_in
-#define EPMD_IN_ADDR in_addr
-#define EPMD_S_ADDR s_addr
-#define EPMD_ADDR_LOOPBACK htonl(INADDR_LOOPBACK)
-#define EPMD_ADDR_ANY htonl(INADDR_ANY)
#define FAMILY AF_INET
#define SET_ADDR(dst, addr, port) do { \
@@ -203,8 +228,6 @@
(dst).sin_port = htons(port); \
} while(0)
-#define IS_ADDR_LOOPBACK(addr) ((addr).s_addr == htonl(INADDR_LOOPBACK))
-
#endif /* Not IP v6 */
/* ************************************************************************ */
@@ -214,8 +237,8 @@
#define EPMD_TRUE 1
/* If no activity we let select() return every IDLE_TIMEOUT second
- A file descriptor that are idle for CLOSE_TIMEOUT seconds and
- isn't a ALIVE socket is probably hanging and we close it */
+ A file descriptor that has been idle for CLOSE_TIMEOUT seconds and
+ isn't an ALIVE socket has probably hanged and should be closed */
#define IDLE_TIMEOUT 5
#define CLOSE_TIMEOUT 60
diff --git a/erts/epmd/src/epmd_srv.c b/erts/epmd/src/epmd_srv.c
index fb8cae05df..66c10a65bc 100644
--- a/erts/epmd/src/epmd_srv.c
+++ b/erts/epmd/src/epmd_srv.c
@@ -2,7 +2,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.
@@ -71,6 +71,7 @@ static time_t current_time(EpmdVars*);
static Connection *conn_init(EpmdVars*);
static int conn_open(EpmdVars*,int);
+static int conn_local_peer_check(EpmdVars*, int);
static int conn_close_fd(EpmdVars*,int);
static void node_init(EpmdVars*);
@@ -201,10 +202,11 @@ void run(EpmdVars *g)
{
struct EPMD_SOCKADDR_IN iserv_addr[MAX_LISTEN_SOCKETS];
int listensock[MAX_LISTEN_SOCKETS];
- int num_sockets;
+ int num_sockets = 0;
int i;
int opt;
unsigned short sport = g->port;
+ int bound = 0;
node_init(g);
g->conn = conn_init(g);
@@ -247,64 +249,82 @@ void run(EpmdVars *g)
if (g->addresses != NULL && /* String contains non-separator characters if: */
g->addresses[strspn(g->addresses," ,")] != '\000')
{
- char *tmp;
- char *token;
- int loopback_ok = 0;
+ char *tmp = NULL;
+ char *token = NULL;
+
+ /* Always listen on the loopback. */
+ SET_ADDR(iserv_addr[num_sockets],htonl(INADDR_LOOPBACK),sport);
+ num_sockets++;
+#if defined(EPMD6)
+ SET_ADDR6(iserv_addr[num_sockets],in6addr_loopback,sport);
+ num_sockets++;
+#endif
- if ((tmp = (char *)malloc(strlen(g->addresses) + 1)) == NULL)
+ if ((tmp = strdup(g->addresses)) == NULL)
{
dbg_perror(g,"cannot allocate memory");
epmd_cleanup_exit(g,1);
}
- strcpy(tmp,g->addresses);
- for(token = strtok(tmp,", "), num_sockets = 0;
+ for(token = strtok(tmp,", ");
token != NULL;
- token = strtok(NULL,", "), num_sockets++)
+ token = strtok(NULL,", "))
{
- struct EPMD_IN_ADDR addr;
-#ifdef HAVE_INET_PTON
- int ret;
+ struct in_addr addr;
+#if defined(EPMD6)
+ struct in6_addr addr6;
+ struct sockaddr_storage *sa = &iserv_addr[num_sockets];
- if ((ret = inet_pton(FAMILY,token,&addr)) == -1)
+ if (inet_pton(AF_INET6,token,&addr6) == 1)
{
- dbg_perror(g,"cannot convert IP address to network format");
- epmd_cleanup_exit(g,1);
+ SET_ADDR6(iserv_addr[num_sockets],addr6,sport);
+ }
+ else if (inet_pton(AF_INET,token,&addr) == 1)
+ {
+ SET_ADDR(iserv_addr[num_sockets],addr.s_addr,sport);
+ }
+ else
+#else
+ if ((addr.s_addr = inet_addr(token)) != INADDR_NONE)
+ {
+ SET_ADDR(iserv_addr[num_sockets],addr.s_addr,sport);
}
- else if (ret == 0)
-#elif !defined(EPMD6)
- if ((addr.EPMD_S_ADDR = inet_addr(token)) == INADDR_NONE)
+ else
#endif
{
dbg_tty_printf(g,0,"cannot parse IP address \"%s\"",token);
epmd_cleanup_exit(g,1);
}
+#if defined(EPMD6)
+ if (sa->ss_family == AF_INET6 && IN6_IS_ADDR_LOOPBACK(&addr6))
+ continue;
+
+ if (sa->ss_family == AF_INET)
+#endif
if (IS_ADDR_LOOPBACK(addr))
- loopback_ok = 1;
+ continue;
- if (num_sockets - loopback_ok == MAX_LISTEN_SOCKETS - 1)
+ num_sockets++;
+
+ if (num_sockets >= MAX_LISTEN_SOCKETS)
{
dbg_tty_printf(g,0,"cannot listen on more than %d IP addresses",
MAX_LISTEN_SOCKETS);
epmd_cleanup_exit(g,1);
}
-
- SET_ADDR(iserv_addr[num_sockets],addr.EPMD_S_ADDR,sport);
}
free(tmp);
-
- if (!loopback_ok)
- {
- SET_ADDR(iserv_addr[num_sockets],EPMD_ADDR_LOOPBACK,sport);
- num_sockets++;
- }
}
else
{
- SET_ADDR(iserv_addr[0],EPMD_ADDR_ANY,sport);
- num_sockets = 1;
+ SET_ADDR(iserv_addr[num_sockets],htonl(INADDR_ANY),sport);
+ num_sockets++;
+#if defined(EPMD6)
+ SET_ADDR6(iserv_addr[num_sockets],in6addr_any,sport);
+ num_sockets++;
+#endif
}
#ifdef HAVE_SYSTEMD_DAEMON
}
@@ -335,13 +355,39 @@ void run(EpmdVars *g)
#endif /* HAVE_SYSTEMD_DAEMON */
for (i = 0; i < num_sockets; i++)
{
- if ((listensock[i] = socket(FAMILY,SOCK_STREAM,0)) < 0)
+ struct sockaddr *sa = (struct sockaddr *)&iserv_addr[i];
+#if defined(EPMD6)
+ size_t salen = (sa->sa_family == AF_INET6 ?
+ sizeof(struct sockaddr_in6) :
+ sizeof(struct sockaddr_in));
+#else
+ size_t salen = sizeof(struct sockaddr_in);
+#endif
+
+ if ((listensock[i] = socket(sa->sa_family,SOCK_STREAM,0)) < 0)
{
- dbg_perror(g,"error opening stream socket");
+ switch (errno) {
+ case EAFNOSUPPORT:
+ case EPROTONOSUPPORT:
+ continue;
+ default:
+ dbg_perror(g,"error opening stream socket");
+ epmd_cleanup_exit(g,1);
+ }
+ }
+ g->listenfd[bound++] = listensock[i];
+
+#if HAVE_DECL_IPV6_V6ONLY
+ opt = 1;
+ if (sa->sa_family == AF_INET6 &&
+ setsockopt(listensock[i],IPPROTO_IPV6,IPV6_V6ONLY,&opt,
+ sizeof(opt)) <0)
+ {
+ dbg_perror(g,"can't set IPv6 only socket option");
epmd_cleanup_exit(g,1);
}
- g->listenfd[i] = listensock[i];
-
+#endif
+
/*
* Note that we must not enable the SO_REUSEADDR on Windows,
* because addresses will be reused even if they are still in use.
@@ -373,8 +419,7 @@ void run(EpmdVars *g)
dbg_perror(g,"failed to set non-blocking mode of listening socket %d",
listensock[i]);
- if (bind(listensock[i], (struct sockaddr*) &iserv_addr[i],
- sizeof(iserv_addr[i])) < 0)
+ if (bind(listensock[i], (struct sockaddr*) &iserv_addr[i], salen) < 0)
{
if (errno == EADDRINUSE)
{
@@ -395,11 +440,18 @@ void run(EpmdVars *g)
}
select_fd_set(g, listensock[i]);
}
+ if (bound == 0) {
+ dbg_perror(g,"unable to bind any address");
+ epmd_cleanup_exit(g,1);
+ }
+ num_sockets = bound;
#ifdef HAVE_SYSTEMD_DAEMON
}
- sd_notifyf(0, "READY=1\n"
- "STATUS=Processing port mapping requests...\n"
- "MAINPID=%lu", (unsigned long) getpid());
+ if (g->is_systemd) {
+ sd_notifyf(0, "READY=1\n"
+ "STATUS=Processing port mapping requests...\n"
+ "MAINPID=%lu", (unsigned long) getpid());
+ }
#endif /* HAVE_SYSTEMD_DAEMON */
dbg_tty_printf(g,2,"entering the main select() loop");
@@ -439,8 +491,8 @@ void run(EpmdVars *g)
}
for (i = 0; i < num_sockets; i++)
- if (FD_ISSET(listensock[i],&read_mask)) {
- if (do_accept(g, listensock[i]) && g->active_conn < g->max_conn) {
+ if (FD_ISSET(g->listenfd[i],&read_mask)) {
+ if (do_accept(g, g->listenfd[i]) && g->active_conn < g->max_conn) {
/*
* The accept() succeeded, and we have at least one file
* descriptor still free, which means that another accept()
@@ -1000,15 +1052,6 @@ static int conn_open(EpmdVars *g,int fd)
for (i = 0; i < g->max_conn; i++) {
if (g->conn[i].open == EPMD_FALSE) {
- struct sockaddr_in si;
- struct sockaddr_in di;
-#ifdef HAVE_SOCKLEN_T
- socklen_t st;
-#else
- int st;
-#endif
- st = sizeof(si);
-
g->active_conn++;
s = &g->conn[i];
@@ -1019,20 +1062,7 @@ static int conn_open(EpmdVars *g,int fd)
s->open = EPMD_TRUE;
s->keep = EPMD_FALSE;
- /* Determine if connection is from localhost */
- if (getpeername(s->fd,(struct sockaddr*) &si,&st) ||
- st < sizeof(si)) {
- /* Failure to get peername is regarded as non local host */
- s->local_peer = EPMD_FALSE;
- } else {
- /* Only 127.x.x.x and connections from the host's IP address
- allowed, no false positives */
- s->local_peer =
- (((((unsigned) ntohl(si.sin_addr.s_addr)) & 0xFF000000U) ==
- 0x7F000000U) ||
- (getsockname(s->fd,(struct sockaddr*) &di,&st) ?
- EPMD_FALSE : si.sin_addr.s_addr == di.sin_addr.s_addr));
- }
+ s->local_peer = conn_local_peer_check(g, s->fd);
dbg_tty_printf(g,2,(s->local_peer) ? "Local peer connected" :
"Non-local peer connected");
@@ -1040,7 +1070,7 @@ static int conn_open(EpmdVars *g,int fd)
s->got = 0;
s->mod_time = current_time(g); /* Note activity */
- s->buf = (char *)malloc(INBUF_SIZE);
+ s->buf = malloc(INBUF_SIZE);
if (s->buf == NULL) {
dbg_printf(g,0,"epmd: Insufficient memory");
@@ -1058,6 +1088,60 @@ static int conn_open(EpmdVars *g,int fd)
return EPMD_FALSE;
}
+static int conn_local_peer_check(EpmdVars *g, int fd)
+{
+ struct EPMD_SOCKADDR_IN si;
+ struct EPMD_SOCKADDR_IN di;
+
+ struct sockaddr_in *si4 = (struct sockaddr_in *)&si;
+ struct sockaddr_in *di4 = (struct sockaddr_in *)&di;
+
+#if defined(EPMD6)
+ struct sockaddr_in6 *si6 = (struct sockaddr_in6 *)&si;
+ struct sockaddr_in6 *di6 = (struct sockaddr_in6 *)&di;
+#endif
+
+#ifdef HAVE_SOCKLEN_T
+ socklen_t st;
+#else
+ int st;
+#endif
+
+ st = sizeof(si);
+
+ /* Determine if connection is from localhost */
+ if (getpeername(fd,(struct sockaddr*) &si,&st) ||
+ st > sizeof(si)) {
+ /* Failure to get peername is regarded as non local host */
+ return EPMD_FALSE;
+ }
+
+ /* Only 127.x.x.x and connections from the host's IP address
+ allowed, no false positives */
+#if defined(EPMD6)
+ if (si.ss_family == AF_INET6 && IN6_IS_ADDR_LOOPBACK(&(si6->sin6_addr)))
+ return EPMD_TRUE;
+
+ if (si.ss_family == AF_INET)
+#endif
+ if ((((unsigned) ntohl(si4->sin_addr.s_addr)) & 0xFF000000U) ==
+ 0x7F000000U)
+ return EPMD_TRUE;
+
+ if (getsockname(fd,(struct sockaddr*) &di,&st))
+ return EPMD_FALSE;
+
+#if defined(EPMD6)
+ if (si.ss_family == AF_INET6)
+ return IN6_ARE_ADDR_EQUAL( &(si6->sin6_addr), &(di6->sin6_addr));
+ if (si.ss_family == AF_INET)
+#endif
+ return si4->sin_addr.s_addr == di4->sin_addr.s_addr;
+#if defined(EPMD6)
+ return EPMD_FALSE;
+#endif
+}
+
static int conn_close_fd(EpmdVars *g,int fd)
{
int i;
diff --git a/erts/epmd/test/Makefile b/erts/epmd/test/Makefile
index 7c5302a2f1..ad1315440f 100644
--- a/erts/epmd/test/Makefile
+++ b/erts/epmd/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.
diff --git a/erts/epmd/test/epmd_SUITE.erl b/erts/epmd/test/epmd_SUITE.erl
index 0c8f01ef6b..0f0a5acde7 100644
--- a/erts/epmd/test/epmd_SUITE.erl
+++ b/erts/epmd/test/epmd_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,63 +23,58 @@
% Timeout for test cases (rather long to work on slow machines)
--define(SHORT_TEST_TIMEOUT, ?t:seconds(30)). % Default
--define(MEDIUM_TEST_TIMEOUT, ?t:minutes(3)).
--define(LONG_TEST_TIMEOUT, ?t:minutes(10)).
+-define(MEDIUM_TEST_TIMEOUT, {minutes,3}).
+-define(LONG_TEST_TIMEOUT, {minutes,10}).
% Delay inserted into code
-define(SHORT_PAUSE, 100).
--define(MEDIUM_PAUSE, ?t:seconds(1)).
--define(LONG_PAUSE, ?t:seconds(5)).
+-define(MEDIUM_PAUSE, 1000).
+-define(LONG_PAUSE, 5000).
% Information about nodes
-record(node_info, {port, node_type, prot, lvsn, hvsn, node_name, extra}).
% 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]).
-
--export(
- [
- register_name/1,
- register_names_1/1,
- register_names_2/1,
- register_duplicate_name/1,
- unicode_name/1,
- long_unicode_name/1,
- get_port_nr/1,
- slow_get_port_nr/1,
- unregister_others_name_1/1,
- unregister_others_name_2/1,
- register_overflow/1,
- name_with_null_inside/1,
- name_null_terminated/1,
- stupid_names_req/1,
-
- no_data/1,
- one_byte/1,
- two_bytes/1,
- partial_packet/1,
- zero_length/1,
- too_large/1,
- alive_req_too_small_1/1,
- alive_req_too_small_2/1,
- alive_req_too_large/1,
-
- returns_valid_empty_extra/1,
- returns_valid_populated_extra_with_nulls/1,
-
- names_stdout/1,
-
- buffer_overrun_1/1,
- buffer_overrun_2/1,
- no_nonlocal_register/1,
- no_nonlocal_kill/1,
- no_live_killing/1,
-
- socket_reset_before_alive2_reply_is_written/1
- ]).
+-export([all/0, suite/0, groups/0, init_per_testcase/2, end_per_testcase/2]).
+
+-export([register_name/1,
+ register_name_ipv6/1,
+ register_names_1/1,
+ register_names_2/1,
+ register_duplicate_name/1,
+ unicode_name/1,
+ long_unicode_name/1,
+ get_port_nr/1,
+ slow_get_port_nr/1,
+ unregister_others_name_1/1,
+ unregister_others_name_2/1,
+ register_overflow/1,
+ name_with_null_inside/1,
+ name_null_terminated/1,
+ stupid_names_req/1,
+
+ no_data/1,
+ one_byte/1,
+ two_bytes/1,
+ partial_packet/1,
+ zero_length/1,
+ too_large/1,
+ alive_req_too_small_1/1,
+ alive_req_too_small_2/1,
+ alive_req_too_large/1,
+
+ returns_valid_empty_extra/1,
+ returns_valid_populated_extra_with_nulls/1,
+
+ names_stdout/1,
+
+ buffer_overrun_1/1,
+ buffer_overrun_2/1,
+ no_nonlocal_register/1,
+ no_nonlocal_kill/1,
+ no_live_killing/1,
+
+ socket_reset_before_alive2_reply_is_written/1]).
% Port we use for testing
@@ -87,7 +82,7 @@
-define(EPMDARGS,"-packet_timeout 1").
-define(DUMMY_PORT, 1000). % Port number to register
- % not in real use.
+% not in real use.
% Timeouts etc inside test cases. Time is in milliseconds.
-define(CONN_RETRY, 4). % Times to retry connecting
@@ -110,10 +105,13 @@
%% all/1
%%
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap, ?MEDIUM_TEST_TIMEOUT}].
all() ->
- [register_name, register_names_1, register_names_2,
+ [register_name, register_name_ipv6,
+ register_names_1, register_names_2,
register_duplicate_name, unicode_name, long_unicode_name,
get_port_nr, slow_get_port_nr,
unregister_others_name_1, unregister_others_name_2,
@@ -132,87 +130,71 @@ groups() ->
[{buffer_overrun, [],
[buffer_overrun_1, buffer_overrun_2]}].
-init_per_suite(Config) ->
- Config.
-
-end_per_suite(_Config) ->
- ok.
-
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
-
-
%%
%% Run before and after each test case
%%
init_per_testcase(_Func, Config) ->
- Dog = test_server:timetrap(?MEDIUM_TEST_TIMEOUT),
cleanup(),
- [{watchdog, Dog} | Config].
+ Config.
-end_per_testcase(_Func, Config) ->
+end_per_testcase(_Func, _Config) ->
cleanup(),
- Dog = ?config(watchdog, Config),
- catch test_server:timetrap_cancel(Dog), % We may have canceled already
ok.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-register_name(doc) ->
- ["Register a name"];
-register_name(suite) ->
- [];
+%% Register a name
register_name(Config) when is_list(Config) ->
- ?line ok = epmdrun(),
- ?line {ok,Sock} = register_node("foobar"),
- ?line ok = close(Sock), % Unregister
+ ok = epmdrun(),
+ {ok,Sock} = register_node("foobar"),
+ ok = close(Sock), % Unregister
ok.
-register_names_1(doc) ->
- ["Register and unregister two nodes"];
-register_names_1(suite) ->
- [];
+%% Register a name over IPv6
+register_name_ipv6(Config) when is_list(Config) ->
+ % Test if the host has an IPv6 loopback address
+ Res = gen_tcp:listen(0, [inet6, {ip, {0,0,0,0,0,0,0,1}}]),
+ case Res of
+ {ok,LSock} ->
+ gen_tcp:close(LSock),
+ ok = epmdrun(),
+ {ok,Sock} = register_node6("foobar6"),
+ ok = close(Sock), % Unregister
+ ok;
+ _Error ->
+ {skip, "Host does not have an IPv6 loopback address"}
+ end.
+
+%% Register and unregister two nodes
register_names_1(Config) when is_list(Config) ->
- ?line ok = epmdrun(),
- ?line {ok,Sock1} = register_node("foobar"),
- ?line {ok,Sock2} = register_node("foozap"),
- ?line ok = close(Sock1), % Unregister
- ?line ok = close(Sock2), % Unregister
+ ok = epmdrun(),
+ {ok,Sock1} = register_node("foobar"),
+ {ok,Sock2} = register_node("foozap"),
+ ok = close(Sock1), % Unregister
+ ok = close(Sock2), % Unregister
ok.
-register_names_2(doc) ->
- ["Register and unregister two nodes"];
-register_names_2(suite) ->
- [];
+%% Register and unregister two nodes
register_names_2(Config) when is_list(Config) ->
- ?line ok = epmdrun(),
- ?line {ok,Sock1} = register_node("foobar"),
- ?line {ok,Sock2} = register_node("foozap"),
- ?line ok = close(Sock2), % Unregister
- ?line ok = close(Sock1), % Unregister
+ ok = epmdrun(),
+ {ok,Sock1} = register_node("foobar"),
+ {ok,Sock2} = register_node("foozap"),
+ ok = close(Sock2), % Unregister
+ ok = close(Sock1), % Unregister
ok.
-register_duplicate_name(doc) ->
- ["Two nodes with the same name"];
-register_duplicate_name(suite) ->
- [];
+%% Two nodes with the same name
register_duplicate_name(Config) when is_list(Config) ->
- ?line ok = epmdrun(),
- ?line {ok,Sock} = register_node("foobar"),
- ?line error = register_node("foobar"),
- ?line ok = close(Sock), % Unregister
+ ok = epmdrun(),
+ {ok,Sock} = register_node("foobar"),
+ error = register_node("foobar"),
+ ok = close(Sock), % Unregister
ok.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-unicode_name(doc) ->
- ["Check that we can register and lookup a unicode name"];
-unicode_name(suite) ->
- [];
+%% Check that we can register and lookup a unicode name
unicode_name(Config) when is_list(Config) ->
ok = epmdrun(),
NodeName = [16#1f608],
@@ -224,10 +206,7 @@ unicode_name(Config) when is_list(Config) ->
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-long_unicode_name(doc) ->
- ["Check that we can register and lookup a long unicode name"];
-long_unicode_name(suite) ->
- [];
+%% Check that we can register and lookup a long unicode name
long_unicode_name(Config) when is_list(Config) ->
ok = epmdrun(),
BaseChar = 16#1f600,
@@ -245,104 +224,93 @@ register_node(Name) ->
register_node(Name,Port) ->
register_node_v2(Port,$M,0,5,5,Name,"").
+register_node6(Name) ->
+ register_node_v2({0,0,0,0,0,0,0,1},?DUMMY_PORT,$M,0,5,5,Name,"").
+
register_node_v2(Port, NodeType, Prot, HVsn, LVsn, Name, Extra) ->
+ register_node_v2("localhost", Port, NodeType, Prot, HVsn, LVsn, Name, Extra).
+register_node_v2(Addr, Port, NodeType, Prot, HVsn, LVsn, Name, Extra) ->
Req = alive2_req(Port, NodeType, Prot, HVsn, LVsn, Name, Extra),
- case send_req(Req) of
- {ok,Sock} ->
- case recv(Sock,4) of
- {ok, [?EPMD_ALIVE2_RESP,_Res=0,_C0,_C1]} ->
- {ok,Sock};
- Other ->
- test_server:format("recv on sock ~w: ~p~n",
- [Sock,Other]),
- error
- end;
- error ->
- error
+ case send_req(Req, Addr) of
+ {ok,Sock} ->
+ case recv(Sock,4) of
+ {ok, [?EPMD_ALIVE2_RESP,_Res=0,_C0,_C1]} ->
+ {ok,Sock};
+ Other ->
+ io:format("recv on sock ~w: ~p~n", [Sock,Other]),
+ error
+ end;
+ error ->
+ error
end.
% Internal function to fetch information about a node
port_please_v2(Name) ->
case send_req([?EPMD_PORT_PLEASE2_REQ,
- binary_to_list(unicode:characters_to_binary(Name))]) of
- {ok,Sock} ->
- case recv_until_sock_closes(Sock) of
- {ok, Resp} ->
- parse_port2_resp(Resp);
- Other ->
- test_server:format("recv on sock ~w: ~p~n",
- [Sock,Other]),
- error
- end;
- error ->
- error
+ binary_to_list(unicode:characters_to_binary(Name))]) of
+ {ok,Sock} ->
+ case recv_until_sock_closes(Sock) of
+ {ok, Resp} ->
+ parse_port2_resp(Resp);
+ Other ->
+ io:format("recv on sock ~w: ~p~n", [Sock,Other]),
+ error
+ end;
+ error ->
+ error
end.
parse_port2_resp(Resp) ->
case list_to_binary(Resp) of
- <<?EPMD_PORT2_RESP,Res,Port:16,NodeType,Prot,HVsn:16,LVsn:16,
- NLen:16,NodeName:NLen/binary,
- ELen:16,Extra:ELen/binary>> when Res =:= 0 ->
- {ok, #node_info{port=Port,node_type=NodeType,prot=Prot,
- hvsn=HVsn,lvsn=LVsn,
- node_name=unicode:characters_to_list(NodeName),
- extra=binary_to_list(Extra)}};
- _Other ->
- test_server:format("invalid port2 resp: ~p~n",
- [Resp]),
- error
+ <<?EPMD_PORT2_RESP,Res,Port:16,NodeType,Prot,HVsn:16,LVsn:16,
+ NLen:16,NodeName:NLen/binary,
+ ELen:16,Extra:ELen/binary>> when Res =:= 0 ->
+ {ok, #node_info{port=Port,node_type=NodeType,prot=Prot,
+ hvsn=HVsn,lvsn=LVsn,
+ node_name=unicode:characters_to_list(NodeName),
+ extra=binary_to_list(Extra)}};
+ _Other ->
+ io:format("invalid port2 resp: ~p~n", [Resp]),
+ error
end.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-name_with_null_inside(doc) ->
- ["Register a name with a null char in it"];
-name_with_null_inside(suite) ->
- [];
+%% Register a name with a null char in it
name_with_null_inside(Config) when is_list(Config) ->
- ?line ok = epmdrun(),
- ?line error = register_node("foo\000bar"),
+ ok = epmdrun(),
+ error = register_node("foo\000bar"),
ok.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-name_null_terminated(doc) ->
- ["Register a name with terminating null byte"];
-name_null_terminated(suite) ->
- [];
+%% Register a name with terminating null byte
name_null_terminated(Config) when is_list(Config) ->
- ?line ok = epmdrun(),
- ?line error = register_node("foobar\000"),
+ ok = epmdrun(),
+ error = register_node("foobar\000"),
ok.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-stupid_names_req(doc) ->
- ["Read names from epmd in a stupid way"];
-stupid_names_req(suite) ->
- [];
+%% Read names from epmd in a stupid way
stupid_names_req(Config) when is_list(Config) ->
- Dog = ?config(watchdog, Config),
- test_server:timetrap_cancel(Dog),
- LongDog = test_server:timetrap(?MEDIUM_TEST_TIMEOUT),
- ?line ok = epmdrun(),
- ?line [FirstConn | Conn] = register_many(1, ?REG_REPEAT_LIM, "foo"),
- ?line unregister_many([FirstConn]),
+ ok = epmdrun(),
+ [FirstConn | Conn] = register_many(1, ?REG_REPEAT_LIM, "foo"),
+ unregister_many([FirstConn]),
sleep(?MEDIUM_PAUSE),
- ?line ok = check_names(Conn),
- ?line ok = unregister_many(Conn),
- test_server:timetrap_cancel(LongDog),
+ ok = check_names(Conn),
+ ok = unregister_many(Conn),
ok.
check_names(Conn) ->
- ?line {ok,Sock} = connect_active(),
- ?line {ok,Reply} = do_get_names(Sock),
- ?line SortConn = lists:sort(Conn),
- ?line SortReply = lists:sort(Reply),
- ?line ok = check_names_cmp(SortConn, SortReply),
+ {ok,Sock} = connect_active(),
+ {ok,Reply} = do_get_names(Sock),
+ SortConn = lists:sort(Conn),
+ SortReply = lists:sort(Reply),
+ ok = check_names_cmp(SortConn, SortReply),
ok.
-
+
% Compare if the result was the same as was registered
@@ -356,43 +324,43 @@ check_names_cmp([{Name,Port,_Sock} | Conn], [{Name,Port} | Reply]) ->
-define(int16(X), [(X bsr 8) band 16#ff, X band 16#ff]).
-define(u32(X1,X2,X3,X4),
- (((X1) bsl 24) bor ((X2) bsl 16) bor ((X3) bsl 8) bor X4)).
+ (((X1) bsl 24) bor ((X2) bsl 16) bor ((X3) bsl 8) bor X4)).
do_get_names(Socket) ->
inet_tcp:send(Socket, [?int16(1),?EPMD_NAMES_REQ]),
receive
- {tcp, Socket, [P0,P1,P2,P3 | T]} ->
- EpmdPort = ?u32(P0,P1,P2,P3),
- if EpmdPort == ?PORT ->
- names_loop(Socket, T, []);
- true ->
- close(Socket),
- {error, address}
- end;
- {tcp_closed, Socket} ->
- {ok, []}
+ {tcp, Socket, [P0,P1,P2,P3 | T]} ->
+ EpmdPort = ?u32(P0,P1,P2,P3),
+ if EpmdPort == ?PORT ->
+ names_loop(Socket, T, []);
+ true ->
+ close(Socket),
+ {error, address}
+ end;
+ {tcp_closed, Socket} ->
+ {ok, []}
end.
names_loop(Socket, Acc, Ps) ->
receive
- {tcp, Socket, Bytes} ->
- {NAcc, NPs} = scan_names(Acc ++ Bytes, Ps),
- names_loop(Socket, NAcc, NPs);
- {tcp_closed, Socket} ->
- {_, NPs} = scan_names(Acc, Ps), % Really needed?
- {ok, NPs}
+ {tcp, Socket, Bytes} ->
+ {NAcc, NPs} = scan_names(Acc ++ Bytes, Ps),
+ names_loop(Socket, NAcc, NPs);
+ {tcp_closed, Socket} ->
+ {_, NPs} = scan_names(Acc, Ps), % Really needed?
+ {ok, NPs}
end.
scan_names(Buf, Ps) ->
case scan_line(Buf, []) of
- {Line, NBuf} ->
- case parse_line(Line) of
- {ok, Entry} ->
- scan_names(NBuf, [Entry | Ps]);
- error ->
- scan_names(NBuf, Ps)
- end;
- [] -> {Buf, Ps}
+ {Line, NBuf} ->
+ case parse_line(Line) of
+ {ok, Entry} ->
+ scan_names(NBuf, [Entry | Ps]);
+ error ->
+ scan_names(NBuf, Ps)
+ end;
+ [] -> {Buf, Ps}
end.
scan_line([$\n | Buf], Line) -> {lists:reverse(Line), Buf};
@@ -401,16 +369,16 @@ scan_line([], _) -> [].
parse_line([$n,$a,$m,$e,$ | Buf0]) ->
case parse_name(Buf0, []) of
- {Name, Buf1} ->
- case Buf1 of
- [$a,$t,$ ,$p,$o,$r,$t,$ | Buf2] ->
- case catch list_to_integer(Buf2) of
- {'EXIT', _} -> error;
- Port -> {ok, {Name, Port}}
- end;
- _ -> error
- end;
- error -> error
+ {Name, Buf1} ->
+ case Buf1 of
+ [$a,$t,$ ,$p,$o,$r,$t,$ | Buf2] ->
+ case catch list_to_integer(Buf2) of
+ {'EXIT', _} -> error;
+ Port -> {ok, {Name, Port}}
+ end;
+ _ -> error
+ end;
+ error -> error
end;
parse_line(_) -> error.
@@ -422,17 +390,11 @@ parse_name([], _Name) -> error.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-get_port_nr(doc) ->
- ["Register a name on a port and ask about port nr"];
-get_port_nr(suite) ->
- [];
+%% Register a name on a port and ask about port nr
get_port_nr(Config) when is_list(Config) ->
port_request([?EPMD_PORT_PLEASE2_REQ,"foo"]).
-slow_get_port_nr(doc) ->
- ["Register with slow write and ask about port nr"];
-slow_get_port_nr(suite) ->
- [];
+%% Register with slow write and ask about port nr
slow_get_port_nr(Config) when is_list(Config) ->
port_request([?EPMD_PORT_PLEASE2_REQ,d,$f,d,$o,d,$o]).
@@ -440,142 +402,127 @@ slow_get_port_nr(Config) when is_list(Config) ->
% Internal function used above
port_request(M) ->
- ?line ok = epmdrun(),
+ ok = epmdrun(),
Port = 1042,
- ?line {ok,RSock} = register_node("foo", Port),
- ?line {ok,Sock} = connect(),
- ?line ok = send(Sock,[size16(M),M]),
- ?line case recv_until_sock_closes(Sock) of
- {ok, Resp} ->
- ?line close(RSock),
- ?line {ok,Rec} = parse_port2_resp(Resp),
- ?line Port = Rec#node_info.port,
- ok;
- Other ->
- ?line close(RSock),
- ?line test_server:format("recv on sock ~w: ~p~n",
- [Sock,Other]),
- ?line throw({error,Other})
- end,
+ {ok,RSock} = register_node("foo", Port),
+ {ok,Sock} = connect(),
+ ok = send(Sock,[size16(M),M]),
+ case recv_until_sock_closes(Sock) of
+ {ok, Resp} ->
+ close(RSock),
+ {ok,Rec} = parse_port2_resp(Resp),
+ Port = Rec#node_info.port,
+ ok;
+ Other ->
+ close(RSock),
+ io:format("recv on sock ~w: ~p~n", [Sock,Other]),
+ throw({error,Other})
+ end,
ok.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-unregister_others_name_1(doc) ->
- ["Unregister name of other node"];
-unregister_others_name_1(suite) ->
- [];
+%% Unregister name of other node
unregister_others_name_1(Config) when is_list(Config) ->
- ?line ok = epmdrun("-relaxed_command_check"),
- ?line {ok,RSock} = register_node("foo"),
- ?line {ok,Sock} = connect(),
+ ok = epmdrun("-relaxed_command_check"),
+ {ok,RSock} = register_node("foo"),
+ {ok,Sock} = connect(),
M = [?EPMD_STOP_REQ,"foo"],
- ?line ok = send(Sock,[size16(M),M]),
+ ok = send(Sock,[size16(M),M]),
R = "STOPPED",
- ?line {ok,R} = recv(Sock,length(R)),
- ?line ok = close(RSock),
+ {ok,R} = recv(Sock,length(R)),
+ ok = close(RSock),
ok.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-unregister_others_name_2(doc) ->
- ["Unregister name of other node"];
-unregister_others_name_2(suite) ->
- [];
+%% Unregister name of other node
unregister_others_name_2(Config) when is_list(Config) ->
- ?line ok = epmdrun("-relaxed_command_check"),
- ?line {ok,Sock} = connect(),
+ ok = epmdrun("-relaxed_command_check"),
+ {ok,Sock} = connect(),
M = [?EPMD_STOP_REQ,"xxx42"],
- ?line ok = send(Sock,[size16(M),M]),
+ ok = send(Sock,[size16(M),M]),
R = "NOEXIST",
- ?line {ok,R} = recv(Sock,length(R)),
+ {ok,R} = recv(Sock,length(R)),
ok.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-register_overflow(doc) ->
- ["Register too many, clean and redo 10 times"];
-register_overflow(suite) ->
- [];
+%% Register too many, clean and redo 10 times
register_overflow(Config) when is_list(Config) ->
- Dog = ?config(watchdog, Config),
- test_server:timetrap_cancel(Dog),
- LongDog = test_server:timetrap(?LONG_TEST_TIMEOUT),
- ?line ok = epmdrun(),
- ?line Conn = register_many(1, ?REG_REPEAT_LIM, "foo"),
+ ct:timetrap(?LONG_TEST_TIMEOUT),
+ ok = epmdrun(),
+ Conn = register_many(1, ?REG_REPEAT_LIM, "foo"),
Count = length(Conn),
- ?line ok = unregister_many(Conn),
+ ok = unregister_many(Conn),
sleep(?MEDIUM_PAUSE),
- test_server:format("Limit was ~w names, now reg/unreg all 10 times~n",
- [Count]),
- ?line ok = register_repeat(Count),
+ io:format("Limit was ~w names, now reg/unreg all 10 times~n", [Count]),
+ ok = register_repeat(Count),
sleep(?MEDIUM_PAUSE),
- ?line ok = rregister_repeat(Count),
+ ok = rregister_repeat(Count),
sleep(?MEDIUM_PAUSE),
- ?line ok = register_repeat(Count),
+ ok = register_repeat(Count),
sleep(?MEDIUM_PAUSE),
- ?line ok = rregister_repeat(Count),
+ ok = rregister_repeat(Count),
sleep(?MEDIUM_PAUSE),
- ?line ok = register_repeat(Count),
+ ok = register_repeat(Count),
sleep(?MEDIUM_PAUSE),
- ?line ok = rregister_repeat(Count),
+ ok = rregister_repeat(Count),
sleep(?MEDIUM_PAUSE),
- ?line ok = register_repeat(Count),
+ ok = register_repeat(Count),
sleep(?MEDIUM_PAUSE),
- ?line ok = rregister_repeat(Count),
+ ok = rregister_repeat(Count),
sleep(?MEDIUM_PAUSE),
- ?line ok = register_repeat(Count),
+ ok = register_repeat(Count),
sleep(?MEDIUM_PAUSE),
- ?line ok = rregister_repeat(Count),
- test_server:timetrap_cancel(LongDog),
+ ok = rregister_repeat(Count),
ok.
register_repeat(Count) ->
Conn = register_many(1, ?REG_REPEAT_LIM, "foo"),
ok = unregister_many(Conn),
if
- length(Conn) == Count ->
- ok;
- true ->
- error
+ length(Conn) == Count ->
+ ok;
+ true ->
+ error
end.
rregister_repeat(Count) ->
Conn = register_many(1, ?REG_REPEAT_LIM, "foo"),
ok = unregister_many(lists:reverse(Conn)),
if
- length(Conn) == Count ->
- ok;
- true ->
- error
+ length(Conn) == Count ->
+ ok;
+ true ->
+ error
end.
% Return count of successful registrations
register_many(I, N, _Prefix) when I > N ->
- test_server:format("Done with all ~n", []),
+ io:format("Done with all ~n", []),
[];
register_many(I, N, Prefix) ->
Name = gen_name(Prefix, I),
Port = ?DUMMY_PORT + I, % Just make it up
case register_node(Name, Port) of
- {ok,Sock} ->
- [{Name,Port,Sock} | register_many(I + 1, N, Prefix)];
- Any ->
- test_server:format("Can't register: ~w of 1..~w ~w~n",
- [Name,N,Any]),
- []
+ {ok,Sock} ->
+ [{Name,Port,Sock} | register_many(I + 1, N, Prefix)];
+ Any ->
+ test_server:format("Can't register: ~w of 1..~w ~w~n", [Name,N,Any]),
+ []
end.
unregister_many([]) ->
ok;
unregister_many([{Name,_Port,Sock} | Socks]) ->
case close(Sock) of
- ok ->
- unregister_many(Socks);
- Any ->
- test_server:format("Can't unregister: ~w reason ~w~n", [Name,Any]),
- error
+ ok ->
+ unregister_many(Socks);
+ Any ->
+ test_server:format("Can't unregister: ~w reason ~w~n", [Name,Any]),
+ error
end.
gen_name(Str,Int) ->
@@ -583,246 +530,203 @@ gen_name(Str,Int) ->
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-no_data(doc) ->
- ["Open but send no data"];
-no_data(suite) ->
- [];
+%% Open but send no data
no_data(Config) when is_list(Config) ->
- ?line ok = epmdrun(),
- ?line {ok,Sock} = connect(),
+ ok = epmdrun(),
+ {ok,Sock} = connect(),
sleep(?LONG_PAUSE),
- ?line closed = recv(Sock,1),
+ closed = recv(Sock,1),
ok.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-one_byte(doc) ->
- ["Send one byte only"];
-one_byte(suite) ->
- [];
+%% Send one byte only
one_byte(Config) when is_list(Config) ->
- ?line ok = epmdrun(),
- ?line {ok,Sock} = connect(),
- ?line ok = send(Sock,[0]),
+ ok = epmdrun(),
+ {ok,Sock} = connect(),
+ ok = send(Sock,[0]),
sleep(?LONG_PAUSE),
- ?line closed = recv(Sock,1),
+ closed = recv(Sock,1),
ok.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-two_bytes(doc) ->
- ["Send packet size only"];
-two_bytes(suite) ->
- [];
+%% Send packet size only
two_bytes(Config) when is_list(Config) ->
- ?line ok = epmdrun(),
- ?line {ok,Sock} = connect(),
- ?line ok = send(Sock,[put16(3)]),
+ ok = epmdrun(),
+ {ok,Sock} = connect(),
+ ok = send(Sock,[put16(3)]),
sleep(?LONG_PAUSE),
- ?line closed = recv(Sock,1),
+ closed = recv(Sock,1),
ok.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-partial_packet(doc) ->
- ["Got only part of a packet"];
-partial_packet(suite) ->
- [];
+%% Got only part of a packet
partial_packet(Config) when is_list(Config) ->
- ?line ok = epmdrun(),
- ?line {ok,Sock} = connect(),
- ?line ok = send(Sock,[put16(100),"only a few bytes"]),
+ ok = epmdrun(),
+ {ok,Sock} = connect(),
+ ok = send(Sock,[put16(100),"only a few bytes"]),
sleep(?LONG_PAUSE),
- ?line closed = recv(Sock,1),
+ closed = recv(Sock,1),
ok.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-zero_length(doc) ->
- ["Invalid zero packet size"];
-zero_length(suite) ->
- [];
+%% Invalid zero packet size
zero_length(Config) when is_list(Config) ->
- ?line ok = epmdrun(),
- ?line {ok,Sock} = connect(),
- ?line ok = send(Sock,[0,0,0,0,0,0,0,0,0,0]),
+ ok = epmdrun(),
+ {ok,Sock} = connect(),
+ ok = send(Sock,[0,0,0,0,0,0,0,0,0,0]),
sleep(?MEDIUM_PAUSE),
- ?line closed = recv(Sock,1),
+ closed = recv(Sock,1),
ok.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-too_large(doc) ->
- ["Invalid large packet"];
-too_large(suite) ->
- [];
+%% Invalid large packet
too_large(Config) when is_list(Config) ->
- ?line ok = epmdrun(),
- ?line {ok,Sock} = connect(),
+ ok = epmdrun(),
+ {ok,Sock} = connect(),
Size = 63000,
M = lists:duplicate(Size, $z),
- ?line ok = send(Sock,[put16(Size),M]),
+ ok = send(Sock,[put16(Size),M]),
sleep(?MEDIUM_PAUSE),
% With such a large packet, even the writes can fail as the
% daemon closes before everything is delivered -> econnaborted
case recv(Sock,1) of
- closed -> ok;
- {error,econnaborted} -> ok;
- Other -> exit({unexpected,Other})
+ closed -> ok;
+ {error,econnaborted} -> ok;
+ Other -> exit({unexpected,Other})
end.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-alive_req_too_small_1(doc) ->
- ["Try to register but not enough data"];
-alive_req_too_small_1(suite) ->
- [];
+%% Try to register but not enough data
alive_req_too_small_1(Config) when is_list(Config) ->
- ?line ok = epmdrun(),
- ?line {ok,Sock} = connect(),
+ ok = epmdrun(),
+ {ok,Sock} = connect(),
M = [?EPMD_ALIVE2_REQ, put16(?DUMMY_PORT),$M,0, put16(5),
- put16(5),put16(0)],
- ?line ok = send(Sock, [size16(M), M]),
+ put16(5),put16(0)],
+ ok = send(Sock, [size16(M), M]),
sleep(?MEDIUM_PAUSE),
- ?line closed = recv(Sock,1),
+ closed = recv(Sock,1),
ok.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-alive_req_too_small_2(doc) ->
- ["Try to register but not enough data"];
-alive_req_too_small_2(suite) ->
- [];
+%% Try to register but not enough data
alive_req_too_small_2(Config) when is_list(Config) ->
- ?line ok = epmdrun(),
- ?line {ok,Sock} = connect(),
+ ok = epmdrun(),
+ {ok,Sock} = connect(),
M = [?EPMD_ALIVE2_REQ, put16(?DUMMY_PORT),$M,0, put16(5),
- put16(5)],
- ?line ok = send(Sock, [size16(M), M]),
+ put16(5)],
+ ok = send(Sock, [size16(M), M]),
sleep(?MEDIUM_PAUSE),
- ?line closed = recv(Sock,1),
+ closed = recv(Sock,1),
ok.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-alive_req_too_large(doc) ->
- ["Try to register but node name too large"];
-alive_req_too_large(suite) ->
- [];
+%% Try to register but node name too large
alive_req_too_large(Config) when is_list(Config) ->
- ?line ok = epmdrun(),
- ?line {ok,Sock} = connect(),
- L = [
- "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
- "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
- "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
- "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
- "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
- "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
- "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
- "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
- "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
- "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
- "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
- "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
- ],
+ ok = epmdrun(),
+ {ok,Sock} = connect(),
+ L = ["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
S = length(lists:flatten(L)),
M = [?EPMD_ALIVE2_REQ, put16(?DUMMY_PORT),$M,0, put16(5),
- put16(5), put16(S),L,put16(0)],
- ?line ok = send(Sock, [size16(M), M]),
+ put16(5), put16(S),L,put16(0)],
+ ok = send(Sock, [size16(M), M]),
sleep(?MEDIUM_PAUSE),
- ?line {ok,[?EPMD_ALIVE2_RESP,1]} = recv(Sock,2),
+ {ok,[?EPMD_ALIVE2_RESP,1]} = recv(Sock,2),
ok.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-returns_valid_empty_extra(doc) ->
- ["Check that an empty extra is prefixed by a two byte length"];
-returns_valid_empty_extra(suite) ->
- [];
+%% Check that an empty extra is prefixed by a two byte length
returns_valid_empty_extra(Config) when is_list(Config) ->
- ?line ok = epmdrun(),
- ?line {ok,Sock} = register_node_v2(4711, 72, 0, 5, 5, "foo", []),
- ?line {ok,#node_info{extra=[]}} = port_please_v2("foo"),
- ?line ok = close(Sock),
+ ok = epmdrun(),
+ {ok,Sock} = register_node_v2(4711, 72, 0, 5, 5, "foo", []),
+ {ok,#node_info{extra=[]}} = port_please_v2("foo"),
+ ok = close(Sock),
ok.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-returns_valid_populated_extra_with_nulls(doc) ->
- ["Check a populated extra with embedded null characters"];
-returns_valid_populated_extra_with_nulls(suite) ->
- [];
+%% Check a populated extra with embedded null characters
returns_valid_populated_extra_with_nulls(Config) when is_list(Config) ->
- ?line ok = epmdrun(),
- ?line {ok,Sock} = register_node_v2(4711, 72, 0, 5, 5, "foo", "ABC\000\000"),
- ?line {ok,#node_info{extra="ABC\000\000"}} = port_please_v2("foo"),
- ?line ok = close(Sock),
+ ok = epmdrun(),
+ {ok,Sock} = register_node_v2(4711, 72, 0, 5, 5, "foo", "ABC\000\000"),
+ {ok,#node_info{extra="ABC\000\000"}} = port_please_v2("foo"),
+ ok = close(Sock),
ok.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-names_stdout(doc) ->
- ["Test that epmd -names prints registered nodes to stdout"];
-names_stdout(suite) ->
- [];
+%% Test that epmd -names prints registered nodes to stdout
names_stdout(Config) when is_list(Config) ->
- ?line ok = epmdrun(),
- ?line {ok,Sock} = register_node("foobar"),
- ?line ok = epmdrun("-names"),
- ?line {ok, Data} = receive {_Port, {data, D}} -> {ok, D}
- after 10000 -> {error, timeout}
- end,
- ?line {match,_} = re:run(Data, "^epmd: up and running", [multiline]),
- ?line {match,_} = re:run(Data, "^name foobar at port", [multiline]),
- ?line ok = close(Sock),
+ ok = epmdrun(),
+ {ok,Sock} = register_node("foobar"),
+ ok = epmdrun("-names"),
+ {ok, Data} = receive {_Port, {data, D}} -> {ok, D}
+ after 10000 -> {error, timeout}
+ end,
+ {match,_} = re:run(Data, "^epmd: up and running", [multiline]),
+ {match,_} = re:run(Data, "^name foobar at port", [multiline]),
+ ok = close(Sock),
ok.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-buffer_overrun_1(suite) ->
- [];
-buffer_overrun_1(doc) ->
- ["Test security vulnerability in fake extra lengths in alive2_req"];
+%% Test security vulnerability in fake extra lengths in alive2_req
buffer_overrun_1(Config) when is_list(Config) ->
- ?line ok = epmdrun(),
- ?line true = alltrue([hostile(N) || N <- lists:seq(1,10000)]),
+ ok = epmdrun(),
+ true = alltrue([hostile(N) || N <- lists:seq(1,10000)]),
ok.
-buffer_overrun_2(suite) ->
- [];
-buffer_overrun_2(doc) ->
- ["Test security vulnerability in fake extra lengths in alive2_req"];
+
+%% Test security vulnerability in fake extra lengths in alive2_req
buffer_overrun_2(Config) when is_list(Config) ->
- ?line ok = epmdrun(),
- ?line [false | Rest] = [hostile2(N) || N <- lists:seq(255*4,10000)],
- ?line true = alltrue(Rest),
+ ok = epmdrun(),
+ [false | Rest] = [hostile2(N) || N <- lists:seq(255*4,10000)],
+ true = alltrue(Rest),
ok.
hostile(N) ->
try
- Bin= <<$x:8,4747:16,$M:8,0:8,5:16,5:16,5:16,"gurka",N:16>>,
- S = size(Bin),
- {ok,E}=connect_sturdy(),
- gen_tcp:send(E,[<<S:16>>,Bin]),
- closed = recv(E,1),
- gen_tcp:close(E),
- true
+ Bin= <<$x:8,4747:16,$M:8,0:8,5:16,5:16,5:16,"gurka",N:16>>,
+ S = size(Bin),
+ {ok,E}=connect_sturdy(),
+ gen_tcp:send(E,[<<S:16>>,Bin]),
+ closed = recv(E,1),
+ gen_tcp:close(E),
+ true
catch
- _:_ ->
- false
+ _:_ ->
+ false
end.
hostile2(N) ->
try
- B2 = list_to_binary(lists:duplicate(N,255)),
- Bin= <<$x:8,4747:16,$M:8,0:8,5:16,5:16,5:16,"gurka",N:16,B2/binary>>,
- S = size(Bin),
- {ok,E}=connect_sturdy(),
- gen_tcp:send(E,[<<S:16>>,Bin]),
- Z = recv(E,2),
- gen_tcp:close(E),
- (Z =:= closed) or (Z =:= {ok, [$y,1]})
+ B2 = list_to_binary(lists:duplicate(N,255)),
+ Bin= <<$x:8,4747:16,$M:8,0:8,5:16,5:16,5:16,"gurka",N:16,B2/binary>>,
+ S = size(Bin),
+ {ok,E}=connect_sturdy(),
+ gen_tcp:send(E,[<<S:16>>,Bin]),
+ Z = recv(E,2),
+ gen_tcp:close(E),
+ (Z =:= closed) or (Z =:= {ok, [$y,1]})
catch
- _A:_B ->
- false
+ _A:_B ->
+ false
end.
alltrue([]) ->
@@ -832,134 +736,124 @@ alltrue([true|T]) ->
alltrue([_|_]) ->
false.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-no_nonlocal_register(suite) ->
- [];
-no_nonlocal_register(doc) ->
- ["Ensure that we cannot register throug a nonlocal connection"];
+
+%% Ensure that we cannot register throug a nonlocal connection
no_nonlocal_register(Config) when is_list(Config) ->
- ?line case {os:find_executable("ssh"),ct:get_config(ssh_proxy_host)} of
- {SSH,Name} when is_list(Name), is_list(SSH) ->
- do_no_nonlocal_register(Config,Name);
- {false,_} ->
- {skip, "No ssh command found to create proxy"};
- _ ->
- {skip, "No ssh_proxy_host configured in ts.config"}
- end.
+ case {os:find_executable("ssh"),ct:get_config(ssh_proxy_host)} of
+ {SSH,Name} when is_list(Name), is_list(SSH) ->
+ do_no_nonlocal_register(Config,Name);
+ {false,_} ->
+ {skip, "No ssh command found to create proxy"};
+ _ ->
+ {skip, "No ssh_proxy_host configured in ts.config"}
+ end.
do_no_nonlocal_register(Config,SSHHost) when is_list(Config) ->
- ?line ok = epmdrun(),
- ?line ProxyPort = proxy_port(),
- ?line ok = ssh_proxy(SSHHost,ProxyPort),
+ ok = epmdrun(),
+ ProxyPort = proxy_port(),
+ ok = ssh_proxy(SSHHost,ProxyPort),
Res = try
- ?line Name = "gurka_"
- %++
- %integer_to_list(A1)++"_"++
- %integer_to_list(A2)++"_"++
- %integer_to_list(A3)++"_"++
- %integer_to_list(A4)
- ,
- ?line Bname = list_to_binary(Name),
- ?line NameS = byte_size(Bname),
- ?line Bin= <<$x:8,4747:16,$M:8,0:8,5:16,
- 5:16,NameS:16,Bname/binary,
- 0:16>>,
- ?line S = size(Bin),
- ?line {ok, E} = connect("localhost",ProxyPort,passive),
- ?line gen_tcp:send(E,[<<S:16>>,Bin]),
- ?line closed = recv(E,1),
- ?line gen_tcp:close(E),
- true
- catch
- _:_ ->
- false
- end,
+ Name = "gurka_"
+ %++
+ %integer_to_list(A1)++"_"++
+ %integer_to_list(A2)++"_"++
+ %integer_to_list(A3)++"_"++
+ %integer_to_list(A4)
+ ,
+ Bname = list_to_binary(Name),
+ NameS = byte_size(Bname),
+ Bin= <<$x:8,4747:16,$M:8,0:8,5:16,
+ 5:16,NameS:16,Bname/binary,
+ 0:16>>,
+ S = size(Bin),
+ {ok, E} = connect("localhost",ProxyPort,passive),
+ gen_tcp:send(E,[<<S:16>>,Bin]),
+ closed = recv(E,1),
+ gen_tcp:close(E),
+ true
+ catch
+ _:_ ->
+ false
+ end,
%erlang:display(Res),
true = Res,
ok.
-no_nonlocal_kill(suite) ->
- [];
-no_nonlocal_kill(doc) ->
- ["Ensure that we cannot kill through nonlocal connection"];
+%% Ensure that we cannot kill through nonlocal connection
no_nonlocal_kill(Config) when is_list(Config) ->
- ?line case {os:find_executable("ssh"),ct:get_config(ssh_proxy_host)} of
- {SSH,Name} when is_list(Name), is_list(SSH) ->
- do_no_nonlocal_kill(Config,Name);
- {false,_} ->
- {skip, "No ssh command found to create proxy"};
- _ ->
- {skip, "No ssh_proxy_host configured in ts.config"}
- end.
+ case {os:find_executable("ssh"),ct:get_config(ssh_proxy_host)} of
+ {SSH,Name} when is_list(Name), is_list(SSH) ->
+ do_no_nonlocal_kill(Config,Name);
+ {false,_} ->
+ {skip, "No ssh command found to create proxy"};
+ _ ->
+ {skip, "No ssh_proxy_host configured in ts.config"}
+ end.
do_no_nonlocal_kill(Config,SSHHost) when is_list(Config) ->
- ?line ok = epmdrun(),
- ?line ProxyPort = proxy_port(),
- ?line ok = ssh_proxy(SSHHost,ProxyPort),
+ ok = epmdrun(),
+ ProxyPort = proxy_port(),
+ ok = ssh_proxy(SSHHost,ProxyPort),
Res = try
- {ok, E} = connect("localhost",ProxyPort,passive),
- M = [?EPMD_KILL_REQ],
- send(E, [size16(M), M]),
- closed = recv(E,2),
- gen_tcp:close(E),
- sleep(?MEDIUM_PAUSE),
- {ok, E2} = connect("localhost",ProxyPort,passive),
- gen_tcp:close(E2),
- true
- catch
- _:_ ->
- false
- end,
+ {ok, E} = connect("localhost",ProxyPort,passive),
+ M = [?EPMD_KILL_REQ],
+ send(E, [size16(M), M]),
+ closed = recv(E,2),
+ gen_tcp:close(E),
+ sleep(?MEDIUM_PAUSE),
+ {ok, E2} = connect("localhost",ProxyPort,passive),
+ gen_tcp:close(E2),
+ true
+ catch
+ _:_ ->
+ false
+ end,
%erlang:display(Res),
true = Res,
ok.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-no_live_killing(doc) ->
- ["Dont allow killing with live nodes or any unregistering w/o -relaxed_command_check"];
-no_live_killing(suite) ->
- [];
+
+%% Dont allow killing with live nodes or any unregistering w/o -relaxed_command_check
no_live_killing(Config) when is_list(Config) ->
- ?line ok = epmdrun(),
- ?line {ok,RSock} = register_node("foo"),
- ?line {ok,Sock} = connect(),
- ?line M = [?EPMD_KILL_REQ],
- ?line ok = send(Sock,[size16(M),M]),
- ?line {ok,"NO"} = recv(Sock,2),
- ?line close(Sock),
- ?line {ok,Sock2} = connect(),
- ?line M2 = [?EPMD_STOP_REQ,"foo"],
- ?line ok = send(Sock2,[size16(M2),M2]),
- ?line closed = recv(Sock2,1),
- ?line close(Sock2),
- ?line close(RSock),
- ?line sleep(?MEDIUM_PAUSE),
- ?line {ok,Sock3} = connect(),
- ?line M3 = [?EPMD_KILL_REQ],
- ?line ok = send(Sock3,[size16(M3),M3]),
- ?line {ok,"OK"} = recv(Sock3,2),
- ?line close(Sock3),
+ ok = epmdrun(),
+ {ok,RSock} = register_node("foo"),
+ {ok,Sock} = connect(),
+ M = [?EPMD_KILL_REQ],
+ ok = send(Sock,[size16(M),M]),
+ {ok,"NO"} = recv(Sock,2),
+ close(Sock),
+ {ok,Sock2} = connect(),
+ M2 = [?EPMD_STOP_REQ,"foo"],
+ ok = send(Sock2,[size16(M2),M2]),
+ closed = recv(Sock2,1),
+ close(Sock2),
+ close(RSock),
+ sleep(?MEDIUM_PAUSE),
+ {ok,Sock3} = connect(),
+ M3 = [?EPMD_KILL_REQ],
+ ok = send(Sock3,[size16(M3),M3]),
+ {ok,"OK"} = recv(Sock3,2),
+ close(Sock3),
ok.
-socket_reset_before_alive2_reply_is_written(doc) ->
- ["Check for regression - don't make zombie from node which "
- "sends TCP RST at wrong time"];
-socket_reset_before_alive2_reply_is_written(suite) ->
- [];
+%% Check for regression - don't make zombie from node which
+%% sends TCP RST at wrong time
socket_reset_before_alive2_reply_is_written(Config) when is_list(Config) ->
%% - delay_write for easier triggering of race condition
%% - relaxed_command_check for gracefull shutdown of epmd even if there
%% is stuck node.
- ?line ok = epmdrun("-delay_write 1 -relaxed_command_check"),
+ ok = epmdrun("-delay_write 1 -relaxed_command_check"),
%% We can't use send_req/1 directly as we want to do inet:setopts/2
%% on our socket.
- ?line {ok, Sock} = connect(),
+ {ok, Sock} = connect(),
%% Issuing close/1 on such socket will result in immediate RST packet.
- ?line ok = inet:setopts(Sock, [{linger, {true, 0}}]),
+ ok = inet:setopts(Sock, [{linger, {true, 0}}]),
Req = alive2_req(4711, 77, 0, 5, 5, "test", []),
- ?line ok = send(Sock, [size16(Req), Req]),
+ ok = send(Sock, [size16(Req), Req]),
timer:sleep(500), %% Wait for the first 1/2 of delay_write before closing
- ?line ok = close(Sock),
+ ok = close(Sock),
timer:sleep(500 + ?SHORT_PAUSE), %% Wait for the other 1/2 of delay_write
@@ -967,11 +861,11 @@ socket_reset_before_alive2_reply_is_written(Config) when is_list(Config) ->
%% Should be removed when this is issue is fixed there.
timer:sleep(1000),
- ?line {ok, SockForNames} = connect_active(),
+ {ok, SockForNames} = connect_active(),
%% And there should be no stuck nodes
- ?line {ok, []} = do_get_names(SockForNames),
- ?line ok = close(SockForNames),
+ {ok, []} = do_get_names(SockForNames),
+ ok = close(SockForNames),
ok.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -980,14 +874,14 @@ socket_reset_before_alive2_reply_is_written(Config) when is_list(Config) ->
cleanup() ->
sleep(?MEDIUM_PAUSE),
case connect() of
- {ok,Sock} ->
- M = [?EPMD_KILL_REQ],
- send(Sock, [size16(M), M]),
- recv(Sock,length("OK")),
- close(Sock),
- sleep(?MEDIUM_PAUSE);
- _ ->
- true
+ {ok,Sock} ->
+ M = [?EPMD_KILL_REQ],
+ send(Sock, [size16(M), M]),
+ recv(Sock,length("OK")),
+ close(Sock),
+ sleep(?MEDIUM_PAUSE);
+ _ ->
+ true
end.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -997,11 +891,11 @@ proxy_port() ->
?PORT+1.
ssh_proxy(SSHHost,ProxyPort) ->
- ?line Host = lists:nth(2,string:tokens(atom_to_list(node()),"@")),
+ Host = lists:nth(2,string:tokens(atom_to_list(node()),"@")),
% Requires proxy to be a unix host with the command 'read' accessible
- ?line osrun("ssh -L "++integer_to_list(ProxyPort)++":"++Host++":"
- ++integer_to_list(?PORT)++" "++SSHHost++" read").
-
+ osrun("ssh -L "++integer_to_list(ProxyPort)++":"++Host++":"
+ ++integer_to_list(?PORT)++" "++SSHHost++" read").
+
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -1011,21 +905,21 @@ epmdrun() ->
epmdrun([]).
epmdrun(Args) ->
case os:find_executable(epmd) of
- false ->
- {error, {could_not_find_epmd_in_path}};
- Path ->
- epmdrun(Path,Args)
+ false ->
+ {error, {could_not_find_epmd_in_path}};
+ Path ->
+ epmdrun(Path,Args)
end.
epmdrun(Epmd,Args0) ->
- %% test_server:format("epmdrun() => Epmd = ~p",[Epmd]),
+ %% test_server:format("epmdrun() => Epmd = ~p",[Epmd]),
Args = case Args0 of
- [] ->
- [];
- O ->
- " "++O
- end,
- osrun("\"" ++ Epmd ++ "\"" ++ " " ?EPMDARGS " -port " ++ integer_to_list(?PORT) ++ Args).
+ [] ->
+ [];
+ O ->
+ " "++O
+ end,
+ osrun("\"" ++ Epmd ++ "\"" ++ " " ?EPMDARGS " -port " ++ integer_to_list(?PORT) ++ Args).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -1034,7 +928,7 @@ epmdrun(Epmd,Args0) ->
osrun(Cmd) ->
_ = open_port({spawn, Cmd}, []),
ok.
-
+
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Wrappers of TCP functions
@@ -1059,16 +953,16 @@ connect(Addr, Port, Mode) ->
connect(Addr, Port, Mode, ?CONN_SLEEP, ?CONN_RETRY).
connect(Addr, Port, Mode, Sleep, Retry) ->
case connect_repeat(Addr, Retry, Port, Mode, Sleep) of
- {ok,Sock} ->
- {ok,Sock};
- {error,timeout} ->
- timeout;
- {error,Reason} ->
- test_server:format("connect: error: ~w~n",[Reason]),
- error;
- Any ->
- test_server:format("connect: unknown message: ~w~n",[Any]),
- exit(1)
+ {ok,Sock} ->
+ {ok,Sock};
+ {error,timeout} ->
+ timeout;
+ {error,Reason} ->
+ test_server:format("connect: error: ~w~n",[Reason]),
+ error;
+ Any ->
+ test_server:format("connect: unknown message: ~w~n",[Any]),
+ exit(1)
end.
@@ -1079,33 +973,33 @@ connect_repeat(Addr, 1, Port, Mode, _Sleep) ->
connect_mode(Addr,Port, Mode);
connect_repeat(Addr,Retry, Port, Mode, Sleep) ->
case connect_mode(Addr,Port, Mode) of
- {ok,Sock} ->
- {ok,Sock};
- {error,Reason} ->
- test_server:format("connect: error: ~w~n",[Reason]),
- timer:sleep(Sleep),
- connect_repeat(Addr, Retry - 1, Port, Mode, Sleep);
- Any ->
- test_server:format("connect: unknown message: ~w~n",[Any]),
- exit(1)
+ {ok,Sock} ->
+ {ok,Sock};
+ {error,Reason} ->
+ test_server:format("connect: error: ~w~n",[Reason]),
+ timer:sleep(Sleep),
+ connect_repeat(Addr, Retry - 1, Port, Mode, Sleep);
+ Any ->
+ test_server:format("connect: unknown message: ~w~n",[Any]),
+ exit(1)
end.
connect_mode(Addr,Port, active) ->
gen_tcp:connect(Addr, Port, [{packet, 0}], ?CONN_TIMEOUT);
connect_mode(Addr, Port, passive) ->
gen_tcp:connect(Addr, Port, [{packet, 0}, {active, false}],
- ?CONN_TIMEOUT).
+ ?CONN_TIMEOUT).
close(Sock) ->
case gen_tcp:close(Sock) of
- {error,_} ->
- error;
- ok ->
- ok;
- Any ->
- test_server:format("unknown message: ~w~n",[Any]),
- exit(1)
+ {error,_} ->
+ error;
+ ok ->
+ ok;
+ Any ->
+ test_server:format("unknown message: ~w~n",[Any]),
+ exit(1)
end.
recv(Sock, Len) ->
@@ -1113,19 +1007,19 @@ recv(Sock, Len) ->
recv(Sock, Len, Timeout) ->
case gen_tcp:recv(Sock, Len, Timeout) of
- {ok,[]} -> % Should not be the case
- recv(Sock, 1, 1); % any longer
- {ok,Data} ->
- {ok,Data};
- {error,timeout} ->
- timeout;
- {error,closed} ->
- closed;
- {error,_}=Error ->
- Error;
- Any ->
- test_server:format("unknown message: ~w~n",[Any]),
- exit(1)
+ {ok,[]} -> % Should not be the case
+ recv(Sock, 1, 1); % any longer
+ {ok,Data} ->
+ {ok,Data};
+ {error,timeout} ->
+ timeout;
+ {error,closed} ->
+ closed;
+ {error,_}=Error ->
+ Error;
+ Any ->
+ test_server:format("unknown message: ~w~n",[Any]),
+ exit(1)
end.
%% Send data to socket. The list can be non flat and contain
@@ -1134,12 +1028,12 @@ recv(Sock, Len, Timeout) ->
send(Sock, SendSpec) ->
case send(SendSpec, [], Sock) of
- {ok,[]} ->
- ok;
- {ok,RevBytes} ->
- send_direct(Sock, lists:reverse(RevBytes));
- Any ->
- Any
+ {ok,[]} ->
+ ok;
+ {ok,RevBytes} ->
+ send_direct(Sock, lists:reverse(RevBytes));
+ Any ->
+ Any
end.
@@ -1154,52 +1048,54 @@ send([Byte | Spec], RevBytes, Sock) when is_integer(Byte) ->
send(Spec, [Byte | RevBytes], Sock);
send([List | Spec], RevBytes, Sock) when is_list(List) ->
case send(List, RevBytes, Sock) of
- {ok,Left} ->
- send(Spec, Left, Sock);
- Other ->
- Other
+ {ok,Left} ->
+ send(Spec, Left, Sock);
+ Other ->
+ Other
end;
send([d | Spec], RevBytes, Sock) ->
send([{d,1000} | Spec], RevBytes, Sock);
send([{d,S} | Spec], RevBytes, Sock) ->
case send_direct(Sock, lists:reverse(RevBytes)) of
- ok ->
- timer:sleep(S),
- send(Spec, [], Sock);
- Any ->
- Any
+ ok ->
+ timer:sleep(S),
+ send(Spec, [], Sock);
+ Any ->
+ Any
end.
%%%%
send_direct(Sock, Bytes) ->
case gen_tcp:send(Sock, Bytes) of
- ok ->
- ok;
- {error, closed} ->
- closed;
- {error, _Reason} ->
- error;
- Any ->
- test_server:format("unknown message: ~w~n",[Any]),
- Any
+ ok ->
+ ok;
+ {error, closed} ->
+ closed;
+ {error, _Reason} ->
+ error;
+ Any ->
+ test_server:format("unknown message: ~w~n",[Any]),
+ Any
end.
send_req(Req) ->
- case connect() of
- {ok,Sock} ->
- case send(Sock, [size16(Req), Req]) of
- ok ->
- {ok,Sock};
- Other ->
- test_server:format("Failed to send ~w on sock ~w: ~w~n",
- [Req,Sock,Other]),
- error
- end;
- Other ->
- test_server:format("Connect failed when sending ~w: ~p~n",
- [Req, Other]),
- error
+ send_req(Req, "localhost").
+send_req(Req, Addr) ->
+ case connect(Addr) of
+ {ok,Sock} ->
+ case send(Sock, [size16(Req), Req]) of
+ ok ->
+ {ok,Sock};
+ Other ->
+ test_server:format("Failed to send ~w on sock ~w: ~w~n",
+ [Req,Sock,Other]),
+ error
+ end;
+ Other ->
+ test_server:format("Connect failed when sending ~w: ~p~n",
+ [Req, Other]),
+ error
end.
recv_until_sock_closes(Sock) ->
@@ -1207,12 +1103,12 @@ recv_until_sock_closes(Sock) ->
recv_until_sock_closes_2(Sock,AccData) ->
case recv(Sock,0) of
- {ok,Data} ->
- recv_until_sock_closes_2(Sock,AccData++Data);
- closed ->
- {ok,AccData};
- Other ->
- Other
+ {ok,Data} ->
+ recv_until_sock_closes_2(Sock,AccData++Data);
+ closed ->
+ {ok,AccData};
+ Other ->
+ Other
end.
sleep(MilliSeconds) ->
@@ -1234,7 +1130,7 @@ flat_count([H|T], N) when is_list(H) ->
flat_count([_|T], N) ->
flat_count(T, N);
flat_count([], N) -> N.
-
+
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/erts/etc/Makefile b/erts/etc/Makefile
index 9a14cee89c..788dfff132 100644
--- a/erts/etc/Makefile
+++ b/erts/etc/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/erts/etc/common/Makefile b/erts/etc/common/Makefile
index bbf51d0efd..bad1d3ddb0 100644
--- a/erts/etc/common/Makefile
+++ b/erts/etc/common/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/erts/etc/common/Makefile.in b/erts/etc/common/Makefile.in
index 05d925f19f..cb053a1b7c 100644
--- a/erts/etc/common/Makefile.in
+++ b/erts/etc/common/Makefile.in
@@ -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/erts/etc/common/ct_run.c b/erts/etc/common/ct_run.c
index 548514ee6c..acdfa8c8b8 100644
--- a/erts/etc/common/ct_run.c
+++ b/erts/etc/common/ct_run.c
@@ -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.
@@ -81,13 +81,14 @@ static int eargc; /* Number of arguments in eargv. */
*/
static void error(char* format, ...);
-static char* emalloc(size_t size);
+static void* emalloc(size_t size);
static char* strsave(char* string);
static void push_words(char* src);
static int run_erlang(char* name, char** argv);
static char* get_default_emulator(char* progname);
#ifdef __WIN32__
static char* possibly_quote(char* arg);
+static void* erealloc(void *p, size_t size);
#endif
/*
@@ -141,10 +142,10 @@ int main(int argc, char** argv)
int i;
int len;
/* Convert argv to utf8 */
- argv = malloc((argc+1) * sizeof(char*));
+ argv = emalloc((argc+1) * sizeof(char*));
for (i=0; i<argc; i++) {
len = WideCharToMultiByte(CP_UTF8, 0, wcargv[i], -1, NULL, 0, NULL, NULL);
- argv[i] = malloc(len*sizeof(char));
+ argv[i] = emalloc(len*sizeof(char));
WideCharToMultiByte(CP_UTF8, 0, wcargv[i], -1, argv[i], len, NULL, NULL);
}
argv[argc] = NULL;
@@ -334,7 +335,7 @@ wchar_t *make_commandline(char **argv)
buff = (wchar_t *) emalloc(siz*sizeof(wchar_t));
} else if (siz < num) {
siz = num;
- buff = (wchar_t *) realloc(buff,siz*sizeof(wchar_t));
+ buff = (wchar_t *) erealloc(buff,siz*sizeof(wchar_t));
}
p = buff;
num=0;
@@ -437,15 +438,26 @@ error(char* format, ...)
exit(1);
}
-static char*
+static void*
emalloc(size_t size)
{
- char *p = malloc(size);
+ void *p = malloc(size);
if (p == NULL)
error("Insufficient memory");
return p;
}
+#ifdef __WIN32__
+static void *
+erealloc(void *p, size_t size)
+{
+ void *res = realloc(p, size);
+ if (res == NULL)
+ error("Insufficient memory");
+ return res;
+}
+#endif
+
static char*
strsave(char* string)
{
diff --git a/erts/etc/common/dialyzer.c b/erts/etc/common/dialyzer.c
index c45626606c..6ba3605422 100644
--- a/erts/etc/common/dialyzer.c
+++ b/erts/etc/common/dialyzer.c
@@ -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.
@@ -63,13 +63,14 @@ static int eargc; /* Number of arguments in eargv. */
*/
static void error(char* format, ...);
-static char* emalloc(size_t size);
+static void* emalloc(size_t size);
static char* strsave(char* string);
static void push_words(char* src);
static int run_erlang(char* name, char** argv);
static char* get_default_emulator(char* progname);
#ifdef __WIN32__
static char* possibly_quote(char* arg);
+static void* erealloc(void *p, size_t size);
#endif
/*
@@ -164,10 +165,10 @@ int main(int argc, char** argv)
#ifdef __WIN32__
int len;
/* Convert argv to utf8 */
- argv = malloc((argc+1) * sizeof(char*));
+ argv = emalloc((argc+1) * sizeof(char*));
for (i=0; i<argc; i++) {
len = WideCharToMultiByte(CP_UTF8, 0, wcargv[i], -1, NULL, 0, NULL, NULL);
- argv[i] = malloc(len*sizeof(char));
+ argv[i] = emalloc(len*sizeof(char));
WideCharToMultiByte(CP_UTF8, 0, wcargv[i], -1, argv[i], len, NULL, NULL);
}
argv[argc] = NULL;
@@ -310,7 +311,7 @@ wchar_t *make_commandline(char **argv)
buff = (wchar_t *) emalloc(siz*sizeof(wchar_t));
} else if (siz < num) {
siz = num;
- buff = (wchar_t *) realloc(buff,siz*sizeof(wchar_t));
+ buff = (wchar_t *) erealloc(buff,siz*sizeof(wchar_t));
}
p = buff;
num=0;
@@ -413,15 +414,26 @@ error(char* format, ...)
exit(1);
}
-static char*
+static void*
emalloc(size_t size)
{
- char *p = malloc(size);
+ void *p = malloc(size);
if (p == NULL)
error("Insufficient memory");
return p;
}
+#ifdef __WIN32__
+static void *
+erealloc(void *p, size_t size)
+{
+ void *res = realloc(p, size);
+ if (res == NULL)
+ error("Insufficient memory");
+ return res;
+}
+#endif
+
static char*
strsave(char* string)
{
diff --git a/erts/etc/common/erlc.c b/erts/etc/common/erlc.c
index f9d909e01c..b54cb31bef 100644
--- a/erts/etc/common/erlc.c
+++ b/erts/etc/common/erlc.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.
@@ -71,13 +71,14 @@ static int pause_after_execution = 0;
static char* process_opt(int* pArgc, char*** pArgv, int offset);
static void error(char* format, ...);
-static char* emalloc(size_t size);
+static void* emalloc(size_t size);
static char* strsave(char* string);
static void push_words(char* src);
static int run_erlang(char* name, char** argv);
static char* get_default_emulator(char* progname);
#ifdef __WIN32__
static char* possibly_quote(char* arg);
+static void* erealloc(void *p, size_t size);
#endif
/*
@@ -171,10 +172,10 @@ int main(int argc, char** argv)
int i;
int len;
/* Convert argv to utf8 */
- argv = malloc((argc+1) * sizeof(char*));
+ argv = emalloc((argc+1) * sizeof(char*));
for (i=0; i<argc; i++) {
len = WideCharToMultiByte(CP_UTF8, 0, wcargv[i], -1, NULL, 0, NULL, NULL);
- argv[i] = malloc(len*sizeof(char));
+ argv[i] = emalloc(len*sizeof(char));
WideCharToMultiByte(CP_UTF8, 0, wcargv[i], -1, argv[i], len, NULL, NULL);
}
argv[argc] = NULL;
@@ -370,7 +371,7 @@ wchar_t *make_commandline(char **argv)
buff = (wchar_t *) emalloc(siz*sizeof(wchar_t));
} else if (siz < num) {
siz = num;
- buff = (wchar_t *) realloc(buff,siz*sizeof(wchar_t));
+ buff = (wchar_t *) erealloc(buff,siz*sizeof(wchar_t));
}
p = buff;
num=0;
@@ -478,15 +479,26 @@ error(char* format, ...)
exit(1);
}
-static char*
+static void*
emalloc(size_t size)
{
- char *p = malloc(size);
+ void *p = malloc(size);
if (p == NULL)
error("Insufficient memory");
return p;
}
+#ifdef __WIN32__
+static void *
+erealloc(void *p, size_t size)
+{
+ void *res = realloc(p, size);
+ if (res == NULL)
+ error("Insufficient memory");
+ return res;
+}
+#endif
+
static char*
strsave(char* string)
{
diff --git a/erts/etc/common/erlexec.c b/erts/etc/common/erlexec.c
index f21671e837..42da05b1f7 100644
--- a/erts/etc/common/erlexec.c
+++ b/erts/etc/common/erlexec.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.
@@ -65,6 +65,7 @@
static const char plusM_au_allocs[]= {
'u', /* all alloc_util allocators */
'B', /* binary_alloc */
+ 'I', /* literal_alloc */
'D', /* std_alloc */
'E', /* ets_alloc */
'F', /* fix_alloc */
@@ -73,6 +74,7 @@ static const char plusM_au_allocs[]= {
'R', /* driver_alloc */
'S', /* sl_alloc */
'T', /* temp_alloc */
+ 'X', /* exec_alloc */
'Z', /* test_alloc */
'\0'
};
@@ -121,6 +123,8 @@ static char *plusM_other_switches[] = {
"Ym",
"Ytp",
"Ytt",
+ "Iscs",
+ "Xscs",
NULL
};
@@ -146,6 +150,10 @@ static char *plush_val_switches[] = {
"ms",
"mbs",
"pds",
+ "max",
+ "maxk",
+ "maxel",
+ "mqd",
"",
NULL
};
@@ -156,12 +164,6 @@ static char *plusr_val_switches[] = {
NULL
};
-/* +x arguments with values */
-static char *plusx_val_switches[] = {
- "mqd",
- NULL
-};
-
/* +z arguments with values */
static char *plusz_val_switches[] = {
"dbbl",
@@ -843,7 +845,6 @@ int main(int argc, char **argv)
if (argv[i][3] != '\0')
goto the_default;
}
-#ifdef ERTS_DIRTY_SCHEDULERS
else if (argv[i][2] == 'D') {
char* type = argv[i]+3;
if (strncmp(type, "cpu", 3) != 0 &&
@@ -855,7 +856,6 @@ int main(int argc, char **argv)
(argv[i][3] == 'i' && argv[i][5] != '\0'))
goto the_default;
}
-#endif
else if (argv[i][2] != '\0')
goto the_default;
if (i+1 >= argc)
@@ -982,20 +982,6 @@ int main(int argc, char **argv)
add_Eargs(argv[i+1]);
i++;
break;
- case 'x':
- if (!is_one_of_strings(&argv[i][2], plusx_val_switches)) {
- goto the_default;
- } else {
- if (i+1 >= argc
- || argv[i+1][0] == '-'
- || argv[i+1][0] == '+')
- usage(argv[i]);
- argv[i][0] = '-';
- add_Eargs(argv[i]);
- add_Eargs(argv[i+1]);
- i++;
- }
- break;
case 'z':
if (!is_one_of_strings(&argv[i][2], plusz_val_switches)) {
goto the_default;
@@ -1196,7 +1182,7 @@ usage_aux(void)
"[+S NO_SCHEDULERS:NO_SCHEDULERS_ONLINE] "
"[+SP PERCENTAGE_SCHEDULERS:PERCENTAGE_SCHEDULERS_ONLINE] "
"[+T LEVEL] [+V] [+v] "
- "[+W<i|w|e>] [+x DEFAULT_PROC_FLAGS] [+z MISC_OPTION] [args ...]\n");
+ "[+W<i|w|e>] [+z MISC_OPTION] [args ...]\n");
exit(1);
}
diff --git a/erts/etc/common/escript.c b/erts/etc/common/escript.c
index 7fd02ed436..71c278881c 100644
--- a/erts/etc/common/escript.c
+++ b/erts/etc/common/escript.c
@@ -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.
@@ -71,7 +71,7 @@ static int eargc; /* Number of arguments in eargv. */
*/
static void error(char* format, ...);
-static char* emalloc(size_t size);
+static void* emalloc(size_t size);
static void efree(void *p);
static char* strsave(char* string);
static void push_words(char* src);
@@ -79,6 +79,7 @@ static int run_erlang(char* name, char** argv);
static char* get_default_emulator(char* progname);
#ifdef __WIN32__
static char* possibly_quote(char* arg);
+static void* erealloc(void *p, size_t size);
#endif
/*
@@ -418,10 +419,10 @@ main(int argc, char** argv)
int i;
int len;
/* Convert argv to utf8 */
- argv = malloc((argc+1) * sizeof(char*));
+ argv = emalloc((argc+1) * sizeof(char*));
for (i=0; i<argc; i++) {
len = WideCharToMultiByte(CP_UTF8, 0, wcargv[i], -1, NULL, 0, NULL, NULL);
- argv[i] = malloc(len*sizeof(char));
+ argv[i] = emalloc(len*sizeof(char));
WideCharToMultiByte(CP_UTF8, 0, wcargv[i], -1, argv[i], len, NULL, NULL);
}
argv[argc] = NULL;
@@ -594,7 +595,7 @@ wchar_t *make_commandline(char **argv)
buff = (wchar_t *) emalloc(siz*sizeof(wchar_t));
} else if (siz < num) {
siz = num;
- buff = (wchar_t *) realloc(buff,siz*sizeof(wchar_t));
+ buff = (wchar_t *) erealloc(buff,siz*sizeof(wchar_t));
}
p = buff;
num=0;
@@ -694,15 +695,26 @@ error(char* format, ...)
exit(1);
}
-static char*
+static void*
emalloc(size_t size)
{
- char *p = malloc(size);
+ void *p = malloc(size);
if (p == NULL)
error("Insufficient memory");
return p;
}
+#ifdef __WIN32__
+static void *
+erealloc(void *p, size_t size)
+{
+ void *res = realloc(p, size);
+ if (res == NULL)
+ error("Insufficient memory");
+ return res;
+}
+#endif
+
static void
efree(void *p)
{
diff --git a/erts/etc/common/heart.c b/erts/etc/common/heart.c
index 1a826221fb..e931ae4641 100644
--- a/erts/etc/common/heart.c
+++ b/erts/etc/common/heart.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/erts/etc/common/inet_gethost.c b/erts/etc/common/inet_gethost.c
index e298c5e7f7..bc4893b0eb 100644
--- a/erts/etc/common/inet_gethost.c
+++ b/erts/etc/common/inet_gethost.c
@@ -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.
@@ -2646,7 +2646,7 @@ static void *my_realloc(void *old, size_t size)
BOOL create_mesq(MesQ **q)
{
- MesQ *tmp = malloc(sizeof(MesQ));
+ MesQ *tmp = ALLOC(sizeof(MesQ));
tmp->data_present = CreateEvent(NULL, TRUE, FALSE,NULL);
if (tmp->data_present == NULL) {
free(tmp);
diff --git a/erts/etc/common/typer.c b/erts/etc/common/typer.c
index 0aa0996808..77a95ccded 100644
--- a/erts/etc/common/typer.c
+++ b/erts/etc/common/typer.c
@@ -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.
@@ -63,13 +63,14 @@ static int eargc; /* Number of arguments in eargv. */
*/
static void error(char* format, ...);
-static char* emalloc(size_t size);
+static void* emalloc(size_t size);
static char* strsave(char* string);
static void push_words(char* src);
static int run_erlang(char* name, char** argv);
static char* get_default_emulator(char* progname);
#ifdef __WIN32__
static char* possibly_quote(char* arg);
+static void* erealloc(void *p, size_t size);
#endif
/*
@@ -118,10 +119,10 @@ main(int argc, char** argv)
int i;
int len;
/* Convert argv to utf8 */
- argv = malloc((argc+1) * sizeof(char*));
+ argv = emalloc((argc+1) * sizeof(char*));
for (i=0; i<argc; i++) {
len = WideCharToMultiByte(CP_UTF8, 0, wcargv[i], -1, NULL, 0, NULL, NULL);
- argv[i] = malloc(len*sizeof(char));
+ argv[i] = emalloc(len*sizeof(char));
WideCharToMultiByte(CP_UTF8, 0, wcargv[i], -1, argv[i], len, NULL, NULL);
}
argv[argc] = NULL;
@@ -232,7 +233,7 @@ wchar_t *make_commandline(char **argv)
buff = (wchar_t *) emalloc(siz*sizeof(wchar_t));
} else if (siz < num) {
siz = num;
- buff = (wchar_t *) realloc(buff,siz*sizeof(wchar_t));
+ buff = (wchar_t *) erealloc(buff,siz*sizeof(wchar_t));
}
p = buff;
num=0;
@@ -332,15 +333,26 @@ error(char* format, ...)
exit(1);
}
-static char*
+static void*
emalloc(size_t size)
{
- char *p = malloc(size);
+ void *p = malloc(size);
if (p == NULL)
error("Insufficient memory");
return p;
}
+#ifdef __WIN32__
+static void *
+erealloc(void *p, size_t size)
+{
+ void *res = realloc(p, size);
+ if (res == NULL)
+ error("Insufficient memory");
+ return res;
+}
+#endif
+
static char*
strsave(char* string)
{
diff --git a/erts/etc/unix/Install.src b/erts/etc/unix/Install.src
index 6634ae31d3..e71308edbe 100644
--- a/erts/etc/unix/Install.src
+++ b/erts/etc/unix/Install.src
@@ -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.
diff --git a/erts/etc/unix/Makefile b/erts/etc/unix/Makefile
index 04ae11de3b..2fa9cd047b 100644
--- a/erts/etc/unix/Makefile
+++ b/erts/etc/unix/Makefile
@@ -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/erts/etc/unix/README b/erts/etc/unix/README
index 6bda610a03..adc6db4300 100644
--- a/erts/etc/unix/README
+++ b/erts/etc/unix/README
@@ -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/erts/etc/unix/RELNOTES b/erts/etc/unix/RELNOTES
index 629867d2ae..7b4a1746fe 100644
--- a/erts/etc/unix/RELNOTES
+++ b/erts/etc/unix/RELNOTES
@@ -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/erts/etc/unix/cerl.src b/erts/etc/unix/cerl.src
index 2a806bb2f1..c5422ab2ed 100644
--- a/erts/etc/unix/cerl.src
+++ b/erts/etc/unix/cerl.src
@@ -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/erts/etc/unix/dyn_erl.c b/erts/etc/unix/dyn_erl.c
index 4eebfae50a..d6d2201648 100644
--- a/erts/etc/unix/dyn_erl.c
+++ b/erts/etc/unix/dyn_erl.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/erts/etc/unix/erl.src.src b/erts/etc/unix/erl.src.src
index 94c6f9f854..959c099e8f 100644
--- a/erts/etc/unix/erl.src.src
+++ b/erts/etc/unix/erl.src.src
@@ -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/erts/etc/unix/etp-commands.in b/erts/etc/unix/etp-commands.in
index 7b554e71f2..4dc24d68b4 100644
--- a/erts/etc/unix/etp-commands.in
+++ b/erts/etc/unix/etp-commands.in
@@ -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.
@@ -776,7 +776,7 @@ define etp-pid-1
if ($etp_pid_1 & 0xF) == 0x3
if (etp_arch_bits == 64)
if (etp_big_endian)
- set $etp_pid_data = (unsigned) ((((Uint64) $etp_pid_1) >> 36) & 0x0fffffff)
+ set $etp_pid_data = (unsigned) ((((Uint64) $etp_pid_1) >> 35) & 0x0fffffff)
else
set $etp_pid_data = (unsigned) ((((Uint64) $etp_pid_1) >> 4) & 0x0fffffff)
end
diff --git a/erts/etc/unix/etp-thr.py b/erts/etc/unix/etp-thr.py
index 16bc7f4016..fb82dcaf1f 100644
--- a/erts/etc/unix/etp-thr.py
+++ b/erts/etc/unix/etp-thr.py
@@ -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/erts/etc/unix/etp_commands.erl b/erts/etc/unix/etp_commands.erl
index fe16a71876..fe8f2dd556 100644
--- a/erts/etc/unix/etp_commands.erl
+++ b/erts/etc/unix/etp_commands.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/erts/etc/unix/etp_commands.mk b/erts/etc/unix/etp_commands.mk
index def6f7bda0..983ee9f919 100644
--- a/erts/etc/unix/etp_commands.mk
+++ b/erts/etc/unix/etp_commands.mk
@@ -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/erts/etc/unix/format_man_pages b/erts/etc/unix/format_man_pages
index 7abe65cecb..54f2d90c28 100644
--- a/erts/etc/unix/format_man_pages
+++ b/erts/etc/unix/format_man_pages
@@ -3,7 +3,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/erts/etc/unix/run_erl.c b/erts/etc/unix/run_erl.c
index 44efb975ba..30210ac172 100644
--- a/erts/etc/unix/run_erl.c
+++ b/erts/etc/unix/run_erl.c
@@ -42,9 +42,14 @@
# include "config.h"
#endif
#ifdef HAVE_WORKING_POSIX_OPENPT
-#ifndef _XOPEN_SOURCE
-#define _XOPEN_SOURCE 600
-#endif
+# ifndef _XOPEN_SOURCE
+ /* On OS X and BSD, we must leave _XOPEN_SOURCE undefined in order for
+ * the prototype of vsyslog() to be included.
+ */
+# if !(defined(__APPLE__) || defined(__FreeBSD__) || defined(__DragonFly__))
+# define _XOPEN_SOURCE 600
+# endif
+# endif
#endif
#include <sys/types.h>
#include <sys/wait.h>
@@ -64,10 +69,6 @@
#include <termios.h>
#include <time.h>
-#ifdef __ANDROID__
-# include <termios.h>
-#endif
-
#ifdef HAVE_SYSLOG_H
# include <syslog.h>
#endif
@@ -77,6 +78,9 @@
#ifdef HAVE_UTMP_H
# include <utmp.h>
#endif
+#ifdef HAVE_LIBUTIL_H
+# include <libutil.h>
+#endif
#ifdef HAVE_UTIL_H
# include <util.h>
#endif
diff --git a/erts/etc/unix/run_erl.h b/erts/etc/unix/run_erl.h
index cc70a98e52..83bdfdfb19 100644
--- a/erts/etc/unix/run_erl.h
+++ b/erts/etc/unix/run_erl.h
@@ -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/erts/etc/unix/safe_string.c b/erts/etc/unix/safe_string.c
index a5c11d41d8..666022dc61 100644
--- a/erts/etc/unix/safe_string.c
+++ b/erts/etc/unix/safe_string.c
@@ -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/erts/etc/unix/safe_string.h b/erts/etc/unix/safe_string.h
index 5a471f10de..cafd3fc71a 100644
--- a/erts/etc/unix/safe_string.h
+++ b/erts/etc/unix/safe_string.h
@@ -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/erts/etc/unix/setuid_socket_wrap.c b/erts/etc/unix/setuid_socket_wrap.c
index 59ed8eae6f..461c69ee3e 100644
--- a/erts/etc/unix/setuid_socket_wrap.c
+++ b/erts/etc/unix/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/erts/etc/unix/start.src b/erts/etc/unix/start.src
index 377f5e85c8..bdd146951f 100644
--- a/erts/etc/unix/start.src
+++ b/erts/etc/unix/start.src
@@ -2,7 +2,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/erts/etc/unix/start_erl.src b/erts/etc/unix/start_erl.src
index b889101783..34e0369710 100644
--- a/erts/etc/unix/start_erl.src
+++ b/erts/etc/unix/start_erl.src
@@ -3,7 +3,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/erts/etc/win32/Install.c b/erts/etc/win32/Install.c
index 82bae947d4..43930ff284 100644
--- a/erts/etc/win32/Install.c
+++ b/erts/etc/win32/Install.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/erts/etc/win32/Makefile b/erts/etc/win32/Makefile
index 12c04fc9a5..c6376ebe74 100644
--- a/erts/etc/win32/Makefile
+++ b/erts/etc/win32/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/erts/etc/win32/Nmakefile.start_erl b/erts/etc/win32/Nmakefile.start_erl
index cf83713bab..00d22461fb 100644
--- a/erts/etc/win32/Nmakefile.start_erl
+++ b/erts/etc/win32/Nmakefile.start_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/erts/etc/win32/beam.rc b/erts/etc/win32/beam.rc
index 9e137ecd62..0aaabf1097 100644
--- a/erts/etc/win32/beam.rc
+++ b/erts/etc/win32/beam.rc
@@ -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/erts/etc/win32/cygwin_tools/erl b/erts/etc/win32/cygwin_tools/erl
index 51a7be5584..897bbfac87 100755
--- a/erts/etc/win32/cygwin_tools/erl
+++ b/erts/etc/win32/cygwin_tools/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/erts/etc/win32/cygwin_tools/erlc b/erts/etc/win32/cygwin_tools/erlc
index 588b53b1be..eda9fdb7fc 100755
--- a/erts/etc/win32/cygwin_tools/erlc
+++ b/erts/etc/win32/cygwin_tools/erlc
@@ -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/erts/etc/win32/cygwin_tools/javac.sh b/erts/etc/win32/cygwin_tools/javac.sh
index f2f97ef152..f53e5a3cc6 100755
--- a/erts/etc/win32/cygwin_tools/javac.sh
+++ b/erts/etc/win32/cygwin_tools/javac.sh
@@ -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/erts/etc/win32/cygwin_tools/make_bootstrap_ini.sh b/erts/etc/win32/cygwin_tools/make_bootstrap_ini.sh
index 0f87f3d077..377c0dda6c 100755
--- a/erts/etc/win32/cygwin_tools/make_bootstrap_ini.sh
+++ b/erts/etc/win32/cygwin_tools/make_bootstrap_ini.sh
@@ -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/erts/etc/win32/cygwin_tools/make_local_ini.sh b/erts/etc/win32/cygwin_tools/make_local_ini.sh
index 0bcb362ffe..e5db98468b 100755
--- a/erts/etc/win32/cygwin_tools/make_local_ini.sh
+++ b/erts/etc/win32/cygwin_tools/make_local_ini.sh
@@ -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/erts/etc/win32/cygwin_tools/mingw/ar.sh b/erts/etc/win32/cygwin_tools/mingw/ar.sh
index 2ebfe4e435..de166284d8 100755
--- a/erts/etc/win32/cygwin_tools/mingw/ar.sh
+++ b/erts/etc/win32/cygwin_tools/mingw/ar.sh
@@ -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/erts/etc/win32/cygwin_tools/mingw/cc.sh b/erts/etc/win32/cygwin_tools/mingw/cc.sh
index 5993f70686..0b321a5099 100755
--- a/erts/etc/win32/cygwin_tools/mingw/cc.sh
+++ b/erts/etc/win32/cygwin_tools/mingw/cc.sh
@@ -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/erts/etc/win32/cygwin_tools/mingw/coffix.c b/erts/etc/win32/cygwin_tools/mingw/coffix.c
index 383c422008..ff3f3de3d1 100644
--- a/erts/etc/win32/cygwin_tools/mingw/coffix.c
+++ b/erts/etc/win32/cygwin_tools/mingw/coffix.c
@@ -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/erts/etc/win32/cygwin_tools/mingw/emu_cc.sh b/erts/etc/win32/cygwin_tools/mingw/emu_cc.sh
index 8da91dd0ef..5f510467fe 100755
--- a/erts/etc/win32/cygwin_tools/mingw/emu_cc.sh
+++ b/erts/etc/win32/cygwin_tools/mingw/emu_cc.sh
@@ -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/erts/etc/win32/cygwin_tools/mingw/ld.sh b/erts/etc/win32/cygwin_tools/mingw/ld.sh
index 16caf0b6d2..8b7e1a54c4 100755
--- a/erts/etc/win32/cygwin_tools/mingw/ld.sh
+++ b/erts/etc/win32/cygwin_tools/mingw/ld.sh
@@ -3,7 +3,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/erts/etc/win32/cygwin_tools/mingw/mc.sh b/erts/etc/win32/cygwin_tools/mingw/mc.sh
index 4462bfc5d3..8228f8699e 100755
--- a/erts/etc/win32/cygwin_tools/mingw/mc.sh
+++ b/erts/etc/win32/cygwin_tools/mingw/mc.sh
@@ -3,7 +3,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/erts/etc/win32/cygwin_tools/mingw/rc.sh b/erts/etc/win32/cygwin_tools/mingw/rc.sh
index b8a2d2fbcf..de1b15a432 100755
--- a/erts/etc/win32/cygwin_tools/mingw/rc.sh
+++ b/erts/etc/win32/cygwin_tools/mingw/rc.sh
@@ -3,7 +3,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/erts/etc/win32/cygwin_tools/vc/ar.sh b/erts/etc/win32/cygwin_tools/vc/ar.sh
index e0bd1bd5ca..0989cc878b 100755
--- a/erts/etc/win32/cygwin_tools/vc/ar.sh
+++ b/erts/etc/win32/cygwin_tools/vc/ar.sh
@@ -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/erts/etc/win32/cygwin_tools/vc/cc.sh b/erts/etc/win32/cygwin_tools/vc/cc.sh
index 651b6e098d..9eeb004f0e 100755
--- a/erts/etc/win32/cygwin_tools/vc/cc.sh
+++ b/erts/etc/win32/cygwin_tools/vc/cc.sh
@@ -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/erts/etc/win32/cygwin_tools/vc/cc_wrap.c b/erts/etc/win32/cygwin_tools/vc/cc_wrap.c
index b42e0e1037..198f3b5649 100644
--- a/erts/etc/win32/cygwin_tools/vc/cc_wrap.c
+++ b/erts/etc/win32/cygwin_tools/vc/cc_wrap.c
@@ -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/erts/etc/win32/cygwin_tools/vc/coffix.c b/erts/etc/win32/cygwin_tools/vc/coffix.c
index 0633c6ddea..bf1096c425 100644
--- a/erts/etc/win32/cygwin_tools/vc/coffix.c
+++ b/erts/etc/win32/cygwin_tools/vc/coffix.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/erts/etc/win32/cygwin_tools/vc/emu_cc.sh b/erts/etc/win32/cygwin_tools/vc/emu_cc.sh
index fb6ee2d7a2..343cd366a6 100755
--- a/erts/etc/win32/cygwin_tools/vc/emu_cc.sh
+++ b/erts/etc/win32/cygwin_tools/vc/emu_cc.sh
@@ -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/erts/etc/win32/cygwin_tools/vc/ld.sh b/erts/etc/win32/cygwin_tools/vc/ld.sh
index ff538122b2..2b7d7c6694 100755
--- a/erts/etc/win32/cygwin_tools/vc/ld.sh
+++ b/erts/etc/win32/cygwin_tools/vc/ld.sh
@@ -3,7 +3,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/erts/etc/win32/cygwin_tools/vc/ld_wrap.c b/erts/etc/win32/cygwin_tools/vc/ld_wrap.c
index 000c13befd..94b5c38751 100644
--- a/erts/etc/win32/cygwin_tools/vc/ld_wrap.c
+++ b/erts/etc/win32/cygwin_tools/vc/ld_wrap.c
@@ -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/erts/etc/win32/cygwin_tools/vc/mc.sh b/erts/etc/win32/cygwin_tools/vc/mc.sh
index 2de5cbba9b..c88f2ff1a7 100755
--- a/erts/etc/win32/cygwin_tools/vc/mc.sh
+++ b/erts/etc/win32/cygwin_tools/vc/mc.sh
@@ -3,7 +3,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/erts/etc/win32/cygwin_tools/vc/rc.sh b/erts/etc/win32/cygwin_tools/vc/rc.sh
index 414ffa0448..286ebb03f0 100755
--- a/erts/etc/win32/cygwin_tools/vc/rc.sh
+++ b/erts/etc/win32/cygwin_tools/vc/rc.sh
@@ -3,7 +3,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/erts/etc/win32/erl.c b/erts/etc/win32/erl.c
index 59693955a5..b230aa6a40 100644
--- a/erts/etc/win32/erl.c
+++ b/erts/etc/win32/erl.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/erts/etc/win32/erl.rc b/erts/etc/win32/erl.rc
index e8848e7969..772213ac86 100644
--- a/erts/etc/win32/erl.rc
+++ b/erts/etc/win32/erl.rc
@@ -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/erts/etc/win32/erl_log.c b/erts/etc/win32/erl_log.c
index 2a873dffac..de0d8e39f0 100644
--- a/erts/etc/win32/erl_log.c
+++ b/erts/etc/win32/erl_log.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/erts/etc/win32/erlsrv/erlsrv_global.h b/erts/etc/win32/erlsrv/erlsrv_global.h
index f535599cf1..fc6166fc7c 100644
--- a/erts/etc/win32/erlsrv/erlsrv_global.h
+++ b/erts/etc/win32/erlsrv/erlsrv_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/erts/etc/win32/erlsrv/erlsrv_interactive.c b/erts/etc/win32/erlsrv/erlsrv_interactive.c
index d2236ac9f7..c616ef86e3 100644
--- a/erts/etc/win32/erlsrv/erlsrv_interactive.c
+++ b/erts/etc/win32/erlsrv/erlsrv_interactive.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/erts/etc/win32/erlsrv/erlsrv_interactive.h b/erts/etc/win32/erlsrv/erlsrv_interactive.h
index a83f5a4b85..03cf4b3339 100644
--- a/erts/etc/win32/erlsrv/erlsrv_interactive.h
+++ b/erts/etc/win32/erlsrv/erlsrv_interactive.h
@@ -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/erts/etc/win32/erlsrv/erlsrv_main.c b/erts/etc/win32/erlsrv/erlsrv_main.c
index caca18de00..521e7687f4 100644
--- a/erts/etc/win32/erlsrv/erlsrv_main.c
+++ b/erts/etc/win32/erlsrv/erlsrv_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/erts/etc/win32/erlsrv/erlsrv_registry.c b/erts/etc/win32/erlsrv/erlsrv_registry.c
index f95f4ef074..eb2a8c567c 100644
--- a/erts/etc/win32/erlsrv/erlsrv_registry.c
+++ b/erts/etc/win32/erlsrv/erlsrv_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/erts/etc/win32/erlsrv/erlsrv_registry.h b/erts/etc/win32/erlsrv/erlsrv_registry.h
index 3aa265686a..885d021497 100644
--- a/erts/etc/win32/erlsrv/erlsrv_registry.h
+++ b/erts/etc/win32/erlsrv/erlsrv_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/erts/etc/win32/erlsrv/erlsrv_service.c b/erts/etc/win32/erlsrv/erlsrv_service.c
index d9fa165355..f5d5c0b174 100644
--- a/erts/etc/win32/erlsrv/erlsrv_service.c
+++ b/erts/etc/win32/erlsrv/erlsrv_service.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/erts/etc/win32/erlsrv/erlsrv_service.h b/erts/etc/win32/erlsrv/erlsrv_service.h
index c87292325c..4e1148cac2 100644
--- a/erts/etc/win32/erlsrv/erlsrv_service.h
+++ b/erts/etc/win32/erlsrv/erlsrv_service.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/erts/etc/win32/erlsrv/erlsrv_util.c b/erts/etc/win32/erlsrv/erlsrv_util.c
index 800395ff12..f719082d37 100644
--- a/erts/etc/win32/erlsrv/erlsrv_util.c
+++ b/erts/etc/win32/erlsrv/erlsrv_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/erts/etc/win32/erlsrv/erlsrv_util.h b/erts/etc/win32/erlsrv/erlsrv_util.h
index 1afcd1dd7e..97cc91834f 100644
--- a/erts/etc/win32/erlsrv/erlsrv_util.h
+++ b/erts/etc/win32/erlsrv/erlsrv_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/erts/etc/win32/init_file.c b/erts/etc/win32/init_file.c
index 93d82b1823..147e299798 100644
--- a/erts/etc/win32/init_file.c
+++ b/erts/etc/win32/init_file.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/erts/etc/win32/init_file.h b/erts/etc/win32/init_file.h
index 404b5fd03b..df33d23a35 100644
--- a/erts/etc/win32/init_file.h
+++ b/erts/etc/win32/init_file.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/erts/etc/win32/msys_tools/erl b/erts/etc/win32/msys_tools/erl
index 110d48c769..a2fe924e78 100644
--- a/erts/etc/win32/msys_tools/erl
+++ b/erts/etc/win32/msys_tools/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/erts/etc/win32/msys_tools/erlc b/erts/etc/win32/msys_tools/erlc
index b50090b6de..45d466743e 100644
--- a/erts/etc/win32/msys_tools/erlc
+++ b/erts/etc/win32/msys_tools/erlc
@@ -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/erts/etc/win32/msys_tools/javac.sh b/erts/etc/win32/msys_tools/javac.sh
index 5b51648a19..6a8b245601 100644
--- a/erts/etc/win32/msys_tools/javac.sh
+++ b/erts/etc/win32/msys_tools/javac.sh
@@ -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/erts/etc/win32/msys_tools/make_bootstrap_ini.sh b/erts/etc/win32/msys_tools/make_bootstrap_ini.sh
index 1797f67c78..59fc6fc09a 100644
--- a/erts/etc/win32/msys_tools/make_bootstrap_ini.sh
+++ b/erts/etc/win32/msys_tools/make_bootstrap_ini.sh
@@ -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/erts/etc/win32/msys_tools/make_local_ini.sh b/erts/etc/win32/msys_tools/make_local_ini.sh
index 11f722e7f8..046b3e9d00 100644
--- a/erts/etc/win32/msys_tools/make_local_ini.sh
+++ b/erts/etc/win32/msys_tools/make_local_ini.sh
@@ -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/erts/etc/win32/msys_tools/vc/ar.sh b/erts/etc/win32/msys_tools/vc/ar.sh
index 4c98e3cc29..a33c954c0f 100644
--- a/erts/etc/win32/msys_tools/vc/ar.sh
+++ b/erts/etc/win32/msys_tools/vc/ar.sh
@@ -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/erts/etc/win32/msys_tools/vc/cc.sh b/erts/etc/win32/msys_tools/vc/cc.sh
index 72005862ed..2b0482e876 100644
--- a/erts/etc/win32/msys_tools/vc/cc.sh
+++ b/erts/etc/win32/msys_tools/vc/cc.sh
@@ -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/erts/etc/win32/msys_tools/vc/coffix.c b/erts/etc/win32/msys_tools/vc/coffix.c
index 4f21cfc389..bf1096c425 100644
--- a/erts/etc/win32/msys_tools/vc/coffix.c
+++ b/erts/etc/win32/msys_tools/vc/coffix.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.
diff --git a/erts/etc/win32/msys_tools/vc/emu_cc.sh b/erts/etc/win32/msys_tools/vc/emu_cc.sh
index 10d59214ea..2de3a07aca 100644
--- a/erts/etc/win32/msys_tools/vc/emu_cc.sh
+++ b/erts/etc/win32/msys_tools/vc/emu_cc.sh
@@ -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/erts/etc/win32/msys_tools/vc/ld.sh b/erts/etc/win32/msys_tools/vc/ld.sh
index 11b2fc077b..8917251f51 100644
--- a/erts/etc/win32/msys_tools/vc/ld.sh
+++ b/erts/etc/win32/msys_tools/vc/ld.sh
@@ -3,7 +3,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/erts/etc/win32/msys_tools/vc/mc.sh b/erts/etc/win32/msys_tools/vc/mc.sh
index 14b5ebaa8f..a074a1a89f 100644
--- a/erts/etc/win32/msys_tools/vc/mc.sh
+++ b/erts/etc/win32/msys_tools/vc/mc.sh
@@ -3,7 +3,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/erts/etc/win32/msys_tools/vc/rc.sh b/erts/etc/win32/msys_tools/vc/rc.sh
index 1f8ade17cb..3d1186ca91 100644
--- a/erts/etc/win32/msys_tools/vc/rc.sh
+++ b/erts/etc/win32/msys_tools/vc/rc.sh
@@ -3,7 +3,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/erts/etc/win32/nsis/Makefile b/erts/etc/win32/nsis/Makefile
index 64f44ff86d..0b4e0d0359 100644
--- a/erts/etc/win32/nsis/Makefile
+++ b/erts/etc/win32/nsis/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/erts/etc/win32/nsis/dll_version_helper.sh b/erts/etc/win32/nsis/dll_version_helper.sh
index 86e36f62c9..9eafb6ce0e 100755
--- a/erts/etc/win32/nsis/dll_version_helper.sh
+++ b/erts/etc/win32/nsis/dll_version_helper.sh
@@ -2,7 +2,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/erts/etc/win32/nsis/erlang20.nsi b/erts/etc/win32/nsis/erlang20.nsi
index bf6ba0b9a6..66746b684d 100644
--- a/erts/etc/win32/nsis/erlang20.nsi
+++ b/erts/etc/win32/nsis/erlang20.nsi
@@ -7,7 +7,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/erts/etc/win32/nsis/find_redist.sh b/erts/etc/win32/nsis/find_redist.sh
index 03e92b21c7..c070ad469a 100755
--- a/erts/etc/win32/nsis/find_redist.sh
+++ b/erts/etc/win32/nsis/find_redist.sh
@@ -2,7 +2,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/erts/etc/win32/port_entry.c b/erts/etc/win32/port_entry.c
index 5681a2a548..8b1d3a44b8 100644
--- a/erts/etc/win32/port_entry.c
+++ b/erts/etc/win32/port_entry.c
@@ -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/erts/etc/win32/resource.h b/erts/etc/win32/resource.h
index 32d8b8885d..e59baadb50 100644
--- a/erts/etc/win32/resource.h
+++ b/erts/etc/win32/resource.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/erts/etc/win32/start_erl.c b/erts/etc/win32/start_erl.c
index a4437c2f6b..07bcd19b81 100644
--- a/erts/etc/win32/start_erl.c
+++ b/erts/etc/win32/start_erl.c
@@ -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/erts/etc/win32/win_erlexec.c b/erts/etc/win32/win_erlexec.c
index f2460197e6..39dac358e9 100644
--- a/erts/etc/win32/win_erlexec.c
+++ b/erts/etc/win32/win_erlexec.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/erts/example/Makefile b/erts/example/Makefile
index cc5bcce191..f00321ac45 100644
--- a/erts/example/Makefile
+++ b/erts/example/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/erts/example/matrix_nif.c b/erts/example/matrix_nif.c
index dfe446e879..6452084eb7 100644
--- a/erts/example/matrix_nif.c
+++ b/erts/example/matrix_nif.c
@@ -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/erts/example/matrix_nif.erl b/erts/example/matrix_nif.erl
index d56b358247..bdc7228ac0 100644
--- a/erts/example/matrix_nif.erl
+++ b/erts/example/matrix_nif.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/erts/example/next_perm.cc b/erts/example/next_perm.cc
index c7b7096e7b..882af4cd1e 100644
--- a/erts/example/next_perm.cc
+++ b/erts/example/next_perm.cc
@@ -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/erts/example/next_perm.erl b/erts/example/next_perm.erl
index d414470f3a..b6f47b975c 100644
--- a/erts/example/next_perm.erl
+++ b/erts/example/next_perm.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/erts/example/pg_async.c b/erts/example/pg_async.c
index cd6bc9e0c2..3167ce5227 100644
--- a/erts/example/pg_async.c
+++ b/erts/example/pg_async.c
@@ -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/erts/example/pg_async.erl b/erts/example/pg_async.erl
index 20ee94f61a..d34d03cf09 100644
--- a/erts/example/pg_async.erl
+++ b/erts/example/pg_async.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/erts/example/pg_async2.c b/erts/example/pg_async2.c
index 9eb3ec9d54..ee772f4447 100644
--- a/erts/example/pg_async2.c
+++ b/erts/example/pg_async2.c
@@ -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/erts/example/pg_async2.erl b/erts/example/pg_async2.erl
index 082852f617..9398f4ccbe 100644
--- a/erts/example/pg_async2.erl
+++ b/erts/example/pg_async2.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/erts/example/pg_encode.c b/erts/example/pg_encode.c
index e1ec4abb1d..1efc4c1eaf 100644
--- a/erts/example/pg_encode.c
+++ b/erts/example/pg_encode.c
@@ -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/erts/example/pg_encode.h b/erts/example/pg_encode.h
index df3f8fcaaa..213e20198e 100644
--- a/erts/example/pg_encode.h
+++ b/erts/example/pg_encode.h
@@ -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/erts/example/pg_encode2.c b/erts/example/pg_encode2.c
index cdf8e71e44..df5ec9771b 100644
--- a/erts/example/pg_encode2.c
+++ b/erts/example/pg_encode2.c
@@ -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/erts/example/pg_encode2.h b/erts/example/pg_encode2.h
index df3f8fcaaa..213e20198e 100644
--- a/erts/example/pg_encode2.h
+++ b/erts/example/pg_encode2.h
@@ -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/erts/example/pg_sync.c b/erts/example/pg_sync.c
index 88096671a5..81b99f98d3 100644
--- a/erts/example/pg_sync.c
+++ b/erts/example/pg_sync.c
@@ -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/erts/example/pg_sync.erl b/erts/example/pg_sync.erl
index 76fb27332e..29a975727a 100644
--- a/erts/example/pg_sync.erl
+++ b/erts/example/pg_sync.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/erts/include/erl_fixed_size_int_types.h b/erts/include/erl_fixed_size_int_types.h
index dfaea5650b..9f47bdd797 100644
--- a/erts/include/erl_fixed_size_int_types.h
+++ b/erts/include/erl_fixed_size_int_types.h
@@ -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/erts/include/erl_int_sizes_config.h.in b/erts/include/erl_int_sizes_config.h.in
index 88c74cdeff..e0e60f0e2f 100644
--- a/erts/include/erl_int_sizes_config.h.in
+++ b/erts/include/erl_int_sizes_config.h.in
@@ -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/erts/include/erl_memory_trace_parser.h b/erts/include/erl_memory_trace_parser.h
index 426ff05061..3170ebc0d0 100644
--- a/erts/include/erl_memory_trace_parser.h
+++ b/erts/include/erl_memory_trace_parser.h
@@ -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/erts/include/internal/README b/erts/include/internal/README
index fca0c5e489..a79b241556 100644
--- a/erts/include/internal/README
+++ b/erts/include/internal/README
@@ -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/erts/include/internal/erl_errno.h b/erts/include/internal/erl_errno.h
index 33bfbe3d51..1ae045805e 100644
--- a/erts/include/internal/erl_errno.h
+++ b/erts/include/internal/erl_errno.h
@@ -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/erts/include/internal/erl_memory_trace_protocol.h b/erts/include/internal/erl_memory_trace_protocol.h
index b86e2de278..d3e0bcc1f4 100644
--- a/erts/include/internal/erl_memory_trace_protocol.h
+++ b/erts/include/internal/erl_memory_trace_protocol.h
@@ -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/erts/include/internal/erl_misc_utils.h b/erts/include/internal/erl_misc_utils.h
index 7ab7a26838..a4a5d1d510 100644
--- a/erts/include/internal/erl_misc_utils.h
+++ b/erts/include/internal/erl_misc_utils.h
@@ -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/erts/include/internal/erl_printf.h b/erts/include/internal/erl_printf.h
index 3846828fb9..c4565dfafc 100644
--- a/erts/include/internal/erl_printf.h
+++ b/erts/include/internal/erl_printf.h
@@ -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/erts/include/internal/erl_printf_format.h b/erts/include/internal/erl_printf_format.h
index 953022017a..4f969bdbcb 100644
--- a/erts/include/internal/erl_printf_format.h
+++ b/erts/include/internal/erl_printf_format.h
@@ -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/erts/include/internal/erts_internal.mk.in b/erts/include/internal/erts_internal.mk.in
index 76aab59c38..8faa33135e 100644
--- a/erts/include/internal/erts_internal.mk.in
+++ b/erts/include/internal/erts_internal.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/erts/include/internal/ethr_atomics.h b/erts/include/internal/ethr_atomics.h
index f366c2d0ad..06568201ad 100644
--- a/erts/include/internal/ethr_atomics.h
+++ b/erts/include/internal/ethr_atomics.h
@@ -10,7 +10,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/erts/include/internal/ethr_internal.h b/erts/include/internal/ethr_internal.h
index 693b34df61..6657c8affc 100644
--- a/erts/include/internal/ethr_internal.h
+++ b/erts/include/internal/ethr_internal.h
@@ -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/erts/include/internal/ethr_mutex.h b/erts/include/internal/ethr_mutex.h
index b402a139f5..a510a2c97f 100644
--- a/erts/include/internal/ethr_mutex.h
+++ b/erts/include/internal/ethr_mutex.h
@@ -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/erts/include/internal/ethr_optimized_fallbacks.h b/erts/include/internal/ethr_optimized_fallbacks.h
index 6ef4e2bace..8c27a9ba5b 100644
--- a/erts/include/internal/ethr_optimized_fallbacks.h
+++ b/erts/include/internal/ethr_optimized_fallbacks.h
@@ -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/erts/include/internal/ethread.h b/erts/include/internal/ethread.h
index e5c5cdfa33..b23644d361 100644
--- a/erts/include/internal/ethread.h
+++ b/erts/include/internal/ethread.h
@@ -112,6 +112,10 @@ int ethr_assert_failed(const char *file, int line, const char *func, char *a);
#error "_GNU_SOURCE not defined. Please, compile all files with -D_GNU_SOURCE."
#endif
+#ifdef ETHR_HAVE_PTHREAD_SETNAME_NP_1
+#define _DARWIN_C_SOURCE
+#endif
+
#if defined(ETHR_NEED_NPTL_PTHREAD_H)
#include <nptl/pthread.h>
#elif defined(ETHR_HAVE_MIT_PTHREAD_H)
diff --git a/erts/include/internal/ethread.mk.in b/erts/include/internal/ethread.mk.in
index 89924a3215..486a7a9401 100644
--- a/erts/include/internal/ethread.mk.in
+++ b/erts/include/internal/ethread.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/erts/include/internal/ethread_header_config.h.in b/erts/include/internal/ethread_header_config.h.in
index f4b08cfced..6309f10439 100644
--- a/erts/include/internal/ethread_header_config.h.in
+++ b/erts/include/internal/ethread_header_config.h.in
@@ -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.
diff --git a/erts/include/internal/ethread_inline.h b/erts/include/internal/ethread_inline.h
index 3ba910d993..8e6bcfc4a8 100644
--- a/erts/include/internal/ethread_inline.h
+++ b/erts/include/internal/ethread_inline.h
@@ -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/erts/include/internal/i386/atomic.h b/erts/include/internal/i386/atomic.h
index 6a6435e58d..52ef1762d5 100644
--- a/erts/include/internal/i386/atomic.h
+++ b/erts/include/internal/i386/atomic.h
@@ -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/erts/include/internal/i386/ethr_dw_atomic.h b/erts/include/internal/i386/ethr_dw_atomic.h
index 5444a6345c..91acdb0483 100644
--- a/erts/include/internal/i386/ethr_dw_atomic.h
+++ b/erts/include/internal/i386/ethr_dw_atomic.h
@@ -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/erts/include/internal/i386/ethr_membar.h b/erts/include/internal/i386/ethr_membar.h
index 97ae5eda2c..d1b72cd538 100644
--- a/erts/include/internal/i386/ethr_membar.h
+++ b/erts/include/internal/i386/ethr_membar.h
@@ -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/erts/include/internal/i386/ethread.h b/erts/include/internal/i386/ethread.h
index 23dcd1dc19..fef1674c7e 100644
--- a/erts/include/internal/i386/ethread.h
+++ b/erts/include/internal/i386/ethread.h
@@ -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/erts/include/internal/i386/rwlock.h b/erts/include/internal/i386/rwlock.h
index 9859338eab..8d22bac7e9 100644
--- a/erts/include/internal/i386/rwlock.h
+++ b/erts/include/internal/i386/rwlock.h
@@ -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/erts/include/internal/i386/spinlock.h b/erts/include/internal/i386/spinlock.h
index e010684d14..1a8e359981 100644
--- a/erts/include/internal/i386/spinlock.h
+++ b/erts/include/internal/i386/spinlock.h
@@ -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/erts/include/internal/libatomic_ops/ethr_atomic.h b/erts/include/internal/libatomic_ops/ethr_atomic.h
index 828210036c..da3b15a878 100644
--- a/erts/include/internal/libatomic_ops/ethr_atomic.h
+++ b/erts/include/internal/libatomic_ops/ethr_atomic.h
@@ -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/erts/include/internal/libatomic_ops/ethr_dw_atomic.h b/erts/include/internal/libatomic_ops/ethr_dw_atomic.h
index ce9b251cbe..8643600fa5 100644
--- a/erts/include/internal/libatomic_ops/ethr_dw_atomic.h
+++ b/erts/include/internal/libatomic_ops/ethr_dw_atomic.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/erts/include/internal/libatomic_ops/ethr_membar.h b/erts/include/internal/libatomic_ops/ethr_membar.h
index 7d2b807586..1d3d332c90 100644
--- a/erts/include/internal/libatomic_ops/ethr_membar.h
+++ b/erts/include/internal/libatomic_ops/ethr_membar.h
@@ -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/erts/include/internal/libatomic_ops/ethread.h b/erts/include/internal/libatomic_ops/ethread.h
index e34f43bb46..4adc31ed2a 100644
--- a/erts/include/internal/libatomic_ops/ethread.h
+++ b/erts/include/internal/libatomic_ops/ethread.h
@@ -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/erts/include/internal/ppc32/atomic.h b/erts/include/internal/ppc32/atomic.h
index 572b0e5191..198f057b3f 100644
--- a/erts/include/internal/ppc32/atomic.h
+++ b/erts/include/internal/ppc32/atomic.h
@@ -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/erts/include/internal/ppc32/ethr_membar.h b/erts/include/internal/ppc32/ethr_membar.h
index fe77721cd9..88ba4a2ea5 100644
--- a/erts/include/internal/ppc32/ethr_membar.h
+++ b/erts/include/internal/ppc32/ethr_membar.h
@@ -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/erts/include/internal/ppc32/ethread.h b/erts/include/internal/ppc32/ethread.h
index 25e85c58bd..bead019f41 100644
--- a/erts/include/internal/ppc32/ethread.h
+++ b/erts/include/internal/ppc32/ethread.h
@@ -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/erts/include/internal/ppc32/rwlock.h b/erts/include/internal/ppc32/rwlock.h
index aee232f79d..6493629e49 100644
--- a/erts/include/internal/ppc32/rwlock.h
+++ b/erts/include/internal/ppc32/rwlock.h
@@ -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/erts/include/internal/ppc32/spinlock.h b/erts/include/internal/ppc32/spinlock.h
index 829db6a135..3b35cafcb2 100644
--- a/erts/include/internal/ppc32/spinlock.h
+++ b/erts/include/internal/ppc32/spinlock.h
@@ -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/erts/include/internal/pthread/ethr_event.h b/erts/include/internal/pthread/ethr_event.h
index deb4b29686..6e470bf6cf 100644
--- a/erts/include/internal/pthread/ethr_event.h
+++ b/erts/include/internal/pthread/ethr_event.h
@@ -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/erts/include/internal/sparc32/atomic.h b/erts/include/internal/sparc32/atomic.h
index 0b535242ad..032943817d 100644
--- a/erts/include/internal/sparc32/atomic.h
+++ b/erts/include/internal/sparc32/atomic.h
@@ -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/erts/include/internal/sparc32/ethr_membar.h b/erts/include/internal/sparc32/ethr_membar.h
index 6133de5eb7..fb8ceef12b 100644
--- a/erts/include/internal/sparc32/ethr_membar.h
+++ b/erts/include/internal/sparc32/ethr_membar.h
@@ -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/erts/include/internal/sparc32/ethread.h b/erts/include/internal/sparc32/ethread.h
index 513d9f8773..8d49465008 100644
--- a/erts/include/internal/sparc32/ethread.h
+++ b/erts/include/internal/sparc32/ethread.h
@@ -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/erts/include/internal/sparc32/rwlock.h b/erts/include/internal/sparc32/rwlock.h
index 44de6113b7..1cc516cdad 100644
--- a/erts/include/internal/sparc32/rwlock.h
+++ b/erts/include/internal/sparc32/rwlock.h
@@ -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/erts/include/internal/sparc32/spinlock.h b/erts/include/internal/sparc32/spinlock.h
index 695fa112b6..ae3b1c9dee 100644
--- a/erts/include/internal/sparc32/spinlock.h
+++ b/erts/include/internal/sparc32/spinlock.h
@@ -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/erts/include/internal/sparc64/ethread.h b/erts/include/internal/sparc64/ethread.h
index 5f518e5596..6018e738b5 100644
--- a/erts/include/internal/sparc64/ethread.h
+++ b/erts/include/internal/sparc64/ethread.h
@@ -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/erts/include/internal/tile/atomic.h b/erts/include/internal/tile/atomic.h
index 1a2881442e..7f5f83bcc7 100644
--- a/erts/include/internal/tile/atomic.h
+++ b/erts/include/internal/tile/atomic.h
@@ -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/erts/include/internal/tile/ethr_membar.h b/erts/include/internal/tile/ethr_membar.h
index ccb420d558..50ea2c0265 100644
--- a/erts/include/internal/tile/ethr_membar.h
+++ b/erts/include/internal/tile/ethr_membar.h
@@ -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/erts/include/internal/tile/ethread.h b/erts/include/internal/tile/ethread.h
index 577d275965..0d69673a1c 100644
--- a/erts/include/internal/tile/ethread.h
+++ b/erts/include/internal/tile/ethread.h
@@ -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/erts/include/internal/win/ethr_atomic.h b/erts/include/internal/win/ethr_atomic.h
index f17526a94d..32c28f692d 100644
--- a/erts/include/internal/win/ethr_atomic.h
+++ b/erts/include/internal/win/ethr_atomic.h
@@ -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/erts/include/internal/win/ethr_dw_atomic.h b/erts/include/internal/win/ethr_dw_atomic.h
index 8bed4fb26e..a6b26ab7bb 100644
--- a/erts/include/internal/win/ethr_dw_atomic.h
+++ b/erts/include/internal/win/ethr_dw_atomic.h
@@ -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/erts/include/internal/win/ethr_event.h b/erts/include/internal/win/ethr_event.h
index 458565b9ea..9ee78183ab 100644
--- a/erts/include/internal/win/ethr_event.h
+++ b/erts/include/internal/win/ethr_event.h
@@ -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/erts/include/internal/win/ethr_membar.h b/erts/include/internal/win/ethr_membar.h
index 9cba6b605d..c018f6d869 100644
--- a/erts/include/internal/win/ethr_membar.h
+++ b/erts/include/internal/win/ethr_membar.h
@@ -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/erts/include/internal/win/ethread.h b/erts/include/internal/win/ethread.h
index 2fda028825..773be08a9b 100644
--- a/erts/include/internal/win/ethread.h
+++ b/erts/include/internal/win/ethread.h
@@ -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/erts/include/internal/x86_64/ethread.h b/erts/include/internal/x86_64/ethread.h
index 8887b8d77f..7fc5481629 100644
--- a/erts/include/internal/x86_64/ethread.h
+++ b/erts/include/internal/x86_64/ethread.h
@@ -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/erts/lib/internal/README b/erts/lib/internal/README
index 9beba10bc2..9e5cab26d3 100644
--- a/erts/lib/internal/README
+++ b/erts/lib/internal/README
@@ -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/erts/lib_src/Makefile b/erts/lib_src/Makefile
index 632b8a0b09..882a050ffd 100644
--- a/erts/lib_src/Makefile
+++ b/erts/lib_src/Makefile
@@ -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/erts/lib_src/Makefile.in b/erts/lib_src/Makefile.in
index 74e32ccdce..601f3917a8 100644
--- a/erts/lib_src/Makefile.in
+++ b/erts/lib_src/Makefile.in
@@ -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.
@@ -465,7 +465,6 @@ RELSYSDIR = $(RELEASE_PATH)/erts-$(VSN)
RELEASE_INCLUDES= \
$(ERTS_INCL)/erl_memory_trace_parser.h \
$(ERTS_INCL)/$(TARGET)/erl_int_sizes_config.h \
- $(ERTS_INCL)/$(TARGET)/erl_native_features_config.h \
$(ERTS_INCL)/erl_fixed_size_int_types.h
RELEASE_LIBS=$(ERTS_LIBS)
diff --git a/erts/lib_src/common/erl_memory_trace_parser.c b/erts/lib_src/common/erl_memory_trace_parser.c
index a81068089e..0232708ad1 100644
--- a/erts/lib_src/common/erl_memory_trace_parser.c
+++ b/erts/lib_src/common/erl_memory_trace_parser.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/erts/lib_src/common/erl_misc_utils.c b/erts/lib_src/common/erl_misc_utils.c
index 053217304b..8186463b9c 100644
--- a/erts/lib_src/common/erl_misc_utils.c
+++ b/erts/lib_src/common/erl_misc_utils.c
@@ -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/erts/lib_src/common/erl_printf.c b/erts/lib_src/common/erl_printf.c
index 387a104a7a..b5e90dfeef 100644
--- a/erts/lib_src/common/erl_printf.c
+++ b/erts/lib_src/common/erl_printf.c
@@ -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/erts/lib_src/common/erl_printf_format.c b/erts/lib_src/common/erl_printf_format.c
index e7d5d4413e..3daa066fd3 100644
--- a/erts/lib_src/common/erl_printf_format.c
+++ b/erts/lib_src/common/erl_printf_format.c
@@ -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/erts/lib_src/common/ethr_atomics.c b/erts/lib_src/common/ethr_atomics.c
index 42c078377d..1594d78f5e 100644
--- a/erts/lib_src/common/ethr_atomics.c
+++ b/erts/lib_src/common/ethr_atomics.c
@@ -10,7 +10,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/erts/lib_src/common/ethr_aux.c b/erts/lib_src/common/ethr_aux.c
index 3e7aad16c7..420efd725f 100644
--- a/erts/lib_src/common/ethr_aux.c
+++ b/erts/lib_src/common/ethr_aux.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.
diff --git a/erts/lib_src/common/ethr_cbf.c b/erts/lib_src/common/ethr_cbf.c
index e79ec2b40c..037559be22 100644
--- a/erts/lib_src/common/ethr_cbf.c
+++ b/erts/lib_src/common/ethr_cbf.c
@@ -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/erts/lib_src/common/ethr_mutex.c b/erts/lib_src/common/ethr_mutex.c
index a596e6c31c..5e7e7b2f32 100644
--- a/erts/lib_src/common/ethr_mutex.c
+++ b/erts/lib_src/common/ethr_mutex.c
@@ -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/erts/lib_src/pthread/ethr_event.c b/erts/lib_src/pthread/ethr_event.c
index 0629b4dfcd..eef88d5002 100644
--- a/erts/lib_src/pthread/ethr_event.c
+++ b/erts/lib_src/pthread/ethr_event.c
@@ -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.
@@ -94,6 +94,9 @@ wait__(ethr_event *e, int spincount, ethr_sint64_t timeout)
tsp = NULL;
}
else {
+#ifdef ETHR_HAVE_ETHR_GET_MONOTONIC_TIME
+ start = ethr_get_monotonic_time();
+#endif
tsp = &ts;
time = timeout;
if (spincount == 0) {
@@ -102,9 +105,6 @@ wait__(ethr_event *e, int spincount, ethr_sint64_t timeout)
goto return_event_on;
goto set_timeout;
}
-#ifdef ETHR_HAVE_ETHR_GET_MONOTONIC_TIME
- start = ethr_get_monotonic_time();
-#endif
}
while (1) {
diff --git a/erts/lib_src/pthread/ethr_x86_sse2_asm.c b/erts/lib_src/pthread/ethr_x86_sse2_asm.c
index 7ce5a6d98a..bdcf3ac1c3 100644
--- a/erts/lib_src/pthread/ethr_x86_sse2_asm.c
+++ b/erts/lib_src/pthread/ethr_x86_sse2_asm.c
@@ -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/erts/lib_src/pthread/ethread.c b/erts/lib_src/pthread/ethread.c
index ef11559654..29bffa7e12 100644
--- a/erts/lib_src/pthread/ethread.c
+++ b/erts/lib_src/pthread/ethread.c
@@ -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/erts/lib_src/utils/make_atomics_api b/erts/lib_src/utils/make_atomics_api
index 4b37e3fa74..f960b97c87 100755
--- a/erts/lib_src/utils/make_atomics_api
+++ b/erts/lib_src/utils/make_atomics_api
@@ -4,7 +4,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/erts/lib_src/win/ethr_event.c b/erts/lib_src/win/ethr_event.c
index 6951a216c5..383f7c876e 100644
--- a/erts/lib_src/win/ethr_event.c
+++ b/erts/lib_src/win/ethr_event.c
@@ -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/erts/lib_src/win/ethread.c b/erts/lib_src/win/ethread.c
index 22b0b4040c..e0f19f7ba1 100644
--- a/erts/lib_src/win/ethread.c
+++ b/erts/lib_src/win/ethread.c
@@ -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/erts/preloaded/Makefile b/erts/preloaded/Makefile
index fbe62d57bb..e8935d4410 100644
--- a/erts/preloaded/Makefile
+++ b/erts/preloaded/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/erts/preloaded/ebin/erl_prim_loader.beam b/erts/preloaded/ebin/erl_prim_loader.beam
index 6d777fa811..66e443f396 100644
--- a/erts/preloaded/ebin/erl_prim_loader.beam
+++ b/erts/preloaded/ebin/erl_prim_loader.beam
Binary files differ
diff --git a/erts/preloaded/ebin/erl_tracer.beam b/erts/preloaded/ebin/erl_tracer.beam
new file mode 100644
index 0000000000..69804540c9
--- /dev/null
+++ b/erts/preloaded/ebin/erl_tracer.beam
Binary files differ
diff --git a/erts/preloaded/ebin/erlang.beam b/erts/preloaded/ebin/erlang.beam
index db17c53ff3..8379bf1768 100644
--- a/erts/preloaded/ebin/erlang.beam
+++ b/erts/preloaded/ebin/erlang.beam
Binary files differ
diff --git a/erts/preloaded/ebin/erts_code_purger.beam b/erts/preloaded/ebin/erts_code_purger.beam
index 4188e5fd9b..b1da0aa861 100644
--- a/erts/preloaded/ebin/erts_code_purger.beam
+++ b/erts/preloaded/ebin/erts_code_purger.beam
Binary files differ
diff --git a/erts/preloaded/ebin/erts_internal.beam b/erts/preloaded/ebin/erts_internal.beam
index 88da34b192..cc4f3dbdaf 100644
--- a/erts/preloaded/ebin/erts_internal.beam
+++ b/erts/preloaded/ebin/erts_internal.beam
Binary files differ
diff --git a/erts/preloaded/ebin/init.beam b/erts/preloaded/ebin/init.beam
index 8ac7f5b471..7b5797e90a 100644
--- a/erts/preloaded/ebin/init.beam
+++ b/erts/preloaded/ebin/init.beam
Binary files differ
diff --git a/erts/preloaded/ebin/otp_ring0.beam b/erts/preloaded/ebin/otp_ring0.beam
index 3cd2515ba8..f893b9c181 100644
--- a/erts/preloaded/ebin/otp_ring0.beam
+++ b/erts/preloaded/ebin/otp_ring0.beam
Binary files differ
diff --git a/erts/preloaded/ebin/prim_eval.beam b/erts/preloaded/ebin/prim_eval.beam
index 9a208d1545..e4ce601c03 100644
--- a/erts/preloaded/ebin/prim_eval.beam
+++ b/erts/preloaded/ebin/prim_eval.beam
Binary files differ
diff --git a/erts/preloaded/ebin/prim_file.beam b/erts/preloaded/ebin/prim_file.beam
index 426e764127..babba3081f 100644
--- a/erts/preloaded/ebin/prim_file.beam
+++ b/erts/preloaded/ebin/prim_file.beam
Binary files differ
diff --git a/erts/preloaded/ebin/prim_inet.beam b/erts/preloaded/ebin/prim_inet.beam
index d68d18ecba..0521060e34 100644
--- a/erts/preloaded/ebin/prim_inet.beam
+++ b/erts/preloaded/ebin/prim_inet.beam
Binary files differ
diff --git a/erts/preloaded/ebin/prim_zip.beam b/erts/preloaded/ebin/prim_zip.beam
index 01b3b1feb8..e1faca7d96 100644
--- a/erts/preloaded/ebin/prim_zip.beam
+++ b/erts/preloaded/ebin/prim_zip.beam
Binary files differ
diff --git a/erts/preloaded/ebin/zlib.beam b/erts/preloaded/ebin/zlib.beam
index 7252d866bb..5d3cbc1b36 100644
--- a/erts/preloaded/ebin/zlib.beam
+++ b/erts/preloaded/ebin/zlib.beam
Binary files differ
diff --git a/erts/preloaded/src/Makefile b/erts/preloaded/src/Makefile
index 31383dda83..4a447d3a09 100644
--- a/erts/preloaded/src/Makefile
+++ b/erts/preloaded/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.
@@ -43,7 +43,8 @@ PRE_LOADED_ERL_MODULES = \
otp_ring0 \
erts_code_purger \
erlang \
- erts_internal
+ erts_internal \
+ erl_tracer
PRE_LOADED_BEAM_MODULES = \
prim_eval
diff --git a/erts/preloaded/src/add_abstract_code b/erts/preloaded/src/add_abstract_code
index 4f479db2e8..943987872e 100644
--- a/erts/preloaded/src/add_abstract_code
+++ b/erts/preloaded/src/add_abstract_code
@@ -4,7 +4,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/erts/preloaded/src/erl_prim_loader.erl b/erts/preloaded/src/erl_prim_loader.erl
index cbcced5512..b3ec73a60e 100644
--- a/erts/preloaded/src/erl_prim_loader.erl
+++ b/erts/preloaded/src/erl_prim_loader.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.
@@ -56,7 +56,7 @@
-export([purge_archive_cache/0]).
%% Used by init and the code server.
--export([get_modules/3]).
+-export([get_modules/2,get_modules/3]).
-include_lib("kernel/include/file.hrl").
@@ -239,6 +239,13 @@ set_primary_archive(File, ArchiveBin, FileInfo, ParserFun)
purge_archive_cache() ->
request(purge_archive_cache).
+-spec get_modules([module()],
+ fun((atom(), string(), binary()) ->
+ {'ok',any()} | {'error',any()})) ->
+ {'ok',{[any()],[any()]}}.
+
+get_modules(Modules, Fun) ->
+ request({get_modules,{Modules,Fun}}).
-spec get_modules([module()],
fun((atom(), string(), binary()) ->
@@ -338,6 +345,8 @@ handle_request(Req, Paths, St0) ->
{{ok,Paths},St0};
{get_file,File} ->
handle_get_file(St0, Paths, File);
+ {get_modules,{Modules,Fun}} ->
+ handle_get_modules(St0, Modules, Fun, Paths);
{get_modules,{Modules,Fun,ModPaths}} ->
handle_get_modules(St0, Modules, Fun, ModPaths);
{list_dir,Dir} ->
@@ -549,11 +558,9 @@ efile_gm_get_1([P|Ps], File0, Mod, {Parent,Ref}=PR, Process) ->
Res = try prim_file:read_file(File) of
{ok,Bin} ->
gm_process(Mod, File, Bin, Process);
- {error,enoent} ->
- efile_gm_get_1(Ps, File0, Mod, PR, Process);
Error ->
- check_file_result(get_modules, File, Error),
- Error
+ _ = check_file_result(get_modules, File, Error),
+ efile_gm_get_1(Ps, File0, Mod, PR, Process)
catch
_:Reason ->
{error,{crash,Reason}}
diff --git a/erts/preloaded/src/erl_tracer.erl b/erts/preloaded/src/erl_tracer.erl
new file mode 100644
index 0000000000..fe15812535
--- /dev/null
+++ b/erts/preloaded/src/erl_tracer.erl
@@ -0,0 +1,63 @@
+-module(erl_tracer).
+
+-export([enabled/3, trace/6, on_load/0]).
+
+-type tracee() :: port() | pid() | undefined.
+
+-type trace_tag_running_ports() :: in | out | in_exiting | out_exiting | out_exited.
+-type trace_tag_running_procs() :: in | out | in_exiting | out_exiting | out_exited.
+-type trace_tag_send() :: send | send_to_non_existing_process.
+-type trace_tag_receive() :: 'receive'.
+-type trace_tag_call() :: call | return_to | return_from | exception_from.
+-type trace_tag_procs() :: spawn | spawned | exit | link | unlink
+ | getting_linked | getting_unlinked
+ | register | unregister.
+-type trace_tag_ports() :: open | closed | link | unlink
+ | getting_linked | getting_unlinked.
+-type trace_tag_gc() :: gc_minor_start | gc_minor_end
+ | gc_major_start | gc_major_end.
+
+-type trace_tag() :: trace_tag_send()
+ | trace_tag_receive()
+ | trace_tag_call()
+ | trace_tag_procs()
+ | trace_tag_ports()
+ | trace_tag_running_procs()
+ | trace_tag_running_ports()
+ | trace_tag_gc().
+
+-type trace_opts() :: #{ match_spec_result => true | term(),
+ scheduler_id => undefined | non_neg_integer(),
+ timestamp => undefined | timestamp | cpu_timestamp |
+ monotonic | strict_monotonic }.
+-type tracer_state() :: term().
+
+on_load() ->
+ case erlang:load_nif(atom_to_list(?MODULE), 0) of
+ ok -> ok
+ end.
+
+%%%
+%%% NIF placeholders
+%%%
+
+-spec enabled(Tag :: trace_status,
+ TracerState :: tracer_state(),
+ Tracee :: tracee()) ->
+ trace | remove;
+ (Tag :: trace_tag() | seq_trace,
+ TracerState :: tracer_state(),
+ Tracee :: tracee()) ->
+ trace | discard.
+enabled(_, _, _) ->
+ erlang:nif_error(nif_not_loaded).
+
+-spec trace(Tag :: trace_tag() | seq_trace,
+ TracerState :: tracer_state(),
+ Tracee :: tracee(),
+ Msg :: term(),
+ Extra :: term(),
+ Opts :: trace_opts()) -> any().
+
+trace(_, _, _, _, _, _) ->
+ erlang:nif_error(nif_not_loaded).
diff --git a/erts/preloaded/src/erlang.erl b/erts/preloaded/src/erlang.erl
index 9bf8d13fde..3d152c4e92 100644
--- a/erts/preloaded/src/erlang.erl
+++ b/erts/preloaded/src/erlang.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.
@@ -230,27 +230,32 @@
send |
'receive' |
procs |
+ ports |
call |
- silent |
+ arity |
return_to |
+ silent |
running |
exiting |
+ running_procs |
+ running_ports |
garbage_collection |
timestamp |
cpu_timestamp |
monotonic_timestamp |
strict_monotonic_timestamp |
- arity |
set_on_spawn |
set_on_first_spawn |
set_on_link |
set_on_first_link |
- {tracer, pid() | port()}.
+ {tracer, pid() | port()} |
+ {tracer, module(), term()}.
-type trace_info_item_result() ::
{traced, global | local | false | undefined} |
{match_spec, trace_match_spec() | false | undefined} |
{meta, pid() | port() | false | undefined | []} |
+ {meta, module(), term() } |
{meta_match_spec, trace_match_spec() | false | undefined} |
{call_count, non_neg_integer() | boolean() | undefined} |
{call_time, [{pid(), non_neg_integer(),
@@ -276,6 +281,7 @@
undefined |
{flags, [trace_info_flag()]} |
{tracer, pid() | port() | []} |
+ {tracer, module(), term()} |
trace_info_item_result() |
{all, [ trace_info_item_result() ] | false | undefined}.
@@ -1157,10 +1163,10 @@ map_size(_Map) ->
erlang:nif_error(undefined).
%% match_spec_test/3
--spec erlang:match_spec_test(P1, P2, P3) -> TestResult when
- P1 :: [term()] | tuple(),
- P2 :: term(),
- P3 :: table | trace,
+-spec erlang:match_spec_test(MatchAgainst, MatchSpec, Type) -> TestResult when
+ MatchAgainst :: [term()] | tuple(),
+ MatchSpec :: term(),
+ Type :: table | trace,
TestResult :: {ok, term(), [return_trace], [ {error | warning, string()} ]} | {error, [ {error | warning, string()} ]}.
match_spec_test(_P1, _P2, _P3) ->
erlang:nif_error(undefined).
@@ -1705,12 +1711,35 @@ time() ->
erlang:nif_error(undefined).
%% trace/3
--spec erlang:trace(PidSpec, How, FlagList) -> integer() when
- PidSpec :: pid() | existing | new | all,
+-spec erlang:trace(PidPortSpec, How, FlagList) -> integer() when
+ PidPortSpec :: pid() | port()
+ | all | processes | ports
+ | existing | existing_processes | existing_ports
+ | new | new_processes | new_ports,
How :: boolean(),
FlagList :: [trace_flag()].
-trace(_PidSpec, _How, _FlagList) ->
- erlang:nif_error(undefined).
+trace(PidPortSpec, How, FlagList) ->
+ %% Make sure that we have loaded the tracer module
+ case lists:keyfind(tracer, 1, FlagList) of
+ {tracer, Module, State} when erlang:is_atom(Module) ->
+ case erlang:module_loaded(Module) of
+ false ->
+ Module:enabled(trace_status, erlang:self(), State);
+ true ->
+ ok
+ end;
+ _ ->
+ ignore
+ end,
+
+ try erts_internal:trace(PidPortSpec, How, FlagList) of
+ Res -> Res
+ catch E:R ->
+ {_, [_ | CST]} = erlang:process_info(
+ erlang:self(), current_stacktrace),
+ erlang:raise(
+ E, R, [{?MODULE, trace, [PidPortSpec, How, FlagList], []} | CST])
+ end.
%% trace_delivered/1
-spec erlang:trace_delivered(Tracee) -> Ref when
@@ -1720,14 +1749,16 @@ trace_delivered(_Tracee) ->
erlang:nif_error(undefined).
%% trace_info/2
--spec erlang:trace_info(PidOrFunc, Item) -> Res when
- PidOrFunc :: pid() | new | {Module, Function, Arity} | on_load,
+-spec erlang:trace_info(PidPortFuncEvent, Item) -> Res when
+ PidPortFuncEvent :: pid() | port() | new | new_processes | new_ports
+ | {Module, Function, Arity} | on_load | send | 'receive',
Module :: module(),
Function :: atom(),
Arity :: arity(),
- Item :: flags | tracer | traced | match_spec | meta | meta_match_spec | call_count | call_time | all,
+ Item :: flags | tracer | traced | match_spec
+ | meta | meta_match_spec | call_count | call_time | all,
Res :: trace_info_return().
-trace_info(_PidOrFunc, _Item) ->
+trace_info(_PidPortFuncEvent, _Item) ->
erlang:nif_error(undefined).
%% trunc/1
@@ -2042,6 +2073,9 @@ open_port(PortName, PortSettings) ->
(min_bin_vheap_size, MinBinVHeapSize) -> OldMinBinVHeapSize when
MinBinVHeapSize :: non_neg_integer(),
OldMinBinVHeapSize :: non_neg_integer();
+ (max_heap_size, MaxHeapSize) -> OldMaxHeapSize when
+ MaxHeapSize :: max_heap_size(),
+ OldMaxHeapSize :: max_heap_size();
(message_queue_data, MQD) -> OldMQD when
MQD :: message_queue_data(),
OldMQD :: message_queue_data();
@@ -2123,6 +2157,7 @@ process_flag(_Flag, _Value) ->
{messages, MessageQueue :: [term()]} |
{min_heap_size, MinHeapSize :: non_neg_integer()} |
{min_bin_vheap_size, MinBinVHeapSize :: non_neg_integer()} |
+ {max_heap_size, MaxHeapSize :: max_heap_size()} |
{monitored_by, Pids :: [pid()]} |
{monitors,
Monitors :: [{process, Pid :: pid() |
@@ -2130,7 +2165,7 @@ process_flag(_Flag, _Value) ->
{message_queue_data, MQD :: message_queue_data()} |
{priority, Level :: priority_level()} |
{reductions, Number :: non_neg_integer()} |
- {registered_name, Atom :: atom()} |
+ {registered_name, [] | (Atom :: atom())} |
{sequential_trace_token, [] | (SequentialTraceToken :: term())} |
{stack_size, Size :: non_neg_integer()} |
{status, Status :: exiting | garbage_collecting | waiting | running | runnable | suspended} |
@@ -2207,6 +2242,7 @@ setelement(_Index, _Tuple1, _Value) ->
| {priority, Level :: priority_level()}
| {fullsweep_after, Number :: non_neg_integer()}
| {min_heap_size, Size :: non_neg_integer()}
+ | {max_heap_size, Size :: max_heap_size()}
| {min_bin_vheap_size, VSize :: non_neg_integer()}.
spawn_opt(_Tuple) ->
erlang:nif_error(undefined).
@@ -2226,9 +2262,9 @@ spawn_opt(_Tuple) ->
Input :: non_neg_integer(),
Output :: non_neg_integer();
(microstate_accounting) -> [MSAcc_Thread] | undefined when
- MSAcc_Thread :: #{ type => MSAcc_Thread_Type,
- id => MSAcc_Thread_Id,
- counters => MSAcc_Counters},
+ MSAcc_Thread :: #{ type := MSAcc_Thread_Type,
+ id := MSAcc_Thread_Id,
+ counters := MSAcc_Counters},
MSAcc_Thread_Type :: scheduler | async | aux,
MSAcc_Thread_Id :: non_neg_integer(),
MSAcc_Counters :: #{ MSAcc_Thread_State => non_neg_integer() },
@@ -2299,9 +2335,12 @@ subtract(_,_) ->
OldMinBinVHeapSize when
MinBinVHeapSize :: non_neg_integer(),
OldMinBinVHeapSize :: non_neg_integer();
+ (max_heap_size, MaxHeapSize) -> OldMaxHeapSize when
+ MaxHeapSize :: max_heap_size(),
+ OldMaxHeapSize :: max_heap_size();
(multi_scheduling, BlockState) -> OldBlockState when
- BlockState :: block | unblock,
- OldBlockState :: block | unblock | enabled;
+ BlockState :: block | unblock | block_normal | unblock_normal,
+ OldBlockState :: blocked | disabled | enabled;
(scheduler_bind_type, How) -> OldBindType when
How :: scheduler_bind_type() | default_bind,
OldBindType :: scheduler_bind_type();
@@ -2319,7 +2358,7 @@ subtract(_,_) ->
OldState :: preliminary | final | volatile;
%% These are deliberately not documented
(internal_cpu_topology, term()) -> term();
- (sequential_tracer, pid() | port() | false) -> pid() | port() | false;
+ (sequential_tracer, pid() | port() | {module(), term()} | false) -> pid() | port() | false;
(1,0) -> true.
system_flag(_Flag, _Value) ->
@@ -2350,29 +2389,63 @@ tl(_List) ->
[{[term()] | '_' ,[term()],[term()]}].
-spec erlang:trace_pattern(MFA, MatchSpec) -> non_neg_integer() when
- MFA :: trace_pattern_mfa(),
+ MFA :: trace_pattern_mfa() | send | 'receive',
MatchSpec :: (MatchSpecList :: trace_match_spec())
| boolean()
| restart
| pause.
-trace_pattern(_MFA, _MatchSpec) ->
- erlang:nif_error(undefined).
+trace_pattern(MFA, MatchSpec) ->
+ try erts_internal:trace_pattern(MFA, MatchSpec, []) of
+ Res -> Res
+ catch E:R ->
+ {_, [_ | CST]} = erlang:process_info(
+ erlang:self(), current_stacktrace),
+ erlang:raise(
+ E, R, [{?MODULE, trace_pattern, [MFA, MatchSpec], []} | CST])
+ end.
-type trace_pattern_flag() ::
global | local |
meta | {meta, Pid :: pid()} |
+ {meta, TracerModule :: module(), TracerState :: term()} |
call_count |
call_time.
--spec erlang:trace_pattern(MFA, MatchSpec, FlagList) -> non_neg_integer() when
+-spec erlang:trace_pattern(send, MatchSpec, []) -> non_neg_integer() when
+ MatchSpec :: (MatchSpecList :: trace_match_spec())
+ | boolean();
+ ('receive', MatchSpec, []) -> non_neg_integer() when
+ MatchSpec :: (MatchSpecList :: trace_match_spec())
+ | boolean();
+ (MFA, MatchSpec, FlagList) -> non_neg_integer() when
MFA :: trace_pattern_mfa(),
MatchSpec :: (MatchSpecList :: trace_match_spec())
| boolean()
| restart
| pause,
FlagList :: [ trace_pattern_flag() ].
-trace_pattern(_MFA, _MatchSpec, _FlagList) ->
- erlang:nif_error(undefined).
+trace_pattern(MFA, MatchSpec, FlagList) ->
+ %% Make sure that we have loaded the tracer module
+ case lists:keyfind(meta, 1, FlagList) of
+ {meta, Module, State} when erlang:is_atom(Module) ->
+ case erlang:module_loaded(Module) of
+ false ->
+ Module:enabled(trace_status, erlang:self(), State);
+ true ->
+ ok
+ end;
+ _ ->
+ ignore
+ end,
+
+ try erts_internal:trace_pattern(MFA, MatchSpec, FlagList) of
+ Res -> Res
+ catch E:R ->
+ {_, [_ | CST]} = erlang:process_info(
+ erlang:self(), current_stacktrace),
+ erlang:raise(
+ E, R, [{?MODULE, trace_pattern, [MFA, MatchSpec, FlagList], []} | CST])
+ end.
%% Shadowed by erl_bif_types: erlang:tuple_to_list/1
-spec tuple_to_list(Tuple) -> [term()] when
@@ -2446,14 +2519,16 @@ tuple_to_list(_Tuple) ->
logical_processors_available |
logical_processors_online) -> unknown | pos_integer();
(machine) -> string();
+ (max_heap_size) -> {max_heap_size, MaxHeapSize :: max_heap_size()};
+ (message_queue_data) -> message_queue_data();
(min_heap_size) -> {min_heap_size, MinHeapSize :: pos_integer()};
(min_bin_vheap_size) -> {min_bin_vheap_size,
MinBinVHeapSize :: pos_integer()};
(modified_timing_level) -> integer() | undefined;
- (multi_scheduling) -> disabled | blocked | enabled;
+ (multi_scheduling) -> disabled | blocked | blocked_normal | enabled;
(multi_scheduling_blockers) -> [Pid :: pid()];
(nif_version) -> string();
- (message_queue_data) -> message_queue_data();
+ (normal_multi_scheduling_blockers) -> [Pid :: pid()];
(otp_release) -> string();
(os_monotonic_time_source) -> [{atom(),term()}];
(os_system_time_source) -> [{atom(),term()}];
@@ -2582,6 +2657,13 @@ spawn_monitor(M, F, A) ->
erlang:error(badarg, [M,F,A]).
+-type max_heap_size() ::
+ Size :: non_neg_integer()
+ %% TODO change size => to := when -type maps support is finalized
+ | #{ size => non_neg_integer(),
+ kill => boolean(),
+ error_logger => boolean() }.
+
-type spawn_opt_option() ::
link
| monitor
@@ -2589,6 +2671,7 @@ spawn_monitor(M, F, A) ->
| {fullsweep_after, Number :: non_neg_integer()}
| {min_heap_size, Size :: non_neg_integer()}
| {min_bin_vheap_size, VSize :: non_neg_integer()}
+ | {max_heap_size, Size :: max_heap_size()}
| {message_queue_data, MQD :: message_queue_data()}.
-spec spawn_opt(Fun, Options) -> pid() | {pid(), reference()} when
diff --git a/erts/preloaded/src/erts.app.src b/erts/preloaded/src/erts.app.src
index e53b6e5bab..98e0224a5f 100644
--- a/erts/preloaded/src/erts.app.src
+++ b/erts/preloaded/src/erts.app.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/erts/preloaded/src/erts_internal.erl b/erts/preloaded/src/erts_internal.erl
index 330fcc4a9c..2459ea2a2c 100644
--- a/erts/preloaded/src/erts_internal.erl
+++ b/erts/preloaded/src/erts_internal.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.
@@ -55,7 +55,9 @@
-export([await_microstate_accounting_modifications/3,
gather_microstate_accounting_result/2]).
-%% Auto-import name clash
+-export([trace/3, trace_pattern/3]).
+
+%% Auto import name clash
-export([check_process_code/2]).
%%
@@ -403,3 +405,28 @@ microstate_accounting(Ref, Threads) ->
{Ref, Res} ->
[Res | microstate_accounting(Ref, Threads - 1)]
end.
+
+-spec trace(PidPortSpec, How, FlagList) -> integer() when
+ PidPortSpec :: pid() | port()
+ | all | processes | ports
+ | existing | existing_processes | existing_ports
+ | new | new_processes | new_ports,
+ How :: boolean(),
+ FlagList :: [].
+trace(_PidSpec, _How, _FlagList) ->
+ erlang:nif_error(undefined).
+
+-type trace_pattern_mfa() ::
+ {atom(),atom(),arity() | '_'} | on_load.
+-type trace_match_spec() ::
+ [{[term()] | '_' ,[term()],[term()]}].
+
+-spec trace_pattern(MFA, MatchSpec, FlagList) -> non_neg_integer() when
+ MFA :: trace_pattern_mfa(),
+ MatchSpec :: (MatchSpecList :: trace_match_spec())
+ | boolean()
+ | restart
+ | pause,
+ FlagList :: [ ].
+trace_pattern(_MFA, _MatchSpec, _FlagList) ->
+ erlang:nif_error(undefined).
diff --git a/erts/preloaded/src/init.erl b/erts/preloaded/src/init.erl
index ed65c57c0d..618b53f6bb 100644
--- a/erts/preloaded/src/init.erl
+++ b/erts/preloaded/src/init.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.
@@ -41,6 +41,7 @@
%% -s : Start own processes.
%%
%% Experimental flags:
+%% -profile_boot : Use an 'eprof light' to profile boot sequence
%% -init_debug : Activate debug printouts in init
%% -loader_debug : Activate debug printouts in erl_prim_loader
%% -code_path_choice : strict | relaxed
@@ -129,7 +130,7 @@ bs2ss(L) ->
get_status() ->
request(get_status).
--spec fetch_loaded() -> [atom()].
+-spec fetch_loaded() -> [{module(),file:filename()}].
fetch_loaded() ->
request(fetch_loaded).
@@ -179,7 +180,16 @@ stop(Status) -> init ! {stop,{stop,Status}}, ok.
boot(BootArgs) ->
register(init, self()),
process_flag(trap_exit, true),
+
+ %% Load the tracer nif
+ erl_tracer:on_load(),
+
{Start0,Flags,Args} = parse_boot_args(BootArgs),
+ %% We don't get to profile parsing of BootArgs
+ case get_flag(profile_boot, Flags, false) of
+ false -> ok;
+ true -> debug_profile_start()
+ end,
Start = map(fun prepare_run_args/1, Start0),
boot(Start, Flags, Args).
@@ -297,9 +307,9 @@ crash(String, List) ->
-spec boot_loop(pid(), state()) -> no_return().
boot_loop(BootPid, State) ->
receive
- {BootPid,loaded,ModLoaded} ->
- Loaded = State#state.loaded,
- boot_loop(BootPid,State#state{loaded = [ModLoaded|Loaded]});
+ {BootPid,loaded,NewlyLoaded} ->
+ Loaded = NewlyLoaded ++ State#state.loaded,
+ boot_loop(BootPid, State#state{loaded = Loaded});
{BootPid,started,KernelPid} ->
boot_loop(BootPid, new_kernelpid(KernelPid, BootPid, State));
{BootPid,progress,started} ->
@@ -338,12 +348,25 @@ boot_loop(BootPid, State) ->
end.
ensure_loaded(Module, Loaded) ->
+ case erlang:module_loaded(Module) of
+ true ->
+ {{module, Module}, Loaded};
+ false ->
+ do_ensure_loaded(Module, Loaded)
+ end.
+
+do_ensure_loaded(Module, Loaded) ->
File = atom_to_list(Module) ++ objfile_extension(),
- case catch load_mod(Module,File) of
- {ok, FullName} ->
- {{module, Module}, [{Module, FullName}|Loaded]};
- Res ->
- {Res, Loaded}
+ case erl_prim_loader:get_file(File) of
+ {ok,BinCode,FullName} ->
+ case do_load_module(Module, BinCode) of
+ ok ->
+ {{module, Module}, [{Module, FullName}|Loaded]};
+ error ->
+ {error, [{Module, FullName}|Loaded]}
+ end;
+ Error ->
+ {Error, Loaded}
end.
%% Tell subscribed processes the system has started.
@@ -748,7 +771,14 @@ do_boot(Init,Flags,Start) ->
%% print the node name into the Purify log.
(catch erlang:system_info({purify, "Node: " ++ atom_to_list(node())})),
- start_em(Start).
+ start_em(Start),
+ case get_flag(profile_boot,Flags,false) of
+ false -> ok;
+ true ->
+ debug_profile_format_mfas(debug_profile_mfas()),
+ debug_profile_stop()
+ end,
+ ok.
get_root(Flags) ->
case get_argument(root, Flags) of
@@ -842,13 +872,6 @@ eval_script([{kernel_load_completed}|T], #es{load_mode=Mode}=Es0) ->
_ -> Es0#es{prim_load=false}
end,
eval_script(T, Es);
-eval_script([{primLoad,[Mod]}|T], #es{prim_load=true}=Es) ->
- %% Common special case (loading of error_handler). Nothing
- %% to gain by parallel loading.
- File = atom_to_list(Mod) ++ objfile_extension(),
- {ok,Full} = load_mod(Mod, File),
- init ! {self(),loaded,{Mod,Full}}, % Tell init about loaded module
- eval_script(T, Es);
eval_script([{primLoad,Mods}|T], #es{init=Init,prim_load=PrimLoad}=Es)
when is_list(Mods) ->
case PrimLoad of
@@ -873,14 +896,44 @@ eval_script([], #es{}) ->
eval_script(What, #es{}) ->
exit({'unexpected command in bootfile',What}).
-load_modules([Mod|Mods], Init) ->
- File = atom_to_list(Mod) ++ objfile_extension(),
- {ok,Full} = load_mod(Mod,File),
- Init ! {self(),loaded,{Mod,Full}}, %Tell init about loaded module
- load_modules(Mods, Init);
-load_modules([], _) ->
+load_modules(Mods0, Init) ->
+ Mods = [M || M <- Mods0, not erlang:module_loaded(M)],
+ F = prepare_loading_fun(),
+ case erl_prim_loader:get_modules(Mods, F) of
+ {ok,{Prep0,[]}} ->
+ Prep = [Code || {_,{prepared,Code,_}} <- Prep0],
+ ok = erlang:finish_loading(Prep),
+ Loaded = [{Mod,Full} || {Mod,{_,_,Full}} <- Prep0],
+ Init ! {self(),loaded,Loaded},
+ Beams = [{M,Beam,Full} || {M,{on_load,Beam,Full}} <- Prep0],
+ load_rest(Beams, Init);
+ {ok,{_,[_|_]=Errors}} ->
+ Ms = [M || {M,_} <- Errors],
+ exit({load_failed,Ms})
+ end.
+
+load_rest([{Mod,Beam,Full}|T], Init) ->
+ do_load_module(Mod, Beam),
+ Init ! {self(),loaded,[{Mod,Full}]},
+ load_rest(T, Init);
+load_rest([], _) ->
ok.
+prepare_loading_fun() ->
+ fun(Mod, FullName, Beam) ->
+ case erlang:prepare_loading(Mod, Beam) of
+ Prepared when is_binary(Prepared) ->
+ case erlang:has_prepared_code_on_load(Prepared) of
+ true ->
+ {ok,{on_load,Beam,FullName}};
+ false ->
+ {ok,{prepared,Prepared,FullName}}
+ end;
+ {error,_}=Error ->
+ Error
+ end
+ end.
+
make_path(Pa, Pz, Path, Vars) ->
append([Pa,append([fix_path(Path,Vars),Pz])]).
@@ -1033,35 +1086,17 @@ start_it([_|_]=MFA) ->
[M,F|Args] -> M:F(Args) % Args is a list
end.
-%%
-%% Fetch a module and load it into the system.
-%%
-load_mod(Mod, File) ->
- case erlang:module_loaded(Mod) of
- false ->
- case erl_prim_loader:get_file(File) of
- {ok,BinCode,FullName} ->
- load_mod_code(Mod, BinCode, FullName);
- _ ->
- exit({'cannot load',Mod,get_file})
- end;
- _ -> % Already loaded.
- {ok,File}
- end.
+%% Load a module.
-load_mod_code(Mod, BinCode, FullName) ->
- case erlang:module_loaded(Mod) of
- false ->
- case erlang:load_module(Mod, BinCode) of
- {module,Mod} -> {ok,FullName};
- {error,on_load} ->
- ?ON_LOAD_HANDLER ! {loaded,Mod},
- {ok,FullName};
- Other ->
- exit({'cannot load',Mod,Other})
- end;
- _ -> % Already loaded.
- {ok,FullName}
+do_load_module(Mod, BinCode) ->
+ case erlang:load_module(Mod, BinCode) of
+ {module,Mod} ->
+ ok;
+ {error,on_load} ->
+ ?ON_LOAD_HANDLER ! {loaded,Mod},
+ ok;
+ _ ->
+ error
end.
%% --------------------------------------------------------
@@ -1317,3 +1352,64 @@ run_on_load_handlers([M|Ms], Debug) ->
end
end;
run_on_load_handlers([], _) -> ok.
+
+
+%% debug profile (light variant of eprof)
+debug_profile_start() ->
+ _ = erlang:trace_pattern({'_','_','_'},true,[call_time]),
+ _ = erlang:trace_pattern(on_load,true,[call_time]),
+ _ = erlang:trace(all,true,[call]),
+ ok.
+
+debug_profile_stop() ->
+ _ = erlang:trace_pattern({'_','_','_'},false,[call_time]),
+ _ = erlang:trace_pattern(on_load,false,[call_time]),
+ _ = erlang:trace(all,false,[call]),
+ ok.
+
+debug_profile_mfas() ->
+ _ = erlang:trace_pattern({'_','_','_'},pause,[call_time]),
+ _ = erlang:trace_pattern(on_load,pause,[call_time]),
+ MFAs = collect_loaded_mfas() ++ erlang:system_info(snifs),
+ collect_mfas(MFAs,[]).
+
+%% debug_profile_format_mfas should be called at the end of the boot phase
+%% so all pertinent modules should be loaded at that point.
+debug_profile_format_mfas(MFAs0) ->
+ MFAs = lists:sort(MFAs0),
+ lists:foreach(fun({{Us,C},{M,F,A}}) ->
+ Str = io_lib:format("~w:~w/~w", [M,F,A]),
+ io:format(standard_error,"~55s - ~6w : ~w us~n", [Str,C,Us])
+ end, MFAs),
+ ok.
+
+collect_loaded_mfas() ->
+ Ms = [M || M <- [element(1, Mi) || Mi <- code:all_loaded()]],
+ collect_loaded_mfas(Ms,[]).
+
+collect_loaded_mfas([],MFAs) -> MFAs;
+collect_loaded_mfas([M|Ms],MFAs0) ->
+ MFAs = [{M,F,A} || {F,A} <- M:module_info(functions)],
+ collect_loaded_mfas(Ms,MFAs ++ MFAs0).
+
+
+collect_mfas([], Info) -> Info;
+collect_mfas([MFA|MFAs],Info) ->
+ case erlang:trace_info(MFA,call_time) of
+ {call_time, []} ->
+ collect_mfas(MFAs,Info);
+ {call_time, false} ->
+ collect_mfas(MFAs,Info);
+ {call_time, Data} ->
+ case collect_mfa(MFA,Data,0,0) of
+ {{0,_},_} ->
+ %% ignore mfas with zero time
+ collect_mfas(MFAs,Info);
+ MfaData ->
+ collect_mfas(MFAs,[MfaData|Info])
+ end
+ end.
+
+collect_mfa(Mfa,[],Count,Time) -> {{Time,Count},Mfa};
+collect_mfa(Mfa,[{_Pid,C,S,Us}|Data],Count,Time) ->
+ collect_mfa(Mfa,Data,Count + C,Time + S * 1000000 + Us).
diff --git a/erts/preloaded/src/otp_ring0.erl b/erts/preloaded/src/otp_ring0.erl
index 3158fc7d21..62a60fffe2 100644
--- a/erts/preloaded/src/otp_ring0.erl
+++ b/erts/preloaded/src/otp_ring0.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/erts/preloaded/src/prim_eval.S b/erts/preloaded/src/prim_eval.S
index 1b7b00a7c9..e7f09a870c 100644
--- a/erts/preloaded/src/prim_eval.S
+++ b/erts/preloaded/src/prim_eval.S
@@ -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/erts/preloaded/src/prim_eval.erl b/erts/preloaded/src/prim_eval.erl
index 732e22468e..22e924f9e9 100644
--- a/erts/preloaded/src/prim_eval.erl
+++ b/erts/preloaded/src/prim_eval.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/erts/preloaded/src/prim_inet.erl b/erts/preloaded/src/prim_inet.erl
index bd74831bb7..4872ffd00c 100644
--- a/erts/preloaded/src/prim_inet.erl
+++ b/erts/preloaded/src/prim_inet.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/erts/preloaded/src/prim_zip.erl b/erts/preloaded/src/prim_zip.erl
index c4b949afcb..b1ddbbe173 100644
--- a/erts/preloaded/src/prim_zip.erl
+++ b/erts/preloaded/src/prim_zip.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/erts/preloaded/src/zip_internal.hrl b/erts/preloaded/src/zip_internal.hrl
index d5cf52fae4..2769ca152d 100644
--- a/erts/preloaded/src/zip_internal.hrl
+++ b/erts/preloaded/src/zip_internal.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/erts/preloaded/src/zlib.erl b/erts/preloaded/src/zlib.erl
index 473ad649c7..fa0f28c5c3 100644
--- a/erts/preloaded/src/zlib.erl
+++ b/erts/preloaded/src/zlib.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/erts/start_scripts/Makefile b/erts/start_scripts/Makefile
index 8025681924..dfd8153f32 100644
--- a/erts/start_scripts/Makefile
+++ b/erts/start_scripts/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/erts/start_scripts/no_dot_erlang.rel.src b/erts/start_scripts/no_dot_erlang.rel.src
index bcc9fa9e8a..04e5fbf741 100644
--- a/erts/start_scripts/no_dot_erlang.rel.src
+++ b/erts/start_scripts/no_dot_erlang.rel.src
@@ -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/erts/start_scripts/start_all_example.rel.src b/erts/start_scripts/start_all_example.rel.src
index 2c4deb4485..a44f3e2925 100644
--- a/erts/start_scripts/start_all_example.rel.src
+++ b/erts/start_scripts/start_all_example.rel.src
@@ -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/erts/start_scripts/start_clean.rel.src b/erts/start_scripts/start_clean.rel.src
index 25519deb17..ad468aa9df 100644
--- a/erts/start_scripts/start_clean.rel.src
+++ b/erts/start_scripts/start_clean.rel.src
@@ -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/erts/start_scripts/start_sasl.rel.src b/erts/start_scripts/start_sasl.rel.src
index 9cf417ade5..23b6a89e1d 100644
--- a/erts/start_scripts/start_sasl.rel.src
+++ b/erts/start_scripts/start_sasl.rel.src
@@ -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/erts/test/Makefile b/erts/test/Makefile
index a01d67e34f..1fe230adaf 100644
--- a/erts/test/Makefile
+++ b/erts/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.
diff --git a/erts/test/erl_print_SUITE.erl b/erts/test/erl_print_SUITE.erl
index f0fee49024..463d890688 100644
--- a/erts/test/erl_print_SUITE.erl
+++ b/erts/test/erl_print_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.
@@ -28,153 +28,133 @@
-module(erl_print_SUITE).
-author('[email protected]').
+-export([all/0, suite/0, init_per_testcase/2, end_per_testcase/2]).
-%-define(line_trace, 1).
-
--define(DEFAULT_TIMEOUT, ?t:minutes(10)).
-
--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([erlang_display/1, integer/1, float/1,
- string/1, character/1, snprintf/1, quote/1]).
+-export([erlang_display/1, integer/1, float/1,
+ string/1, character/1, snprintf/1, quote/1]).
-include_lib("common_test/include/ct.hrl").
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap, {minutes, 10}}].
all() ->
- test_cases().
-
-groups() ->
- [].
+ [erlang_display, integer, float, string, character,
+ snprintf, quote].
-init_per_suite(Config) ->
- Config.
+init_per_testcase(Case, Config) ->
+ [{testcase, Case}|Config].
-end_per_suite(_Config) ->
+end_per_testcase(_Case, _Config) ->
ok.
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
-
-
%%
%%
%% Test cases
%%
%%
-test_cases() ->
- [erlang_display, integer, float, string, character,
- snprintf, quote].
-
-erlang_display(doc) -> [];
-erlang_display(suite) -> [];
erlang_display(Config) when is_list(Config) ->
- ?line put(erlang_display_test, ok),
+ put(erlang_display_test, ok),
OAIS = erts_debug:set_internal_state(available_internal_state, true),
%% atoms
- ?line chk_display(atom, "atom"),
- ?line chk_display(true, "true"),
- ?line chk_display(false, "false"),
- ?line chk_display('DOWN', "'DOWN'"),
- ?line chk_display('EXIT', "'EXIT'"),
- ?line chk_display('asdDofw $@{}][', "'asdDofw $@{}]['"),
+ chk_display(atom, "atom"),
+ chk_display(true, "true"),
+ chk_display(false, "false"),
+ chk_display('DOWN', "'DOWN'"),
+ chk_display('EXIT', "'EXIT'"),
+ chk_display('asdDofw $@{}][', "'asdDofw $@{}]['"),
%% integers
- ?line chk_display(0, "0"),
- ?line chk_display(1, "1"),
- ?line chk_display(4711, "4711"),
- ?line chk_display(((1 bsl 27) - 1), "134217727"),
- ?line chk_display((1 bsl 27), "134217728"),
- ?line chk_display((1 bsl 32), "4294967296"),
- ?line chk_display(11111111111, "11111111111"),
- ?line chk_display((1 bsl 59) - 1, "576460752303423487"),
- ?line chk_display(1 bsl 59, "576460752303423488"),
- ?line chk_display(111111111111111111111, "111111111111111111111"),
- ?line chk_display(123456789012345678901234567890,
- "123456789012345678901234567890"),
- ?line chk_display(1 bsl 10000, str_1_bsl_10000()),
- ?line chk_display(-1, "-1"),
- ?line chk_display(-4711, "-4711"),
- ?line chk_display(-(1 bsl 27), "-134217728"),
- ?line chk_display(-((1 bsl 27) + 1), "-134217729"),
- ?line chk_display(-(1 bsl 32), "-4294967296"),
- ?line chk_display(-11111111111, "-11111111111"),
- ?line chk_display(-(1 bsl 59), "-576460752303423488"),
- ?line chk_display(-((1 bsl 59) + 1), "-576460752303423489"),
- ?line chk_display(-111111111111111111111, "-111111111111111111111"),
- ?line chk_display(-123456789012345678901234567890,
- "-123456789012345678901234567890"),
- ?line chk_display(-(1 bsl 10000), [$- | str_1_bsl_10000()]),
-
- ?line MyCre = my_cre(),
+ chk_display(0, "0"),
+ chk_display(1, "1"),
+ chk_display(4711, "4711"),
+ chk_display(((1 bsl 27) - 1), "134217727"),
+ chk_display((1 bsl 27), "134217728"),
+ chk_display((1 bsl 32), "4294967296"),
+ chk_display(11111111111, "11111111111"),
+ chk_display((1 bsl 59) - 1, "576460752303423487"),
+ chk_display(1 bsl 59, "576460752303423488"),
+ chk_display(111111111111111111111, "111111111111111111111"),
+ chk_display(123456789012345678901234567890,
+ "123456789012345678901234567890"),
+ chk_display(1 bsl 10000, str_1_bsl_10000()),
+ chk_display(-1, "-1"),
+ chk_display(-4711, "-4711"),
+ chk_display(-(1 bsl 27), "-134217728"),
+ chk_display(-((1 bsl 27) + 1), "-134217729"),
+ chk_display(-(1 bsl 32), "-4294967296"),
+ chk_display(-11111111111, "-11111111111"),
+ chk_display(-(1 bsl 59), "-576460752303423488"),
+ chk_display(-((1 bsl 59) + 1), "-576460752303423489"),
+ chk_display(-111111111111111111111, "-111111111111111111111"),
+ chk_display(-123456789012345678901234567890,
+ "-123456789012345678901234567890"),
+ chk_display(-(1 bsl 10000), [$- | str_1_bsl_10000()]),
+
+ MyCre = my_cre(),
%% pids
- ?line chk_display(mk_pid_xstr({node(), MyCre}, 4711, 42)),
- ?line chk_display(mk_pid_xstr({node(), oth_cre(MyCre)}, 4711, 42)),
- ?line chk_display(mk_pid_xstr({node(), oth_cre(oth_cre(MyCre))}, 4711, 42)),
+ chk_display(mk_pid_xstr({node(), MyCre}, 4711, 42)),
+ chk_display(mk_pid_xstr({node(), oth_cre(MyCre)}, 4711, 42)),
+ chk_display(mk_pid_xstr({node(), oth_cre(oth_cre(MyCre))}, 4711, 42)),
- ?line chk_display(mk_pid_xstr({a@b, MyCre}, 4711, 42)),
- ?line chk_display(mk_pid_xstr({a@b, oth_cre(MyCre)}, 4711, 42)),
- ?line chk_display(mk_pid_xstr({a@b, oth_cre(oth_cre(MyCre))}, 4711, 42)),
+ chk_display(mk_pid_xstr({a@b, MyCre}, 4711, 42)),
+ chk_display(mk_pid_xstr({a@b, oth_cre(MyCre)}, 4711, 42)),
+ chk_display(mk_pid_xstr({a@b, oth_cre(oth_cre(MyCre))}, 4711, 42)),
%% ports
- ?line chk_display(mk_port_xstr({node(), MyCre}, 4711)),
- ?line chk_display(mk_port_xstr({node(), oth_cre(MyCre)}, 4711)),
- ?line chk_display(mk_port_xstr({node(), oth_cre(oth_cre(MyCre))}, 4711)),
+ chk_display(mk_port_xstr({node(), MyCre}, 4711)),
+ chk_display(mk_port_xstr({node(), oth_cre(MyCre)}, 4711)),
+ chk_display(mk_port_xstr({node(), oth_cre(oth_cre(MyCre))}, 4711)),
- ?line chk_display(mk_port_xstr({c@d, MyCre}, 4711)),
- ?line chk_display(mk_port_xstr({c@d, oth_cre(MyCre)}, 4711)),
- ?line chk_display(mk_port_xstr({c@d, oth_cre(oth_cre(MyCre))}, 4711)),
+ chk_display(mk_port_xstr({c@d, MyCre}, 4711)),
+ chk_display(mk_port_xstr({c@d, oth_cre(MyCre)}, 4711)),
+ chk_display(mk_port_xstr({c@d, oth_cre(oth_cre(MyCre))}, 4711)),
%% refs
- ?line chk_display(mk_ref_xstr({node(), MyCre}, [1,2,3])),
- ?line chk_display(mk_ref_xstr({node(), oth_cre(MyCre)}, [1,2,3])),
- ?line chk_display(mk_ref_xstr({node(), oth_cre(oth_cre(MyCre))}, [1,2,3])),
+ chk_display(mk_ref_xstr({node(), MyCre}, [1,2,3])),
+ chk_display(mk_ref_xstr({node(), oth_cre(MyCre)}, [1,2,3])),
+ chk_display(mk_ref_xstr({node(), oth_cre(oth_cre(MyCre))}, [1,2,3])),
- ?line chk_display(mk_ref_xstr({e@f, MyCre},[1,2,3] )),
- ?line chk_display(mk_ref_xstr({e@f, oth_cre(MyCre)}, [1,2,3])),
- ?line chk_display(mk_ref_xstr({e@f, oth_cre(oth_cre(MyCre))}, [1,2,3])),
+ chk_display(mk_ref_xstr({e@f, MyCre},[1,2,3] )),
+ chk_display(mk_ref_xstr({e@f, oth_cre(MyCre)}, [1,2,3])),
+ chk_display(mk_ref_xstr({e@f, oth_cre(oth_cre(MyCre))}, [1,2,3])),
%% Compund terms
- ?line {Pid, PidStr} = mk_pid_xstr({x@y, oth_cre(MyCre)}, 4712, 41),
- ?line {Port, PortStr} = mk_port_xstr({x@y, oth_cre(MyCre)}, 4712),
- ?line {Ref, RefStr} = mk_ref_xstr({e@f, oth_cre(MyCre)}, [11,12,13]),
-
- ?line chk_display({atom,-4711,Ref,{"hej",[Pid,222222222222222222222222,Port,4711]}},
- "{atom,-4711,"++RefStr++",{\"hej\",["++PidStr++",222222222222222222222222,"++PortStr++",4711]}}"),
- ?line chk_display({{{{{{{{{{{{{{{{{{{{{{{hi}}}}}}}}}}}}}}}}}}}}}}},
- "{{{{{{{{{{{{{{{{{{{{{{{hi}}}}}}}}}}}}}}}}}}}}}}}"),
- ?line chk_display([[[[[[[[[[[[[[[[[[[[[[[yo]]]]]]]]]]]]]]]]]]]]]]],
- "[[[[[[[[[[[[[[[[[[[[[[[yo]]]]]]]]]]]]]]]]]]]]]]]"),
- ?line chk_display({[{[{[{[{[{[{[{[{[{[{[{[ii]}]}]}]}]}]}]}]}]}]}]}]},
- "{[{[{[{[{[{[{[{[{[{[{[{[ii]}]}]}]}]}]}]}]}]}]}]}]}"),
- ?line chk_display([], "[]"), % Not really a compound term :)
- ?line chk_display([a|b], "[a|b]"),
- ?line chk_display([a,b,c|z], "[a,b,c|z]"),
- ?line chk_display([a,b,c], "[a,b,c]"),
- ?line chk_display([Pid,Port,Ref],
- "["++PidStr++","++PortStr++","++RefStr++"]"),
- ?line chk_display("abcdefghijklmnopqrstuvwxyz",
- "\"abcdefghijklmnopqrstuvwxyz\""),
- ?line chk_display("ABCDEFGHIJKLMNOPQRSTUVWXYZ",
- "\"ABCDEFGHIJKLMNOPQRSTUVWXYZ\""),
- ?line chk_display("H E J", "\"H E J\""),
- ?line chk_display("asdDofw $@{}][", "\"asdDofw $@{}][\""),
-
+ {Pid, PidStr} = mk_pid_xstr({x@y, oth_cre(MyCre)}, 4712, 41),
+ {Port, PortStr} = mk_port_xstr({x@y, oth_cre(MyCre)}, 4712),
+ {Ref, RefStr} = mk_ref_xstr({e@f, oth_cre(MyCre)}, [11,12,13]),
+
+ chk_display({atom,-4711,Ref,{"hej",[Pid,222222222222222222222222,Port,4711]}},
+ "{atom,-4711,"++RefStr++",{\"hej\",["++PidStr++",222222222222222222222222,"++PortStr++",4711]}}"),
+ chk_display({{{{{{{{{{{{{{{{{{{{{{{hi}}}}}}}}}}}}}}}}}}}}}}},
+ "{{{{{{{{{{{{{{{{{{{{{{{hi}}}}}}}}}}}}}}}}}}}}}}}"),
+ chk_display([[[[[[[[[[[[[[[[[[[[[[[yo]]]]]]]]]]]]]]]]]]]]]]],
+ "[[[[[[[[[[[[[[[[[[[[[[[yo]]]]]]]]]]]]]]]]]]]]]]]"),
+ chk_display({[{[{[{[{[{[{[{[{[{[{[{[ii]}]}]}]}]}]}]}]}]}]}]}]},
+ "{[{[{[{[{[{[{[{[{[{[{[{[ii]}]}]}]}]}]}]}]}]}]}]}]}"),
+ chk_display([], "[]"), % Not really a compound term :)
+ chk_display([a|b], "[a|b]"),
+ chk_display([a,b,c|z], "[a,b,c|z]"),
+ chk_display([a,b,c], "[a,b,c]"),
+ chk_display([Pid,Port,Ref],
+ "["++PidStr++","++PortStr++","++RefStr++"]"),
+ chk_display("abcdefghijklmnopqrstuvwxyz",
+ "\"abcdefghijklmnopqrstuvwxyz\""),
+ chk_display("ABCDEFGHIJKLMNOPQRSTUVWXYZ",
+ "\"ABCDEFGHIJKLMNOPQRSTUVWXYZ\""),
+ chk_display("H E J", "\"H E J\""),
+ chk_display("asdDofw $@{}][", "\"asdDofw $@{}][\""),
+
%%
%% TODO: Check binaries, fun and floats...
%%
erts_debug:set_internal_state(available_internal_state, OAIS),
- ?line ok = get(erlang_display_test).
+ ok = get(erlang_display_test).
get_chnl_no(NodeName) when is_atom(NodeName) ->
erts_debug:get_internal_state({channel_number, NodeName}).
@@ -182,20 +162,20 @@ get_chnl_no(NodeName) when is_atom(NodeName) ->
chk_display(Term, Expect) when is_list(Expect) ->
Dstr = erts_debug:display(Term),
case Expect ++ io_lib:nl() of
- Dstr ->
- ?t:format("Test of \"~p\" succeeded.~n"
- " Expected and got: ~s~n",
- [Term, io_lib:write_string(Dstr)]);
- DoExpect ->
- ?t:format("***~n"
- "*** Test of \"~p\" failed!~n"
- "*** Expected: ~s~n"
- "*** Got: ~s~n"
- "***~n",
- [Term,
- io_lib:write_string(DoExpect),
- io_lib:write_string(Dstr)]),
- put(erlang_display_test, failed)
+ Dstr ->
+ io:format("Test of \"~p\" succeeded.~n"
+ " Expected and got: ~s~n",
+ [Term, io_lib:write_string(Dstr)]);
+ DoExpect ->
+ io:format("***~n"
+ "*** Test of \"~p\" failed!~n"
+ "*** Expected: ~s~n"
+ "*** Got: ~s~n"
+ "***~n",
+ [Term,
+ io_lib:write_string(DoExpect),
+ io_lib:write_string(Dstr)]),
+ put(erlang_display_test, failed)
end.
chk_display({Term, Expect}) ->
@@ -204,20 +184,20 @@ chk_display({Term, Expect}) ->
mk_pid_xstr({NodeName, Creation}, Number, Serial) ->
Pid = mk_pid({NodeName, Creation}, Number, Serial),
XStr = "<" ++ integer_to_list(get_chnl_no(NodeName))
- ++ "." ++ integer_to_list(Number)
- ++ "." ++ integer_to_list(Serial) ++ ">",
+ ++ "." ++ integer_to_list(Number)
+ ++ "." ++ integer_to_list(Serial) ++ ">",
{Pid, XStr}.
mk_port_xstr({NodeName, Creation}, Number) ->
Port = mk_port({NodeName, Creation}, Number),
XStr = "#Port<" ++ integer_to_list(get_chnl_no(NodeName))
- ++ "." ++ integer_to_list(Number) ++ ">",
+ ++ "." ++ integer_to_list(Number) ++ ">",
{Port, XStr}.
mk_ref_xstr({NodeName, Creation}, Numbers) ->
Ref = mk_ref({NodeName, Creation}, Numbers),
XStr = "#Ref<" ++ integer_to_list(get_chnl_no(NodeName))
- ++ ref_numbers_xstr(Numbers) ++ ">",
+ ++ ref_numbers_xstr(Numbers) ++ ">",
{Ref, XStr}.
ref_numbers_xstr([]) ->
@@ -240,18 +220,7 @@ ref_numbers_xstr([N | Ns]) ->
%%
%%
-default_testcase_impl(doc) -> [];
-default_testcase_impl(suite) -> [];
-default_testcase_impl(Config) when is_list(Config) -> ?line run_case(Config).
-
-init_per_testcase(Case, Config) ->
- Dog = ?t:timetrap(?DEFAULT_TIMEOUT),
- [{testcase, Case}, {watchdog, Dog} |Config].
-
-end_per_testcase(_Case, Config) ->
- Dog = ?config(watchdog, Config),
- ?t:timetrap_cancel(Dog),
- ok.
+default_testcase_impl(Config) when is_list(Config) -> run_case(Config).
-define(TESTPROG, "erl_print_tests").
-define(FAILED_MARKER, $E,$P,$-,$T,$E,$S,$T,$-,$F,$A,$I,$L,$U,$R,$E).
@@ -260,62 +229,62 @@ end_per_testcase(_Case, Config) ->
-define(PID_MARKER, $E,$P,$-,$T,$E,$S,$T,$-,$P,$I,$D).
port_prog_killer(EProc, OSProc) when is_pid(EProc), is_list(OSProc) ->
- ?line process_flag(trap_exit, true),
- ?line Ref = erlang:monitor(process, EProc),
- ?line receive
- {'DOWN', Ref, _, _, Reason} when is_tuple(Reason),
- element(1, Reason)
- == timetrap_timeout ->
- ?line Cmd = "kill -9 " ++ OSProc,
- ?line ?t:format("Test case timed out. "
- "Trying to kill port program.~n"
- " Executing: ~p~n", [Cmd]),
- ?line case os:cmd(Cmd) of
- [] ->
- ok;
- OsCmdRes ->
- ?line ?t:format(" ~s", [OsCmdRes])
- end;
- {'DOWN', Ref, _, _, _} ->
- %% OSProc is assumed to have terminated by itself
- ?line ok
- end.
+ process_flag(trap_exit, true),
+ Ref = erlang:monitor(process, EProc),
+ receive
+ {'DOWN', Ref, _, _, Reason} when is_tuple(Reason),
+ element(1, Reason)
+ == timetrap_timeout ->
+ Cmd = "kill -9 " ++ OSProc,
+ io:format("Test case timed out. "
+ "Trying to kill port program.~n"
+ " Executing: ~p~n", [Cmd]),
+ case os:cmd(Cmd) of
+ [] ->
+ ok;
+ OsCmdRes ->
+ io:format(" ~s", [OsCmdRes])
+ end;
+ {'DOWN', Ref, _, _, _} ->
+ %% OSProc is assumed to have terminated by itself
+ ok
+ end.
get_line(_Port, eol, Data) ->
- ?line Data;
+ Data;
get_line(Port, noeol, Data) ->
- ?line receive
- {Port, {data, {Flag, NextData}}} ->
- ?line get_line(Port, Flag, Data ++ NextData);
- {Port, eof} ->
- ?line ?t:fail(port_prog_unexpectedly_closed)
- end.
+ receive
+ {Port, {data, {Flag, NextData}}} ->
+ get_line(Port, Flag, Data ++ NextData);
+ {Port, eof} ->
+ ct:fail(port_prog_unexpectedly_closed)
+ end.
read_case_data(Port, TestCase) ->
- ?line receive
- {Port, {data, {eol, [?SUCCESS_MARKER]}}} ->
- ?line ok;
- {Port, {data, {Flag, [?SUCCESS_MARKER | CommentStart]}}} ->
- ?line {comment, get_line(Port, Flag, CommentStart)};
- {Port, {data, {Flag, [?SKIPPED_MARKER | CommentStart]}}} ->
- ?line {skipped, get_line(Port, Flag, CommentStart)};
- {Port, {data, {Flag, [?FAILED_MARKER | ReasonStart]}}} ->
- ?line ?t:fail(get_line(Port, Flag, ReasonStart));
- {Port, {data, {eol, [?PID_MARKER | PidStr]}}} ->
- ?line ?t:format("Port program pid: ~s~n", [PidStr]),
- ?line CaseProc = self(),
- ?line _ = list_to_integer(PidStr), % Sanity check
- spawn_opt(fun () ->
- port_prog_killer(CaseProc, PidStr)
- end,
- [{priority, max}, link]),
- read_case_data(Port, TestCase);
- {Port, {data, {Flag, LineStart}}} ->
- ?line ?t:format("~s~n", [get_line(Port, Flag, LineStart)]),
- read_case_data(Port, TestCase);
- {Port, eof} ->
- ?line ?t:fail(port_prog_unexpectedly_closed)
- end.
+ receive
+ {Port, {data, {eol, [?SUCCESS_MARKER]}}} ->
+ ok;
+ {Port, {data, {Flag, [?SUCCESS_MARKER | CommentStart]}}} ->
+ {comment, get_line(Port, Flag, CommentStart)};
+ {Port, {data, {Flag, [?SKIPPED_MARKER | CommentStart]}}} ->
+ {skipped, get_line(Port, Flag, CommentStart)};
+ {Port, {data, {Flag, [?FAILED_MARKER | ReasonStart]}}} ->
+ ct:fail(get_line(Port, Flag, ReasonStart));
+ {Port, {data, {eol, [?PID_MARKER | PidStr]}}} ->
+ io:format("Port program pid: ~s~n", [PidStr]),
+ CaseProc = self(),
+ _ = list_to_integer(PidStr), % Sanity check
+ spawn_opt(fun () ->
+ port_prog_killer(CaseProc, PidStr)
+ end,
+ [{priority, max}, link]),
+ read_case_data(Port, TestCase);
+ {Port, {data, {Flag, LineStart}}} ->
+ io:format("~s~n", [get_line(Port, Flag, LineStart)]),
+ read_case_data(Port, TestCase);
+ {Port, eof} ->
+ ct:fail(port_prog_unexpectedly_closed)
+ end.
run_case(Config) ->
run_case(Config, "").
@@ -324,27 +293,27 @@ run_case(Config, TestArgs) ->
run_case(Config, TestArgs, fun (_Port) -> ok end).
run_case(Config, TestArgs, Fun) ->
- Test = atom_to_list(?config(testcase, Config)),
- TestProg = filename:join([?config(data_dir, Config),
- ?TESTPROG
- ++ "."
- ++ atom_to_list(erlang:system_info(threads))]),
+ Test = atom_to_list(proplists:get_value(testcase, Config)),
+ TestProg = filename:join([proplists:get_value(data_dir, Config),
+ ?TESTPROG
+ ++ "."
+ ++ atom_to_list(erlang:system_info(threads))]),
Cmd = TestProg ++ " " ++ Test ++ " " ++ TestArgs,
case catch open_port({spawn, Cmd}, [stream,
- use_stdio,
- stderr_to_stdout,
- eof,
- {line, 1024}]) of
- Port when is_port(Port) ->
- ?line Fun(Port),
- ?line CaseResult = read_case_data(Port, Test),
- ?line receive
- {Port, eof} ->
- ?line ok
- end,
- ?line CaseResult;
- Error ->
- ?line ?t:fail({open_port_failed, Error})
+ use_stdio,
+ stderr_to_stdout,
+ eof,
+ {line, 1024}]) of
+ Port when is_port(Port) ->
+ Fun(Port),
+ CaseResult = read_case_data(Port, Test),
+ receive
+ {Port, eof} ->
+ ok
+ end,
+ CaseResult;
+ Error ->
+ ct:fail({open_port_failed, Error})
end.
@@ -382,80 +351,80 @@ mk_pid({NodeName, Creation}, Number, Serial) when is_atom(NodeName) ->
mk_pid({atom_to_list(NodeName), Creation}, Number, Serial);
mk_pid({NodeName, Creation}, Number, Serial) ->
case catch binary_to_term(list_to_binary([?VERSION_MAGIC,
- ?PID_EXT,
- ?ATOM_EXT,
- uint16_be(length(NodeName)),
- NodeName,
- uint32_be(Number),
- uint32_be(Serial),
- uint8(Creation)])) of
- Pid when is_pid(Pid) ->
- Pid;
- {'EXIT', {badarg, _}} ->
- exit({badarg, mk_pid, [{NodeName, Creation}, Number, Serial]});
- Other ->
- exit({unexpected_binary_to_term_result, Other})
+ ?PID_EXT,
+ ?ATOM_EXT,
+ uint16_be(length(NodeName)),
+ NodeName,
+ uint32_be(Number),
+ uint32_be(Serial),
+ uint8(Creation)])) of
+ Pid when is_pid(Pid) ->
+ Pid;
+ {'EXIT', {badarg, _}} ->
+ exit({badarg, mk_pid, [{NodeName, Creation}, Number, Serial]});
+ Other ->
+ exit({unexpected_binary_to_term_result, Other})
end.
mk_port({NodeName, Creation}, Number) when is_atom(NodeName) ->
mk_port({atom_to_list(NodeName), Creation}, Number);
mk_port({NodeName, Creation}, Number) ->
case catch binary_to_term(list_to_binary([?VERSION_MAGIC,
- ?PORT_EXT,
- ?ATOM_EXT,
- uint16_be(length(NodeName)),
- NodeName,
- uint32_be(Number),
- uint8(Creation)])) of
- Port when is_port(Port) ->
- Port;
- {'EXIT', {badarg, _}} ->
- exit({badarg, mk_port, [{NodeName, Creation}, Number]});
- Other ->
- exit({unexpected_binary_to_term_result, Other})
+ ?PORT_EXT,
+ ?ATOM_EXT,
+ uint16_be(length(NodeName)),
+ NodeName,
+ uint32_be(Number),
+ uint8(Creation)])) of
+ Port when is_port(Port) ->
+ Port;
+ {'EXIT', {badarg, _}} ->
+ exit({badarg, mk_port, [{NodeName, Creation}, Number]});
+ Other ->
+ exit({unexpected_binary_to_term_result, Other})
end.
mk_ref({NodeName, Creation}, Numbers) when is_atom(NodeName),
- is_integer(Creation),
- is_list(Numbers) ->
+ is_integer(Creation),
+ is_list(Numbers) ->
mk_ref({atom_to_list(NodeName), Creation}, Numbers);
mk_ref({NodeName, Creation}, [Number]) when is_list(NodeName),
- is_integer(Creation),
- is_integer(Number) ->
+ is_integer(Creation),
+ is_integer(Number) ->
case catch binary_to_term(list_to_binary([?VERSION_MAGIC,
- ?REFERENCE_EXT,
- ?ATOM_EXT,
- uint16_be(length(NodeName)),
- NodeName,
- uint32_be(Number),
- uint8(Creation)])) of
- Ref when is_reference(Ref) ->
- Ref;
- {'EXIT', {badarg, _}} ->
- exit({badarg, mk_ref, [{NodeName, Creation}, [Number]]});
- Other ->
- exit({unexpected_binary_to_term_result, Other})
+ ?REFERENCE_EXT,
+ ?ATOM_EXT,
+ uint16_be(length(NodeName)),
+ NodeName,
+ uint32_be(Number),
+ uint8(Creation)])) of
+ Ref when is_reference(Ref) ->
+ Ref;
+ {'EXIT', {badarg, _}} ->
+ exit({badarg, mk_ref, [{NodeName, Creation}, [Number]]});
+ Other ->
+ exit({unexpected_binary_to_term_result, Other})
end;
mk_ref({NodeName, Creation}, Numbers) when is_list(NodeName),
- 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,
- uint16_be(length(Numbers)),
- ?ATOM_EXT,
- uint16_be(length(NodeName)),
- NodeName,
- uint8(Creation),
- lists:map(fun (N) ->
- uint32_be(N)
- end,
- Numbers)])) of
- Ref when is_reference(Ref) ->
- Ref;
- {'EXIT', {badarg, _}} ->
- exit({badarg, mk_ref, [{NodeName, Creation}, Numbers]});
- Other ->
- exit({unexpected_binary_to_term_result, Other})
+ ?NEW_REFERENCE_EXT,
+ uint16_be(length(Numbers)),
+ ?ATOM_EXT,
+ uint16_be(length(NodeName)),
+ NodeName,
+ uint8(Creation),
+ lists:map(fun (N) ->
+ uint32_be(N)
+ end,
+ Numbers)])) of
+ Ref when is_reference(Ref) ->
+ Ref;
+ {'EXIT', {badarg, _}} ->
+ exit({badarg, mk_ref, [{NodeName, Creation}, Numbers]});
+ Other ->
+ exit({unexpected_binary_to_term_result, Other})
end.
my_cre() -> erlang:system_info(creation).
diff --git a/erts/test/erl_print_SUITE_data/Makefile.src b/erts/test/erl_print_SUITE_data/Makefile.src
index e6ea5cc6b9..69ff434c56 100644
--- a/erts/test/erl_print_SUITE_data/Makefile.src
+++ b/erts/test/erl_print_SUITE_data/Makefile.src
@@ -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/erts/test/erl_print_SUITE_data/character_test.h b/erts/test/erl_print_SUITE_data/character_test.h
index 9ff032cb07..82310ee8e7 100644
--- a/erts/test/erl_print_SUITE_data/character_test.h
+++ b/erts/test/erl_print_SUITE_data/character_test.h
@@ -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/erts/test/erl_print_SUITE_data/erl_print_tests.c b/erts/test/erl_print_SUITE_data/erl_print_tests.c
index fb23dc35a6..2fb7d1ff25 100644
--- a/erts/test/erl_print_SUITE_data/erl_print_tests.c
+++ b/erts/test/erl_print_SUITE_data/erl_print_tests.c
@@ -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/erts/test/erl_print_SUITE_data/integer_64_test.h b/erts/test/erl_print_SUITE_data/integer_64_test.h
index 0c3e7b98a8..4bfc91334d 100644
--- a/erts/test/erl_print_SUITE_data/integer_64_test.h
+++ b/erts/test/erl_print_SUITE_data/integer_64_test.h
@@ -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/erts/test/erl_print_SUITE_data/integer_test.h b/erts/test/erl_print_SUITE_data/integer_test.h
index b91f3622d6..b3744928b7 100644
--- a/erts/test/erl_print_SUITE_data/integer_test.h
+++ b/erts/test/erl_print_SUITE_data/integer_test.h
@@ -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/erts/test/erl_print_SUITE_data/snprintf_test.h b/erts/test/erl_print_SUITE_data/snprintf_test.h
index c612a65521..77692304a3 100644
--- a/erts/test/erl_print_SUITE_data/snprintf_test.h
+++ b/erts/test/erl_print_SUITE_data/snprintf_test.h
@@ -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/erts/test/erl_print_SUITE_data/string_test.h b/erts/test/erl_print_SUITE_data/string_test.h
index 0e257888e6..bfe4215d8a 100644
--- a/erts/test/erl_print_SUITE_data/string_test.h
+++ b/erts/test/erl_print_SUITE_data/string_test.h
@@ -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/erts/test/erlc_SUITE.erl b/erts/test/erlc_SUITE.erl
index 7e44be1fe0..237558a129 100644
--- a/erts/test/erlc_SUITE.erl
+++ b/erts/test/erlc_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,10 +22,10 @@
%% Tests the erlc command by compiling various types of files.
-export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
- init_per_group/2,end_per_group/2, compile_erl/1,
- compile_yecc/1, compile_script/1,
- compile_mib/1, good_citizen/1, deep_cwd/1, arg_overflow/1,
- make_dep_options/1]).
+ init_per_group/2,end_per_group/2, compile_erl/1,
+ compile_yecc/1, compile_script/1,
+ compile_mib/1, good_citizen/1, deep_cwd/1, arg_overflow/1,
+ make_dep_options/1]).
-include_lib("common_test/include/ct.hrl").
@@ -57,113 +57,109 @@ end_per_group(_GroupName, Config) ->
%% Tests that compiling Erlang source code works.
compile_erl(Config) when is_list(Config) ->
- ?line {SrcDir, OutDir, Cmd} = get_cmd(Config),
- ?line FileName = filename:join(SrcDir, "erl_test_ok.erl"),
+ {SrcDir, OutDir, Cmd} = get_cmd(Config),
+ FileName = filename:join(SrcDir, "erl_test_ok.erl"),
%% By default, warnings are now turned on.
- ?line run(Config, Cmd, FileName, "",
- ["Warning: function foo/0 is unused\$",
- "_OK_"]),
+ run(Config, Cmd, FileName, "",
+ ["Warning: function foo/0 is unused\$", "_OK_"]),
%% Test that the compiled file is where it should be,
%% and that it is runnable.
- ?line {module, erl_test_ok} = code:load_abs(filename:join(OutDir,
- "erl_test_ok")),
- ?line 42 = erl_test_ok:shoe_size(#person{shoe_size=42}),
- ?line code:purge(erl_test_ok),
+ {module, erl_test_ok} = code:load_abs(filename:join(OutDir, "erl_test_ok")),
+ 42 = erl_test_ok:shoe_size(#person{shoe_size=42}),
+ code:purge(erl_test_ok),
%% Try disabling warnings.
- ?line run(Config, Cmd, FileName, "-W0", ["_OK_"]),
+ run(Config, Cmd, FileName, "-W0", ["_OK_"]),
%% Try treating warnings as errors.
- ?line run(Config, Cmd, FileName, "-Werror",
- ["compile: warnings being treated as errors\$",
- "function foo/0 is unused\$",
- "_ERROR_"]),
+ run(Config, Cmd, FileName, "-Werror",
+ ["compile: warnings being treated as errors\$",
+ "function foo/0 is unused\$", "_ERROR_"]),
%% Check a bad file.
- ?line BadFile = filename:join(SrcDir, "erl_test_bad.erl"),
- ?line run(Config, Cmd, BadFile, "", ["function non_existing/1 undefined\$",
- "_ERROR_"]),
+ BadFile = filename:join(SrcDir, "erl_test_bad.erl"),
+ run(Config, Cmd, BadFile, "", ["function non_existing/1 undefined\$",
+ "_ERROR_"]),
ok.
%% Test that compiling yecc source code works.
compile_yecc(Config) when is_list(Config) ->
- ?line {SrcDir, _, OutDir} = get_dirs(Config),
- ?line Cmd = erlc() ++ " -o" ++ OutDir ++ " ",
- ?line FileName = filename:join(SrcDir, "yecc_test_ok.yrl"),
- ?line run(Config, Cmd, FileName, "-W0", ["_OK_"]),
- ?line true = exists(filename:join(OutDir, "yecc_test_ok.erl")),
-
- ?line BadFile = filename:join(SrcDir, "yecc_test_bad.yrl"),
- ?line run(Config, Cmd, BadFile, "-W0",
- ["rootsymbol form is not a nonterminal\$",
- "undefined nonterminal: form\$",
- "Nonterminals is missing\$",
- "_ERROR_"]),
- ?line exists(filename:join(OutDir, "yecc_test_ok.erl")),
-
+ {SrcDir, _, OutDir} = get_dirs(Config),
+ Cmd = erlc() ++ " -o" ++ OutDir ++ " ",
+ FileName = filename:join(SrcDir, "yecc_test_ok.yrl"),
+ run(Config, Cmd, FileName, "-W0", ["_OK_"]),
+ true = exists(filename:join(OutDir, "yecc_test_ok.erl")),
+
+ BadFile = filename:join(SrcDir, "yecc_test_bad.yrl"),
+ run(Config, Cmd, BadFile, "-W0",
+ ["rootsymbol form is not a nonterminal\$",
+ "undefined nonterminal: form\$",
+ "Nonterminals is missing\$",
+ "_ERROR_"]),
+ exists(filename:join(OutDir, "yecc_test_ok.erl")),
ok.
%% Test that compiling start scripts works.
compile_script(Config) when is_list(Config) ->
- ?line {SrcDir, OutDir, Cmd} = get_cmd(Config),
- ?line FileName = filename:join(SrcDir, "start_ok.script"),
- ?line run(Config, Cmd, FileName, "", ["_OK_"]),
- ?line true = exists(filename:join(OutDir, "start_ok.boot")),
+ {SrcDir, OutDir, Cmd} = get_cmd(Config),
+ FileName = filename:join(SrcDir, "start_ok.script"),
+ run(Config, Cmd, FileName, "", ["_OK_"]),
+ true = exists(filename:join(OutDir, "start_ok.boot")),
- ?line BadFile = filename:join(SrcDir, "start_bad.script"),
- ?line run(Config, Cmd, BadFile, "", ["syntax error before:", "_ERROR_"]),
+ BadFile = filename:join(SrcDir, "start_bad.script"),
+ run(Config, Cmd, BadFile, "", ["syntax error before:", "_ERROR_"]),
ok.
%% Test that compiling SNMP mibs works.
compile_mib(Config) when is_list(Config) ->
- ?line {SrcDir, OutDir, Cmd} = get_cmd(Config),
- ?line FileName = filename:join(SrcDir, "GOOD-MIB.mib"),
- ?line run(Config, Cmd, FileName, "", ["_OK_"]),
- ?line Output = filename:join(OutDir, "GOOD-MIB.bin"),
- ?line true = exists(Output),
+ {SrcDir, OutDir, Cmd} = get_cmd(Config),
+ FileName = filename:join(SrcDir, "GOOD-MIB.mib"),
+ run(Config, Cmd, FileName, "", ["_OK_"]),
+ Output = filename:join(OutDir, "GOOD-MIB.bin"),
+ true = exists(Output),
%% Try -W option.
- ?line ok = file:delete(Output),
- ?line run(Config, Cmd, FileName, "-W",
- ["_OK_"]),
- ?line true = exists(Output),
+ ok = file:delete(Output),
+ run(Config, Cmd, FileName, "-W",
+ ["_OK_"]),
+ true = exists(Output),
%% Try -W option and more verbose.
- ?line ok = file:delete(Output),
- ?line case test_server:os_type() of
- {unix,_} ->
- ?line run(Config, Cmd, FileName, "-W +'{verbosity,info}'",
- ["\\[GOOD-MIB[.]mib\\]\\[INF\\]: No accessfunction for 'sysDescr' => using default",
- "_OK_"]),
- ?line true = exists(Output),
- ?line ok = file:delete(Output);
- _ -> ok %Don't bother -- too much work.
- end,
+ ok = file:delete(Output),
+ case test_server:os_type() of
+ {unix,_} ->
+ run(Config, Cmd, FileName, "-W +'{verbosity,info}'",
+ ["\\[GOOD-MIB[.]mib\\]\\[INF\\]: No accessfunction for 'sysDescr' => using default",
+ "_OK_"]),
+ true = exists(Output),
+ ok = file:delete(Output);
+ _ -> ok %Don't bother -- too much work.
+ end,
%% Try a bad file.
- ?line BadFile = filename:join(SrcDir, "BAD-MIB.mib"),
- ?line run(Config, Cmd, BadFile, "",
- ["BAD-MIB.mib: 1: syntax error before: mibs\$",
- "compilation_failed_ERROR_"]),
+ BadFile = filename:join(SrcDir, "BAD-MIB.mib"),
+ run(Config, Cmd, BadFile, "",
+ ["BAD-MIB.mib: 1: syntax error before: mibs\$",
+ "compilation_failed_ERROR_"]),
%% Make sure that no -I option works.
- ?line NewCmd = erlc() ++ " -o" ++ OutDir ++ " ",
- ?line run(Config, NewCmd, FileName, "", ["_OK_"]),
- ?line true = exists(Output),
+ NewCmd = erlc() ++ " -o" ++ OutDir ++ " ",
+ run(Config, NewCmd, FileName, "", ["_OK_"]),
+ true = exists(Output),
ok.
@@ -171,91 +167,91 @@ compile_mib(Config) when is_list(Config) ->
%% shell script with redirected input).
good_citizen(Config) when is_list(Config) ->
case os:type() of
- {unix, _} ->
- ?line PrivDir = ?config(priv_dir, Config),
- ?line Answer = filename:join(PrivDir, "answer"),
- ?line Script = filename:join(PrivDir, "test_script"),
- ?line Test = filename:join(PrivDir, "test.erl"),
- ?line S = ["#! /bin/sh\n", "erlc ", Test, "\n",
- "read reply\n", "echo $reply\n"],
- ?line ok = file:write_file(Script, S),
- ?line ok = file:write_file(Test, "-module(test).\n"),
- ?line Cmd = "echo y | sh " ++ Script ++ " > " ++ Answer,
- ?line os:cmd(Cmd),
- ?line {ok, Answer0} = file:read_file(Answer),
- ?line [$y|_] = binary_to_list(Answer0),
- ok;
- _ ->
- {skip, "Unix specific"}
+ {unix, _} ->
+ PrivDir = proplists:get_value(priv_dir, Config),
+ Answer = filename:join(PrivDir, "answer"),
+ Script = filename:join(PrivDir, "test_script"),
+ Test = filename:join(PrivDir, "test.erl"),
+ S = ["#! /bin/sh\n", "erlc ", Test, "\n",
+ "read reply\n", "echo $reply\n"],
+ ok = file:write_file(Script, S),
+ ok = file:write_file(Test, "-module(test).\n"),
+ Cmd = "echo y | sh " ++ Script ++ " > " ++ Answer,
+ os:cmd(Cmd),
+ {ok, Answer0} = file:read_file(Answer),
+ [$y|_] = binary_to_list(Answer0),
+ ok;
+ _ ->
+ {skip, "Unix specific"}
end.
%% Make sure that compiling an Erlang module deep down in
%% in a directory with more than 255 characters works.
deep_cwd(Config) when is_list(Config) ->
case os:type() of
- {unix, _} ->
- PrivDir = ?config(priv_dir, Config),
- deep_cwd_1(PrivDir);
- _ ->
- {skip, "Only a problem on Unix"}
+ {unix, _} ->
+ PrivDir = proplists:get_value(priv_dir, Config),
+ deep_cwd_1(PrivDir);
+ _ ->
+ {skip, "Only a problem on Unix"}
end.
deep_cwd_1(PrivDir) ->
- ?line DeepDir0 = filename:join(PrivDir, lists:duplicate(128, $a)),
- ?line DeepDir = filename:join(DeepDir0, lists:duplicate(128, $b)),
- ?line ok = file:make_dir(DeepDir0),
- ?line ok = file:make_dir(DeepDir),
- ?line ok = file:set_cwd(DeepDir),
- ?line ok = file:write_file("test.erl", "-module(test).\n\n"),
- ?line io:format("~s\n", [os:cmd("erlc test.erl")]),
- ?line true = filelib:is_file("test.beam"),
+ DeepDir0 = filename:join(PrivDir, lists:duplicate(128, $a)),
+ DeepDir = filename:join(DeepDir0, lists:duplicate(128, $b)),
+ ok = file:make_dir(DeepDir0),
+ ok = file:make_dir(DeepDir),
+ ok = file:set_cwd(DeepDir),
+ ok = file:write_file("test.erl", "-module(test).\n\n"),
+ io:format("~s\n", [os:cmd("erlc test.erl")]),
+ true = filelib:is_file("test.beam"),
ok.
%% Test that a large number of command line switches does not
%% overflow the argument buffer
arg_overflow(Config) when is_list(Config) ->
- ?line {SrcDir, _OutDir, Cmd} = get_cmd(Config),
- ?line FileName = filename:join(SrcDir, "erl_test_ok.erl"),
+ {SrcDir, _OutDir, Cmd} = get_cmd(Config),
+ FileName = filename:join(SrcDir, "erl_test_ok.erl"),
%% Each -D option will be expanded to three arguments when
%% invoking 'erl'.
- ?line NumDOptions = num_d_options(),
- ?line Args = lists:flatten([ ["-D", integer_to_list(N, 36), "=1 "] ||
- N <- lists:seq(1, NumDOptions) ]),
- ?line run(Config, Cmd, FileName, Args,
- ["Warning: function foo/0 is unused\$",
- "_OK_"]),
+ NumDOptions = num_d_options(),
+ Args = lists:flatten([ ["-D", integer_to_list(N, 36), "=1 "] ||
+ N <- lists:seq(1, NumDOptions) ]),
+ run(Config, Cmd, FileName, Args,
+ ["Warning: function foo/0 is unused\$",
+ "_OK_"]),
ok.
num_d_options() ->
case {os:type(),os:version()} of
- {{win32,_},_} ->
- %% The maximum size of a command line in the command
- %% shell on Windows is 8191 characters.
- %% Each -D option is expanded to "@dv NN 1", i.e.
- %% 8 characters. (Numbers up to 1295 can be expressed
- %% as two 36-base digits.)
- 1000;
- {{unix,linux},Version} when Version < {2,6,23} ->
- %% On some older 64-bit versions of Linux, the maximum number
- %% of arguments is 16383.
- %% See: http://www.in-ulm.de/~mascheck/various/argmax/
- 5440;
- {{unix,darwin},{Major,_,_}} when Major >= 11 ->
- %% "getconf ARG_MAX" still reports 262144 (as in previous
- %% version of MacOS X), but the useful space seem to have
- %% shrunk significantly (or possibly the number of arguments).
- %% 7673
- 7500;
- {_,_} ->
- 12000
+ {{win32,_},_} ->
+ %% The maximum size of a command line in the command
+ %% shell on Windows is 8191 characters.
+ %% Each -D option is expanded to "@dv NN 1", i.e.
+ %% 8 characters. (Numbers up to 1295 can be expressed
+ %% as two 36-base digits.)
+ 1000;
+ {{unix,linux},Version} when Version < {2,6,23} ->
+ %% On some older 64-bit versions of Linux, the maximum number
+ %% of arguments is 16383.
+ %% See: http://www.in-ulm.de/~mascheck/various/argmax/
+ 5440;
+ {{unix,darwin},{Major,_,_}} when Major >= 11 ->
+ %% "getconf ARG_MAX" still reports 262144 (as in previous
+ %% version of MacOS X), but the useful space seem to have
+ %% shrunk significantly (or possibly the number of arguments).
+ %% 7673
+ 7500;
+ {_,_} ->
+ 12000
end.
erlc() ->
case os:find_executable("erlc") of
- false ->
- test_server:fail("Can't find erlc");
- Erlc ->
- "\"" ++ Erlc ++ "\""
+ false ->
+ ct:fail("Can't find erlc");
+ Erlc ->
+ "\"" ++ Erlc ++ "\""
end.
make_dep_options(Config) ->
@@ -264,30 +260,30 @@ make_dep_options(Config) ->
DepRE = ["/erl_test_ok[.]beam: \\\\$",
- "/system_test/erlc_SUITE_data/src/erl_test_ok[.]erl \\\\$",
- "/system_test/erlc_SUITE_data/include/erl_test[.]hrl$",
- "_OK_"],
+ "/system_test/erlc_SUITE_data/src/erl_test_ok[.]erl \\\\$",
+ "/system_test/erlc_SUITE_data/include/erl_test[.]hrl$",
+ "_OK_"],
DepRETarget =
- ["^target: \\\\$",
- "/system_test/erlc_SUITE_data/src/erl_test_ok[.]erl \\\\$",
- "/system_test/erlc_SUITE_data/include/erl_test[.]hrl$",
- "_OK_"],
+ ["^target: \\\\$",
+ "/system_test/erlc_SUITE_data/src/erl_test_ok[.]erl \\\\$",
+ "/system_test/erlc_SUITE_data/include/erl_test[.]hrl$",
+ "_OK_"],
DepREMP =
- ["/erl_test_ok[.]beam: \\\\$",
- "/system_test/erlc_SUITE_data/src/erl_test_ok[.]erl \\\\$",
- "/system_test/erlc_SUITE_data/include/erl_test[.]hrl$",
- [],
- "/system_test/erlc_SUITE_data/include/erl_test.hrl:$",
- "_OK_"],
+ ["/erl_test_ok[.]beam: \\\\$",
+ "/system_test/erlc_SUITE_data/src/erl_test_ok[.]erl \\\\$",
+ "/system_test/erlc_SUITE_data/include/erl_test[.]hrl$",
+ [],
+ "/system_test/erlc_SUITE_data/include/erl_test.hrl:$",
+ "_OK_"],
DepREMissing =
- ["/erl_test_missing_header[.]beam: \\\\$",
- "/system_test/erlc_SUITE_data/src/erl_test_missing_header[.]erl \\\\$",
- "/system_test/erlc_SUITE_data/include/erl_test[.]hrl \\\\$",
- "missing.hrl$",
- "_OK_"],
+ ["/erl_test_missing_header[.]beam: \\\\$",
+ "/system_test/erlc_SUITE_data/src/erl_test_missing_header[.]erl \\\\$",
+ "/system_test/erlc_SUITE_data/include/erl_test[.]hrl \\\\$",
+ "missing.hrl$",
+ "_OK_"],
%% Test plain -M
run(Config, Cmd, FileName, "-M", DepRE),
@@ -309,7 +305,7 @@ make_dep_options(Config) ->
%% Test -MF File -MT Target
TargetDepFile = filename:join(OutDir, "target.deps"),
run(Config, Cmd, FileName, "-MF "++TargetDepFile++" -MT target",
- ["_OK_"]),
+ ["_OK_"]),
{ok,TargetBin} = file:read_file(TargetDepFile),
verify_result(binary_to_list(TargetBin)++["_OK_"], DepRETarget),
@@ -358,33 +354,33 @@ split([], Current, Lines) ->
match_messages([Msg|Rest1], [Regexp|Rest2]) ->
case re:run(Msg, Regexp, [{capture,none}, unicode]) of
- match ->
- ok;
- nomatch ->
- io:format("Not matching: ~s\n", [Msg]),
- io:format("Regexp : ~s\n", [Regexp]),
- test_server:fail(message_mismatch)
+ match ->
+ ok;
+ nomatch ->
+ io:format("Not matching: ~s\n", [Msg]),
+ io:format("Regexp : ~s\n", [Regexp]),
+ ct:fail(message_mismatch)
end,
match_messages(Rest1, Rest2);
match_messages([], [Expect|Rest]) ->
- test_server:fail({too_few_messages, [Expect|Rest]});
+ ct:fail({too_few_messages, [Expect|Rest]});
match_messages([Msg|Rest], []) ->
- test_server:fail({too_many_messages, [Msg|Rest]});
+ ct:fail({too_many_messages, [Msg|Rest]});
match_messages([], []) ->
ok.
get_cmd(Cfg) ->
- ?line {SrcDir, IncDir, OutDir} = get_dirs(Cfg),
- ?line Cmd = erlc() ++ " -I" ++ IncDir ++ " -o" ++ OutDir ++ " ",
+ {SrcDir, IncDir, OutDir} = get_dirs(Cfg),
+ Cmd = erlc() ++ " -I" ++ IncDir ++ " -o" ++ OutDir ++ " ",
{SrcDir, OutDir, Cmd}.
get_dirs(Cfg) ->
- ?line DataDir = ?config(data_dir, Cfg),
- ?line PrivDir = ?config(priv_dir, Cfg),
- ?line SrcDir = filename:join(DataDir, "src"),
- ?line IncDir = filename:join(DataDir, "include"),
+ DataDir = proplists:get_value(data_dir, Cfg),
+ PrivDir = proplists:get_value(priv_dir, Cfg),
+ SrcDir = filename:join(DataDir, "src"),
+ IncDir = filename:join(DataDir, "include"),
{SrcDir, IncDir, PrivDir}.
-
+
exists(Name) ->
filelib:is_file(Name).
@@ -396,7 +392,7 @@ exists(Name) ->
%% a non-zero exit status.
run_command(Config, Cmd) ->
- TmpDir = filename:join(?config(priv_dir, Config), "tmp"),
+ TmpDir = filename:join(proplists:get_value(priv_dir, Config), "tmp"),
file:make_dir(TmpDir),
{RunFile, Run, Script} = run_command(TmpDir, os:type(), Cmd),
ok = file:write_file(filename:join(TmpDir, RunFile), unicode:characters_to_binary(Script)),
@@ -405,7 +401,7 @@ run_command(Config, Cmd) ->
run_command(Dir, {win32, _}, Cmd) ->
BatchFile = filename:join(Dir, "run.bat"),
Run = re:replace(filename:rootname(BatchFile), "/", "\\",
- [global,{return,list}]),
+ [global,{return,list}]),
{BatchFile,
Run,
["@echo off\r\n",
@@ -426,5 +422,4 @@ run_command(Dir, {unix, _}, Cmd) ->
" *) echo '_ERROR_';;\n",
"esac\n"]};
run_command(_Dir, Other, _Cmd) ->
- M = io_lib:format("Don't know how to test exit code for ~p", [Other]),
- test_server:fail(lists:flatten(M)).
+ ct:fail("Don't know how to test exit code for ~p", [Other]).
diff --git a/erts/test/erlc_SUITE_data/include/erl_test.hrl b/erts/test/erlc_SUITE_data/include/erl_test.hrl
index e7d096d2c1..70aecc4762 100644
--- a/erts/test/erlc_SUITE_data/include/erl_test.hrl
+++ b/erts/test/erlc_SUITE_data/include/erl_test.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/erts/test/erlc_SUITE_data/src/erl_test_bad.erl b/erts/test/erlc_SUITE_data/src/erl_test_bad.erl
index b8c4ee2786..cbfe81705f 100644
--- a/erts/test/erlc_SUITE_data/src/erl_test_bad.erl
+++ b/erts/test/erlc_SUITE_data/src/erl_test_bad.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/erts/test/erlc_SUITE_data/src/erl_test_missing_header.erl b/erts/test/erlc_SUITE_data/src/erl_test_missing_header.erl
index f043fbebc4..604bb16bd6 100644
--- a/erts/test/erlc_SUITE_data/src/erl_test_missing_header.erl
+++ b/erts/test/erlc_SUITE_data/src/erl_test_missing_header.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/erts/test/erlc_SUITE_data/src/erl_test_ok.erl b/erts/test/erlc_SUITE_data/src/erl_test_ok.erl
index a82eda95b3..f1a48cbf18 100644
--- a/erts/test/erlc_SUITE_data/src/erl_test_ok.erl
+++ b/erts/test/erlc_SUITE_data/src/erl_test_ok.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/erts/test/erlc_SUITE_data/src/yecc_test_bad.yrl b/erts/test/erlc_SUITE_data/src/yecc_test_bad.yrl
index de17b903d6..da488b7232 100644
--- a/erts/test/erlc_SUITE_data/src/yecc_test_bad.yrl
+++ b/erts/test/erlc_SUITE_data/src/yecc_test_bad.yrl
@@ -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/erts/test/erlc_SUITE_data/src/yecc_test_ok.yrl b/erts/test/erlc_SUITE_data/src/yecc_test_ok.yrl
index 9433dcb90d..feb067e34b 100644
--- a/erts/test/erlc_SUITE_data/src/yecc_test_ok.yrl
+++ b/erts/test/erlc_SUITE_data/src/yecc_test_ok.yrl
@@ -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/erts/test/erlexec_SUITE.erl b/erts/test/erlexec_SUITE.erl
index 6440cbf0d7..44d7f63387 100644
--- a/erts/test/erlexec_SUITE.erl
+++ b/erts/test/erlexec_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.
@@ -27,71 +27,46 @@
%%%-------------------------------------------------------------------
-module(erlexec_SUITE).
+-export([all/0, suite/0, init_per_testcase/2, end_per_testcase/2]).
-%-define(line_trace, 1).
-
--define(DEFAULT_TIMEOUT, ?t:minutes(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]).
-
--export([args_file/1, evil_args_file/1, env/1, args_file_env/1, otp_7461/1, otp_7461_remote/1, otp_8209/1, zdbbl_dist_buf_busy_limit/1]).
+-export([args_file/1, evil_args_file/1, env/1, args_file_env/1,
+ otp_7461/1, otp_7461_remote/1, otp_8209/1,
+ zdbbl_dist_buf_busy_limit/1]).
-include_lib("common_test/include/ct.hrl").
-
init_per_testcase(Case, Config) ->
- Dog = ?t:timetrap(?DEFAULT_TIMEOUT),
SavedEnv = save_env(),
- [{testcase, Case}, {watchdog, Dog}, {erl_flags_env, SavedEnv} |Config].
+ [{testcase, Case},{erl_flags_env, SavedEnv}|Config].
end_per_testcase(_Case, Config) ->
- Dog = ?config(watchdog, Config),
- SavedEnv = ?config(erl_flags_env, Config),
+ SavedEnv = proplists:get_value(erl_flags_env, Config),
restore_env(SavedEnv),
cleanup_nodes(),
- ?t:timetrap_cancel(Dog),
ok.
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap, {minutes, 1}}].
all() ->
[args_file, evil_args_file, env, args_file_env,
otp_7461, otp_8209, zdbbl_dist_buf_busy_limit].
-groups() ->
- [].
-
-init_per_suite(Config) ->
- Config.
-
-end_per_suite(_Config) ->
- ok.
-
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
-
-otp_8209(doc) ->
- ["Test that plain first argument does not "
- "destroy -home switch [OTP-8209]"];
-otp_8209(suite) ->
- [];
+%% Test that plain first argument does not
+%% destroy -home switch [OTP-8209]
otp_8209(Config) when is_list(Config) ->
- ?line {ok,[[PName]]} = init:get_argument(progname),
- ?line SNameS = "erlexec_test_01",
- ?line SName = list_to_atom(SNameS++"@"++
+ {ok,[[PName]]} = init:get_argument(progname),
+ SNameS = "erlexec_test_01",
+ SName = list_to_atom(SNameS++"@"++
hd(tl(string:tokens(atom_to_list(node()),"@")))),
- ?line Cmd = PName ++ " dummy_param -sname "++SNameS++" -setcookie "++
+ Cmd = PName ++ " dummy_param -sname "++SNameS++" -setcookie "++
atom_to_list(erlang:get_cookie()),
- ?line open_port({spawn,Cmd},[]),
- ?line pong = loop_ping(SName,40),
- ?line {ok,[[_]]} = rpc:call(SName,init,get_argument,[home]),
- ?line ["dummy_param"] = rpc:call(SName,init,get_plain_arguments,[]),
- ?line ok = cleanup_nodes(),
+ open_port({spawn,Cmd},[]),
+ pong = loop_ping(SName,40),
+ {ok,[[_]]} = rpc:call(SName,init,get_argument,[home]),
+ ["dummy_param"] = rpc:call(SName,init,get_plain_arguments,[]),
+ ok = cleanup_nodes(),
ok.
cleanup_nodes() ->
@@ -123,17 +98,14 @@ loop_ping(Node,N) ->
pong
end.
-args_file(doc) -> [];
-args_file(suite) -> [];
args_file(Config) when is_list(Config) ->
- ?line AFN1 = privfile("1", Config),
- ?line AFN2 = privfile("2", Config),
- ?line AFN3 = privfile("3", Config),
- ?line AFN4 = privfile("4", Config),
- ?line AFN5 = privfile("5", Config),
- ?line AFN6 = privfile("6", Config),
- ?line write_file(AFN1,
- "-MiscArg2~n"
+ AFN1 = privfile("1", Config),
+ AFN2 = privfile("2", Config),
+ AFN3 = privfile("3", Config),
+ AFN4 = privfile("4", Config),
+ AFN5 = privfile("5", Config),
+ AFN6 = privfile("6", Config),
+ write_file(AFN1, "-MiscArg2~n"
"# a comment +\\#1000~n"
"+\\#200 # another comment~n"
"~n"
@@ -145,7 +117,7 @@ args_file(Config) when is_list(Config) ->
"+\\#700~n"
"-extra +XtraArg6~n",
[AFN2]),
- ?line write_file(AFN2,
+ write_file(AFN2,
"-MiscArg3~n"
"+\\#300~n"
"-args_file ~s~n"
@@ -156,61 +128,59 @@ args_file(Config) when is_list(Config) ->
"-args_file ~s~n"
"-extra +XtraArg5~n",
[AFN3, AFN4, AFN5, AFN6]),
- ?line write_file(AFN3,
+ write_file(AFN3,
"# comment again~n"
" -MiscArg4 +\\#400 -extra +XtraArg1"),
- ?line write_file(AFN4,
+ write_file(AFN4,
" -MiscArg6 +\\#600 -extra +XtraArg2~n"
"+XtraArg3~n"
"+XtraArg4~n"
"# comment again~n"),
- ?line write_file(AFN5, ""),
- ?line write_file(AFN6, "-extra # +XtraArg10~n"),
- ?line CmdLine = "+#100 -MiscArg1 "
+ write_file(AFN5, ""),
+ write_file(AFN6, "-extra # +XtraArg10~n"),
+ CmdLine = "+#100 -MiscArg1 "
++ "-args_file " ++ AFN1
++ " +#800 -MiscArg8 -extra +XtraArg7 +XtraArg8",
- ?line {Emu, Misc, Extra} = emu_args(CmdLine),
- ?line verify_args(["-#100", "-#200", "-#300", "-#400",
+ {Emu, Misc, Extra} = emu_args(CmdLine),
+ verify_args(["-#100", "-#200", "-#300", "-#400",
"-#500", "-#600", "-#700", "-#800"], Emu),
- ?line verify_args(["-MiscArg1", "-MiscArg2", "-MiscArg3", "-MiscArg4",
+ verify_args(["-MiscArg1", "-MiscArg2", "-MiscArg3", "-MiscArg4",
"-MiscArg5", "-MiscArg6", "-MiscArg7", "-MiscArg8"],
Misc),
- ?line verify_args(["+XtraArg1", "+XtraArg2", "+XtraArg3", "+XtraArg4",
+ verify_args(["+XtraArg1", "+XtraArg2", "+XtraArg3", "+XtraArg4",
"+XtraArg5", "+XtraArg6", "+XtraArg7", "+XtraArg8"],
Extra),
- ?line verify_not_args(["-MiscArg10", "-#1000", "+XtraArg10",
+ verify_not_args(["-MiscArg10", "-#1000", "+XtraArg10",
"-MiscArg1", "-MiscArg2", "-MiscArg3", "-MiscArg4",
"-MiscArg5", "-MiscArg6", "-MiscArg7", "-MiscArg8",
"+XtraArg1", "+XtraArg2", "+XtraArg3", "+XtraArg4",
"+XtraArg5", "+XtraArg6", "+XtraArg7", "+XtraArg8"],
Emu),
- ?line verify_not_args(["-MiscArg10", "-#1000", "+XtraArg10",
+ verify_not_args(["-MiscArg10", "-#1000", "+XtraArg10",
"-#100", "-#200", "-#300", "-#400",
"-#500", "-#600", "-#700", "-#800",
"+XtraArg1", "+XtraArg2", "+XtraArg3", "+XtraArg4",
"+XtraArg5", "+XtraArg6", "+XtraArg7", "+XtraArg8"],
Misc),
- ?line verify_not_args(["-MiscArg10", "-#1000", "+XtraArg10",
+ verify_not_args(["-MiscArg10", "-#1000", "+XtraArg10",
"-#100", "-#200", "-#300", "-#400",
"-#500", "-#600", "-#700", "-#800",
"-MiscArg1", "-MiscArg2", "-MiscArg3", "-MiscArg4",
"-MiscArg5", "-MiscArg6", "-MiscArg7", "-MiscArg8"],
Extra),
- ?line ok.
+ ok.
-evil_args_file(doc) -> [];
-evil_args_file(suite) -> [];
evil_args_file(Config) when is_list(Config) ->
- ?line Lim = 300,
- ?line FNums = lists:seq(1, Lim),
+ Lim = 300,
+ FNums = lists:seq(1, Lim),
lists:foreach(fun (End) when End == Lim ->
- ?line AFN = privfile(integer_to_list(End), Config),
- ?line write_file(AFN,
+ AFN = privfile(integer_to_list(End), Config),
+ write_file(AFN,
"-MiscArg~p ",
[End]);
(I) ->
- ?line AFNX = privfile(integer_to_list(I), Config),
- ?line AFNY = privfile(integer_to_list(I+1), Config),
+ AFNX = privfile(integer_to_list(I), Config),
+ AFNY = privfile(integer_to_list(I+1), Config),
{Frmt, Args} =
case I rem 2 of
0 ->
@@ -220,65 +190,59 @@ evil_args_file(Config) when is_list(Config) ->
{"-MiscArg~p -args_file ~s",
[I, AFNY]}
end,
- ?line write_file(AFNX, Frmt, Args)
+ write_file(AFNX, Frmt, Args)
end,
FNums),
- ?line {_Emu, Misc, _Extra} = emu_args("-args_file "
+ {_Emu, Misc, _Extra} = emu_args("-args_file "
++ privfile("1", Config)),
- ?line ANums = FNums
+ ANums = FNums
++ lists:reverse(lists:filter(fun (I) when I == Lim -> false;
(I) when I rem 2 == 0 -> true;
(_) -> false
end, FNums)),
- ?line verify_args(lists:map(fun (I) -> "-MiscArg"++integer_to_list(I) end,
+ verify_args(lists:map(fun (I) -> "-MiscArg"++integer_to_list(I) end,
ANums),
Misc),
- ?line ok.
+ ok.
-env(doc) -> [];
-env(suite) -> [];
env(Config) when is_list(Config) ->
- ?line os:putenv("ERL_AFLAGS", "-MiscArg1 +#100 -extra +XtraArg1 +XtraArg2"),
- ?line CmdLine = "+#200 -MiscArg2 -extra +XtraArg3 +XtraArg4",
- ?line os:putenv("ERL_FLAGS", "-MiscArg3 +#300 -extra +XtraArg5"),
- ?line os:putenv("ERL_ZFLAGS", "-MiscArg4 +#400 -extra +XtraArg6"),
- ?line {Emu, Misc, Extra} = emu_args(CmdLine),
- ?line verify_args(["-#100", "-#200", "-#300", "-#400"], Emu),
- ?line verify_args(["-MiscArg1", "-MiscArg2", "-MiscArg3", "-MiscArg4"],
+ os:putenv("ERL_AFLAGS", "-MiscArg1 +#100 -extra +XtraArg1 +XtraArg2"),
+ CmdLine = "+#200 -MiscArg2 -extra +XtraArg3 +XtraArg4",
+ os:putenv("ERL_FLAGS", "-MiscArg3 +#300 -extra +XtraArg5"),
+ os:putenv("ERL_ZFLAGS", "-MiscArg4 +#400 -extra +XtraArg6"),
+ {Emu, Misc, Extra} = emu_args(CmdLine),
+ verify_args(["-#100", "-#200", "-#300", "-#400"], Emu),
+ verify_args(["-MiscArg1", "-MiscArg2", "-MiscArg3", "-MiscArg4"],
Misc),
- ?line verify_args(["+XtraArg1", "+XtraArg2", "+XtraArg3", "+XtraArg4",
+ verify_args(["+XtraArg1", "+XtraArg2", "+XtraArg3", "+XtraArg4",
"+XtraArg5", "+XtraArg6"],
Extra),
- ?line ok.
+ ok.
-args_file_env(doc) -> [];
-args_file_env(suite) -> [];
args_file_env(Config) when is_list(Config) ->
- ?line AFN1 = privfile("1", Config),
- ?line AFN2 = privfile("2", Config),
- ?line write_file(AFN1, "-MiscArg2 +\\#200 -extra +XtraArg1"),
- ?line write_file(AFN2, "-MiscArg3 +\\#400 -extra +XtraArg3"),
- ?line os:putenv("ERL_AFLAGS",
+ AFN1 = privfile("1", Config),
+ AFN2 = privfile("2", Config),
+ write_file(AFN1, "-MiscArg2 +\\#200 -extra +XtraArg1"),
+ write_file(AFN2, "-MiscArg3 +\\#400 -extra +XtraArg3"),
+ os:putenv("ERL_AFLAGS",
"-MiscArg1 +#100 -args_file "++AFN1++ " -extra +XtraArg2"),
- ?line CmdLine = "+#300 -args_file "++AFN2++" -MiscArg4 -extra +XtraArg4",
- ?line os:putenv("ERL_FLAGS", "-MiscArg5 +#500 -extra +XtraArg5"),
- ?line os:putenv("ERL_ZFLAGS", "-MiscArg6 +#600 -extra +XtraArg6"),
- ?line {Emu, Misc, Extra} = emu_args(CmdLine),
- ?line verify_args(["-#100", "-#200", "-#300", "-#400",
+ CmdLine = "+#300 -args_file "++AFN2++" -MiscArg4 -extra +XtraArg4",
+ os:putenv("ERL_FLAGS", "-MiscArg5 +#500 -extra +XtraArg5"),
+ os:putenv("ERL_ZFLAGS", "-MiscArg6 +#600 -extra +XtraArg6"),
+ {Emu, Misc, Extra} = emu_args(CmdLine),
+ verify_args(["-#100", "-#200", "-#300", "-#400",
"-#500", "-#600"], Emu),
- ?line verify_args(["-MiscArg1", "-MiscArg2", "-MiscArg3", "-MiscArg4",
+ verify_args(["-MiscArg1", "-MiscArg2", "-MiscArg3", "-MiscArg4",
"-MiscArg5", "-MiscArg6"],
Misc),
- ?line verify_args(["+XtraArg1", "+XtraArg2", "+XtraArg3", "+XtraArg4",
+ verify_args(["+XtraArg1", "+XtraArg2", "+XtraArg3", "+XtraArg4",
"+XtraArg5", "+XtraArg6"],
Extra),
- ?line ok.
+ ok.
%% Make sure "erl -detached" survives when parent process group gets killed
-otp_7461(doc) -> [];
-otp_7461(suite) -> [];
otp_7461(Config) when is_list(Config) ->
case os:type() of
{unix,_} ->
@@ -302,9 +266,9 @@ otp_7461(Config) when is_list(Config) ->
otp_7461_do(Config) ->
io:format("alive=~p node=~p\n",[is_alive(), node()]),
- TestProg = filename:join([?config(data_dir, Config), "erlexec_tests"]),
+ TestProg = filename:join([proplists:get_value(data_dir, Config), "erlexec_tests"]),
{ok, [[ErlProg]]} = init:get_argument(progname),
- ?line Cmd = TestProg ++ " " ++ ErlProg ++
+ Cmd = TestProg ++ " " ++ ErlProg ++
" -detached -sname " ++ get_nodename(otp_7461) ++
" -setcookie " ++ atom_to_list(erlang:get_cookie()) ++
" -pa " ++ filename:dirname(code:which(?MODULE)) ++
@@ -314,29 +278,31 @@ otp_7461_do(Config) ->
%% open_port fork+exec
io:format("spawn port prog ~p\n",[Cmd]),
- ?line Port = open_port({spawn, Cmd}, [eof]),
+ Port = open_port({spawn, Cmd}, [eof]),
io:format("Wait for node to connect...\n",[]),
- ?line {nodeup, Slave} = receive Msg -> Msg
+ {nodeup, Slave} = receive Msg -> Msg
after 20*1000 -> timeout end,
io:format("Node alive: ~p\n", [Slave]),
- ?line pong = net_adm:ping(Slave),
+ pong = net_adm:ping(Slave),
io:format("Ping ok towards ~p\n", [Slave]),
- ?line Port ! { self(), {command, "K"}}, % Kill child process group
- ?line {Port, {data, "K"}} = receive Msg2 -> Msg2 end,
- ?line port_close(Port),
+ Port ! { self(), {command, "K"}}, % Kill child process group
+ {Port, {data, "K"}} = receive Msg2 -> Msg2 end,
+ port_close(Port),
%% Now the actual test. Detached node should still be alive.
- ?line pong = net_adm:ping(Slave),
+ pong = net_adm:ping(Slave),
io:format("Ping still ok towards ~p\n", [Slave]),
%% Halt node
- ?line rpc:cast(Slave, ?MODULE, otp_7461_remote, [[halt, self()]]),
+ rpc:cast(Slave, ?MODULE, otp_7461_remote, [[halt, self()]]),
- ?line {nodedown, Slave} = receive Msg3 -> Msg3
- after 20*1000 -> timeout end,
+ {nodedown, Slave} = receive
+ Msg3 -> Msg3
+ after 20*1000 -> timeout
+ end,
io:format("Node dead: ~p\n", [Slave]),
ok.
@@ -349,24 +315,21 @@ otp_7461_remote([halt, Pid]) ->
io:format("halt order from ~p to node ~p\n",[Pid,node()]),
halt().
-zdbbl_dist_buf_busy_limit(doc) ->
- ["Check +zdbbl flag"];
-zdbbl_dist_buf_busy_limit(suite) ->
- [];
+%% Check +zdbbl flag
zdbbl_dist_buf_busy_limit(Config) when is_list(Config) ->
LimKB = 1122233,
LimB = LimKB*1024,
- ?line {ok,[[PName]]} = init:get_argument(progname),
- ?line SNameS = "erlexec_test_02",
- ?line SName = list_to_atom(SNameS++"@"++
+ {ok,[[PName]]} = init:get_argument(progname),
+ SNameS = "erlexec_test_02",
+ SName = list_to_atom(SNameS++"@"++
hd(tl(string:tokens(atom_to_list(node()),"@")))),
- ?line Cmd = PName ++ " -sname "++SNameS++" -setcookie "++
+ Cmd = PName ++ " -sname "++SNameS++" -setcookie "++
atom_to_list(erlang:get_cookie()) ++
" +zdbbl " ++ integer_to_list(LimKB),
- ?line open_port({spawn,Cmd},[]),
- ?line pong = loop_ping(SName,40),
- ?line LimB = rpc:call(SName,erlang,system_info,[dist_buf_busy_limit]),
- ?line ok = cleanup_node(SNameS, 10),
+ open_port({spawn,Cmd},[]),
+ pong = loop_ping(SName,40),
+ LimB = rpc:call(SName,erlang,system_info,[dist_buf_busy_limit]),
+ ok = cleanup_node(SNameS, 10),
ok.
@@ -404,8 +367,8 @@ restore_env({erl_flags, AFlgs, Flgs, RFlgs, ZFlgs}) ->
ok.
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]).
write_file(FileName, Frmt) ->
write_file(FileName, Frmt, []).
@@ -430,8 +393,7 @@ verify_not_args(Xs, Ys) ->
true -> exit({arg_present, X});
false -> ok
end
- end,
- Xs).
+ end, Xs).
emu_args(CmdLineArgs) ->
io:format("CmdLineArgs = ~ts~n", [CmdLineArgs]),
diff --git a/erts/test/erlexec_SUITE_data/Makefile.src b/erts/test/erlexec_SUITE_data/Makefile.src
index 145aaedd64..641dff1e30 100644
--- a/erts/test/erlexec_SUITE_data/Makefile.src
+++ b/erts/test/erlexec_SUITE_data/Makefile.src
@@ -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/erts/test/erlexec_SUITE_data/erlexec_tests.c b/erts/test/erlexec_SUITE_data/erlexec_tests.c
index 569bf7bcc4..bd28d2900c 100644
--- a/erts/test/erlexec_SUITE_data/erlexec_tests.c
+++ b/erts/test/erlexec_SUITE_data/erlexec_tests.c
@@ -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/erts/test/ethread_SUITE.erl b/erts/test/ethread_SUITE.erl
index 8ad2a32278..19f738c572 100644
--- a/erts/test/ethread_SUITE.erl
+++ b/erts/test/ethread_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.
@@ -28,13 +28,7 @@
-module(ethread_SUITE).
-author('[email protected]').
-%-define(line_trace, 1).
-
--define(DEFAULT_TIMEOUT, ?t:minutes(10)).
-
--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]).
-export([create_join_thread/1,
equal_tids/1,
@@ -53,7 +47,11 @@
-include_lib("common_test/include/ct.hrl").
-tests() ->
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap, {minutes, 10}}].
+
+all() ->
[create_join_thread,
equal_tids,
mutex,
@@ -69,78 +67,50 @@ tests() ->
atomic,
dw_atomic_massage].
-suite() -> [{ct_hooks,[ts_install_cth]}].
-
-all() ->
- tests().
-
-groups() ->
- [].
-
-init_per_suite(Config) ->
- Config.
+init_per_testcase(Case, Config) ->
+ case inet:gethostname() of
+ {ok,"fenris"} when Case == max_threads ->
+ %% Cannot use os:type+os:version as not all
+ %% solaris10 machines are buggy.
+ {skip, "This machine is buggy"};
+ _Else ->
+ Config
+ end.
-end_per_suite(_Config) ->
+end_per_testcase(_Case, _Config) ->
ok.
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
-
%%
%%
%% The test-cases
%%
%%
-create_join_thread(doc) ->
- ["Tests ethr_thr_create and ethr_thr_join."];
-create_join_thread(suite) ->
- [];
+%% Tests ethr_thr_create and ethr_thr_join.
create_join_thread(Config) ->
run_case(Config, "create_join_thread", "").
-equal_tids(doc) ->
- ["Tests ethr_equal_tids."];
-equal_tids(suite) ->
- [];
+%% Tests ethr_equal_tids.
equal_tids(Config) ->
run_case(Config, "equal_tids", "").
-mutex(doc) ->
- ["Tests mutexes."];
-mutex(suite) ->
- [];
+%% Tests mutexes.
mutex(Config) ->
run_case(Config, "mutex", "").
-try_lock_mutex(doc) ->
- ["Tests try lock on mutex."];
-try_lock_mutex(suite) ->
- [];
+%% Tests try lock on mutex.
try_lock_mutex(Config) ->
run_case(Config, "try_lock_mutex", "").
-cond_wait(doc) ->
- ["Tests ethr_cond_wait with ethr_cond_signal and ethr_cond_broadcast."];
-cond_wait(suite) ->
- [];
+%% Tests ethr_cond_wait with ethr_cond_signal and ethr_cond_broadcast.
cond_wait(Config) ->
run_case(Config, "cond_wait", "").
-broadcast(doc) ->
- ["Tests that a ethr_cond_broadcast really wakes up all waiting threads"];
-broadcast(suite) ->
- [];
+%% Tests that a ethr_cond_broadcast really wakes up all waiting threads
broadcast(Config) ->
run_case(Config, "broadcast", "").
-detached_thread(doc) ->
- ["Tests detached threads."];
-detached_thread(suite) ->
- [];
+%% Tests detached threads.
detached_thread(Config) ->
case {os:type(), os:version()} of
{{unix,darwin}, {9, _, _}} ->
@@ -152,10 +122,7 @@ detached_thread(Config) ->
run_case(Config, "detached_thread", "")
end.
-max_threads(doc) ->
- ["Tests maximum number of threads."];
-max_threads(suite) ->
- [];
+%% Tests maximum number of threads.
max_threads(Config) ->
case {os:type(), os:version()} of
{{unix,darwin}, {9, _, _}} ->
@@ -167,45 +134,27 @@ max_threads(Config) ->
run_case(Config, "max_threads", "")
end.
-tsd(doc) ->
- ["Tests thread specific data."];
-tsd(suite) ->
- [];
+%% Tests thread specific data.
tsd(Config) ->
run_case(Config, "tsd", "").
-spinlock(doc) ->
- ["Tests spinlocks."];
-spinlock(suite) ->
- [];
+%% Tests spinlocks.
spinlock(Config) ->
run_case(Config, "spinlock", "").
-rwspinlock(doc) ->
- ["Tests rwspinlocks."];
-rwspinlock(suite) ->
- [];
+%% Tests rwspinlocks.
rwspinlock(Config) ->
run_case(Config, "rwspinlock", "").
-rwmutex(doc) ->
- ["Tests rwmutexes."];
-rwmutex(suite) ->
- [];
+%% Tests rwmutexes.
rwmutex(Config) ->
run_case(Config, "rwmutex", "").
-atomic(doc) ->
- ["Tests atomics."];
-atomic(suite) ->
- [];
+%% Tests atomics.
atomic(Config) ->
run_case(Config, "atomic", "").
-dw_atomic_massage(doc) ->
- ["Massage double word atomics"];
-dw_atomic_massage(suite) ->
- [];
+%% Massage double word atomics
dw_atomic_massage(Config) ->
run_case(Config, "dw_atomic_massage", "").
@@ -215,22 +164,6 @@ dw_atomic_massage(Config) ->
%%
%%
-init_per_testcase(Case, Config) ->
- case inet:gethostname() of
- {ok,"fenris"} when Case == max_threads ->
- %% Cannot use os:type+os:version as not all
- %% solaris10 machines are buggy.
- {skip, "This machine is buggy"};
- _Else ->
- Dog = ?t:timetrap(?DEFAULT_TIMEOUT),
- [{watchdog, Dog}|Config]
- end.
-
-end_per_testcase(_Case, Config) ->
- Dog = ?config(watchdog, Config),
- ?t:timetrap_cancel(Dog),
- ok.
-
-define(TESTPROG, "ethread_tests").
-define(FAILED_MARKER, $E,$T,$H,$R,$-,$T,$E,$S,$T,$-,$F,$A,$I,$L,$U,$R,$E).
-define(SKIPPED_MARKER, $E,$T,$H,$R,$-,$T,$E,$S,$T,$-,$S,$K,$I,$P).
@@ -238,68 +171,68 @@ end_per_testcase(_Case, Config) ->
-define(PID_MARKER, $E,$T,$H,$R,$-,$T,$E,$S,$T,$-,$P,$I,$D).
port_prog_killer(EProc, OSProc) when is_pid(EProc), is_list(OSProc) ->
- ?line process_flag(trap_exit, true),
- ?line Ref = erlang:monitor(process, EProc),
- ?line receive
- {'DOWN', Ref, _, _, Reason} when is_tuple(Reason),
- element(1, Reason)
- == timetrap_timeout ->
- ?line Cmd = "kill -9 " ++ OSProc,
- ?line ?t:format("Test case timed out. "
- "Trying to kill port program.~n"
- " Executing: ~p~n", [Cmd]),
- ?line case os:cmd(Cmd) of
- [] ->
- ok;
- OsCmdRes ->
- ?line ?t:format(" ~s", [OsCmdRes])
- end;
- {'DOWN', Ref, _, _, _} ->
- %% OSProc is assumed to have terminated by itself
- ?line ok
- end.
+ process_flag(trap_exit, true),
+ Ref = erlang:monitor(process, EProc),
+ receive
+ {'DOWN', Ref, _, _, Reason} when is_tuple(Reason),
+ element(1, Reason)
+ == timetrap_timeout ->
+ Cmd = "kill -9 " ++ OSProc,
+ io:format("Test case timed out. "
+ "Trying to kill port program.~n"
+ " Executing: ~p~n", [Cmd]),
+ case os:cmd(Cmd) of
+ [] ->
+ ok;
+ OsCmdRes ->
+ io:format(" ~s", [OsCmdRes])
+ end;
+ %% OSProc is assumed to have terminated by itself
+ {'DOWN', Ref, _, _, _} ->
+ ok
+ end.
get_line(_Port, eol, Data) ->
- ?line Data;
+ Data;
get_line(Port, noeol, Data) ->
- ?line receive
+ receive
{Port, {data, {Flag, NextData}}} ->
- ?line get_line(Port, Flag, Data ++ NextData);
+ get_line(Port, Flag, Data ++ NextData);
{Port, eof} ->
- ?line ?t:fail(port_prog_unexpectedly_closed)
+ ct:fail(port_prog_unexpectedly_closed)
end.
read_case_data(Port, TestCase) ->
- ?line receive
- {Port, {data, {eol, [?SUCCESS_MARKER]}}} ->
- ?line ok;
- {Port, {data, {Flag, [?SUCCESS_MARKER | CommentStart]}}} ->
- ?line {comment, get_line(Port, Flag, CommentStart)};
- {Port, {data, {Flag, [?SKIPPED_MARKER | CommentStart]}}} ->
- ?line {skipped, get_line(Port, Flag, CommentStart)};
- {Port, {data, {Flag, [?FAILED_MARKER | ReasonStart]}}} ->
- ?line ?t:fail(get_line(Port, Flag, ReasonStart));
- {Port, {data, {eol, [?PID_MARKER | PidStr]}}} ->
- ?line ?t:format("Port program pid: ~s~n", [PidStr]),
- ?line CaseProc = self(),
- ?line _ = list_to_integer(PidStr), % Sanity check
- spawn_opt(fun () ->
- port_prog_killer(CaseProc, PidStr)
- end,
- [{priority, max}, link]),
- read_case_data(Port, TestCase);
- {Port, {data, {Flag, LineStart}}} ->
- ?line ?t:format("~s~n", [get_line(Port, Flag, LineStart)]),
- read_case_data(Port, TestCase);
- {Port, eof} ->
- ?line ?t:fail(port_prog_unexpectedly_closed)
- end.
+ receive
+ {Port, {data, {eol, [?SUCCESS_MARKER]}}} ->
+ ok;
+ {Port, {data, {Flag, [?SUCCESS_MARKER | CommentStart]}}} ->
+ {comment, get_line(Port, Flag, CommentStart)};
+ {Port, {data, {Flag, [?SKIPPED_MARKER | CommentStart]}}} ->
+ {skipped, get_line(Port, Flag, CommentStart)};
+ {Port, {data, {Flag, [?FAILED_MARKER | ReasonStart]}}} ->
+ ct:fail(get_line(Port, Flag, ReasonStart));
+ {Port, {data, {eol, [?PID_MARKER | PidStr]}}} ->
+ io:format("Port program pid: ~s~n", [PidStr]),
+ CaseProc = self(),
+ _ = list_to_integer(PidStr), % Sanity check
+ spawn_opt(fun () ->
+ port_prog_killer(CaseProc, PidStr)
+ end,
+ [{priority, max}, link]),
+ read_case_data(Port, TestCase);
+ {Port, {data, {Flag, LineStart}}} ->
+ io:format("~s~n", [get_line(Port, Flag, LineStart)]),
+ read_case_data(Port, TestCase);
+ {Port, eof} ->
+ ct:fail(port_prog_unexpectedly_closed)
+ end.
run_case(Config, Test, TestArgs) ->
run_case(Config, Test, TestArgs, fun (_Port) -> ok end).
run_case(Config, Test, TestArgs, Fun) ->
- TestProg = filename:join([?config(data_dir, Config), ?TESTPROG]),
+ TestProg = filename:join([proplists:get_value(data_dir, Config), ?TESTPROG]),
Cmd = TestProg ++ " " ++ Test ++ " " ++ TestArgs,
case catch open_port({spawn, Cmd}, [stream,
use_stdio,
@@ -307,17 +240,13 @@ run_case(Config, Test, TestArgs, Fun) ->
eof,
{line, 1024}]) of
Port when is_port(Port) ->
- ?line Fun(Port),
- ?line CaseResult = read_case_data(Port, Test),
- ?line receive
- {Port, eof} ->
- ?line ok
- end,
- ?line CaseResult;
+ Fun(Port),
+ CaseResult = read_case_data(Port, Test),
+ receive
+ {Port, eof} ->
+ ok
+ end,
+ CaseResult;
Error ->
- ?line ?t:fail({open_port_failed, Error})
+ ct:fail({open_port_failed, Error})
end.
-
-
-
-
diff --git a/erts/test/ethread_SUITE_data/Makefile.src b/erts/test/ethread_SUITE_data/Makefile.src
index e8b9c79576..cf675b92a3 100644
--- a/erts/test/ethread_SUITE_data/Makefile.src
+++ b/erts/test/ethread_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/erts/test/ethread_SUITE_data/ethread_tests.c b/erts/test/ethread_SUITE_data/ethread_tests.c
index b51771c736..fe7f92b012 100644
--- a/erts/test/ethread_SUITE_data/ethread_tests.c
+++ b/erts/test/ethread_SUITE_data/ethread_tests.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/erts/test/ignore_cores.erl b/erts/test/ignore_cores.erl
index e40b91392c..25dce346b9 100644
--- a/erts/test/ignore_cores.erl
+++ b/erts/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.
@@ -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/erts/test/install_SUITE.erl b/erts/test/install_SUITE.erl
index d6df1aab6b..2c7e8972f6 100644
--- a/erts/test/install_SUITE.erl
+++ b/erts/test/install_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.
@@ -28,11 +28,9 @@
%%%-------------------------------------------------------------------
-module(install_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,
- init_per_testcase/2, end_per_testcase/2]).
+-export([all/0, suite/0,
+ init_per_suite/1, end_per_suite/1,
+ init_per_testcase/2, end_per_testcase/2]).
-export([bin_default/1,
bin_default_dirty/1,
@@ -49,7 +47,6 @@
bin_dirname_fail/1,
bin_no_use_dirname_fail/1]).
--define(DEFAULT_TIMEOUT, ?t:minutes(1)).
-define(JOIN(A,B,C), filename:join(A, B, C)).
-include_lib("common_test/include/ct.hrl").
@@ -77,49 +74,42 @@ dont_need_symlink_cases() ->
bin_unreasonable_path, 'bin white space',
bin_no_srcfile].
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap, {minutes, 1}}].
all() ->
dont_need_symlink_cases() ++ need_symlink_cases().
-groups() ->
- [].
-
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
-
%%
%% The test cases
%%
bin_default(Config) when is_list(Config) ->
- ?line E = "/usr/local",
- ?line Bs = "/usr/local/bin",
- ?line Be = Bs,
- ?line EBs = "/usr/local/lib/erlang/bin",
- ?line EBe = EBs,
- ?line RP = "../lib/erlang/bin",
+ E = "/usr/local",
+ Bs = "/usr/local/bin",
+ Be = Bs,
+ EBs = "/usr/local/lib/erlang/bin",
+ EBe = EBs,
+ RP = "../lib/erlang/bin",
ChkRes = fun (Res, #inst{test_prefix = TP,
destdir = D,
extra_prefix = EP,
bindir_symlinks = BSL,
symlinks = SL}) ->
- ?line B = join([TP, D, EP, Be]),
+ B = join([TP, D, EP, Be]),
Expct = case {SL, BSL} of
{false, _} when BSL == "relative";
BSL == "absolute" ->
- ?line {error, no_ln_s};
+ {error, no_ln_s};
{false, _} ->
- ?line {ok,{absolute,
+ {ok,{absolute,
B,join([TP,D,EP,EBe])}};
{true, "absolute"} ->
- ?line {ok,{absolute,B,join([TP,EP,EBe])}};
+ {ok,{absolute,B,join([TP,EP,EBe])}};
{true, _} ->
- ?line {ok,{relative,B,RP}}
+ {ok,{relative,B,RP}}
end,
expect(Expct, Res)
end,
@@ -128,30 +118,30 @@ bin_default(Config) when is_list(Config) ->
erlang_bindir = EBs}, ChkRes).
bin_default_dirty(Config) when is_list(Config) ->
- ?line E = "/usr/./local/lib/..",
- ?line Bs = "/usr/local//lib/../lib/erlang/../../bin",
- ?line Be = "/usr/local/lib/../lib/erlang/../../bin",
- ?line EBs = "/usr/local/lib/../lib/erlang/../erlang/bin/x/y/../..//",
- ?line EBe = "/usr/local/lib/../lib/erlang/../erlang/bin/x/y/../..",
- ?line RP = "../lib/erlang/bin",
+ E = "/usr/./local/lib/..",
+ Bs = "/usr/local//lib/../lib/erlang/../../bin",
+ Be = "/usr/local/lib/../lib/erlang/../../bin",
+ EBs = "/usr/local/lib/../lib/erlang/../erlang/bin/x/y/../..//",
+ EBe = "/usr/local/lib/../lib/erlang/../erlang/bin/x/y/../..",
+ RP = "../lib/erlang/bin",
ChkRes = fun (Res, #inst{test_prefix = TP,
destdir = D,
extra_prefix = EP,
bindir_symlinks = BSL,
symlinks = SL}) ->
- ?line B = join([TP, D, EP, Be]),
+ B = join([TP, D, EP, Be]),
Expct = case {SL, BSL} of
{false, _} when BSL == "relative";
BSL == "absolute" ->
- ?line {error, no_ln_s};
+ {error, no_ln_s};
{false, _} ->
- ?line {ok,{absolute,
+ {ok,{absolute,
B,join([TP,D,EP,EBe])}};
{true, "absolute"} ->
- ?line {ok,{absolute,
+ {ok,{absolute,
B,join([TP,EP,EBe])}};
{true, _} ->
- ?line {ok,{relative,B,RP}}
+ {ok,{relative,B,RP}}
end,
expect(Expct, Res)
end,
@@ -161,29 +151,29 @@ bin_default_dirty(Config) when is_list(Config) ->
bin_outside_eprfx(Config) when is_list(Config) ->
- ?line E = "/usr/local",
- ?line Bs = "/usr/bin",
- ?line Be = Bs,
- ?line EBs = "/usr/local/lib/erlang/bin",
- ?line EBe = EBs,
- ?line RP = "../local/lib/erlang/bin",
+ E = "/usr/local",
+ Bs = "/usr/bin",
+ Be = Bs,
+ EBs = "/usr/local/lib/erlang/bin",
+ EBe = EBs,
+ RP = "../local/lib/erlang/bin",
ChkRes = fun (Res, #inst{test_prefix = TP,
destdir = D,
extra_prefix = EP,
bindir_symlinks = BSL,
symlinks = SL}) ->
- ?line B = join([TP, D, EP, Be]),
+ B = join([TP, D, EP, Be]),
Expct = case {SL, BSL} of
{false, _} when BSL == "relative";
BSL == "absolute" ->
- ?line {error, no_ln_s};
+ {error, no_ln_s};
{false, _} ->
- ?line {ok,{absolute,
+ {ok,{absolute,
B,join([TP,D,EP,EBe])}};
{true, "relative"} ->
- ?line {ok,{relative,B,RP}};
+ {ok,{relative,B,RP}};
{true, _} ->
- ?line {ok,{absolute,B,join([TP,EP,EBe])}}
+ {ok,{absolute,B,join([TP,EP,EBe])}}
end,
expect(Expct, Res)
end,
@@ -193,29 +183,29 @@ bin_outside_eprfx(Config) when is_list(Config) ->
bin_outside_eprfx_dirty(Config) when is_list(Config) ->
- ?line E = "/usr/local/lib/..",
- ?line Bs = "/usr/local/lib/../../bin",
- ?line Be = Bs,
- ?line EBs = "/usr/local/lib/erlang/bin",
- ?line EBe = EBs,
- ?line RP = "../local/lib/erlang/bin",
+ E = "/usr/local/lib/..",
+ Bs = "/usr/local/lib/../../bin",
+ Be = Bs,
+ EBs = "/usr/local/lib/erlang/bin",
+ EBe = EBs,
+ RP = "../local/lib/erlang/bin",
ChkRes = fun (Res, #inst{test_prefix = TP,
destdir = D,
extra_prefix = EP,
bindir_symlinks = BSL,
symlinks = SL}) ->
- ?line B = join([TP, D, EP, Be]),
+ B = join([TP, D, EP, Be]),
Expct = case {SL, BSL} of
{false, _} when BSL == "relative";
BSL == "absolute" ->
- ?line {error, no_ln_s};
+ {error, no_ln_s};
{false, _} ->
- ?line {ok,{absolute,
+ {ok,{absolute,
B,join([TP,D,EP,EBe])}};
{true, "relative"} ->
- ?line {ok,{relative,B,RP}};
+ {ok,{relative,B,RP}};
{true, _} ->
- ?line {ok,{absolute,B,join([TP,EP,EBe])}}
+ {ok,{absolute,B,join([TP,EP,EBe])}}
end,
expect(Expct, Res)
end,
@@ -224,33 +214,33 @@ bin_outside_eprfx_dirty(Config) when is_list(Config) ->
erlang_bindir = EBs}, ChkRes).
bin_unreasonable_path(Config) when is_list(Config) ->
- ?line E = "/usr/local/../../..",
- ?line Bs = "/usr/local/../../../bin",
- ?line Be = Bs,
- ?line EBs = "/usr/local/../../../bin_unreasonable_path/usr/local/lib/erlang/bin",
- ?line EBe = EBs,
- ?line RP = "../bin_unreasonable_path/usr/local/lib/erlang/bin",
+ E = "/usr/local/../../..",
+ Bs = "/usr/local/../../../bin",
+ Be = Bs,
+ EBs = "/usr/local/../../../bin_unreasonable_path/usr/local/lib/erlang/bin",
+ EBe = EBs,
+ RP = "../bin_unreasonable_path/usr/local/lib/erlang/bin",
ChkRes = fun (Res, #inst{test_prefix = TP,
destdir = D,
extra_prefix = EP,
bindir_symlinks = BSL,
symlinks = SL}) ->
- ?line B = join([TP, D, EP, Be]),
+ B = join([TP, D, EP, Be]),
Expct = case {TP, SL, BSL} of
{_, false, _} when BSL == "relative";
BSL == "absolute" ->
- ?line {error, no_ln_s};
+ {error, no_ln_s};
{_, false, _} ->
- ?line {ok,{absolute,
+ {ok,{absolute,
B,join([TP,D,EP,EBe])}};
{"", true, "relative"} ->
{error, unreasonable_path};
{"", true, _} ->
- ?line {ok,{absolute,B,join([TP,EP,EBe])}};
+ {ok,{absolute,B,join([TP,EP,EBe])}};
{_, true, "absolute"} ->
- ?line {ok,{absolute,B,join([TP,EP,EBe])}};
+ {ok,{absolute,B,join([TP,EP,EBe])}};
_ ->
- ?line {ok,{relative,B,RP}}
+ {ok,{relative,B,RP}}
end,
expect(Expct, Res)
end,
@@ -259,7 +249,7 @@ bin_unreasonable_path(Config) when is_list(Config) ->
erlang_bindir = EBs}, ChkRes).
bin_unreachable_absolute(Config) when is_list(Config) ->
- TDir = ?config(test_dir, Config),
+ TDir = proplists:get_value(test_dir, Config),
make_dirs(TDir, "/opt/local/lib/erlang/usr/bin"),
make_dirs(TDir, "/opt/local/lib/erlang/bin"),
Erl = join([TDir, "/opt/local/lib/erlang/bin/erl"]),
@@ -270,28 +260,28 @@ bin_unreachable_absolute(Config) when is_list(Config) ->
ok = file:write_file(Erlc, "erlc"),
ok = file:make_symlink("../../../opt/local/lib/erlang/usr",
join([TDir, "/usr/local/lib/erlang"])),
- ?line E = "/usr/local",
- ?line Bs = "/usr/local/bin",
- ?line Be = Bs,
- ?line EBs = "/usr/local/lib/erlang/../bin",
- ?line EBe = EBs,
+ E = "/usr/local",
+ Bs = "/usr/local/bin",
+ Be = Bs,
+ EBs = "/usr/local/lib/erlang/../bin",
+ EBe = EBs,
ChkRes = fun (Res, #inst{test_prefix = TP,
destdir = D,
extra_prefix = EP,
bindir_symlinks = BSL,
symlinks = SL}) ->
- ?line B = join([TP, D, EP, Be]),
+ B = join([TP, D, EP, Be]),
Expct = case {SL, BSL} of
{false, _} when BSL == "relative";
BSL == "absolute" ->
- ?line {error, no_ln_s};
+ {error, no_ln_s};
{false, _} ->
- ?line {ok,{absolute,
+ {ok,{absolute,
B,join([TP,D,EP,EBe])}};
{true, "relative"} ->
{error, unreachable_absolute};
{true, _} ->
- ?line {ok,{absolute,B,join([TP,EP,EBe])}}
+ {ok,{absolute,B,join([TP,EP,EBe])}}
end,
expect(Expct, Res)
end,
@@ -300,7 +290,7 @@ bin_unreachable_absolute(Config) when is_list(Config) ->
erlang_bindir = EBs}, ChkRes).
bin_unreachable_relative(Config) when is_list(Config) ->
- TDir = ?config(test_dir, Config),
+ TDir = proplists:get_value(test_dir, Config),
make_dirs(TDir, "/opt/local/lib/erlang/bin"),
make_dirs(TDir, "/opt/local/bin"),
make_dirs(TDir, "/usr/local/lib/erlang/bin"),
@@ -311,28 +301,28 @@ bin_unreachable_relative(Config) when is_list(Config) ->
ok = file:make_symlink("../../opt/local/bin",
join([TDir, "/usr/local/bin"])),
- ?line E = "/usr/local",
- ?line Bs = "/usr/local/bin",
- ?line Be = Bs,
- ?line EBs = "/usr/local/lib/erlang/bin",
- ?line EBe = EBs,
+ E = "/usr/local",
+ Bs = "/usr/local/bin",
+ Be = Bs,
+ EBs = "/usr/local/lib/erlang/bin",
+ EBe = EBs,
ChkRes = fun (Res, #inst{test_prefix = TP,
destdir = D,
extra_prefix = EP,
bindir_symlinks = BSL,
symlinks = SL}) ->
- ?line B = join([TP, D, EP, Be]),
+ B = join([TP, D, EP, Be]),
Expct = case {SL, BSL} of
{false, _} when BSL == "relative";
BSL == "absolute" ->
- ?line {error, no_ln_s};
+ {error, no_ln_s};
{false, _} ->
- ?line {ok,{absolute,
+ {ok,{absolute,
B,join([TP,D,EP,EBe])}};
{true, "relative"} ->
{error, unreachable_relative};
{true, _} ->
- ?line {ok,{absolute,B,join([TP,EP,EBe])}}
+ {ok,{absolute,B,join([TP,EP,EBe])}}
end,
expect(Expct, Res)
end,
@@ -341,7 +331,7 @@ bin_unreachable_relative(Config) when is_list(Config) ->
erlang_bindir = EBs}, ChkRes).
bin_ok_symlink(Config) when is_list(Config) ->
- TDir = ?config(test_dir, Config),
+ TDir = proplists:get_value(test_dir, Config),
make_dirs(TDir, "/usr/local/bin"),
make_dirs(TDir, "/opt/local/lib/erlang/bin"),
Erl = join([TDir, "/opt/local/lib/erlang/bin/erl"]),
@@ -350,29 +340,29 @@ bin_ok_symlink(Config) when is_list(Config) ->
ok = file:write_file(Erlc, "erlc"),
ok = file:make_symlink("../../opt/local/lib",
join([TDir, "/usr/local/lib"])),
- ?line E = "/usr/local",
- ?line Bs = "/usr/local/bin",
- ?line Be = Bs,
- ?line EBs = "/usr/local/lib/erlang/bin",
- ?line EBe = EBs,
- ?line RP = "../lib/erlang/bin",
+ E = "/usr/local",
+ Bs = "/usr/local/bin",
+ Be = Bs,
+ EBs = "/usr/local/lib/erlang/bin",
+ EBe = EBs,
+ RP = "../lib/erlang/bin",
ChkRes = fun (Res, #inst{test_prefix = TP,
destdir = D,
extra_prefix = EP,
bindir_symlinks = BSL,
symlinks = SL}) ->
- ?line B = join([TP, D, EP, Be]),
+ B = join([TP, D, EP, Be]),
Expct = case {SL, BSL} of
{false, _} when BSL == "relative";
BSL == "absolute" ->
- ?line {error, no_ln_s};
+ {error, no_ln_s};
{false, _} ->
- ?line {ok,{absolute,
+ {ok,{absolute,
B,join([TP,D,EP,EBe])}};
{true, "absolute"} ->
- ?line {ok,{absolute,B,join([TP,EP,EBe])}};
+ {ok,{absolute,B,join([TP,EP,EBe])}};
{true, _} ->
- ?line {ok,{relative,B,RP}}
+ {ok,{relative,B,RP}}
end,
expect(Expct, Res)
end,
@@ -381,7 +371,7 @@ bin_ok_symlink(Config) when is_list(Config) ->
erlang_bindir = EBs}, ChkRes).
bin_same_dir(Config) when is_list(Config) ->
- TDir = ?config(test_dir, Config),
+ TDir = proplists:get_value(test_dir, Config),
make_dirs(TDir, "/usr/local/bin"),
make_dirs(TDir, "/usr/local/lib"),
ok = file:make_symlink("..", join([TDir, "/usr/local/lib/erlang"])),
@@ -417,29 +407,29 @@ bin_not_abs(Config) when is_list(Config) ->
'bin white space'(Config) when is_list(Config) ->
- ?line E = "/u s r/local",
- ?line Bs = "/u s r/local/b i n",
- ?line Be = Bs,
- ?line EBs = "/u s r/local/lib/erl ang/bin",
- ?line EBe = EBs,
- ?line RP = "../lib/erl ang/bin",
+ E = "/u s r/local",
+ Bs = "/u s r/local/b i n",
+ Be = Bs,
+ EBs = "/u s r/local/lib/erl ang/bin",
+ EBe = EBs,
+ RP = "../lib/erl ang/bin",
ChkRes = fun (Res, #inst{test_prefix = TP,
destdir = D,
extra_prefix = EP,
bindir_symlinks = BSL,
symlinks = SL}) ->
- ?line B = join([TP, D, EP, Be]),
+ B = join([TP, D, EP, Be]),
Expct = case {SL, BSL} of
{false, _} when BSL == "relative";
BSL == "absolute" ->
- ?line {error, no_ln_s};
+ {error, no_ln_s};
{false, _} ->
- ?line {ok,{absolute,
+ {ok,{absolute,
B,join([TP,D,EP,EBe])}};
{true, "absolute"} ->
- ?line {ok,{absolute,B,join([TP,EP,EBe])}};
+ {ok,{absolute,B,join([TP,EP,EBe])}};
{true, _} ->
- ?line {ok,{relative,B,RP}}
+ {ok,{relative,B,RP}}
end,
expect(Expct, Res)
end,
@@ -448,29 +438,29 @@ bin_not_abs(Config) when is_list(Config) ->
erlang_bindir = EBs}, ChkRes).
bin_dirname_fail(Config) when is_list(Config) ->
- ?line E = "/opt",
- ?line Bs = "/opt/lib/../bin",
- ?line Be = Bs,
- ?line EBs = "/opt/lib/erlang/otp/bin",
- ?line EBe = EBs,
- ?line CMDPRFX = "PATH=\""++?config(data_dir,Config)++":"++os:getenv("PATH")++"\"",
+ E = "/opt",
+ Bs = "/opt/lib/../bin",
+ Be = Bs,
+ EBs = "/opt/lib/erlang/otp/bin",
+ EBe = EBs,
+ CMDPRFX = "PATH=\""++proplists:get_value(data_dir,Config)++":"++os:getenv("PATH")++"\"",
ChkRes = fun (Res, #inst{test_prefix = TP,
destdir = D,
extra_prefix = EP,
bindir_symlinks = BSL,
symlinks = SL}) ->
- ?line B = join([TP, D, EP, Be]),
+ B = join([TP, D, EP, Be]),
Expct = case {SL, BSL} of
{false, _} when BSL == "relative";
BSL == "absolute" ->
- ?line {error, no_ln_s};
+ {error, no_ln_s};
{false, _} ->
- ?line {ok,{absolute,
+ {ok,{absolute,
B,join([TP,D,EP,EBe])}};
{true, "relative"} ->
- ?line {error, dirname_failed};
+ {error, dirname_failed};
{true, _} ->
- ?line {ok,{absolute,B,join([TP,EP,EBe])}}
+ {ok,{absolute,B,join([TP,EP,EBe])}}
end,
expect(Expct, Res)
end,
@@ -480,30 +470,30 @@ bin_dirname_fail(Config) when is_list(Config) ->
erlang_bindir = EBs}, ChkRes).
bin_no_use_dirname_fail(Config) when is_list(Config) ->
- ?line E = "/opt",
- ?line Bs = "/opt/bin",
- ?line Be = Bs,
- ?line EBs = "/opt/lib/erlang/otp/bin",
- ?line EBe = EBs,
- ?line RP = "../lib/erlang/otp/bin",
- ?line CMDPRFX = "PATH=\""++?config(data_dir,Config)++":"++os:getenv("PATH")++"\"",
+ E = "/opt",
+ Bs = "/opt/bin",
+ Be = Bs,
+ EBs = "/opt/lib/erlang/otp/bin",
+ EBe = EBs,
+ RP = "../lib/erlang/otp/bin",
+ CMDPRFX = "PATH=\""++proplists:get_value(data_dir,Config)++":"++os:getenv("PATH")++"\"",
ChkRes = fun (Res, #inst{test_prefix = TP,
destdir = D,
extra_prefix = EP,
bindir_symlinks = BSL,
symlinks = SL}) ->
- ?line B = join([TP, D, EP, Be]),
+ B = join([TP, D, EP, Be]),
Expct = case {SL, BSL} of
{false, _} when BSL == "relative";
BSL == "absolute" ->
- ?line {error, no_ln_s};
+ {error, no_ln_s};
{false, _} ->
- ?line {ok,{absolute,
+ {ok,{absolute,
B,join([TP,D,EP,EBe])}};
{true, "absolute"} ->
- ?line {ok,{absolute,B,join([TP,EP,EBe])}};
+ {ok,{absolute,B,join([TP,EP,EBe])}};
{true, _} ->
- ?line {ok,{relative,B,RP}}
+ {ok,{relative,B,RP}}
end,
expect(Expct, Res)
end,
@@ -513,7 +503,7 @@ bin_no_use_dirname_fail(Config) when is_list(Config) ->
erlang_bindir = EBs}, ChkRes).
bin_no_srcfile(Config) when is_list(Config) ->
- TDir = ?config(test_dir, Config),
+ TDir = proplists:get_value(test_dir, Config),
make_dirs(TDir, "/opt/local/bin"),
make_dirs(TDir, "/opt/local/lib/erlang/bin"),
Erl = join([TDir, "/opt/local/lib/erlang/bin/erl"]),
@@ -525,13 +515,13 @@ bin_no_srcfile(Config) when is_list(Config) ->
Expct = case {SL, BSL} of
{false, _} when BSL == "relative";
BSL == "absolute" ->
- ?line {error, no_ln_s};
+ {error, no_ln_s};
{false,_} ->
- ?line {error,{no_srcfile, Erlc}};
+ {error,{no_srcfile, Erlc}};
{true, "absolute"} ->
- ?line {error,{no_srcfile, Erlc}};
+ {error,{no_srcfile, Erlc}};
{true, _} ->
- ?line {error,{no_srcfile, RP_Erlc}}
+ {error,{no_srcfile, RP_Erlc}}
end,
expect(Expct, Res)
end,
@@ -549,34 +539,34 @@ bin_no_srcfile(Config) when is_list(Config) ->
%%
expect(X, X) ->
- ?t:format("result: ~p~n", [X]),
- ?t:format("-----------------------------------------------~n", []),
+ io:format("result: ~p~n", [X]),
+ io:format("-----------------------------------------------~n", []),
ok;
expect(X, Y) ->
- ?t:format("expected: ~p~n", [X]),
- ?t:format("got : ~p~n", [Y]),
- ?t:format("-----------------------------------------------~n", []),
- ?t:fail({X,Y}).
+ io:format("expected: ~p~n", [X]),
+ io:format("got : ~p~n", [Y]),
+ io:format("-----------------------------------------------~n", []),
+ ct:fail({X,Y}).
init_per_suite(Config) ->
- PD = ?config(priv_dir, Config),
- SymLinks = case ?t:os_type() of
- {win32, _} -> false;
- _ ->
- case file:make_symlink("nothing",
- filename:join(PD,
- "symlink_test")) of
- ok -> true;
- _ -> false
- end
- end,
+ PD = proplists:get_value(priv_dir, Config),
+ SymLinks = case os:type() of
+ {win32, _} -> false;
+ _ ->
+ case file:make_symlink("nothing",
+ filename:join(PD, "symlink_test")) of
+ ok -> true;
+ _ -> false
+ end
+ end,
[{symlinks, SymLinks} | Config].
end_per_suite(_Config) ->
ok.
init_per_testcase(Case, Config) ->
- init_per_testcase_aux(?config(symlinks,Config),?t:os_type(),Case,Config).
+ init_per_testcase_aux(proplists:get_value(symlinks,Config),
+ os:type(),Case,Config).
init_per_testcase_aux(_, {win32, _}, _Case, _Config) ->
{skip, "Not on windows"};
@@ -586,18 +576,13 @@ init_per_testcase_aux(false, OsType, Case, Config) ->
true -> {skip, "Cannot create symbolic links"}
end;
init_per_testcase_aux(true, _OsType, Case, Config) ->
- Dog = ?t:timetrap(?DEFAULT_TIMEOUT),
- [{watchdog, Dog},
- {testcase, Case},
- {test_dir, make_dirs(?config(priv_dir, Config), atom_to_list(Case))}
+ [{testcase, Case},
+ {test_dir, make_dirs(proplists:get_value(priv_dir, Config), atom_to_list(Case))}
| Config].
-end_per_testcase(_Case, Config) ->
- Dog = ?config(watchdog, Config),
- ?t:timetrap_cancel(Dog),
+end_per_testcase(_Case, _Config) ->
ok.
-
make_dirs(Root, Suffix) ->
do_make_dirs(Root, string:tokens(Suffix, [$/])).
@@ -616,9 +601,9 @@ install_bin(Config, #inst{mkdirs = MkDirs,
exec_prefix = EXEC_PREFIX,
bindir = BINDIR,
erlang_bindir = ERLANG_BINDIR} = Inst, ChkRes) ->
- PDir = ?config(priv_dir, Config),
- TDir = ?config(test_dir, Config),
- TD = atom_to_list(?config(testcase, Config)),
+ PDir = proplists:get_value(priv_dir, Config),
+ TDir = proplists:get_value(test_dir, Config),
+ TD = atom_to_list(proplists:get_value(testcase, Config)),
case MkDirs of
false -> ok;
true ->
@@ -641,7 +626,7 @@ install_bin(Config, #inst{mkdirs = MkDirs,
bindir = join([TDir, BINDIR]),
erlang_bindir = join([TDir, ERLANG_BINDIR])},
ChkRes),
- case ?config(symlinks, Config) of
+ case proplists:get_value(symlinks, Config) of
true -> ok;
false -> {comment, "No symlink tests run, since symlinks not working"}
end.
@@ -664,7 +649,7 @@ install_bin2(Config, Inst, ChkRes) ->
install_bin3(Config, Inst#inst{symlinks = false,
ln_s = "cp -p",
bindir_symlinks = "absolute"}, ChkRes),
- case ?config(symlinks, Config) of
+ case proplists:get_value(symlinks, Config) of
true ->
install_bin3(Config, Inst#inst{symlinks = true,
ln_s = "ln -s"}, ChkRes),
@@ -690,9 +675,9 @@ install_bin3(Config,
erlang_bindir = ERLANG_BINDIR,
bindir_symlinks = BINDIR_SYMLINKS} = Inst,
ChkRes) ->
- Test = ?config(testcase, Config),
- DDir = ?config(data_dir, Config),
- TDir = ?config(test_dir, Config),
+ Test = proplists:get_value(testcase, Config),
+ DDir = proplists:get_value(data_dir, Config),
+ TDir = proplists:get_value(test_dir, Config),
InstallBin = filename:join(DDir, "install_bin"),
ResFile = filename:join(TDir, atom_to_list(Test) ++ "-result.txt"),
Cmd = CMD_PRFX ++ " "
@@ -705,7 +690,7 @@ install_bin3(Config,
++ "\" --exec-prefix \"" ++ EXEC_PREFIX
++ "\" --test-file \"" ++ ResFile ++ "\" erl erlc",
- ?t:format("CMD_PRFX = \"~s\"~n"
+ io:format("CMD_PRFX = \"~s\"~n"
"LN_S = \"~s\"~n"
"BINDIR_SYMLINKS = \"~s\"~n"
"exec_prefix = \"~s\"~n"
@@ -716,9 +701,9 @@ install_bin3(Config,
[CMD_PRFX, LN_S, BINDIR_SYMLINKS, EXEC_PREFIX, BINDIR,
ERLANG_BINDIR, EXTRA_PREFIX, DESTDIR]),
- ?t:format("$ ~s~n", [Cmd]),
+ io:format("$ ~s~n", [Cmd]),
CmdOutput = os:cmd(Cmd),
- ?t:format("~s~n", [CmdOutput]),
+ io:format("~s~n", [CmdOutput]),
ChkRes(case file:consult(ResFile) of
{ok, [Res]} -> Res;
Err -> exit({result, Err})
@@ -731,4 +716,3 @@ join([""|Ds]) ->
join(Ds);
join([D|Ds]) ->
"/" ++ string:strip(D, both, $/) ++ join(Ds).
-
diff --git a/erts/test/nt_SUITE.erl b/erts/test/nt_SUITE.erl
index 1ddaaaaeb5..624e5484ba 100644
--- a/erts/test/nt_SUITE.erl
+++ b/erts/test/nt_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,55 +23,36 @@
-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,
- init_per_group/2,end_per_group/2,init_per_testcase/2,
- end_per_testcase/2,nt/1,handle_eventlog/2,
- middleman/1,service_basic/1, service_env/1, user_env/1, synced/1,
- service_prio/1,
- logout/1, debug/1, restart/1, restart_always/1,stopaction/1,
- shutdown_io/0,do_shutdown_io/0]).
--define(TEST_TIMEOUT, ?t:seconds(180)).
+-export([all/0, suite/0,
+ init_per_testcase/2, end_per_testcase/2,
+ nt/1,handle_eventlog/2,
+ middleman/1,service_basic/1, service_env/1, user_env/1, synced/1,
+ service_prio/1,
+ logout/1, debug/1, restart/1, restart_always/1,stopaction/1,
+ shutdown_io/0,do_shutdown_io/0]).
-define(TEST_SERVICES, [1,2,3,4,5,6,7,8,9,10,11]).
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap, {minutes, 3}}].
-all() ->
- case os:type() of
- {win32, nt} ->
+all() ->
+ case {os:type(), os:version()} of
+ {{win32, nt}, Vsn} when Vsn =< {6,1,999999} ->
[nt, service_basic, service_env, user_env, synced,
service_prio, logout, debug, restart, restart_always,
stopaction];
_ -> [nt]
end.
-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(_Func, Config) ->
- Dog = test_server:timetrap(?TEST_TIMEOUT),
- [{watchdog, Dog} | Config].
+ Config.
-end_per_testcase(_Func, Config) ->
+end_per_testcase(_Func, _Config) ->
lists:foreach(fun(X) ->
- catch remove_service("test_service_" ++
- integer_to_list(X)) end,
- ?TEST_SERVICES),
- Dog = ?config(watchdog, Config),
- catch test_server:timetrap_cancel(Dog),
+ catch remove_service("test_service_" ++ integer_to_list(X))
+ end, ?TEST_SERVICES),
ok.
erlsrv() ->
@@ -80,19 +61,18 @@ erlsrv() ->
recv_prog_output(Port) ->
receive
- {Port, {data, {eol,Data}}} ->
- %%io:format("Got data: ~s~n", [Data]),
- [ Data | recv_prog_output(Port)];
- _X ->
- %%io:format("Got data: ~p~n", [_X]),
- Port ! {self(), close},
- receive
- _ ->
- []
- end
+ {Port, {data, {eol,Data}}} ->
+ %%io:format("Got data: ~s~n", [Data]),
+ [ Data | recv_prog_output(Port)];
+ _X ->
+ %%io:format("Got data: ~p~n", [_X]),
+ Port ! {self(), close},
+ receive
+ _ ->
+ []
+ end
end.
-
%%% X == parameters to erlsrv
%%% returns command output without stderr
do_command(X) ->
@@ -100,11 +80,11 @@ do_command(X) ->
Port = open_port({spawn, erlsrv() ++ " " ++ X}, [stream, {line, 100}, eof, in]),
Res = recv_prog_output(Port),
case Res of
- [] ->
- failed;
- _Y ->
- %%io:format("~p~n",[_Y]),
- ok
+ [] ->
+ failed;
+ _Y ->
+ %%io:format("~p~n",[_Y]),
+ ok
end.
@@ -123,13 +103,13 @@ do_wait_for_it(_,0) ->
false;
do_wait_for_it(FullName,N) ->
case net_adm:ping(FullName) of
- pong ->
- true;
- _ ->
- receive
- after 1000 ->
- do_wait_for_it(FullName,N-1)
- end
+ pong ->
+ true;
+ _ ->
+ receive
+ after 1000 ->
+ do_wait_for_it(FullName,N-1)
+ end
end.
wait_for_node(Name) ->
@@ -139,309 +119,282 @@ wait_for_node(Name) ->
make_full_name(Name) ->
[_,Suffix] = string:tokens(atom_to_list(node()),"@"),
list_to_atom(Name ++ "@" ++ Suffix).
-
+
%%% The following tests are only run on NT:
-service_basic(doc) ->
- ["Check some basic (cosmetic) service parameters"];
-service_basic(suite) -> [];
+%% Check some basic (cosmetic) service parameters
service_basic(Config) when is_list(Config) ->
- ?line Name = "test_service_20",
- ?line IntName = Name++"_internal",
- ?line Service = [{servicename,Name},
- {args, ["-setcookie",
- atom_to_list(erlang:get_cookie())]},
- {internalservicename,IntName},
- {comment,"Epic comment"}],
- ?line ok = erlsrv:store_service(Service),
- ?line start_service(Name),
- ?line true = wait_for_node(Name),
- ?line S2 = erlsrv:get_service(Name),
- ?line {value,{comment,"Epic comment"}} = lists:keysearch(comment,1,S2),
- ?line {value,{internalservicename,IntName}} =
- lists:keysearch(internalservicename,1,S2),
- ?line S3 = lists:keyreplace(comment,1,S2,{comment,"Basic comment"}),
- ?line S4 = lists:keyreplace(internalservicename,1,S3,
- {internalservicename,"WillNotHappen"}),
- ?line ok = erlsrv:store_service(S4),
- ?line S5 = erlsrv:get_service(Name),
- ?line {value,{comment,"Basic comment"}} = lists:keysearch(comment,1,S5),
- ?line {value,{internalservicename,IntName}} =
- lists:keysearch(internalservicename,1,S5),
- ?line NewName = "test_service_21",
- ?line S6 = erlsrv:new_service(NewName,S5,[]), % should remove
- % internalservicename
- ?line ok = erlsrv:store_service(S6),
- ?line S7 = erlsrv:get_service(NewName),
- ?line {value,{comment,"Basic comment"}} = lists:keysearch(comment,1,S7),
- ?line {value,{internalservicename,[$t,$e,$s,$t | _]}} =
- lists:keysearch(internalservicename,1,S7),
- ?line remove_service(Name),
- ?line remove_service(NewName),
+ Name = "test_service_20",
+ IntName = Name++"_internal",
+ Service = [{servicename,Name},
+ {args, ["-setcookie", atom_to_list(erlang:get_cookie())]},
+ {internalservicename,IntName},
+ {comment,"Epic comment"}],
+ ok = erlsrv:store_service(Service),
+ start_service(Name),
+ true = wait_for_node(Name),
+ S2 = erlsrv:get_service(Name),
+ {value,{comment,"Epic comment"}} = lists:keysearch(comment,1,S2),
+ {value,{internalservicename,IntName}} =
+ lists:keysearch(internalservicename,1,S2),
+ S3 = lists:keyreplace(comment,1,S2,{comment,"Basic comment"}),
+ S4 = lists:keyreplace(internalservicename,1,S3,
+ {internalservicename,"WillNotHappen"}),
+ ok = erlsrv:store_service(S4),
+ S5 = erlsrv:get_service(Name),
+ {value,{comment,"Basic comment"}} = lists:keysearch(comment,1,S5),
+ {value,{internalservicename,IntName}} =
+ lists:keysearch(internalservicename,1,S5),
+ NewName = "test_service_21",
+ S6 = erlsrv:new_service(NewName,S5,[]), % should remove
+ % internalservicename
+ ok = erlsrv:store_service(S6),
+ S7 = erlsrv:get_service(NewName),
+ {value,{comment,"Basic comment"}} = lists:keysearch(comment,1,S7),
+ {value,{internalservicename,[$t,$e,$s,$t | _]}} =
+ lists:keysearch(internalservicename,1,S7),
+ remove_service(Name),
+ remove_service(NewName),
ok.
-service_env(doc) ->
- ["Check that service name and executable is in the environment of the " ++
- "erlang process created by erlsrv."];
-service_env(suite) -> [];
+%% Check that service name and executable is in the environment of the
+%% erlang process created by erlsrv.
service_env(Config) when is_list(Config) ->
- ?line Name = "test_service_2",
- ?line Service = [{servicename,Name},
- {args, ["-setcookie",
- atom_to_list(erlang:get_cookie())]}],
- ?line ok = erlsrv:store_service(Service),
- ?line start_service(Name),
- ?line true = wait_for_node(Name),
- ?line Name = rpc:call(make_full_name(Name),os,getenv,
- ["ERLSRV_SERVICE_NAME"]),
- ?line "erlsrv.exe" = filename:basename(
- hd(
- string:tokens(
- rpc:call(make_full_name(Name),
- os,
- getenv,
- ["ERLSRV_EXECUTABLE"]),
- "\""))),
- ?line remove_service(Name),
+ Name = "test_service_2",
+ Service = [{servicename,Name},
+ {args, ["-setcookie", atom_to_list(erlang:get_cookie())]}],
+ ok = erlsrv:store_service(Service),
+ start_service(Name),
+ true = wait_for_node(Name),
+ Name = rpc:call(make_full_name(Name),os,getenv,
+ ["ERLSRV_SERVICE_NAME"]),
+ "erlsrv.exe" = filename:basename(
+ hd(
+ string:tokens(
+ rpc:call(make_full_name(Name),
+ os,
+ getenv,
+ ["ERLSRV_EXECUTABLE"]),
+ "\""))),
+ remove_service(Name),
ok.
-user_env(doc) ->
- ["Check that the user defined environment is ADDED to the service's"++
- " normal dito."];
-user_env(suite) -> [];
+
+%% Check that the user defined environment is ADDED to the service's
+%% normal dito.
user_env(Config) when is_list(Config) ->
- ?line Name = "test_service_3",
- ?line Service = [{servicename,Name},{env,[{"HUBBA","BUBBA"}]},
- {args, ["-setcookie",
- atom_to_list(erlang:get_cookie())]}],
- ?line ok = erlsrv:store_service(Service),
- ?line start_service(Name),
- ?line true = wait_for_node(Name),
- ?line true = rpc:call(make_full_name(Name),os,getenv,
- ["SystemDrive"]) =/= false,
- ?line "BUBBA" = rpc:call(make_full_name(Name),os,getenv,["HUBBA"]),
- ?line remove_service(Name),
+ Name = "test_service_3",
+ Service = [{servicename,Name},{env,[{"HUBBA","BUBBA"}]},
+ {args, ["-setcookie", atom_to_list(erlang:get_cookie())]}],
+ ok = erlsrv:store_service(Service),
+ start_service(Name),
+ true = wait_for_node(Name),
+ true = rpc:call(make_full_name(Name),os,getenv,
+ ["SystemDrive"]) =/= false,
+ "BUBBA" = rpc:call(make_full_name(Name),os,getenv,["HUBBA"]),
+ remove_service(Name),
ok.
-synced(doc) ->
- ["Check that services are stopped and started syncronous and that"++
- " failed stopactions kill the erlang machine anyway."];
-synced(suite) -> [];
+
+%% Check that services are stopped and started syncronous and that
+%% failed stopactions kill the erlang machine anyway.
synced(Config) when is_list(Config) ->
- ?line Name0 = "test_service_4",
- ?line Service0 = [{servicename,Name0},
- {machine, "N:\\nickeNyfikenPaSjukhus"}],
- ?line ok = erlsrv:store_service(Service0),
- ?line true = (catch start_service(Name0)) =/= ok,
- ?line remove_service(Name0),
- ?line Name = "test_service_5",
- ?line Service = [{servicename,Name},
- {stopaction,"erlang:info(garbage_collection)."},
- {args, ["-setcookie",
- atom_to_list(erlang:get_cookie())]}],
- ?line ok = erlsrv:store_service(Service),
- ?line start_service(Name),
- ?line true = wait_for_node(Name),
- ?line T1 = calendar:datetime_to_gregorian_seconds(
- calendar:universal_time()),
- ?line stop_service(Name),
- ?line Diff1 = calendar:datetime_to_gregorian_seconds(
- calendar:universal_time()) - T1,
- ?line true = Diff1 > 30,
- ?line start_service(Name),
- ?line true = wait_for_node(Name),
- ?line T2 = calendar:datetime_to_gregorian_seconds(
- calendar:universal_time()),
- ?line remove_service(Name),
- ?line Diff2 = calendar:datetime_to_gregorian_seconds(
- calendar:universal_time()) - T2,
- ?line true = Diff2 > 30,
+ Name0 = "test_service_4",
+ Service0 = [{servicename,Name0},
+ {machine, "N:\\nickeNyfikenPaSjukhus"}],
+ ok = erlsrv:store_service(Service0),
+ true = (catch start_service(Name0)) =/= ok,
+ remove_service(Name0),
+ Name = "test_service_5",
+ Service = [{servicename,Name},
+ {stopaction,"erlang:info(garbage_collection)."},
+ {args, ["-setcookie", atom_to_list(erlang:get_cookie())]}],
+ ok = erlsrv:store_service(Service),
+ start_service(Name),
+ true = wait_for_node(Name),
+ T1 = calendar:datetime_to_gregorian_seconds(
+ calendar:universal_time()),
+ stop_service(Name),
+ Diff1 = calendar:datetime_to_gregorian_seconds(
+ calendar:universal_time()) - T1,
+ true = Diff1 > 30,
+ start_service(Name),
+ true = wait_for_node(Name),
+ T2 = calendar:datetime_to_gregorian_seconds(
+ calendar:universal_time()),
+ remove_service(Name),
+ Diff2 = calendar:datetime_to_gregorian_seconds(
+ calendar:universal_time()) - T2,
+ true = Diff2 > 30,
ok.
-service_prio(doc) ->
- ["Check that a service with higher prio create port programs with "
- "higher prio."];
-service_prio(suite) -> [];
+
+%% Check that a service with higher prio create port programs with
+%% higher prio.
service_prio(Config) when is_list(Config) ->
- ?line Name = "test_service_6",
- ?line Service = [{servicename,Name},{prio,"high"},
- {env, [{"HEART_COMMAND","echo off"}]},
- {args, ["-setcookie",
- atom_to_list(erlang:get_cookie()),
- "-heart"]}],
- ?line ok = erlsrv:store_service(Service),
- ?line {ok, OldProcs} = get_current_procs(Config),
- ?line start_service(Name),
- ?line {ok, NewProcs} = get_current_procs(Config),
+ Name = "test_service_6",
+ Service = [{servicename,Name},{prio,"high"},
+ {env, [{"HEART_COMMAND","echo off"}]},
+ {args, ["-setcookie", atom_to_list(erlang:get_cookie()),
+ "-heart"]}],
+ ok = erlsrv:store_service(Service),
+ {ok, OldProcs} = get_current_procs(Config),
+ start_service(Name),
+ {ok, NewProcs} = get_current_procs(Config),
timer:sleep(2000),
- ?line {ok, NewProcs2} = get_current_procs(Config),
- ?line remove_service(Name),
- ?line Diff = arrived_procs(OldProcs,NewProcs),
+ {ok, NewProcs2} = get_current_procs(Config),
+ remove_service(Name),
+ Diff = arrived_procs(OldProcs,NewProcs),
io:format("NewProcs ~p~n after sleep~n ~p~n",[Diff, arrived_procs(OldProcs,NewProcs2)]),
%% Not really correct, could fail if another heart is
%% started at the same time...
- ?line {value, {"heart.exe",_,"high"}} =
- lists:keysearch("heart.exe",1,Diff),
+ {value, {"heart.exe",_,"high"}} = lists:keysearch("heart.exe",1,Diff),
ok.
-logout(doc) ->
- ["Check that logout does not kill services"];
-logout(suite) -> [];
+
+%% Check that logout does not kill services
logout(Config) when is_list(Config) ->
- ?line {comment, "Have to be run manually by registering a service with " ++
- "heart, logout and log in again and then examine that the heart " ++
- "process id is not changed."}.
-debug(doc) ->
- ["Check the debug options to erlsrv."];
-debug(suite) -> [];
+ {comment, "Have to be run manually by registering a service with " ++
+ "heart, logout and log in again and then examine that the heart " ++
+ "process id is not changed."}.
+
+%% Check the debug options to erlsrv.
debug(Config) when is_list(Config) ->
- ?line Name0 = "test_service_7",
+ Name0 = "test_service_7",
%% We used to set the privdir as temporary directory, but for some
%% reason we don't seem to have write access to that directory,
%% so we'll use the directory specified in the next line.
- ?line TempDir = "C:/TEMP",
- ?line Service0 = [{servicename,Name0},
- {workdir,filename:nativename(TempDir)},
- {debugtype,"reuse"},
- {args, ["-setcookie",
- atom_to_list(erlang:get_cookie())]}],
- ?line ok = erlsrv:store_service(Service0),
- ?line T1 = calendar:datetime_to_gregorian_seconds(
- calendar:local_time()),
+ TempDir = "C:/TEMP",
+ Service0 = [{servicename,Name0},
+ {workdir,filename:nativename(TempDir)},
+ {debugtype,"reuse"},
+ {args, ["-setcookie", atom_to_list(erlang:get_cookie())]}],
+ ok = erlsrv:store_service(Service0),
+ T1 = calendar:datetime_to_gregorian_seconds(
+ calendar:local_time()),
%% sleep a little
- ?line receive after 2000 -> ok end,
- ?line start_service(Name0),
- ?line true = wait_for_node(Name0),
- ?line LF = filename:join(TempDir, Name0++".debug"),
- ?line {ok,Info0} = file:read_file_info(LF),
- ?line T2 = calendar:datetime_to_gregorian_seconds(
- Info0#file_info.mtime),
- ?line true = T2 > T1,
- ?line remove_service(Name0),
- ?line file:delete(LF),
- ?line Name1 = "test_service_8",
- ?line Service1 = [{servicename,Name1},
- {workdir, filename:nativename(TempDir)},
- {debugtype,"new"},
- {args, ["-setcookie",
- atom_to_list(erlang:get_cookie())]}],
- ?line ok = erlsrv:store_service(Service1),
- ?line T3 = calendar:datetime_to_gregorian_seconds(
- calendar:local_time()),
+ receive after 2000 -> ok end,
+ start_service(Name0),
+ true = wait_for_node(Name0),
+ LF = filename:join(TempDir, Name0++".debug"),
+ {ok,Info0} = file:read_file_info(LF),
+ T2 = calendar:datetime_to_gregorian_seconds(
+ Info0#file_info.mtime),
+ true = T2 > T1,
+ remove_service(Name0),
+ file:delete(LF),
+ Name1 = "test_service_8",
+ Service1 = [{servicename,Name1},
+ {workdir, filename:nativename(TempDir)},
+ {debugtype,"new"},
+ {args, ["-setcookie", atom_to_list(erlang:get_cookie())]}],
+ ok = erlsrv:store_service(Service1),
+ T3 = calendar:datetime_to_gregorian_seconds(
+ calendar:local_time()),
%% sleep a little
- ?line receive after 2000 -> ok end,
- ?line NF = next_logfile(TempDir, Name1),
- ?line start_service(Name1),
- ?line true = wait_for_node(Name1),
- ?line {ok,Info1} = file:read_file_info(NF),
- ?line T4 = calendar:datetime_to_gregorian_seconds(
- Info1#file_info.mtime),
- ?line true = T4 > T3,
- ?line remove_service(Name1),
- ?line file:delete(NF),
+ receive after 2000 -> ok end,
+ NF = next_logfile(TempDir, Name1),
+ start_service(Name1),
+ true = wait_for_node(Name1),
+ {ok,Info1} = file:read_file_info(NF),
+ T4 = calendar:datetime_to_gregorian_seconds(
+ Info1#file_info.mtime),
+ true = T4 > T3,
+ remove_service(Name1),
+ file:delete(NF),
ok.
-restart(doc) ->
- ["Check the restart options to erlsrv"];
-restart(suite) -> [];
+%% Check the restart options to erlsrv
restart(Config) when is_list(Config) ->
- ?line Name = "test_service_9",
- ?line Service = [{servicename,Name},
- {workdir, filename:nativename(logdir(Config))},
- {onfail,"restart"},
- {args, ["-setcookie",
- atom_to_list(erlang:get_cookie())]}],
- ?line ok = erlsrv:store_service(Service),
- ?line start_service(Name),
- ?line true = wait_for_node(Name),
- ?line receive after 20000 -> ok end,
- ?line rpc:call(make_full_name(Name),erlang,halt,[]),
- ?line receive after 1000 -> ok end,
- ?line true = wait_for_node(Name),
- ?line rpc:call(make_full_name(Name),erlang,halt,[]),
- ?line receive after 1000 -> ok end,
- ?line false = wait_for_node(Name),
- ?line remove_service(Name),
+ Name = "test_service_9",
+ Service = [{servicename,Name},
+ {workdir, filename:nativename(logdir(Config))},
+ {onfail,"restart"},
+ {args, ["-setcookie", atom_to_list(erlang:get_cookie())]}],
+ ok = erlsrv:store_service(Service),
+ start_service(Name),
+ true = wait_for_node(Name),
+ receive after 20000 -> ok end,
+ rpc:call(make_full_name(Name),erlang,halt,[]),
+ receive after 1000 -> ok end,
+ true = wait_for_node(Name),
+ rpc:call(make_full_name(Name),erlang,halt,[]),
+ receive after 1000 -> ok end,
+ false = wait_for_node(Name),
+ remove_service(Name),
ok.
-restart_always(doc) ->
- ["Check the restart options to erlsrv"];
-restart_always(suite) -> [];
+%% Check the restart options to erlsrv
restart_always(Config) when is_list(Config) ->
- ?line Name = "test_service_10",
- ?line Service = [{servicename,Name},
- {workdir, filename:nativename(logdir(Config))},
- {onfail,"restart_always"},
- {args, ["-setcookie",
- atom_to_list(erlang:get_cookie())]}],
- ?line ok = erlsrv:store_service(Service),
- ?line start_service(Name),
- ?line true = wait_for_node(Name),
- ?line rpc:call(make_full_name(Name),erlang,halt,[]),
- ?line receive after 1000 -> ok end,
- ?line true = wait_for_node(Name),
- ?line rpc:call(make_full_name(Name),erlang,halt,[]),
- ?line receive after 1000 -> ok end,
- ?line true = wait_for_node(Name),
- ?line remove_service(Name),
+ Name = "test_service_10",
+ Service = [{servicename,Name},
+ {workdir, filename:nativename(logdir(Config))},
+ {onfail,"restart_always"},
+ {args, ["-setcookie", atom_to_list(erlang:get_cookie())]}],
+ ok = erlsrv:store_service(Service),
+ start_service(Name),
+ true = wait_for_node(Name),
+ rpc:call(make_full_name(Name),erlang,halt,[]),
+ receive after 1000 -> ok end,
+ true = wait_for_node(Name),
+ rpc:call(make_full_name(Name),erlang,halt,[]),
+ receive after 1000 -> ok end,
+ true = wait_for_node(Name),
+ remove_service(Name),
ok.
-stopaction(doc) ->
- ["Check that stopaction does not hang output while shutting down"];
-stopaction(suite) -> [];
+
+%% Check that stopaction does not hang output while shutting down
stopaction(Config) when is_list(Config) ->
- ?line Name = "test_service_11",
+ Name = "test_service_11",
%% Icky, I prepend the first element in the codepath, cause
%% I "suppose" it's the one to where I am.
- ?line Service = [{servicename,Name},
- {stopaction,atom_to_list(?MODULE) ++ ":shutdown_io()."},
- {args, ["-setcookie",
- atom_to_list(erlang:get_cookie()),
- "-pa", hd(code:get_path())]}],
- ?line ok = erlsrv:store_service(Service),
- ?line start_service(Name),
- ?line true = wait_for_node(Name),
- ?line T1 = calendar:datetime_to_gregorian_seconds(
- calendar:universal_time()),
- ?line stop_service(Name),
- ?line Diff1 = calendar:datetime_to_gregorian_seconds(
- calendar:universal_time()) - T1,
- ?line true = Diff1 < 30,
- ?line remove_service(Name),
+ Service = [{servicename,Name},
+ {stopaction,atom_to_list(?MODULE) ++ ":shutdown_io()."},
+ {args, ["-setcookie", atom_to_list(erlang:get_cookie()),
+ "-pa", hd(code:get_path())]}],
+ ok = erlsrv:store_service(Service),
+ start_service(Name),
+ true = wait_for_node(Name),
+ T1 = calendar:datetime_to_gregorian_seconds(
+ calendar:universal_time()),
+ stop_service(Name),
+ Diff1 = calendar:datetime_to_gregorian_seconds(
+ calendar:universal_time()) - T1,
+ true = Diff1 < 30,
+ remove_service(Name),
ok.
%%% This test is run on all platforms, but just gives a comment on
%%% other platforms than NT.
-nt(doc) ->
- ["Run NT specific tests."];
-nt(suite) ->
- [];
nt(Config) when is_list(Config) ->
- case os:type() of
- {win32,nt} ->
+ case {os:type(), os:version()} of
+ {{win32, nt}, Vsn} when Vsn =< {6,1,999999} ->
nt_run();
+ {{win32, nt}, _} ->
+ {skipped, "This test case requires admin privileges on Win 8 and later."};
_ ->
{skipped, "This test case is intended for Win NT only."}
end.
nt_run() ->
- ?line start_all(),
- ?line create_service("test_service_1"),
- ?line R = start_look_for_single("System","ErlSrv","Informational",
- ".*test_service_1.*started.*"),
- ?line start_service("test_service_1"),
- ?line Res = look_for_single(R),
- ?line io:format("Result from eventlog: ~p~n",
- [Res]),
- ?line remove_service("test_service_1"),
- ?line stop_all(),
+ start_all(),
+ create_service("test_service_1"),
+ R = start_look_for_single("System","ErlSrv","Informational",
+ ".*test_service_1.*started.*"),
+ start_service("test_service_1"),
+ Res = look_for_single(R),
+ io:format("Result from eventlog: ~p~n",
+ [Res]),
+ remove_service("test_service_1"),
+ stop_all(),
ok.
start_all() ->
Pid1 = spawn_link(?MODULE,middleman,[[]]),
register(?MODULE,Pid1),
_Pid2 = nteventlog:start("log_testing",
- {?MODULE,handle_eventlog,[Pid1]}).
+ {?MODULE,handle_eventlog,[Pid1]}).
stop_all() ->
?MODULE ! stop,
@@ -454,10 +407,10 @@ start_look_for_single(Cat,Fac,Sev,MessRE) ->
look_for_single(Ref) ->
receive
- {Ref,Time,Mes} ->
- {Time,Mes}
+ {Ref,Time,Mes} ->
+ {Time,Mes}
after 60000 ->
- timeout
+ timeout
end.
@@ -468,25 +421,25 @@ handle_eventlog(Mes,Pid) ->
%%% Waitfor = [{Pid, Ref, {Category,Facility,Severity,MessageRE}} ...]
middleman(Waitfor) ->
receive
- {Time,Category,Facility,Severity,Message} ->
- io:format("Middleman got ~s...", [Message]),
- case match_event({Time,Category,Facility,Severity,Message},
- Waitfor) of
- {ok, {Pid,Ref,Time,Mes}, Rest} ->
- io:format("matched~n"),
- Pid ! {Ref,Time,Mes},
- middleman(Rest);
- _ ->
- io:format("no match~n"),
- middleman(Waitfor)
- end;
- {lookfor, X} ->
- io:format("Middleman told to look for ~p~n", [X]),
- middleman([X|Waitfor]);
- stop ->
- stopped;
- _ ->
- middleman(Waitfor)
+ {Time,Category,Facility,Severity,Message} ->
+ io:format("Middleman got ~s...", [Message]),
+ case match_event({Time,Category,Facility,Severity,Message},
+ Waitfor) of
+ {ok, {Pid,Ref,Time,Mes}, Rest} ->
+ io:format("matched~n"),
+ Pid ! {Ref,Time,Mes},
+ middleman(Rest);
+ _ ->
+ io:format("no match~n"),
+ middleman(Waitfor)
+ end;
+ {lookfor, X} ->
+ io:format("Middleman told to look for ~p~n", [X]),
+ middleman([X|Waitfor]);
+ stop ->
+ stopped;
+ _ ->
+ middleman(Waitfor)
end.
@@ -495,81 +448,81 @@ match_event(_X, []) ->
nomatch;
match_event({Time,Cat,Fac,Sev,Mes},[{Pid,Ref,{Cat,Fac,Sev,MesRE}} | Tail]) ->
case re:run(Mes,MesRE,[{capture,none}]) of
- match ->
- %%io:format("Match!~n"),
- {ok,{Pid,Ref,Time,Mes},Tail};
- nomatch ->
- %%io:format("No match~n"),
- case match_event({Time,Cat,Fac,Sev,Mes},Tail) of
- {ok,X,Rest} ->
- {ok,X,[{Pid,Ref,{Cat,Fac,Sev,MesRE}} | Rest]};
- X ->
- X
- end
+ match ->
+ %%io:format("Match!~n"),
+ {ok,{Pid,Ref,Time,Mes},Tail};
+ nomatch ->
+ %%io:format("No match~n"),
+ case match_event({Time,Cat,Fac,Sev,Mes},Tail) of
+ {ok,X,Rest} ->
+ {ok,X,[{Pid,Ref,{Cat,Fac,Sev,MesRE}} | Rest]};
+ X ->
+ X
+ end
end;
match_event(X,[Y | T]) ->
%%io:format("X == ~p, Y == ~p~n",[X,Y]),
case match_event(X,T) of
- {ok,Z,R} ->
- {ok,Z,[Y|R]};
- XX ->
- XX
+ {ok,Z,R} ->
+ {ok,Z,[Y|R]};
+ XX ->
+ XX
end.
arrived_procs(_,[]) ->
[];
arrived_procs(OldProcs,[{Executable, Pid, Priority} | TNewProcs]) ->
case lists:keysearch(Pid,2,OldProcs) of
- {value, _} ->
- arrived_procs(OldProcs, TNewProcs);
- false ->
- [{Executable, Pid, Priority} | arrived_procs(OldProcs, TNewProcs)]
+ {value, _} ->
+ arrived_procs(OldProcs, TNewProcs);
+ false ->
+ [{Executable, Pid, Priority} | arrived_procs(OldProcs, TNewProcs)]
end.
-
+
get_current_procs(Config) ->
- ?line P = open_port({spawn,nt_info(Config) ++ " -E"},
- [{line,10000}]),
- ?line L = receive
- {P,{data,{eol,D}}} ->
- D;
- _ -> "error. "
- end,
- ?line P ! {self(), close},
- ?line receive
- {P, closed} -> ok
- end,
- ?line {done,{ok,Tok,_},_} = erl_scan:tokens([],L,0),
- ?line erl_parse:parse_term(Tok).
+ P = open_port({spawn,nt_info(Config) ++ " -E"},
+ [{line,10000}]),
+ L = receive
+ {P,{data,{eol,D}}} ->
+ D;
+ _ -> "error. "
+ end,
+ P ! {self(), close},
+ receive
+ {P, closed} -> ok
+ end,
+ {done,{ok,Tok,_},_} = erl_scan:tokens([],L,0),
+ erl_parse:parse_term(Tok).
nt_info(Config) when is_list(Config) ->
- ?line "\"" ++ filename:join(?config(data_dir, Config), "nt_info") ++ "\"".
+ "\"" ++ filename:join(proplists:get_value(data_dir, Config), "nt_info") ++ "\"".
logdir(Config) ->
- ?line ?config(priv_dir, Config).
+ proplists:get_value(priv_dir, Config).
look_for_next(Template,L,N) ->
- ?line FN = Template ++ integer_to_list(N),
- ?line case lists:member(FN,L) of
- true ->
- ?line look_for_next(Template,L,N+1);
- false ->
- ?line FN
+ FN = Template ++ integer_to_list(N),
+ case lists:member(FN,L) of
+ true ->
+ look_for_next(Template,L,N+1);
+ false ->
+ FN
end.
next_logfile(LD, Servicename) ->
- ?line {ok, Files} = file:list_dir(LD),
- ?line Ftmpl = Servicename ++ ".debug.",
- ?line filename:join(LD,look_for_next(Ftmpl,Files,1)).
+ {ok, Files} = file:list_dir(LD),
+ Ftmpl = Servicename ++ ".debug.",
+ filename:join(LD,look_for_next(Ftmpl,Files,1)).
%%% Functions run by the service
do_shutdown_io() ->
receive
after 2000 ->
- io:format("IO in shutting down...~n"),
- erlang:halt()
+ io:format("IO in shutting down...~n"),
+ erlang:halt()
end.
shutdown_io() ->
diff --git a/erts/test/nt_SUITE_data/Makefile.src b/erts/test/nt_SUITE_data/Makefile.src
index 26da26b195..2317828337 100644
--- a/erts/test/nt_SUITE_data/Makefile.src
+++ b/erts/test/nt_SUITE_data/Makefile.src
@@ -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/erts/test/nt_SUITE_data/nt_info.c b/erts/test/nt_SUITE_data/nt_info.c
index 41d9a44c18..8ef52cad2d 100644
--- a/erts/test/nt_SUITE_data/nt_info.c
+++ b/erts/test/nt_SUITE_data/nt_info.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/erts/test/otp_SUITE.erl b/erts/test/otp_SUITE.erl
index 6777c205b0..54fcfd935f 100644
--- a/erts/test/otp_SUITE.erl
+++ b/erts/test/otp_SUITE.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.
@@ -20,18 +20,20 @@
-module(otp_SUITE).
--export([all/0, suite/0,groups/0,init_per_group/2,end_per_group/2,
- init_per_suite/1,end_per_suite/1]).
+-export([all/0, suite/0,
+ init_per_suite/1,end_per_suite/1]).
-export([undefined_functions/1,deprecated_not_in_obsolete/1,
- obsolete_but_not_deprecated/1,call_to_deprecated/1,
+ obsolete_but_not_deprecated/1,call_to_deprecated/1,
call_to_size_1/1,call_to_now_0/1,strong_components/1,
- erl_file_encoding/1,xml_file_encoding/1,runtime_dependencies/1]).
+ erl_file_encoding/1,xml_file_encoding/1,runtime_dependencies/1]).
-include_lib("common_test/include/ct.hrl").
-import(lists, [filter/2,foldl/3,foreach/2]).
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap, {minutes, 10}}].
all() ->
[undefined_functions, deprecated_not_in_obsolete,
@@ -40,54 +42,41 @@ all() ->
erl_file_encoding, xml_file_encoding,
runtime_dependencies].
-groups() ->
- [].
-
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
-
-
init_per_suite(Config) ->
- Dog = test_server:timetrap(?t:minutes(10)),
Root = code:root_dir(),
Server = daily_xref,
- ?line xref:start(Server),
- ?line xref:set_default(Server, [{verbose,false},
- {warnings,false},
- {builtins,true}]),
- ?line {ok,_Relname} = xref:add_release(Server, Root, {name,otp}),
+ xref:start(Server),
+ xref:set_default(Server, [{verbose,false},
+ {warnings,false},
+ {builtins,true}]),
+ {ok,_Relname} = xref:add_release(Server, Root, {name,otp}),
%% If we are running the tests in the source tree, the ERTS application
%% is not in the code path. We must add it explicitly.
case code:lib_dir(erts) of
- {error,bad_name} ->
- Erts = filename:join([code:root_dir(),"erts","preloaded","ebin"]),
- ?line {ok,_} = xref:add_directory(Server, Erts, []);
- _ ->
- ok
+ {error,bad_name} ->
+ Erts = filename:join([code:root_dir(),"erts","preloaded","ebin"]),
+ {ok,_} = xref:add_directory(Server, Erts, []);
+ _ ->
+ ok
end,
-
- ?line ?t:timetrap_cancel(Dog),
[{xref_server,Server}|Config].
end_per_suite(Config) ->
- Server = ?config(xref_server, Config),
+ Server = proplists:get_value(xref_server, Config),
catch xref:stop(Server),
Config.
undefined_functions(Config) when is_list(Config) ->
- Server = ?config(xref_server, Config),
+ Server = proplists:get_value(xref_server, Config),
%% Exclude calls from generated modules in the SSL application.
ExcludeFrom = "SSL-PKIX|PKIX.*|ssl_pkix_oid",
- ?line UndefS = xref_base:analysis(undefined_function_calls),
- ?line Q = io_lib:format("Undef = ~s,"
- "ExcludedFrom = ~p:_/_,"
- "Undef - Undef | ExcludedFrom",
- [UndefS,ExcludeFrom]),
+ UndefS = xref_base:analysis(undefined_function_calls),
+ Q = io_lib:format("Undef = ~s,"
+ "ExcludedFrom = ~p:_/_,"
+ "Undef - Undef | ExcludedFrom",
+ [UndefS,ExcludeFrom]),
{ok,Undef0} = xref:q(Server, lists:flatten(Q)),
Undef1 = hipe_filter(Undef0),
Undef2 = ssl_crypto_filter(Undef1),
@@ -99,124 +88,124 @@ undefined_functions(Config) when is_list(Config) ->
Undef = diameter_filter(Undef7),
case Undef of
- [] -> ok;
- _ ->
- Fd = open_log(Config, "undefined_functions"),
- foreach(fun ({MFA1,MFA2}) ->
- io:format("~s calls undefined ~s",
- [format_mfa(Server, MFA1),
- format_mfa(MFA2)]),
- io:format(Fd, "~s ~s\n",
- [format_mfa(Server, MFA1),
- format_mfa(MFA2)])
- end, Undef),
- close_log(Fd),
- ?line ?t:fail({length(Undef),undefined_functions_in_otp})
+ [] -> ok;
+ _ ->
+ Fd = open_log(Config, "undefined_functions"),
+ foreach(fun ({MFA1,MFA2}) ->
+ io:format("~s calls undefined ~s",
+ [format_mfa(Server, MFA1),
+ format_mfa(MFA2)]),
+ io:format(Fd, "~s ~s\n",
+ [format_mfa(Server, MFA1),
+ format_mfa(MFA2)])
+ end, Undef),
+ close_log(Fd),
+ ct:fail({length(Undef),undefined_functions_in_otp})
end.
hipe_filter(Undef) ->
case erlang:system_info(hipe_architecture) of
- undefined ->
- filter(fun ({_,{hipe_bifs,_,_}}) -> false;
- ({_,{hipe,_,_}}) -> false;
- ({_,{hipe_consttab,_,_}}) -> false;
- ({_,{hipe_converters,_,_}}) -> false;
- ({{code,_,_},{Mod,_,_}}) ->
- not is_hipe_module(Mod);
- ({{code_server,_,_},{Mod,_,_}}) ->
- not is_hipe_module(Mod);
- ({{compile,_,_},{Mod,_,_}}) ->
- not is_hipe_module(Mod);
- ({{hipe,_,_},{Mod,_,_}}) ->
- %% See comment for the next clause.
- not is_hipe_module(Mod);
- ({{cerl_to_icode,translate_flags1,2},
- {hipe_rtl_arch,endianess,0}}) ->
- false;
- ({{Caller,_,_},{Callee,_,_}}) ->
- %% Part of the hipe application is here
- %% for the sake of Dialyzer. There are many
- %% undefined calls within the hipe application.
- not is_hipe_module(Caller) orelse
- not is_hipe_module(Callee);
- (_) -> true
- end, Undef);
- _Arch ->
- filter(fun ({{Mod,_,_},{hipe_bifs,write_u64,2}}) ->
- %% Unavailable except in 64 bit AMD. Ignore it.
- not is_hipe_module(Mod);
- (_) -> true
- end, Undef)
+ undefined ->
+ filter(fun ({_,{hipe_bifs,_,_}}) -> false;
+ ({_,{hipe,_,_}}) -> false;
+ ({_,{hipe_consttab,_,_}}) -> false;
+ ({_,{hipe_converters,_,_}}) -> false;
+ ({{code,_,_},{Mod,_,_}}) ->
+ not is_hipe_module(Mod);
+ ({{code_server,_,_},{Mod,_,_}}) ->
+ not is_hipe_module(Mod);
+ ({{compile,_,_},{Mod,_,_}}) ->
+ not is_hipe_module(Mod);
+ ({{hipe,_,_},{Mod,_,_}}) ->
+ %% See comment for the next clause.
+ not is_hipe_module(Mod);
+ ({{cerl_to_icode,translate_flags1,2},
+ {hipe_rtl_arch,endianess,0}}) ->
+ false;
+ ({{Caller,_,_},{Callee,_,_}}) ->
+ %% Part of the hipe application is here
+ %% for the sake of Dialyzer. There are many
+ %% undefined calls within the hipe application.
+ not is_hipe_module(Caller) orelse
+ not is_hipe_module(Callee);
+ (_) -> true
+ end, Undef);
+ _Arch ->
+ filter(fun ({{Mod,_,_},{hipe_bifs,write_u64,2}}) ->
+ %% Unavailable except in 64 bit AMD. Ignore it.
+ not is_hipe_module(Mod);
+ (_) -> true
+ end, Undef)
end.
is_hipe_module(Mod) ->
case atom_to_list(Mod) of
- "hipe_"++_ -> true;
- _ -> false
+ "hipe_"++_ -> true;
+ _ -> false
end.
ssl_crypto_filter(Undef) ->
case {app_exists(crypto),app_exists(ssl)} of
- {false,false} ->
- filter(fun({_,{ssl,_,_}}) -> false;
- ({_,{crypto,_,_}}) -> false;
- ({_,{ssh,_,_}}) -> false;
- ({_,{ssh_connection,_,_}}) -> false;
- ({_,{ssh_sftp,_,_}}) -> false;
- (_) -> true
- end, Undef);
- {_,_} -> Undef
+ {false,false} ->
+ filter(fun({_,{ssl,_,_}}) -> false;
+ ({_,{crypto,_,_}}) -> false;
+ ({_,{ssh,_,_}}) -> false;
+ ({_,{ssh_connection,_,_}}) -> false;
+ ({_,{ssh_sftp,_,_}}) -> false;
+ (_) -> true
+ end, Undef);
+ {_,_} -> Undef
end.
edoc_filter(Undef) ->
%% Filter away function call that is catched.
filter(fun({{edoc_lib,uri_get_http,1},{http,request_sync,2}}) -> false;
- (_) -> true
- end, Undef).
+ (_) -> true
+ end, Undef).
eunit_filter(Undef) ->
filter(fun({{eunit_test,wrapper_test_exported_,0},
- {eunit_test,nonexisting_function,0}}) -> false;
- (_) -> true
- end, Undef).
+ {eunit_test,nonexisting_function,0}}) -> false;
+ (_) -> true
+ end, Undef).
dialyzer_filter(Undef) ->
case app_exists(dialyzer) of
- false ->
- filter(fun({_,{dialyzer_callgraph,_,_}}) -> false;
- ({_,{dialyzer_codeserver,_,_}}) -> false;
- ({_,{dialyzer_contracts,_,_}}) -> false;
- ({_,{dialyzer_cl_parse,_,_}}) -> false;
- ({_,{dialyzer_timing,_,_}}) -> false;
- ({_,{dialyzer_plt,_,_}}) -> false;
- ({_,{dialyzer_succ_typings,_,_}}) -> false;
- ({_,{dialyzer_utils,_,_}}) -> false;
- (_) -> true
- end, Undef);
- _ -> Undef
+ false ->
+ filter(fun({_,{dialyzer_callgraph,_,_}}) -> false;
+ ({_,{dialyzer_codeserver,_,_}}) -> false;
+ ({_,{dialyzer_contracts,_,_}}) -> false;
+ ({_,{dialyzer_cl_parse,_,_}}) -> false;
+ ({_,{dialyzer_timing,_,_}}) -> false;
+ ({_,{dialyzer_plt,_,_}}) -> false;
+ ({_,{dialyzer_succ_typings,_,_}}) -> false;
+ ({_,{dialyzer_utils,_,_}}) -> false;
+ (_) -> true
+ end, Undef);
+ _ -> Undef
end.
wx_filter(Undef) ->
case app_exists(wx) of
- false ->
- filter(fun({_,{MaybeWxModule,_,_}}) ->
- case atom_to_list(MaybeWxModule) of
- "wx"++_ -> false;
- _ -> true
- end
- end, Undef);
- _ -> Undef
+ false ->
+ filter(fun({_,{MaybeWxModule,_,_}}) ->
+ case atom_to_list(MaybeWxModule) of
+ "wx"++_ -> false;
+ _ -> true
+ end
+ end, Undef);
+ _ -> Undef
end.
-
+
gs_filter(Undef) ->
case code:lib_dir(gs) of
- {error,bad_name} ->
- filter(fun({_,{gs,_,_}}) -> false;
- ({_,{gse,_,_}}) -> false;
+ {error,bad_name} ->
+ filter(fun({_,{gs,_,_}}) -> false;
+ ({_,{gse,_,_}}) -> false;
({_,{tool_utils,_,_}}) -> false;
- (_) -> true
- end, Undef);
- _ -> Undef
+ (_) -> true
+ end, Undef);
+ _ -> Undef
end.
diameter_filter(Undef) ->
@@ -229,80 +218,80 @@ diameter_filter(Undef) ->
false;
({{diameter_lib,_,_},{erlang,time_offset,0}}) ->
false;
- (_) -> true
- end, Undef).
+ (_) -> true
+ end, Undef).
deprecated_not_in_obsolete(Config) when is_list(Config) ->
- ?line Server = ?config(xref_server, Config),
- ?line {ok,DeprecatedFunctions} = xref:q(Server, "DF"),
-
- ?line L = foldl(fun({M,F,A}=MFA, Acc) ->
- case otp_internal:obsolete(M, F, A) of
- no -> [MFA|Acc];
- _ -> Acc
- end
- end, [], DeprecatedFunctions),
+ Server = proplists:get_value(xref_server, Config),
+ {ok,DeprecatedFunctions} = xref:q(Server, "DF"),
+
+ L = foldl(fun({M,F,A}=MFA, Acc) ->
+ case otp_internal:obsolete(M, F, A) of
+ no -> [MFA|Acc];
+ _ -> Acc
+ end
+ end, [], DeprecatedFunctions),
case L of
- [] -> ok;
- _ ->
- io:put_chars("The following functions have -deprecated() attributes,\n"
- "but are not listed in otp_internal:obsolete/3.\n"),
- print_mfas(group_leader(), Server, L),
- Fd = open_log(Config, "deprecated_not_obsolete"),
- print_mfas(Fd, Server, L),
- close_log(Fd),
- ?line ?t:fail({length(L),deprecated_but_not_obsolete})
+ [] -> ok;
+ _ ->
+ io:put_chars("The following functions have -deprecated() attributes,\n"
+ "but are not listed in otp_internal:obsolete/3.\n"),
+ print_mfas(group_leader(), Server, L),
+ Fd = open_log(Config, "deprecated_not_obsolete"),
+ print_mfas(Fd, Server, L),
+ close_log(Fd),
+ ct:fail({length(L),deprecated_but_not_obsolete})
end.
obsolete_but_not_deprecated(Config) when is_list(Config) ->
- ?line Server = ?config(xref_server, Config),
- ?line {ok,NotDeprecated} = xref:q(Server, "X - DF"),
+ Server = proplists:get_value(xref_server, Config),
+ {ok,NotDeprecated} = xref:q(Server, "X - DF"),
- ?line L = foldl(fun({M,F,A}=MFA, Acc) ->
- case otp_internal:obsolete(M, F, A) of
- no -> Acc;
- _ -> [MFA|Acc]
- end
- end, [], NotDeprecated),
+ L = foldl(fun({M,F,A}=MFA, Acc) ->
+ case otp_internal:obsolete(M, F, A) of
+ no -> Acc;
+ _ -> [MFA|Acc]
+ end
+ end, [], NotDeprecated),
case L of
- [] -> ok;
- _ ->
- io:put_chars("The following functions are listed "
- "in otp_internal:obsolete/3,\n"
- "but don't have -deprecated() attributes.\n"),
- print_mfas(group_leader(), Server, L),
- Fd = open_log(Config, "obsolete_not_deprecated"),
- print_mfas(Fd, Server, L),
- close_log(Fd),
- ?line ?t:fail({length(L),obsolete_but_not_deprecated})
+ [] -> ok;
+ _ ->
+ io:put_chars("The following functions are listed "
+ "in otp_internal:obsolete/3,\n"
+ "but don't have -deprecated() attributes.\n"),
+ print_mfas(group_leader(), Server, L),
+ Fd = open_log(Config, "obsolete_not_deprecated"),
+ print_mfas(Fd, Server, L),
+ close_log(Fd),
+ ct:fail({length(L),obsolete_but_not_deprecated})
end.
-
+
call_to_deprecated(Config) when is_list(Config) ->
- Server = ?config(xref_server, Config),
- ?line {ok,DeprecatedCalls} = xref:q(Server, "strict(E || DF)"),
+ Server = proplists:get_value(xref_server, Config),
+ {ok,DeprecatedCalls} = xref:q(Server, "strict(E || DF)"),
foreach(fun ({MFA1,MFA2}) ->
- io:format("~s calls deprecated ~s",
- [format_mfa(MFA1),format_mfa(MFA2)])
- end, DeprecatedCalls),
+ io:format("~s calls deprecated ~s",
+ [format_mfa(MFA1),format_mfa(MFA2)])
+ end, DeprecatedCalls),
{comment,integer_to_list(length(DeprecatedCalls))++" calls to deprecated functions"}.
call_to_size_1(Config) when is_list(Config) ->
%% Applications that do not call erlang:size/1:
Apps = [asn1,compiler,debugger,kernel,observer,parsetools,
- runtime_tools,stdlib,tools],
+ runtime_tools,stdlib,tools],
not_recommended_calls(Config, Apps, {erlang,size,1}).
call_to_now_0(Config) when is_list(Config) ->
%% Applications that do not call erlang:now/1:
Apps = [asn1,common_test,compiler,debugger,dialyzer,
- gs,kernel,mnesia,observer,parsetools,reltool,
- runtime_tools,sasl,stdlib,syntax_tools,
- test_server,tools],
+ gs,kernel,mnesia,observer,parsetools,reltool,
+ runtime_tools,sasl,stdlib,syntax_tools,
+ tools],
not_recommended_calls(Config, Apps, {erlang,now,0}).
not_recommended_calls(Config, Apps0, MFA) ->
- Server = ?config(xref_server, Config),
+ Server = proplists:get_value(xref_server, Config),
Apps = [App || App <- Apps0, is_present_application(App, Server)],
@@ -315,14 +304,14 @@ not_recommended_calls(Config, Apps0, MFA) ->
{ok,CallsToMFA} = xref:q(Server, lists:flatten(Q2)),
case CallsToMFA of
- [] ->
+ [] ->
ok;
- _ ->
+ _ ->
io:format("These calls are not allowed:\n"),
- foreach(fun ({MFA1,MFA2}) ->
- io:format("~s calls non-recommended ~s",
- [format_mfa(MFA1),format_mfa(MFA2)])
- end, CallsToMFA)
+ foreach(fun ({MFA1,MFA2}) ->
+ io:format("~s calls non-recommended ~s",
+ [format_mfa(MFA1),format_mfa(MFA2)])
+ end, CallsToMFA)
end,
%% Enumerate calls to MFA from other applications than
@@ -338,7 +327,7 @@ not_recommended_calls(Config, Apps0, MFA) ->
end, Calls)
end,
case CallsToMFA of
- [] ->
+ [] ->
SkippedApps = ordsets:subtract(ordsets:from_list(Apps0),
ordsets:from_list(Apps)),
case SkippedApps of
@@ -350,8 +339,8 @@ not_recommended_calls(Config, Apps0, MFA) ->
[string:join(AppStrings, ", ")]),
{comment, Mess}
end;
- _ ->
- ?t:fail({length(CallsToMFA),calls_to_size_1})
+ _ ->
+ ct:fail({length(CallsToMFA),calls_to_size_1})
end.
is_present_application(Name, Server) ->
@@ -362,8 +351,8 @@ is_present_application(Name, Server) ->
end.
strong_components(Config) when is_list(Config) ->
- Server = ?config(xref_server, Config),
- ?line {ok,Cs} = xref:q(Server, "components AE"),
+ Server = proplists:get_value(xref_server, Config),
+ {ok,Cs} = xref:q(Server, "components AE"),
io:format("\n\nStrong components:\n\n~p\n", [Cs]),
ok.
@@ -371,41 +360,41 @@ erl_file_encoding(_Config) ->
Root = code:root_dir(),
Wc = filename:join([Root,"**","*.erl"]),
ErlFiles = ordsets:subtract(ordsets:from_list(filelib:wildcard(Wc)),
- release_files(Root, "*.erl")),
+ release_files(Root, "*.erl")),
{ok, MP} = re:compile(".*lib/(ic)|(orber)|(cos).*", [unicode]),
Fs = [F || F <- ErlFiles,
- filter_use_latin1_coding(F, MP),
- case epp:read_encoding(F) of
- none -> false;
- _ -> true
- end],
+ filter_use_latin1_coding(F, MP),
+ case epp:read_encoding(F) of
+ none -> false;
+ _ -> true
+ end],
case Fs of
- [] ->
- ok;
- [_|_] ->
- io:put_chars("Files with \"coding:\":\n"),
- [io:put_chars(F) || F <- Fs],
- ?t:fail()
+ [] ->
+ ok;
+ [_|_] ->
+ io:put_chars("Files with \"coding:\":\n"),
+ [io:put_chars(F) || F <- Fs],
+ ct:fail(failed)
end.
filter_use_latin1_coding(F, MP) ->
case re:run(F, MP) of
- nomatch ->
- true;
+ nomatch ->
+ true;
{match, _} ->
- false
+ false
end.
xml_file_encoding(_Config) ->
XmlFiles = xml_files(),
Fs = [F || F <- XmlFiles, is_bad_encoding(F)],
case Fs of
- [] ->
- ok;
- [_|_] ->
- io:put_chars("Encoding should be \"utf-8\" or \"UTF-8\":\n"),
- [io:put_chars(F) || F <- Fs],
- ?t:fail()
+ [] ->
+ ok;
+ [_|_] ->
+ io:put_chars("Encoding should be \"utf-8\" or \"UTF-8\":\n"),
+ [io:put_chars(F) || F <- Fs],
+ ct:fail(failed)
end.
xml_files() ->
@@ -417,7 +406,7 @@ xml_files() ->
XmerlWc = filename:join([Root,"lib","xmerl","**","*.xml"]),
XmerlXmlFiles = ordsets:from_list(filelib:wildcard(XmerlWc)),
Ignore = ordsets:union([TestXmlFiles,XmerlXmlFiles,
- release_files(Root, "*.xml")]),
+ release_files(Root, "*.xml")]),
ordsets:subtract(AllXmlFiles, Ignore).
release_files(Root, Ext) ->
@@ -427,12 +416,12 @@ release_files(Root, Ext) ->
is_bad_encoding(File) ->
{ok,Bin} = file:read_file(File),
case Bin of
- <<"<?xml version=\"1.0\" encoding=\"utf-8\"",_/binary>> ->
- false;
- <<"<?xml version=\"1.0\" encoding=\"UTF-8\"",_/binary>> ->
- false;
- _ ->
- true
+ <<"<?xml version=\"1.0\" encoding=\"utf-8\"",_/binary>> ->
+ false;
+ <<"<?xml version=\"1.0\" encoding=\"UTF-8\"",_/binary>> ->
+ false;
+ _ ->
+ true
end.
runtime_dependencies(Config) ->
@@ -444,59 +433,31 @@ runtime_dependencies(Config) ->
%% Verify that (at least) OTP application runtime dependencies found
%% by xref are listed in the runtime_dependencies field of the .app file
%% of each application.
- Server = ?config(xref_server, Config),
+ Server = proplists:get_value(xref_server, Config),
{ok, AE} = xref:q(Server, "AE"),
SAE = lists:keysort(1, AE),
put(ignored_failures, []),
{AppDep, AppDeps} = lists:foldl(fun ({App, App}, Acc) ->
- Acc;
- ({App, Dep}, {undefined, []}) ->
- {{App, [Dep]}, []};
- ({App, Dep}, {{App, Deps}, AppDeps}) ->
- {{App, [Dep|Deps]}, AppDeps};
- ({App, Dep}, {AppDep, AppDeps}) ->
- {{App, [Dep]}, [AppDep | AppDeps]}
- end,
- {undefined, []},
- SAE),
- [] = lists:filter(fun ({missing_runtime_dependency,
- AppFile,
- common_test}) ->
- %% The test_server app is contaminated by
- %% common_test when run in a source tree. It
- %% should however *not* be contaminated
- %% when run in an installation.
- case {filename:basename(AppFile),
- is_run_in_src_tree()} of
- {"test_server.app", true} ->
- false;
- _ ->
- true
- end;
- (_) ->
- true
- end,
- check_apps_deps([AppDep|AppDeps], IgnoreApps)),
+ Acc;
+ ({App, Dep}, {undefined, []}) ->
+ {{App, [Dep]}, []};
+ ({App, Dep}, {{App, Deps}, AppDeps}) ->
+ {{App, [Dep|Deps]}, AppDeps};
+ ({App, Dep}, {AppDep, AppDeps}) ->
+ {{App, [Dep]}, [AppDep | AppDeps]}
+ end,
+ {undefined, []},
+ SAE),
+ check_apps_deps([AppDep|AppDeps], IgnoreApps),
case IgnoreApps of
- [] ->
- ok;
- _ ->
- Comment = lists:flatten(io_lib:format("Ignored applications: ~p "
- "Ignored failures: ~p",
- [IgnoreApps,
- get(ignored_failures)])),
- {comment, Comment}
- end.
-
-is_run_in_src_tree() ->
- %% At least currently run_erl is not present in <code-root>/bin
- %% in the source tree, but present in <code-root>/bin of an
- %% ordinary installation.
- case file:read_file_info(filename:join([code:root_dir(),
- "bin",
- "run_erl"])) of
- {ok, _} -> false;
- {error, _} -> true
+ [] ->
+ ok;
+ _ ->
+ Comment = lists:flatten(io_lib:format("Ignored applications: ~p "
+ "Ignored failures: ~p",
+ [IgnoreApps,
+ get(ignored_failures)])),
+ {comment, Comment}
end.
have_rdep(_App, [], _Dep) ->
@@ -504,11 +465,11 @@ have_rdep(_App, [], _Dep) ->
have_rdep(App, [RDep | RDeps], Dep) ->
[AppStr, _VsnStr] = string:tokens(RDep, "-"),
case Dep == list_to_atom(AppStr) of
- true ->
- io:format("~p -> ~s~n", [App, RDep]),
- true;
- false ->
- have_rdep(App, RDeps, Dep)
+ true ->
+ io:format("~p -> ~s~n", [App, RDep]),
+ true;
+ false ->
+ have_rdep(App, RDeps, Dep)
end.
check_app_deps(_App, _AppFile, _AFDeps, [], _IgnoreApps) ->
@@ -516,17 +477,17 @@ check_app_deps(_App, _AppFile, _AFDeps, [], _IgnoreApps) ->
check_app_deps(App, AppFile, AFDeps, [XRDep | XRDeps], IgnoreApps) ->
ResOtherDeps = check_app_deps(App, AppFile, AFDeps, XRDeps, IgnoreApps),
case have_rdep(App, AFDeps, XRDep) of
- true ->
- ResOtherDeps;
- false ->
- Failure = {missing_runtime_dependency, AppFile, XRDep},
- case lists:member(App, IgnoreApps) of
- true ->
- put(ignored_failures, [Failure | get(ignored_failures)]),
- ResOtherDeps;
- false ->
- [Failure | ResOtherDeps]
- end
+ true ->
+ ResOtherDeps;
+ false ->
+ Failure = {missing_runtime_dependency, AppFile, XRDep},
+ case lists:member(App, IgnoreApps) of
+ true ->
+ put(ignored_failures, [Failure | get(ignored_failures)]),
+ ResOtherDeps;
+ false ->
+ [Failure | ResOtherDeps]
+ end
end.
check_apps_deps([], _IgnoreApps) ->
@@ -536,24 +497,24 @@ check_apps_deps([{App, Deps}|AppDeps], IgnoreApps) ->
AppFile = code:where_is_file(atom_to_list(App) ++ ".app"),
{ok,[{application, App, Info}]} = file:consult(AppFile),
case lists:keyfind(runtime_dependencies, 1, Info) of
- {runtime_dependencies, RDeps} ->
- check_app_deps(App, AppFile, RDeps, Deps, IgnoreApps)
- ++ ResOtherApps;
- false ->
- Failure = {missing_runtime_dependencies_key, AppFile},
- case lists:member(App, IgnoreApps) of
- true ->
- put(ignored_failures, [Failure | get(ignored_failures)]),
- ResOtherApps;
- false ->
- [Failure | ResOtherApps]
- end
+ {runtime_dependencies, RDeps} ->
+ check_app_deps(App, AppFile, RDeps, Deps, IgnoreApps)
+ ++ ResOtherApps;
+ false ->
+ Failure = {missing_runtime_dependencies_key, AppFile},
+ case lists:member(App, IgnoreApps) of
+ true ->
+ put(ignored_failures, [Failure | get(ignored_failures)]),
+ ResOtherApps;
+ false ->
+ [Failure | ResOtherApps]
+ end
end.
%%%
%%% Common help functions.
%%%
-
+
print_mfas(Fd, Server, MFAs) ->
[io:format(Fd, "~s\n", [format_mfa(Server, MFA)]) || MFA <- MFAs],
ok.
@@ -565,13 +526,13 @@ format_mfa(Server, MFA) ->
MFAString = format_mfa(MFA),
AQ = "(App)" ++ MFAString,
AppPrefix = case xref:q(Server, AQ) of
- {ok,[App]} -> "[" ++ atom_to_list(App) ++ "]";
- _ -> ""
- end,
+ {ok,[App]} -> "[" ++ atom_to_list(App) ++ "]";
+ _ -> ""
+ end,
AppPrefix ++ MFAString.
open_log(Config, Name) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
RunDir = filename:dirname(filename:dirname(PrivDir)),
Path = filename:join(RunDir, "system_"++Name++".log"),
{ok,Fd} = file:open(Path, [write]),
@@ -582,13 +543,13 @@ close_log(Fd) ->
app_exists(AppAtom) ->
case code:lib_dir(AppAtom) of
- {error,bad_name} ->
- false;
- Path ->
- case file:read_file_info(filename:join(Path,"ebin")) of
- {ok,_} ->
- true;
- _ ->
- false
- end
+ {error,bad_name} ->
+ false;
+ Path ->
+ case file:read_file_info(filename:join(Path,"ebin")) of
+ {ok,_} ->
+ true;
+ _ ->
+ false
+ end
end.
diff --git a/erts/test/run_erl_SUITE.erl b/erts/test/run_erl_SUITE.erl
index e3c563d3d9..47d38bde7c 100644
--- a/erts/test/run_erl_SUITE.erl
+++ b/erts/test/run_erl_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,43 +20,19 @@
-module(run_erl_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,
- basic/1,heavy/1,heavier/1,defunct/1]).
+-export([all/0, suite/0]).
+-export([basic/1,heavy/1,heavier/1,defunct/1]).
-export([ping_me_back/1]).
-include_lib("common_test/include/ct.hrl").
-init_per_testcase(_Case, Config) ->
- Dog = ?t:timetrap(?t:minutes(2)),
- [{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, 2}}].
all() ->
[basic, heavy, heavier, defunct].
-groups() ->
- [].
-
-init_per_suite(Config) ->
- Config.
-
-end_per_suite(_Config) ->
- ok.
-
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
-
basic(Config) when is_list(Config) ->
case os:type() of
@@ -65,16 +41,16 @@ basic(Config) when is_list(Config) ->
end.
basic_1(Config) ->
- ?line {Node,Pipe} = do_run_erl(Config, "basic"),
+ {Node,Pipe} = do_run_erl(Config, "basic"),
- ?line ToErl = open_port({spawn,"to_erl "++Pipe}, []),
- ?line erlang:port_command(ToErl, "halt().\r\n"),
+ ToErl = open_port({spawn,"to_erl "++Pipe}, []),
+ erlang:port_command(ToErl, "halt().\r\n"),
receive
{nodedown,Node} ->
- ?line io:format("Down: ~p\n", [Node])
+ io:format("Down: ~p\n", [Node])
after 10000 ->
- ?line ?t:fail()
+ ct:fail(timeout)
end,
ok.
@@ -86,29 +62,28 @@ heavy(Config) when is_list(Config) ->
end.
heavy_1(Config) ->
- ?line {Node,Pipe} = do_run_erl(Config, "heavy"),
+ {Node,Pipe} = do_run_erl(Config, "heavy"),
- ?line ToErl = open_port({spawn,"to_erl "++Pipe}, []),
+ ToErl = open_port({spawn,"to_erl "++Pipe}, []),
IoFormat = "io:format(\"~s\n\", [lists:duplicate(10000, 10)]).\r\n",
- ?line erlang:port_command(ToErl, IoFormat),
- ?line erlang:port_command(ToErl, IoFormat),
- ?line erlang:port_command(ToErl, IoFormat),
- ?line erlang:port_command(ToErl, "init:stop().\r\n"),
+ erlang:port_command(ToErl, IoFormat),
+ erlang:port_command(ToErl, IoFormat),
+ erlang:port_command(ToErl, IoFormat),
+ erlang:port_command(ToErl, "init:stop().\r\n"),
receive
{nodedown,Node} ->
- ?line io:format("Down: ~p\n", [Node])
+ io:format("Down: ~p\n", [Node])
after 10000 ->
- ?line ?t:fail()
+ ct:fail(timeout)
end,
- ?line case count_new_lines(ToErl, 0) of
- Nls when Nls > 30000 ->
- ok;
- Nls ->
- ?line io:format("new_lines: ~p\n", [Nls]),
- ?line ?t:fail()
- end.
+ case count_new_lines(ToErl, 0) of
+ Nls when Nls > 30000 ->
+ ok;
+ Nls ->
+ ct:fail("new_lines: ~p\n", [Nls])
+ end.
ping_me_back([Node]) when is_atom(Node) ->
@@ -137,16 +112,16 @@ heavier(Config) when is_list(Config) ->
end.
heavier_1(Config) ->
- ?line {Node,Pipe} = do_run_erl(Config, "heavier"),
+ {Node,Pipe} = do_run_erl(Config, "heavier"),
- ?line ToErl = open_port({spawn,"to_erl "++Pipe}, []),
+ ToErl = open_port({spawn,"to_erl "++Pipe}, []),
io:format("ToErl = ~p\n", [ToErl]),
Seed = {1,555,42},
rand:seed(exsplus, Seed),
SeedCmd = lists:flatten(io_lib:format("rand:seed(exsplus, ~p). \r\n",
[Seed])),
- ?line io:format("~p\n", [SeedCmd]),
- ?line erlang:port_command(ToErl, SeedCmd),
+ io:format("~p\n", [SeedCmd]),
+ erlang:port_command(ToErl, SeedCmd),
Iter = 1000,
MaxLen = 2048,
@@ -165,19 +140,19 @@ heavier_1(Config) ->
"F(F,"++integer_to_list(Iter)++")."++" \r\n",
- ?line io:format("~p\n", [Random]),
- ?line erlang:port_command(ToErl, Random),
+ io:format("~p\n", [Random]),
+ erlang:port_command(ToErl, Random),
%% Finish.
- ?line erlang:port_command(ToErl, "init:stop().\r\n"),
- ?line receive_all(Iter, ToErl, MaxLen),
+ erlang:port_command(ToErl, "init:stop().\r\n"),
+ receive_all(Iter, ToErl, MaxLen),
receive
{nodedown,Node} ->
- ?line io:format("Down: ~p\n", [Node])
+ io:format("Down: ~p\n", [Node])
after 10000 ->
- ?line c:flush(),
- ?line ?t:fail()
+ c:flush(),
+ ct:fail(timeout)
end,
ok.
@@ -204,9 +179,7 @@ receive_all_2(Iter, {NumChars,Pattern}, Line0, ToErl, MaxLen) ->
%%io:format("Recv: ~p\n", [S]),
receive_all_2(Iter, {NumChars,Pattern}, Line++S, ToErl, MaxLen)
after 10000 ->
- io:format("Timeout waiting for\n~p\ngot\n~p\n",
- [Pattern, Line]),
- ?line ?t:fail()
+ ct:fail("Timeout waiting for\n~p\ngot\n~p\n", [Pattern, Line])
end
end.
@@ -241,49 +214,47 @@ defunct_1(Config) ->
end.
defunct_2(Config, Perl) ->
- ?line Data = ?config(data_dir, Config),
- ?line RunErlTest = filename:join(Data, "run_erl_test.pl"),
- ?line Defuncter = filename:join(Data, "defuncter.pl"),
- ?line Priv = ?config(priv_dir, Config),
- ?line LogDir = filename:join(Priv, "defunct"),
- ?line ok = file:make_dir(LogDir),
- ?line Pipe = LogDir ++ "/",
- ?line RunErl = os:find_executable(run_erl),
- ?line Cmd = Perl ++ " " ++ RunErlTest ++ " \"" ++ RunErl ++ "\" " ++
+ Data = proplists:get_value(data_dir, Config),
+ RunErlTest = filename:join(Data, "run_erl_test.pl"),
+ Defuncter = filename:join(Data, "defuncter.pl"),
+ Priv = proplists:get_value(priv_dir, Config),
+ LogDir = filename:join(Priv, "defunct"),
+ ok = file:make_dir(LogDir),
+ Pipe = LogDir ++ "/",
+ RunErl = os:find_executable(run_erl),
+ Cmd = Perl ++ " " ++ RunErlTest ++ " \"" ++ RunErl ++ "\" " ++
Defuncter ++ " " ++ Pipe ++ " " ++ LogDir,
- ?line io:format("~p", [Cmd]),
- ?line Res = os:cmd(Cmd),
- ?line io:format("~p\n", [Res]),
+ io:format("~p", [Cmd]),
+ Res = os:cmd(Cmd),
+ io:format("~p\n", [Res]),
"OK"++_ = Res,
ok.
%%% Utilities.
do_run_erl(Config, Case) ->
- ?line Priv = ?config(priv_dir, Config),
- ?line LogDir = filename:join(Priv, Case),
- ?line ok = file:make_dir(LogDir),
- ?line Pipe = LogDir ++ "/",
- ?line NodeName = "run_erl_node_" ++ Case,
- ?line Cmd = "run_erl "++Pipe++" "++LogDir++" \"erl -sname " ++ NodeName ++
+ Priv = proplists:get_value(priv_dir, Config),
+ LogDir = filename:join(Priv, Case),
+ ok = file:make_dir(LogDir),
+ Pipe = LogDir ++ "/",
+ NodeName = "run_erl_node_" ++ Case,
+ Cmd = "run_erl "++Pipe++" "++LogDir++" \"erl -sname " ++ NodeName ++
" -pa " ++ filename:dirname(code:which(?MODULE)) ++
" -s " ++ ?MODULE_STRING ++ " ping_me_back " ++
atom_to_list(node()) ++ "\"",
- ?line io:format("~p\n", [Cmd]),
+ io:format("~p\n", [Cmd]),
- ?line net_kernel:monitor_nodes(true),
- ?line open_port({spawn,Cmd}, []),
- ?line [_,Host] = string:tokens(atom_to_list(node()), "@"),
- ?line Node = list_to_atom(NodeName++"@"++Host),
+ net_kernel:monitor_nodes(true),
+ open_port({spawn,Cmd}, []),
+ [_,Host] = string:tokens(atom_to_list(node()), "@"),
+ Node = list_to_atom(NodeName++"@"++Host),
receive
{nodeup,Node} ->
- ?line io:format("Up: ~p\n", [Node]);
+ io:format("Up: ~p\n", [Node]);
Other ->
- ?line io:format("Unexpected: ~p\n", [Other]),
- ?line ?t:fail()
+ ct:fail("Unexpected: ~p\n", [Other])
after 10000 ->
- ?line ?t:fail()
+ ct:fail(timeout)
end,
-
{Node,Pipe}.
diff --git a/erts/test/run_erl_SUITE_data/defuncter.pl b/erts/test/run_erl_SUITE_data/defuncter.pl
index 666d4cca41..0b6771a8bb 100644
--- a/erts/test/run_erl_SUITE_data/defuncter.pl
+++ b/erts/test/run_erl_SUITE_data/defuncter.pl
@@ -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/erts/test/run_erl_SUITE_data/run_erl_test.pl b/erts/test/run_erl_SUITE_data/run_erl_test.pl
index b9e3f0a363..9560fa3c14 100644
--- a/erts/test/run_erl_SUITE_data/run_erl_test.pl
+++ b/erts/test/run_erl_SUITE_data/run_erl_test.pl
@@ -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/erts/test/upgrade_SUITE.erl b/erts/test/upgrade_SUITE.erl
index 83cd2359d8..174c028ac7 100644
--- a/erts/test/upgrade_SUITE.erl
+++ b/erts/test/upgrade_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.
@@ -50,12 +50,12 @@ init_per_suite(Config) ->
%% Fake release, no applications
{skip, "Need a real release running to create other releases"};
_ ->
- rm_rf(filename:join([?config(data_dir,Config),priv_dir])),
+ rm_rf(filename:join([proplists:get_value(data_dir,Config),priv_dir])),
Config
end.
init_per_testcase(Case,Config) ->
- PrivDir = filename:join([?config(data_dir,Config),priv_dir,Case]),
+ PrivDir = filename:join([proplists:get_value(data_dir,Config),priv_dir,Case]),
CreateDir = filename:join([PrivDir,create]),
InstallDir = filename:join([PrivDir,install]),
ok = filelib:ensure_dir(filename:join(CreateDir,"*")),
@@ -66,10 +66,10 @@ init_per_testcase(Case,Config) ->
end_per_testcase(_Case,Config) ->
Nodes = nodes(),
[test_server:stop_node(Node) || Node <- Nodes],
- case ?config(tc_status,Config) of
+ case proplists:get_value(tc_status,Config) of
ok ->
%% Note that priv_dir here is per test case!
- rm_rf(?config(priv_dir,Config));
+ rm_rf(proplists:get_value(priv_dir,Config));
_fail ->
%% Test case data can be found under DataDir/priv_dir/Case
ok
@@ -115,15 +115,15 @@ upgrade_test(FromVsn,ToVsn,Config) ->
case OldRel of
false ->
%% Note that priv_dir here is per test case!
- rm_rf(?config(priv_dir,Config)),
+ rm_rf(proplists:get_value(priv_dir,Config)),
{skip, "no previous release available"};
_ ->
upgrade_test1(FromVsn,ToVsn,[{old_rel,OldRel}|Config])
end.
upgrade_test1(FromVsn,ToVsn,Config) ->
- CreateDir = ?config(create_dir,Config),
- InstallDir = ?config(install_dir,Config),
+ CreateDir = proplists:get_value(create_dir,Config),
+ InstallDir = proplists:get_value(install_dir,Config),
FromRelName = "otp-"++FromVsn,
ToRelName = "otp-"++ToVsn,
@@ -141,7 +141,7 @@ upgrade_test1(FromVsn,ToVsn,Config) ->
%%% - chmod 'start' and 'start_erl'
target_system(RelName0,RelVsn,CreateDir,InstallDir,Config) ->
{ok,Node} = test_server:start_node(list_to_atom(RelName0),peer,
- [{erl,[?config(old_rel,Config)]}]),
+ [{erl,[proplists:get_value(old_rel,Config)]}]),
{RelName,Apps,ErtsVsn} = create_relfile(Node,CreateDir,RelName0,RelVsn),
@@ -184,7 +184,7 @@ target_system(RelName0,RelVsn,CreateDir,InstallDir,Config) ->
write_file(SysConfig, "[]."),
%% Insert 'start' script from data_dir - modified to add sname and heart
- copy_file(filename:join(?config(data_dir,Config),"start.src"),
+ copy_file(filename:join(proplists:get_value(data_dir,Config),"start.src"),
filename:join(ErtsBinDir,"start.src")),
ok = file:change_mode(filename:join(ErtsBinDir,"start.src"),8#0755),
diff --git a/erts/test/upgrade_SUITE_data/start.src b/erts/test/upgrade_SUITE_data/start.src
index 7098a6919a..67d8de8c9e 100644
--- a/erts/test/upgrade_SUITE_data/start.src
+++ b/erts/test/upgrade_SUITE_data/start.src
@@ -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/erts/test/utils/gccifier.c b/erts/test/utils/gccifier.c
index ca022eb390..0c3ef915fb 100644
--- a/erts/test/utils/gccifier.c
+++ b/erts/test/utils/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/erts/test/utils/gccifier.sh b/erts/test/utils/gccifier.sh
index 24b4d2f335..9311e34300 100755
--- a/erts/test/utils/gccifier.sh
+++ b/erts/test/utils/gccifier.sh
@@ -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/erts/test/z_SUITE.erl b/erts/test/z_SUITE.erl
index 7f3260e4cb..281a47134f 100644
--- a/erts/test/z_SUITE.erl
+++ b/erts/test/z_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.
@@ -24,8 +24,6 @@
%% This suite expects to be run as the last suite of all suites.
%%
-%-define(line_trace, 1).
-
-include_lib("kernel/include/file.hrl").
-record(core_search_conf, {search_dir,
@@ -34,52 +32,19 @@
file,
run_by_ts}).
--define(DEFAULT_TIMEOUT, ?t:minutes(5)).
-
--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([search_for_core_files/1, core_files/1]).
-include_lib("common_test/include/ct.hrl").
-
-init_per_testcase(Case, Config) ->
- Dog = ?t:timetrap(?DEFAULT_TIMEOUT),
- [{testcase, Case}, {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, 5}}].
all() ->
[core_files].
-groups() ->
- [].
-
-init_per_suite(Config) ->
- Config.
-
-end_per_suite(_Config) ->
- ok.
-
-init_per_group(_GroupName, Config) ->
- Config.
-
-end_per_group(_GroupName, Config) ->
- Config.
-
-
-
-core_files(doc) ->
- [];
-core_files(suite) ->
- [];
core_files(Config) when is_list(Config) ->
case os:type() of
{win32, _} ->
@@ -354,7 +319,7 @@ core_file_search(#core_search_conf{search_dir = Base,
case {RunByTS, ICores, FCores} of
{true, [], []} -> ok;
{true, _, []} -> {comment, Res};
- {true, _, _} -> ?t:fail(Res);
+ {true, _, _} -> ct:fail(Res);
_ -> Res
end
end.
diff --git a/erts/vsn.mk b/erts/vsn.mk
index 9e4248a668..6ad3680213 100644
--- a/erts/vsn.mk
+++ b/erts/vsn.mk
@@ -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/Makefile b/lib/Makefile
index 82c7cb6e18..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.
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 e0d4f09a70..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.
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 315c472465..7af6ad72d2 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,33 @@
<p>This document describes the changes made to the asn1 application.</p>
+<section><title>Asn1 4.0.2</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ When compiling to the PER format, the ASN.1 compiler
+ would crash when attempting to compile an ASN.1 module
+ with a constrained INTEGER with more than 65536 values
+ and named values. (Thanks to Ingars for reporting this
+ bug.)</p>
+ <p>
+ Own Id: OTP-13257</p>
+ </item>
+ <item>
+ <p>The ASN.1 compiler will now emit Dialyzer suppressions
+ for improper lists. Thus, there is no longer any need to
+ use <c>--Wno_improper_lists</c> when analyzing modules
+ generated by the ASN.1 compiler.</p>
+ <p>
+ Own Id: OTP-13324</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
<section><title>Asn1 4.0.1</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 61a5661a11..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.
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 d392055458..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.
@@ -34,7 +34,9 @@
%% 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}]),
@@ -628,12 +627,22 @@ ber_other(Config, Rule, Opts) ->
der(Config) ->
asn1_test_lib:compile_all(ber_modules(), Config, [der]).
-module_test(M, Config, Rule, Opts) ->
- asn1_test_lib:compile(M, Config, [Rule|Opts]),
- case asn1ct:test(list_to_atom(M), [{i, ?config(case_dir, Config)}]) of
- ok -> ok;
- Error ->
- erlang:error({test_failed, M, Opts, Error})
+module_test(M0, Config, Rule, Opts) ->
+ asn1_test_lib:compile(M0, Config, [Rule|Opts]),
+ case list_to_atom(M0) of
+ 'LDAP' ->
+ %% Because of the recursive definition of 'Filter' in
+ %% the LDAP module, the construction of a sample
+ %% value for 'Filter' is not guaranteed to terminate.
+ ok;
+ M ->
+ TestOpts = [{i, proplists:get_value(case_dir, Config)}],
+ case asn1ct:test(M, TestOpts) of
+ ok ->
+ ok;
+ Error ->
+ erlang:error({test_failed, M, Opts, Error})
+ end
end.
@@ -758,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).
@@ -983,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
@@ -1126,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
@@ -1162,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 65716bb0dc..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.
@@ -45,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]}}) ->
@@ -65,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 dbb2600b41..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,6 +21,7 @@
-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,
@@ -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 caae845592..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.
@@ -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 566abd9714..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.
diff --git a/lib/asn1/test/syntax_SUITE.erl b/lib/asn1/test/syntax_SUITE.erl
index a354b75062..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.
@@ -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 f4dc00b33c..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.
diff --git a/lib/asn1/test/testChoExternal.erl b/lib/asn1/test/testChoExternal.erl
index fd9bcf4406..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.
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 14518285aa..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.
diff --git a/lib/asn1/test/testChoRecursive.erl b/lib/asn1/test/testChoRecursive.erl
index 040aeabe48..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.
diff --git a/lib/asn1/test/testChoTypeRefCho.erl b/lib/asn1/test/testChoTypeRefCho.erl
index b0a9fd68bd..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.
diff --git a/lib/asn1/test/testChoTypeRefPrim.erl b/lib/asn1/test/testChoTypeRefPrim.erl
index 59d23a8683..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.
diff --git a/lib/asn1/test/testChoTypeRefSeq.erl b/lib/asn1/test/testChoTypeRefSeq.erl
index 87c94fc888..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.
diff --git a/lib/asn1/test/testChoTypeRefSet.erl b/lib/asn1/test/testChoTypeRefSet.erl
index d2ff48af91..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.
diff --git a/lib/asn1/test/testChoiceIndefinite.erl b/lib/asn1/test/testChoiceIndefinite.erl
index f5ae3ff882..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.
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 7da3ea3d38..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.
diff --git a/lib/asn1/test/testContextSwitchingTypes.erl b/lib/asn1/test/testContextSwitchingTypes.erl
index 3779f61f2f..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.
@@ -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 edaaa12eba..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.
diff --git a/lib/asn1/test/testDeepTConstr.erl b/lib/asn1/test/testDeepTConstr.erl
index ed37df7204..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.
diff --git a/lib/asn1/test/testDef.erl b/lib/asn1/test/testDef.erl
index 5fa5711473..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.
diff --git a/lib/asn1/test/testDoubleEllipses.erl b/lib/asn1/test/testDoubleEllipses.erl
index 4a054a14ed..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.
diff --git a/lib/asn1/test/testEnumExt.erl b/lib/asn1/test/testEnumExt.erl
index 057fcb694b..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.
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 b9079d8e95..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.
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 a7d0f2b6bd..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.
diff --git a/lib/asn1/test/testMegaco.erl b/lib/asn1/test/testMegaco.erl
index 61794ec02d..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.
@@ -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 5011c7d576..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.
@@ -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 2a7e39597a..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.
@@ -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 fc2f2a81e6..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.
diff --git a/lib/asn1/test/testOpt.erl b/lib/asn1/test/testOpt.erl
index a15aa28f02..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.
diff --git a/lib/asn1/test/testParamBasic.erl b/lib/asn1/test/testParamBasic.erl
index 768c5ad2fa..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.
diff --git a/lib/asn1/test/testParameterizedInfObj.erl b/lib/asn1/test/testParameterizedInfObj.erl
index 8b0353522d..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.
@@ -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 82da953ca1..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.
diff --git a/lib/asn1/test/testPrimExternal.erl b/lib/asn1/test/testPrimExternal.erl
index 79c8a3a045..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.
diff --git a/lib/asn1/test/testPrimStrings.erl b/lib/asn1/test/testPrimStrings.erl
index 042b1757ba..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.
diff --git a/lib/asn1/test/testRfcs.erl b/lib/asn1/test/testRfcs.erl
index fa4389b904..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.
@@ -27,11 +27,11 @@
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 7dc7eedd50..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.
@@ -26,8 +26,8 @@
-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 7039f6da4e..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.
diff --git a/lib/asn1/test/testSeq2738.erl b/lib/asn1/test/testSeq2738.erl
index a75d058259..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.
diff --git a/lib/asn1/test/testSeqDefault.erl b/lib/asn1/test/testSeqDefault.erl
index ac3cf202b7..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.
diff --git a/lib/asn1/test/testSeqExtension.erl b/lib/asn1/test/testSeqExtension.erl
index a84b6fb27c..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.
diff --git a/lib/asn1/test/testSeqExternal.erl b/lib/asn1/test/testSeqExternal.erl
index 9ad2c03208..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.
diff --git a/lib/asn1/test/testSeqOf.erl b/lib/asn1/test/testSeqOf.erl
index f4a4181f51..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.
diff --git a/lib/asn1/test/testSeqOfCho.erl b/lib/asn1/test/testSeqOfCho.erl
index 7bd1ce7aa6..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.
diff --git a/lib/asn1/test/testSeqOfExternal.erl b/lib/asn1/test/testSeqOfExternal.erl
index de95e081d5..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.
diff --git a/lib/asn1/test/testSeqOfIndefinite.erl b/lib/asn1/test/testSeqOfIndefinite.erl
index bebd516c5c..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.
@@ -25,13 +25,13 @@
-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 cacbc85093..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.
diff --git a/lib/asn1/test/testSeqOptional.erl b/lib/asn1/test/testSeqOptional.erl
index 92b49e9c0d..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.
diff --git a/lib/asn1/test/testSeqPrim.erl b/lib/asn1/test/testSeqPrim.erl
index 5872902ce7..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.
diff --git a/lib/asn1/test/testSeqSetDefaultVal.erl b/lib/asn1/test/testSeqSetDefaultVal.erl
index 1c41f64078..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.
diff --git a/lib/asn1/test/testSeqSetIndefinite.erl b/lib/asn1/test/testSeqSetIndefinite.erl
index 41e09f7796..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.
diff --git a/lib/asn1/test/testSeqTag.erl b/lib/asn1/test/testSeqTag.erl
index 6959e2f7e2..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.
diff --git a/lib/asn1/test/testSeqTypeRefCho.erl b/lib/asn1/test/testSeqTypeRefCho.erl
index 4a9ba53291..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.
diff --git a/lib/asn1/test/testSeqTypeRefPrim.erl b/lib/asn1/test/testSeqTypeRefPrim.erl
index e0c3277156..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.
diff --git a/lib/asn1/test/testSeqTypeRefSeq.erl b/lib/asn1/test/testSeqTypeRefSeq.erl
index befbe5f457..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.
diff --git a/lib/asn1/test/testSeqTypeRefSet.erl b/lib/asn1/test/testSeqTypeRefSet.erl
index 48c94a8b06..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.
diff --git a/lib/asn1/test/testSetDefault.erl b/lib/asn1/test/testSetDefault.erl
index e91a526add..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.
diff --git a/lib/asn1/test/testSetExtension.erl b/lib/asn1/test/testSetExtension.erl
index 89f27a7fef..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.
diff --git a/lib/asn1/test/testSetExternal.erl b/lib/asn1/test/testSetExternal.erl
index f5d01e23a8..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.
diff --git a/lib/asn1/test/testSetOf.erl b/lib/asn1/test/testSetOf.erl
index 02009dc8d5..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.
diff --git a/lib/asn1/test/testSetOfCho.erl b/lib/asn1/test/testSetOfCho.erl
index be199b4688..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.
diff --git a/lib/asn1/test/testSetOfExternal.erl b/lib/asn1/test/testSetOfExternal.erl
index 7abed66167..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.
diff --git a/lib/asn1/test/testSetOfTag.erl b/lib/asn1/test/testSetOfTag.erl
index ce77e2848f..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.
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 47913178f3..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.
diff --git a/lib/asn1/test/testSetTag.erl b/lib/asn1/test/testSetTag.erl
index 2e95fb6793..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.
diff --git a/lib/asn1/test/testSetTypeRefCho.erl b/lib/asn1/test/testSetTypeRefCho.erl
index ac5bf5ab02..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.
diff --git a/lib/asn1/test/testSetTypeRefPrim.erl b/lib/asn1/test/testSetTypeRefPrim.erl
index 51190e2ba4..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.
diff --git a/lib/asn1/test/testSetTypeRefSeq.erl b/lib/asn1/test/testSetTypeRefSeq.erl
index 44a7910526..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.
diff --git a/lib/asn1/test/testSetTypeRefSet.erl b/lib/asn1/test/testSetTypeRefSet.erl
index 7a67e6434c..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.
diff --git a/lib/asn1/test/testTCAP.erl b/lib/asn1/test/testTCAP.erl
index 6e777875f6..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.
@@ -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 6fecee3d78..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.
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 1af614f49a..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.
@@ -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 c0a32e2a37..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.
@@ -24,7 +24,7 @@
-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 64f2ce22ae..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.
@@ -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 d7870057a8..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.
diff --git a/lib/asn1/test/test_special_decode_performance.erl b/lib/asn1/test/test_special_decode_performance.erl
index 6cf7ee2805..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.
@@ -27,29 +27,29 @@
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 77147d59cc..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.
@@ -29,7 +29,7 @@
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 8ef62960ff..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.
diff --git a/lib/asn1/vsn.mk b/lib/asn1/vsn.mk
index 87a229424c..ab2c127ca2 100644
--- a/lib/asn1/vsn.mk
+++ b/lib/asn1/vsn.mk
@@ -1 +1 @@
-ASN1_VSN = 4.0.1
+ASN1_VSN = 4.0.2
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 cedddd75ac..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.
@@ -36,26 +36,24 @@ RELSYSDIR = $(RELEASE_PATH)/lib/$(APPLICATION)-$(VSN)
# Target Specs
# ----------------------------------------------------
-# REMEMBER: links to HTML files for these modules in ref_man.xml
-CT_MODULES = \
- ct \
- ct_master \
- ct_cover \
- ct_telnet \
- ct_ftp \
- ct_ssh \
- ct_rpc \
- ct_snmp \
- unix_telnet \
- ct_slave \
- ct_property_test \
- ct_netconfc
-
CT_XML_FILES = $(CT_MODULES:=.xml)
XML_APPLICATION_FILES = ref_man.xml
XML_REF1_FILES = ct_run.xml
-XML_REF3_FILES = $(CT_XML_FILES) ct_hooks.xml
+# REMEMBER: links to HTML files for these modules in ref_man.xml
+XML_REF3_FILES = ct.xml \
+ ct_master.xml \
+ ct_cover.xml \
+ ct_telnet.xml \
+ ct_ftp.xml \
+ ct_ssh.xml \
+ ct_rpc.xml \
+ ct_snmp.xml \
+ unix_telnet.xml \
+ ct_slave.xml \
+ ct_property_test.xml \
+ ct_netconfc.xml \
+ ct_hooks.xml
XML_REF6_FILES = common_test_app.xml
XML_PART_FILES = part.xml
@@ -80,8 +78,6 @@ XML_CHAPTER_FILES = \
notes.xml \
notes_history.xml
-MAKE_EDOC = make_edoc
-
BOOK_FILES = book.xml
GIF_FILES = \
@@ -92,7 +88,7 @@ GIF_FILES = \
INSTALL_NOTES = ../../notes.html
XML_FILES=$(XML_APPLICATION_FILES) $(XML_REF1_FILES) $(XML_REF3_FILES) $(XML_REF6_FILES) \
- $(XML_PART_FILES) $(XML_CHAPTER_FILES) $(XML_REF_FILES) $(BOOK_FILES)
+ $(XML_PART_FILES) $(XML_CHAPTER_FILES) $(BOOK_FILES)
# ----------------------------------------------------
@@ -119,19 +115,11 @@ DVIPS_FLAGS +=
# Targets
# ----------------------------------------------------
-CT_SRC_DIR = $(ERL_TOP)/../internal_tools/common_test/src
-
$(HTMLDIR)/%.gif: %.gif
$(INSTALL_DATA) $< $@
docs: pdf html man
-$(CT_XML_FILES): %.xml: ../../src/%.erl
- escript $(DOCGEN)/priv/bin/xml_from_edoc.escript -preprocess true -i $(XMERL_DIR)/include \
- -i ../../../test_server/include -i ../../include \
- -i ../../../../erts/lib/kernel/include -i ../../../../lib/kernel/include \
- -i ../../../../erts/lib/snmp/include -i ../../../../lib/snmp/include ../../src/$(@:%.xml=%.erl)
-
$(TOP_PDF_FILE): $(XML_FILES)
pdf: $(TOP_PDF_FILE)
@@ -146,7 +134,6 @@ man: $(MAN6_FILES) $(MAN3_FILES) $(MAN1_FILES)
debug opt:
clean clean_docs:
- rm -f $(CT_XML_FILES)
rm -rf $(HTMLDIR)/*
rm -f $(MAN1DIR)/*
rm -f $(MAN3DIR)/*
diff --git a/lib/common_test/doc/src/basics_chapter.xml b/lib/common_test/doc/src/basics_chapter.xml
index a01e3a9272..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>
@@ -31,74 +31,74 @@
</header>
<marker id="basics"></marker>
<section>
- <title>Introduction</title>
+ <title>General</title>
- <p>The <em>Common Test</em> framework (CT) is a tool which supports
- implementation and automated execution of test cases towards arbitrary
- types of target systems. The CT framework is based on the OTP Test
- Server and it's the main tool being used in all testing- and verification
- activities that are part of Erlang/OTP system development- and maintenance.
+ <p>The <c>Common Test</c> framework is a tool that supports
+ implementation and automated execution of test cases to any
+ types of target systems. <c>Common Test</c> is the main tool being used
+ in all testing- and verification activities that are part of Erlang/OTP
+ system development and maintenance.
</p>
- <p>Test cases can be executed individually or in batches. Common Test
- also features a distributed testing mode with central control and logging
- (a feature that makes it possible to test multiple systems independently in
- one common session, useful e.g. for running automated large-scale regression
- tests).
+ <p>Test cases can be executed individually or in batches. <c>Common Test</c>
+ also features a distributed testing mode with central control and logging.
+ With this feature, multiple systems can be tested independently in
+ one common session. This is useful, for example, when running automated
+ large-scale regression tests.
</p>
<p>
- The SUT (System Under Test) may consist of one or several target
- nodes. CT contains a generic test server which, together with
- other test utilities, is used to perform test case execution.
- It is possible to start the tests from a GUI or from the OS- or
+ The System Under Test (SUT) can consist of one or more target
+ nodes. <c>Common Test</c> contains a generic test server that,
+ together with other test utilities, is used to perform test case execution.
+ The tests can be started from a GUI, from the OS shell, or from an
Erlang shell. <em>Test suites</em> are files (Erlang
modules) that contain the <em>test cases</em> (Erlang functions)
to be executed. <em>Support modules</em> provide functions
- that the test cases utilize in order to carry out the tests.
+ that the test cases use to do the tests.
</p>
- <p>In a black-box testing scenario, CT based test programs connect to
- the target system(s) via standard O&amp;M and CLI protocols. CT
+ <p>In a black-box testing scenario, <c>Common Test</c>-based test programs connect to
+ the target system(s) through standard O&amp;M and CLI protocols. <c>Common Test</c>
provides implementations of, and wrapper interfaces to, some of these
- protocols (most of which exist as stand-alone components and
+ protocols (most of which exist as standalone components and
applications in OTP). The wrappers simplify configuration and add
- verbosity for logging purposes. CT will be continously extended with
- useful support modules. (Note however that it's
- a straightforward task to use any arbitrary Erlang/OTP component
- for testing purposes with Common Test, without needing a CT wrapper
- for it. It's as simple as calling Erlang functions). There
- are a number of target independent interfaces supported in CT, such as
- Generic Telnet, FTP, etc, which can be specialized or used
- directly for controlling instruments, traffic load generators, etc.
+ verbosity for logging purposes. <c>Common Test</c> is continously extended with
+ useful support modules. However, notice that it is
+ a straightforward task to use any Erlang/OTP component
+ for testing purposes with <c>Common Test</c>, without needing a <c>Common Test</c>
+ wrapper for it. It is as simple as calling Erlang functions. A number of
+ target-independent interfaces are supported in <c>Common Test</c>, such as
+ Generic Telnet and FTP. These can be specialized or used
+ directly for controlling instruments, traffic load generators, and so on.
</p>
- <p>Common Test is also a very useful tool for white-box testing Erlang
- code (e.g. module testing), since the test programs can call exported Erlang
- functions directly and there's very little overhead required for
+ <p><c>Common Test</c> is also a very useful tool for white-box testing Erlang
+ code (for example, module testing), as the test programs can call exported Erlang
+ functions directly. there is very little overhead required for
implementing basic test suites and executing simple tests. For black-box
- testing Erlang software, Erlang RPC as well as standard O&amp;M interfaces
- can for example be used.
+ testing Erlang software, Erlang RPC and standard O&amp;M interfaces
+ can be used for example.
</p>
- <p>A test case can handle several connections towards one or
- several target systems, instruments and traffic generators in
- parallel in order to perform the necessary actions for a
- test. The handling of many connections in parallel is one of
- the major strengths of Common Test (thanks to the efficient
- support for concurrency in the Erlang runtime system - which CT users
- can take great advantage of!).
+ <p>A test case can handle several connections to one or
+ more target systems, instruments, and traffic generators in
+ parallel to perform the necessary actions for a test.
+ The handling of many connections in parallel is one of
+ the major strengths of <c>Common Test</c>, thanks to the efficient
+ support for concurrency in the Erlang runtime system, which <c>Common Test</c>
+ users can take great advantage of.
</p>
</section>
<section>
<title>Test Suite Organisation</title>
<p>
- The test suites are organized in test directories and each test suite
- may have a separate data directory. Typically, these files and directories
- are version controlled similarly to other forms of source code (possibly by
- means of a version control system like GIT or Subversion). However, CT does
- not itself put any requirements on (or has any form of awareness of)
+ Test suites are organized in test directories and each test suite
+ can have a separate data directory. Typically, these files and directories
+ are version-controlled similar to other forms of source code (possibly by
+ a version control system like GIT or Subversion). However, <c>Common Test</c>
+ does not itself put any requirements on (or has any awareness of)
possible file and directory versions.
</p>
</section>
@@ -109,8 +109,8 @@
Support libraries contain functions that are useful for all test suites,
or for test suites in a specific functional area or subsystem.
In addition to the general support libraries provided by the
- CT framework, and the various libraries and applications provided by
- Erlang/OTP, there might also be a need for customized (user specific)
+ <c>Common Test</c> framework, and the various libraries and applications provided by
+ Erlang/OTP, there can also be a need for customized (user specific)
support libraries.
</p>
</section>
@@ -121,118 +121,122 @@
Testing is performed by running test suites (sets of test cases) or
individual test cases. A test suite is implemented as an Erlang module named
<c><![CDATA[<suite_name>_SUITE.erl]]></c> which contains a number of test cases.
- A test case is an Erlang function which tests one or more things.
- The test case is the smallest unit that the CT test server deals with.
+ A test case is an Erlang function that tests one or more things.
+ The test case is the smallest unit that the <c>Common Test</c> test server deals with.
</p>
<p>
- Subsets of test cases, called test case groups, may also be defined. A test case
+ Subsets of test cases, called test case groups, can also be defined. A test case
group can have execution properties associated with it. Execution properties
- specify whether the test cases in the group should be executed in
- random order, in parallel, in sequence, and if the execution of the group
- should be repeated. Test case groups may also be nested (i.e. a group may,
- besides test cases, contain sub-groups).
+ specify if the test cases in the group are to be executed in
+ random order, in parallel, or in sequence, and if the execution of the group
+ is to be repeated. Test case groups can also be nested (that is, a group can,
+ besides test cases, contain subgroups).
</p>
<p>
- Besides test cases and groups, the test suite may also contain configuration
+ Besides test cases and groups, the test suite can also contain configuration
functions. These functions are meant to be used for setting up (and verifying)
- environment and state on the SUT (and/or the CT host node), required for
- the tests to execute correctly. Examples of operations: Opening a connection
- to the SUT, initializing a database, running an installation script, etc.
- Configuration may be performed per suite, per test case group and per
- individual test case.
+ environment and state in the SUT (and/or the <c>Common Test</c> host node),
+ required for the tests to execute correctly. Examples of operations are:
+ Opening a connection to the SUT, initializing a database, running an installation
+ script, and so on. Configuration can be performed per suite, per test case group,
+ and per individual test case.
</p>
<p>
The test suite module must conform to a
<seealso marker="common_test">callback interface</seealso>
- specified by the CT test server. See the
- <seealso marker="write_test_chapter#intro">Writing Test Suites</seealso> chapter
- for more information.
+ specified by the <c>Common Test</c> test server. For details, see section
+ <seealso marker="write_test_chapter#intro">Writing Test Suites</seealso>.
</p>
<p>
A test case is considered successful if it returns to the caller, no matter
- what the returned value is. A few return values have special meaning however
- (such as <c>{skip,Reason}</c> which indicates that the test case is skipped,
- <c>{comment,Comment}</c> which prints a comment in the log for the test case and
- <c>{save_config,Config}</c> which makes the CT test server pass <c>Config</c> to
- the next test case).
+ what the returned value is. However, a few return values have special meaning
+ as follows:</p>
+ <list type="bulleted">
+ <item><c>{skip,Reason}</c> indicates that the test case is skipped.</item>
+ <item><c>{comment,Comment}</c> prints a comment in the log for the test case.</item>
+ <item><c>{save_config,Config}</c> makes the <c>Common Test</c> test server pass
+ <c>Config</c> to the next test case.</item>
+ </list>
+ <p>
A test case failure is specified as a runtime error (a crash), no matter what
the reason for termination is. If you use Erlang pattern matching effectively,
- you can take advantage of this property. The result will be concise and
+ you can take advantage of this property. The result is concise and
readable test case functions that look much more like scripts than actual programs.
- Simple example:
+ A simple example:
</p>
<pre>
- session(_Config) ->
- {started,ServerId} = my_server:start(),
- {clients,[]} = my_server:get_clients(ServerId),
- MyId = self(),
- connected = my_server:connect(ServerId, MyId),
- {clients,[MyId]} = my_server:get_clients(ServerId),
- disconnected = my_server:disconnect(ServerId, MyId),
- {clients,[]} = my_server:get_clients(ServerId),
- stopped = my_server:stop(ServerId).
- </pre>
+ session(_Config) ->
+ {started,ServerId} = my_server:start(),
+ {clients,[]} = my_server:get_clients(ServerId),
+ MyId = self(),
+ connected = my_server:connect(ServerId, MyId),
+ {clients,[MyId]} = my_server:get_clients(ServerId),
+ disconnected = my_server:disconnect(ServerId, MyId),
+ {clients,[]} = my_server:get_clients(ServerId),
+ stopped = my_server:stop(ServerId).</pre>
<p>
As a test suite runs, all information (including output to <c>stdout</c>) is
- recorded in several different log files. A minimum of information is displayed
+ recorded in many different log files. A minimum of information is displayed
in the user console (only start and stop information, plus a note
for each failed test case).
</p>
<p>
The result from each test case is recorded in a dedicated HTML log file, created
for the particular test run. An overview page displays each test case represented
- by row in a table showing total execution time, whether the case was successful,
- failed or skipped, plus an optional user comment. (For a failed test case, the
- reason for termination is also printed in the comment field). The overview page
+ by a table row showing total execution time, if the case was successful,
+ failed, or skipped, plus an optional user comment. For a failed test case, the
+ reason for termination is also printed in the comment field. The overview page
has a link to each test case log file, providing simple navigation with any standard
HTML browser.
</p>
</section>
<section>
+<marker id="External_Interfaces"></marker>
<title>External Interfaces</title>
<p>
- The CT test server requires that the test suite defines and exports the
+ The <c>Common Test</c> test server requires that the test suite defines and exports the
following mandatory or optional callback functions:
</p>
<taglist>
- <tag>all()</tag>
- <item>Returns a list of all test cases and groups in the suite. (Mandatory)</item>
- <tag>suite()</tag>
- <item>Info function used to return properties for the suite. (Optional)</item>
- <tag>groups()</tag>
- <item>For declaring test case groups. (Optional)</item>
- <tag>init_per_suite(Config)</tag>
- <item>Suite level configuration function, executed before the first
- test case. (Optional)</item>
- <tag>end_per_suite(Config)</tag>
- <item>Suite level configuration function, executed after the last
- test case. (Optional)</item>
- <tag>group(GroupName)</tag>
- <item>Info function used to return properties for a test case group. (Optional)</item>
- <tag>init_per_group(GroupName, Config)</tag>
- <item>Configuration function for a group, executed before the first
- test case. (Optional)</item>
- <tag>end_per_group(GroupName, Config)</tag>
- <item>Configuration function for a group, executed after the last
- test case. (Optional)</item>
- <tag>init_per_testcase(TestCase, Config)</tag>
- <item>Configuration function for a testcase, executed before each
- test case. (Optional)</item>
- <tag>end_per_testcase(TestCase, Config)</tag>
- <item>Configuration function for a testcase, executed after each
- test case. (Optional)</item>
+ <tag><c>all()</c></tag>
+ <item><p>Returns a list of all test cases and groups in the suite. (Mandatory)</p></item>
+ <tag><c>suite()</c></tag>
+ <item><p>Information function used to return properties for the suite. (Optional)</p></item>
+ <tag><c>groups()</c></tag>
+ <item><p>For declaring test case groups. (Optional)</p></item>
+ <tag><c>init_per_suite(Config)</c></tag>
+ <item><p>Suite level configuration function, executed before the first
+ test case. (Optional)</p></item>
+ <tag><c>end_per_suite(Config)</c></tag>
+ <item><p>Suite level configuration function, executed after the last
+ test case. (Optional)</p></item>
+ <tag><c>group(GroupName)</c></tag>
+ <item><p>Information function used to return properties for a test case group. (Optional)</p></item>
+ <tag><c>init_per_group(GroupName, Config)</c></tag>
+ <item><p>Configuration function for a group, executed before the first
+ test case. (Optional)</p></item>
+ <tag><c>end_per_group(GroupName, Config)</c></tag>
+ <item><p>Configuration function for a group, executed after the last
+ test case. (Optional)</p></item>
+ <tag><c>init_per_testcase(TestCase, Config)</c></tag>
+ <item><p>Configuration function for a testcase, executed before each
+ test case. (Optional)</p></item>
+ <tag><c>end_per_testcase(TestCase, Config)</c></tag>
+ <item><p>Configuration function for a testcase, executed after each
+ test case. (Optional)</p></item>
</taglist>
<p>
- For each test case the CT test server expects these functions:
+ For each test case, the <c>Common Test</c> test server expects the
+ following functions:
</p>
<taglist>
<tag>Testcasename()</tag>
- <item>Info function that returns a list of test case properties. (Optional)</item>
+ <item><p>Information function that returns a list of test case properties. (Optional)</p></item>
<tag>Testcasename(Config)</tag>
- <item>The actual test case function.</item>
+ <item><p>The test case function.</p></item>
</taglist>
</section>
</chapter>
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 cc554eb84e..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>
@@ -33,89 +33,84 @@
<file>common_test_app.sgml</file>
</header>
<module>common_test</module>
- <modulesummary>A framework for automated testing of arbitrary target nodes</modulesummary>
+ <modulesummary>A framework for automated testing of any target nodes.</modulesummary>
<description>
- <p>The <em>Common Test</em> framework is an environment for
+ <p>The <c>Common Test</c> framework is an environment for
implementing and performing automatic and semi-automatic execution of
- test cases.
+ test cases.</p>
- Common Test uses the OTP Test Server as engine for test case
- execution and logging.</p>
-
- <p>In brief, Common Test supports:</p>
+ <p>In brief, <c>Common Test</c> supports:</p>
<list>
- <item>Automated execution of test suites (sets of test cases).</item>
- <item>Logging of the events during execution.</item>
- <item>HTML presentation of test suite results.</item>
- <item>HTML presentation of test suite code.</item>
- <item>Support functions for test suite authors.</item>
- <item>Step by step execution of test cases.</item>
+ <item>Automated execution of test suites (sets of test cases)</item>
+ <item>Logging of events during execution</item>
+ <item>HTML presentation of test suite results</item>
+ <item>HTML presentation of test suite code</item>
+ <item>Support functions for test suite authors</item>
+ <item>Step-by-step execution of test cases</item>
</list>
-
- <p>The following sections describe the mandatory and optional test suite
- functions Common Test will call during test execution. For more details
- see <seealso marker="write_test_chapter">Common Test User's
- Guide.</seealso> </p>
-
+
+ <p>The following section describes the mandatory and optional test suite
+ functions that <c>Common Test</c> calls during test execution.
+ For more details, see section
+ <seealso marker="write_test_chapter">Writing Test Suites</seealso>
+ in the User's Guide.</p>
+
</description>
<section>
- <title>TEST CASE CALLBACK FUNCTIONS</title>
+ <title>Test Case Callback Functions</title>
<p>The following functions define the callback interface
for a test suite.</p>
</section>
-
+
<funcs>
<func>
<name>Module:all() -> Tests | {skip,Reason} </name>
<fsummary>Returns the list of all test case groups and test cases
in the module.</fsummary>
<type>
- <v>Tests = [TestCase | {group,GroupName} |
- {group,GroupName,Properties} |
- {group,GroupName,Properties,SubGroups}]</v>
+ <v>Tests = [TestCase | {group,GroupName} | {group,GroupName,Properties} | {group,GroupName,Properties,SubGroups}]</v>
<v>TestCase = atom()</v>
<v>GroupName = atom()</v>
- <v>Properties = [parallel | sequence | Shuffle | {RepeatType,N}] |
- default</v>
- <v>SubGroups = [{GroupName,Properties} |
- {GroupName,Properties,SubGroups}]</v>
+ <v>Properties = [parallel | sequence | Shuffle | {RepeatType,N}] | default</v>
+ <v>SubGroups = [{GroupName,Properties} | {GroupName,Properties,SubGroups}]</v>
<v>Shuffle = shuffle | {shuffle,Seed}</v>
<v>Seed = {integer(),integer(),integer()}</v>
- <v>RepeatType = repeat | repeat_until_all_ok | repeat_until_all_fail |
- repeat_until_any_ok | repeat_until_any_fail</v>
+ <v>RepeatType = repeat | repeat_until_all_ok | repeat_until_all_fail | repeat_until_any_ok | repeat_until_any_fail</v>
<v>N = integer() | forever</v>
<v>Reason = term()</v>
</type>
-
+
<desc>
- <p> MANDATORY </p>
-
- <p>This function must return the list of all test cases and test
- case groups in the test suite module that are to be executed.
- This list also specifies the order the cases and groups will
- be executed by Common Test. A test case is represented by an atom,
+ <p>MANDATORY</p>
+
+ <p>Returns the list of all test cases and test case groups in the
+ test suite module to be executed. This list also specifies the
+ order the cases and groups are executed by <c>Common Test</c>.
+ A test case is represented by an atom,
the name of the test case function. A test case group is
represented by a <c>group</c> tuple, where <c>GroupName</c>,
- an atom, is the name of the group (defined in <seealso marker="#Module:groups-0"><c>groups/0</c></seealso>).
- Execution properties for groups may also be specified, both
- for a top level group and for any of its sub-groups.
- Group execution properties specified here, will override
- properties in the group definition (see <seealso marker="#Module:groups-0"><c>groups/0</c></seealso>).
+ an atom, is the name of the group (defined in
+ <seealso marker="#Module:groups-0"><c>groups/0</c></seealso>).
+ Execution properties for groups can also be specified, both
+ for a top-level group and for any of its subgroups.
+ Group execution properties specified here override
+ properties in the group definition (see
+ <seealso marker="#Module:groups-0"><c>groups/0</c></seealso>).
(With value <c>default</c>, the group definition properties
- will be used).</p>
-
- <p> If <c>{skip,Reason}</c> is returned, all test cases
- in the module will be skipped, and the <c>Reason</c> will
- be printed on the HTML result page.</p>
-
- <p>For details on groups, see
- <seealso marker="write_test_chapter#test_case_groups">Test case
- groups</seealso> in the User's Guide.</p>
-
+ are used).</p>
+
+ <p>If <c>{skip,Reason}</c> is returned, all test cases
+ in the module are skipped and <c>Reason</c>
+ is printed on the HTML result page.</p>
+
+ <p>For details on groups, see section
+ <seealso marker="write_test_chapter#test_case_groups">Test Case
+ Groups</seealso> in the User's Guide.</p>
+
</desc>
</func>
@@ -123,25 +118,24 @@
<name>Module:groups() -> GroupDefs</name>
<fsummary>Returns a list of test case group definitions.</fsummary>
<type>
- <v>GroupDefs = [Group]</v>
- <v>Group = {GroupName,Properties,GroupsAndTestCases}</v>
- <v>GroupName = atom()</v>
- <v>Properties = [parallel | sequence | Shuffle | {RepeatType,N}]</v>
- <v>GroupsAndTestCases = [Group | {group,GroupName} | TestCase]</v>
- <v>TestCase = atom()</v>
- <v>Shuffle = shuffle | {shuffle,Seed}</v>
- <v>Seed = {integer(),integer(),integer()}</v>
- <v>RepeatType = repeat | repeat_until_all_ok | repeat_until_all_fail |
- repeat_until_any_ok | repeat_until_any_fail</v>
- <v>N = integer() | forever</v>
+ <v>GroupDefs = [Group]</v>
+ <v>Group = {GroupName,Properties,GroupsAndTestCases}</v>
+ <v>GroupName = atom()</v>
+ <v>Properties = [parallel | sequence | Shuffle | {RepeatType,N}]</v>
+ <v>GroupsAndTestCases = [Group | {group,GroupName} | TestCase]</v>
+ <v>TestCase = atom()</v>
+ <v>Shuffle = shuffle | {shuffle,Seed}</v>
+ <v>Seed = {integer(),integer(),integer()}</v>
+ <v>RepeatType = repeat | repeat_until_all_ok | repeat_until_all_fail | repeat_until_any_ok | repeat_until_any_fail</v>
+ <v>N = integer() | forever</v>
</type>
-
+
<desc>
- <p> OPTIONAL </p>
-
- <p>Function for defining test case groups. Please see
- <seealso marker="write_test_chapter#test_case_groups">Test case
- groups</seealso> in the User's Guide for details.</p>
+ <p>OPTIONAL</p>
+
+ <p>Defines test case groups. For details, see section
+ <seealso marker="write_test_chapter#test_case_groups">Test Case
+ Groups</seealso> in the User's Guide.</p>
</desc>
</func>
@@ -150,75 +144,71 @@
<fsummary>Test suite info function (providing default data
for the suite).</fsummary>
<type>
- <v> Info = {timetrap,Time} | {require,Required} |
- {require,Name,Required} | {userdata,UserData} |
- {silent_connections,Conns} | {stylesheet,CSSFile} |
- {ct_hooks, CTHs}</v>
- <v> Time = TimeVal | TimeFunc</v>
- <v> TimeVal = MilliSec | {seconds,integer()} | {minutes,integer()} |
- {hours,integer()}</v>
- <v> TimeFunc = {Mod,Func,Args} | Fun</v>
- <v> MilliSec = integer()</v>
- <v> Mod = atom()</v>
- <v> Func = atom()</v>
- <v> Args = list()</v>
- <v> Fun = fun()</v>
- <v> Required = Key | {Key,SubKeys} | {Key,SubKey} | {Key,SubKey,SubKeys}</v>
- <v> Key = atom()</v>
- <v> SubKeys = SubKey | [SubKey]</v>
- <v> SubKey = atom()</v>
- <v> Name = atom()</v>
- <v> UserData = term()</v>
- <v> Conns = [atom()]</v>
- <v> CSSFile = string()</v>
- <v> CTHs = [CTHModule |</v>
- <v>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{CTHModule, CTHInitArgs} |</v>
- <v>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{CTHModule, CTHInitArgs, CTHPriority}]</v>
- <v> CTHModule = atom()</v>
- <v> CTHInitArgs = term()</v>
+ <v>Info = {timetrap,Time} | {require,Required} | {require,Name,Required} | {userdata,UserData} | {silent_connections,Conns} | {stylesheet,CSSFile} | {ct_hooks, CTHs}</v>
+ <v>Time = TimeVal | TimeFunc</v>
+ <v>TimeVal = MilliSec | {seconds,integer()} | {minutes,integer()} | {hours,integer()}</v>
+ <v>TimeFunc = {Mod,Func,Args} | Fun</v>
+ <v>MilliSec = integer()</v>
+ <v>Mod = atom()</v>
+ <v>Func = atom()</v>
+ <v>Args = list()</v>
+ <v>Fun = fun()</v>
+ <v>Required = Key | {Key,SubKeys} | {Key,SubKey} | {Key,SubKey,SubKeys}</v>
+ <v>Key = atom()</v>
+ <v>SubKeys = SubKey | [SubKey]</v>
+ <v>SubKey = atom()</v>
+ <v>Name = atom()</v>
+ <v>UserData = term()</v>
+ <v>Conns = [atom()]</v>
+ <v>CSSFile = string()</v>
+ <v>CTHs = [CTHModule |</v>
+ <v>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{CTHModule, CTHInitArgs} |</v>
+ <v>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{CTHModule, CTHInitArgs, CTHPriority}]</v>
+ <v>CTHModule = atom()</v>
+ <v>CTHInitArgs = term()</v>
</type>
<desc>
-
- <p> OPTIONAL </p>
-
- <p>This is the test suite info function. It is supposed to
- return a list of tagged tuples that specify various properties
- related to the execution of this test suite (common for all
- test cases in the suite).</p>
-
- <p>The <c>timetrap</c> tag sets the maximum time each
- test case is allowed to execute (including <seealso marker="#Module:init_per_testcase-2"><c>init_per_testcase/2</c></seealso>
- and <seealso marker="#Module:end_per_testcase-2"><c>end_per_testcase/2</c></seealso>). If the timetrap time is
- exceeded, the test case fails with reason
+
+ <p>OPTIONAL</p>
+
+ <p>The test suite information function. Returns a list of tagged
+ tuples specifying various properties related to the execution of
+ this test suite (common for all test cases in the suite).</p>
+
+ <p>Tag <c>timetrap</c> sets the maximum time that each
+ test case is allowed to execute (including
+ <seealso marker="#Module:init_per_testcase-2"><c>init_per_testcase/2</c></seealso>
+ and
+ <seealso marker="#Module:end_per_testcase-2"><c>end_per_testcase/2</c></seealso>).
+ If the timetrap time is exceeded, the test case fails with reason
<c>timetrap_timeout</c>. A <c>TimeFunc</c> function can be used to
- set a new timetrap by returning a <c>TimeVal</c>. It may also be
- used to trigger a timetrap timeout by, at some point, returning a
- value other than a <c>TimeVal</c>. (See the
- <seealso marker="write_test_chapter#timetraps">User's Guide</seealso>
- for details).
- </p>
-
- <p>The <c>require</c> tag specifies configuration variables
- that are required by test cases (and/or configuration functions)
+ set a new timetrap by returning a <c>TimeVal</c>. It can also be
+ used to trigger a timetrap time-out by, at some point, returning a
+ value other than a <c>TimeVal</c>. For details, see section
+ <seealso marker="write_test_chapter#timetraps">Timetrap Time-Outs</seealso>
+ in the User's Guide.</p>
+
+ <p>Tag <c>require</c> specifies configuration variables
+ required by test cases (or configuration functions)
in the suite. If the required configuration variables are not found
- in any of the configuration files, all test cases are skipped. For more
- information about the 'require' functionality, see the
- reference manual for the function
- <seealso marker="ct#require-1"><c>ct:require/1/2</c></seealso>.</p>
+ in any of the configuration files, all test cases are skipped.
+ For details about the <c>require</c> functionality, see funtion
+ <seealso marker="ct#require-1"><c>ct:require/1,2</c></seealso>.</p>
- <p>With <c>userdata</c>, it is possible for the user to
- specify arbitrary test suite related information which can be
- read by calling <seealso marker="ct#userdata-2"><c>ct:userdata/2</c></seealso>.</p>
+ <p>With <c>userdata</c>, the user can
+ specify any test suite-related information, which can be
+ read by calling
+ <seealso marker="ct#userdata-2"><c>ct:userdata/2</c></seealso>.</p>
- <p>The <c>ct_hooks</c> tag specifies which
+ <p>Tag <c>ct_hooks</c> specifies the
<seealso marker="ct_hooks_chapter">Common Test Hooks</seealso>
- are to be run together with this suite.</p>
-
- <p>Other tuples than the ones defined will simply be ignored.</p>
+ to be run with this suite.</p>
- <p>For more information about the test suite info function,
- see <seealso marker="write_test_chapter#suite">Test
- suite info function</seealso> in the User's Guide.</p>
+ <p>Other tuples than the ones defined are ignored.</p>
+
+ <p>For details about the test suite information function, see section
+ <seealso marker="write_test_chapter#suite">Test
+ Suite Information Function</seealso> in the User's Guide.</p>
</desc>
</func>
@@ -227,129 +217,133 @@
{skip_and_save,Reason,SaveConfig}</name>
<fsummary>Test suite initializations.</fsummary>
<type>
- <v> Config = NewConfig = SaveConfig = [{Key,Value}]</v>
- <v> Key = atom()</v>
- <v> Value = term()</v>
- <v> Reason = term()</v>
+ <v>Config = NewConfig = SaveConfig = [{Key,Value}]</v>
+ <v>Key = atom()</v>
+ <v>Value = term()</v>
+ <v>Reason = term()</v>
</type>
<desc>
-
- <p> OPTIONAL </p>
-
+
+ <p>OPTIONAL</p>
+
<p>This configuration function is called as the first function in the
- suite. It typically contains initializations which are common for
- all test cases in the suite, and which shall only be done
- once. The <c>Config</c> parameter is the configuration data
- which can be modified here. Whatever is returned from this
- function is given as <c>Config</c> to all configuration functions
- and test cases in the suite. If <c>{skip,Reason}</c>
- is returned, all test cases in the suite will be skipped
- and <c>Reason</c> printed in the overview log for the suite.</p>
- <p>For information on <c>save_config</c> and <c>skip_and_save</c>,
- please see
- <seealso marker="dependencies_chapter#save_config">Dependencies
- between Test Cases and Suites</seealso> in the User's Guide.</p>
- </desc>
+ suite. It typically contains initializations that are common for
+ all test cases in the suite, and that must only be done
+ once. Parameter <c>Config</c> is the configuration data
+ that can be modified. Whatever is returned from this
+ function is specified as <c>Config</c> to all configuration functions
+ and test cases in the suite.</p>
+
+ <p>If <c>{skip,Reason}</c>
+ is returned, all test cases in the suite are skipped
+ and <c>Reason</c> is printed in the overview log for the suite.</p>
+
+ <p>For information on <c>save_config</c> and <c>skip_and_save</c>,
+ see section
+ <seealso marker="dependencies_chapter#save_config">Saving
+ Configuration Data</seealso> in the User's Guide.</p>
+ </desc>
</func>
-
+
<func>
<name>Module:end_per_suite(Config) -> term() |
{save_config,SaveConfig}</name>
- <fsummary>Test suite finalization. </fsummary>
+ <fsummary>Test suite finalization.</fsummary>
<type>
- <v> Config = SaveConfig = [{Key,Value}]</v>
- <v> Key = atom()</v>
- <v> Value = term()</v>
+ <v>Config = SaveConfig = [{Key,Value}]</v>
+ <v>Key = atom()</v>
+ <v>Value = term()</v>
</type>
-
+
<desc>
- <p> OPTIONAL </p>
+ <p>OPTIONAL</p>
<p>This function is called as the last test case in the
suite. It is meant to be used for cleaning up after
- <seealso marker="#Module:init_per_suite-1"><c>init_per_suite/1</c></seealso>.
- For information on <c>save_config</c>, please see
- <seealso marker="dependencies_chapter#save_config">Dependencies
- between Test Cases and Suites</seealso> in the User's Guide.</p>
+ <seealso marker="#Module:init_per_suite-1"><c>init_per_suite/1</c></seealso>.</p>
+ <p>For information on <c>save_config</c>, see section
+ <seealso marker="dependencies_chapter#save_config">Saving
+ Configuration Data</seealso> in the User's Guide.</p>
</desc>
</func>
<func>
<name>Module:group(GroupName) -> [Info] </name>
- <fsummary>Test case group info function (providing default data
- for a test case group, i.e. its test cases and sub-groups).</fsummary>
+ <fsummary>Test case group information function (providing default data
+ for a test case group, that is, its test cases and
+ subgroups).</fsummary>
<type>
- <v> Info = {timetrap,Time} | {require,Required} |
- {require,Name,Required} | {userdata,UserData} |
- {silent_connections,Conns} | {stylesheet,CSSFile} |
- {ct_hooks, CTHs}</v>
- <v> Time = TimeVal | TimeFunc</v>
- <v> TimeVal = MilliSec | {seconds,integer()} | {minutes,integer()} |
- {hours,integer()}</v>
- <v> TimeFunc = {Mod,Func,Args} | Fun</v>
- <v> MilliSec = integer()</v>
- <v> Mod = atom()</v>
- <v> Func = atom()</v>
- <v> Args = list()</v>
- <v> Fun = fun()</v>
- <v> Required = Key | {Key,SubKeys} | {Key,Subkey} | {Key,Subkey,SubKeys}</v>
- <v> Key = atom()</v>
- <v> SubKeys = SubKey | [SubKey]</v>
- <v> SubKey = atom()</v>
- <v> Name = atom()</v>
- <v> UserData = term()</v>
- <v> Conns = [atom()]</v>
- <v> CSSFile = string()</v>
- <v> CTHs = [CTHModule |</v>
- <v> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{CTHModule, CTHInitArgs} |</v>
- <v> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{CTHModule, CTHInitArgs, CTHPriority}]</v>
- <v> CTHModule = atom()</v>
- <v> CTHInitArgs = term()</v>
- </type>
- <desc>
-
- <p> OPTIONAL </p>
-
- <p>This is the test case group info function. It is supposed to
+ <v>Info = {timetrap,Time} | {require,Required} | {require,Name,Required} | {userdata,UserData} | {silent_connections,Conns} | {stylesheet,CSSFile} | {ct_hooks, CTHs}</v>
+ <v>Time = TimeVal | TimeFunc</v>
+ <v>TimeVal = MilliSec | {seconds,integer()} | {minutes,integer()} | {hours,integer()}</v>
+ <v>TimeFunc = {Mod,Func,Args} | Fun</v>
+ <v>MilliSec = integer()</v>
+ <v>Mod = atom()</v>
+ <v>Func = atom()</v>
+ <v>Args = list()</v>
+ <v>Fun = fun()</v>
+ <v>Required = Key | {Key,SubKeys} | {Key,Subkey} | {Key,Subkey,SubKeys}</v>
+ <v>Key = atom()</v>
+ <v>SubKeys = SubKey | [SubKey]</v>
+ <v>SubKey = atom()</v>
+ <v>Name = atom()</v>
+ <v>UserData = term()</v>
+ <v>Conns = [atom()]</v>
+ <v>CSSFile = string()</v>
+ <v>CTHs = [CTHModule |</v>
+ <v>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{CTHModule, CTHInitArgs} |</v>
+ <v>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{CTHModule, CTHInitArgs, CTHPriority}]</v>
+ <v>CTHModule = atom()</v>
+ <v>CTHInitArgs = term()</v>
+ </type>
+ <desc>
+
+ <p>OPTIONAL</p>
+
+ <p>The test case group information function. It is supposed to
return a list of tagged tuples that specify various properties
- related to the execution of a test case group (i.e. its test cases
- and sub-groups). Properties set by
+ related to the execution of a test case group (that is, its test
+ cases and subgroups). Properties set by
<seealso marker="#Module:group-1"><c>group/1</c></seealso> override
- properties with the same key that have been previously set by
+ properties with the same key that have been set previously by
<seealso marker="#Module:suite-0"><c>suite/0</c></seealso>.</p>
- <p>The <c>timetrap</c> tag sets the maximum time each
- test case is allowed to execute (including <seealso marker="#Module:init_per_testcase-2"><c>init_per_testcase/2</c></seealso>
- and <seealso marker="#Module:end_per_testcase-2"><c>end_per_testcase/2</c></seealso>). If the timetrap time is
+ <p>Tag <c>timetrap</c> sets the maximum time that each
+ test case is allowed to execute (including
+ <seealso marker="#Module:init_per_testcase-2"><c>init_per_testcase/2</c></seealso>
+ and
+ <seealso marker="#Module:end_per_testcase-2"><c>end_per_testcase/2</c></seealso>).
+ If the timetrap time is
exceeded, the test case fails with reason
<c>timetrap_timeout</c>. A <c>TimeFunc</c> function can be used to
- set a new timetrap by returning a <c>TimeVal</c>. It may also be
- used to trigger a timetrap timeout by, at some point, returning a
- value other than a <c>TimeVal</c>. (See the
- <seealso marker="write_test_chapter#timetraps">User's Guide</seealso>
- for details).</p>
+ set a new timetrap by returning a <c>TimeVal</c>. It can also be
+ used to trigger a timetrap time-out by, at some point, returning a
+ value other than a <c>TimeVal</c>. For details, see section
+ <seealso marker="write_test_chapter#timetraps">Timetrap
+ Time-Outs</seealso> in the User's Guide.</p>
- <p>The <c>require</c> tag specifies configuration variables
- that are required by test cases (and/or configuration functions)
+ <p>Tag <c>require</c> specifies configuration variables
+ required by test cases (or configuration functions)
in the suite. If the required configuration variables are not found
- in any of the configuration files, all test cases in this group are skipped.
- For more information about the 'require' functionality, see the
- reference manual for the function
- <seealso marker="ct#require-1"><c>ct:require/1/2</c></seealso>.</p>
+ in any of the configuration files, all test cases in this group are
+ skipped. For details about the <c>require</c> functionality, see
+ function
+ <seealso marker="ct#require-1"><c>ct:require/1,2</c></seealso>.</p>
- <p>With <c>userdata</c>, it is possible for the user to
- specify arbitrary test case group related information which can be
- read by calling <seealso marker="ct#userdata-2"><c>ct:userdata/2</c></seealso>.</p>
+ <p>With <c>userdata</c>, the user can
+ specify any test case group related information that can be
+ read by calling
+ <seealso marker="ct#userdata-2"><c>ct:userdata/2</c></seealso>.</p>
- <p>The <c>ct_hooks</c> tag specifies which
+ <p>Tag <c>ct_hooks</c> specifies the
<seealso marker="ct_hooks_chapter">Common Test Hooks</seealso>
- are to be run together with this suite.</p>
-
- <p>Other tuples than the ones defined will simply be ignored.</p>
+ to be run with this suite.</p>
- <p>For more information about the test case group info function,
- see <seealso marker="write_test_chapter#suite">Test
- case group info function</seealso> in the User's Guide.</p>
+ <p>Other tuples than the ones defined are ignored.</p>
+
+ <p>For details about the test case group information function,
+ see section <seealso marker="write_test_chapter#group_info">Group
+ Information Function</seealso> in the User's Guide.</p>
</desc>
</func>
@@ -358,59 +352,66 @@
{skip,Reason}</name>
<fsummary>Test case group initializations.</fsummary>
<type>
- <v> GroupName = atom()</v>
- <v> Config = NewConfig = [{Key,Value}]</v>
- <v> Key = atom()</v>
- <v> Value = term()</v>
- <v> Reason = term()</v>
+ <v>GroupName = atom()</v>
+ <v>Config = NewConfig = [{Key,Value}]</v>
+ <v>Key = atom()</v>
+ <v>Value = term()</v>
+ <v>Reason = term()</v>
</type>
<desc>
-
- <p> OPTIONAL </p>
-
+
+ <p>OPTIONAL</p>
+
<p>This configuration function is called before execution of a
- test case group. It typically contains initializations which are
- common for all test cases and sub-groups in the group, and which
- shall only be performed once. <c>GroupName</c> is the name of the
- group, as specified in the group definition (see <seealso marker="#Module:groups-0"><c>groups/0</c></seealso>). The
- <c>Config</c> parameter is the configuration data which can be modified
- here. The return value of this function is given as <c>Config</c>
- to all test cases and sub-groups in the group. If <c>{skip,Reason}</c>
- is returned, all test cases in the group will be skipped and
- <c>Reason</c> printed in the overview log for the group.</p>
-
- <p>For information about test case groups, please see
- <seealso marker="write_test_chapter#test_case_groups">Test case
- groups</seealso> chapter in the User's Guide.</p>
+ test case group. It typically contains initializations that are
+ common for all test cases and subgroups in the group, and that
+ must only be performed once. <c>GroupName</c> is the name of the
+ group, as specified in the group definition (see
+ <seealso marker="#Module:groups-0"><c>groups/0</c></seealso>).
+ Parameter <c>Config</c> is the configuration data that can be
+ modified.
+ The return value of this function is given as <c>Config</c>
+ to all test cases and subgroups in the group.</p>
+
+ <p>If <c>{skip,Reason}</c>
+ is returned, all test cases in the group are skipped and
+ <c>Reason</c> is printed in the overview log for the group.</p>
+
+ <p>For information about test case groups, see section
+ <seealso marker="write_test_chapter#test_case_groups">Test Case
+ Groups</seealso> in the User's Guide.</p>
</desc>
</func>
-
+
<func>
<name>Module:end_per_group(GroupName, Config) -> term() |
{return_group_result,Status}</name>
<fsummary>Test case group finalization.</fsummary>
<type>
- <v> GroupName = atom()</v>
- <v> Config = [{Key,Value}]</v>
- <v> Key = atom()</v>
- <v> Value = term()</v>
- <v> Status = ok | skipped | failed</v>
+ <v>GroupName = atom()</v>
+ <v>Config = [{Key,Value}]</v>
+ <v>Key = atom()</v>
+ <v>Value = term()</v>
+ <v>Status = ok | skipped | failed</v>
</type>
-
+
<desc>
- <p> OPTIONAL </p>
-
- <p>This function is called after the execution of a test case group is finished.
- It is meant to be used for cleaning up after <seealso marker="#Module:init_per_group-2"><c>init_per_group/2</c></seealso>.
- By means of <c>{return_group_result,Status}</c>, it is possible to return a
- status value for a nested sub-group. The status can be retrieved in
- <seealso marker="#Module:end_per_group-2"><c>end_per_group/2</c></seealso> for the group on the level above. The status will also
- be used by Common Test for deciding if execution of a group should proceed in
- case the property <c>sequence</c> or <c>repeat_until_*</c> is set.</p>
-
- <p>For more information about test case groups, please see
- <seealso marker="write_test_chapter#test_case_groups">Test case
- groups</seealso> chapter in the User's Guide.</p>
+ <p>OPTIONAL</p>
+
+ <p>This function is called after the execution of a test case group
+ is finished. It is meant to be used for cleaning up after
+ <seealso marker="#Module:init_per_group-2"><c>init_per_group/2</c></seealso>.
+ A status value for a nested subgroup can be returned with
+ <c>{return_group_result,Status}</c>. The status can be retrieved in
+ <seealso marker="#Module:end_per_group-2"><c>end_per_group/2</c></seealso>
+ for the group on the level above. The status is also used by
+ <c>Common Test</c> for deciding if execution of a group is to
+ proceed if property <c>sequence</c> or <c>repeat_until_*</c>
+ is set.</p>
+
+ <p>For details about test case groups, see section
+ <seealso marker="write_test_chapter#test_case_groups">Test Case
+ Groups</seealso> in the User's Guide.</p>
</desc>
</func>
@@ -424,168 +425,173 @@
<v> Value = term()</v>
<v> Reason = term()</v>
</type>
- <desc>
-
+ <desc>
+
<p>OPTIONAL</p>
-
- <p>This function is called before each test case. The
- <c>TestCase</c> argument is the name of the test case, and
+
+ <p>This function is called before each test case. Argument
+ <c>TestCase</c> is the test case name, and
<c>Config</c> (list of key-value tuples) is the configuration
- data that can be modified here. The <c>NewConfig</c> list returned
+ data that can be modified. The <c>NewConfig</c> list returned
from this function is given as <c>Config</c> to the test case.
If <c>{fail,Reason}</c> is returned, the test case is
- marked as failed without being executed. If <c>{skip,Reason}</c> is
- returned, the test case will be skipped and <c>Reason</c> printed
- in the overview log for the suite.</p>
+ marked as failed without being executed.</p>
+
+ <p>If <c>{skip,Reason}</c> is returned, the test case is skipped
+ and <c>Reason</c> is printed in the overview log for the suite.</p>
</desc>
</func>
-
+
<func>
<name>Module:end_per_testcase(TestCase, Config) -> term() | {fail,Reason} | {save_config,SaveConfig}</name>
<fsummary>Test case finalization.</fsummary>
<type>
- <v> TestCase = atom()</v>
- <v> Config = SaveConfig = [{Key,Value}]</v>
- <v> Key = atom()</v>
- <v> Value = term()</v>
- <v> Reason = term()</v>
+ <v>TestCase = atom()</v>
+ <v>Config = SaveConfig = [{Key,Value}]</v>
+ <v>Key = atom()</v>
+ <v>Value = term()</v>
+ <v>Reason = term()</v>
</type>
<desc>
-
- <p> OPTIONAL </p>
-
- <p> This function is called after each test case, and can be used
- to clean up after <seealso marker="#Module:init_per_testcase-2"><c>init_per_testcase/2</c></seealso> and the test case.
- Any return value (besides <c>{fail,Reason}</c> and <c>{save_config,SaveConfig}</c>)
- is ignored. By returning <c>{fail,Reason}</c>, <c>TestCase</c> will be marked as
- failed (even though it was actually successful in the sense that it returned
- a value instead of terminating). For information on <c>save_config</c>, please see
- <seealso marker="dependencies_chapter#save_config">Dependencies between
- Test Cases and Suites</seealso> in the User's Guide</p>
+
+ <p>OPTIONAL</p>
+
+ <p>This function is called after each test case, and can be used
+ to clean up after
+ <seealso marker="#Module:init_per_testcase-2"><c>init_per_testcase/2</c></seealso>
+ and the test case. Any return value (besides <c>{fail,Reason}</c>
+ and <c>{save_config,SaveConfig}</c>) is ignored. By returning
+ <c>{fail,Reason}</c>, <c>TestCase</c> is marked as faulty (even
+ though it was successful in the sense that it returned
+ a value instead of terminating).</p>
+
+ <p>For information on <c>save_config</c>, see section
+ <seealso marker="dependencies_chapter#save_config">Saving
+ Configuration Data</seealso> in the User's Guide.</p>
</desc>
</func>
-
+
<func>
<name>Module:Testcase() -> [Info] </name>
- <fsummary>Test case info function. </fsummary>
+ <fsummary>Test case information function.</fsummary>
<type>
- <v> Info = {timetrap,Time} | {require,Required} |
- {require,Name,Required} | {userdata,UserData} |
- {silent_connections,Conns}</v>
- <v> Time = TimeVal | TimeFunc</v>
- <v> TimeVal = MilliSec | {seconds,integer()} | {minutes,integer()} |
- {hours,integer()}</v>
- <v> TimeFunc = {Mod,Func,Args} | Fun</v>
- <v> MilliSec = integer()</v>
- <v> Mod = atom()</v>
- <v> Func = atom()</v>
- <v> Args = list()</v>
- <v> Fun = fun()</v>
- <v> Required = Key | {Key,SubKeys} | {Key,Subkey} | {Key,Subkey,SubKeys}</v>
- <v> Key = atom()</v>
- <v> SubKeys = SubKey | [SubKey]</v>
- <v> SubKey = atom()</v>
- <v> Name = atom()</v>
- <v> UserData = term()</v>
- <v> Conns = [atom()]</v>
+ <v>Info = {timetrap,Time} | {require,Required} | {require,Name,Required} | {userdata,UserData} | {silent_connections,Conns}</v>
+ <v>Time = TimeVal | TimeFunc</v>
+ <v>TimeVal = MilliSec | {seconds,integer()} | {minutes,integer()} | {hours,integer()}</v>
+ <v>TimeFunc = {Mod,Func,Args} | Fun</v>
+ <v>MilliSec = integer()</v>
+ <v>Mod = atom()</v>
+ <v>Func = atom()</v>
+ <v>Args = list()</v>
+ <v>Fun = fun()</v>
+ <v>Required = Key | {Key,SubKeys} | {Key,Subkey} | {Key,Subkey,SubKeys}</v>
+ <v>Key = atom()</v>
+ <v>SubKeys = SubKey | [SubKey]</v>
+ <v>SubKey = atom()</v>
+ <v>Name = atom()</v>
+ <v>UserData = term()</v>
+ <v>Conns = [atom()]</v>
</type>
-
- <desc>
+
+ <desc>
<p>OPTIONAL</p>
-
- <p>This is the test case info function. It is supposed to
+
+ <p>The test case information function. It is supposed to
return a list of tagged tuples that specify various properties
related to the execution of this particular test case.
- Properties set by <seealso marker="#Module:Testcase-0"><c>Testcase/0</c></seealso> override
- properties that have been previously set for the test case
- by <seealso marker="#Module:group-1"><c>group/1</c></seealso> or <seealso marker="#Module:suite-0"><c>suite/0</c></seealso>.</p>
-
- <p>The <c>timetrap</c> tag sets the maximum time the
+ Properties set by
+ <seealso marker="#Module:Testcase-0"><c>Testcase/0</c></seealso>
+ override properties set previously for the test case by
+ <seealso marker="#Module:group-1"><c>group/1</c></seealso> or
+ <seealso marker="#Module:suite-0"><c>suite/0</c></seealso>.</p>
+
+ <p>Tag <c>timetrap</c> sets the maximum time that the
test case is allowed to execute. If the timetrap time is
- exceeded, the test case fails with reason
- <c>timetrap_timeout</c>. <seealso marker="#Module:init_per_testcase-2"><c>init_per_testcase/2</c></seealso>
- and <seealso marker="#Module:end_per_testcase-2"><c>end_per_testcase/2</c></seealso> are included in the
- timetrap time. A <c>TimeFunc</c> function can be used to
- set a new timetrap by returning a <c>TimeVal</c>. It may also be
- used to trigger a timetrap timeout by, at some point, returning a
- value other than a <c>TimeVal</c>. (See the
- <seealso marker="write_test_chapter#timetraps">User's Guide</seealso>
- for details).</p>
+ exceeded, the test case fails with reason <c>timetrap_timeout</c>.
+ <seealso marker="#Module:init_per_testcase-2"><c>init_per_testcase/2</c></seealso>
+ and
+ <seealso marker="#Module:end_per_testcase-2"><c>end_per_testcase/2</c></seealso>
+ are included in the timetrap time.
+ A <c>TimeFunc</c> function can be used to
+ set a new timetrap by returning a <c>TimeVal</c>. It can also be
+ used to trigger a timetrap time-out by, at some point, returning a
+ value other than a <c>TimeVal</c>. For details, see section
+ <seealso marker="write_test_chapter#timetraps">Timetrap
+ Time-Outs</seealso> in the User's Guide.</p>
- <p>The <c>require</c> tag specifies configuration variables
- that are required by the test case (and/or <c>init/end_per_testcase/2</c>).
+ <p>Tag <c>require</c> specifies configuration variables
+ that are required by the test case (or <c>init_per_testcase/2</c>
+ or <c>end_per_testcase/2</c>).
If the required configuration variables are not found in any of the
- configuration files, the test case is skipped. For more
- information about the 'require' functionality, see the
- reference manual for the function
- <seealso marker="ct#require-1"><c>ct:require/1/2</c></seealso>.</p>
-
- <p>If <c>timetrap</c> and/or <c>require</c> is not set, the
- default values specified by <seealso marker="#Module:suite-0"><c>suite/0</c></seealso> (or
- <seealso marker="#Module:group-1"><c>group/1</c></seealso>) will be used.</p>
-
- <p>With <c>userdata</c>, it is possible for the user to
- specify arbitrary test case related information which can be
- read by calling <seealso marker="ct#userdata-3"><c>ct:userdata/3</c></seealso>.</p>
-
- <p>Other tuples than the ones defined will simply be ignored.</p>
+ configuration files, the test case is skipped. For details about
+ the <c>require</c> functionality, see function
+ <seealso marker="ct#require-1"><c>ct:require/1,2</c></seealso>.</p>
+
+ <p>If <c>timetrap</c> or <c>require</c> is not set, the
+ default values specified by
+ <seealso marker="#Module:suite-0"><c>suite/0</c></seealso> (or
+ <seealso marker="#Module:group-1"><c>group/1</c></seealso>) are used.</p>
+
+ <p>With <c>userdata</c>, the user can specify any test case-related
+ information that can be read by calling
+ <seealso marker="ct#userdata-3"><c>ct:userdata/3</c></seealso>.</p>
+
+ <p>Other tuples than the ones defined are ignored.</p>
- <p>For more information about the test case info function,
- see <seealso marker="write_test_chapter#info_function">Test
- case info function</seealso> in the User's Guide.</p>
+ <p>For details about the test case information function, see section
+ <seealso marker="write_test_chapter#info_function">Test
+ Case Information Function</seealso> in the User's Guide.</p>
</desc>
</func>
-
-
+
<func>
<name>Module:Testcase(Config) -> term() | {skip,Reason} | {comment,Comment} | {save_config,SaveConfig} | {skip_and_save,Reason,SaveConfig} | exit() </name>
- <fsummary>A test case</fsummary>
+ <fsummary>A test case.</fsummary>
<type>
- <v> Config = SaveConfig = [{Key,Value}]</v>
- <v> Key = atom()</v>
- <v> Value = term()</v>
- <v> Reason = term()</v>
- <v> Comment = string()</v>
+ <v>Config = SaveConfig = [{Key,Value}]</v>
+ <v>Key = atom()</v>
+ <v>Value = term()</v>
+ <v>Reason = term()</v>
+ <v>Comment = string()</v>
</type>
-
+
<desc>
- <p> MANDATORY </p>
-
- <p>This is the implementation of a 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
- function causes a runtime error, or call <seealso marker="ct#fail-1"><c>ct:fail/1/2</c></seealso>
+ <p>MANDATORY</p>
+
+ <p>The implementation of a test case. Call the functions to test and
+ check the result. If something fails, ensure the
+ function causes a runtime error or call
+ <seealso marker="ct#fail-1"><c>ct:fail/1,2</c></seealso>
(which also causes the test case process to terminate).</p>
-
- <p>Elements from the <c>Config</c> list can e.g. be read
- with <c>proplists:get_value/2</c> (or the macro <c>?config</c>
- defined in <c>ct.hrl</c>).</p>
- <p>You can return <c>{skip,Reason}</c> if you decide not to
- run the test case after all. <c>Reason</c> will then be
- printed in 'Comment' field on the HTML result page.</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 function returns anything else, the test case is
- considered successful. (The return value always gets printed
- in the test case log file).</p>
+ <p>Elements from the <c>Config</c> list can, for example, be read
+ with <c>proplists:get_value/2</c> in <c>STDLIB</c>
+ (or the macro <c>?config</c> defined in <c>ct.hrl</c>).</p>
+
+ <p>If you decide not to run the test case after all, return
+ <c>{skip,Reason}</c>. <c>Reason</c> is then
+ printed in field <c>Comment</c> on the HTML result page.</p>
+
+ <p>To print some information in field <c>Comment</c> on the HTML
+ result page, return <c>{comment,Comment}</c>.</p>
- <p>For more information about test case implementation, please
- see <seealso marker="write_test_chapter#test_cases">Test
- cases</seealso> in the User's Guide.</p>
+ <p>If the function returns anything else, the test case is
+ considered successful. The return value always gets printed
+ in the test case log file.</p>
- <p>For information on <c>save_config</c> and <c>skip_and_save</c>, please see
- <seealso marker="dependencies_chapter#save_config">Dependencies between
- Test Cases and Suites</seealso> in the User's Guide.</p>
+ <p>For details about test case implementation, see section
+ <seealso marker="write_test_chapter#test_cases">Test Cases</seealso>
+ in the User's Guide.</p>
+
+ <p>For information on <c>save_config</c> and <c>skip_and_save</c>,
+ see section
+ <seealso marker="dependencies_chapter#save_config">Saving
+ Configuration Data</seealso> in the User's Guide.</p>
</desc>
</func>
-
+
</funcs>
</erlref>
-
diff --git a/lib/common_test/doc/src/config_file_chapter.xml b/lib/common_test/doc/src/config_file_chapter.xml
index c7fd6e0b28..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>
@@ -35,18 +35,18 @@
<section>
<title>General</title>
- <p>To avoid hard coding data values related to the test and/or SUT (System
- Under Test) in the test suites, the data may instead be specified by means
- of configuration files or strings that Common Test reads before
+ <p>To avoid hard-coding data values related to the test and/or System
+ Under Test (SUT) in the test suites, the data can instead be specified through
+ configuration files or strings that <c>Common Test</c> reads before
the start of a test run. External configuration data makes it possible to
- change test properties without having to modify the actual test suites
- using the data. Examples of configuration data:</p>
+ change test properties without modifying the test suites
+ using the data. Examples of configuration data follows:</p>
- <list>
+ <list type="bulleted">
<item>Addresses to the test plant or other instruments</item>
<item>User login information</item>
<item>Names of files needed by the test</item>
- <item>Names of programs that should be executed during the test</item>
+ <item>Names of programs to be executed during the test</item>
<item>Any other variable needed by the test</item>
</list>
@@ -57,154 +57,150 @@
<p>A configuration file can contain any number of elements of the type:</p>
<pre>
- {CfgVarName,Value}.</pre>
+ {CfgVarName,Value}.</pre>
<p>where</p>
<pre>
- CfgVarName = atom()
- Value = term() | [{CfgVarName,Value}]</pre>
+ CfgVarName = atom()
+ Value = term() | [{CfgVarName,Value}]</pre>
</section>
<section>
- <title>Requiring and reading configuration data</title>
+ <title>Requiring and Reading Configuration Data</title>
<marker id="require_config_data"></marker>
<p>In a test suite, one must <em>require</em> that a configuration
- variable (<c>CfgVarName</c> in the definition above) exists before
- attempting to read the associated value in a test case or config function.</p>
-
- <p><c>require</c> is an assert statement that can be part of the <seealso
- marker="write_test_chapter#suite">test suite info function</seealso> or
- <seealso marker="write_test_chapter#info_function">test case info
- function</seealso>. If the required variable is not available, the
- test is skipped (unless a default value has been specified, see the
- <seealso marker="write_test_chapter#info_function">test case info
- function</seealso> chapter for details). There is also a function
- <seealso marker="ct#require-1"><c>ct:require/1/2</c></seealso> which can be called from a test case
- in order to check if a specific variable is available. The return
+ variable (<c>CfgVarName</c> in the previous definition) exists before
+ attempting to read the associated value in a test case or configuration function.</p>
+
+ <p><c>require</c> is an assert statement, which can be part of the <seealso
+ marker="write_test_chapter#suite">Test Suite Information Function</seealso> or
+ <seealso marker="write_test_chapter#info_function">Test Case Information
+ Function</seealso>. If the required variable is unavailable, the
+ test is skipped (unless a default value has been specified, see section
+ <seealso marker="write_test_chapter#info_function">Test Case Information
+ Function</seealso> for details). Also, function
+ <seealso marker="ct#require-1"><c>ct:require/1/2</c></seealso> can be called
+ from a test case to check if a specific variable is available. The return
value from this function must be checked explicitly and appropriate
- action be taken depending on the result (e.g. to skip the test case
- if the variable in question doesn't exist).</p>
+ action be taken depending on the result (for example, to skip the test case
+ if the variable in question does not exist).</p>
- <p>A <c>require</c> statement in the test suite info- or test case
- info-list should look like this:
+ <p>A <c>require</c> statement in the test suite information case or test case
+ information-list is to look like
<c>{require,CfgVarName}</c> or <c>{require,AliasName,CfgVarName}</c>.
The arguments <c>AliasName</c> and <c>CfgVarName</c> are the same as the
- arguments to <seealso marker="ct#require-1"><c>ct:require/1/2</c></seealso> which are described in the
- reference manual for <seealso marker="ct">ct</seealso>.
+ arguments to <seealso marker="ct#require-1"><c>ct:require/1,2</c></seealso>.
<c>AliasName</c> becomes an alias for the configuration variable,
and can be used as reference to the configuration data value.
- The configuration variable may be associated with an
- arbitrary number of alias names, but each name must be unique within
- the same test suite. There are two main uses for alias names:</p>
- <list>
- <item>They may be introduced to identify connections (see below).</item>
- <item>They may used to help adapt configuration data to a test suite
+ The configuration variable can be associated with any
+ number of alias names, but each name must be unique within
+ the same test suite. The two main uses for alias names follows:</p>
+ <list type="bulleted">
+ <item>To identify connections (described later).</item>
+ <item>To help adapt configuration data to a test suite
(or test case) and improve readability.</item>
</list>
- <p>To read the value of a config variable, use the function
- <seealso marker="ct#get_config-1"><c>get_config/1/2/3</c></seealso>
- which is also described in the reference
- manual for <seealso marker="ct">ct</seealso>.</p>
- <p>Example:</p>
+ <p>To read the value of a configuration variable, use function
+ <seealso marker="ct#get_config-1"><c>get_config/1,2,3</c></seealso>.
+ </p>
+ <p><em>Example:</em></p>
<pre>
- suite() ->
- [{require, domain, 'CONN_SPEC_DNS_SUFFIX'}].
+ suite() ->
+ [{require, domain, 'CONN_SPEC_DNS_SUFFIX'}].
- ...
-
- testcase(Config) ->
- Domain = ct:get_config(domain),
- ...</pre>
+ ...
+
+ testcase(Config) ->
+ Domain = ct:get_config(domain),
+ ...</pre>
</section>
<section>
- <title>Using configuration variables defined in multiple files</title>
+ <title>Using Configuration Variables Defined in Multiple Files</title>
<p>If a configuration variable is defined in multiple files and you
- want to access all possible values, you may use the <seealso marker="ct#get_config-3"><c>ct:get_config/3</c></seealso>
- function and specify <c>all</c> in the options list. The values will then
- be returned in a list and the order of the elements corresponds to the order
- that the config files were specified at startup. Please see
- the <seealso marker="ct">ct</seealso> reference manual for details.</p>
+ want to access all possible values, use function
+ <seealso marker="ct#get_config-3"><c>ct:get_config/3</c></seealso>
+ and specify <c>all</c> in the options list. The values are then
+ returned in a list and the order of the elements corresponds to the order
+ that the configuration files were specified at startup.</p>
</section>
<section>
- <title>Encrypted configuration files</title>
+ <title>Encrypted Configuration Files</title>
<marker id="encrypted_config_files"></marker>
- <p>It is possible to encrypt configuration files containing sensitive data
- if these files must be stored in open and shared directories.</p>
- <p>Call <seealso marker="ct#encrypt_config_file-2"><c>ct:encrypt_config_file/2/3</c></seealso> to have Common Test encrypt a
- specified file using the DES3 function in the OTP <c>crypto</c> application.
- The encrypted file can then be used as a regular configuration file,
- in combination with other encrypted files or normal text files. The key
- for decrypting the configuration file must be provided when running the test,
- however. This can be done by means of the <c>decrypt_key</c> or
- <c>decrypt_file</c> flag/option, or a key file in a predefined location.</p>
+ <p>Configuration files containing sensitive data can be encrypted
+ if they must be stored in open and shared directories.</p>
+ <p>To have <c>Common Test</c> encrypt a
+ specified file using function <c>DES3</c> in application <c>Crypto</c>,
+ call <seealso marker="ct#encrypt_config_file-2"><c>ct:encrypt_config_file/2,3</c></seealso>
+ The encrypted file can then be used as a regular configuration file
+ in combination with other encrypted files or normal text files. However, the
+ key for decrypting the configuration file must be provided when running the test.
+ This can be done with flag/option <c>decrypt_key</c> or
+ <c>decrypt_file</c>, or a key file in a predefined location.</p>
- <p>Common Test also provides decryption functions,
- <seealso marker="ct#decrypt_config_file-2"><c>ct:decrypt_config_file/2/3</c></seealso>, for recreating the original text
- files.</p>
-
- <p>Please see the <seealso marker="ct">ct</seealso> reference manual for
- more information.</p>
+ <p><c>Common Test</c> also provides decryption functions,
+ <seealso marker="ct#decrypt_config_file-2"><c>ct:decrypt_config_file/2,3</c></seealso>,
+ for recreating the original text files.</p>
</section>
<section>
- <title>Opening connections by using configuration data</title>
- <p>There are two different methods for opening a connection
- by means of the support functions in e.g. <seealso marker="ct_ssh"><c>ct_ssh</c></seealso>, <seealso marker="ct_ftp"><c>ct_ftp</c></seealso>,
- and <seealso marker="ct_telnet"><c>ct_telnet</c></seealso>:</p>
- <list>
+ <title>Opening Connections Using Configuration Data</title>
+ <p>Two different methods for opening a connection using the support functions
+ in, for example, <seealso marker="ct_ssh"><c>ct_ssh</c></seealso>,
+ <seealso marker="ct_ftp"><c>ct_ftp</c></seealso>, and
+ <seealso marker="ct_telnet"><c>ct_telnet</c></seealso> follows:</p>
+ <list type="bulleted">
<item>Using a configuration target name (an alias) as reference.</item>
<item>Using the configuration variable as reference.</item>
</list>
<p>When a target name is used for referencing the configuration data
- (that specifies the connection to be opened), the same name may be used
+ (that specifies the connection to be opened), the same name can be used
as connection identity in all subsequent calls related to the connection
- (also for closing it). It's only possible to have one open connection
- per target name. If attempting to open a new connection using a name
- already associated with an open connection, Common Test will
- return the already existing handle so that the previously opened connection
- will be used. This is a practical feature since it makes it possible to
+ (also for closing it). Only one open connection per target name
+ is possible. If you attempt to open a new connection using a name
+ already associated with an open connection, <c>Common Test</c>
+ returns the already existing handle so the previously opened connection
+ is used. This feature makes it possible to
call the function for opening a particular connection whenever
- useful. An action like this will not necessarily open any new
- connections unless it's required (which could be the case if e.g. the
- previous connection has been closed unexpectedly by the server).
- Another benefit of using named connections is that it's not
- necessary to pass handle references around in the suite for these
- connections.
+ useful. An action like this does not necessarily open any new
+ connections unless it is required (which could be the case if, for example,
+ the previous connection has been closed unexpectedly by the server).
+ Using named connections also removes the need to pass handle references
+ around in the suite for these connections.
</p>
<p>When a configuration variable name is used as reference to the data
specifying the connection, the handle returned as a result of opening
the connection must be used in all subsequent calls (also for closing
the connection). Repeated calls to the open function with the same
- variable name as reference will result in multiple connections
- being opened. This can be useful e.g. if a test case needs to open
+ variable name as reference results in multiple connections being opened.
+ This can be useful, for example, if a test case needs to open
multiple connections to the same server on the target node (using the
same configuration data for each connection).
</p>
</section>
<section>
- <title>User specific configuration data formats</title>
+ <title>User-Specific Configuration Data Formats</title>
- <p>It is possible for the user to specify configuration data on a
+ <p>The user can specify configuration data on a
different format than key-value tuples in a text file, as described
- so far. The data can e.g. be read from arbitrary files, fetched from
- the web over http, or requested from a user specific process.
- To support this, Common Test provides a callback module plugin
+ so far. The data can, for example, be read from any files, fetched from
+ the web over HTTP, or requested from a user-specific process.
+ To support this, <c>Common Test</c> provides a callback module plugin
mechanism to handle configuration data.</p>
<section>
- <title>Default callback modules for handling configuration data</title>
- <p>The Common Test application includes default callback modules
- for handling configuration data specified in standard config files
- (see above) and in xml files:</p>
- <list>
+ <title>Default Callback Modules for Handling Configuration Data</title>
+ <p><c>Common Test</c> includes default callback modules
+ for handling configuration data specified in standard configuration files
+ (described earlier) and in XML files as follows:</p>
+ <list type="bulleted">
<item>
<c>ct_config_plain</c> - for reading configuration files with
- key-value tuples (standard format). This handler will be used to
+ key-value tuples (standard format). This handler is used to
parse configuration files if no user callback is specified.
</item>
<item>
@@ -215,59 +211,59 @@
</section>
<section>
- <title>Using XML configuration files</title>
- <p>This is an example of an XML configuration file:</p>
- <pre><![CDATA[
-<config>
+ <title>Using XML Configuration Files</title>
+ <p>An example of an XML configuration file follows:</p>
+ <pre>
+ <![CDATA[
+ <config>
<ftp_host>
<ftp>"targethost"</ftp>
<username>"tester"</username>
<password>"letmein"</password>
</ftp_host>
<lm_directory>"/test/loadmodules"</lm_directory>
-</config>]]></pre>
+ </config>]]></pre>
- <p>This configuration file, once read, will produce the same configuration
+ <p>Once read, this file produces the same configuration
variables as the following text file:</p>
<pre>
-{ftp_host, [{ftp,"targethost"},
- {username,"tester"},
- {password,"letmein"}]}.
+ {ftp_host, [{ftp,"targethost"},
+ {username,"tester"},
+ {password,"letmein"}]}.
-{lm_directory, "/test/loadmodules"}.</pre>
+ {lm_directory, "/test/loadmodules"}.</pre>
</section>
<section>
- <title>How to implement a user specific handler</title>
+ <title>Implement a User-Specific Handler</title>
- <p>The user specific handler can be written to handle special
+ <p>The user-specific handler can be written to handle special
configuration file formats. The parameter can be either file
- name(s) or configuration string(s) (the empty list is valid).</p>
+ names or configuration strings (the empty list is valid).</p>
<p>The callback module implementing the handler is responsible for
- checking correctness of configuration strings.</p>
+ checking the correctness of configuration strings.</p>
- <p>To perform validation of the configuration strings, the callback module
- should have the following function exported:</p>
+ <p>To validate the configuration strings, the callback module
+ is to have function <c>Callback:check_parameter/1</c> exported.</p>
- <p><c>Callback:check_parameter/1</c></p>
- <p>The input argument will be passed from Common Test, as defined in the test
- specification or given as an option to <c>ct_run</c> or <c>ct:run_test</c>.</p>
+ <p>The input argument is passed from <c>Common Test</c>, as defined in the test
+ specification, or specified as an option to <c>ct_run</c> or <c>ct:run_test</c>.</p>
- <p>The return value should be any of the following values indicating if given
+ <p>The return value is to be any of the following values, indicating if the specified
configuration parameter is valid:</p>
- <list>
+ <list type="bulleted">
<item>
- <c>{ok, {file, FileName}}</c> - parameter is a file name and
- the file exists,
+ <c>{ok, {file, FileName}}</c> - the parameter is a file name and
+ the file exists.
</item>
<item>
- <c>{ok, {config, ConfigString}}</c> - parameter is a config string
- and it is correct,
+ <c>{ok, {config, ConfigString}}</c> - the parameter is a configuration string
+ and it is correct.
</item>
<item>
- <c>{error, {nofile, FileName}}</c> - there is no file with the given
- name in the current directory,
+ <c>{error, {nofile, FileName}}</c> - there is no file with the specified
+ name in the current directory.
</item>
<item>
<c>{error, {wrong_config, ConfigString}}</c> - the configuration string
@@ -275,196 +271,196 @@
</item>
</list>
- <p>To perform reading of configuration data - initially before the tests
- start, or as a result of data being reloaded during test execution -
- the following function should be exported from the callback module:</p>
-
- <p><c>Callback:read_config/1</c></p>
+ <p>The function <c>Callback:read_config/1</c> is to be exported from the
+ callback module to read configuration data, initially before the tests
+ start, or as a result of data being reloaded during test execution.
+ The input argument is the same as for function <c>check_parameter/1</c>.</p>
- <p>The input argument is the same as for the <c>check_parameter/1</c> function.</p>
- <p>The return value should be either:</p>
+ <p>The return value is to be either of the following:</p>
- <list>
+ <list type="bulleted">
<item>
- <c>{ok, Config}</c> - if the configuration variables are read successfully,
+ <c>{ok, Config}</c> - if the configuration variables are read successfully.
</item>
<item>
<c>{error, {Error, ErrorDetails}}</c> - if the callback module fails to
- proceed with the given configuration parameters.
+ proceed with the specified configuration parameters.
</item>
</list>
<p><c>Config</c> is the proper Erlang key-value list, with possible
- key-value sublists as values, like for the configuration file
- example above:</p>
+ key-value sublists as values, like the earlier configuration file
+ example:</p>
<pre>
- [{ftp_host, [{ftp, "targethost"}, {username, "tester"}, {password, "letmein"}]},
- {lm_directory, "/test/loadmodules"}]</pre>
+ [{ftp_host, [{ftp, "targethost"}, {username, "tester"}, {password, "letmein"}]},
+ {lm_directory, "/test/loadmodules"}]</pre>
</section>
</section>
<section>
- <title>Examples of configuration data handling</title>
+ <title>Examples of Configuration Data Handling</title>
- <p>A config file for using the FTP client to access files on a remote
- host could look like this:</p>
+ <p>A configuration file for using the FTP client to access files on a remote
+ host can look as follows:</p>
<pre>
- {ftp_host, [{ftp,"targethost"},
- {username,"tester"},
- {password,"letmein"}]}.
+ {ftp_host, [{ftp,"targethost"},
+ {username,"tester"},
+ {password,"letmein"}]}.
- {lm_directory, "/test/loadmodules"}.</pre>
+ {lm_directory, "/test/loadmodules"}.</pre>
- <p>The XML version shown in the chapter above can also be used, but it should be
+ <p>The XML version shown earlier can also be used, but it is to be
explicitly specified that the <c>ct_config_xml</c> callback module is to be
- used by Common Test.</p>
+ used by <c>Common Test</c>.</p>
- <p>Example of how to assert that the configuration data is available and
- use it for an FTP session:</p>
+ <p>The following is an example of how to assert that the configuration data is available
+ and can be used for an FTP session:</p>
<pre>
- init_per_testcase(ftptest, Config) ->
- {ok,_} = ct_ftp:open(ftp),
- Config.
-
- end_per_testcase(ftptest, _Config) ->
- ct_ftp:close(ftp).
-
- ftptest() ->
- [{require,ftp,ftp_host},
- {require,lm_directory}].
-
- ftptest(Config) ->
- Remote = filename:join(ct:get_config(lm_directory), "loadmodX"),
- Local = filename:join(?config(priv_dir,Config), "loadmodule"),
- ok = ct_ftp:recv(ftp, Remote, Local),
- ...</pre>
+ init_per_testcase(ftptest, Config) ->
+ {ok,_} = ct_ftp:open(ftp),
+ Config.
+
+ end_per_testcase(ftptest, _Config) ->
+ ct_ftp:close(ftp).
+
+ ftptest() ->
+ [{require,ftp,ftp_host},
+ {require,lm_directory}].
+
+ ftptest(Config) ->
+ Remote = filename:join(ct:get_config(lm_directory), "loadmodX"),
+ Local = filename:join(?config(priv_dir,Config), "loadmodule"),
+ ok = ct_ftp:recv(ftp, Remote, Local),
+ ...</pre>
- <p>An example of how the above functions could be rewritten
- if necessary to open multiple connections to the FTP server:</p>
+ <p>The following is an example of how the functions in the previous example
+ can be rewritten if it is necessary to open multiple connections to the
+ FTP server:</p>
<pre>
- init_per_testcase(ftptest, Config) ->
- {ok,Handle1} = ct_ftp:open(ftp_host),
- {ok,Handle2} = ct_ftp:open(ftp_host),
- [{ftp_handles,[Handle1,Handle2]} | Config].
-
- end_per_testcase(ftptest, Config) ->
- lists:foreach(fun(Handle) -> ct_ftp:close(Handle) end,
- ?config(ftp_handles,Config)).
-
- ftptest() ->
- [{require,ftp_host},
- {require,lm_directory}].
-
- ftptest(Config) ->
- Remote = filename:join(ct:get_config(lm_directory), "loadmodX"),
- Local = filename:join(?config(priv_dir,Config), "loadmodule"),
- [Handle | MoreHandles] = ?config(ftp_handles,Config),
- ok = ct_ftp:recv(Handle, Remote, Local),
- ...</pre>
+ init_per_testcase(ftptest, Config) ->
+ {ok,Handle1} = ct_ftp:open(ftp_host),
+ {ok,Handle2} = ct_ftp:open(ftp_host),
+ [{ftp_handles,[Handle1,Handle2]} | Config].
+
+ end_per_testcase(ftptest, Config) ->
+ lists:foreach(fun(Handle) -> ct_ftp:close(Handle) end,
+ ?config(ftp_handles,Config)).
+
+ ftptest() ->
+ [{require,ftp_host},
+ {require,lm_directory}].
+
+ ftptest(Config) ->
+ Remote = filename:join(ct:get_config(lm_directory), "loadmodX"),
+ Local = filename:join(?config(priv_dir,Config), "loadmodule"),
+ [Handle | MoreHandles] = ?config(ftp_handles,Config),
+ ok = ct_ftp:recv(Handle, Remote, Local),
+ ...</pre>
</section>
<section>
- <title>Example of user specific configuration handler</title>
- <p>A simple configuration handling driver which will ask an external server for
- configuration data can be implemented this way:</p>
+ <title>Example of User-Specific Configuration Handler</title>
+ <p>A simple configuration handling driver, asking an external server for
+ configuration data, can be implemented as follows:</p>
<pre>
--module(config_driver).
--export([read_config/1, check_parameter/1]).
-
-read_config(ServerName)->
- ServerModule = list_to_atom(ServerName),
- ServerModule:start(),
- ServerModule:get_config().
-
-check_parameter(ServerName)->
- ServerModule = list_to_atom(ServerName),
- case code:is_loaded(ServerModule) of
- {file, _}->
- {ok, {config, ServerName}};
- false->
- case code:load_file(ServerModule) of
- {module, ServerModule}->
- {ok, {config, ServerName}};
- {error, nofile}->
- {error, {wrong_config, "File not found: " ++ ServerName ++ ".beam"}}
- end
- end.</pre>
-
- <p>The configuration string for this driver may be "config_server", if the
- config_server.erl module below is compiled and exists in the code path
+ -module(config_driver).
+ -export([read_config/1, check_parameter/1]).
+
+ read_config(ServerName)->
+ ServerModule = list_to_atom(ServerName),
+ ServerModule:start(),
+ ServerModule:get_config().
+
+ check_parameter(ServerName)->
+ ServerModule = list_to_atom(ServerName),
+ case code:is_loaded(ServerModule) of
+ {file, _}->
+ {ok, {config, ServerName}};
+ false->
+ case code:load_file(ServerModule) of
+ {module, ServerModule}->
+ {ok, {config, ServerName}};
+ {error, nofile}->
+ {error, {wrong_config, "File not found: " ++ ServerName ++ ".beam"}}
+ end
+ end.</pre>
+
+ <p>The configuration string for this driver can be <c>config_server</c>, if the
+ <c>config_server.erl</c> module that follows is compiled and exists in the code path
during test execution:</p>
<pre>
--module(config_server).
--export([start/0, stop/0, init/1, get_config/0, loop/0]).
-
--define(REGISTERED_NAME, ct_test_config_server).
-
-start()->
- case whereis(?REGISTERED_NAME) of
- undefined->
- spawn(?MODULE, init, [?REGISTERED_NAME]),
- wait();
- _Pid->
- ok
- end,
- ?REGISTERED_NAME.
-
-init(Name)->
- register(Name, self()),
- loop().
-
-get_config()->
- call(self(), get_config).
-
-stop()->
- call(self(), stop).
-
-call(Client, Request)->
- case whereis(?REGISTERED_NAME) of
- undefined->
- {error, {not_started, Request}};
- Pid->
- Pid ! {Client, Request},
- receive
- Reply->
- {ok, Reply}
- after 4000->
- {error, {timeout, Request}}
- end
- end.
-
-loop()->
- receive
- {Pid, stop}->
- Pid ! ok;
- {Pid, get_config}->
- {D,T} = erlang:localtime(),
- Pid !
- [{localtime, [{date, D}, {time, T}]},
- {node, erlang:node()},
- {now, erlang:now()},
- {config_server_pid, self()},
- {config_server_vsn, ?vsn}],
- ?MODULE:loop()
- end.
-
-wait()->
- case whereis(?REGISTERED_NAME) of
- undefined->
- wait();
- _Pid->
- ok
- end.</pre>
-
- <p>In this example, the handler also provides the ability to dynamically reload
- configuration variables. If <c>ct:reload_config(localtime)</c> is called from
+ -module(config_server).
+ -export([start/0, stop/0, init/1, get_config/0, loop/0]).
+
+ -define(REGISTERED_NAME, ct_test_config_server).
+
+ start()->
+ case whereis(?REGISTERED_NAME) of
+ undefined->
+ spawn(?MODULE, init, [?REGISTERED_NAME]),
+ wait();
+ _Pid->
+ ok
+ end,
+ ?REGISTERED_NAME.
+
+ init(Name)->
+ register(Name, self()),
+ loop().
+
+ get_config()->
+ call(self(), get_config).
+
+ stop()->
+ call(self(), stop).
+
+ call(Client, Request)->
+ case whereis(?REGISTERED_NAME) of
+ undefined->
+ {error, {not_started, Request}};
+ Pid->
+ Pid ! {Client, Request},
+ receive
+ Reply->
+ {ok, Reply}
+ after 4000->
+ {error, {timeout, Request}}
+ end
+ end.
+
+ loop()->
+ receive
+ {Pid, stop}->
+ Pid ! ok;
+ {Pid, get_config}->
+ {D,T} = erlang:localtime(),
+ Pid !
+ [{localtime, [{date, D}, {time, T}]},
+ {node, erlang:node()},
+ {now, erlang:now()},
+ {config_server_pid, self()},
+ {config_server_vsn, ?vsn}],
+ ?MODULE:loop()
+ end.
+
+ wait()->
+ case whereis(?REGISTERED_NAME) of
+ undefined->
+ wait();
+ _Pid->
+ ok
+ end.</pre>
+
+ <p>Here, the handler also provides for dynamically reloading of
+ configuration variables. If
+ <seealso marker="ct#reload_config-1"><c>ct:reload_config(localtime)</c></seealso> is called from
the test case function, all variables loaded with <c>config_driver:read_config/1</c>
- will be updated with their latest values, and the new value for variable
- <c>localtime</c> will be returned.</p>
+ are updated with their latest values, and the new value for variable
+ <c>localtime</c> is returned.</p>
</section>
</chapter>
diff --git a/lib/common_test/doc/src/cover_chapter.xml b/lib/common_test/doc/src/cover_chapter.xml
index f164fff0ad..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>
@@ -33,256 +33,251 @@
<section>
<marker id="cover"></marker>
<title>General</title>
- <p>Although Common Test was created primarly for the purpose of
- black box testing, nothing prevents it from working perfectly as
- a white box testing tool as well. This is especially true when
+ <p>Although <c>Common Test</c> was created primarily for
+ black-box testing, nothing prevents it from working perfectly as
+ a white-box testing tool as well. This is especially true when
the application to test is written in Erlang. Then the test
- ports are easily realized by means of Erlang function calls.</p>
+ ports are easily realized with Erlang function calls.</p>
- <p>When white box testing an Erlang application, it is useful to
- be able to measure the code coverage of the test. Common Test
+ <p>When white-box testing an Erlang application, it is useful to
+ be able to measure the code coverage of the test. <c>Common Test</c>
provides simple access to the OTP Cover tool for this
- purpose. Common Test handles all necessary communication with
- the Cover tool (starting, compiling, analysing, etc). All the
- Common Test user needs to do is to specify the extent of the
+ purpose. <c>Common Test</c> handles all necessary communication with
+ the Cover tool (starting, compiling, analysing, and so on).
+ The <c>Common Test</c> user only needs to specify the extent of the
code coverage analysis.</p>
</section>
<section>
- <title>Usage</title>
- <p>To specify what modules should be included
- in the code coverage test, you provide a cover specification
- file. Using this file you can point out specific modules or
- specify directories that contain modules which should all be
- included in the analysis. You can also, in the same fashion,
- specify modules that should be excluded from the analysis.</p>
+ <title>Use</title>
+ <p>To specify the modules to be included in the code coverage test,
+ provide a cover specification file. With this file you can point
+ out specific modules or specify directories containing modules to be
+ included in the analysis. You can also specify modules to be excluded
+ from the analysis.</p>
<p>If you are testing a distributed Erlang application, it is
likely that code you want included in the code coverage analysis
- gets executed on an Erlang node other than the one Common Test
- is running on. If this is the case you need to specify these
- other nodes in the cover specification file or add them
- dynamically to the code coverage set of nodes. See the
- <c>ct_cover</c> page in the reference manual for details on the
- latter.</p>
+ gets executed on another Erlang node than the one <c>Common Test</c>
+ is running on. If so, you must specify these other nodes in the
+ cover specification file or add them dynamically to the code coverage
+ set of nodes. For details on the latter, see module
+ <seealso marker="ct_cover"><c>ct_cover</c></seealso>.</p>
<p>In the cover specification file you can also specify your
required level of the code coverage analysis; <c>details</c> or
<c>overview</c>. In detailed mode, you get a coverage overview
- page, showing you per module and total coverage percentages, as
- well as one HTML file printed for each module included in the
- analysis that shows exactly what parts of the code have been
+ page, showing per module and total coverage percentages.
+ You also get an HTML file printed for each module included in the
+ analysis showing exactly what parts of the code have been
executed during the test. In overview mode, only the code
- coverage overview page gets printed.</p>
+ coverage overview page is printed.</p>
<p>You can choose to export and import code coverage data between
tests. If you specify the name of an export file in the cover
- specification file, Common Test will export collected coverage
- data to this file at the end of the test. You may similarly
- specify that previously exported data should be imported and
- included in the analysis for a test (you can specify multiple
- import files). This way it is possible to analyse total code coverage
- without necessarily running all tests at once.</p>
-
- <p>To activate the code coverage support, you simply specify the
- name of the cover specification file as you start Common Test.
- This you do either by using the <c>-cover</c> flag with <c>ct_run</c>.
- Example:</p>
-
- <p><c>$ ct_run -dir $TESTOBJS/db -cover $TESTOBJS/db/config/db.coverspec</c></p>
+ specification file, <c>Common Test</c> exports collected coverage
+ data to this file at the end of the test. You can similarly
+ specify previously exported data to be imported and
+ included in the analysis for a test (multiple import files can be specified).
+ This way, the total code coverage can be analyzed without necessarily
+ running all tests at once.</p>
+
+ <p>To activate the code coverage support, specify the name of the cover
+ specification file as you start <c>Common Test</c>.
+ Do this by using flag <c>-cover</c> with
+ <seealso marker="ct_run"><c>ct_run</c></seealso>,
+ for example:</p>
+ <pre>
+ $ ct_run -dir $TESTOBJS/db -cover $TESTOBJS/db/config/db.coverspec</pre>
- <p>You may also pass the cover specification file name in a
- call to <seealso marker="ct#run_test-1"><c>ct:run_test/1</c></seealso>, by adding a <c>{cover,CoverSpec}</c>
- tuple to the <c>Opts</c> argument. Also, you can of course
- enable code coverage in your test specifications (read
- more in the chapter about
- <seealso marker="run_test_chapter#test_specifications">using test
- specifications</seealso>).</p>
+ <p>You can also pass the cover specification file name in a
+ call to <seealso marker="ct#run_test-1"><c>ct:run_test/1</c></seealso>,
+ by adding a <c>{cover,CoverSpec}</c> tuple to argument <c>Opts</c>.</p>
+ <p>You can also enable code coverage in your test specifications (see section
+ <seealso marker="run_test_chapter#test_specifications">Test Specifications</seealso>
+ in section Running Tests and Analyzing Results).</p>
</section>
<section>
<marker id="cover_stop"></marker>
- <title>Stopping the cover tool when tests are completed</title>
- <p>By default the Cover tool is automatically stopped when the
- tests are completed. This causes the original (non cover
- compiled) modules to be loaded back in to the test node. If a
- process at this point is still running old code of any of the
+ <title>Stopping the Cover Tool When Tests Are Completed</title>
+ <p>By default, the Cover tool is automatically stopped when the
+ tests are completed. This causes the original (non-cover
+ compiled) modules to be loaded back into the test node. If a
+ process at this point still runs old code of any of the
modules that are cover compiled, meaning that it has not done
any fully qualified function call after the cover compilation,
- the process will now be killed. To avoid this it is possible to
- set the value of the <c>cover_stop</c> option to
- <c>false</c>. This means that the modules will stay cover
- compiled, and it is therefore only recommended if the erlang
- node(s) under test is terminated after the test is completed
- or if cover can be manually stopped.</p>
-
- <p>The option can be set by using the <c>-cover_stop</c> flag with
- <c>ct_run</c>, by adding <c>{cover_stop,true|false}</c> to the
- Opts argument to <seealso
- marker="ct#run_test-1"><c>ct:run_test/1</c></seealso>, or by adding
- a <c>cover_stop</c> term in your test specification (see chapter
- about <seealso
- marker="run_test_chapter#test_specifications">test
- specifications</seealso>).</p>
+ the process is killed. To avoid this, set the value of option
+ <c>cover_stop</c> to <c>false</c>. This means that the
+ modules stay cover compiled. Therefore, this is only recommended
+ if the Erlang nodes under test are terminated after the test is
+ completed, or if cover can be manually stopped.</p>
+
+ <p>The option can be set by using flag <c>-cover_stop</c> with
+ <c>ct_run</c>, by adding <c>{cover_stop,true|false}</c> to argument
+ <c>Opts</c> to
+ <seealso marker="ct#run_test-1"><c>ct:run_test/1</c></seealso>,
+ or by adding a <c>cover_stop</c> term in the test specification (see section
+ <seealso marker="run_test_chapter#test_specifications">Test Specifications</seealso>
+ in section Running Tests and Analyzing Results).</p>
</section>
<section>
- <title>The cover specification file</title>
- <p>These are the terms allowed in a cover specification file:</p>
+ <title>The Cover Specification File</title>
+ <p>The following terms are allowed in a cover specification file:</p>
<pre>
- %% List of Nodes on which cover will be active during test.
- %% Nodes = [atom()]
- {nodes, Nodes}.
-
- %% Files with previously exported cover data to include in analysis.
- %% CoverDataFiles = [string()]
- {import, CoverDataFiles}.
-
- %% Cover data file to export from this session.
- %% CoverDataFile = string()
- {export, CoverDataFile}.
-
- %% Cover analysis level.
- %% Level = details | overview
- {level, Level}.
-
- %% Directories to include in cover.
- %% Dirs = [string()]
- {incl_dirs, Dirs}.
-
- %% Directories, including subdirectories, to include.
- {incl_dirs_r, Dirs}.
-
- %% Specific modules to include in cover.
- %% Mods = [atom()]
- {incl_mods, Mods}.
-
- %% Directories to exclude in cover.
- {excl_dirs, Dirs}.
-
- %% Directories, including subdirectories, to exclude.
- {excl_dirs_r, Dirs}.
-
- %% Specific modules to exclude in cover.
- {excl_mods, Mods}.
-
- %% Cross cover compilation
- %% Tag = atom(), an identifier for a test run
- %% Mod = [atom()], modules to compile for accumulated analysis
- {cross,[{Tag,Mods}]}.
- </pre>
-
- <p>The <c>incl_dirs_r</c> and <c>excl_dirs_r</c> terms tell Common
- Test to search the given directories recursively and include
- or exclude any module found during the search. The
- <c>incl_dirs</c> and <c>excl_dirs</c> terms result in a
- non-recursive search for modules (i.e. only modules found in
- the given directories are included or excluded).</p>
- <p><em>Note:</em> Directories containing Erlang modules that are
- to be included in a code coverage test must exist in the code
- server path, or the cover tool will fail to recompile the modules.
- (It is not sufficient to specify these directories in the cover
- specification file for Common Test).</p>
+ %% List of Nodes on which cover will be active during test.
+ %% Nodes = [atom()]
+ {nodes, Nodes}.
+
+ %% Files with previously exported cover data to include in analysis.
+ %% CoverDataFiles = [string()]
+ {import, CoverDataFiles}.
+
+ %% Cover data file to export from this session.
+ %% CoverDataFile = string()
+ {export, CoverDataFile}.
+
+ %% Cover analysis level.
+ %% Level = details | overview
+ {level, Level}.
+
+ %% Directories to include in cover.
+ %% Dirs = [string()]
+ {incl_dirs, Dirs}.
+
+ %% Directories, including subdirectories, to include.
+ {incl_dirs_r, Dirs}.
+
+ %% Specific modules to include in cover.
+ %% Mods = [atom()]
+ {incl_mods, Mods}.
+
+ %% Directories to exclude in cover.
+ {excl_dirs, Dirs}.
+
+ %% Directories, including subdirectories, to exclude.
+ {excl_dirs_r, Dirs}.
+
+ %% Specific modules to exclude in cover.
+ {excl_mods, Mods}.
+
+ %% Cross cover compilation
+ %% Tag = atom(), an identifier for a test run
+ %% Mod = [atom()], modules to compile for accumulated analysis
+ {cross,[{Tag,Mods}]}.</pre>
+
+ <p>The terms <c>incl_dirs_r</c> and <c>excl_dirs_r</c> tell <c>Common
+ Test</c> to search the specified directories recursively and include
+ or exclude any module found during the search. The terms
+ <c>incl_dirs</c> and <c>excl_dirs</c> result in a
+ non-recursive search for modules (that is, only modules found in
+ the specified directories are included or excluded).</p>
+ <note><p>Directories containing Erlang modules to be included in a code
+ coverage test must exist in the code server path. Otherwise,
+ the Cover tool fails to recompile the modules. It is not sufficient to
+ specify these directories in the cover specification file for
+ <c>Common Test</c>.</p></note>
</section>
<section>
<marker id="cross_cover"/>
- <title>Cross cover analysis</title>
+ <title>Cross Cover Analysis</title>
<p>The cross cover mechanism allows cover analysis of modules
- across multiple tests. It is useful if some code, e.g. a library
- module, is used by many different tests and the accumulated cover
- result is desirable.</p>
+ across multiple tests. It is useful if some code, for example, a
+ library module, is used by many different tests and the accumulated
+ cover result is desirable.</p>
- <p>This can of course also be achieved in a more customized way by
- using the <c>export</c> parameter in the cover specification and
- analysing the result off line, but the cross cover mechanism is a
- build in solution which also provides the logging.</p>
+ <p>This can also be achieved in a more customized way by
+ using parameter <c>export</c> in the cover specification and
+ analysing the result off line. However, the cross cover mechanism is a
+ built-in solution that also provides logging.</p>
- <p>The mechanism is easiest explained via an example:</p>
+ <p>The mechanism is easiest explained by an example:</p>
- <p>Let's say that there are two systems, <c>s1</c> and <c>s2</c>,
- which are tested in separate test runs. System <c>s1</c> contains
- a library module <c>m1</c> which is tested by the <c>s1</c> test
- run and is included in <c>s1</c>'s cover specification:</p>
+ <p>Assume that there are two systems, <c>s1</c> and <c>s2</c>,
+ that are tested in separate test runs. System <c>s1</c> contains
+ a library module <c>m1</c> tested by test run <c>s1</c> and
+ is included in the cover specification of <c>s1</c> as follows:</p>
<code type="none">
-s1.cover:
- {incl_mods,[m1]}.</code>
+ s1.cover:
+ {incl_mods,[m1]}.</code>
<p>When analysing code coverage, the result for <c>m1</c> can be
seen in the cover log in the <c>s1</c> test result.</p>
- <p>Now, let's imagine that since <c>m1</c> is a library module, it
- is also used quite a bit by system <c>s2</c>. The <c>s2</c> test
- run does not specifically test <c>m1</c>, but it might still be
- interesting to see which parts of <c>m1</c> is actually covered by
- the <c>s2</c> tests. To do this, <c>m1</c> could be included also
- in <c>s2</c>'s cover specification:</p>
+ <p>Now, imagine that as <c>m1</c> is a library module, it
+ is also often used by system <c>s2</c>. Test run <c>s2</c>
+ does not specifically test <c>m1</c>, but it can still be
+ interesting to see which parts of <c>m1</c> that are covered
+ by the <c>s2</c> tests. To do this, <c>m1</c> can be included also
+ in the cover specification of <c>s2</c> as follows:</p>
<code type="none">
-s2.cover:
- {incl_mods,[m1]}.</code>
+ s2.cover:
+ {incl_mods,[m1]}.</code>
- <p>This would give an entry for <c>m1</c> also in the cover log
- for the <c>s2</c> test run. The problem is that this would only
- reflect the coverage by <c>s2</c> tests, not the accumulated
- result over <c>s1</c> and <c>s2</c>. And this is where the cross
+ <p>This gives an entry for <c>m1</c> also in the cover log
+ for test run <c>s2</c>. The problem is that this only
+ reflects the coverage by <c>s2</c> tests, not the accumulated
+ result over <c>s1</c> and <c>s2</c>. This is where the cross
cover mechanism comes in handy.</p>
- <p>If instead the cover specification for <c>s2</c> was like
- this:</p>
+ <p>If instead the cover specification for <c>s2</c> is like
+ the following:</p>
<code type="none">
-s2.cover:
- {cross,[{s1,[m1]}]}.</code>
+ s2.cover:
+ {cross,[{s1,[m1]}]}.</code>
- <p>then <c>m1</c> would be cover compiled in the <c>s2</c> test
- run, but not shown in the coverage log. Instead, if
- <c>ct_cover:cross_cover_analyse/2</c> is called after both
- <c>s1</c> and <c>s2</c> test runs are completed, the accumulated
- result for <c>m1</c> would be available in the cross cover log for
- the <c>s1</c> test run.</p>
+ <p>Then <c>m1</c> is cover compiled in test run <c>s2</c>,
+ but not shown in the coverage log. Instead, if
+ <seealso marker="ct_cover#cross_cover_analyse-2"><c>ct_cover:cross_cover_analyse/2</c></seealso>
+ is called after both <c>s1</c> and <c>s2</c> test runs are completed,
+ the accumulated result for <c>m1</c> is available in the cross cover
+ log for test run <c>s1</c>.</p>
- <p>The call to the analyse function must be like this:</p>
+ <p>The call to the analyze function must be as follows:</p>
<code type="none">
-ct_cover:cross_cover_analyse(Level, [{s1,S1LogDir},{s2,S2LogDir}]).</code>
+ ct_cover:cross_cover_analyse(Level, [{s1,S1LogDir},{s2,S2LogDir}]).</code>
- <p>where <c>S1LogDir</c> and <c>S2LogDir</c> are the directories
+ <p>Here, <c>S1LogDir</c> and <c>S2LogDir</c> are the directories
named <c>&lt;TestName&gt;.logs</c> for each test respectively.</p>
- <p>Note the tags <c>s1</c> and <c>s2</c> which are used in the
+ <p>Notice the tags <c>s1</c> and <c>s2</c>, which are used in the
cover specification file and in the call to
- <c>ct_cover:cross_cover_analyse/2</c>. The point of these are only
+ <c>ct_cover:cross_cover_analyse/2</c>. The purpose of these is only
to map the modules specified in the cover specification to the log
- directory specified in the call to the analyse function. The name
- of the tag has no meaning beyond this.</p>
+ directory specified in the call to the analyze function. The tag name
+ has no meaning beyond this.</p>
</section>
<section>
<title>Logging</title>
<p>To view the result of a code coverage test, click the button
- labled "COVER LOG" in the top level index page for the test run.</p>
+ labeled "COVER LOG" in the top-level index page for the test run.</p>
- <p>Prior to Erlang/OTP 17.1, if your test run consisted of
+ <p>Before Erlang/OTP 17.1, if your test run consisted of
multiple tests, cover would be started and stopped for each test
- within the test run. Separate logs would be available via the
+ within the test run. Separate logs would be available through the
"Coverage log" link on the test suite result pages. These links
are still available, but now they all point to the same page as
- the button on the top level index page. The log contains the
- accumulated results for the complete test run. See the release
- notes for more information about this change.</p>
+ the button on the top-level index page. The log contains the
+ accumulated results for the complete test run. For details about
+ this change, see the release notes.</p>
- <p>The buttonc takes you to the code coverage overview page. If you
- have successfully performed a detailed coverage analysis, you
- find links to each individual module coverage page here.</p>
+ <p>The button takes you to the code coverage overview page. If you
+ have successfully performed a detailed coverage analysis,
+ links to each individual module coverage page are found here.</p>
- <p>If cross cover analysis has been performed, and there are
- accumulated coverage results for the current test, then the -
- "Coverdata collected over all tests" link will take you to these
+ <p>If cross cover analysis is performed, and there are
+ accumulated coverage results for the current test, the link
+ "Coverdata collected over all tests" takes you to these
results.</p>
</section>
diff --git a/lib/common_test/doc/src/ct.xml b/lib/common_test/doc/src/ct.xml
new file mode 100644
index 0000000000..5231ef24a4
--- /dev/null
+++ b/lib/common_test/doc/src/ct.xml
@@ -0,0 +1,1415 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE erlref SYSTEM "erlref.dtd">
+
+<erlref>
+ <header>
+ <copyright>
+ <year>2010</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>ct</title>
+ <prepared></prepared>
+ <responsible></responsible>
+ <docno></docno>
+ <approved></approved>
+ <checked></checked>
+ <date></date>
+ <rev>A</rev>
+ <file>ct.xml</file>
+ </header>
+ <module>ct</module>
+ <modulesummary>Main user interface for the Common Test framework.</modulesummary>
+
+ <description>
+
+ <p>Main user interface for the <c>Common Test</c> framework.</p>
+
+ <p>This module implements the command-line interface for running
+ tests and basic functions for <c>Common Test</c> case issues, such as
+ configuration and logging.</p>
+
+ <p><em>Test Suite Support Macros</em></p>
+
+ <p>The <c>config</c> macro is defined in <c>ct.hrl</c>. This macro is
+ to be used to retrieve information from the <c>Config</c> variable sent
+ to all test cases. It is used with two arguments; the first is the name
+ of the configuration variable to retrieve, the second is the
+ <c>Config</c> variable supplied to the test case.</p>
+
+ <p>Possible configuration variables include:</p>
+
+ <list type="bulleted">
+ <item><p><c>data_dir</c> - Data file directory</p></item>
+ <item><p><c>priv_dir</c> - Scratch file directory</p></item>
+ <item><p>Whatever added by
+ <seealso marker="common_test#Module:init_per_suite-1"><c>init_per_suite/1</c></seealso>
+ or
+ <seealso marker="common_test#Module:init_per_testcase-2"><c>init_per_testcase/2</c></seealso>
+ in the test suite.</p></item>
+ </list>
+
+ </description>
+
+ <section>
+ <title>Data Types</title>
+ <marker id="types"/>
+ <taglist>
+
+ <tag><c>handle() = pid()</c></tag>
+ <item><marker id="type-handle"/>
+ <p>The identity (handle) of a connection.</p></item>
+
+ <tag><c>target_name() = atom()</c></tag>
+ <item><marker id="type-target_name"/>
+ <p>A name and association to configuration data introduced
+ through a require statement, or a call to
+ <seealso marker="#require-2"><c>ct:require/2</c></seealso>,
+ for example,
+ <c>ct:require(mynodename,{node,[telnet]})</c>.</p></item>
+
+ </taglist>
+ </section>
+
+ <funcs>
+ <func>
+ <name>abort_current_testcase(Reason) -&gt; ok | {error, ErrorReason}</name>
+ <fsummary>Aborts the currently executing test case.</fsummary>
+ <type>
+ <v>Reason = term()</v>
+ <v>ErrorReason = no_testcase_running | parallel_group</v>
+ </type>
+ <desc><marker id="abort_current_testcase-1"/>
+ <p>Aborts the currently executing test case. The user must know with
+ certainty which test case is currently executing. The function is
+ therefore only safe to call from a function that has been called
+ (or synchronously invoked) by the test case.</p>
+
+ <p><c>Reason</c>, the reason for aborting the test case, is printed
+ in the test case log.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>add_config(Callback, Config) -&gt; ok | {error, Reason}</name>
+ <fsummary>Loads configuration variables using the specified callback
+ module and configuration string.</fsummary>
+ <type>
+ <v>Callback = atom()</v>
+ <v>Config = string()</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc><marker id="add_config-2"/>
+ <p>Loads configuration variables using the specified callback module and
+ configuration string. The callback module is to be either loaded or
+ present in the code part. Loaded configuration variables can later
+ be removed using function
+ <seealso marker="#remove_config-2"><c>ct:remove_config/2</c></seealso>.
+ </p>
+ </desc>
+ </func>
+
+ <func>
+ <name>break(Comment) -&gt; ok | {error, Reason}</name>
+ <fsummary>Cancels any active timetrap and pause the execution of the
+ current test case until the user calls function continue/0.</fsummary>
+ <type>
+ <v>Comment = string()</v>
+ <v>Reason = {multiple_cases_running, TestCases} | 'enable break with release_shell option'</v>
+ <v>TestCases = [atom()]</v>
+ </type>
+ <desc><marker id="break-1"/>
+ <p>Cancels any active timetrap and pauses the execution of the
+ current test case until the user calls function <c>continue/0</c>.
+ The user can then interact with the Erlang node running the tests,
+ for example, for debugging purposes or for manually executing a
+ part of the test case. If a parallel group is executing,
+ <seealso marker="#break-2"><c>ct:break/2</c></seealso> is to be
+ called instead.</p>
+ <p>A cancelled timetrap is not automatically reactivated after the
+ break, but must be started exlicitly with
+ <seealso marker="#timetrap-1"><c>ct:timetrap/1</c></seealso>.</p>
+ <p>In order for the break/continue functionality to work, <c>Common
+ Test</c> must release the shell process controlling <c>stdin</c>.
+ This is done by setting start option <c>release_shell</c>
+ to <c>true</c>. For details, see section
+ <seealso marker="run_test_chapter#erlang_shell_or_program">Running
+ Tests from the Erlang Shell or from an Erlang Program</seealso>
+ in the User's Guide.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>break(TestCase, Comment) -&gt; ok | {error, Reason}</name>
+ <fsummary>Works the same way as break/1, only argument TestCase makes it
+ possible to pause a test case executing in a parallel group.</fsummary>
+ <type>
+ <v>TestCase = atom()</v>
+ <v>Comment = string()</v>
+ <v>Reason = 'test case not running' | 'enable break with release_shell option'</v>
+ </type>
+ <desc><marker id="break-2"/>
+ <p>Works the same way as
+ <seealso marker="#break-1"><c>ct:break/1</c></seealso>, only
+ argument <c>TestCase</c> makes it possible to pause a test case
+ executing in a parallel group. Function
+ <seealso marker="#continue-1"><c>ct:continue/1</c></seealso> is to
+ be used to resume execution of <c>TestCase</c>.</p>
+
+ <p>For details, see
+ <seealso marker="#break/1"><c>ct:break/1</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>capture_get() -&gt; ListOfStrings</name>
+ <fsummary>Equivalent to capture_get([default]).</fsummary>
+ <type>
+ <v>ListOfStrings = [string()]</v>
+ </type>
+ <desc><marker id="capture_get-0"/>
+ <p>Equivalent to
+ <seealso marker="#capture_get-1">ct:capture_get([default])</seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>capture_get(ExclCategories) -&gt; ListOfStrings</name>
+ <fsummary>Returns and purges the list of text strings buffered during
+ the latest session of capturing printouts to stdout.</fsummary>
+ <type>
+ <v>ExclCategories = [atom()]</v>
+ <v>ListOfStrings = [string()]</v>
+ </type>
+ <desc><marker id="capture_get-1"/>
+ <p>Returns and purges the list of text strings buffered during the
+ latest session of capturing printouts to <c>stdout</c>. Log
+ categories that are to be ignored in <c>ListOfStrings</c> can be
+ specified with <c>ExclCategories</c>.
+ If <c>ExclCategories = []</c>, no filtering takes place.</p>
+
+ <p>See also
+ <seealso marker="#capture_start-0"><c>ct:capture_start/0</c></seealso>,
+ <seealso marker="#capture_stop-0"><c>ct:capture_stop/0</c></seealso>,
+ <seealso marker="#log-3"><c>ct:log/3</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>capture_start() -&gt; ok</name>
+ <fsummary>Starts capturing all text strings printed to stdout
+ during execution of the test case.</fsummary>
+ <desc><marker id="capture_start-0"/>
+ <p>Starts capturing all text strings printed to <c>stdout</c>
+ during execution of the test case.</p>
+
+ <p>See also
+ <seealso marker="#capture_get-1"><c>ct:capture_get/1</c></seealso>,
+ <seealso marker="#capture_stop-0"><c>ct:capture_stop/0</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>capture_stop() -&gt; ok</name>
+ <fsummary>Stops capturing text strings (a session started with
+ capture_start/0).</fsummary>
+ <desc><marker id="capture_stop-0"/>
+ <p>Stops capturing text strings (a session started with
+ <c>capture_start/0</c>).</p>
+
+ <p>See also
+ <seealso marker="#capture_get-1"><c>ct:capture_get/1</c></seealso>,
+ <seealso marker="#capture_start-0"><c>ct:capture_start/0</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>comment(Comment) -&gt; ok</name>
+ <fsummary>Prints the specified Comment in the comment field in the
+ table on the test suite result page.</fsummary>
+ <type>
+ <v>Comment = term()</v>
+ </type>
+ <desc><marker id="comment-1"/>
+ <p>Prints the specified <c>Comment</c> in the comment field in the
+ table on the test suite result page.</p>
+
+ <p>If called several times, only the last comment is printed. The
+ test case return value <c>{comment,Comment}</c> overwrites the
+ string set by this function.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>comment(Format, Args) -&gt; ok</name>
+ <fsummary>Prints the formatted string in the comment field in the
+ table on the test suite result page.</fsummary>
+ <type>
+ <v>Format = string()</v>
+ <v>Args = list()</v>
+ </type>
+ <desc><marker id="comment-2"/>
+ <p>Prints the formatted string in the comment field in the table
+ on the test suite result page.</p>
+
+ <p>Arguments <c>Format</c> and <c>Args</c> are used in a call to
+ <c>io_lib:format/2</c> to create the comment string. The behavior
+ of <c>comment/2</c> is otherwise the same as function
+ <seealso marker="#comment-1"><c>ct:comment/1</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>continue() -&gt; ok</name>
+ <fsummary>This function must be called to continue after a test
+ case (not executing in a parallel group) has called break/1.</fsummary>
+ <desc><marker id="continue-0"/>
+ <p>This function must be called to continue after a test case
+ (not executing in a parallel group) has called function
+ <seealso marker="#break-1"><c>ct:break/1</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>continue(TestCase) -&gt; ok</name>
+ <fsummary>This function must be called to continue after a test case
+ has called break/2.</fsummary>
+ <type>
+ <v>TestCase = atom()</v>
+ </type>
+ <desc><marker id="continue-1"/>
+ <p>This function must be called to continue after a test case has
+ called <seealso marker="#break-2"><c>ct:break/2</c></seealso>.
+ If the paused test case, <c>TestCase</c>, executes in a parallel
+ group, this function, rather than <c>continue/0</c>, must be used
+ to let the test case proceed.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>decrypt_config_file(EncryptFileName, TargetFileName) -&gt; ok | {error, Reason}</name>
+ <fsummary>Decrypts EncryptFileName, previously generated with
+ encrypt_config_file/2,3.</fsummary>
+ <type>
+ <v>EncryptFileName = string()</v>
+ <v>TargetFileName = string()</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc><marker id="decrypt_config_file-2"/>
+ <p>Decrypts <c>EncryptFileName</c>, previously generated with
+ <seealso marker="#encrypt_config_file-2"><c>ct:encrypt_config_file/2,3</c></seealso>.
+ The original file contents is saved in the target file. The
+ encryption key, a string, must be available in a text file named
+ <c>.ct_config.crypt</c>, either in the current directory, or the
+ home directory of the user (it is searched for in that order).</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>decrypt_config_file(EncryptFileName, TargetFileName, KeyOrFile) -&gt; ok | {error, Reason}</name>
+ <fsummary>Decrypts EncryptFileName, previously generated with
+ encrypt_config_file/2,3.</fsummary>
+ <type>
+ <v>EncryptFileName = string()</v>
+ <v>TargetFileName = string()</v>
+ <v>KeyOrFile = {key, string()} | {file, string()}</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc><marker id="decrypt_config_file-3"/>
+ <p>Decrypts <c>EncryptFileName</c>, previously generated with
+ <seealso marker="#encrypt_config_file-2"><c>ct:encrypt_config_file/2,3</c></seealso>.
+ The original file contents is saved in the target file. The key
+ must have the same value as that used for encryption.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>encrypt_config_file(SrcFileName, EncryptFileName) -&gt; ok | {error, Reason}</name>
+ <fsummary>Encrypts the source configuration file with DES3 and saves the
+ result in file EncryptFileName.</fsummary>
+ <type>
+ <v>SrcFileName = string()</v>
+ <v>EncryptFileName = string()</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc><marker id="encrypt_config_file-2"/>
+ <p>Encrypts the source configuration file with DES3 and saves the result
+ in file <c>EncryptFileName</c>. The key, a string, must be
+ available in a text file named <c>.ct_config.crypt</c>, either
+ in the current directory, or the home directory of the user (it
+ is searched for in that order).</p>
+
+ <p>For information about using encrypted configuration files when
+ running tests, see section
+ <seealso marker="config_file_chapter#encrypted_config_files">Encrypted
+ Configuration Files</seealso> in the User's Guide.</p>
+
+ <p>For details on DES3 encryption/decryption, see application
+ <seealso marker="crypto:index"><c>Crypto</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>encrypt_config_file(SrcFileName, EncryptFileName, KeyOrFile) -&gt; ok | {error, Reason}</name>
+ <fsummary>Encrypts the source configuration file with DES3 and saves the
+ result in the target file EncryptFileName.</fsummary>
+ <type>
+ <v>SrcFileName = string()</v>
+ <v>EncryptFileName = string()</v>
+ <v>KeyOrFile = {key, string()} | {file, string()}</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc><marker id="encrypt_config_file-3"/>
+ <p>Encrypts the source configuration file with DES3 and saves the result
+ in the target file <c>EncryptFileName</c>. The encryption key
+ to use is either the value in <c>{key,Key}</c> or the value
+ stored in the file specified by <c>{file,File}</c>.</p>
+
+ <p>For information about using encrypted configuration files when
+ running tests, see section
+ <seealso marker="config_file_chapter#encrypted_config_files">Encrypted
+ Configuration Files</seealso> in the User's Guide.</p>
+
+ <p>For details on DES3 encryption/decryption, see application
+ <seealso marker="crypto:index"><c>Crypto</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>fail(Reason) -&gt; ok</name>
+ <fsummary>Terminates a test case with the specified error
+ Reason.</fsummary>
+ <type>
+ <v>Reason = term()</v>
+ </type>
+ <desc><marker id="fail-1"/>
+ <p>Terminates a test case with the specified error <c>Reason</c>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>fail(Format, Args) -&gt; ok</name>
+ <fsummary>Terminates a test case with an error message specified by
+ a format string and a list of values (used as arguments to
+ io_lib:format/2).</fsummary>
+ <type>
+ <v>Format = string()</v>
+ <v>Args = list()</v>
+ </type>
+ <desc><marker id="fail-2"/>
+ <p>Terminates a test case with an error message specified by a
+ format string and a list of values (used as arguments to
+ <c>io_lib:format/2</c>).</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>get_config(Required) -&gt; Value</name>
+ <fsummary>Equivalent to get_config(Required, undefined, []).</fsummary>
+ <desc><marker id="get_config-1"/>
+ <p>Equivalent to <seealso marker="#get_config-3"><c>ct:get_config(Required,
+ undefined, [])</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>get_config(Required, Default) -&gt; Value</name>
+ <fsummary>Equivalent to get_config(Required, Default, []).</fsummary>
+ <desc><marker id="get_config-2"/>
+ <p>Equivalent to <seealso marker="#get_config-3"><c>ct:get_config(Required,
+ Default, [])</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>get_config(Required, Default, Opts) -&gt; ValueOrElement</name>
+ <fsummary>Reads configuration data values.</fsummary>
+ <type>
+ <v>Required = KeyOrName | {KeyOrName, SubKey} | {KeyOrName, SubKey, SubKey}</v>
+ <v>KeyOrName = atom()</v>
+ <v>SubKey = atom()</v>
+ <v>Default = term()</v>
+ <v>Opts = [Opt] | []</v>
+ <v>Opt = element | all</v>
+ <v>ValueOrElement = term() | Default</v>
+ </type>
+ <desc><marker id="get_config-3"/>
+ <p>Reads configuration data values.</p>
+
+ <p>Returns the matching values or configuration elements, given a
+ configuration variable key or its associated name (if one has been
+ specified with
+ <seealso marker="#require-2"><c>ct:require/2</c></seealso>
+ or a <c>require</c> statement).</p>
+
+ <p><em>Example:</em></p>
+
+ <p>Given the following configuration file:</p>
+
+ <pre>
+ {unix,[{telnet,IpAddr},
+ {user,[{username,Username},
+ {password,Password}]}]}.</pre>
+
+ <p>Then:</p>
+
+ <pre>
+ ct:get_config(unix,Default) -&gt; [{telnet,IpAddr},
+ {user, [{username,Username}, {password,Password}]}]
+ ct:get_config({unix,telnet},Default) -&gt; IpAddr
+ ct:get_config({unix,user,username},Default) -&gt; Username
+ ct:get_config({unix,ftp},Default) -&gt; Default
+ ct:get_config(unknownkey,Default) -&gt; Default</pre>
+
+ <p>If a configuration variable key has been associated with a name (by
+ <seealso marker="#require-2"><c>ct:require/2</c></seealso>
+ or a <c>require</c> statement), the name can be used instead
+ of the key to read the value:</p>
+
+ <pre>
+ ct:require(myuser,{unix,user}) -&gt; ok.
+ ct:get_config(myuser,Default) -&gt; [{username,Username}, {password,Password}]</pre>
+
+ <p>If a configuration variable is defined in multiple files, use option
+ <c>all</c> to access all possible values. The values are returned
+ in a list. The order of the elements corresponds to the order
+ that the configuration files were specified at startup.</p>
+
+ <p>If configuration elements (key-value tuples) are to be returned as
+ result instead of values, use option <c>element</c>. The
+ returned elements are then on the form <c>{Required,Value}</c>.</p>
+
+ <p>See also
+ <seealso marker="#get_config-1"><c>ct:get_config/1</c></seealso>,
+ <seealso marker="#get_config-2"><c>ct:get_config/2</c></seealso>,
+ <seealso marker="#require-1"><c>ct:require/1</c></seealso>,
+ <seealso marker="#require-2"><c>ct:require/2</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>get_event_mgr_ref() -&gt; EvMgrRef</name>
+ <fsummary>Gets a reference to the <c>Common Test</c> event manager.</fsummary>
+ <type>
+ <v>EvMgrRef = atom()</v>
+ </type>
+ <desc><marker id="get_event_mgr_ref-0"/>
+ <p>Gets a reference to the <c>Common Test</c> event manager.
+ The reference can be used to, for example, add a user-specific
+ event handler while tests are running.</p>
+
+ <p><em>Example:</em></p>
+
+ <pre>
+ gen_event:add_handler(ct:get_event_mgr_ref(), my_ev_h, [])</pre>
+ </desc>
+ </func>
+
+ <func>
+ <name>get_status() -&gt; TestStatus | {error, Reason} | no_tests_running</name>
+ <fsummary>Returns status of ongoing test.</fsummary>
+ <type>
+ <v>TestStatus = [StatusElem]</v>
+ <v>StatusElem = {current, TestCaseInfo} | {successful, Successful} | {failed, Failed} | {skipped, Skipped} | {total, Total}</v>
+ <v>TestCaseInfo = {Suite, TestCase} | [{Suite, TestCase}]</v>
+ <v>Suite = atom()</v>
+ <v>TestCase = atom()</v>
+ <v>Successful = integer()</v>
+ <v>Failed = integer()</v>
+ <v>Skipped = {UserSkipped, AutoSkipped}</v>
+ <v>UserSkipped = integer()</v>
+ <v>AutoSkipped = integer()</v>
+ <v>Total = integer()</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc><marker id="get_status-0"/>
+ <p>Returns status of ongoing test. The returned list contains
+ information about which test case is executing (a list of cases
+ when a parallel test case group is executing), as well as
+ counters for successful, failed, skipped, and total test cases
+ so far.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>get_target_name(Handle) -&gt; {ok, TargetName} | {error, Reason}</name>
+ <fsummary>Returns the name of the target that the specified connection
+ belongs to.</fsummary>
+ <type>
+ <v>Handle = handle()</v>
+ <v>TargetName = target_name()</v>
+ </type>
+ <desc><marker id="get_target_name-1"/>
+ <p>Returns the name of the target that the specified connection
+ belongs to.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>get_testspec_terms() -&gt; TestSpecTerms | undefined</name>
+ <fsummary>Gets a list of all test specification terms used to
+ configure and run this test.</fsummary>
+ <type>
+ <v>TestSpecTerms = [{Tag, Value}]</v>
+ <v>Value = [term()]</v>
+ </type>
+ <desc><marker id="get_testspec_terms-0"/>
+ <p>Gets a list of all test specification terms used to configure
+ and run this test.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>get_testspec_terms(Tags) -&gt; TestSpecTerms | undefined</name>
+ <fsummary>Reads one or more terms from the test specification used to
+ configure and run this test.</fsummary>
+ <type>
+ <v>Tags = [Tag] | Tag</v>
+ <v>Tag = atom()</v>
+ <v>TestSpecTerms = [{Tag, Value}] | {Tag, Value}</v>
+ <v>Value = [{Node, term()}] | [term()]</v>
+ <v>Node = atom()</v>
+ </type>
+ <desc><marker id="get_testspec_terms-1"/>
+ <p>Reads one or more terms from the test specification used to
+ configure and run this test. <c>Tag</c> is any valid test
+ specification tag, for example, <c>label</c>, <c>config</c>, or
+ <c>logdir</c>. User-specific terms are also available to read if
+ option <c>allow_user_terms</c> is set.</p>
+ <p>All value tuples returned, except user terms, have the node
+ name as first element.</p>
+ <p>To read test terms, use <c>Tag = tests</c> (rather than
+ <c>suites</c>, <c>groups</c>, or <c>cases</c>). <c>Value</c> is
+ then the list of <em>all</em> tests on the form
+ <c>[{Node,Dir,[{TestSpec,GroupsAndCases1},...]},...]</c>, where
+ <c>GroupsAndCases = [{Group,[Case]}] | [Case]</c>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>get_timetrap_info() -&gt; {Time, {Scaling,ScaleVal}}</name>
+ <fsummary>Reads information about the timetrap set for the current
+ test case.</fsummary>
+ <type>
+ <v>Time = integer() | infinity</v>
+ <v>Scaling = true | false</v>
+ <v>ScaleVal = integer()</v>
+ </type>
+ <desc><marker id="get_timetrap_info-0"/>
+ <p>Reads information about the timetrap set for the current test
+ case. <c>Scaling</c> indicates if <c>Common Test</c> will attempt
+ to compensate timetraps automatically for runtime delays
+ introduced by, for example, tools like cover. <c>ScaleVal</c> is
+ the value of the current scaling multipler (always 1 if scaling is
+ disabled). Note the <c>Time</c> is not the scaled result.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>install(Opts) -&gt; ok | {error, Reason}</name>
+ <fsummary>Installs configuration files and event handlers.</fsummary>
+ <type>
+ <v>Opts = [Opt]</v>
+ <v>Opt = {config, ConfigFiles} | {event_handler, Modules} | {decrypt, KeyOrFile}</v>
+ <v>ConfigFiles = [ConfigFile]</v>
+ <v>ConfigFile = string()</v>
+ <v>Modules = [atom()]</v>
+ <v>KeyOrFile = {key, Key} | {file, KeyFile}</v>
+ <v>Key = string()</v>
+ <v>KeyFile = string()</v>
+ </type>
+ <desc><marker id="install-1"/>
+ <p>Installs configuration files and event handlers.</p>
+
+ <p>Run this function once before the first test.</p>
+
+ <p><em>Example:</em></p>
+
+ <pre>
+ install([{config,["config_node.ctc","config_user.ctc"]}])</pre>
+
+ <p>This function is automatically run by program <c>ct_run</c>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>listenv(Telnet) -&gt; [Env]</name>
+ <fsummary>Performs command listenv on the specified Telnet connection
+ and returns the result as a list of key-value pairs.</fsummary>
+ <type>
+ <v>Telnet = term()</v>
+ <v>Env = {Key, Value}</v>
+ <v>Key = string()</v>
+ <v>Value = string()</v>
+ </type>
+ <desc><marker id="listenv-1"/>
+ <p>Performs command <c>listenv</c> on the specified Telnet connection
+ and returns the result as a list of key-value pairs.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>log(Format) -&gt; ok</name>
+ <fsummary>Equivalent to log(default, 50, Format, [], []).</fsummary>
+ <desc><marker id="log-1"/>
+ <p>Equivalent to
+ <seealso marker="#log-5"><c>ct:log(default, 50, Format, [], [])</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>log(X1, X2) -&gt; ok</name>
+ <fsummary>Equivalent to log(Category, Importance, Format,
+ FormatArgs, []).</fsummary>
+ <type>
+ <v>X1 = Category | Importance | Format</v>
+ <v>X2 = Format | FormatArgs</v>
+ </type>
+ <desc><marker id="log-2"/>
+ <p>Equivalent to <seealso marker="#log-5"><c>ct:log(Category,
+ Importance, Format, FormatArgs, [])</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>log(X1, X2, X3) -&gt; ok</name>
+ <fsummary>Equivalent to log(Category, Importance, Format,
+ FormatArgs, Opts).</fsummary>
+ <type>
+ <v>X1 = Category | Importance</v>
+ <v>X2 = Importance | Format</v>
+ <v>X3 = Format | FormatArgs | Opts</v>
+ </type>
+ <desc><marker id="log-3"/>
+ <p>Equivalent to <seealso marker="#log-5"><c>ct:log(Category,
+ Importance, Format, FormatArgs, Opts)</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>log(X1, X2, X3, X4) -&gt; ok</name>
+ <fsummary>Equivalent to log(Category, Importance, Format,
+ FormatArgs, Opts).</fsummary>
+ <type>
+ <v>X1 = Category | Importance</v>
+ <v>X2 = Importance | Format</v>
+ <v>X3 = Format | FormatArgs</v>
+ <v>X4 = FormatArgs | Opts</v>
+ </type>
+ <desc><marker id="log-4"/>
+ <p>Equivalent to <seealso marker="#log-5"><c>ct:log(Category,
+ Importance, Format, FormatArgs, Opts)</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>log(Category, Importance, Format, FormatArgs, Opts) -&gt; ok</name>
+ <fsummary>Prints from a test case to the log file.</fsummary>
+ <type>
+ <v>Category = atom()</v>
+ <v>Importance = integer()</v>
+ <v>Format = string()</v>
+ <v>FormatArgs = list()</v>
+ <v>Opts = [Opt]</v>
+ <v>Opt = no_css | esc_chars</v>
+ </type>
+ <desc><marker id="log-5"/>
+ <p>Prints from a test case to the log file.</p>
+
+ <p>This function is meant for printing a string directly from a
+ test case to the test case log file.</p>
+
+ <p>Default <c>Category</c> is <c>default</c>,
+ default <c>Importance</c> is <c>?STD_IMPORTANCE</c>,
+ and default value for <c>FormatArgs</c> is <c>[]</c>.</p>
+
+ <p>For details on <c>Category</c>, <c>Importance</c> and the <c>no_css</c>
+ option, see section <seealso marker="write_test_chapter#logging">
+ Logging - Categories and Verbosity Levels</seealso> in the User's Guide.</p>
+
+ <p>Common Test will not escape special HTML characters (&lt;, &gt; and &amp;)
+ in the text printed with this function, unless the <c>esc_chars</c>
+ option is used.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>make_priv_dir() -&gt; ok | {error, Reason}</name>
+ <fsummary>If the test has been started with option create_priv_dir
+ set to manual_per_tc, in order for the test case to use the private
+ directory, it must first create it by calling this function.</fsummary>
+ <type>
+ <v>Reason = term()</v>
+ </type>
+ <desc><marker id="make_priv_dir-0"/>
+ <p>If the test is started with option <c>create_priv_dir</c>
+ set to <c>manual_per_tc</c>, in order for the test case to use
+ the private directory, it must first create it by calling this
+ function.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>notify(Name, Data) -&gt; ok</name>
+ <fsummary>Sends an asynchronous notification of type Name with Data
+ to the <c>Common Test</c> event manager.</fsummary>
+ <type>
+ <v>Name = atom()</v>
+ <v>Data = term()</v>
+ </type>
+ <desc><marker id="notify-2"/>
+ <p>Sends an asynchronous notification of type <c>Name</c> with
+ <c>Data</c>to the Common Test event manager. This can later be
+ caught by any installed event manager.</p>
+
+ <p>See also
+ <seealso marker="stdlib:gen_event"><c>stdlib:gen_event(3)</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>pal(Format) -&gt; ok</name>
+ <fsummary>Equivalent to pal(default, 50, Format, []).</fsummary>
+ <desc><marker id="pal-1"/>
+ <p>Equivalent to
+ <seealso marker="#pal-4"><c>ct:pal(default, 50, Format,
+ [])</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>pal(X1, X2) -&gt; ok</name>
+ <fsummary>Equivalent to pal(Category, Importance, Format,
+ FormatArgs).</fsummary>
+ <type>
+ <v>X1 = Category | Importance | Format</v>
+ <v>X2 = Format | FormatArgs</v>
+ </type>
+ <desc><marker id="pal-2"/>
+ <p>Equivalent to <seealso marker="#pal-4"><c>ct:pal(Category,
+ Importance, Format, FormatArgs)</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>pal(X1, X2, X3) -&gt; ok</name>
+ <fsummary>Equivalent to pal(Category, Importance, Format,
+ FormatArgs).</fsummary>
+ <type>
+ <v>X1 = Category | Importance</v>
+ <v>X2 = Importance | Format</v>
+ <v>X3 = Format | FormatArgs</v>
+ </type>
+ <desc><marker id="pal-3"/>
+ <p>Equivalent to <seealso marker="#pal-4"><c>ct:pal(Category,
+ Importance, Format, FormatArgs)</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>pal(Category, Importance, Format, FormatArgs) -&gt; ok</name>
+ <fsummary>Prints and logs from a test case.</fsummary>
+ <type>
+ <v>Category = atom()</v>
+ <v>Importance = integer()</v>
+ <v>Format = string()</v>
+ <v>FormatArgs = list()</v>
+ </type>
+ <desc><marker id="pal-4"/>
+ <p>Prints and logs from a test case.</p>
+
+ <p>This function is meant for printing a string from a test case,
+ both to the test case log file and to the console.</p>
+
+ <p>Default <c>Category</c> is <c>default</c>,
+ default <c>Importance</c> is <c>?STD_IMPORTANCE</c>,
+ and default value for <c>FormatArgs</c> is <c>[]</c>.</p>
+
+ <p>For details on <c>Category</c> and <c>Importance</c>, see section
+ <seealso marker="write_test_chapter#logging">Logging - Categories
+ and Verbosity Levels</seealso> in the User's Guide.</p>
+
+ <p>Note that special characters in the text (&lt;, &gt; and &amp;) will
+ be escaped by Common Test before the text is printed to the log
+ file.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>parse_table(Data) -&gt; {Heading, Table}</name>
+ <fsummary>Parses the printout from an SQL table and returns a list of
+ tuples.</fsummary>
+ <type>
+ <v>Data = [string()]</v>
+ <v>Heading = tuple()</v>
+ <v>Table = [tuple()]</v>
+ </type>
+ <desc><marker id="parse_table-1"/>
+ <p>Parses the printout from an SQL table and returns a list of
+ tuples.</p>
+
+ <p>The printout to parse is typically the result of a <c>select</c>
+ command in SQL. The returned <c>Table</c> is a list of tuples,
+ where each tuple is a row in the table.</p>
+
+ <p><c>Heading</c> is a tuple of strings representing the headings
+ of each column in the table.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>print(Format) -&gt; ok</name>
+ <fsummary>Equivalent to print(default, 50, Format, []).</fsummary>
+ <desc><marker id="print-1"/>
+ <p>Equivalent to <seealso marker="#print-4"><c>ct:print(default,
+ 50, Format, [])</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>print(X1, X2) -&gt; ok</name>
+ <fsummary>Equivalent to print(Category, Importance, Format,
+ FormatArgs).</fsummary>
+ <type>
+ <v>X1 = Category | Importance | Format</v>
+ <v>X2 = Format | FormatArgs</v>
+ </type>
+ <desc><marker id="print-2"/>
+ <p>Equivalent to <seealso marker="#print-4"><c>ct:print(Category,
+ Importance, Format, FormatArgs)</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>print(X1, X2, X3) -&gt; ok</name>
+ <fsummary>Equivalent to print(Category, Importance, Format,
+ FormatArgs).</fsummary>
+ <type>
+ <v>X1 = Category | Importance</v>
+ <v>X2 = Importance | Format</v>
+ <v>X3 = Format | FormatArgs</v>
+ </type>
+ <desc><marker id="print-3"/>
+ <p>Equivalent to <seealso marker="#print-4"><c>ct:print(Category,
+ Importance, Format, FormatArgs)</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>print(Category, Importance, Format, FormatArgs) -&gt; ok</name>
+ <fsummary>Prints from a test case to the console.</fsummary>
+ <type>
+ <v>Category = atom()</v>
+ <v>Importance = integer()</v>
+ <v>Format = string()</v>
+ <v>FormatArgs = list()</v>
+ </type>
+ <desc><marker id="print-4"/>
+ <p>Prints from a test case to the console.</p>
+
+ <p>This function is meant for printing a string from a test case to
+ the console.</p>
+
+ <p>Default <c>Category</c> is <c>default</c>,
+ default <c>Importance</c> is <c>?STD_IMPORTANCE</c>,
+ and default value for <c>FormatArgs</c> is <c>[]</c>.</p>
+
+ <p>For details on <c>Category</c> and <c>Importance</c>, see section
+ <seealso marker="write_test_chapter#logging">Logging - Categories
+ and Verbosity Levels</seealso> in the User's Guide.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>reload_config(Required) -&gt; ValueOrElement</name>
+ <fsummary>Reloads configuration file containing specified configuration
+ key.</fsummary>
+ <type>
+ <v>Required = KeyOrName | {KeyOrName, SubKey} | {KeyOrName, SubKey, SubKey}</v>
+ <v>KeyOrName = atom()</v>
+ <v>SubKey = atom()</v>
+ <v>ValueOrElement = term()</v>
+ </type>
+ <desc><marker id="reload_config-1"/>
+ <p>Reloads configuration file containing specified configuration key.</p>
+
+ <p>This function updates the configuration data from which the
+ specified configuration variable was read, and returns the (possibly)
+ new value of this variable.</p>
+
+ <p>If some variables were present in the configuration, but are
+ not loaded using this function, they are removed from the
+ configuration table together with their aliases.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>remove_config(Callback, Config) -&gt; ok</name>
+ <fsummary>Removes configuration variables (together with
+ their aliases) that were loaded with specified callback module and
+ configuration string.</fsummary>
+ <type>
+ <v>Callback = atom()</v>
+ <v>Config = string()</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc><marker id="remove_config-2"/>
+ <p>Removes configuration variables (together wih their aliases)
+ that were loaded with specified callback module and configuration
+ string.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>require(Required) -&gt; ok | {error, Reason}</name>
+ <fsummary>Checks if the required configuration is available.</fsummary>
+ <type>
+ <v>Required = Key | {Key, SubKeys} | {Key, SubKey, SubKeys}</v>
+ <v>Key = atom()</v>
+ <v>SubKeys = SubKey | [SubKey]</v>
+ <v>SubKey = atom()</v>
+ </type>
+ <desc><marker id="require-1"/>
+ <p>Checks if the required configuration is available. Arbitrarily
+ deep tuples can be specified as <c>Required</c>. Only the last
+ element of the tuple can be a list of <c>SubKey</c>s.</p>
+
+ <p><em>Example 1.</em> Require the variable <c>myvar</c>:</p>
+
+ <pre>
+ ok = ct:require(myvar).</pre>
+
+ <p>In this case the configuration file must at least contain:</p>
+
+ <pre>
+ {myvar,Value}.</pre>
+
+ <p><em>Example 2.</em> Require key <c>myvar</c> with subkeys
+ <c>sub1</c> and <c>sub2</c>:</p>
+
+ <pre>
+ ok = ct:require({myvar,[sub1,sub2]}).</pre>
+
+ <p>In this case the configuration file must at least contain:</p>
+
+ <pre>
+ {myvar,[{sub1,Value},{sub2,Value}]}.</pre>
+
+ <p><em>Example 3.</em> Require key <c>myvar</c> with subkey
+ <c>sub1</c> with <c>subsub1</c>:</p>
+
+ <pre>
+ ok = ct:require({myvar,sub1,sub2}).</pre>
+
+ <p>In this case the configuration file must at least contain:</p>
+
+ <pre>
+ {myvar,[{sub1,[{sub2,Value}]}]}.</pre>
+
+ <p>See also
+ <seealso marker="#get_config-1"><c>ct:get_config/1</c></seealso>,
+ <seealso marker="#get_config-2"><c>ct:get_config/2</c></seealso>,
+ <seealso marker="#get_config-3"><c>ct:get_config/3</c></seealso>,
+ <seealso marker="#require-2"><c>ct:require/2</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>require(Name, Required) -&gt; ok | {error, Reason}</name>
+ <fsummary>Checks if the required configuration is available and gives
+ it a name.</fsummary>
+ <type>
+ <v>Name = atom()</v>
+ <v>Required = Key | {Key, SubKey} | {Key, SubKey, SubKey}</v>
+ <v>SubKey = Key</v>
+ <v>Key = atom()</v>
+ </type>
+ <desc><marker id="require-2"/>
+ <p>Checks if the required configuration is available and gives it a
+ name. The semantics for <c>Required</c> is the same as in
+ <seealso marker="#require-1"><c>ct:require/1</c></seealso> except
+ that a list of <c>SubKey</c>s cannot be specified.</p>
+
+ <p>If the requested data is available, the subentry is associated
+ with <c>Name</c> so that the value of the element can be read with
+ <seealso marker="#get_config-1"><c>ct:get_config/1,2</c></seealso>
+ provided <c>Name</c> is used instead of the whole <c>Required</c>
+ term.</p>
+
+ <p><em>Example:</em></p>
+
+ <p>Require one node with a Telnet connection and an FTP connection.
+ Name the node <c>a</c>:</p>
+
+ <pre>
+ ok = ct:require(a,{machine,node}).</pre>
+
+ <p>All references to this node can then use the node name. For
+ example, a file over FTP is fetched like follows:</p>
+
+ <pre>
+ ok = ct:ftp_get(a,RemoteFile,LocalFile).</pre>
+
+ <p>For this to work, the configuration file must at least contain:</p>
+
+ <pre>
+ {machine,[{node,[{telnet,IpAddr},{ftp,IpAddr}]}]}.</pre>
+
+ <note><p>The behavior of this function changed radically in
+ <c>Common Test</c> 1.6.2. To keep some backwards compatability,
+ it is still possible to do:<br/>
+ <c>ct:require(a,{node,[telnet,ftp]}).</c><br/>
+ This associates the name <c>a</c> with the top-level <c>node</c>
+ entry. For this to work, the configuration file must at least
+ contain:<br/>
+ <c>{node,[{telnet,IpAddr},{ftp,IpAddr}]}.</c></p>
+ </note>
+
+ <p>See also
+ <seealso marker="#get_config-1"><c>ct:get_config/1</c></seealso>,
+ <seealso marker="#get_config-2"><c>ct:get_config/2</c></seealso>,
+ <seealso marker="#get_config-3"><c>ct:get_config/3</c></seealso>,
+ <seealso marker="#require-1"><c>ct:require/1</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>run(TestDirs) -&gt; Result</name>
+ <fsummary>Runs all test cases in all suites in the specified
+ directories.</fsummary>
+ <type>
+ <v>TestDirs = TestDir | [TestDir]</v>
+ </type>
+ <desc><marker id="run-1"/>
+ <p>Runs all test cases in all suites in the specified directories.</p>
+
+ <p>See also <seealso marker="#run-3"><c>ct:run/3</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>run(TestDir, Suite) -&gt; Result</name>
+ <fsummary>Runs all test cases in the specified suite.</fsummary>
+ <desc><marker id="run-2"/>
+ <p>Runs all test cases in the specified suite.</p>
+
+ <p>See also <seealso marker="#run-3"><c>ct:run/3</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>run(TestDir, Suite, Cases) -&gt; Result</name>
+ <fsummary>Runs the specified test cases.</fsummary>
+ <type>
+ <v>TestDir = string()</v>
+ <v>Suite = atom()</v>
+ <v>Cases = atom() | [atom()]</v>
+ <v>Result = [TestResult] | {error, Reason}</v>
+ </type>
+ <desc><marker id="run-3"/>
+ <p>Runs the specified test cases.</p>
+
+ <p>Requires that
+ <seealso marker="#install-1"><c>ct:install/1</c></seealso> has been
+ run first.</p>
+
+ <p>Suites (<c>*_SUITE.erl</c>) files must be stored in <c>TestDir</c>
+ or <c>TestDir/test</c>. All suites are compiled when the test is
+ run.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>run_test(Opts) -&gt; Result</name>
+ <fsummary>Runs tests as specified by the combination of options in
+ Opts.</fsummary>
+ <type>
+ <v>Opts = [OptTuples]</v>
+ <v>OptTuples = {dir, TestDirs} | {suite, Suites} | {group, Groups} | {testcase, Cases} | {spec, TestSpecs} | {join_specs, Bool} | {label, Label} | {config, CfgFiles} | {userconfig, UserConfig} | {allow_user_terms, Bool} | {logdir, LogDir} | {silent_connections, Conns} | {stylesheet, CSSFile} | {cover, CoverSpecFile} | {cover_stop, Bool} | {step, StepOpts} | {event_handler, EventHandlers} | {include, InclDirs} | {auto_compile, Bool} | {abort_if_missing_suites, Bool} | {create_priv_dir, CreatePrivDir} | {multiply_timetraps, M} | {scale_timetraps, Bool} | {repeat, N} | {duration, DurTime} | {until, StopTime} | {force_stop, ForceStop} | {decrypt, DecryptKeyOrFile} | {refresh_logs, LogDir} | {logopts, LogOpts} | {verbosity, VLevels} | {basic_html, Bool} | {esc_chars, Bool} | {ct_hooks, CTHs} | {enable_builtin_hooks, Bool} | {release_shell, Bool}</v>
+ <v>TestDirs = [string()] | string()</v>
+ <v>Suites = [string()] | [atom()] | string() | atom()</v>
+ <v>Cases = [atom()] | atom()</v>
+ <v>Groups = GroupNameOrPath | [GroupNameOrPath]</v>
+ <v>GroupNameOrPath = [atom()] | atom() | all</v>
+ <v>TestSpecs = [string()] | string()</v>
+ <v>Label = string() | atom()</v>
+ <v>CfgFiles = [string()] | string()</v>
+ <v>UserConfig = [{CallbackMod, CfgStrings}] | {CallbackMod, CfgStrings}</v>
+ <v>CallbackMod = atom()</v>
+ <v>CfgStrings = [string()] | string()</v>
+ <v>LogDir = string()</v>
+ <v>Conns = all | [atom()]</v>
+ <v>CSSFile = string()</v>
+ <v>CoverSpecFile = string()</v>
+ <v>StepOpts = [StepOpt] | []</v>
+ <v>StepOpt = config | keep_inactive</v>
+ <v>EventHandlers = EH | [EH]</v>
+ <v>EH = atom() | {atom(), InitArgs} | {[atom()], InitArgs}</v>
+ <v>InitArgs = [term()]</v>
+ <v>InclDirs = [string()] | string()</v>
+ <v>CreatePrivDir = auto_per_run | auto_per_tc | manual_per_tc</v>
+ <v>M = integer()</v>
+ <v>N = integer()</v>
+ <v>DurTime = string(HHMMSS)</v>
+ <v>StopTime = string(YYMoMoDDHHMMSS) | string(HHMMSS)</v>
+ <v>ForceStop = skip_rest | Bool</v>
+ <v>DecryptKeyOrFile = {key, DecryptKey} | {file, DecryptFile}</v>
+ <v>DecryptKey = string()</v>
+ <v>DecryptFile = string()</v>
+ <v>LogOpts = [LogOpt]</v>
+ <v>LogOpt = no_nl | no_src</v>
+ <v>VLevels = VLevel | [{Category, VLevel}]</v>
+ <v>VLevel = integer()</v>
+ <v>Category = atom()</v>
+ <v>CTHs = [CTHModule | {CTHModule, CTHInitArgs}]</v>
+ <v>CTHModule = atom()</v>
+ <v>CTHInitArgs = term()</v>
+ <v>Result = {Ok, Failed, {UserSkipped, AutoSkipped}} | TestRunnerPid | {error, Reason}</v>
+ <v>Ok = integer()</v>
+ <v>Failed = integer()</v>
+ <v>UserSkipped = integer()</v>
+ <v>AutoSkipped = integer()</v>
+ <v>TestRunnerPid = pid()</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc><marker id="run_test-1"/>
+ <p>Runs tests as specified by the combination of options in
+ <c>Opts</c>. The options are the same as those used with program
+ <c>ct_run</c>, see <seealso marker="ct_run#ct_run">Run Tests from
+ Command Line</seealso> in the <c>ct_run</c> manual page.</p>
+ <p>Here a <c>TestDir</c> can be used to point out the path to a
+ <c>Suite</c>. Option <c>testcase</c> corresponds to option
+ <c>-case</c> in program <c>ct_run</c>. Configuration files
+ specified in <c>Opts</c> are installed automatically at startup.</p>
+
+ <p><c>TestRunnerPid</c> is returned if <c>release_shell == true</c>.
+ For details, see
+ <seealso marker="#break-1"><c>ct:break/1</c></seealso>.</p>
+
+ <p><c>Reason</c> indicates the type of error encountered.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>run_testspec(TestSpec) -&gt; Result</name>
+ <fsummary>Runs a test specified by TestSpec.</fsummary>
+ <type>
+ <v>TestSpec = [term()]</v>
+ <v>Result = {Ok, Failed, {UserSkipped, AutoSkipped}} | {error, Reason}</v>
+ <v>Ok = integer()</v>
+ <v>Failed = integer()</v>
+ <v>UserSkipped = integer()</v>
+ <v>AutoSkipped = integer()</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc><marker id="run_testspec-1"/>
+ <p>Runs a test specified by <c>TestSpec</c>. The same terms are used
+ as in test specification files.</p>
+
+ <p><c>Reason</c> indicates the type of error encountered.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>sleep(Time) -&gt; ok</name>
+ <fsummary>This function, similar to timer:sleep/1, suspends the
+ test case for a specified time.</fsummary>
+ <type>
+ <v>Time = {hours, Hours} | {minutes, Mins} | {seconds, Secs} | Millisecs | infinity</v>
+ <v>Hours = integer()</v>
+ <v>Mins = integer()</v>
+ <v>Secs = integer()</v>
+ <v>Millisecs = integer() | float()</v>
+ </type>
+ <desc><marker id="sleep-1"/>
+ <p>This function, similar to <c>timer:sleep/1</c> in <c>STDLIB</c>,
+ suspends the test case for a specified time.
+ However, this function also multiplies <c>Time</c> with the
+ <c>multiply_timetraps</c> value (if set) and under certain
+ circumstances also scales up the time automatically if
+ <c>scale_timetraps</c> is set to <c>true</c> (default is
+ <c>false</c>).</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>start_interactive() -&gt; ok</name>
+ <fsummary>Starts <c>Common Test</c> in interactive mode.</fsummary>
+ <desc><marker id="start_interactive-0"/>
+ <p>Starts <c>Common Test</c> in interactive mode.</p>
+
+ <p>From this mode, all test case support functions can be executed
+ directly from the Erlang shell. The interactive mode can also be
+ started from the OS command line with <c>ct_run -shell
+ [-config File...]</c>.</p>
+
+ <p>If any functions (for example, Telnet or FTP) using
+ "required configuration data" are to be called from the Erlang shell,
+ configuration data must first be required with
+ <seealso marker="#require-2"><c>ct:require/2</c></seealso>.</p>
+
+ <p><em>Example:</em></p>
+
+ <pre>
+ &gt; ct:require(unix_telnet, unix).
+ ok
+ &gt; ct_telnet:open(unix_telnet).
+ {ok,&lt;0.105.0&gt;}
+ &gt; ct_telnet:cmd(unix_telnet, "ls .").
+ {ok,["ls","file1 ...",...]}</pre>
+ </desc>
+ </func>
+
+ <func>
+ <name>step(TestDir, Suite, Case) -&gt; Result</name>
+ <fsummary>Steps through a test case with the debugger.</fsummary>
+ <type>
+ <v>Case = atom()</v>
+ </type>
+ <desc><marker id="step-3"/>
+ <p>Steps through a test case with the debugger.</p>
+
+ <p>See also <seealso marker="#run-3"><c>ct:run/3</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>step(TestDir, Suite, Case, Opts) -&gt; Result</name>
+ <fsummary>Steps through a test case with the debugger.</fsummary>
+ <type>
+ <v>Case = atom()</v>
+ <v>Opts = [Opt] | []</v>
+ <v>Opt = config | keep_inactive</v>
+ </type>
+ <desc><marker id="step-4"/>
+ <p>Steps through a test case with the debugger. If option
+ <c>config</c> has been specifed, breakpoints are also set on
+ the configuration functions in <c>Suite</c>.</p>
+
+ <p>See also <seealso marker="#run-3"><c>ct:run/3</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>stop_interactive() -&gt; ok</name>
+ <fsummary>Exits the interactive mode.</fsummary>
+ <desc><marker id="stop_interactive-0"/>
+ <p>Exits the interactive mode.</p>
+
+ <p>See also
+ <seealso marker="#start_interactive-0"><c>ct:start_interactive/0</c></seealso>.
+ </p>
+ </desc>
+ </func>
+
+ <func>
+ <name>sync_notify(Name, Data) -&gt; ok</name>
+ <fsummary>Sends a synchronous notification of type Name with Data to
+ the <c>Common Test</c> event manager.</fsummary>
+ <type>
+ <v>Name = atom()</v>
+ <v>Data = term()</v>
+ </type>
+ <desc><marker id="sync_notify-2"/>
+ <p>Sends a synchronous notification of type <c>Name</c> with
+ <c>Data</c> to the <c>Common Test</c> event manager. This can later be
+ caught by any installed event manager.</p>
+
+ <p>See also
+ <seealso marker="stdlib:gen_event"><c>stdlib:gen_event(3)</c></seealso>.
+ </p>
+ </desc>
+ </func>
+
+ <func>
+ <name>testcases(TestDir, Suite) -&gt; Testcases | {error, Reason}</name>
+ <fsummary>Returns all test cases in the specified suite.</fsummary>
+ <type>
+ <v>TestDir = string()</v>
+ <v>Suite = atom()</v>
+ <v>Testcases = list()</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc><marker id="testcases-2"/>
+ <p>Returns all test cases in the specified suite.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>timetrap(Time) -&gt; ok</name>
+ <fsummary>Sets a new timetrap for the running test case.</fsummary>
+ <type>
+ <v>Time = {hours, Hours} | {minutes, Mins} | {seconds, Secs} | Millisecs | infinity | Func</v>
+ <v>Hours = integer()</v>
+ <v>Mins = integer()</v>
+ <v>Secs = integer()</v>
+ <v>Millisecs = integer() | float()</v>
+ <v>Func = {M, F, A} | function()</v>
+ <v>M = atom()</v>
+ <v>F = atom()</v>
+ <v>A = list()</v>
+ </type>
+ <desc><marker id="timetrap-1"/>
+ <p>Sets a new timetrap for the running test case.</p>
+
+ <p>If the argument is <c>Func</c>, the timetrap is triggered when
+ this function returns. <c>Func</c> can also return a new
+ <c>Time</c> value, which in that case is the value for the new
+ timetrap.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>userdata(TestDir, Suite) -&gt; SuiteUserData | {error, Reason}</name>
+ <fsummary>Returns any data specified with tag userdata in the list of
+ tuples returned from Suite:suite/0.</fsummary>
+ <type>
+ <v>TestDir = string()</v>
+ <v>Suite = atom()</v>
+ <v>SuiteUserData = [term()]</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc><marker id="userdata-2"/>
+ <p>Returns any data specified with tag <c>userdata</c> in the list
+ of tuples returned from
+ <seealso marker="common_test#Module:suite-0"><c>suite/0</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>userdata(TestDir, Suite, Case::GroupOrCase) -&gt; TCUserData | {error, Reason}</name>
+ <fsummary>Returns any data specified with tag userdata in the list of
+ tuples returned from Suite:group(GroupName) or Suite:Case().</fsummary>
+ <type>
+ <v>TestDir = string()</v>
+ <v>Suite = atom()</v>
+ <v>GroupOrCase = {group, GroupName} | atom()</v>
+ <v>GroupName = atom()</v>
+ <v>TCUserData = [term()]</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc><marker id="userdata-3"/>
+ <p>Returns any data specified with tag <c>userdata</c> in the list
+ of tuples returned from <c>Suite:group(GroupName)</c> or
+ <c>Suite:Case()</c>.</p>
+ </desc>
+ </func>
+ </funcs>
+
+</erlref>
+
+
diff --git a/lib/common_test/doc/src/ct_cover.xml b/lib/common_test/doc/src/ct_cover.xml
new file mode 100644
index 0000000000..89d944acbe
--- /dev/null
+++ b/lib/common_test/doc/src/ct_cover.xml
@@ -0,0 +1,106 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE erlref SYSTEM "erlref.dtd">
+
+<erlref>
+ <header>
+ <copyright>
+ <year>2010</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>ct_cover</title>
+ <prepared></prepared>
+ <responsible></responsible>
+ <docno></docno>
+ <approved></approved>
+ <checked></checked>
+ <date></date>
+ <rev>A</rev>
+ <file>ct_cover.xml</file>
+ </header>
+ <module>ct_cover</module>
+ <modulesummary>Common Test framework code coverage support module.
+ </modulesummary>
+
+<description>
+
+ <p><c>Common Test</c> framework code coverage support module.</p>
+
+ <p>This module exports help functions for performing code coverage
+ analysis.</p>
+
+</description>
+
+ <funcs>
+ <func>
+ <name>add_nodes(Nodes) -&gt; {ok, StartedNodes} | {error, Reason}</name>
+ <fsummary>Adds nodes to current cover test (only works if cover support
+ is active).</fsummary>
+ <type>
+ <v>Nodes = [atom()]</v>
+ <v>StartedNodes = [atom()]</v>
+ <v>Reason = cover_not_running | not_main_node</v>
+ </type>
+ <desc><marker id="add_nodes-1"/>
+ <p>Adds nodes to current cover test. Notice that this only works if
+ cover support is active.</p>
+
+ <p>To have effect, this function is to be called from
+ <c>init_per_suite/1</c> (see
+ <seealso marker="common_test"><c>common_test</c></seealso>)
+ before any tests are performed.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>cross_cover_analyse(Level, Tests) -&gt; ok</name>
+ <fsummary>Accumulates cover results over multiple tests.</fsummary>
+ <type>
+ <v>Level = overview | details</v>
+ <v>Tests = [{Tag, Dir}]</v>
+ <v>Tag = atom()</v>
+ <v>Dir = string()</v>
+ </type>
+ <desc><marker id="cross_cover_analyse-2"/>
+ <p>Accumulates cover results over multiple tests. See section
+ <seealso marker="cover_chapter#cross_cover">Cross Cover
+ Analysis</seealso> in the Users's Guide.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>remove_nodes(Nodes) -&gt; ok | {error, Reason}</name>
+ <fsummary>Removes nodes from the current cover test.</fsummary>
+ <type>
+ <v>Nodes = [atom()]</v>
+ <v>Reason = cover_not_running | not_main_node</v>
+ </type>
+ <desc><marker id="remove_nodes-1"/>
+ <p>Removes nodes from the current cover test.</p>
+
+ <p>Call this function to stop cover test on nodes previously
+ added with
+ <seealso marker="#add_nodes-1"><c>ct_cover:add_nodes/1</c></seealso>.
+ Results on the remote node are transferred to the <c>Common Test</c>
+ node.</p>
+ </desc>
+ </func>
+ </funcs>
+
+</erlref>
+
+
diff --git a/lib/common_test/doc/src/ct_ftp.xml b/lib/common_test/doc/src/ct_ftp.xml
new file mode 100644
index 0000000000..e8c6f72db7
--- /dev/null
+++ b/lib/common_test/doc/src/ct_ftp.xml
@@ -0,0 +1,277 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE erlref SYSTEM "erlref.dtd">
+
+<erlref>
+ <header>
+ <copyright>
+ <year>2010</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>ct_ftp</title>
+ <prepared></prepared>
+ <responsible></responsible>
+ <docno></docno>
+ <approved></approved>
+ <checked></checked>
+ <date></date>
+ <rev>A</rev>
+ <file>ct_ftp.xml</file>
+ </header>
+ <module>ct_ftp</module>
+ <modulesummary>FTP client module (based on the FTP support of the Inets
+ application).</modulesummary>
+
+ <description>
+
+ <p>FTP client module (based on the FTP support of the <c>Inets</c>
+ application).</p>
+
+ </description>
+
+ <section>
+ <title>Data Types</title>
+ <marker id="types"/>
+ <taglist>
+ <tag><c>connection() = handle() | target_name()</c></tag>
+ <item><marker id="type-connection"/>
+ <p>For <c>target_name</c>, see module
+ <seealso marker="ct"><c>ct</c></seealso>.</p></item>
+
+ <tag><c>handle() = handle()</c></tag>
+ <item><marker id="type-handle"/>
+ <p>Handle for a specific FTP connection, see module
+ <seealso marker="ct"><c>ct</c></seealso>.</p></item>
+ </taglist>
+ </section>
+
+ <funcs>
+ <func>
+ <name>cd(Connection, Dir) -&gt; ok | {error, Reason}</name>
+ <fsummary>Changes directory on remote host.</fsummary>
+ <type>
+ <v>Connection = connection()</v>
+ <v>Dir = string()</v>
+ </type>
+ <desc><marker id="cd-2"/>
+ <p>Changes directory on remote host.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>close(Connection) -&gt; ok | {error, Reason}</name>
+ <fsummary>Closes the FTP connection.</fsummary>
+ <type>
+ <v>Connection = connection()</v>
+ </type>
+ <desc><marker id="close-1"/>
+ <p>Closes the FTP connection.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>delete(Connection, File) -&gt; ok | {error, Reason}</name>
+ <fsummary>Deletes a file on remote host.</fsummary>
+ <type>
+ <v>Connection = connection()</v>
+ <v>File = string()</v>
+ </type>
+ <desc><marker id="delete-2"/>
+ <p>Deletes a file on remote host.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>get(KeyOrName, RemoteFile, LocalFile) -&gt; ok | {error, Reason}</name>
+ <fsummary>Opens an FTP connection and fetches a file from the remote
+ host.</fsummary>
+ <type>
+ <v>KeyOrName = Key | Name</v>
+ <v>Key = atom()</v>
+ <v>Name = target_name()</v>
+ <v>RemoteFile = string()</v>
+ <v>LocalFile = string()</v>
+ </type>
+ <desc><marker id="get-3"/>
+ <p>Opens an FTP connection and fetches a file from the remote
+ host.</p>
+
+ <p><c>RemoteFile</c> and <c>LocalFile</c> must be absolute paths.</p>
+
+ <p>The configuration file must be as for
+ <seealso marker="#put-3"><c>ct_ftp:put/3</c></seealso>.</p>
+
+ <p>For <c>target_name</c>, see module
+ <seealso marker="ct"><c>ct</c></seealso>.</p>
+
+ <p>See also
+ <seealso marker="ct#require-2"><c>ct:require/2</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>ls(Connection, Dir) -&gt; {ok, Listing} | {error, Reason}</name>
+ <fsummary>Lists directory Dir.</fsummary>
+ <type>
+ <v>Connection = connection()</v>
+ <v>Dir = string()</v>
+ <v>Listing = string()</v>
+ </type>
+ <desc><marker id="ls-2"/>
+ <p>Lists directory <c>Dir</c>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>open(KeyOrName) -&gt; {ok, Handle} | {error, Reason}</name>
+ <fsummary>Opens an FTP connection to the specified node.</fsummary>
+ <type>
+ <v>KeyOrName = Key | Name</v>
+ <v>Key = atom()</v>
+ <v>Name = target_name()</v>
+ <v>Handle = handle()</v>
+ </type>
+ <desc><marker id="open-1"/>
+ <p>Opens an FTP connection to the specified node.</p>
+
+ <p>You can open a connection for a particular <c>Name</c> and use the
+ same name as reference for all following subsequent operations.
+ If you want
+ the connection to be associated with <c>Handle</c> instead (if you,
+ for example, need to open multiple connections to a host), use
+ <c>Key</c>, the configuration variable name, to specify the target.
+ A connection without an associated target name can only be closed
+ with the handle value.</p>
+
+ <p>For information on how to create a new <c>Name</c>, see
+ <seealso marker="ct#require-2"><c>ct:require/2</c></seealso>.</p>
+
+ <p>For <c>target_name</c>, see module
+ <seealso marker="ct"><c>ct</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>put(KeyOrName, LocalFile, RemoteFile) -&gt; ok | {error, Reason}</name>
+ <fsummary>Opens an FTP connection and sends a file to the remote
+ host.</fsummary>
+ <type>
+ <v>KeyOrName = Key | Name</v>
+ <v>Key = atom()</v>
+ <v>Name = target_name()</v>
+ <v>LocalFile = string()</v>
+ <v>RemoteFile = string()</v>
+ </type>
+ <desc><marker id="put-3"/>
+ <p>Opens an FTP connection and sends a file to the remote host.</p>
+
+ <p><c>LocalFile</c> and <c>RemoteFile</c> must be absolute paths.</p>
+
+ <p>For <c>target_name</c>, see module
+ <seealso marker="ct"><c>ct</c></seealso>.</p>
+
+ <p>If the target host is a "special" node, the FTP address must be
+ specified in the configuration file as follows:</p>
+
+ <pre>
+ {node,[{ftp,IpAddr}]}.</pre>
+
+ <p>If the target host is something else, for example, a UNIX host,
+ the configuration file must also include the username and password
+ (both strings):</p>
+
+ <pre>
+ {unix,[{ftp,IpAddr},
+ {username,Username},
+ {password,Password}]}.</pre>
+
+ <p>See also
+ <seealso marker="ct#require-2"><c>ct:require/2</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>recv(Connection, RemoteFile) -&gt; ok | {error, Reason}</name>
+ <fsummary>Fetches a file over FTP.</fsummary>
+ <desc><marker id="recv-2"/>
+ <p>Fetches a file over FTP.</p>
+
+ <p>The file gets the same name on the local host.</p>
+
+ <p>See also <seealso marker="#recv-3"><c>ct_ftp:recv/3</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>recv(Connection, RemoteFile, LocalFile) -&gt; ok | {error, Reason}</name>
+ <fsummary>Fetches a file over FTP.</fsummary>
+ <type>
+ <v>Connection = connection()</v>
+ <v>RemoteFile = string()</v>
+ <v>LocalFile = string()</v>
+ </type>
+ <desc><marker id="recv-3"/>
+ <p>Fetches a file over FTP.</p>
+
+ <p>The file is named <c>LocalFile</c> on the local host.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>send(Connection, LocalFile) -&gt; ok | {error, Reason}</name>
+ <fsummary>Sends a file over FTP.</fsummary>
+ <desc><marker id="send-2"/>
+ <p>Sends a file over FTP.</p>
+
+ <p>The file gets the same name on the remote host.</p>
+
+ <p>See also
+ <seealso marker="#send-3"><c>ct_ftp:send/3</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>send(Connection, LocalFile, RemoteFile) -&gt; ok | {error, Reason}</name>
+ <fsummary>Sends a file over FTP.</fsummary>
+ <type>
+ <v>Connection = connection()</v>
+ <v>LocalFile = string()</v>
+ <v>RemoteFile = string()</v>
+ </type>
+ <desc><marker id="send-3"/>
+ <p>Sends a file over FTP.</p>
+
+ <p>The file is named <c>RemoteFile</c> on the remote host.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>type(Connection, Type) -&gt; ok | {error, Reason}</name>
+ <fsummary>Changes the file transfer type.</fsummary>
+ <type>
+ <v>Connection = connection()</v>
+ <v>Type = ascii | binary</v>
+ </type>
+ <desc><marker id="type-2"/>
+ <p>Changes the file transfer type.</p>
+ </desc>
+ </func>
+ </funcs>
+
+</erlref>
+
+
diff --git a/lib/common_test/doc/src/ct_hooks.xml b/lib/common_test/doc/src/ct_hooks.xml
index a9f9450dd7..3b1e564b66 100644
--- a/lib/common_test/doc/src/ct_hooks.xml
+++ b/lib/common_test/doc/src/ct_hooks.xml
@@ -1,18 +1,17 @@
<?xml version="1.0" encoding="UTF-8" ?>
-
<!DOCTYPE erlref SYSTEM "erlref.dtd">
<erlref>
<header>
<copyright>
- <year>2010</year><year>2012</year>
+ <year>2010</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
@@ -34,539 +33,572 @@
<file>ct_hooks.sgml</file>
</header>
<module>ct_hooks</module>
- <modulesummary>A callback interface on top of Common Test</modulesummary>
+ <modulesummary>A callback interface on top of Common Test.</modulesummary>
<description>
- <p>The <em>Common Test Hook</em> (henceforth called CTH) framework allows
- extensions of the default behaviour of Common Test by means of callbacks
- before and after all test suite calls. It is meant for advanced users of
- Common Test which want to abstract out behaviour which is common to
- multiple test suites. </p>
+ <p>The <em>Common Test Hook (CTH)</em> framework allows extensions of the
+ default behavior of <c>Common Test</c> by callbacks before and after all
+ test suite calls. It is intended for advanced users of <c>Common Test</c>
+ who want to abstract out behavior that is common to multiple test suites.
+ </p>
- <p>In brief, Common Test Hooks allows you to:</p>
+ <p>In brief, CTH allows you to:</p>
- <list>
- <item>Manipulate the runtime config before each suite
- configuration call</item>
- <item>Manipulate the return of all suite configuration calls and in
- extension the result of the test themselves.</item>
+ <list type="bulleted">
+ <item><p>Manipulate the runtime configuration before each suite
+ configuration call.</p></item>
+ <item><p>Manipulate the return of all suite configuration calls and by
+ extension the result of the test themselves.</p></item>
</list>
<p>The following sections describe the mandatory and optional CTH
- functions Common Test will call during test execution. For more details
- see <seealso marker="ct_hooks_chapter">Common Test Hooks</seealso> in
- the User's Guide.</p>
+ functions that <c>Common Test</c> calls during test execution.
+ For more details, see section
+ <seealso marker="ct_hooks_chapter">Common Test Hooks</seealso> in the
+ User's Guide.</p>
- <p>For information about how to add a CTH to your suite see
- <seealso marker="ct_hooks_chapter#installing">Installing a CTH
- </seealso> in the User's Guide.</p>
+ <p>For information about how to add a CTH to your suite, see section
+ <seealso marker="ct_hooks_chapter#installing">Installing a CTH</seealso>
+ in the User's Guide.</p>
+
+ <note><p>For a minimal example of a CTH, see section
+ <seealso marker="ct_hooks_chapter#example">Example CTH</seealso>
+ in the User's Guide.</p></note>
- <note><p>See the
- <seealso marker="ct_hooks_chapter#example">Example CTH</seealso>
- in the User's Guide for a minimal example of a CTH. </p></note>
-
</description>
<section>
- <title>CALLBACK FUNCTIONS</title>
- <p>The following functions define the callback interface
- for a Common Test Hook.</p>
+ <title>Callback Functions</title>
+ <p>The following functions define the callback interface for a CTH.</p>
</section>
<funcs>
<func>
- <name>Module:init(Id, Opts) -&gt; {ok, State} |
- {ok, State, Priority}</name>
- <fsummary>Initiates the Common Test Hook</fsummary>
+ <name>Module:init(Id, Opts) -&gt; {ok, State} | {ok, State, Priority}</name>
+ <fsummary>Initiates the Common Test Hook.</fsummary>
<type>
- <v>Id = reference() | term()</v>
- <v>Opts = term()</v>
- <v>State = term()</v>
- <v>Priority = integer()</v>
+ <v>Id = reference() | term()</v>
+ <v>Opts = term()</v>
+ <v>State = term()</v>
+ <v>Priority = integer()</v>
</type>
-
<desc>
- <p> MANDATORY </p>
-
- <p>Always called before any other callback function.
- Use this to initiate any common state.
- It should return a state for this CTH.</p>
-
- <p><c>Id</c> is the return value of
- <seealso marker="#Module:id-1">id/1</seealso>, or a <c>reference</c>
- (created using
- <seealso marker="erts:erlang#make_ref-0">make_ref/0</seealso>)
- if <seealso marker="#Module:id-1">id/1</seealso> is not implemented.
- </p>
-
- <p><c>Priority</c> is the relative priority of this hook. Hooks with a
- lower priority will be executed first. If no priority is given,
- it will be set to 0. </p>
-
- <p>For details about when init is called see
- <seealso marker="ct_hooks_chapter#scope">scope</seealso>
- in the User's Guide.</p>
-
+ <p>MANDATORY</p>
+
+ <p>This function is always called before any other callback function.
+ Use it to initiate any common state. It is to return a state for
+ this CTH.</p>
+
+ <p><c>Id</c> is either the return value of
+ <seealso marker="#Module:id-1"><c>ct_hooks:id/1</c></seealso>,
+ or a <c>reference</c> (created using
+ <seealso marker="erts:erlang#make_ref-0">erlang:make_ref/0</seealso>
+ in <c>ERTS</c>) if
+ <seealso marker="#Module:id-1"><c>ct_hooks:id/1</c></seealso>
+ is not implemented.</p>
+
+ <p><c>Priority</c> is the relative priority of this hook. Hooks with a
+ lower priority are executed first. If no priority is specified, it
+ is set to <c>0</c>.</p>
+
+ <p>For details about when <c>init</c> is called, see section
+ <seealso marker="ct_hooks_chapter#scope">CTH Scope</seealso>
+ in the User's Guide.</p>
</desc>
</func>
<func>
- <name>Module:pre_init_per_suite(SuiteName, InitData, CTHState) -&gt;
- Result</name>
- <fsummary>Called before init_per_suite</fsummary>
+ <name>Module:pre_init_per_suite(SuiteName, InitData, CTHState) -&gt; Result</name>
+ <fsummary>Called before init_per_suite.</fsummary>
<type>
- <v>SuiteName = atom()</v>
- <v>InitData = Config | SkipOrFail</v>
- <v>Config = NewConfig = [{Key,Value}]</v>
- <v>CTHState = NewCTHState = term()</v>
- <v>Result = {Return, NewCTHState}</v>
- <v>Return = NewConfig | SkipOrFail</v>
- <v>SkipOrFail = {fail, Reason} | {skip, Reason}</v>
- <v>Key = atom()</v>
- <v>Value = term()</v>
- <v>Reason = term()</v>
+ <v>SuiteName = atom()</v>
+ <v>InitData = Config | SkipOrFail</v>
+ <v>Config = NewConfig = [{Key,Value}]</v>
+ <v>CTHState = NewCTHState = term()</v>
+ <v>Result = {Return, NewCTHState}</v>
+ <v>Return = NewConfig | SkipOrFail</v>
+ <v>SkipOrFail = {fail, Reason} | {skip, Reason}</v>
+ <v>Key = atom()</v>
+ <v>Value = term()</v>
+ <v>Reason = term()</v>
</type>
-
<desc>
- <p> OPTIONAL </p>
-
- <p>This function is called before
- <seealso marker="common_test#Module:init_per_suite-1">
- init_per_suite</seealso> if it exists.
- It typically contains initialization/logging which needs to be done
- before init_per_suite is called.
- If <c>{skip,Reason}</c> or <c>{fail,Reason}</c> is returned,
- init_per_suite and all test cases of the suite will be skipped and
- Reason printed in the overview log of the suite.</p>
-
- <p><c>SuiteName</c> is the name of the suite to be run.</p>
-
- <p><c>InitData</c> is the original config list of the test suite, or
- a <c>SkipOrFail</c> tuple if a previous CTH has returned this.</p>
-
- <p><c>CTHState</c> is the current internal state of the CTH.</p>
-
- <p><c>Return</c> is the result of the init_per_suite function.
- If it is <c>{skip,Reason}</c> or <c>{fail,Reason}</c>
- <seealso marker="common_test#Module:init_per_suite-1">init_per_suite
- </seealso> will never be called, instead the initiation is considered
- to be skipped/failed respectively. If a <c>NewConfig</c> list
- is returned, <seealso marker="common_test#Module:init_per_suite-1">
- init_per_suite</seealso> will be called with that <c>NewConfig</c> list.
- See <seealso marker="ct_hooks_chapter#pre">
- Pre Hooks</seealso> in the User's Guide for more details.</p>
-
-
- <p>Note that this function is only called if the CTH has been added
- before init_per_suite is run, see
- <seealso marker="ct_hooks_chapter#scope">CTH Scoping</seealso>
- in the User's Guide for details.</p>
+ <p>OPTIONAL</p>
+
+ <p>This function is called before
+ <seealso marker="common_test#Module:init_per_suite-1"><c>init_per_suite</c></seealso>
+ if it exists. It typically contains initialization/logging that must
+ be done before <c>init_per_suite</c> is called. If
+ <c>{skip,Reason}</c> or <c>{fail,Reason}</c> is returned,
+ <c>init_per_suite</c> and all test cases of the suite are skipped
+ and <c>Reason</c> printed in the overview log of the suite.</p>
+
+ <p><c>SuiteName</c> is the name of the suite to be run.</p>
+
+ <p><c>InitData</c> is the original configuration list of the test
+ suite, or a <c>SkipOrFail</c> tuple if a previous CTH has returned
+ this.</p>
+
+ <p><c>CTHState</c> is the current internal state of the CTH.</p>
+
+ <p><c>Return</c> is the result of the <c>init_per_suite</c> function.
+ If it is <c>{skip,Reason}</c> or <c>{fail,Reason}</c>,
+ <seealso marker="common_test#Module:init_per_suite-1"><c>init_per_suite</c></seealso>
+ is never called, instead the initiation is considered to be
+ skipped or failed, respectively. If a <c>NewConfig</c> list is
+ returned,
+ <seealso marker="common_test#Module:init_per_suite-1"><c>init_per_suite</c></seealso>
+ is called with that <c>NewConfig</c> list. For more details, see
+ section <seealso marker="ct_hooks_chapter#pre">Pre Hooks</seealso>
+ in the User's Guide.</p>
+
+ <p>This function is called only if the CTH is added before
+ <c>init_per_suite is run</c>. For details, see section
+ <seealso marker="ct_hooks_chapter#scope">CTH Scope</seealso>
+ in the User's Guide.</p>
</desc>
</func>
-
+
<func>
- <name>Module:post_init_per_suite(SuiteName, Config, Return, CTHState) -&gt;
- Result</name>
- <fsummary>Called after init_per_suite</fsummary>
+ <name>Module:post_init_per_suite(SuiteName, Config, Return, CTHState) -&gt; Result</name>
+ <fsummary>Called after init_per_suite.</fsummary>
<type>
- <v>SuiteName = atom()</v>
- <v>Config = [{Key,Value}]</v>
- <v>Return = NewReturn = Config | SkipOrFail | term()</v>
- <v>SkipOrFail = {fail, Reason} | {skip, Reason} | term()</v>
- <v>CTHState = NewCTHState = term()</v>
- <v>Result = {NewReturn, NewCTHState}</v>
- <v>Key = atom()</v>
- <v>Value = term()</v>
- <v>Reason = term()</v>
+ <v>SuiteName = atom()</v>
+ <v>Config = [{Key,Value}]</v>
+ <v>Return = NewReturn = Config | SkipOrFail | term()</v>
+ <v>SkipOrFail = {fail, Reason} | {skip, Reason} | term()</v>
+ <v>CTHState = NewCTHState = term()</v>
+ <v>Result = {NewReturn, NewCTHState}</v>
+ <v>Key = atom()</v>
+ <v>Value = term()</v>
+ <v>Reason = term()</v>
</type>
-
<desc>
- <p> OPTIONAL </p>
+ <p>OPTIONAL</p>
+
+ <p>This function is called after
+ <seealso marker="common_test#Module:init_per_suite-1"><c>init_per_suite</c></seealso>
+ if it exists. It typically contains extra checks to ensure that all
+ the correct dependencies are started correctly.</p>
+
+ <p><c>Return</c> is what
+ <seealso marker="common_test#Module:init_per_suite-1"><c>init_per_suite</c></seealso>
+ returned, that is, <c>{fail,Reason}</c>, <c>{skip,Reason}</c>, a
+ <c>Config</c> list, or a term describing how
+ <seealso marker="common_test#Module:init_per_suite-1"><c>init_per_suite</c></seealso>
+ failed.</p>
+
+ <p><c>NewReturn</c> is the possibly modified return value of
+ <seealso marker="common_test#Module:init_per_suite-1"><c>init_per_suite</c></seealso>.
+ To recover from a failure in
+ <seealso marker="common_test#Module:init_per_suite-1"><c>init_per_suite</c></seealso>,
+ return <c>ConfigList</c> with the <c>tc_status</c> element removed.
+ For more details, see
+ <seealso marker="ct_hooks_chapter#post"> Post Hooks</seealso> in
+ section "Manipulating Tests" in the User's Guide.</p>
+
+ <p><c>CTHState</c> is the current internal state of the CTH.</p>
+
+ <p>This function is called only if the CTH is added before or in
+ <c>init_per_suite</c>. For details, see section
+ <seealso marker="ct_hooks_chapter#scope">CTH Scope</seealso>
+ in the User's Guide.</p>
+ </desc>
+ </func>
- <p>This function is called after
- <seealso marker="common_test#Module:init_per_suite-1">
- init_per_suite</seealso> if it exists. It typically contains extra
- checks to make sure that all the correct dependencies have
- been started correctly.</p>
-
- <p><c>Return</c> is what
- <seealso marker="common_test#Module:init_per_suite-1">init_per_suite
- </seealso> returned, i.e. {fail,Reason}, {skip,Reason}, a <c>Config</c>
- list or a term describing how
- <seealso marker="common_test#Module:init_per_suite-1">init_per_suite
- </seealso> failed.</p>
-
- <p><c>NewReturn</c> is the possibly modified return value of
- <seealso marker="common_test#Module:init_per_suite-1">init_per_suite
- </seealso>. It is here possible to recover from a failure in
- <seealso marker="common_test#Module:init_per_suite-1">init_per_suite
- </seealso> by returning the <c>ConfigList</c> with the <c>tc_status</c>
- element removed. See <seealso marker="ct_hooks_chapter#post">
- Post Hooks</seealso> in the User's Guide for more details.</p>
-
- <p><c>CTHState</c> is the current internal state of the CTH.</p>
-
- <p>Note that this function is only called if the CTH has been added
- before or in init_per_suite, see
- <seealso marker="ct_hooks_chapter#scope">CTH Scoping</seealso>
- in the User's Guide for details.</p>
+ <func>
+ <name>Module:pre_init_per_group(GroupName, InitData, CTHState) -&gt; Result</name>
+ <fsummary>Called before init_per_group.</fsummary>
+ <type>
+ <v>GroupName = atom()</v>
+ <v>InitData = Config | SkipOrFail</v>
+ <v>Config = NewConfig = [{Key,Value}]</v>
+ <v>CTHState = NewCTHState = term()</v>
+ <v>Result = {NewConfig | SkipOrFail, NewCTHState}</v>
+ <v>SkipOrFail = {fail,Reason} | {skip, Reason}</v>
+ <v>Key = atom()</v>
+ <v>Value = term()</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc>
+ <p>OPTIONAL</p>
+
+ <p>This function is called before
+ <seealso marker="common_test#Module:init_per_group-2"><c>init_per_group</c></seealso>
+ if it exists. It behaves the same way as
+ <seealso marker="ct_hooks#Module:pre_init_per_suite-3"><c>pre_init_per_suite</c></seealso>,
+ but for function
+ <seealso marker="common_test#Module:init_per_group-2"><c>init_per_group</c></seealso>
+ instead.</p>
</desc>
</func>
-
+
<func>
- <name>Module:pre_init_per_group(GroupName, InitData, CTHState) -&gt;
- Result</name>
- <fsummary>Called before init_per_group</fsummary>
+ <name>Module:post_init_per_group(GroupName, Config, Return, CTHState) -&gt; Result</name>
+ <fsummary>Called after init_per_group.</fsummary>
<type>
- <v>GroupName = atom()</v>
- <v>InitData = Config | SkipOrFail</v>
- <v>Config = NewConfig = [{Key,Value}]</v>
- <v>CTHState = NewCTHState = term()</v>
- <v>Result = {NewConfig | SkipOrFail, NewCTHState}</v>
- <v>SkipOrFail = {fail,Reason} | {skip, Reason}</v>
- <v>Key = atom()</v>
- <v>Value = term()</v>
- <v>Reason = term()</v>
+ <v>GroupName = atom()</v>
+ <v>Config = [{Key,Value}]</v>
+ <v>Return = NewReturn = Config | SkipOrFail | term()</v>
+ <v>SkipOrFail = {fail,Reason} | {skip, Reason}</v>
+ <v>CTHState = NewCTHState = term()</v>
+ <v>Result = {NewReturn, NewCTHState}</v>
+ <v>Key = atom()</v>
+ <v>Value = term()</v>
+ <v>Reason = term()</v>
</type>
-
<desc>
- <p> OPTIONAL </p>
-
- <p>This function is called before
- <seealso marker="common_test#Module:init_per_group-2">
- init_per_group</seealso> if it exists. It behaves the same way as
- <seealso marker="ct_hooks#Module:pre_init_per_suite-3">
- pre_init_per_suite</seealso>, but for the
- <seealso marker="common_test#Module:init_per_group-2">
- init_per_group</seealso> instead.</p>
+ <p>OPTIONAL</p>
+
+ <p>This function is called after
+ <seealso marker="common_test#Module:init_per_group-2"><c>init_per_group</c></seealso>
+ if it exists. It behaves the same way as
+ <seealso marker="ct_hooks#Module:post_init_per_suite-4"><c>post_init_per_suite</c></seealso>,
+ but for function
+ <seealso marker="common_test#Module:init_per_group-2"><c>init_per_group</c></seealso>
+ instead.</p>
</desc>
</func>
-
+
<func>
- <name>Module:post_init_per_group(GroupName, Config, Return, CTHState) -&gt;
- Result</name>
- <fsummary>Called after init_per_group</fsummary>
+ <name>Module:pre_init_per_testcase(TestcaseName, InitData, CTHState) -&gt; Result</name>
+ <fsummary>Called before init_per_testcase.</fsummary>
<type>
- <v>GroupName = atom()</v>
- <v>Config = [{Key,Value}]</v>
- <v>Return = NewReturn = Config | SkipOrFail | term()</v>
- <v>SkipOrFail = {fail,Reason} | {skip, Reason}</v>
- <v>CTHState = NewCTHState = term()</v>
- <v>Result = {NewReturn, NewCTHState}</v>
- <v>Key = atom()</v>
- <v>Value = term()</v>
- <v>Reason = term()</v>
+ <v>TestcaseName = atom()</v>
+ <v>InitData = Config | SkipOrFail</v>
+ <v>Config = NewConfig = [{Key,Value}]</v>
+ <v>CTHState = NewCTHState = term()</v>
+ <v>Result = {NewConfig | SkipOrFail, NewCTHState}</v>
+ <v>SkipOrFail = {fail,Reason} | {skip, Reason}</v>
+ <v>Key = atom()</v>
+ <v>Value = term()</v>
+ <v>Reason = term()</v>
</type>
-
<desc>
- <p> OPTIONAL </p>
-
- <p>This function is called after
- <seealso marker="common_test#Module:init_per_group-2">
- init_per_group</seealso> if it exists. It behaves the same way as
- <seealso marker="ct_hooks#Module:post_init_per_suite-4">
- post_init_per_suite</seealso>, but for the
- <seealso marker="common_test#Module:init_per_group-2">
- init_per_group</seealso> instead.</p>
+ <p>OPTIONAL</p>
+
+ <p>This function is called before
+ <seealso marker="common_test#Module:init_per_testcase-2"><c>init_per_testcase</c></seealso>
+ if it exists. It behaves the same way as
+ <seealso marker="ct_hooks#Module:pre_init_per_suite-3"><c>pre_init_per_suite</c></seealso>,
+ but for function
+ <seealso marker="common_test#Module:init_per_testcase-2"><c>init_per_testcase</c></seealso>
+ instead.</p>
+
+ <p>CTHs cannot be added here right now. That feature may be added in
+ a later release, but it would right now break backwards
+ compatibility.</p>
</desc>
</func>
<func>
- <name>Module:pre_init_per_testcase(TestcaseName, InitData, CTHState) -&gt;
- Result</name>
- <fsummary>Called before init_per_testcase</fsummary>
+ <name>Module:post_init_per_testcase(TestcaseName, Config, Return, CTHState) -&gt; Result</name>
+ <fsummary>Called after init_per_testcase.</fsummary>
<type>
- <v>TestcaseName = atom()</v>
- <v>InitData = Config | SkipOrFail</v>
- <v>Config = NewConfig = [{Key,Value}]</v>
- <v>CTHState = NewCTHState = term()</v>
- <v>Result = {NewConfig | SkipOrFail, NewCTHState}</v>
- <v>SkipOrFail = {fail,Reason} | {skip, Reason}</v>
- <v>Key = atom()</v>
- <v>Value = term()</v>
- <v>Reason = term()</v>
+ <v>TestcaseName = atom()</v>
+ <v>Config = [{Key,Value}]</v>
+ <v>Return = NewReturn = Config | SkipOrFail | term()</v>
+ <v>SkipOrFail = {fail,Reason} | {skip, Reason}</v>
+ <v>CTHState = NewCTHState = term()</v>
+ <v>Result = {NewReturn, NewCTHState}</v>
+ <v>Key = atom()</v>
+ <v>Value = term()</v>
+ <v>Reason = term()</v>
</type>
-
<desc>
- <p> OPTIONAL </p>
-
- <p>This function is called before
- <seealso marker="common_test#Module:init_per_testcase-2">
- init_per_testcase</seealso> if it exists. It behaves the same way as
- <seealso marker="ct_hooks#Module:pre_init_per_suite-3">
- pre_init_per_suite</seealso>, but for the
- <seealso marker="common_test#Module:init_per_testcase-2">
- init_per_testcase</seealso> function instead.</p>
-
- <p>Note that it is not possible to add CTH's here right now,
- that feature might be added later,
- but it would right now break backwards compatibility.</p>
+ <p>OPTIONAL</p>
+
+ <p>This function is called after
+ <seealso marker="common_test#Module:init_per_testcase-2"><c>init_per_testcase</c></seealso>
+ if it exists. It behaves the same way as
+ <seealso marker="ct_hooks#Module:post_init_per_suite-4"><c>post_init_per_suite</c></seealso>,
+ but for function
+ <seealso marker="common_test#Module:init_per_testcase-2"><c>init_per_testcase</c></seealso>
+ instead.</p>
</desc>
</func>
<func>
- <name>Module:post_end_per_testcase(TestcaseName, Config, Return, CTHState)
- -&gt; Result</name>
- <fsummary>Called after end_per_testcase</fsummary>
+ <name>Module:pre_end_per_testcase(TestcaseName, InitData, CTHState) -&gt; Result</name>
+ <fsummary>Called before end_per_testcase.</fsummary>
<type>
- <v>TestcaseName = atom()</v>
- <v>Config = [{Key,Value}]</v>
- <v>Return = NewReturn = Config | SkipOrFail | term()</v>
- <v>SkipOrFail = {fail,Reason} | {skip, Reason}</v>
- <v>CTHState = NewCTHState = term()</v>
- <v>Result = {NewReturn, NewCTHState}</v>
- <v>Key = atom()</v>
- <v>Value = term()</v>
- <v>Reason = term()</v>
+ <v>TestcaseName = atom()</v>
+ <v>InitData = Config</v>
+ <v>Config = NewConfig = [{Key,Value}]</v>
+ <v>CTHState = NewCTHState = term()</v>
+ <v>Result = {NewConfig, NewCTHState}</v>
+ <v>Key = atom()</v>
+ <v>Value = term()</v>
+ <v>Reason = term()</v>
</type>
-
<desc>
- <p> OPTIONAL </p>
-
- <p>This function is called after
- <seealso marker="common_test#Module:end_per_testcase-2">
- end_per_testcase</seealso> if it exists. It behaves the same way as
- <seealso marker="ct_hooks#Module:post_init_per_suite-4">
- post_init_per_suite</seealso>, but for the
- <seealso marker="common_test#Module:end_per_testcase-2">
- end_per_testcase</seealso> function instead.</p>
+ <p>OPTIONAL</p>
+
+ <p>This function is called before
+ <seealso marker="common_test#Module:end_per_testcase-2"><c>end_per_testcase</c></seealso>
+ if it exists. It behaves the same way as
+ <seealso marker="ct_hooks#Module:pre_end_per_suite-3"><c>pre_end_per_suite</c></seealso>,
+ but for function
+ <seealso marker="common_test#Module:end_per_testcase-2"><c>end_per_testcase</c></seealso>
+ instead.</p>
+
+ <p>This function can not change the result of the test case by returning skip or fail
+ tuples, but it may insert items in <c>Config</c> that can be read in
+ <c>end_per_testcase/2</c> or in <c>post_end_per_testcase/4</c>.</p>
</desc>
</func>
<func>
- <name>Module:pre_end_per_group(GroupName, EndData, CTHState) -&gt;
- Result</name>
- <fsummary>Called before end_per_group</fsummary>
+ <name>Module:post_end_per_testcase(TestcaseName, Config, Return, CTHState) -&gt; Result</name>
+ <fsummary>Called after end_per_testcase.</fsummary>
<type>
- <v>GroupName = atom()</v>
- <v>EndData = Config | SkipOrFail</v>
- <v>Config = NewConfig = [{Key,Value}]</v>
- <v>CTHState = NewCTHState = term()</v>
- <v>Result = {NewConfig | SkipOrFail, NewCTHState}</v>
- <v>SkipOrFail = {fail,Reason} | {skip, Reason}</v>
- <v>Key = atom()</v>
- <v>Value = term()</v>
- <v>Reason = term()</v>
+ <v>TestcaseName = atom()</v>
+ <v>Config = [{Key,Value}]</v>
+ <v>Return = NewReturn = Config | SkipOrFail | term()</v>
+ <v>SkipOrFail = {fail,Reason} | {skip, Reason}</v>
+ <v>CTHState = NewCTHState = term()</v>
+ <v>Result = {NewReturn, NewCTHState}</v>
+ <v>Key = atom()</v>
+ <v>Value = term()</v>
+ <v>Reason = term()</v>
</type>
-
<desc>
- <p> OPTIONAL </p>
-
- <p>This function is called before
- <seealso marker="common_test#Module:end_per_group-2">
- end_per_group</seealso> if it exists. It behaves the same way as
- <seealso marker="ct_hooks#Module:pre_init_per_suite-3">
- pre_init_per_suite</seealso>, but for the
- <seealso marker="common_test#Module:end_per_group-2">
- end_per_group</seealso> function instead.</p>
+ <p>OPTIONAL</p>
+
+ <p>This function is called after
+ <seealso marker="common_test#Module:end_per_testcase-2"><c>end_per_testcase</c></seealso>
+ if it exists. It behaves the same way as
+ <seealso marker="ct_hooks#Module:post_end_per_suite-4"><c>post_end_per_suite</c></seealso>,
+ but for function
+ <seealso marker="common_test#Module:end_per_testcase-2"><c>end_per_testcase</c></seealso>
+ instead.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>Module:pre_end_per_group(GroupName, EndData, CTHState) -&gt; Result</name>
+ <fsummary>Called before end_per_group.</fsummary>
+ <type>
+ <v>GroupName = atom()</v>
+ <v>EndData = Config | SkipOrFail</v>
+ <v>Config = NewConfig = [{Key,Value}]</v>
+ <v>CTHState = NewCTHState = term()</v>
+ <v>Result = {NewConfig | SkipOrFail, NewCTHState}</v>
+ <v>SkipOrFail = {fail,Reason} | {skip, Reason}</v>
+ <v>Key = atom()</v>
+ <v>Value = term()</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc>
+ <p>OPTIONAL</p>
+
+ <p>This function is called before
+ <seealso marker="common_test#Module:end_per_group-2"><c>end_per_group</c></seealso>
+ if it exists. It behaves the same way as
+ <seealso marker="ct_hooks#Module:pre_init_per_suite-3"><c>pre_init_per_suite</c></seealso>,
+ but for function
+ <seealso marker="common_test#Module:end_per_group-2"><c>end_per_group</c></seealso>
+ instead.</p>
</desc>
</func>
<func>
- <name>Module:post_end_per_group(GroupName, Config, Return, CTHState) -&gt;
- Result</name>
- <fsummary>Called after end_per_group</fsummary>
+ <name>Module:post_end_per_group(GroupName, Config, Return, CTHState) -&gt; Result</name>
+ <fsummary>Called after end_per_group.</fsummary>
<type>
- <v>GroupName = atom()</v>
- <v>Config = [{Key,Value}]</v>
- <v>Return = NewReturn = Config | SkipOrFail | term()</v>
- <v>SkipOrFail = {fail,Reason} | {skip, Reason}</v>
- <v>CTHState = NewCTHState = term()</v>
- <v>Result = {NewReturn, NewCTHState}</v>
- <v>Key = atom()</v>
- <v>Value = term()</v>
- <v>Reason = term()</v>
+ <v>GroupName = atom()</v>
+ <v>Config = [{Key,Value}]</v>
+ <v>Return = NewReturn = Config | SkipOrFail | term()</v>
+ <v>SkipOrFail = {fail,Reason} | {skip, Reason}</v>
+ <v>CTHState = NewCTHState = term()</v>
+ <v>Result = {NewReturn, NewCTHState}</v>
+ <v>Key = atom()</v>
+ <v>Value = term()</v>
+ <v>Reason = term()</v>
</type>
-
<desc>
- <p> OPTIONAL </p>
-
- <p>This function is called after
- <seealso marker="common_test#Module:end_per_group-2">
- end_per_group</seealso> if it exists. It behaves the same way as
- <seealso marker="ct_hooks#Module:post_init_per_suite-4">
- post_init_per_suite</seealso>, but for the
- <seealso marker="common_test#Module:end_per_group-2">
- end_per_group</seealso> function instead.</p>
+ <p>OPTIONAL</p>
+
+ <p>This function is called after
+ <seealso marker="common_test#Module:end_per_group-2"><c>end_per_group</c></seealso>
+ if it exists. It behaves the same way as
+ <seealso marker="ct_hooks#Module:post_init_per_suite-4"><c>post_init_per_suite</c></seealso>,
+ but for function
+ <seealso marker="common_test#Module:end_per_group-2">end_per_group</seealso>
+ instead.</p>
</desc>
</func>
<func>
- <name>Module:pre_end_per_suite(SuiteName, EndData, CTHState) -&gt;
- Result</name>
- <fsummary>Called before end_per_suite</fsummary>
+ <name>Module:pre_end_per_suite(SuiteName, EndData, CTHState) -&gt; Result</name>
+ <fsummary>Called before end_per_suite.</fsummary>
<type>
- <v>SuiteName = atom()</v>
- <v>EndData = Config | SkipOrFail</v>
- <v>Config = NewConfig = [{Key,Value}]</v>
- <v>CTHState = NewCTHState = term()</v>
- <v>Result = {NewConfig | SkipOrFail, NewCTHState}</v>
- <v>SkipOrFail = {fail,Reason} | {skip, Reason}</v>
- <v>Key = atom()</v>
- <v>Value = term()</v>
- <v>Reason = term()</v>
+ <v>SuiteName = atom()</v>
+ <v>EndData = Config | SkipOrFail</v>
+ <v>Config = NewConfig = [{Key,Value}]</v>
+ <v>CTHState = NewCTHState = term()</v>
+ <v>Result = {NewConfig | SkipOrFail, NewCTHState}</v>
+ <v>SkipOrFail = {fail,Reason} | {skip, Reason}</v>
+ <v>Key = atom()</v>
+ <v>Value = term()</v>
+ <v>Reason = term()</v>
</type>
-
<desc>
- <p> OPTIONAL </p>
-
- <p>This function is called before
- <seealso marker="common_test#Module:end_per_suite-1">
- end_per_suite</seealso> if it exists. It behaves the same way as
- <seealso marker="ct_hooks#Module:pre_init_per_suite-3">
- pre_init_per_suite</seealso>, but for the
- <seealso marker="common_test#Module:end_per_suite-1">
- end_per_suite</seealso> function instead.</p>
+ <p>OPTIONAL</p>
+
+ <p>This function is called before
+ <seealso marker="common_test#Module:end_per_suite-1"><c>end_per_suite</c></seealso>
+ if it exists. It behaves the same way as
+ <seealso marker="ct_hooks#Module:pre_init_per_suite-3"><c>pre_init_per_suite</c></seealso>,
+ but for function
+ <seealso marker="common_test#Module:end_per_suite-1"><c>end_per_suite</c></seealso>
+ instead.</p>
</desc>
</func>
<func>
- <name>Module:post_end_per_suite(SuiteName, Config, Return, CTHState) -&gt;
- Result</name>
- <fsummary>Called after end_per_suite</fsummary>
+ <name>Module:post_end_per_suite(SuiteName, Config, Return, CTHState) -&gt; Result</name>
+ <fsummary>Called after end_per_suite.</fsummary>
<type>
- <v>SuiteName = atom()</v>
- <v>Config = [{Key,Value}]</v>
- <v>Return = NewReturn = Config | SkipOrFail | term()</v>
- <v>SkipOrFail = {fail,Reason} | {skip, Reason}</v>
- <v>CTHState = NewCTHState = term()</v>
- <v>Result = {NewReturn, NewCTHState}</v>
- <v>Key = atom()</v>
- <v>Value = term()</v>
- <v>Reason = term()</v>
+ <v>SuiteName = atom()</v>
+ <v>Config = [{Key,Value}]</v>
+ <v>Return = NewReturn = Config | SkipOrFail | term()</v>
+ <v>SkipOrFail = {fail,Reason} | {skip, Reason}</v>
+ <v>CTHState = NewCTHState = term()</v>
+ <v>Result = {NewReturn, NewCTHState}</v>
+ <v>Key = atom()</v>
+ <v>Value = term()</v>
+ <v>Reason = term()</v>
</type>
-
<desc>
- <p> OPTIONAL </p>
-
- <p>This function is called after
- <seealso marker="common_test#Module:end_per_suite-1">
- end_per_suite</seealso> if it exists. It behaves the same way as
- <seealso marker="ct_hooks#Module:post_init_per_suite-4">
- post_init_per_suite</seealso>, but for the
- <seealso marker="common_test#Module:end_per_suite-1">
- end_per_suite</seealso> function instead.</p>
+ <p>OPTIONAL</p>
+
+ <p>This function is called after
+ <seealso marker="common_test#Module:end_per_suite-1"><c>end_per_suite</c></seealso>
+ if it exists. It behaves the same way as
+ <seealso marker="ct_hooks#Module:post_init_per_suite-4"><c>post_init_per_suite</c></seealso>,
+ but for function
+ <seealso marker="common_test#Module:end_per_suite-1"><c>end_per_suite</c></seealso>
+ instead.</p>
</desc>
</func>
<func>
- <name>Module:on_tc_fail(TestName, Reason, CTHState) -&gt;
- NewCTHState</name>
- <fsummary>Called after the CTH scope ends</fsummary>
+ <name>Module:on_tc_fail(TestName, Reason, CTHState) -&gt; NewCTHState</name>
+ <fsummary>Called after the CTH scope ends.</fsummary>
<type>
- <v>TestName = init_per_suite | end_per_suite |
- {init_per_group,GroupName} | {end_per_group,GroupName} |
- {FuncName,GroupName} | FuncName</v>
- <v>FuncName = atom()</v>
- <v>GroupName = atom()</v>
- <v>Reason = term()</v>
- <v>CTHState = NewCTHState = term()</v>
+ <v>TestName = init_per_suite | end_per_suite | {init_per_group,GroupName} | {end_per_group,GroupName} | {FuncName,GroupName} | FuncName</v>
+ <v>FuncName = atom()</v>
+ <v>GroupName = atom()</v>
+ <v>Reason = term()</v>
+ <v>CTHState = NewCTHState = term()</v>
</type>
-
<desc>
- <p> OPTIONAL </p>
-
- <p>This function is called whenever a test case (or config function)
- fails. It is called after the post function has been called for
- the failed test case. I.e. if init_per_suite fails, this function
- is called after
- <seealso marker="#Module:post_init_per_suite-4">
- post_init_per_suite</seealso>, and if a test case fails, it is called
- after <seealso marker="#Module:post_end_per_testcase-4">
- post_end_per_testcase</seealso>. If the failed test case belongs
- to a test case group, the first argument is a tuple
- <c>{FuncName,GroupName}</c>, otherwise simply the function name.</p>
-
- <p>The data which comes with the Reason follows the same format as the
- <seealso marker="event_handler_chapter#failreason">FailReason
- </seealso> in the <seealso marker="event_handler_chapter#tc_done">tc_done</seealso> event.
- See <seealso marker="event_handler_chapter#events">Event Handling
- </seealso> in the User's Guide for details.</p>
+ <p>OPTIONAL</p>
+
+ <p>This function is called whenever a test case (or configuration
+ function) fails. It is called after the post function is called
+ for the failed test case, that is:</p>
+
+ <list type="bulleted">
+ <item><p>If <c>init_per_suite</c> fails, this function is called after
+ <seealso marker="#Module:post_init_per_suite-4"><c>post_init_per_suite</c></seealso>.</p></item>
+ <item><p>If a test case fails, this funcion is called after
+ <seealso marker="#Module:post_end_per_testcase-4"><c>post_end_per_testcase</c></seealso>.</p></item>
+ </list>
+
+ <p>If the failed test case belongs to a test case group, the first
+ argument is a tuple <c>{FuncName,GroupName}</c>, otherwise only
+ the function name.</p>
+
+ <p>The data that comes with <c>Reason</c> follows the same format as
+ <seealso marker="event_handler_chapter#failreason"><c>FailReason</c></seealso>
+ in event
+ <seealso marker="event_handler_chapter#tc_done"><c>tc_done</c></seealso>.
+ For details, see section
+ <seealso marker="event_handler_chapter#events">Event Handling</seealso>
+ in the User's Guide.</p>
</desc>
</func>
<func>
- <name>Module:on_tc_skip(TestName, Reason, CTHState) -&gt;
- NewCTHState</name>
- <fsummary>Called after the CTH scope ends</fsummary>
+ <name>Module:on_tc_skip(TestName, Reason, CTHState) -&gt; NewCTHState</name>
+ <fsummary>Called after the CTH scope ends.</fsummary>
<type>
- <v>TestName = init_per_suite | end_per_suite |
- {init_per_group,GroupName} | {end_per_group,GroupName} |
- {FuncName,GroupName} | FuncName</v>
- <v>FuncName = atom()</v>
- <v>GroupName = atom()</v>
- <v>Reason = {tc_auto_skip | tc_user_skip, term()}</v>
- <v>CTHState = NewCTHState = term()</v>
+ <v>TestName = init_per_suite | end_per_suite | {init_per_group,GroupName} | {end_per_group,GroupName} | {FuncName,GroupName} | FuncName</v>
+ <v>FuncName = atom()</v>
+ <v>GroupName = atom()</v>
+ <v>Reason = {tc_auto_skip | tc_user_skip, term()}</v>
+ <v>CTHState = NewCTHState = term()</v>
</type>
-
<desc>
- <p> OPTIONAL </p>
-
- <p>This function is called whenever a test case (or config function)
- is skipped. It is called after the post function has been called
- for the skipped test case. I.e. if init_per_group is skipped, this
- function is called after
- <seealso marker="#Module:post_init_per_group-4">
- post_init_per_group</seealso>, and if a test case is skipped,
- it is called after
- <seealso marker="#Module:post_end_per_testcase-4">
- post_end_per_testcase</seealso>. If the skipped test case belongs to a
- test case group, the first argument is a tuple <c>{FuncName,GroupName}</c>,
- otherwise simply the function name.</p>
-
- <p>The data which comes with the Reason follows the same format as
- <seealso marker="event_handler_chapter#tc_auto_skip">tc_auto_skip
- </seealso> and <seealso marker="event_handler_chapter#tc_user_skip">
- tc_user_skip</seealso> events.
- See <seealso marker="event_handler_chapter#events">Event Handling
- </seealso> in the User's Guide for details.</p>
+ <p>OPTIONAL</p>
+
+ <p>This function is called whenever a test case (or configuration
+ function) is skipped. It is called after the post function is called
+ for the skipped test case, that is:</p>
+
+ <list type="bulleted">
+ <item><p>If <c>init_per_group</c> is skipped, this function is
+ called after
+ <seealso marker="#Module:post_init_per_group-4"><c>post_init_per_group</c></seealso>.</p></item>
+ <item><p>If a test case is skipped, this function is called after
+ <seealso marker="#Module:post_end_per_testcase-4"><c>post_end_per_testcase</c></seealso>.</p></item>
+ </list>
+
+ <p>If the skipped test case belongs to a test case group, the first
+ argument is a tuple <c>{FuncName,GroupName}</c>, otherwise only
+ the function name.</p>
+
+ <p>The data that comes with <c>Reason</c> follows the same format as
+ events
+ <seealso marker="event_handler_chapter#tc_auto_skip"><c>tc_auto_skip</c></seealso>
+ and
+ <seealso marker="event_handler_chapter#tc_user_skip"><c>tc_user_skip</c></seealso>
+ For details, see section
+ <seealso marker="event_handler_chapter#events">Event Handling</seealso>
+ in the User's Guide.</p>
</desc>
</func>
<func>
<name>Module:terminate(CTHState)</name>
- <fsummary>Called after the CTH scope ends</fsummary>
+ <fsummary>Called after the CTH scope ends.</fsummary>
<type>
- <v>CTHState = term()</v>
+ <v>CTHState = term()</v>
</type>
-
<desc>
- <p> OPTIONAL </p>
+ <p>OPTIONAL</p>
- <p>This function is called at the end of a CTH's
- <seealso marker="ct_hooks_chapter#scope">scope</seealso>.
- </p>
+ <p>This function is called at the end of a CTH
+ <seealso marker="ct_hooks_chapter#scope">scope</seealso>.</p>
</desc>
</func>
<func>
<name>Module:id(Opts) -&gt; Id</name>
- <fsummary>Called before the init function of a CTH</fsummary>
+ <fsummary>Called before the init function of a CTH.</fsummary>
<type>
- <v>Opts = term()</v>
- <v>Id = term()</v>
+ <v>Opts = term()</v>
+ <v>Id = term()</v>
</type>
-
<desc>
- <p> OPTIONAL </p>
-
- <p>The <c>Id</c> is used to uniquely identify a CTH instance,
- if two CTH's return the same <c>Id</c> the second CTH is ignored
- and subsequent calls to the CTH will only be made to the first
- instance. For more information see
- <seealso marker="ct_hooks_chapter#installing">Installing a CTH
- </seealso> in the User's Guide.
- </p>
-
- <p>This function should NOT have any side effects as it might
- be called multiple times by Common Test.</p>
+ <p>OPTIONAL</p>
- <p>If not implemented the CTH will act as if this function returned a
- call to <c>make_ref/0</c>.</p>
- </desc>
+ <p>The <c>Id</c> identifies a CTH instance uniquely. If two CTHs return
+ the same <c>Id</c>, the second CTH is ignored and subsequent calls to
+ the CTH are only made to the first instance. For details, see section
+ <seealso marker="ct_hooks_chapter#installing">Installing a CTH</seealso>
+ in the User's Guide.</p>
+
+ <p>This function is <em>not</em> to have any side effects, as it can
+ be called multiple times by <c>Common Test</c>.</p>
+
+ <p>If not implemented, the CTH acts as if this function returned a call
+ to <c>make_ref/0</c>.</p>
+ </desc>
</func>
-
</funcs>
</erlref>
diff --git a/lib/common_test/doc/src/ct_hooks_chapter.xml b/lib/common_test/doc/src/ct_hooks_chapter.xml
index 3905e23dcc..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>
@@ -34,28 +34,28 @@
<marker id="general"></marker>
<title>General</title>
<p>
- The <em>Common Test Hook</em> (henceforth called CTH) framework allows
- extensions of the default behaviour of Common Test by means of hooks
- before and after all test suite calls. CTHs allow advanced Common Test
- users to abstract out behaviour which is common to multiple test suites
- without littering all test suites with library calls. Some example
- usages are: logging, starting and monitoring external systems,
- building C files needed by the tests and much more!</p>
-
- <p>In brief, Common Test Hooks allows you to:</p>
-
- <list>
- <item>Manipulate the runtime config before each suite
- configuration call</item>
- <item>Manipulate the return of all suite configuration calls and in
- extension the result of the test themselves.</item>
+ The <em>Common Test Hook (CTH)</em> framework allows
+ extensions of the default behavior of <c>Common Test</c> using hooks
+ before and after all test suite calls. CTHs allow advanced <c>Common Test</c>
+ users to abstract out behavior that is common to multiple test suites
+ without littering all test suites with library calls. this can be used
+ for logging, starting, and monitoring external systems,
+ building C files needed by the tests, and so on.</p>
+
+ <p>In brief, CTH allows you to do the following:</p>
+
+ <list type="bulleted">
+ <item>Manipulate the runtime configuration before each suite
+ configuration call.</item>
+ <item>Manipulate the return of all suite configuration calls, and in
+ extension, the result of the tests themselves.</item>
</list>
- <p>The following sections describe how to use CTHs, when they are run
- and how to manipulate your test results in a CTH</p>
+ <p>The following sections describe how to use CTHs, when they are run,
+ and how to manipulate the test results in a CTH.</p>
- <warning><p>When executing within a CTH all timetraps are shutoff. So
- if your CTH never returns, the entire test run will be stalled!</p>
+ <warning><p>When executing within a CTH, all timetraps are shut off. So
+ if your CTH never returns, the entire test run is stalled.</p>
</warning>
</section>
@@ -63,144 +63,148 @@
<section>
<marker id="installing"></marker>
<title>Installing a CTH</title>
- <p>There are multiple ways to install a CTH in your test run. You can do it
- for all tests in a run, for specific test suites and for specific groups
+ <p>A CTH can be installed in multiple ways in your test run. You can do it
+ for all tests in a run, for specific test suites, and for specific groups
within a test suite. If you want a CTH to be present in all test suites
- within your test run there are three different ways to accomplish that.
+ within your test run, there are three ways to accomplish that, as follows:
</p>
- <list>
+ <list type="bulleted">
<item>Add <c>-ct_hooks</c> as an argument to
<seealso marker="run_test_chapter#ct_run">ct_run</seealso>.
- To add multiple CTHs using this method append them to each other
- using the keyword <c>and</c>, i.e.
+ To add multiple CTHs using this method, append them to each other
+ using the keyword <c>and</c>, that is,
<c>ct_run -ct_hooks cth1 [{debug,true}] and cth2 ...</c>.</item>
- <item>Add the <c>ct_hooks</c> tag to your
+ <item>Add tag <c>ct_hooks</c> to your
<seealso marker="run_test_chapter#test_specifications">
- Test Specification</seealso></item>
- <item>Add the <c>ct_hooks</c> tag to your call to
- <seealso marker="ct#run_test-1">ct:run_test/1</seealso></item>
+ Test Specification</seealso>.</item>
+ <item>Add tag <c>ct_hooks</c> to your call to
+ <seealso marker="ct#run_test-1">ct:run_test/1</seealso>.</item>
</list>
- <p>You can also add CTHs within a test suite. This is done by returning
- <c>{ct_hooks,[CTH]}</c> in the config list from
+ <p>CTHs can also be added within a test suite. This is done by returning
+ <c>{ct_hooks,[CTH]}</c> in the configuration list from
<seealso marker="common_test#Module:suite-0">suite/0</seealso>,
<seealso marker="common_test#Module:init_per_suite-1">
- init_per_suite/1</seealso> or
+ init_per_suite/1</seealso>, or
<seealso marker="common_test#Module:init_per_group-2">
- init_per_group/2</seealso>. <c>CTH</c> in this case can be either
- only the module name of the CTH or a tuple with the module name and the
- initial arguments and optionally the hook priority of the CTH. Eg:
- <c>{ct_hooks,[my_cth_module]}</c> or
- <c>{ct_hooks,[{my_cth_module,[{debug,true}]}]}</c> or
- <c>{ct_hooks,[{my_cth_module,[{debug,true}],500}]}</c>
- </p>
+ init_per_group/2</seealso>.</p>
+
+ <p>In this case, <c>CTH</c> can either be only the module name of the CTH
+ or a tuple with the module name and the initial arguments, and optionally
+ the hook priority of the CTH. For example, one of the following:</p>
+ <list type="bulleted">
+ <item><c>{ct_hooks,[my_cth_module]}</c></item>
+ <item><c>{ct_hooks,[{my_cth_module,[{debug,true}]}]}</c></item>
+ <item><c>{ct_hooks,[{my_cth_module,[{debug,true}],500}]}</c></item>
+ </list>
<section>
<title>Overriding CTHs</title>
- <p>By default each installation of a CTH will cause a new instance of it
- to be activated. This can cause problems if you want to be able to
- override CTHs in test specifications while still having them in the
- suite info function. The
+ <p>By default, each installation of a CTH causes a new instance of it
+ to be activated. This can cause problems if you want to override
+ CTHs in test specifications while still having them in the
+ suite information function. The
<seealso marker="ct_hooks#Module:id-1">id/1</seealso>
callback exists to address this problem. By returning the same
- <c>id</c> in both places, Common Test knows that this CTH
- has already been installed and will not try to install it again.</p>
+ <c>id</c> in both places, <c>Common Test</c> knows that this CTH
+ is already installed and does not try to install it again.</p>
</section>
<section>
- <title>CTH Execution order</title>
- <p>By default each CTH installed will be executed in the order which
+ <title>CTH Execution Order</title>
+ <p>By default, each CTH installed is executed in the order that
they are installed for init calls, and then reversed for end calls.
- This is not always wanted so common_test allows
+ This is not always desired, so <c>Common Test</c> allows
the user to specify a priority for each hook. The priority can either
- be specified in the CTH <seealso marker="ct_hooks#Module:init-2">init/2
- </seealso> function or when installing the hook. The priority given at
- installation will override the priority returned by the CTH. </p>
+ be specified in the CTH function
+ <seealso marker="ct_hooks#Module:init-2">init/2</seealso> or when
+ installing the hook. The priority specified at installation overrides the
+ priority returned by the CTH.</p>
</section>
</section>
<section>
<marker id="scope"/>
<title>CTH Scope</title>
- <p>Once the CTH is installed into a certain test run it will be there until
+ <p>Once the CTH is installed into a certain test run it remains there until
its scope is expired. The scope of a CTH depends on when it is
- installed.
- The <seealso marker="ct_hooks#Module:init-2">init/2</seealso> is
- called at the beginning of the scope and the
- <seealso marker="ct_hooks#Module:terminate-1">terminate/1
- </seealso> function is called when the scope ends.</p>
+ installed, see the following table.
+ Function <seealso marker="ct_hooks#Module:init-2">init/2</seealso> is
+ called at the beginning of the scope and function
+ <seealso marker="ct_hooks#Module:terminate-1">terminate/1</seealso>
+ is called when the scope ends.</p>
<table>
<row>
- <cell><em>CTH Installed in</em></cell>
+ <cell><em>CTH installed in</em></cell>
<cell><em>CTH scope begins before</em></cell>
<cell><em>CTH scope ends after</em></cell>
</row>
<row>
<cell><seealso marker="run_test_chapter#ct_run">ct_run</seealso></cell>
- <cell>the first test suite is to be run.</cell>
- <cell>the last test suite has been run.</cell>
+ <cell>the first test suite is to be run</cell>
+ <cell>the last test suite has been run</cell>
</row>
<row>
<cell><seealso marker="ct#run_test-1">ct:run_test</seealso></cell>
- <cell>the first test suite is to be run.</cell>
- <cell>the last test suite has been run.</cell>
+ <cell>the first test suite is run</cell>
+ <cell>the last test suite has been run</cell>
</row>
<row>
<cell><seealso marker="run_test_chapter#test_specifications">
Test Specification</seealso></cell>
- <cell>the first test suite is to be run.</cell>
- <cell>the last test suite has been run.</cell>
+ <cell>the first test suite is run</cell>
+ <cell>the last test suite has been run</cell>
</row>
<row>
<cell><seealso marker="common_test#Module:suite-0">suite/0
</seealso></cell>
<cell><seealso marker="ct_hooks#Module:pre_init_per_suite-3">
- pre_init_per_suite/3</seealso> is called.</cell>
+ pre_init_per_suite/3</seealso> is called</cell>
<cell><seealso marker="ct_hooks#Module:post_end_per_suite-4">
- post_end_per_suite/4</seealso> has been called for that test suite.</cell>
+ post_end_per_suite/4</seealso> has been called for that test suite</cell>
</row>
<row>
<cell><seealso marker="common_test#Module:init_per_suite-1">
init_per_suite/1</seealso></cell>
<cell><seealso marker="ct_hooks#Module:post_init_per_suite-4">
- post_init_per_suite/4</seealso> is called.</cell>
+ post_init_per_suite/4</seealso> is called</cell>
<cell><seealso marker="ct_hooks#Module:post_end_per_suite-4">
- post_end_per_suite/4</seealso> has been called for that test suite.</cell>
+ post_end_per_suite/4</seealso> has been called for that test suite</cell>
</row>
<row>
<cell><seealso marker="common_test#Module:init_per_group-2">
init_per_group/2</seealso></cell>
<cell><seealso marker="ct_hooks#Module:post_init_per_group-4">
- post_init_per_group/4</seealso> is called.</cell>
+ post_init_per_group/4</seealso> is called</cell>
<cell><seealso marker="ct_hooks#Module:post_end_per_suite-4">
- post_end_per_group/4</seealso> has been called for that group.</cell>
+ post_end_per_group/4</seealso> has been called for that group</cell>
</row>
<tcaption>Scope of a CTH</tcaption>
</table>
<section>
<title>CTH Processes and Tables</title>
- <p>CTHs are run with the same process scoping as normal test suites
- i.e. a different process will execute the init_per_suite hooks then the
- init_per_group or per_testcase hooks. So if you want to spawn a
- process in the CTH you cannot link with the CTH process as it will exit
- after the post hook ends. Also if you for some reason need an ETS
- table with your CTH, you will have to spawn a process which handles
- it.</p>
+ <p>CTHs are run with the same process scoping as normal test suites,
+ that is, a different process executes the <c>init_per_suite</c> hooks then the
+ <c>init_per_group</c> or <c>per_testcase</c> hooks. So if you want to spawn a
+ process in the CTH, you cannot link with the CTH process, as it exits
+ after the post hook ends. Also, if you for some reason need an ETS
+ table with your CTH, you must spawn a process that handles it.</p>
</section>
<section>
- <title>External configuration data and Logging</title>
- <p>It's possible in the CTH to read configuration data values
- by calling <seealso marker="ct#get_config-1"><c>ct:get_config/1/2/3</c></seealso> (as explained in the
- <seealso marker="config_file_chapter#require_config_data">
- External configuration data</seealso>
- chapter). The config variables in question must, as always, first have been
- <c>required</c> by means of a suite-, group-, or test case info function,
- or the <seealso marker="ct#require-1"><c>ct:require/1/2</c></seealso> function. Note that the latter can also be used
- in CT hook functions.</p>
- <p>The CT hook functions may call any of the logging functions available
+ <title>External Configuration Data and Logging</title>
+ <p>Configuration data values in the CTH can be read
+ by calling
+ <seealso marker="ct#get_config-1"><c>ct:get_config/1,2,3</c></seealso>
+ (as explained in section
+ <seealso marker="config_file_chapter#require_config_data">Requiring and Reading Configuration Data</seealso>).
+ The configuration variables in question must, as always, first have been
+ required by a suite-, group-, or test case information function,
+ or by function <seealso marker="ct#require-1"><c>ct:require/1/2</c></seealso>.
+ The latter can also be used in CT hook functions.</p>
+ <p>The CT hook functions can call any logging function
in the <c>ct</c> interface to print information to the log files, or to
add comments in the suite overview page.
</p>
@@ -209,306 +213,327 @@
</section>
<section>
- <marker id="manipulating"/>
- <title>Manipulating tests</title>
- <p>It is through CTHs possible to manipulate the results of tests and
- configuration functions. The main purpose of doing this with CTHs is to
- allow common patterns to be abstracted out from test test suites and applied to
- multiple test suites without duplicating any code. All of the callback
- functions for a CTH follow a common interface, this interface is
- described below.</p>
-
- <p>Common Test will always call all available hook functions, even pre- and post
- hooks for configuration functions that are not implemented in the suite.
+ <marker id="manipulating"/>
+ <title>Manipulating Tests</title>
+ <p>Through CTHs the results of tests and configuration functions can be manipulated.
+ The main purpose to do this with CTHs is to allow common
+ patterns to be abstracted out from test suites and applied to
+ multiple test suites without duplicating any code. All the callback
+ functions for a CTH follow a common interface described hereafter.</p>
+
+ <p><c>Common Test</c> always calls all available hook functions, even pre-
+ and post hooks for configuration functions that are not implemented in the suite.
For example, <c>pre_init_per_suite(x_SUITE, ...)</c> and
- <c>post_init_per_suite(x_SUITE, ...)</c> will be called for test suite
- <c>x_SUITE</c>, even if it doesn't export <c>init_per_suite/1</c>. This feature
- makes it possible to use hooks as configuration fallbacks, or even
- completely replace all configuration functions with hook functions.</p>
+ <c>post_init_per_suite(x_SUITE, ...)</c> are called for test suite
+ <c>x_SUITE</c>, even if it does not export <c>init_per_suite/1</c>.
+ With this feature hooks can be used as configuration fallbacks, and all
+ configuration functions can be replaced with hook functions.</p>
<section>
<marker id="pre"/>
<title>Pre Hooks</title>
<p>
- It is possible in a CTH to hook in behaviour before
- <seealso marker="common_test#Module:init_per_suite-1">init_per_suite</seealso>,
- <seealso marker="common_test#Module:init_per_suite-1">init_per_group</seealso>,
- <seealso marker="common_test#Module:init_per_suite-1">init_per_testcase</seealso>,
- <seealso marker="common_test#Module:init_per_suite-1">end_per_group</seealso> and
- <seealso marker="common_test#Module:init_per_suite-1">end_per_suite</seealso>.
+ In a CTH, the behavior can be hooked in before the following functions:</p>
+
+ <list type="bulleted">
+ <item><seealso marker="common_test#Module:init_per_suite-1"><c>init_per_suite</c></seealso></item>
+ <item><seealso marker="common_test#Module:init_per_group-2"><c>init_per_group</c></seealso></item>
+ <item><seealso marker="common_test#Module:init_per_testcase-2"><c>init_per_testcase</c></seealso></item>
+ <item><seealso marker="common_test#Module:end_per_testcase-2"><c>end_per_testcase</c></seealso></item>
+ <item><seealso marker="common_test#Module:end_per_group-2"><c>end_per_group</c></seealso></item>
+ <item><seealso marker="common_test#Module:end_per_suite-1"><c>end_per_suite</c></seealso></item>
+ </list>
+
+ <p>
This is done in the CTH functions called pre_&lt;name of function&gt;.
- All of these functions take the same three arguments: <c>Name</c>,
- <c>Config</c> and <c>CTHState</c>. The return value of the CTH function
- is always a combination of an result for the suite/group/test and an
- updated <c>CTHState</c>. If you want the test suite to continue on
- executing you should return the config list which you want the test to
- use as the result. If you for some reason want to skip/fail the test,
- return a tuple with <c>skip</c> or <c>fail</c> and a reason as the
- result. Example:
- </p>
- <code>pre_init_per_suite(SuiteName, Config, CTHState) -&gt;
- case db:connect() of
- {error,_Reason} -&gt;
- {{fail, "Could not connect to DB"}, CTHState};
- {ok, Handle} -&gt;
- {[{db_handle, Handle} | Config], CTHState#state{ handle = Handle }}
- end.</code>
- <note><p>If using multiple CTHs, the first part of the return tuple will be
- used as input for the next CTH. So in the case above the next CTH might
+ These functions take the same three arguments, <c>Name</c>,
+ <c>Config</c>, and <c>CTHState</c>. The return value of the CTH function
+ is always a combination of a result for the suite/group/test and an
+ updated <c>CTHState</c>.</p>
+
+ <p>To let the test suite continue on executing, return the configuration
+ list that you want the test to use as the result. To skip or
+ fail the test, return a tuple with <c>skip</c> or <c>fail</c>, and a reason
+ as the result.</p>
+
+ <p><em>Example:</em></p>
+ <code>
+ pre_init_per_suite(SuiteName, Config, CTHState) -&gt;
+ case db:connect() of
+ {error,_Reason} -&gt;
+ {{fail, "Could not connect to DB"}, CTHState};
+ {ok, Handle} -&gt;
+ {[{db_handle, Handle} | Config], CTHState#state{ handle = Handle }}
+ end.</code>
+
+ <note><p>If you use multiple CTHs, the first part of the return tuple is
+ used as input for the next CTH. So in the previous example the next CTH can
get <c>{fail,Reason}</c> as the second parameter. If you have many CTHs
- which interact, it might be a good idea to not let each CTH return
- <c>fail</c> or <c>skip</c>. Instead return that an action should be taken
- through the <c>Config</c> list and implement a CTH which at the end takes
- the correct action.</p></note>
+ interacting, do not let each CTH return <c>fail</c> or <c>skip</c>.
+ Instead, return that an action is to be taken through the <c>Config</c>
+ list and implement a CTH that, at the end, takes the correct action.</p></note>
</section>
<section>
<marker id="post"/>
<title>Post Hooks</title>
- <p>It is also possible in a CTH to hook in behaviour after
- <seealso marker="common_test#Module:init_per_suite-1">init_per_suite</seealso>,
- <seealso marker="common_test#Module:init_per_suite-1">init_per_group</seealso>,
- <seealso marker="common_test#Module:init_per_suite-1">end_per_testcase</seealso>,
- <seealso marker="common_test#Module:init_per_suite-1">end_per_group</seealso> and
- <seealso marker="common_test#Module:init_per_suite-1">end_per_suite</seealso>.
- This is done in the CTH functions called post_&lt;name of function&gt;.
- All of these function take the same four arguments: <c>Name</c>,
- <c>Config</c>, <c>Return</c> and <c>CTHState</c>. <c>Config</c> in this
+ <p>In a CTH, behavior can be hooked in after the following functions:</p>
+ <list type="bulleted">
+ <item><seealso marker="common_test#Module:init_per_suite-1"><c>init_per_suite</c></seealso></item>
+ <item><seealso marker="common_test#Module:init_per_group-2"><c>init_per_group</c></seealso></item>
+ <item><seealso marker="common_test#Module:init_per_testcase-2"><c>init_per_testcase</c></seealso></item>
+ <item><seealso marker="common_test#Module:end_per_testcase-2"><c>end_per_testcase</c></seealso></item>
+ <item><seealso marker="common_test#Module:end_per_group-2"><c>end_per_group</c></seealso></item>
+ <item><seealso marker="common_test#Module:end_per_suite-1"><c>end_per_suite</c></seealso></item>
+ </list>
+
+ <p>
+ This is done in the CTH functions called <c>post_&lt;name of function&gt;</c>.
+ These functions take the same four arguments, <c>Name</c>,
+ <c>Config</c>, <c>Return</c>, and <c>CTHState</c>. <c>Config</c> in this
case is the same <c>Config</c> as the testcase is called with.
<c>Return</c> is the value returned by the testcase. If the testcase
- failed by crashing, <c>Return</c> will be
+ fails by crashing, <c>Return</c> is
<c>{'EXIT',{{Error,Reason},Stacktrace}}</c>.</p>
- <p>The return value of the CTH function is always a combination of an
+ <p>The return value of the CTH function is always a combination of a
result for the suite/group/test and an updated <c>CTHState</c>. If
- you want the callback to not affect the outcome of the test you should
+ you do not want the callback to affect the outcome of the test,
return the <c>Return</c> data as it is given to the CTH. You can also
- modify the result of the test. By returning the <c>Config</c> list
- with the <c>tc_status</c> element removed you can recover from a test
+ modify the test result. By returning the <c>Config</c> list
+ with element <c>tc_status</c> removed, you can recover from a test
failure. As in all the pre hooks, it is also possible to fail/skip
- the test case in the post hook. Example: </p>
-
- <code>post_end_per_testcase(_TC, Config, {'EXIT',{_,_}}, CTHState) -&gt;
- case db:check_consistency() of
- true ->
- %% DB is good, pass the test.
- {proplists:delete(tc_status, Config), CTHState};
- false ->
- %% DB is not good, mark as skipped instead of failing
- {{skip, "DB is inconsisten!"}, CTHState}
- end;
-post_end_per_testcase(_TC, Config, Return, CTHState) -&gt;
- %% Do nothing if tc does not crash.
- {Return, CTHState}.</code>
-
- <note><p>Recovering from a testcase failure using CTHs should only be done as
- a last resort. If used wrongly it could become very difficult to
- determine which tests pass or fail in a test run</p></note>
+ the test case in the post hook.</p>
+
+ <p><em>Example:</em></p>
+ <code>
+ post_end_per_testcase(_TC, Config, {'EXIT',{_,_}}, CTHState) -&gt;
+ case db:check_consistency() of
+ true ->
+ %% DB is good, pass the test.
+ {proplists:delete(tc_status, Config), CTHState};
+ false ->
+ %% DB is not good, mark as skipped instead of failing
+ {{skip, "DB is inconsisten!"}, CTHState}
+ end;
+ post_end_per_testcase(_TC, Config, Return, CTHState) -&gt;
+ %% Do nothing if tc does not crash.
+ {Return, CTHState}.</code>
+
+ <note><p>Do recover from a testcase failure using CTHs only a last resort.
+ If used wrongly, it can be very difficult to determine which tests that
+ pass or fail in a test run.</p></note>
</section>
<section>
- <marker id="skip_n_fail"/>
- <title>Skip and Fail hooks</title>
+ <title>Skip and Fail Hooks</title>
<p>
After any post hook has been executed for all installed CTHs,
<seealso marker="ct_hooks#Module:on_tc_fail-3">on_tc_fail</seealso>
- or <seealso marker="ct_hooks#Module:on_tc_fail-3">on_tc_skip</seealso>
- might be called if the testcase failed or was skipped
- respectively. You cannot affect the outcome of the tests any further at
- this point.
+ or <seealso marker="ct_hooks#Module:on_tc_skip-3">on_tc_skip</seealso>
+ is called if the testcase failed or was skipped, respectively.
+ You cannot affect the outcome of the tests any further at this point.
</p>
</section>
</section>
<section>
- <marker id="synchronizing"/>
- <title>Synchronizing external user applications with Common Test</title>
+ <marker id="synchronizing"/>
+ <title>Synchronizing External User Applications with Common Test</title>
<p>CTHs can be used to synchronize test runs with external user applications.
- The init function may e.g. start and/or communicate with an application that
- has the purpose of preparing the SUT for an upcoming test run, or maybe
+ The init function can, for example, start and/or communicate with an application that
+ has the purpose of preparing the SUT for an upcoming test run, or
initialize a database for saving test data to during the test run. The
- terminate function may similarly order such an application to reset the SUT
+ terminate function can similarly order such an application to reset the SUT
after the test run, and/or tell the application to finish active sessions
and terminate.
Any system error- or progress reports generated during the init- or
- termination stage will be saved in the
- <seealso marker="run_test_chapter#pre_post_test_io_log">Pre-
- and post test I/O log</seealso>. (This is also true for any printouts made
+ termination stage are saved in the
+ <seealso marker="run_test_chapter#pre_post_test_io_log">Pre- and Post Test I/O Log</seealso>.
+ (This is also true for any printouts made
with <c>ct:log/2</c> and <c>ct:pal/2</c>).</p>
- <p>In order to ensure that Common Test doesn't start executing tests, or
+
+ <p>To ensure that <c>Common Test</c> does not start executing tests, or
closes its log files and shuts down, before the external application
- is ready for it, Common Test may be synchronized with the application.
- During startup and shutdown, Common Test can be suspended, simply by
+ is ready for it, <c>Common Test</c> can be synchronized with the application.
+ During startup and shutdown, <c>Common Test</c> can be suspended, simply by
having a CTH evaluate a <c>receive</c> expression in the init- or terminate
function. The macros <c>?CT_HOOK_INIT_PROCESS</c> (the process executing the hook
init function) and <c>?CT_HOOK_TERMINATE_PROCESS</c> (the process executing
- the hook terminate function), each specifies the name of the correct Common Test
- process to send a message to in order to return from the <c>receive</c>.
+ the hook terminate function) each specifies the name of the correct <c>Common Test</c>
+ process to send a message to. This is done to return from the <c>receive</c>.
These macros are defined in <c>ct.hrl</c>.
</p>
</section>
<section>
- <marker id="example"/>
+ <marker id="example"/>
<title>Example CTH</title>
- <p>The CTH below will log information about a test run into a format
- parseable by <seealso marker="kernel:file#consult-1">file:consult/1</seealso>.
+ <p>The following CTH logs information about a test run into a format
+ parseable by <seealso marker="kernel:file#consult-1">file:consult/1</seealso>
+ (in <c>Kernel</c>):
</p>
- <code>%%% @doc Common Test Example Common Test Hook module.
--module(example_cth).
-
-%% Callbacks
--export([id/1]).
--export([init/2]).
-
--export([pre_init_per_suite/3]).
--export([post_init_per_suite/4]).
--export([pre_end_per_suite/3]).
--export([post_end_per_suite/4]).
-
--export([pre_init_per_group/3]).
--export([post_init_per_group/4]).
--export([pre_end_per_group/3]).
--export([post_end_per_group/4]).
-
--export([pre_init_per_testcase/3]).
--export([post_end_per_testcase/4]).
-
--export([on_tc_fail/3]).
--export([on_tc_skip/3]).
-
--export([terminate/1]).
-
--record(state, { file_handle, total, suite_total, ts, tcs, data }).
-
-%% @doc Return a unique id for this CTH.
-id(Opts) ->
- proplists:get_value(filename, Opts, "/tmp/file.log").
-
-%% @doc Always called before any other callback function. Use this to initiate
-%% any common state.
-init(Id, Opts) ->
- {ok,D} = file:open(Id,[write]),
- {ok, #state{ file_handle = D, total = 0, data = [] }}.
-
-%% @doc Called before init_per_suite is called.
-pre_init_per_suite(Suite,Config,State) ->
- {Config, State#state{ suite_total = 0, tcs = [] }}.
-
-%% @doc Called after init_per_suite.
-post_init_per_suite(Suite,Config,Return,State) ->
- {Return, State}.
-
-%% @doc Called before end_per_suite.
-pre_end_per_suite(Suite,Config,State) ->
- {Config, State}.
-
-%% @doc Called after end_per_suite.
-post_end_per_suite(Suite,Config,Return,State) ->
- Data = {suites, Suite, State#state.suite_total, lists:reverse(State#state.tcs)},
- {Return, State#state{ data = [Data | State#state.data] ,
- total = State#state.total + State#state.suite_total } }.
-
-%% @doc Called before each init_per_group.
-pre_init_per_group(Group,Config,State) ->
- {Config, State}.
-
-%% @doc Called after each init_per_group.
-post_init_per_group(Group,Config,Return,State) ->
- {Return, State}.
-
-%% @doc Called after each end_per_group.
-pre_end_per_group(Group,Config,State) ->
- {Config, State}.
-
-%% @doc Called after each end_per_group.
-post_end_per_group(Group,Config,Return,State) ->
- {Return, State}.
-
-%% @doc Called before each test case.
-pre_init_per_testcase(TC,Config,State) ->
- {Config, State#state{ ts = now(), total = State#state.suite_total + 1 } }.
-
-%% @doc Called after each test case.
-post_end_per_testcase(TC,Config,Return,State) ->
- TCInfo = {testcase, TC, Return, timer:now_diff(now(), State#state.ts)},
- {Return, State#state{ ts = undefined, tcs = [TCInfo | State#state.tcs] } }.
-
-%% @doc Called after post_init_per_suite, post_end_per_suite, post_init_per_group,
-%% post_end_per_group and post_end_per_testcase if the suite, group or test case failed.
-on_tc_fail(TC, Reason, State) ->
- State.
-
-%% @doc Called when a test case is skipped by either user action
-%% or due to an init function failing.
-on_tc_skip(TC, Reason, State) ->
- State.
-
-%% @doc Called when the scope of the CTH is done
-terminate(State) ->
- io:format(State#state.file_handle, "~p.~n",
- [{test_run, State#state.total, State#state.data}]),
- file:close(State#state.file_handle),
- ok.</code>
+ <code>
+ %%% @doc Common Test Example Common Test Hook module.
+ -module(example_cth).
+
+ %% Callbacks
+ -export([id/1]).
+ -export([init/2]).
+
+ -export([pre_init_per_suite/3]).
+ -export([post_init_per_suite/4]).
+ -export([pre_end_per_suite/3]).
+ -export([post_end_per_suite/4]).
+
+ -export([pre_init_per_group/3]).
+ -export([post_init_per_group/4]).
+ -export([pre_end_per_group/3]).
+ -export([post_end_per_group/4]).
+
+ -export([pre_init_per_testcase/3]).
+ -export([post_init_per_testcase/4]).
+ -export([pre_end_per_testcase/3]).
+ -export([post_end_per_testcase/4]).
+
+ -export([on_tc_fail/3]).
+ -export([on_tc_skip/3]).
+
+ -export([terminate/1]).
+
+ -record(state, { file_handle, total, suite_total, ts, tcs, data }).
+
+ %% @doc Return a unique id for this CTH.
+ id(Opts) ->
+ proplists:get_value(filename, Opts, "/tmp/file.log").
+
+ %% @doc Always called before any other callback function. Use this to initiate
+ %% any common state.
+ init(Id, Opts) ->
+ {ok,D} = file:open(Id,[write]),
+ {ok, #state{ file_handle = D, total = 0, data = [] }}.
+
+ %% @doc Called before init_per_suite is called.
+ pre_init_per_suite(Suite,Config,State) ->
+ {Config, State#state{ suite_total = 0, tcs = [] }}.
+
+ %% @doc Called after init_per_suite.
+ post_init_per_suite(Suite,Config,Return,State) ->
+ {Return, State}.
+
+ %% @doc Called before end_per_suite.
+ pre_end_per_suite(Suite,Config,State) ->
+ {Config, State}.
+
+ %% @doc Called after end_per_suite.
+ post_end_per_suite(Suite,Config,Return,State) ->
+ Data = {suites, Suite, State#state.suite_total, lists:reverse(State#state.tcs)},
+ {Return, State#state{ data = [Data | State#state.data] ,
+ total = State#state.total + State#state.suite_total } }.
+
+ %% @doc Called before each init_per_group.
+ pre_init_per_group(Group,Config,State) ->
+ {Config, State}.
+
+ %% @doc Called after each init_per_group.
+ post_init_per_group(Group,Config,Return,State) ->
+ {Return, State}.
+
+ %% @doc Called before each end_per_group.
+ pre_end_per_group(Group,Config,State) ->
+ {Config, State}.
+
+ %% @doc Called after each end_per_group.
+ post_end_per_group(Group,Config,Return,State) ->
+ {Return, State}.
+
+ %% @doc Called before each init_per_testcase.
+ pre_init_per_testcase(TC,Config,State) ->
+ {Config, State#state{ ts = now(), total = State#state.suite_total + 1 } }.
+
+ %% Called after each init_per_testcase (immediately before the test case).
+ post_init_per_testcase(TC,Config,Return,State) ->
+ {Return, State}
+
+%% @doc Called before each end_per_testcase (immediately after the test case).
+ pre_end_per_testcase(TC,Config,State) ->
+ {Config, State}.
+
+ %% @doc Called after each end_per_testcase.
+ post_end_per_testcase(TC,Config,Return,State) ->
+ TCInfo = {testcase, TC, Return, timer:now_diff(now(), State#state.ts)},
+ {Return, State#state{ ts = undefined, tcs = [TCInfo | State#state.tcs] } }.
+
+ %% @doc Called after post_init_per_suite, post_end_per_suite, post_init_per_group,
+ %% post_end_per_group and post_end_per_testcase if the suite, group or test case failed.
+ on_tc_fail(TC, Reason, State) ->
+ State.
+
+ %% @doc Called when a test case is skipped by either user action
+ %% or due to an init function failing.
+ on_tc_skip(TC, Reason, State) ->
+ State.
+
+ %% @doc Called when the scope of the CTH is done
+ terminate(State) ->
+ io:format(State#state.file_handle, "~p.~n",
+ [{test_run, State#state.total, State#state.data}]),
+ file:close(State#state.file_handle),
+ ok.</code>
</section>
<section>
- <marker id="builtin_cths"/>
- <title>Built-in CTHs</title>
- <p>Common Test is delivered with a couple of general purpose CTHs that
- can be enabled by the user to provide some generic testing functionality.
- Some of these are enabled by default when starting running common_test,
- they can be disabled by setting <c>enable_builtin_hooks</c> to
- <c>false</c> on the command line or in the test specification. In the
- table below there is a list of all current CTHs which are delivered with
- Common Test.</p>
-
- <table>
- <row>
- <cell align="left"><em>CTH Name</em></cell>
- <cell align="left"><em>Is Built-in</em></cell>
- <cell align="left"><em>Description</em></cell>
- </row>
- <row>
- <cell align="left">cth_log_redirect</cell>
- <cell align="left">yes</cell>
- <cell align="left">Captures all error_logger and SASL logging events and prints them
- to the current test case log. If an event can not be associated with a
- testcase it will be printed in the common test framework log. This will
- happen for testcases which are run in parallel and events which occur
- inbetween testcases. You can configure the level of
- <seealso marker="sasl:sasl_app">SASL</seealso> events report
- using the normal SASL mechanisms. </cell>
- </row>
- <row>
- <cell align="left">cth_surefire</cell>
- <cell align="left">no</cell>
- <cell align="left"><p>Captures all test results and outputs them as surefire
- XML into a file. The file which is created is by default
- called junit_report.xml. The file name can be changed by
- setting the <c>path</c> option for this hook, e.g.</p>
-
- <code>-ct_hooks cth_surefire [{path,"/tmp/report.xml"}]</code>
-
- <p>If the <c>url_base</c> option is set, an additional
- attribute named <c>url</c> will be added to each
- <c>testsuite</c> and <c>testcase</c> XML element. The value will
- be constructed from the <c>url_base</c> and a relative path
- to the test suite or test case log respectively, e.g.</p>
-
- <code>-ct_hooks cth_surefire [{url_base, "http://myserver.com/"}]</code>
- <p>will give a url attribute value similar to</p>
-
- <code>"http://myserver.com/[email protected]_11.19.39/
-x86_64-unknown-linux-gnu.my_test.logs/run.2012-12-12_11.19.39/suite.log.html"</code>
-
- <p>Surefire XML can for instance be used by Jenkins to display test
- results.</p></cell>
- </row>
- </table>
+ <marker id="builtin_cths"/>
+ <title>Built-In CTHs</title>
+ <p><c>Common Test</c> is delivered with some general-purpose CTHs that
+ can be enabled by the user to provide generic testing functionality.
+ Some of these CTHs are enabled by default when <c>common_test</c> is started to run.
+ They can be disabled by setting <c>enable_builtin_hooks</c> to
+ <c>false</c> on the command line or in the test specification. The following
+ two CTHs are delivered with <c>Common Test</c>:</p>
+
+ <taglist>
+ <tag><c>cth_log_redirect</c></tag>
+ <item>
+ <p>Built-in</p>
+ <p>Captures all <c>error_logger</c> and <c>SASL</c> logging
+ events and prints them to the current test case log. If an event cannot be
+ associated with a test case, it is printed in the <c>Common Test</c> framework log.
+ This happens for test cases running in parallel and events occuring
+ in-between test cases. You can configure the level of
+ <seealso marker="sasl:sasl_app"><c>SASL</c></seealso> events report
+ using the normal <c>SASL</c> mechanisms.</p>
+ </item>
+ <tag><c>cth_surefire</c></tag>
+ <item>
+ <p>Not built-in</p>
+ <p>Captures all test results and outputs them as surefire
+ XML into a file. The created file is by default
+ called <c>junit_report.xml</c>. The file name can be changed by
+ setting option <c>path</c> for this hook, for example:</p>
+
+ <p><c>-ct_hooks cth_surefire [{path,"/tmp/report.xml"}]</c></p>
+
+ <p>If option <c>url_base</c> is set, an extra
+ attribute named <c>url</c> is added to each
+ <c>testsuite</c> and <c>testcase</c> XML element. The value
+ is constructed from <c>url_base</c> and a relative path
+ to the test suite or test case log, respectively, for example:</p>
+
+ <p><c>-ct_hooks cth_surefire [{url_base, "http://myserver.com/"}]</c></p>
+
+ <p>gives an URL attribute value similar to</p>
+
+ <p><c>"http://myserver.com/[email protected]_11.19.39/
+x86_64-unknown-linux-gnu.my_test.logs/run.2012-12-12_11.19.39/suite.log.html"</c></p>
+
+ <p>Surefire XML can, for example, be used by Jenkins to display test
+ results.</p>
+ </item>
+ </taglist>
</section>
diff --git a/lib/common_test/doc/src/ct_master.xml b/lib/common_test/doc/src/ct_master.xml
new file mode 100644
index 0000000000..6bde4644c6
--- /dev/null
+++ b/lib/common_test/doc/src/ct_master.xml
@@ -0,0 +1,220 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE erlref SYSTEM "erlref.dtd">
+
+<erlref>
+ <header>
+ <copyright>
+ <year>2010</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>ct_master</title>
+ <prepared></prepared>
+ <responsible></responsible>
+ <docno></docno>
+ <approved></approved>
+ <checked></checked>
+ <date></date>
+ <rev>A</rev>
+ <file>ct_master.xml</file>
+ </header>
+ <module>ct_master</module>
+ <modulesummary>Distributed test execution control for Common Test.</modulesummary>
+
+<description>
+
+ <p>Distributed test execution control for <c>Common Test</c>.</p>
+
+ <p>This module exports functions for running <c>Common Test</c> nodes on
+ multiple hosts in parallel.</p>
+
+</description>
+
+ <funcs>
+ <func>
+ <name>abort() -&gt; ok</name>
+ <fsummary>Stops all running tests.</fsummary>
+ <desc><marker id="abort-0"/>
+ <p>Stops all running tests.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>abort(Nodes) -&gt; ok</name>
+ <fsummary>Stops tests on specified nodes.</fsummary>
+ <type>
+ <v>Nodes = atom() | [atom()]</v>
+ </type>
+ <desc><marker id="abort-1"/>
+ <p>Stops tests on specified nodes.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>basic_html(Bool) -&gt; ok</name>
+ <fsummary>If set to true, the ct_master logs are written on a primitive
+ HTML format, not using the <c>Common Test</c> CSS style sheet.</fsummary>
+ <type>
+ <v>Bool = true | false</v>
+ </type>
+ <desc><marker id="basic_html-1"/>
+ <p>If set to <c>true</c>, the <c>ct_master logs</c> are written on a
+ primitive HTML format, not using the <c>Common Test</c> CSS style
+ sheet.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>get_event_mgr_ref() -&gt; MasterEvMgrRef</name>
+ <fsummary>Gets a reference to the <c>Common Test</c> master event
+ manager.</fsummary>
+ <type>
+ <v>MasterEvMgrRef = atom()</v>
+ </type>
+ <desc><marker id="get_event_mgr_ref-0"/>
+ <p>Gets a reference to the <c>Common Test</c> master event manager.
+ The reference can be used to, for example, add a user-specific
+ event handler while tests are running.</p>
+
+ <p><em>Example:</em></p>
+
+ <pre>
+ gen_event:add_handler(ct_master:get_event_mgr_ref(), my_ev_h, [])</pre>
+ </desc>
+ </func>
+
+ <func>
+ <name>progress() -&gt; [{Node, Status}]</name>
+ <fsummary>Returns test progress.</fsummary>
+ <type>
+ <v>Node = atom()</v>
+ <v>Status = finished_ok | ongoing | aborted | {error, Reason}</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc><marker id="progress-0"/>
+ <p>Returns test progress. If <c>Status</c> is <c>ongoing</c>, tests
+ are running on the node and are not yet finished.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>run(TestSpecs) -&gt; ok</name>
+ <fsummary>Equivalent to run(TestSpecs, false, [], []).</fsummary>
+ <type>
+ <v>TestSpecs = string() | [SeparateOrMerged]</v>
+ </type>
+ <desc><marker id="run-1"/>
+ <p>Equivalent to <seealso marker="#run-4"><c>ct_master:run(TestSpecs,
+ false, [], [])</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>run(TestSpecs, InclNodes, ExclNodes) -&gt; ok</name>
+ <fsummary>Equivalent to run(TestSpecs, false, InclNodes, ExclNodes).
+ </fsummary>
+ <type>
+ <v>TestSpecs = string() | [SeparateOrMerged]</v>
+ <v>SeparateOrMerged = string() | [string()]</v>
+ <v>InclNodes = [atom()]</v>
+ <v>ExclNodes = [atom()]</v>
+ </type>
+ <desc><marker id="run-3"/>
+ <p>Equivalent to <seealso marker="#run-4"><c>ct_master:run(TestSpecs,
+ false, InclNodes, ExclNodes)</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>run(TestSpecs, AllowUserTerms, InclNodes, ExclNodes) -&gt; ok</name>
+ <fsummary>Tests are spawned on the nodes as specified in TestSpecs.
+ </fsummary>
+ <type>
+ <v>TestSpecs = string() | [SeparateOrMerged]</v>
+ <v>SeparateOrMerged = string() | [string()]</v>
+ <v>AllowUserTerms = bool()</v>
+ <v>InclNodes = [atom()]</v>
+ <v>ExclNodes = [atom()]</v>
+ </type>
+ <desc><marker id="run-4"/>
+ <p>Tests are spawned on the nodes as specified in <c>TestSpecs</c>.
+ Each specification in <c>TestSpec</c> is handled separately.
+ However, it is also possible to specify a list of specifications to
+ be merged into one specification before the tests are executed. Any
+ test without a particular node specification is also executed on
+ the nodes in <c>InclNodes</c>. Nodes in the <c>ExclNodes</c> list
+ are excluded from the test.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>run_on_node(TestSpecs, Node) -&gt; ok</name>
+ <fsummary>Equivalent to run_on_node(TestSpecs, false, Node).</fsummary>
+ <type>
+ <v>TestSpecs = string() | [SeparateOrMerged]</v>
+ <v>SeparateOrMerged = string() | [string()]</v>
+ <v>Node = atom()</v>
+ </type>
+ <desc><marker id="run_on_node-2"/>
+ <p>Equivalent to
+ <seealso marker="#run_on_node-3"><c>ct_master:run_on_node(TestSpecs,
+ false, Node)</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>run_on_node(TestSpecs, AllowUserTerms, Node) -&gt; ok</name>
+ <fsummary>Tests are spawned on Node according to TestSpecs.</fsummary>
+ <type>
+ <v>TestSpecs = string() | [SeparateOrMerged]</v>
+ <v>SeparateOrMerged = string() | [string()]</v>
+ <v>AllowUserTerms = bool()</v>
+ <v>Node = atom()</v>
+ </type>
+ <desc><marker id="run_on_node-3"/>
+ <p>Tests are spawned on <c>Node</c> according to <c>TestSpecs</c>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>run_test(Node, Opts) -&gt; ok</name>
+ <fsummary>Tests are spawned on Node using ct:run_test/1.</fsummary>
+ <type>
+ <v>Node = atom()</v>
+ <v>Opts = [OptTuples]</v>
+ <v>OptTuples = {config, CfgFiles} | {dir, TestDirs} | {suite, Suites} | {testcase, Cases} | {spec, TestSpecs} | {allow_user_terms, Bool} | {logdir, LogDir} | {event_handler, EventHandlers} | {silent_connections, Conns} | {cover, CoverSpecFile} | {cover_stop, Bool} | {userconfig, UserCfgFiles}</v>
+ <v>CfgFiles = string() | [string()]</v>
+ <v>TestDirs = string() | [string()]</v>
+ <v>Suites = atom() | [atom()]</v>
+ <v>Cases = atom() | [atom()]</v>
+ <v>TestSpecs = string() | [string()]</v>
+ <v>LogDir = string()</v>
+ <v>EventHandlers = EH | [EH]</v>
+ <v>EH = atom() | {atom(), InitArgs} | {[atom()], InitArgs}</v>
+ <v>InitArgs = [term()]</v>
+ <v>Conns = all | [atom()]</v>
+ </type>
+ <desc><marker id="run_test-2"/>
+ <p>Tests are spawned on <c>Node</c> using
+ <seealso marker="ct:run_test-1"><c>ct:run_test/1</c></seealso></p>
+ </desc>
+ </func>
+ </funcs>
+
+</erlref>
+
+
diff --git a/lib/common_test/doc/src/ct_master_chapter.xml b/lib/common_test/doc/src/ct_master_chapter.xml
index 16492f39b8..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>
@@ -22,7 +22,7 @@
</legalnotice>
- <title>Using Common Test for Large Scale Testing</title>
+ <title>Using Common Test for Large-Scale Testing</title>
<prepared>Peter Andersson</prepared>
<docno></docno>
<date></date>
@@ -33,217 +33,220 @@
<section>
<marker id="general"></marker>
<title>General</title>
- <p>Large scale automated testing requires running multiple independent
+ <p>Large-scale automated testing requires running multiple independent
test sessions in parallel. This is accomplished by running
- a number of Common Test nodes on one or more hosts, testing
- different target systems. Configuring, starting and controlling the
+ some <c>Common Test</c> nodes on one or more hosts, testing
+ different target systems. Configuring, starting, and controlling the
test nodes independently can be a cumbersome operation. To aid
- this kind of automated large scale testing, CT offers a master test
- node component, CT Master, that handles central configuration and control
- in a system of distributed CT nodes.</p>
+ this kind of automated large-scale testing, <c>Common Test</c> offers a master
+ test node component, <c>Common Test</c> Master, which handles central configuration and control
+ in a system of distributed <c>Common Test</c> nodes.</p>
- <p>The CT Master server runs on one dedicated Erlang node and uses distributed
- Erlang to communicate with any number of CT test nodes, each hosting a regular
- CT server. Test specifications are used as input to specify what to test on which
+ <p>The <c>Common Test</c> Master server runs on one dedicated Erlang node and uses distributed
+ Erlang to communicate with any number of <c>Common Test</c> test nodes, each hosting a regular
+ <c>Common Test</c> server. Test specifications are used as input to specify what to test on which
test nodes, using what configuration.</p>
- <p>The CT Master server writes progress information to HTML log files similarly
- to the regular CT server. The logs contain test statistics and links to the
- log files written by each independent CT server.</p>
+ <p>The <c>Common Test</c> Master server writes progress information to HTML log files similarly
+ to the regular <c>Common Test</c> server. The logs contain test statistics and links to the
+ log files written by each independent <c>Common Test</c> server.</p>
- <p>The CT master API is exported by the <c>ct_master</c> module.</p>
+ <p>The <c>Common Test</c> Master API is exported by module
+ <seealso marker="ct_master"><c>ct_master</c></seealso>.</p>
</section>
<section>
- <title>Usage</title>
- <p>CT Master requires all test nodes to be on the same network and share a common
- file system. As of this date, CT Master can not start test nodes
- automatically. The nodes must have been started in advance for CT Master to be
+ <title>Use</title>
+ <p><c>Common Test</c> Master requires all test nodes to be on the same network and share a common
+ file system. <c>Common Test</c> Master cannot start test nodes
+ automatically. The nodes must be started in advance for <c>Common Test</c> Master to be
able to start test sessions on them.</p>
- <p>Tests are started by calling:</p>
-
- <p><c>ct_master:run(TestSpecs)</c> or
- <c>ct_master:run(TestSpecs, InclNodes, ExclNodes)</c></p>
+ <p>Tests are started by calling
+ <seealso marker="ct_master#run-1"><c>ct_master:run(TestSpecs)</c></seealso> or
+ <seealso marker="ct_master#run-3"><c>ct_master:run(TestSpecs, InclNodes, ExclNodes)</c></seealso></p>
<p><c>TestSpecs</c> is either the name of a test specification file (string) or a list
- of test specifications. In case of a list, the specifications will be handled (and
+ of test specifications. If it is a list, the specifications are handled (and
the corresponding tests executed) in sequence. An element in a <c>TestSpecs</c> list
- can also be list of test specifications. The specifications in such a list will be
- merged into one combined specification prior to test execution. For example:</p>
-
- <p><c>ct_master:run(["ts1","ts2",["ts3","ts4"]])</c></p>
+ can also be list of test specifications. The specifications in such a list are
+ merged into one combined specification before test execution.</p>
- <p>means first the tests specified by "ts1" will run, then the tests specified by "ts2"
+ <p><em>Example:</em></p>
+ <pre>
+ ct_master:run(["ts1","ts2",["ts3","ts4"]])</pre>
+
+ <p>Here, the tests specified by "ts1" run first, then the tests specified by "ts2",
and finally the tests specified by both "ts3" and "ts4".</p>
- <p>The <c>InclNodes</c> argument to <c>run/3</c> is a list of node names. The <c>run/3</c>
- function runs the tests in <c>TestSpecs</c> just like <c>run/1</c> but will also
- take any test in <c>TestSpecs</c> that's not explicitly tagged with a particular
- node name and execute it on the nodes listed in <c>InclNodes</c>. By using <c>run/3</c>
- this way it is possible to use any test specification, with or without node information,
- in a large scale test environment! <c>ExclNodes</c> is a list of nodes that should be
- excluded from the test. I.e. tests that have been specified in the test specification
- to run on a particular node will not be performed if that node is at runtime
- listed in <c>ExclNodes</c>.</p>
-
- <p>If CT Master fails initially to connect to any of the test nodes specified in a
- test specification or in the <c>InclNodes</c> list, the operator will be prompted with
- the option to either start over again (after manually checking the status of the
- node(s) in question), to run without the missing nodes, or to abort the operation.</p>
+ <p>The <c>InclNodes</c> argument to <c>run/3</c> is a list of node names. Function
+ <c>run/3</c> runs the tests in <c>TestSpecs</c> just like <c>run/1</c>, but also
+ takes any test in <c>TestSpecs</c>, which is not explicitly tagged with a particular
+ node name, and execute it on the nodes listed in <c>InclNodes</c>. By using <c>run/3</c>
+ this way, any test specification can be used, with or without node information,
+ in a large-scale test environment.</p>
+
+ <p><c>ExclNodes</c> is a list of nodes to be
+ excluded from the test. That is, tests that are specified in the test specification
+ to run on a particular node are not performed if that node is
+ listed in <c>ExclNodes</c> at runtime.</p>
- <p>When tests start, CT Master prints information to console about the nodes that are
- involved. CT Master also reports when tests finish, successfully or unsuccessfully. If
- connection is lost to a node, the test on that node is considered finished. CT Master
- will not attempt to reestablish contact with the failing node. At any time to get the
- current status of the test nodes, call the function:</p>
+ <p>If <c>Common Test</c> Master fails initially to connect to any of the test nodes specified in a
+ test specification or in the <c>InclNodes</c> list, the operator is prompted with
+ the option to either start over again (after manually checking the status of the
+ nodes in question), to run without the missing nodes, or to abort the operation.</p>
- <p><c>ct_master:progress()</c></p>
+ <p>When tests start, <c>Common Test</c> Master displays information to console about the involved nodes.
+ <c>Common Test</c> Master also reports when tests finish, successfully or unsuccessfully. If
+ connection is lost to a node, the test on that node is considered finished. <c>Common Test</c> Master
+ does not attempt to re-establish contact with the failing node.</p>
- <p>To stop one or more tests, use:</p>
+ <p>At any time, to get the current status of the test nodes, call function
+ <seealso marker="ct_master#progress-0"><c>ct_master:progress()</c></seealso>.</p>
- <p><c>ct_master:abort()</c> (stop all) or <c>ct_master:abort(Nodes)</c></p>
+ <p>To stop one or more tests, use function
+ <seealso marker="ct_master#abort-0"><c>ct_master:abort()</c></seealso> (to stop all) or
+ <seealso marker="ct_master#abort-1"><c>ct_master:abort(Nodes)</c></seealso>.</p>
- <p>For detailed information about the <c>ct_master</c> API, please see the
- <seealso marker="ct_master">manual page</seealso> for this module.</p>
+ <p>For details about the <c>Common Test</c> Master API, see module
+ <seealso marker="ct_master"><c>ct_master</c></seealso>.</p>
</section>
<section>
<marker id="test_specifications"></marker>
<title>Test Specifications</title>
- <p>The test specifications used as input to CT Master are fully compatible with the
- specifications used as input to the regular CT server. The syntax is described in the
- <seealso marker="run_test_chapter#test_specifications">Running Test Suites</seealso>
- chapter.</p>
+ <p>The test specifications used as input to <c>Common Test</c> Master are fully compatible with the
+ specifications used as input to the regular <c>Common Test</c> server. The syntax is described in section
+ <seealso marker="run_test_chapter#test_specifications">Test Specifications</seealso>
+ in section Running Tests and Analyzing Results.</p>
<p>All test specification terms can have a <c>NodeRefs</c> element. This element
specifies which node or nodes a configuration operation or a test is to be executed
- on. <c>NodeRefs</c> is defined as:</p>
+ on. <c>NodeRefs</c> is defined as follows:</p>
<p><c>NodeRefs = all_nodes | [NodeRef] | NodeRef</c></p>
-
- <p>where</p>
<p><c>NodeRef = NodeAlias | node() | master</c></p>
<p>A <c>NodeAlias</c> (<c>atom()</c>) is used in a test specification as a
- reference to a node name (so the actual node name only needs to be declared once,
- which can of course also be achieved using constants).
- The alias is declared with a <c>node</c> term:</p>
+ reference to a node name (so the node name only needs to be declared once,
+ which also can be achieved using constants).
+ The alias is declared with a <c>node</c> term as follows:</p>
<p><c>{node, NodeAlias, NodeName}</c></p>
- <p>If <c>NodeRefs</c> has the value <c>all_nodes</c>, the operation or test will
- be performed on all given test nodes. (Declaring a term without a <c>NodeRefs</c>
- element actually has the same effect). If <c>NodeRefs</c> has the value
- <c>master</c>, the operation is only performed on the CT Master node (namely set
+ <p>If <c>NodeRefs</c> has the value <c>all_nodes</c>, the operation or test
+ is performed on all specified test nodes. (Declaring a term without a <c>NodeRefs</c>
+ element has the same effect). If <c>NodeRefs</c> has the value
+ <c>master</c>, the operation is only performed on the <c>Common Test</c> Master node (namely set
the log directory or install an event handler).</p>
- <p>Consider the example in the
- <seealso marker="run_test_chapter#test_specifications">Running Test Suites</seealso>
- chapter, now extended with node information and intended to be executed by the
- CT Master:</p>
+ <p>Consider the example in section
+ <seealso marker="run_test_chapter#test_specifications">Test Specifications</seealso>
+ in section Running Tests and Analysing Results,
+ now extended with node information and intended to be executed by
+ <c>Common Test</c> Master:</p>
<pre>
- {define, 'Top', "/home/test"}.
- {define, 'T1', "'Top'/t1"}.
- {define, 'T2', "'Top'/t2"}.
- {define, 'T3', "'Top'/t3"}.
- {define, 'CfgFile', "config.cfg"}.
- {define, 'Node', ct_node}.
-
- {node, node1, 'Node@host_x'}.
- {node, node2, 'Node@host_y'}.
-
- {logdir, master, "'Top'/master_logs"}.
- {logdir, "'Top'/logs"}.
-
- {config, node1, "'T1'/'CfgFile'"}.
- {config, node2, "'T2'/'CfgFile'"}.
- {config, "'T3'/'CfgFile'"}.
-
- {suites, node1, 'T1', all}.
- {skip_suites, node1, 'T1', [t1B_SUITE,t1D_SUITE], "Not implemented"}.
- {skip_cases, node1, 'T1', t1A_SUITE, [test3,test4], "Irrelevant"}.
- {skip_cases, node1, 'T1', t1C_SUITE, [test1], "Ignore"}.
-
- {suites, node2, 'T2', [t2B_SUITE,t2C_SUITE]}.
- {cases, node2, 'T2', t2A_SUITE, [test4,test1,test7]}.
-
- {skip_suites, 'T3', all, "Not implemented"}.</pre>
+ {define, 'Top', "/home/test"}.
+ {define, 'T1', "'Top'/t1"}.
+ {define, 'T2', "'Top'/t2"}.
+ {define, 'T3', "'Top'/t3"}.
+ {define, 'CfgFile', "config.cfg"}.
+ {define, 'Node', ct_node}.
+
+ {node, node1, 'Node@host_x'}.
+ {node, node2, 'Node@host_y'}.
+
+ {logdir, master, "'Top'/master_logs"}.
+ {logdir, "'Top'/logs"}.
+
+ {config, node1, "'T1'/'CfgFile'"}.
+ {config, node2, "'T2'/'CfgFile'"}.
+ {config, "'T3'/'CfgFile'"}.
+
+ {suites, node1, 'T1', all}.
+ {skip_suites, node1, 'T1', [t1B_SUITE,t1D_SUITE], "Not implemented"}.
+ {skip_cases, node1, 'T1', t1A_SUITE, [test3,test4], "Irrelevant"}.
+ {skip_cases, node1, 'T1', t1C_SUITE, [test1], "Ignore"}.
+
+ {suites, node2, 'T2', [t2B_SUITE,t2C_SUITE]}.
+ {cases, node2, 'T2', t2A_SUITE, [test4,test1,test7]}.
+
+ {skip_suites, 'T3', all, "Not implemented"}.</pre>
<p>This example specifies the same tests as the original example. But
- now if started with a call to <c>ct_master:run(TestSpecName)</c>, the
- t1 test will be executed on node <c>ct_node@host_x</c> (node1), the
- t2 test on <c>ct_node@host_y</c> (node2) and the t3 test on both
- node1 and node2. The t1 config file will only be read on
- node1 and the t2 config file only on node2, while the t3 config file
- will be read on both node1 and node2. Both test nodes will write log
- files to the same directory. (The CT Master node will however use a
- different log directory than the test nodes).</p>
+ now if started with a call to <c>ct_master:run(TestSpecName)</c>, test
+ <c>t1</c> is executed on node <c>ct_node@host_x</c> (<c>node1</c>), test
+ <c>t2</c> on <c>ct_node@host_y</c> (<c>node2</c>) and test <c>t3</c>
+ on both <c>node1</c> and <c>node2</c>. Configuration file <c>t1</c> is only read on
+ <c>node1</c> and configuration file <c>t2</c> only on <c>node2</c>, while the
+ configuration file <c>t3</c> is read on both <c>node1</c> and <c>node2</c>.
+ Both test nodes write log files to the same directory. (However, the <c>Common Test</c> Master
+ node uses a different log directory than the test nodes.)</p>
<p>If the test session is instead started with a call to
<c>ct_master:run(TestSpecName, [ct_node@host_z], [ct_node@host_x])</c>,
- the result is that the t1 test does not run on
- <c>ct_node@host_x</c> (or any other node) while the t3 test runs on
+ the result is that test <c>t1</c> does not run on
+ <c>ct_node@host_x</c> (or any other node) while test <c>t3</c> runs on both
<c>ct_node@host_y</c> and <c>ct_node@host_z</c>.</p>
<p>A nice feature is that a test specification that includes node
- information can still be used as input to the regular Common Test server
- (as described in the
- <seealso marker="run_test_chapter#test_specifications">Running Test Suites</seealso>
- chapter). The result is that any test specified to run on a node with the same
- name as the Common Test node in question (typically <c>ct@somehost</c> if started
- with the <c>ct_run</c> program), will be performed. Tests without explicit
- node association will always be performed too of course!</p>
+ information can still be used as input to the regular <c>Common Test</c> server
+ (as described in section
+ <seealso marker="run_test_chapter#test_specifications">Test Specifications</seealso>).
+ The result is that any test specified to run on a node with the same
+ name as the <c>Common Test</c> node in question (typically <c>ct@somehost</c> if started
+ with the <c>ct_run</c> program), is performed. Tests without explicit
+ node association are always performed too, of course.</p>
</section>
<section>
- <title>Automatic startup of test target nodes</title>
+ <title>Automatic Startup of Test Target Nodes</title>
<marker id="ct_slave"></marker>
- <p>It is possible to automatically start, and perform initial actions, on
- test target nodes by using the test specification term <c>init</c>.</p>
- <p>Currently, two sub-terms are supported, <c>node_start</c> and <c>eval</c>.</p>
- <p>Example:</p>
+ <p>Initial actions can be started and performed automatically on
+ test target nodes using test specification term <c>init</c>.</p>
+ <p>Two subterms are supported, <c>node_start</c> and <c>eval</c>.</p>
+ <p><em>Example:</em></p>
<pre>
- {node, node1, node1@host1}.
- {node, node2, node1@host2}.
- {node, node3, node2@host2}.
- {node, node4, node1@host3}.
- {init, node1, [{node_start, [{callback_module, my_slave_callback}]}]}.
- {init, [node2, node3], {node_start, [{username, "ct_user"}, {password, "ct_password"}]}}.
- {init, node4, {eval, {module, function, []}}}.</pre>
+ {node, node1, node1@host1}.
+ {node, node2, node1@host2}.
+ {node, node3, node2@host2}.
+ {node, node4, node1@host3}.
+ {init, node1, [{node_start, [{callback_module, my_slave_callback}]}]}.
+ {init, [node2, node3], {node_start, [{username, "ct_user"}, {password, "ct_password"}]}}.
+ {init, node4, {eval, {module, function, []}}}.</pre>
<p>This test specification declares that <c>node1@host1</c> is to be started using
the user callback function <c>callback_module:my_slave_callback/0</c>, and nodes
- <c>node1@host2</c> and <c>node2@host2</c> will be started with the default callback
- module <c>ct_slave</c>. The given user name and password is used to log into remote
- host <c>host2</c>. Also, the function <c>module:function/0</c> will be evaluated on
- <c>node1@host3</c>, and the result of this call will be printed to the log.</p>
+ <c>node1@host2</c> and <c>node2@host2</c> are to be started with the default callback
+ module <c>ct_slave</c>. The specified username and password are used to log on to remote
+ host <c>host2</c>. Also, function <c>module:function/0</c> is evaluated on
+ <c>node1@host3</c>, and the result of this call is printed to the log.</p>
- <p>The default <seealso marker="ct_slave">ct_slave</seealso> callback module,
- which is part of the Common Test application, has the following features:
+ <p>The default callback module <seealso marker="ct_slave">ct_slave</seealso>,
+ has the following features:
</p>
- <list>
+ <list type="bulleted">
<item>Starting Erlang target nodes on local or remote hosts
- (ssh is used for communication).
+ (application <c>SSH</c> is used for communication).
</item>
- <item>Ability to start an Erlang emulator with additional flags
+ <item>Ability to start an Erlang emulator with more flags
(any flags supported by <c>erl</c> are supported).
</item>
- <item>Supervision of a node being started by means of internal callback
- functions. Used to prevent hanging nodes. (Configurable).
+ <item>Supervision of a node being started using internal callback
+ functions. Used to prevent hanging nodes. (Configurable.)
</item>
- <item>Monitoring of the master node by the slaves. A slave node may be
- stopped in case the master node terminates. (Configurable).
+ <item>Monitoring of the master node by the slaves. A slave node can be
+ stopped if the master node terminates. (Configurable.)
</item>
- <item>Execution of user functions after a slave node is started.
- Functions can be given as a list of {Module, Function, Arguments} tuples.
+ <item>Execution of user functions after a slave node is started. Functions can
+ be specified as a list of <c>{Module, Function, Arguments}</c> tuples.
</item>
</list>
- <p>Note that it is possible to specify an <c>eval</c> term for the node as well
- as <c>startup_functions</c> in the <c>node_start</c> options list. In this
- case first the node will be started, then the <c>startup_functions</c> are
+ <note><p>An <c>eval</c> term for the node and
+ <c>startup_functions</c> in the <c>node_start</c> options list can be specified.
+ In this case, the node is started first, then the <c>startup_functions</c> are
executed, and finally functions specified with <c>eval</c> are called.
- </p>
+ </p></note>
</section>
</chapter>
diff --git a/lib/common_test/doc/src/ct_netconfc.xml b/lib/common_test/doc/src/ct_netconfc.xml
new file mode 100644
index 0000000000..e6930b30d5
--- /dev/null
+++ b/lib/common_test/doc/src/ct_netconfc.xml
@@ -0,0 +1,1042 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE erlref SYSTEM "erlref.dtd">
+
+<erlref>
+ <header>
+ <copyright>
+ <year>2010</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>ct_netconfc</title>
+ <prepared></prepared>
+ <responsible></responsible>
+ <docno></docno>
+ <approved></approved>
+ <checked></checked>
+ <date></date>
+ <rev>A</rev>
+ <file>ct_netconfc.xml</file>
+ </header>
+ <module>ct_netconfc</module>
+ <modulesummary>NETCONF client module.</modulesummary>
+
+<description>
+
+ <p>NETCONF client module.</p>
+
+ <p>The NETCONF client is compliant with RFC 4741 NETCONF Configuration
+ Protocol and RFC 4742 Using the NETCONF Configuration Protocol over
+ Secure SHell (SSH)..</p>
+
+ <p>For each server to test against, the following entry can be added to a
+ configuration file:</p>
+
+ <pre>
+ {server_id(),options()}.</pre>
+
+ <p>The <c>server_id()</c> or an associated <c>target_name()</c> (see
+ module <seealso marker="ct"><c>ct</c></seealso>) must then be used
+ in calls to
+ <seealso marker="#open-2"><c>ct_netconfc:open/2</c></seealso>.</p>
+
+ <p>If no configuration exists for a server, a session can still be
+ opened by calling
+ <seealso marker="#open-2"><c>ct_netconfc:open/2</c></seealso> with
+ all necessary options specified in the call. The first argument to
+ <seealso marker="#open-2"><c>ct_netconfc:open/2</c></seealso> can
+ then be any atom.</p>
+
+ </description>
+
+ <section>
+ <marker id="Logging"/>
+ <title>Logging</title>
+ <p>The NETCONF server uses <c>error_logger</c> for logging of NETCONF
+ traffic. A special purpose error handler is implemented in
+ <c>ct_conn_log_h</c>. To use this error handler, add the
+ <c>cth_conn_log</c> hook in the test suite, for example:</p>
+
+ <pre>
+ suite() -&gt;
+ [{ct_hooks, [{cth_conn_log, [{conn_mod(),hook_options()}]}]}].</pre>
+
+ <p><c>conn_mod()</c> is the name of the <c>Common Test</c> module
+ implementing the connection protocol, for example, <c>ct_netconfc</c>.</p>
+
+ <p>Hook option <c>log_type</c> specifies the type of logging:</p>
+
+ <taglist>
+ <tag><c>raw</c></tag>
+ <item><p>The sent and received NETCONF data is logged to a separate
+ text file "as is" without any formatting. A link to the file is
+ added to the test case HTML log.</p>.</item>
+
+ <tag><c>pretty</c></tag>
+ <item><p>The sent and received NETCONF data is logged to a separate
+ text file with XML data nicely indented. A link to the file is
+ added to the test case HTML log.</p></item>
+
+ <tag><c>html (default)</c></tag>
+ <item><p>The sent and received NETCONF traffic is pretty printed
+ directly in the test case HTML log.</p></item>
+
+ <tag><c>silent</c></tag>
+ <item><p>NETCONF traffic is not logged.</p></item>
+ </taglist>
+
+ <p>By default, all NETCONF traffic is logged in one single log file.
+ However, different connections can be logged in separate files.
+ To do this, use hook option <c>hosts</c> and list the names of the
+ servers/connections to be used in the suite. The connections
+ must be named for this to work, that is, they must be opened with
+ <seealso marker="#open-2"><c>ct_netconfc:open/2</c></seealso>.</p>
+
+ <p>Option <c>hosts</c> has no effect if <c>log_type</c> is set to
+ <c>html</c> or <c>silent</c>.</p>
+
+ <p>The hook options can also be specified in a configuration file with
+ configuration variable <c>ct_conn_log</c>:</p>
+
+ <pre>
+ {ct_conn_log,[{conn_mod(),hook_options()}]}.</pre>
+
+ <p>For example:</p>
+
+ <pre>
+ {ct_conn_log,[{ct_netconfc,[{log_type,pretty},
+ {hosts,[key_or_name()]}]}]}</pre>
+
+ <note>
+ <p>Hook options specified in a configuration file overwrite the
+ hard-coded hook options in the test suite.</p>
+ </note>
+
+ <p><em>Logging Example 1:</em></p>
+ <marker id="Logging_example_1"/>
+
+ <p>The following <c>ct_hooks</c> statement causes pretty printing of
+ NETCONF traffic to separate logs for the connections named
+ <c>nc_server1</c> and <c>nc_server2</c>. Any other connections are
+ logged to default NETCONF log.</p>
+
+ <pre>
+ suite() -&gt;
+ [{ct_hooks, [{cth_conn_log, [{ct_netconfc,[{log_type,pretty}},
+ {hosts,[nc_server1,nc_server2]}]}
+ ]}]}].</pre>
+
+ <p>Connections must be opened as follows:</p>
+
+ <pre>
+ open(nc_server1,[...]),
+ open(nc_server2,[...]).</pre>
+
+ <p><em>Logging Example 2:</em></p>
+ <marker id="Logging_example_2"/>
+
+ <p>The following configuration file causes raw logging of all NETCONF
+ traffic in to one single text file:</p>
+
+ <pre>
+ {ct_conn_log,[{ct_netconfc,[{log_type,raw}]}]}.</pre>
+
+ <p>The <c>ct_hooks</c> statement must look as follows:</p>
+
+ <pre>
+ suite() -&gt;
+ [{ct_hooks, [{cth_conn_log, []}]}].</pre>
+
+ <p>The same <c>ct_hooks</c> statement without the configuration file
+ would cause HTML logging of all NETCONF connections in to the test
+ case HTML log.</p>
+ </section>
+
+ <section>
+ <marker id="Notifications"/>
+ <title>Notifications</title>
+
+ <p>The NETCONF client is also compliant with RFC 5277 NETCONF Event
+ Notifications, which defines a mechanism for an asynchronous message
+ notification delivery service for the NETCONF protocol.</p>
+
+ <p>Specific functions to support this are
+ <seealso marker="#create_subscription-6"><c>ct_netconfc:create_subscription/6</c></seealso>
+ and
+ <seealso marker="#get_event_streams-3"><c>ct_netconfc:get_event_streams/3</c></seealso>.
+ (The functions also exist with other arities.)</p>
+ </section>
+
+ <section>
+ <title>Data Types</title>
+ <marker id="types"/>
+ <taglist>
+ <tag><c>client() = handle() | key_or_name()</c></tag>
+ <item><marker id="type-client"/>
+ <p>For <c>handle()</c>, see module
+ <seealso marker="ct"><c>ct</c></seealso>.</p></item>
+
+ <tag><c>error_reason() = term()</c></tag>
+ <item><marker id="type-error_reason"/> </item>
+ <tag><c>event_time() = {eventTime, xml_attributes(), [xs_datetime()]}</c></tag>
+ <item><marker id="type-event_time"/> </item>
+
+ <tag><c>handle() = term()</c></tag>
+ <item><marker id="type-handle"/>
+ <p>Opaque reference for a connection (NETCONF session). For more
+ information, see module <seealso marker="ct"><c>ct</c></seealso>.</p>
+ </item>
+
+ <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>
+ <item><marker id="type-key_or_name"/>
+ <p>For <c>target_name</c>, see module
+ <seealso marker="ct"><c>ct</c></seealso>.</p></item>
+
+ <tag><c>netconf_db() = running | startup | candidate</c></tag>
+ <item><marker id="type-netconf_db"/> </item>
+
+ <tag><c>notification() = {notification, xml_attributes(), notification_content()}</c></tag>
+ <item><marker id="type-notification"/> </item>
+
+ <tag><c>notification_content() = [event_time() | simple_xml()]</c></tag>
+ <item><marker id="type-notification_content"/> </item>
+
+ <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
+ <seealso marker="ssh:ssh#connect-3"><c>ssh:connect/3,4</c></seealso>.
+ Common options used are <c>user</c>, <c>password</c>
+ and <c>user_dir</c>. The <c>SshConnectOptions</c> are
+ verfied by the SSH application.</p></item>
+
+ <tag><c>options() = [option()]</c></tag>
+ <item><marker id="type-options"/>
+ <p>Options used for setting up an SSH connection to a NETCONF
+ server.</p></item>
+
+ <tag><c>server_id() = atom()</c></tag>
+ <item><marker id="type-server_id"/>
+ <p>The identity of a server, specified in a configuration
+ file.</p></item>
+
+ <tag><c>simple_xml() = {xml_tag(), xml_attributes(), xml_content()} | {xml_tag(), xml_content()} | xml_tag()</c></tag>
+ <item><marker id="type-simple_xml"/>
+ <p>This type is further described in application
+ <seealso marker="xmerl:index"><c>xmerl</c></seealso>.</p></item>
+
+ <tag><c>stream_data() = {description, string()} | {replaySupport, string()} | {replayLogCreationTime, string()} | {replayLogAgedTime, string()}</c></tag>
+ <item><marker id="type-stream_data"/>
+ <p>For details about the data format for the string values, see
+ "XML Schema for Event Notifications" in RFC 5277.</p></item>
+
+ <tag><c>stream_name() = string()</c></tag>
+ <item><marker id="type-stream_name"/> </item>
+
+ <tag><c>streams() = [{stream_name(), [stream_data()]}]</c></tag>
+ <item><marker id="type-streams"/> </item>
+
+ <tag><c>xml_attribute_tag() = atom()</c></tag>
+ <item><marker id="type-xml_attribute_tag"/> </item>
+
+ <tag><c>xml_attribute_value() = string()</c></tag>
+ <item><marker id="type-xml_attribute_value"/> </item>
+
+ <tag><c>xml_attributes() = [{xml_attribute_tag(), xml_attribute_value()}]</c></tag>
+ <item><marker id="type-xml_attributes"/> </item>
+
+ <tag><c>xml_content() = [simple_xml() | iolist()]</c></tag>
+ <item><marker id="type-xml_content"/> </item>
+
+ <tag><c>xml_tag() = atom()</c></tag>
+ <item><marker id="type-xml_tag"/> </item>
+
+ <tag><c>xpath() = {xpath, string()}</c></tag>
+ <item><marker id="type-xpath"/> </item>
+
+ <tag><c>xs_datetime() = string()</c></tag>
+ <item><marker id="type-xs_datetime"/>
+ <p>This date and time identifier has the same format as the XML type
+ <c>dateTime</c> and is compliant with RFC 3339 Date and Time on
+ the Internet Timestamps. The format is as follows:</p>
+ <pre>
+ [-]CCYY-MM-DDThh:mm:ss[.s][Z|(+|-)hh:mm]</pre>
+ </item>
+ </taglist>
+ </section>
+
+ <funcs>
+ <func>
+ <name>action(Client, Action) -&gt; Result</name>
+ <fsummary>Equivalent to action(Client, Action, infinity).</fsummary>
+ <desc><marker id="action-2"/>
+ <p>Equivalent to
+ <seealso marker="#action-3"><c>ct_netconfc:action(Client, Action,
+ infinity)</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>action(Client, Action, Timeout) -&gt; Result</name>
+ <fsummary>Executes an action.</fsummary>
+ <type>
+ <v>Client = client()</v>
+ <v>Action = simple_xml()</v>
+ <v>Timeout = timeout()</v>
+ <v>Result = ok | {ok, [simple_xml()]} | {error, error_reason()}</v>
+ </type>
+ <desc><marker id="action-3"/>
+ <p>Executes an action. If the return type is void, <c>ok</c> is
+ returned instead of <c>{ok,[simple_xml()]}</c>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>close_session(Client) -&gt; Result</name>
+ <fsummary>Equivalent to close_session(Client, infinity).</fsummary>
+ <desc><marker id="close_session-1"/>
+ <p>Equivalent to
+ <seealso marker="#close_session-2"><c>ct_netconfc:close_session(Client,
+ infinity)</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>close_session(Client, Timeout) -&gt; Result</name>
+ <fsummary>Requests graceful termination of the session associated with
+ the client.</fsummary>
+ <type>
+ <v>Client = client()</v>
+ <v>Timeout = timeout()</v>
+ <v>Result = ok | {error, error_reason()}</v>
+ </type>
+ <desc><marker id="close_session-2"/>
+ <p>Requests graceful termination of the session associated with the
+ client.</p>
+
+ <p>When a NETCONF server receives a <c>close-session</c> request, it
+ gracefully closes the session. The server releases any locks and
+ resources associated with the session and gracefully closes any
+ associated connections. Any NETCONF requests received after a
+ <c>close-session</c> request are ignored.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>copy_config(Client, Source, Target) -&gt; Result</name>
+ <fsummary>Equivalent to copy_config(Client, Source, Target,
+ infinity).</fsummary>
+ <desc><marker id="copy_config-3"/>
+ <p>Equivalent to
+ <seealso marker="#copy_config-4"><c>ct_netconfc:copy_config(Client,
+ Source, Target, infinity)</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>copy_config(Client, Target, Source, Timeout) -&gt; Result</name>
+ <fsummary>Copies configuration data.</fsummary>
+ <type>
+ <v>Client = client()</v>
+ <v>Target = netconf_db()</v>
+ <v>Source = netconf_db()</v>
+ <v>Timeout = timeout()</v>
+ <v>Result = ok | {error, error_reason()}</v>
+ </type>
+ <desc><marker id="copy_config-4"/>
+ <p>Copies configuration data.</p>
+
+ <p>Which source and target options that can be issued depends on the
+ capabilities supported by the server. That is, <c>:candidate</c>
+ and/or <c>:startup</c> are required.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>create_subscription(Client) -&gt; term()</name>
+ <fsummary>Creates a subscription for event notifications.</fsummary>
+ <desc><marker id="create_subscription-1"/></desc>
+ </func>
+
+ <func>
+ <name>create_subscription(Client, Timeout) -&gt; term()</name>
+ <fsummary>Creates a subscription for event notifications.</fsummary>
+ <desc><marker id="create_subscription-2"/></desc>
+ </func>
+
+ <func>
+ <name>create_subscription(Client, Stream, Timeout) -&gt; term()</name>
+ <fsummary>Creates a subscription for event notifications.</fsummary>
+ <desc><marker id="create_subscription-3"/></desc>
+ </func>
+
+ <func>
+ <name>create_subscription(Client, StartTime, StopTime, Timeout) -&gt; term()</name>
+ <fsummary>Creates a subscription for event notifications.</fsummary>
+ <desc><marker id="create_subscription-4"/></desc>
+ </func>
+
+ <func>
+ <name>create_subscription(Client, Stream, StartTime, StopTime, Timeout) -&gt; term()</name>
+ <fsummary>Creates a subscription for event notifications.</fsummary>
+ <desc><marker id="create_subscription-5"/></desc>
+ </func>
+
+ <func>
+ <name>create_subscription(Client, Stream, Filter, StartTime, StopTime, Timeout) -&gt; Result</name>
+ <fsummary>Creates a subscription for event notifications.</fsummary>
+ <type>
+ <v>Client = client()</v>
+ <v>Stream = stream_name()</v>
+ <v>Filter = simple_xml() | [simple_xml()]</v>
+ <v>StartTime = xs_datetime()</v>
+ <v>StopTime = xs_datetime()</v>
+ <v>Timeout = timeout()</v>
+ <v>Result = ok | {error, error_reason()}</v>
+ </type>
+ <desc><marker id="create_subscription-6"/>
+ <p>Creates a subscription for event notifications.</p>
+
+ <p>This function sets up a subscription for NETCONF event
+ notifications of the specified stream type, matching the specified
+ filter. The calling process receives notifications as messages of
+ type <c>notification()</c>.</p>
+
+ <taglist>
+ <tag><c>Stream</c></tag>
+ <item><p>Optional parameter that indicates which stream of event
+ is of interest. If not present, events in the default NETCONF
+ stream are sent.</p></item>
+ <tag><c>Filter</c></tag>
+ <item><p>Optional parameter that indicates which subset of all
+ possible events is of interest. The parameter format is the
+ same as that of the filter parameter in the NETCONF protocol
+ operations. If not present, all events not precluded by other
+ parameters are sent.</p></item>
+ <tag><c>StartTime</c></tag>
+ <item><p>Optional parameter used to trigger the replay feature and
+ indicate that the replay is to start at the time specified.
+ If <c>StartTime</c> is not present, this is not a replay
+ subscription.</p>
+ <p>It is not valid to specify start times that are later than
+ the current time. If <c>StartTime</c> is specified earlier
+ than the log can support, the replay begins with the earliest
+ available notification.</p>
+ <p>This parameter is of type <c>dateTime</c> and compliant to
+ RFC 3339. Implementations must support time zones.</p></item>
+ <tag><c>StopTime</c></tag>
+ <item><p>Optional parameter used with the optional replay feature
+ to indicate the newest notifications of interest. If
+ <c>StopTime</c> is not present, the notifications continues
+ until the subscription is terminated.</p>
+ <p>Must be used with and be later than <c>StartTime</c>. Values
+ of <c>StopTime</c> in the future are valid. This parameter is
+ of type <c>dateTime</c> and compliant to RFC 3339.
+ Implementations must support time zones.</p></item>
+ </taglist>
+
+ <p>For more details about the event notification mechanism, see
+ RFC 5277.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>delete_config(Client, Target) -&gt; Result</name>
+ <fsummary>Equivalent to delete_config(Client, Target,
+ infinity).</fsummary>
+ <desc><marker id="delete_config-2"/>
+ <p>Equivalent to
+ <seealso marker="#delete_config-3"><c>ct_netconfc:delete_config(Client, Target, infinity)</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>delete_config(Client, Target, Timeout) -&gt; Result</name>
+ <fsummary>Deletes configuration data.</fsummary>
+ <type>
+ <v>Client = client()</v>
+ <v>Target = startup | candidate</v>
+ <v>Timeout = timeout()</v>
+ <v>Result = ok | {error, error_reason()}</v>
+ </type>
+ <desc><marker id="delete_config-3"/>
+ <p>Deletes configuration data.</p>
+
+ <p>The running configuration cannot be deleted and <c>:candidate</c>
+ or <c>:startup</c> must be advertised by the server.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>edit_config(Client, Target, Config) -&gt; Result</name>
+ <fsummary>Equivalent to edit_config(Client, Target, Config, [],
+ infinity).</fsummary>
+ <desc><marker id="edit_config-3"/>
+ <p>Equivalent to
+ <seealso marker="#edit_config-5"><c>ct_netconfc:edit_config(Client,
+ Target, Config, [], infinity)</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>edit_config(Client, Target, Config, OptParamsOrTimeout) -&gt; Result</name>
+ <fsummary>If OptParamsOrTimeout is a time-out value, this function is
+ equivalent to ct_netconfc:edit_config(Client, Target, Config, [],
+ Timeout).</fsummary>
+ <type>
+ <v>Client = client()</v>
+ <v>Target = netconf_db()</v>
+ <v>Config = simple_xml()</v>
+ <v>OptParamsOrTimeout = [simple_xml()] | timeout()</v>
+ <v>Result = ok | {error, error_reason()}</v>
+ </type>
+ <desc><marker id="edit_config-4"/>
+ <p>If <c>OptParamsOrTimeout</c> is a time-out value, this function is
+ equivalent to
+ <seealso marker="#edit_config-5"><c>ct_netconfc:edit_config(Client,
+ Target, Config, [], Timeout)</c></seealso>.</p>
+
+ <p>If <c>OptParamsOrTimeout</c> is a list of simple XML, this
+ function is equivalent to
+ <seealso marker="#edit_config-5"><c>ct_netconfc:edit_config(Client,
+ Target, Config, OptParams, infinity)</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>edit_config(Client, Target, Config, OptParams, Timeout) -&gt; Result</name>
+ <fsummary>Edits configuration data.</fsummary>
+ <type>
+ <v>Client = client()</v>
+ <v>Target = netconf_db()</v>
+ <v>Config = simple_xml()</v>
+ <v>OptParams = [simple_xml()]</v>
+ <v>Timeout = timeout()</v>
+ <v>Result = ok | {error, error_reason()}</v>
+ </type>
+ <desc><marker id="edit_config-5"/>
+ <p>Edits configuration data.</p>
+
+ <p>By default only the running target is available, unless the server
+ includes <c>:candidate</c> or <c>:startup</c> in its list of
+ capabilities.</p>
+
+ <p><c>OptParams</c> can be used for specifying optional parameters
+ (<c>default-operation</c>, <c>test-option</c>, or
+ <c>error-option</c>) to be added to the <c>edit-config</c>
+ request. The value must be a list containing valid simple XML,
+ for example:</p>
+
+ <pre>
+ [{'default-operation', ["none"]},
+ {'error-option', ["rollback-on-error"]}]</pre>
+ </desc>
+ </func>
+
+ <func>
+ <name>get(Client, Filter) -&gt; Result</name>
+ <fsummary>Equivalent to get(Client, Filter, infinity).</fsummary>
+ <desc><marker id="get-2"/>
+ <p>Equivalent to
+ <seealso marker="#get-3"><c>ct_netconfc:get(Client, Filter,
+ infinity)</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>get(Client, Filter, Timeout) -&gt; Result</name>
+ <fsummary>Gets data.</fsummary>
+ <type>
+ <v>Client = client()</v>
+ <v>Filter = simple_xml() | xpath()</v>
+ <v>Timeout = timeout()</v>
+ <v>Result = {ok, [simple_xml()]} | {error, error_reason()}</v>
+ </type>
+ <desc><marker id="get-3"/>
+ <p>Gets data.</p>
+
+ <p>This operation returns both configuration and state data from the
+ server.</p>
+
+ <p>Filter type <c>xpath</c> can be used only if the server supports
+ <c>:xpath</c>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>get_capabilities(Client) -&gt; Result</name>
+ <fsummary>Equivalent to get_capabilities(Client, infinity).</fsummary>
+ <desc><marker id="get_capabilities-1"/>
+ <p>Equivalent to
+ <seealso marker="#get_capabilities-2"><c>ct_netconfc:get_capabilities(Client,
+ infinity)</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>get_capabilities(Client, Timeout) -&gt; Result</name>
+ <fsummary>Returns the server side capabilities.</fsummary>
+ <type>
+ <v>Client = client()</v>
+ <v>Timeout = timeout()</v>
+ <v>Result = [string()] | {error, error_reason()}</v>
+ </type>
+ <desc><marker id="get_capabilities-2"/>
+ <p>Returns the server side capabilities.</p>
+
+ <p>The following capability identifiers, defined in RFC 4741 NETCONF
+ Configuration Protocol, can be returned:</p>
+
+ <list>
+ <item><p><c>"urn:ietf:params:netconf:base:1.0"</c></p></item>
+ <item><p><c>"urn:ietf:params:netconf:capability:writable-running:1.0"</c></p></item>
+ <item><p><c>"urn:ietf:params:netconf:capability:candidate:1.0"</c></p></item>
+ <item><p><c>"urn:ietf:params:netconf:capability:confirmed-commit:1.0"</c></p></item>
+ <item><p><c>"urn:ietf:params:netconf:capability:rollback-on-error:1.0"</c></p></item>
+ <item><p><c>"urn:ietf:params:netconf:capability:startup:1.0"</c></p></item>
+ <item><p><c>"urn:ietf:params:netconf:capability:url:1.0"</c></p></item>
+ <item><p><c>"urn:ietf:params:netconf:capability:xpath:1.0"</c></p></item>
+ </list>
+
+ <p>More identifiers can exist, for example, server-side namespace.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>get_config(Client, Source, Filter) -&gt; Result</name>
+ <fsummary>Equivalent to get_config(Client, Source, Filter,
+ infinity).</fsummary>
+ <desc><marker id="get_config-3"/>
+ <p>Equivalent to
+ <seealso marker="#get_config-4"><c>ct_netconfc:get_config(Client, Source, Filter, infinity)</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>get_config(Client, Source, Filter, Timeout) -&gt; Result</name>
+ <fsummary>Gets configuration data.</fsummary>
+ <type>
+ <v>Client = client()</v>
+ <v>Source = netconf_db()</v>
+ <v>Filter = simple_xml() | xpath()</v>
+ <v>Timeout = timeout()</v>
+ <v>Result = {ok, [simple_xml()]} | {error, error_reason()}</v>
+ </type>
+ <desc><marker id="get_config-4"/>
+ <p>Gets configuration data.</p>
+
+ <p>To be able to access another source than <c>running</c>, the
+ server must advertise <c>:candidate</c> and/or <c>:startup</c>.</p>
+
+ <p>Filter type <c>xpath</c> can be used only if the server supports
+ <c>:xpath</c>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>get_event_streams(Client, Timeout) -&gt; Result</name>
+ <fsummary>Equivalent to get_event_streams(Client, [], Timeout).</fsummary>
+ <desc><marker id="get_event_streams-2"/>
+ <p>Equivalent to
+ <seealso marker="#get_event_streams-3"><c>ct_netconfc:get_event_streams(Client,
+ [], Timeout)</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>get_event_streams(Client, Streams, Timeout) -&gt; Result</name>
+ <fsummary>Sends a request to get the specified event streams.</fsummary>
+ <type>
+ <v>Client = client()</v>
+ <v>Streams = [stream_name()]</v>
+ <v>Timeout = timeout()</v>
+ <v>Result = {ok, streams()} | {error, error_reason()}</v>
+ </type>
+ <desc><marker id="get_event_streams-3"/>
+ <p>Sends a request to get the specified event streams.</p>
+
+ <p><c>Streams</c> is a list of stream names. The following filter is
+ sent to the NETCONF server in a <c>get</c> request:</p>
+
+ <pre>
+ &lt;netconf xmlns="urn:ietf:params:xml:ns:netmod:notification"&gt;
+ &lt;streams&gt;
+ &lt;stream&gt;
+ &lt;name&gt;StreamName1&lt;/name&gt;
+ &lt;/stream&gt;
+ &lt;stream&gt;
+ &lt;name&gt;StreamName2&lt;/name&gt;
+ &lt;/stream&gt;
+ ...
+ &lt;/streams&gt;
+ &lt;/netconf&gt;</pre>
+
+ <p>If <c>Streams</c> is an empty list, <em>all</em> streams are
+ requested by sending the following filter:</p>
+
+ <pre>
+ &lt;netconf xmlns="urn:ietf:params:xml:ns:netmod:notification"&gt;
+ &lt;streams/&gt;
+ &lt;/netconf&gt;</pre>
+
+ <p>If more complex filtering is needed, use
+ <seealso marker="#get-2"><c>ct_netconfc:get/2</c></seealso> or
+ <seealso marker="#get-3"><c>ct_netconfc:get/3</c></seealso> and
+ specify the exact filter according to "XML Schema for Event
+ Notifications" in RFC 5277.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>get_session_id(Client) -&gt; Result</name>
+ <fsummary>Equivalent to get_session_id(Client, infinity).</fsummary>
+ <desc><marker id="get_session_id-1"/>
+ <p>Equivalent to
+ <seealso marker="#get_session_id-2"><c>ct_netconfc:get_session_id(Client,
+ infinity)</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>get_session_id(Client, Timeout) -&gt; Result</name>
+ <fsummary>Returns the session Id associated with the specified
+ client.</fsummary>
+ <type>
+ <v>Client = client()</v>
+ <v>Timeout = timeout()</v>
+ <v>Result = pos_integer() | {error, error_reason()}</v>
+ </type>
+ <desc><marker id="get_session_id-2"/>
+ <p>Returns the session Id associated with the specified client.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>hello(Client) -&gt; Result</name>
+ <fsummary>Equivalent to hello(Client, [], infinity).</fsummary>
+ <desc><marker id="hello-1"/>
+ <p>Equivalent to
+ <seealso marker="#hello-3"><c>ct_netconfc:hello(Client, [],
+ infinity)</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>hello(Client, Timeout) -&gt; Result</name>
+ <fsummary>Equivalent to hello(Client, [], Timeout).</fsummary>
+ <desc><marker id="hello-2"/>
+ <p>Equivalent to
+ <seealso marker="#hello-3"><c>ct_netconfc:hello(Client, [],
+ Timeout)</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>hello(Client, Options, Timeout) -&gt; Result</name>
+ <fsummary>Exchanges hello messages with the server.</fsummary>
+ <type>
+ <v>Client = handle()</v>
+ <v>Options = [{capability, [string()]}]</v>
+ <v>Timeout = timeout()</v>
+ <v>Result = ok | {error, error_reason()}</v>
+ </type>
+ <desc><marker id="hello-3"/>
+ <p>Exchanges <c>hello</c> messages with the server.</p>
+
+ <p>Adds optional capabilities and sends a <c>hello</c> message to the
+ server and waits for the return.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>kill_session(Client, SessionId) -&gt; Result</name>
+ <fsummary>Equivalent to kill_session(Client, SessionId,
+ infinity).</fsummary>
+ <desc><marker id="kill_session-2"/>
+ <p>Equivalent to
+ <seealso marker="#kill_session-3"><c>ct_netconfc:kill_session(Client,
+SessionId, infinity)</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>kill_session(Client, SessionId, Timeout) -&gt; Result</name>
+ <fsummary>Forces termination of the session associated with the supplied
+ session Id.</fsummary>
+ <type>
+ <v>Client = client()</v>
+ <v>SessionId = pos_integer()</v>
+ <v>Timeout = timeout()</v>
+ <v>Result = ok | {error, error_reason()}</v>
+ </type>
+ <desc><marker id="kill_session-3"/>
+ <p>Forces termination of the session associated with the supplied
+ session Id.</p>
+
+ <p>The server side must abort any ongoing operations, release any
+ locks and resources associated with the session, and close any
+ associated connections.</p>
+
+ <p>Only if the server is in the confirmed commit phase, the
+ configuration is restored to its state before entering the confirmed
+ commit phase. Otherwise, no configuration rollback is performed.</p>
+
+ <p>If the specified <c>SessionId</c> is equal to the current session
+ Id, an error is returned.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>lock(Client, Target) -&gt; Result</name>
+ <fsummary>Equivalent to lock(Client, Target, infinity).</fsummary>
+ <desc><marker id="lock-2"/>
+ <p>Equivalent to
+ <seealso marker="#lock-3"><c>ct_netconfc:lock(Client, Target,
+ infinity)</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>lock(Client, Target, Timeout) -&gt; Result</name>
+ <fsummary>Unlocks the configuration target.</fsummary>
+ <type>
+ <v>Client = client()</v>
+ <v>Target = netconf_db()</v>
+ <v>Timeout = timeout()</v>
+ <v>Result = ok | {error, error_reason()}</v>
+ </type>
+ <desc><marker id="lock-3"/>
+ <p>Unlocks the configuration target.</p>
+
+ <p>Which target parameters that can be used depends on if
+ <c>:candidate</c> and/or <c>:startup</c> are supported by the
+ server. If successfull, the configuration system of the device is
+ unavailable to other clients (NETCONF, CORBA, SNMP, and so on).
+ Locks are intended to be short-lived.</p>
+
+ <p>Operation
+ <seealso marker="#kill_session-2"><c>ct_netconfc:kill_session/2</c></seealso>
+ or
+ <seealso marker="#kill_session-3"><c>ct_netconfc:kill_session/3</c></seealso>
+ can be used to force the release of a lock owned by another NETCONF
+ session. How this is achieved by the server side is
+ implementation-specific.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>only_open(Options) -&gt; Result</name>
+ <fsummary>Opens a NETCONF session, but does not send hello.</fsummary>
+ <type>
+ <v>Options = options()</v>
+ <v>Result = {ok, handle()} | {error, error_reason()}</v>
+ </type>
+ <desc><marker id="only_open-1"/>
+ <p>Opens a NETCONF session, but does not send <c>hello</c>.</p>
+
+ <p>As <seealso marker="#open-1"><c>ct_netconfc:open/1</c></seealso>,
+ but does not send a <c>hello</c> message.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>only_open(KeyOrName, ExtraOptions) -&gt; Result</name>
+ <fsummary>Opens a name NETCONF session, but does not send
+ hello.</fsummary>
+ <type>
+ <v>KeyOrName = key_or_name()</v>
+ <v>ExtraOptions = options()</v>
+ <v>Result = {ok, handle()} | {error, error_reason()}</v>
+ </type>
+ <desc><marker id="only_open-2"/>
+ <p>Opens a name NETCONF session, but does not send <c>hello</c>.</p>
+
+ <p>As <seealso marker="#open-2"><c>ct_netconfc:open/2</c></seealso>,
+ but does not send a <c>hello</c> message.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>open(Options) -&gt; Result</name>
+ <fsummary>Opens a NETCONF session and exchanges hello messages.</fsummary>
+ <type>
+ <v>Options = options()</v>
+ <v>Result = {ok, handle()} | {error, error_reason()}</v>
+ </type>
+ <desc><marker id="open-1"/>
+ <p>Opens a NETCONF session and exchanges <c>hello</c> messages.</p>
+
+ <p>If the server options are specified in a configuration file,
+ or if a named client is needed for logging purposes (see section
+ <seealso marker="#Logging">Logging</seealso> in this module), use
+ <seealso marker="#open-2"><c>ct_netconfc:open/2</c></seealso>
+ instead.</p>
+
+ <p>The opaque <c>handle()</c> reference returned from this
+ function is required as client identifier when calling any other
+ function in this module.</p>
+
+ <p>Option <c>timeout</c> (milliseconds) is used when setting up the
+ SSH connection and when waiting for the <c>hello</c> message from
+ the server. It is not used for any other purposes during the
+ lifetime of the connection.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>open(KeyOrName, ExtraOptions) -&gt; Result</name>
+ <fsummary>Opens a named NETCONF session and exchanges hello
+ messages.</fsummary>
+ <type>
+ <v>KeyOrName = key_or_name()</v>
+ <v>ExtraOptions = options()</v>
+ <v>Result = {ok, handle()} | {error, error_reason()}</v>
+ </type>
+ <desc><marker id="open-2"/>
+ <p>Opens a named NETCONF session and exchanges <c>hello</c>
+ messages.</p>
+
+ <p>If <c>KeyOrName</c> is a configured <c>server_id()</c> or a
+ <c>target_name()</c> associated with such an Id, then the options
+ for this server are fetched from the configuration file.</p>
+
+ <p>Argument <c>ExtraOptions</c> is added to the options found in the
+ configuration file. If the same options are specified, the values
+ from the configuration file overwrite <c>ExtraOptions</c>.</p>
+
+ <p>If the server is not specified in a configuration file, use
+ <seealso marker="#open-1"><c>ct_netconfc:open/1</c></seealso>
+ instead.</p>
+
+ <p>The opaque <c>handle()</c> reference returned from this
+ function can be used as client identifier when calling any other
+ function in this module. However, if <c>KeyOrName</c> is a
+ <c>target_name()</c>, that is, if the server is named through a
+ call to <seealso marker="ct#require-2"><c>ct:require/2</c></seealso>
+ or a <c>require</c> statement in the test suite, then this name can
+ be used instead of <c>handle()</c>.</p>
+
+ <p>Option <c>timeout</c> (milliseconds) is used when setting up the
+ SSH connection and when waiting for the <c>hello</c> message from
+ the server. It is not used for any other purposes during the
+ lifetime of the connection.</p>
+
+ <p>See also
+ <seealso marker="ct#require-2"><c>ct:require/2</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>send(Client, SimpleXml) -&gt; Result</name>
+ <fsummary>Equivalent to send(Client, SimpleXml, infinity).</fsummary>
+ <desc><marker id="send-2"/>
+ <p>Equivalent to
+ <seealso marker="#send-3"><c>ct_netconfc:send(Client, SimpleXml,
+ infinity)</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>send(Client, SimpleXml, Timeout) -&gt; Result</name>
+ <fsummary>Sends an XML document to the server.</fsummary>
+ <type>
+ <v>Client = client()</v>
+ <v>SimpleXml = simple_xml()</v>
+ <v>Timeout = timeout()</v>
+ <v>Result = simple_xml() | {error, error_reason()}</v>
+ </type>
+ <desc><marker id="send-3"/>
+ <p>Sends an XML document to the server.</p>
+
+ <p>The specified XML document is sent "as is" to the server. This
+ function can be used for sending XML documents that cannot be
+ expressed by other interface functions in this module.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>send_rpc(Client, SimpleXml) -&gt; Result</name>
+ <fsummary>Equivalent to send_rpc(Client, SimpleXml, infinity).</fsummary>
+ <desc><marker id="send_rpc-2"/>
+ <p>Equivalent to
+ <seealso marker="#send_rpc-3"><c>ct_netconfc:send_rpc(Client,
+ SimpleXml, infinity)</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>send_rpc(Client, SimpleXml, Timeout) -&gt; Result</name>
+ <fsummary>Sends a NETCONF rpc request to the server.</fsummary>
+ <type>
+ <v>Client = client()</v>
+ <v>SimpleXml = simple_xml()</v>
+ <v>Timeout = timeout()</v>
+ <v>Result = [simple_xml()] | {error, error_reason()}</v>
+ </type>
+ <desc><marker id="send_rpc-3"/>
+ <p>Sends a NETCONF <c>rpc</c> request to the server.</p>
+
+ <p>The specified XML document is wrapped in a valid NETCONF <c>rpc</c>
+ request and sent to the server. The <c>message-id</c> and namespace
+ attributes are added to element <c>rpc</c>.</p>
+
+ <p>This function can be used for sending <c>rpc</c> requests that
+ cannot be expressed by other interface functions in this module.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>unlock(Client, Target) -&gt; Result</name>
+ <fsummary>Equivalent to unlock(Client, Target, infinity).</fsummary>
+ <desc><marker id="unlock-2"/>
+ <p>Equivalent to
+ <seealso marker="#unlock-3"><c>ct_netconfc:unlock(Client, Target,
+ infinity)</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>unlock(Client, Target, Timeout) -&gt; Result</name>
+ <fsummary>Unlocks the configuration target.</fsummary>
+ <type>
+ <v>Client = client()</v>
+ <v>Target = netconf_db()</v>
+ <v>Timeout = timeout()</v>
+ <v>Result = ok | {error, error_reason()}</v>
+ </type>
+ <desc><marker id="unlock-3"/>
+ <p>Unlocks the configuration target.</p>
+
+ <p>If the client earlier has acquired a lock through
+ <seealso marker="#lock-2"><c>ct_netconfc:lock/2</c></seealso> or
+ <seealso marker="#lock-3"><c>ct_netconfc:lock/3</c></seealso>, this
+ operation releases the associated lock. To access another target
+ than <c>running</c>, the server must support <c>:candidate</c>
+ and/or <c>:startup</c>.</p>
+ </desc>
+ </func>
+ </funcs>
+
+</erlref>
+
+
diff --git a/lib/common_test/doc/src/ct_property_test.xml b/lib/common_test/doc/src/ct_property_test.xml
new file mode 100644
index 0000000000..028e5eb69f
--- /dev/null
+++ b/lib/common_test/doc/src/ct_property_test.xml
@@ -0,0 +1,116 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE erlref SYSTEM "erlref.dtd">
+
+<erlref>
+ <header>
+ <copyright>
+ <year>2010</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>ct_property_test</title>
+ <prepared></prepared>
+ <responsible></responsible>
+ <docno></docno>
+ <approved></approved>
+ <checked></checked>
+ <date></date>
+ <rev>A</rev>
+ <file>ct_property_test.xml</file>
+ </header>
+ <module>ct_property_test</module>
+ <modulesummary>EXPERIMENTAL support in Common Test for calling
+ property-based tests.</modulesummary>
+
+ <description>
+
+ <p>EXPERIMENTAL support in <c>Common Test</c> for calling property-based
+ tests.</p>
+
+ <p>This module is a first step to run property-based tests in the
+ <c>Common Test</c> framework. A property testing tool like QuickCheck
+ or PropEr is assumed to be installed.</p>
+
+ <p>The idea is to have a <c>Common Test</c> test suite calling a property
+ testing tool with special property test suites as defined by that tool.
+ The usual Erlang application directory structure is assumed. The tests
+ are collected in the <c>test</c> directory of the application. The
+ <c>test</c> directory has a subdirectory <c>property_test</c>, where
+ everything needed for the property tests is collected.</p>
+
+ <p>A typical <c>Common Test</c> test suite using <c>ct_property_test</c>
+ is organized as follows:</p>
+
+ <pre>
+ -include_lib("common_test/include/ct.hrl").
+
+ all() -&gt; [prop_ftp_case].
+
+ init_per_suite(Config) -&gt;
+ ct_property_test:init_per_suite(Config).
+
+ %%%---- test case
+ prop_ftp_case(Config) -&gt;
+ ct_property_test:quickcheck(
+ ftp_simple_client_server:prop_ftp(Config),
+ Config
+ ).</pre>
+
+ <warning>
+ <p>This is experimental code that can be changed or removed anytime
+ without any warning.</p>
+ </warning>
+
+ </description>
+
+ <funcs>
+ <func>
+ <name>init_per_suite(Config) -&gt; Config | {skip, Reason}</name>
+ <fsummary>Initializes Config for property testing.</fsummary>
+ <desc><marker id="init_per_suite-1"/>
+ <p>Initializes <c>Config</c> for property testing.</p>
+
+ <p>This function investigates if support is available for either
+ Quickcheck, PropEr, or Triq. The options
+ <c>{property_dir,AbsPath}</c> and <c>{property_test_tool,Tool}</c>
+ are set in the <c>Config</c> returned.</p>
+
+ <p>The function is intended to be called in function
+ <c>init_per_suite</c> in the test suite.</p>
+
+ <p>The property tests are assumed to be in subdirectory
+ <c>property_test</c>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>quickcheck(Property, Config) -&gt; true | {fail, Reason}</name>
+ <fsummary>Calls quickcheck and returns the result in a form suitable for
+ Common Test.</fsummary>
+ <desc><marker id="quickcheck-2"/>
+ <p>Calls quickcheck and returns the result in a form suitable for
+ <c>Common Test</c>.</p>
+
+ <p>This function is intended to be called in the test cases in the
+ test suite.</p>
+ </desc>
+ </func>
+ </funcs>
+
+</erlref>
+
+
diff --git a/lib/common_test/doc/src/ct_rpc.xml b/lib/common_test/doc/src/ct_rpc.xml
new file mode 100644
index 0000000000..90e6b833f7
--- /dev/null
+++ b/lib/common_test/doc/src/ct_rpc.xml
@@ -0,0 +1,220 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE erlref SYSTEM "erlref.dtd">
+
+<erlref>
+ <header>
+ <copyright>
+ <year>2010</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>ct_rpc</title>
+ <prepared></prepared>
+ <responsible></responsible>
+ <docno></docno>
+ <approved></approved>
+ <checked></checked>
+ <date></date>
+ <rev>A</rev>
+ <file>ct_rpc.xml</file>
+ </header>
+ <module>ct_rpc</module>
+ <modulesummary>Common Test specific layer on Erlang/OTP rpc.</modulesummary>
+
+ <description>
+
+ <p><c>Common Test</c> specific layer on Erlang/OTP <c>rpc</c>.</p>
+
+ </description>
+
+ <funcs>
+ <func>
+ <name>app_node(App, Candidates) -&gt; NodeName</name>
+ <fsummary>From a set of candidate nodes determines which of them is
+ running the application App.</fsummary>
+ <type>
+ <v>App = atom()</v>
+ <v>Candidates = [NodeName]</v>
+ <v>NodeName = atom()</v>
+ </type>
+ <desc><marker id="app_node-2"/>
+ <p>From a set of candidate nodes determines which of them is running
+ the application <c>App</c>. If none of the candidate nodes is
+ running <c>App</c>, the function makes the test case calling
+ this function to fail. This function is the same as calling
+ <c>app_node(App, Candidates, true)</c>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>app_node(App, Candidates, FailOnBadRPC) -&gt; NodeName</name>
+ <fsummary>Same as app_node/2, except that argument FailOnBadRPC
+ determines if the search for a candidate node is to stop if
+ badrpc is received at some point.</fsummary>
+ <type>
+ <v>App = atom()</v>
+ <v>Candidates = [NodeName]</v>
+ <v>NodeName = atom()</v>
+ <v>FailOnBadRPC = true | false</v>
+ </type>
+ <desc><marker id="app_node-3"/>
+ <p>Same as
+ <seealso marker="#app_node-2"><c>ct_rpc:app_node/2</c></seealso>,
+ except that argument <c>FailOnBadRPC</c> determines if the search
+ for a candidate node is to stop if <c>badrpc</c> is received at
+ some point.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>app_node(App, Candidates, FailOnBadRPC, Cookie) -&gt; NodeName</name>
+ <fsummary>Same as app_node/2, except that argument FailOnBadRPC
+ determines if the search for a candidate node is to stop if badrpc is
+ received at some point.</fsummary>
+ <type>
+ <v>App = atom()</v>
+ <v>Candidates = [NodeName]</v>
+ <v>NodeName = atom()</v>
+ <v>FailOnBadRPC = true | false</v>
+ <v>Cookie = atom()</v>
+ </type>
+ <desc><marker id="app_node-4"/>
+ <p>Same as
+ <seealso marker="#app_node-2"><c>ct_rpc:app_node/2</c></seealso>,
+ except that argument <c>FailOnBadRPC</c> determines if the search
+ for a candidate node is to stop if <c>badrpc</c> is received at
+ some point.</p>
+
+ <p>The cookie on the client node is set to <c>Cookie</c> for this
+ <c>rpc</c> operation (used to match the server node cookie).</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>call(Node, Module, Function, Args) -&gt; term() | {badrpc, Reason}</name>
+ <fsummary>Same as call(Node, Module, Function, Args, infinity).</fsummary>
+ <desc><marker id="call-4"/>
+ <p>Same as <c>call(Node, Module, Function, Args, infinity)</c>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>call(Node, Module, Function, Args, TimeOut) -&gt; term() | {badrpc, Reason}</name>
+ <fsummary>Evaluates apply(Module, Function, Args) on the node
+ Node.</fsummary>
+ <type>
+ <v>Node = NodeName | {Fun, FunArgs}</v>
+ <v>Fun = function()</v>
+ <v>FunArgs = term()</v>
+ <v>NodeName = atom()</v>
+ <v>Module = atom()</v>
+ <v>Function = atom()</v>
+ <v>Args = [term()]</v>
+ <v>Reason = timeout | term()</v>
+ </type>
+ <desc><marker id="call-5"/>
+ <p>Evaluates <c>apply(Module, Function, Args)</c> on the node
+ <c>Node</c>. Returns either whatever <c>Function</c> returns, or
+ <c>{badrpc, Reason}</c> if the remote procedure call fails. If
+ <c>Node</c> is <c>{Fun, FunArgs}</c>, applying <c>Fun</c> to
+ <c>FunArgs</c> is to return a node name.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>call(Node, Module, Function, Args, TimeOut, Cookie) -&gt; term() | {badrpc, Reason}</name>
+ <fsummary>Evaluates apply(Module, Function, Args) on the node
+ Node.</fsummary>
+ <type>
+ <v>Node = NodeName | {Fun, FunArgs}</v>
+ <v>Fun = function()</v>
+ <v>FunArgs = term()</v>
+ <v>NodeName = atom()</v>
+ <v>Module = atom()</v>
+ <v>Function = atom()</v>
+ <v>Args = [term()]</v>
+ <v>Reason = timeout | term()</v>
+ <v>Cookie = atom()</v>
+ </type>
+ <desc><marker id="call-6"/>
+ <p>Evaluates <c>apply(Module, Function, Args)</c> on the node
+ <c>Node</c>. Returns either whatever <c>Function</c> returns, or
+ <c>{badrpc, Reason}</c> if the remote procedure call fails. If
+ <c>Node</c> is <c>{Fun, FunArgs}</c>, applying <c>Fun</c> to
+ <c>FunArgs</c> is to return a node name.</p>
+
+ <p>The cookie on the client node is set to <c>Cookie</c> for this
+ <c>rpc</c> operation (used to match the server node cookie).</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>cast(Node, Module, Function, Args) -&gt; ok</name>
+ <fsummary>Evaluates apply(Module, Function, Args) on the node
+ Node.</fsummary>
+ <type>
+ <v>Node = NodeName | {Fun, FunArgs}</v>
+ <v>Fun = function()</v>
+ <v>FunArgs = term()</v>
+ <v>NodeName = atom()</v>
+ <v>Module = atom()</v>
+ <v>Function = atom()</v>
+ <v>Args = [term()]</v>
+ <v>Reason = timeout | term()</v>
+ </type>
+ <desc><marker id="cast-4"/>
+ <p>Evaluates <c>apply(Module, Function, Args)</c> on the node
+ <c>Node</c>. No response is delivered and the process that makes
+ the call is not suspended until the evaluation is completed as in
+ the case of <c>call/3,4</c>. If <c>Node</c> is
+ <c>{Fun, FunArgs}</c>, applying <c>Fun</c> to <c>FunArgs</c> is to
+ return a node name.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>cast(Node, Module, Function, Args, Cookie) -&gt; ok</name>
+ <fsummary>Evaluates apply(Module, Function, Args) on the node
+ Node.</fsummary>
+ <type>
+ <v>Node = NodeName | {Fun, FunArgs}</v>
+ <v>Fun = function()</v>
+ <v>FunArgs = term()</v>
+ <v>NodeName = atom()</v>
+ <v>Module = atom()</v>
+ <v>Function = atom()</v>
+ <v>Args = [term()]</v>
+ <v>Reason = timeout | term()</v>
+ <v>Cookie = atom()</v>
+ </type>
+ <desc><marker id="cast-5"/>
+ <p>Evaluates <c>apply(Module, Function, Args)</c> on the node
+ <c>Node</c>. No response is delivered and the process that makes
+ the call is not suspended until the evaluation is completed as in
+ the case of <c>call/3,4</c>. If <c>Node</c> is
+ <c>{Fun, FunArgs}</c>, applying <c>Fun</c> to <c>FunArgs</c> is to
+ return a node name.</p>
+
+ <p>The cookie on the client node is set to <c>Cookie</c> for this
+ <c>rpc</c> operation (used to match the server node cookie).</p>
+ </desc>
+ </func>
+ </funcs>
+
+</erlref>
+
+
diff --git a/lib/common_test/doc/src/ct_run.xml b/lib/common_test/doc/src/ct_run.xml
index 5518bb039b..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>
@@ -34,178 +34,192 @@
</header>
<com>ct_run</com>
<comsummary>Program used for starting Common Test from the
- OS command line.
- </comsummary>
+ OS command line.</comsummary>
<description>
<p>The <c>ct_run</c> program is automatically installed with Erlang/OTP
- and Common Test (please see the Installation chapter in the Common
- Test User's Guide for more information). The program accepts a number
- of different start flags. Some flags trigger <c>ct_run</c>
- to start the Common Test application and pass on data to it. Some
- flags start an Erlang node prepared for running Common Test in a
- particular mode.</p>
-
- <p>There is an interface function that corresponds to this program,
- called <seealso marker="ct#run_test-1"><c>ct:run_test/1</c></seealso>, for starting Common Test from the Erlang
- shell (or an Erlang program). Please see the <c>ct</c> man page for
- details.</p>
+ and the <c>Common Test</c> application (for more information, see
+ section <seealso marker="install_chapter">Installation</seealso>
+ in the User's Guide). The program accepts different start flags.
+ Some flags trigger <c>ct_run</c> to start <c>Common Test</c> and
+ pass on data to it. Some flags start an Erlang node prepared for
+ running <c>Common Test</c> in a particular mode.</p>
+
+ <p>The interface function
+ <seealso marker="ct#run_test-1"><c>ct:run_test/1</c></seealso>,
+ corresponding to the <c>ct_run</c> program, is used for starting
+ <c>Common Test</c> from the Erlang shell (or an Erlang program).
+ For details, see the <seealso marker="ct"><c>ct</c></seealso>
+ manual page.</p>
<p><c>ct_run</c> also accepts Erlang emulator flags. These are used
- when <c>ct_run</c> calls <c>erl</c> to start the Erlang node
- (making it possible to e.g. add directories to the code server path,
- change the cookie on the node, start additional applications, etc).</p>
-
- <p>With the optional flag:</p>
- <pre>-erl_args</pre>
- <p>it's possible to divide the options on the <c>ct_run</c> command line into
- two groups, one that Common Test should process (those preceding <c>-erl_args</c>),
- and one it should completely ignore and pass on directly to the emulator
- (those following <c>-erl_args</c>). Options preceding <c>-erl_args</c> that Common Test
- doesn't recognize, also get passed on to the emulator untouched.
- By means of <c>-erl_args</c> the user may specify flags with the same name, but
+ when <c>ct_run</c> calls <c>erl</c> to start the Erlang node (this
+ makes it possible to add directories to the code server path,
+ change the cookie on the node, start more applications, and so on).</p>
+
+ <p>With the optional flag <c>-erl_args</c>, options on the <c>ct_run</c>
+ command line can be divided into two groups:</p>
+
+ <list type="bulleted">
+ <item>One group that <c>Common Test</c> is to process (those
+ preceding <c>-erl_args</c>).</item>
+ <item>One group that <c>Common Test</c> is to ignore and pass on
+ directly to the emulator (those following <c>-erl_args</c>).</item>
+ </list>
+
+ <p>Options preceding <c>-erl_args</c> that <c>Common Test</c>
+ does not recognize are also passed on to the emulator untouched.
+ By <c>-erl_args</c> the user can specify flags with the same name, but
with different destinations, on the <c>ct_run</c> command line.</p>
- <p>If <c>-pa</c> or <c>-pz</c> flags are specified in the Common Test group of options
- (preceding <c>-erl_args</c>), relative directories will be converted to
- absolute and re-inserted into the code path by Common Test (to avoid
- problems loading user modules when Common Test changes working directory
- during test runs). Common Test will however ignore <c>-pa</c> and <c>-pz</c> flags
- following <c>-erl_args</c> on the command line. These directories are added
- to the code path normally (i.e. on specified form)</p>
-
- <p>Exit status is set before the program ends. Value <c>0</c> indicates a successful
- test result, <c>1</c> indicates one or more failed or auto-skipped test cases, and
- <c>2</c> indicates test execution failure.</p>
-
- <p>If <c>ct_run</c> is called with option:</p>
- <pre>-help</pre>
- <p>it prints all valid start flags to stdout.</p>
- </description>
+ <p>If flags <c>-pa</c> or <c>-pz</c> are specified in the
+ <c>Common Test</c> group of options (preceding <c>-erl_args</c>),
+ relative directories are converted to absolute and reinserted into
+ the code path by <c>Common Test</c>. This is to avoid problems
+ loading user modules when <c>Common Test</c> changes working directory
+ during test runs. However, <c>Common Test</c> ignores flags <c>-pa</c>
+ and <c>-pz</c> following <c>-erl_args</c> on the command line. These
+ directories are added to the code path normally (that is, on specified
+ form).</p>
+
+ <p>Exit status is set before the program ends. Value <c>0</c> indicates
+ a successful test result, <c>1</c> indicates one or more failed or
+ auto-skipped test cases, and <c>2</c> indicates test execution failure.</p>
+
+ <p>If <c>ct_run</c> is called with option <c>-help</c>, it prints all
+ valid start flags to <c>stdout</c>.</p>
+ </description>
<section>
<marker id="ct_run"></marker>
- <title>Run tests from command line</title>
+ <title>Run Tests from Command Line</title>
<pre>
- ct_run -dir TestDir1 TestDir2 .. TestDirN |
- [-dir TestDir] -suite Suite1 Suite2 .. SuiteN
- [-group Groups1 Groups2 .. GroupsN] [-case Case1 Case2 .. CaseN]
- [-step [config | keep_inactive]]
- [-config ConfigFile1 ConfigFile2 .. ConfigFileN]
- [-userconfig CallbackModule1 ConfigString1 and CallbackModule2
- ConfigString2 and .. CallbackModuleN ConfigStringN]
- [-decrypt_key Key] | [-decrypt_file KeyFile]
- [-label Label]
- [-logdir LogDir]
- [-logopts LogOpts]
- [-verbosity GenVLevel | [Category1 VLevel1 and
- Category2 VLevel2 and .. CategoryN VLevelN]]
- [-silent_connections [ConnType1 ConnType2 .. ConnTypeN]]
- [-stylesheet CSSFile]
- [-cover CoverCfgFile]
- [-cover_stop Bool]
- [-event_handler EvHandler1 EvHandler2 .. EvHandlerN] |
- [-event_handler_init EvHandler1 InitArg1 and
- EvHandler2 InitArg2 and .. EvHandlerN InitArgN]
- [-include InclDir1 InclDir2 .. InclDirN]
- [-no_auto_compile]
- [-abort_if_missing_suites]
- [-muliply_timetraps Multiplier]
- [-scale_timetraps]
- [-create_priv_dir auto_per_run | auto_per_tc | manual_per_tc]
- [-repeat N] |
- [-duration HHMMSS [-force_stop [skip_rest]]] |
- [-until [YYMoMoDD]HHMMSS [-force_stop [skip_rest]]]
- [-basic_html]
- [-ct_hooks CTHModule1 CTHOpts1 and CTHModule2 CTHOpts2 and ..
- CTHModuleN CTHOptsN]
- [-exit_status ignore_config]
- [-help]
- </pre>
+ ct_run -dir TestDir1 TestDir2 .. TestDirN |
+ [-dir TestDir] -suite Suite1 Suite2 .. SuiteN
+ [-group Groups1 Groups2 .. GroupsN] [-case Case1 Case2 .. CaseN]
+ [-step [config | keep_inactive]]
+ [-config ConfigFile1 ConfigFile2 .. ConfigFileN]
+ [-userconfig CallbackModule1 ConfigString1 and CallbackModule2
+ ConfigString2 and .. CallbackModuleN ConfigStringN]
+ [-decrypt_key Key] | [-decrypt_file KeyFile]
+ [-label Label]
+ [-logdir LogDir]
+ [-logopts LogOpts]
+ [-verbosity GenVLevel | [Category1 VLevel1 and
+ Category2 VLevel2 and .. CategoryN VLevelN]]
+ [-silent_connections [ConnType1 ConnType2 .. ConnTypeN]]
+ [-stylesheet CSSFile]
+ [-cover CoverCfgFile]
+ [-cover_stop Bool]
+ [-event_handler EvHandler1 EvHandler2 .. EvHandlerN] |
+ [-event_handler_init EvHandler1 InitArg1 and
+ EvHandler2 InitArg2 and .. EvHandlerN InitArgN]
+ [-include InclDir1 InclDir2 .. InclDirN]
+ [-no_auto_compile]
+ [-abort_if_missing_suites]
+ [-muliply_timetraps Multiplier]
+ [-scale_timetraps]
+ [-create_priv_dir auto_per_run | auto_per_tc | manual_per_tc]
+ [-repeat N] |
+ [-duration HHMMSS [-force_stop [skip_rest]]] |
+ [-until [YYMoMoDD]HHMMSS [-force_stop [skip_rest]]]
+ [-basic_html]
+ [-no_esc_chars]
+ [-ct_hooks CTHModule1 CTHOpts1 and CTHModule2 CTHOpts2 and ..
+ CTHModuleN CTHOptsN]
+ [-exit_status ignore_config]
+ [-help]</pre>
</section>
+
<section>
- <title>Run tests using test specification</title>
+ <title>Run Tests using Test Specification</title>
<pre>
- ct_run -spec TestSpec1 TestSpec2 .. TestSpecN
- [-join_specs]
- [-config ConfigFile1 ConfigFile2 .. ConfigFileN]
- [-userconfig CallbackModule1 ConfigString1 and CallbackModule2
- ConfigString2 and .. and CallbackModuleN ConfigStringN]
- [-decrypt_key Key] | [-decrypt_file KeyFile]
- [-label Label]
- [-logdir LogDir]
- [-logopts LogOpts]
- [-verbosity GenVLevel | [Category1 VLevel1 and
- Category2 VLevel2 and .. CategoryN VLevelN]]
- [-allow_user_terms]
- [-silent_connections [ConnType1 ConnType2 .. ConnTypeN]]
- [-stylesheet CSSFile]
- [-cover CoverCfgFile]
- [-cover_stop Bool]
- [-event_handler EvHandler1 EvHandler2 .. EvHandlerN] |
- [-event_handler_init EvHandler1 InitArg1 and
- EvHandler2 InitArg2 and .. EvHandlerN InitArgN]
- [-include InclDir1 InclDir2 .. InclDirN]
- [-no_auto_compile]
- [-abort_if_missing_suites]
- [-muliply_timetraps Multiplier]
- [-scale_timetraps]
- [-create_priv_dir auto_per_run | auto_per_tc | manual_per_tc]
- [-repeat N] |
- [-duration HHMMSS [-force_stop [skip_rest]]] |
- [-until [YYMoMoDD]HHMMSS [-force_stop [skip_rest]]]
- [-basic_html]
- [-ct_hooks CTHModule1 CTHOpts1 and CTHModule2 CTHOpts2 and ..
- CTHModuleN CTHOptsN]
- [-exit_status ignore_config]
- </pre>
+ ct_run -spec TestSpec1 TestSpec2 .. TestSpecN
+ [-join_specs]
+ [-config ConfigFile1 ConfigFile2 .. ConfigFileN]
+ [-userconfig CallbackModule1 ConfigString1 and CallbackModule2
+ ConfigString2 and .. and CallbackModuleN ConfigStringN]
+ [-decrypt_key Key] | [-decrypt_file KeyFile]
+ [-label Label]
+ [-logdir LogDir]
+ [-logopts LogOpts]
+ [-verbosity GenVLevel | [Category1 VLevel1 and
+ Category2 VLevel2 and .. CategoryN VLevelN]]
+ [-allow_user_terms]
+ [-silent_connections [ConnType1 ConnType2 .. ConnTypeN]]
+ [-stylesheet CSSFile]
+ [-cover CoverCfgFile]
+ [-cover_stop Bool]
+ [-event_handler EvHandler1 EvHandler2 .. EvHandlerN] |
+ [-event_handler_init EvHandler1 InitArg1 and
+ EvHandler2 InitArg2 and .. EvHandlerN InitArgN]
+ [-include InclDir1 InclDir2 .. InclDirN]
+ [-no_auto_compile]
+ [-abort_if_missing_suites]
+ [-muliply_timetraps Multiplier]
+ [-scale_timetraps]
+ [-create_priv_dir auto_per_run | auto_per_tc | manual_per_tc]
+ [-repeat N] |
+ [-duration HHMMSS [-force_stop [skip_rest]]] |
+ [-until [YYMoMoDD]HHMMSS [-force_stop [skip_rest]]]
+ [-basic_html]
+ [-no_esc_chars]
+ [-ct_hooks CTHModule1 CTHOpts1 and CTHModule2 CTHOpts2 and ..
+ CTHModuleN CTHOptsN]
+ [-exit_status ignore_config]</pre>
</section>
+
<section>
- <title>Run tests in web based GUI</title>
+ <title>Run Tests in Web-Based GUI</title>
<pre>
- ct_run -vts [-browser Browser]
- [-dir TestDir1 TestDir2 .. TestDirN] |
- [[dir TestDir] -suite Suite [[-group Group] [-case Case]]]
- [-config ConfigFile1 ConfigFile2 .. ConfigFileN]
- [-userconfig CallbackModule1 ConfigString1 and CallbackModule2
- ConfigString2 and .. and CallbackModuleN ConfigStringN]
- [-logopts LogOpts]
- [-verbosity GenVLevel | [Category1 VLevel1 and
- Category2 VLevel2 and .. CategoryN VLevelN]]
- [-decrypt_key Key] | [-decrypt_file KeyFile]
- [-include InclDir1 InclDir2 .. InclDirN]
- [-no_auto_compile]
- [-abort_if_missing_suites]
- [-muliply_timetraps Multiplier]
- [-scale_timetraps]
- [-create_priv_dir auto_per_run | auto_per_tc | manual_per_tc]
- [-basic_html]</pre>
+ ct_run -vts [-browser Browser]
+ [-dir TestDir1 TestDir2 .. TestDirN] |
+ [[dir TestDir] -suite Suite [[-group Group] [-case Case]]]
+ [-config ConfigFile1 ConfigFile2 .. ConfigFileN]
+ [-userconfig CallbackModule1 ConfigString1 and CallbackModule2
+ ConfigString2 and .. and CallbackModuleN ConfigStringN]
+ [-logopts LogOpts]
+ [-verbosity GenVLevel | [Category1 VLevel1 and
+ Category2 VLevel2 and .. CategoryN VLevelN]]
+ [-decrypt_key Key] | [-decrypt_file KeyFile]
+ [-include InclDir1 InclDir2 .. InclDirN]
+ [-no_auto_compile]
+ [-abort_if_missing_suites]
+ [-muliply_timetraps Multiplier]
+ [-scale_timetraps]
+ [-create_priv_dir auto_per_run | auto_per_tc | manual_per_tc]
+ [-basic_html]
+ [-no_esc_chars]</pre>
</section>
+
<section>
- <title>Refresh the HTML index files</title>
+ <title>Refresh HTML Index Files</title>
<pre>
- ct_run -refresh_logs [-logdir LogDir] [-basic_html]</pre>
+ ct_run -refresh_logs [-logdir LogDir] [-basic_html]</pre>
</section>
+
<section>
- <title>Run CT in interactive mode</title>
+ <title>Run Common Test in Interactive Mode</title>
<pre>
- ct_run -shell
- [-config ConfigFile1 ConfigFile2 ... ConfigFileN]
- [-userconfig CallbackModule1 ConfigString1 and CallbackModule2
- ConfigString2 and .. and CallbackModuleN ConfigStringN]
- [-decrypt_key Key] | [-decrypt_file KeyFile]</pre>
+ ct_run -shell
+ [-config ConfigFile1 ConfigFile2 ... ConfigFileN]
+ [-userconfig CallbackModule1 ConfigString1 and CallbackModule2
+ ConfigString2 and .. and CallbackModuleN ConfigStringN]
+ [-decrypt_key Key] | [-decrypt_file KeyFile]</pre>
</section>
+
<section>
- <title>Start a Common Test Master node</title>
+ <title>Start a Common Test Master Node</title>
<pre>
- ct_run -ctmaster</pre>
+ ct_run -ctmaster</pre>
</section>
<section>
- <title>See also</title>
- <p>Please read the <seealso marker="run_test_chapter">Running Test Suites</seealso>
- chapter in the Common Test User's Guide for information about the meaning of the
- different start flags.</p>
+ <title>See Also</title>
+ <p>For information about the start flags, see section
+ <seealso marker="run_test_chapter">Running Tests and Analyzing
+ Results</seealso> in the User's Guide.</p>
</section>
</comref>
+
diff --git a/lib/common_test/doc/src/ct_slave.xml b/lib/common_test/doc/src/ct_slave.xml
new file mode 100644
index 0000000000..9d9aa50051
--- /dev/null
+++ b/lib/common_test/doc/src/ct_slave.xml
@@ -0,0 +1,221 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE erlref SYSTEM "erlref.dtd">
+
+<erlref>
+ <header>
+ <copyright>
+ <year>2010</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>ct_slave</title>
+ <prepared></prepared>
+ <responsible></responsible>
+ <docno></docno>
+ <approved></approved>
+ <checked></checked>
+ <date></date>
+ <rev>A</rev>
+ <file>ct_slave.xml</file>
+ </header>
+ <module>ct_slave</module>
+ <modulesummary>Common Test framework functions for starting and stopping
+ nodes for Large-Scale Testing.</modulesummary>
+
+ <description>
+
+ <p><c>Common Test</c> framework functions for starting and stopping nodes
+ for Large-Scale Testing.</p>
+
+ <p>This module exports functions used by the <c>Common Test</c>
+ Master to start and stop "slave" nodes. It is the default callback
+ module for the <c>{init, node_start}</c> term in the Test
+ Specification.</p>
+
+ </description>
+
+ <funcs>
+ <func>
+ <name>start(Node) -&gt; Result</name>
+ <fsummary>Starts an Erlang node with name Node on the local
+ host.</fsummary>
+ <type>
+ <v>Node = atom()</v>
+ <v>Result = {ok, NodeName} | {error, Reason, NodeName}</v>
+ <v>Reason = already_started | started_not_connected | boot_timeout | init_timeout | startup_timeout | not_alive</v>
+ <v>NodeName = atom()</v>
+ </type>
+ <desc><marker id="start-1"/>
+ <p>Starts an Erlang node with name <c>Node</c> on the local host.</p>
+
+ <p>See also
+ <seealso marker="#start-3"><c>ct_slave:start/3</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>start(HostOrNode, NodeOrOpts) -&gt; Result</name>
+ <fsummary>Starts an Erlang node with default options on a specified
+ host, or on the local host with specified options.</fsummary>
+ <type>
+ <v>HostOrNode = atom()</v>
+ <v>NodeOrOpts = atom() | list()</v>
+ <v>Result = {ok, NodeName} | {error, Reason, NodeName}</v>
+ <v>Reason = already_started | started_not_connected | boot_timeout | init_timeout | startup_timeout | not_alive</v>
+ <v>NodeName = atom()</v>
+ </type>
+ <desc><marker id="start-2"/>
+ <p>Starts an Erlang node with default options on a specified host, or
+ on the local host with specified options. That is, the call is
+ interpreted as <c>start(Host, Node)</c> when the second argument is
+ atom-valued and <c>start(Node, Opts)</c> when it is list-valued.</p>
+
+ <p>See also
+ <seealso marker="#start-3"><c>ct_slave:start/3</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>start(Host, Node, Opts) -&gt; Result</name>
+ <fsummary>Starts an Erlang node with name Node on host Host as
+ specified by the combination of options in Opts.</fsummary>
+ <type>
+ <v>Node = atom()</v>
+ <v>Host = atom()</v>
+ <v>Opts = [OptTuples]</v>
+ <v>OptTuples = {username, Username} | {password, Password} | {boot_timeout, BootTimeout} | {init_timeout, InitTimeout} | {startup_timeout, StartupTimeout} | {startup_functions, StartupFunctions} | {monitor_master, Monitor} | {kill_if_fail, KillIfFail} | {erl_flags, ErlangFlags} | {env, [{EnvVar, Value}]}</v>
+ <v>Username = string()</v>
+ <v>Password = string()</v>
+ <v>BootTimeout = integer()</v>
+ <v>InitTimeout = integer()</v>
+ <v>StartupTimeout = integer()</v>
+ <v>StartupFunctions = [StartupFunctionSpec]</v>
+ <v>StartupFunctionSpec = {Module, Function, Arguments}</v>
+ <v>Module = atom()</v>
+ <v>Function = atom()</v>
+ <v>Arguments = [term]</v>
+ <v>Monitor = bool()</v>
+ <v>KillIfFail = bool()</v>
+ <v>ErlangFlags = string()</v>
+ <v>EnvVar = string()</v>
+ <v>Value = string()</v>
+ <v>Result = {ok, NodeName} | {error, Reason, NodeName}</v>
+ <v>Reason = already_started | started_not_connected | boot_timeout | init_timeout | startup_timeout | not_alive</v>
+ <v>NodeName = atom()</v>
+ </type>
+ <desc><marker id="start-3"/>
+ <p>Starts an Erlang node with name <c>Node</c> on host <c>Host</c> as
+ specified by the combination of options in <c>Opts</c>.</p>
+
+ <p>Options <c>Username</c> and <c>Password</c> are used to log on to the
+ remote host <c>Host</c>. <c>Username</c>, if omitted, defaults to
+ the current username. <c>Password</c> is empty by default.</p>
+
+ <p>A list of functions specified in option <c>Startup</c> are
+ executed after startup of the node. Notice that all used modules
+ are to be present in the code path on <c>Host</c>.</p>
+
+ <p>The time-outs are applied as follows:</p>
+
+ <taglist>
+ <tag><c>BootTimeout</c></tag>
+ <item><p>The time to start the Erlang node, in seconds. Defaults to
+ 3 seconds. If the node is not pingable within this time, the result
+ <c>{error, boot_timeout, NodeName}</c> is returned.</p></item>
+ <tag><c>InitTimeout</c></tag>
+ <item><p>The time to wait for the node until it calls the internal
+ callback function informing master about a successful startup.
+ Defaults to 1 second. In case of a timed out message, the result
+ <c>{error, init_timeout, NodeName}</c> is returned.</p></item>
+ <tag><c>StartupTimeout</c></tag>
+ <item><p>The time to wait until the node stops to run
+ <c>StartupFunctions</c>. Defaults to 1 second. If this time-out
+ occurs, the result <c>{error, startup_timeout, NodeName}</c> is
+ returned.</p></item>
+ </taglist>
+
+ <p><em>Options:</em></p>
+
+ <taglist>
+ <tag><c>monitor_master</c></tag>
+ <item><p>Specifies if the slave node is to be stopped if the
+ master node stops. Defaults to <c>false</c>.</p></item>
+ <tag><c>kill_if_fail</c></tag>
+ <item><p>Specifies if the slave node is to be killed if a time-out
+ occurs during initialization or startup. Defaults to <c>true</c>.
+ Notice that the node can also be still alive it the boot time-out
+ occurred, but it is not killed in this case.</p></item>
+ <tag><c>erlang_flags</c></tag>
+ <item><p>Specifies which flags are added to the parameters of the
+ executable <c>erl</c>.</p></item>
+ <tag><c>env</c></tag>
+ <item><p>Specifies a list of environment variables that will extend
+ the environment.</p></item>
+ </taglist>
+
+ <p><em>Special return values:</em></p>
+
+ <list type="bulleted">
+ <item><p><c>{error, already_started, NodeName}</c> if the node
+ with the specified name is already started on a specified
+ host.</p></item>
+ <item><p><c>{error, started_not_connected, NodeName}</c> if the
+ node is started, but not connected to the master node.</p></item>
+ <item><p><c>{error, not_alive, NodeName}</c> if the node on which
+ <seealso marker="#start-3"><c>ct_slave:start/3</c></seealso> is
+ called, is not alive. Notice that <c>NodeName</c> is the name of
+ the current node in this case.</p></item>
+ </list>
+ </desc>
+ </func>
+
+ <func>
+ <name>stop(Node) -&gt; Result</name>
+ <fsummary>Stops the running Erlang node with name Node on the local
+ host.</fsummary>
+ <type>
+ <v>Node = atom()</v>
+ <v>Result = {ok, NodeName} | {error, Reason, NodeName}</v>
+ <v>Reason = not_started | not_connected | stop_timeout</v>
+ </type>
+ <desc><marker id="stop-1"/>
+ <p>Stops the running Erlang node with name <c>Node</c> on the local
+ host.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>stop(Host, Node) -&gt; Result</name>
+ <fsummary>Stops the running Erlang node with name Node on host
+ Host.</fsummary>
+ <type>
+ <v>Host = atom()</v>
+ <v>Node = atom()</v>
+ <v>Result = {ok, NodeName} | {error, Reason, NodeName}</v>
+ <v>Reason = not_started | not_connected | stop_timeout</v>
+ <v>NodeName = atom()</v>
+ </type>
+ <desc><marker id="stop-2"/>
+ <p>Stops the running Erlang node with name <c>Node</c> on host
+ <c>Host</c>.</p>
+ </desc>
+ </func>
+ </funcs>
+
+</erlref>
+
+
diff --git a/lib/common_test/doc/src/ct_snmp.xml b/lib/common_test/doc/src/ct_snmp.xml
new file mode 100644
index 0000000000..0a5e52b16c
--- /dev/null
+++ b/lib/common_test/doc/src/ct_snmp.xml
@@ -0,0 +1,523 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE erlref SYSTEM "erlref.dtd">
+
+<erlref>
+ <header>
+ <copyright>
+ <year>2010</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>ct_snmp</title>
+ <prepared></prepared>
+ <responsible></responsible>
+ <docno></docno>
+ <approved></approved>
+ <checked></checked>
+ <date></date>
+ <rev>A</rev>
+ <file>ct_snmp.xml</file>
+ </header>
+ <module>ct_snmp</module>
+ <modulesummary>Common Test user interface module for the SNMP application.</modulesummary>
+
+ <description>
+
+ <p><c>Common Test</c> user interface module for the <c>SNMP</c>
+ application.</p>
+
+ <p>The purpose of this module is to simplify SNMP configuration for the
+ test case writer. Many test cases can use default values for common
+ operations and then no SNMP configuration files need to be supplied.
+ When it is necessary to change particular configuration parameters, a
+ subset of the relevant SNMP configuration files can be passed to
+ <c>ct_snmp</c> by <c>Common Test</c> configuration files. For more
+ specialized configuration parameters, a simple SNMP configuration file
+ can be placed in the test suite data directory. To simplify the test
+ suite, <c>Common Test</c> keeps track of some of the SNMP manager
+ information. This way the test suite does not have to handle as many
+ input parameters as if it had to interface wthe OTP SNMP manager
+ directly.</p>
+
+ <p><em>Configurable SNMP Manager and Agent Parameters:</em></p>
+
+ <p>Manager configuration:</p>
+
+ <taglist>
+ <tag><c>[{start_manager, boolean()}</c></tag>
+ <item><p>Optional. Default is <c>true</c>.</p></item>
+ <tag><c>{users, [{user_name(), [call_back_module(), user_data()]}]}</c></tag>
+ <item><p>Optional.</p></item>
+ <tag><c>{usm_users, [{usm_user_name(), [usm_config()]}]}</c></tag>
+ <item><p>Optional. SNMPv3 only.</p></item>
+ <tag><c>{managed_agents,[{agent_name(), [user_name(), agent_ip(), agent_port(), [agent_config()]]}]}</c></tag>
+ <item><p><c>managed_agents</c> is optional.</p></item>
+ <tag><c>{max_msg_size, integer()}</c></tag>
+ <item><p>Optional. Default is <c>484</c>.</p></item>
+ <tag><c>{mgr_port, integer()}</c></tag>
+ <item><p>Optional. Default is <c>5000</c>.</p></item>
+ <tag><c>{engine _id, string()}</c></tag>
+ <item><p>Optional. Default is <c>"mgrEngine"</c>.</p></item>
+ </taglist>
+
+ <p>Agent configuration:</p>
+
+ <taglist>
+ <tag><c>{start_agent, boolean()}</c></tag>
+ <item><p>Optional. Default is <c>false</c>.</p></item>
+ <tag><c>{agent_sysname, string()}</c></tag>
+ <item><p>Optional. Default is <c>"ct_test"</c>.</p></item>
+ <tag><c>{agent_manager_ip, manager_ip()}</c></tag>
+ <item><p>Optional. Default is <c>localhost</c>.</p></item>
+ <tag><c>{agent_vsns, list()}</c></tag>
+ <item><p>Optional. Default is <c>[v2]</c>.</p></item>
+ <tag><c>{agent_trap_udp, integer()}</c></tag>
+ <item><p>Optional. Default is <c>5000</c>.</p></item>
+ <tag><c>{agent_udp, integer()}</c></tag>
+ <item><p>Optional. Default is <c>4000</c>.</p></item>
+ <tag><c>{agent_notify_type, atom()}</c></tag>
+ <item><p>Optional. Default is <c>trap</c>.</p></item>
+ <tag><c>{agent_sec_type, sec_type()}</c></tag>
+ <item><p>Optional. Default is <c>none</c>.</p></item>
+ <tag><c>{agent_passwd, string()}</c></tag>
+ <item><p>Optional. Default is <c>""</c>.</p></item>
+ <tag><c>{agent_engine_id, string()}</c></tag>
+ <item><p>Optional. Default is <c>"agentEngine"</c>.</p></item>
+ <tag><c>{agent_max_msg_size, string()}</c></tag>
+ <item><p>Optional. Default is <c>484</c>.</p></item>
+ </taglist>
+
+ <p>The following parameters represents the SNMP configuration files
+ <c>context.conf</c>, <c>standard.conf</c>, <c>community.conf</c>,
+ <c>vacm.conf</c>, <c>usm.conf</c>, <c>notify.conf</c>,
+ <c>target_addr.conf</c>, and <c>target_params.conf</c>. Notice that
+ all values in <c>agent.conf</c> can be modified by the parameters
+ listed above. All these configuration files have default values set by
+ the <c>SNMP</c> application. These values can be overridden by suppling
+ a list of valid configuration values or a file located in the test
+ suites data directory, which can produce a list of valid configuration
+ values if you apply function <c>file:consult/1</c> to the file.</p>
+
+ <taglist>
+ <tag><c>{agent_contexts, [term()] | {data_dir_file, rel_path()}}</c></tag>
+ <item><p>Optional.</p></item>
+ <tag><c>{agent_community, [term()] | {data_dir_file, rel_path()}}</c></tag>
+ <item><p>Optional.</p></item>
+ <tag><c>{agent_sysinfo, [term()] | {data_dir_file, rel_path()}}</c></tag>
+ <item><p>Optional.</p></item>
+ <tag><c>{agent_vacm, [term()] | {data_dir_file, rel_path()}}</c></tag>
+ <item><p>Optional.</p></item>
+ <tag><c>{agent_usm, [term()] | {data_dir_file, rel_path()}}</c></tag>
+ <item><p>Optional.</p></item>
+ <tag><c>{agent_notify_def, [term()] | {data_dir_file, rel_path()}}</c></tag>
+ <item><p>Optional.</p></item>
+ <tag><c>{agent_target_address_def, [term()] | {data_dir_file, rel_path()}}</c></tag>
+ <item><p>Optional.</p></item>
+ <tag><c>{agent_target_param_def, [term()] | {data_dir_file, rel_path()}}</c></tag>
+ <item><p>Optional.</p></item>
+ </taglist>
+
+ <p>Parameter <c>MgrAgentConfName</c> in the functions is to be a name
+ you allocate in your test suite using a <c>require</c> statement.
+ Example (where <c>MgrAgentConfName = snmp_mgr_agent</c>):</p>
+
+ <pre>
+ suite() -&gt; [{require, snmp_mgr_agent, snmp}].</pre>
+
+ <p>or</p>
+
+ <pre>
+ ct:require(snmp_mgr_agent, snmp).</pre>
+
+ <p>Notice that USM users are needed for SNMPv3 configuration and are
+ not to be confused with users.</p>
+
+ <p>SNMP traps, inform, and report messages are handled by the user
+ callback module. For details, see the
+ <seealso marker="snmp:index"><c>SNMP</c></seealso> application.</p>
+
+ <p>It is recommended to use the <c>.hrl</c> files created by the
+ Erlang/OTP MIB compiler to define the Object Identifiers (OIDs).
+ For example, to get the Erlang node name from <c>erlNodeTable</c>
+ in the OTP-MIB:</p>
+
+ <pre>
+ Oid = ?erlNodeEntry ++ [?erlNodeName, 1]</pre>
+
+ <p>Furthermore, values can be set for <c>SNMP</c> application configuration
+ parameters, <c>config</c>, <c>server</c>, <c>net_if</c>, and so on (for
+ a list of valid parameters and types, see the <seealso marker="snmp:users_guide"><c>User's Guide for the SNMP application</c></seealso>). This is
+ done by defining a configuration data variable on the following form:</p>
+
+ <pre>
+ {snmp_app, [{manager, [snmp_app_manager_params()]},
+ {agent, [snmp_app_agent_params()]}]}.</pre>
+
+ <p>A name for the data must be allocated in the suite using
+ <c>require</c> (see the example above). Pass this name as argument
+ <c>SnmpAppConfName</c> to
+ <seealso marker="#start-3"><c>ct_snmp:start/3</c></seealso>.
+ <c>ct_snmp</c> specifies default values for some <c>SNMP</c> application
+ configuration parameters (such as <c>{verbosity,trace}</c> for parameter
+ <c>config</c>). This set of defaults is merged with the parameters
+ specified by the user. The user values override <c>ct_snmp</c>
+ defaults.</p>
+
+ </description>
+
+ <section>
+ <title>Data Types</title>
+ <marker id="types"/>
+ <taglist>
+ <tag><c>agent_config() = {Item, Value}</c></tag>
+ <item><marker id="type-agent_config"/> </item>
+ <tag><c>agent_ip() = ip()</c></tag>
+ <item><marker id="type-agent_ip"/> </item>
+ <tag><c>agent_name() = atom()</c></tag>
+ <item><marker id="type-agent_name"/> </item>
+ <tag><c>agent_port() = integer()</c></tag>
+ <item><marker id="type-agent_port"/> </item>
+ <tag><c>call_back_module() = atom()</c></tag>
+ <item><marker id="type-call_back_module"/> </item>
+ <tag><c>error_index() = integer()</c></tag>
+ <item><marker id="type-error_index"/> </item>
+ <tag><c>error_status() = noError | atom()</c></tag>
+ <item><marker id="type-error_status"/> </item>
+ <tag><c>ip() = string() | {integer(), integer(), integer(), integer()}</c></tag>
+ <item><marker id="type-ip"/> </item>
+ <tag><c>manager_ip() = ip()</c></tag>
+ <item><marker id="type-manager_ip"/> </item>
+ <tag><c>oid() = [byte()]</c></tag>
+ <item><marker id="type-oid"/> </item>
+ <tag><c>oids() = [oid()]</c></tag>
+ <item><marker id="type-oids"/> </item>
+ <tag><c>rel_path() = string()</c></tag>
+ <item><marker id="type-rel_path"/> </item>
+ <tag><c>sec_type() = none | minimum | semi</c></tag>
+ <item><marker id="type-sec_type"/> </item>
+ <tag><c>snmp_app_agent_params() = term()</c></tag>
+ <item><marker id="type-snmp_app_agent_params"/> </item>
+ <tag><c>snmp_app_manager_params() = term()</c></tag>
+ <item><marker id="type-snmp_app_manager_params"/> </item>
+ <tag><c>snmpreply() = {error_status(), error_index(), varbinds()}</c></tag>
+ <item><marker id="type-snmpreply"/> </item>
+ <tag><c>user_data() = term()</c></tag>
+ <item><marker id="type-user_data"/> </item>
+ <tag><c>user_name() = atom()</c></tag>
+ <item><marker id="type-user_name"/> </item>
+ <tag><c>usm_config() = {Item, Value}</c></tag>
+ <item><marker id="type-usm_config"/> </item>
+ <tag><c>usm_user_name() = string()</c></tag>
+ <item><marker id="type-usm_user_name"/> </item>
+ <tag><c>value_type() = o('OBJECT IDENTIFIER') | i('INTEGER') | u('Unsigned32') | g('Unsigned32') | s('OCTET STRING')</c></tag>
+ <item><marker id="type-value_type"/> </item>
+ <tag><c>var_and_val() = {oid(), value_type(), value()}</c></tag>
+ <item><marker id="type-var_and_val"/> </item>
+ <tag><c>varbind() = term()</c></tag>
+ <item><marker id="type-varbind"/> </item>
+ <tag><c>varbinds() = [varbind()]</c></tag>
+ <item><marker id="type-varbinds"/> </item>
+ <tag><c>varsandvals() = [var_and_val()]</c></tag>
+ <item><marker id="type-varsandvals"/> </item>
+ </taglist>
+ <p>These data types are described in the documentation for
+ the <seealso marker="snmp:index"><c>SNMP</c></seealso> application.</p>
+ </section>
+
+ <funcs>
+ <func>
+ <name>get_next_values(Agent, Oids, MgrAgentConfName) -&gt; SnmpReply</name>
+ <fsummary>Issues a synchronous SNMP get next request.</fsummary>
+ <type>
+ <v>Agent = agent_name()</v>
+ <v>Oids = oids()</v>
+ <v>MgrAgentConfName = atom()</v>
+ <v>SnmpReply = snmpreply()</v>
+ </type>
+ <desc><marker id="get_next_values-3"/>
+ <p>Issues a synchronous SNMP <c>get next</c> request.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>get_values(Agent, Oids, MgrAgentConfName) -&gt; SnmpReply</name>
+ <fsummary>Issues a synchronous SNMP get request.</fsummary>
+ <type>
+ <v>Agent = agent_name()</v>
+ <v>Oids = oids()</v>
+ <v>MgrAgentConfName = atom()</v>
+ <v>SnmpReply = snmpreply()</v>
+ </type>
+ <desc><marker id="get_values-3"/>
+ <p>Issues a synchronous SNMP <c>get</c> request.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>load_mibs(Mibs) -&gt; ok | {error, Reason}</name>
+ <fsummary>Loads the MIBs into agent snmp_master_agent.</fsummary>
+ <type>
+ <v>Mibs = [MibName]</v>
+ <v>MibName = string()</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc><marker id="load_mibs-1"/>
+ <p>Loads the MIBs into agent <c>snmp_master_agent</c>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>register_agents(MgrAgentConfName, ManagedAgents) -&gt; ok | {error, Reason}</name>
+ <fsummary>Explicitly instructs the manager to handle this
+ agent.</fsummary>
+ <type>
+ <v>MgrAgentConfName = atom()</v>
+ <v>ManagedAgents = [agent()]</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc><marker id="register_agents-2"/>
+ <p>Explicitly instructs the manager to handle this agent. Corresponds
+ to making an entry in <c>agents.conf</c>.</p>
+
+ <p>This function tries to register the specified managed agents, without
+ checking if any of them exist. To change a registered managed agent,
+ the agent must first be unregistered.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>register_users(MgrAgentConfName, Users) -&gt; ok | {error, Reason}</name>
+ <fsummary>Registers the manager entity (=user) responsible for specific
+ agent(s).</fsummary>
+ <type>
+ <v>MgrAgentConfName = atom()</v>
+ <v>Users = [user()]</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc><marker id="register_users-2"/>
+ <p>Registers the manager entity (=user) responsible for specific
+ agent(s). Corresponds to making an entry in <c>users.conf</c>.</p>
+
+ <p>This function tries to register the specified users, without checking
+ if any of them exist. To change a registered user, the user must
+ first be unregistered.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>register_usm_users(MgrAgentConfName, UsmUsers) -&gt; ok | {error, Reason}</name>
+ <fsummary>Explicitly instructs the manager to handle this USM user.</fsummary>
+ <type>
+ <v>MgrAgentConfName = atom()</v>
+ <v>UsmUsers = [usm_user()]</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc><marker id="register_usm_users-2"/>
+ <p>Explicitly instructs the manager to handle this USM user.
+ Corresponds to making an entry in <c>usm.conf</c>.</p>
+
+ <p>This function tries to register the specified users, without checking
+ if any of them exist. To change a registered user, the user must
+ first be unregistered.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>set_info(Config) -&gt; [{Agent, OldVarsAndVals, NewVarsAndVals}]</name>
+ <fsummary>Returns a list of all successful set requests performed in the
+ test case in reverse order.</fsummary>
+ <type>
+ <v>Config = [{Key, Value}]</v>
+ <v>Agent = agent_name()</v>
+ <v>OldVarsAndVals = varsandvals()</v>
+ <v>NewVarsAndVals = varsandvals()</v>
+ </type>
+ <desc><marker id="set_info-1"/>
+ <p>Returns a list of all successful <c>set</c> requests performed in
+ the test case in reverse order. The list contains the involved user
+ and agent, the value before <c>set</c>, and the new value. This is
+ intended to simplify the cleanup in function <c>end_per_testcase</c>,
+ that is, the undoing of the <c>set</c> requests and their possible
+ side-effects.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>set_values(Agent, VarsAndVals, MgrAgentConfName, Config) -&gt; SnmpReply</name>
+ <fsummary>Issues a synchronous SNMP set request.</fsummary>
+ <type>
+ <v>Agent = agent_name()</v>
+ <v>Oids = oids()</v>
+ <v>MgrAgentConfName = atom()</v>
+ <v>Config = [{Key, Value}]</v>
+ <v>SnmpReply = snmpreply()</v>
+ </type>
+ <desc><marker id="set_values-4"/>
+ <p>Issues a synchronous SNMP <c>set</c> request.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>start(Config, MgrAgentConfName) -&gt; ok</name>
+ <fsummary>Equivalent to start(Config, MgrAgentConfName,
+ undefined).</fsummary>
+ <desc><marker id="start-2"/>
+ <p>Equivalent to
+ <seealso marker="#start-3"><c>ct_snmp:start(Config, MgrAgentConfName,
+ undefined)</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>start(Config, MgrAgentConfName, SnmpAppConfName) -&gt; ok</name>
+ <fsummary>Starts an SNMP manager and/or agent.</fsummary>
+ <type>
+ <v>Config = [{Key, Value}]</v>
+ <v>Key = atom()</v>
+ <v>Value = term()</v>
+ <v>MgrAgentConfName = atom()</v>
+ <v>SnmpConfName = atom()</v>
+ </type>
+ <desc><marker id="start-3"/>
+ <p>Starts an SNMP manager and/or agent. In the manager case,
+ registrations of users and agents, as specified by the configuration
+ <c>MgrAgentConfName</c>, are performed. When using SNMPv3, called
+ USM users are also registered. Users, <c>usm_users</c>, and
+ managed agents can also be registered later using
+ <seealso marker="#register_users-2"><c>ct_snmp:register_users/2</c></seealso>,
+ <seealso marker="#register_agents-2"><c>ct_snmp:register_agents/2</c></seealso>,
+ and
+ <seealso marker="#register_usm_users-2"><c>ct_snmp:register_usm_users/2</c></seealso>.</p>
+
+ <p>The agent started is called <c>snmp_master_agent</c>. Use
+ <seealso marker="#load_mibs-1"><c>ct_snmp:load_mibs/1</c></seealso>
+ to load MIBs into the agent.</p>
+
+ <p>With <c>SnmpAppConfName</c> SNMP applications can be configured
+ with parameters <c>config</c>, <c>mibs</c>, <c>net_if</c>, and so on.
+ The values are merged with (and possibly override) default values
+ set by <c>ct_snmp</c>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>stop(Config) -&gt; ok</name>
+ <fsummary>Stops the SNMP manager and/or agent, and removes all files
+ created.</fsummary>
+ <type>
+ <v>Config = [{Key, Value}]</v>
+ <v>Key = atom()</v>
+ <v>Value = term()</v>
+ </type>
+ <desc><marker id="stop-1"/>
+ <p>Stops the SNMP manager and/or agent, and removes all files
+ created.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>unload_mibs(Mibs) -&gt; ok | {error, Reason}</name>
+ <fsummary>Unloads the MIBs from agent snmp_master_agent.</fsummary>
+ <type>
+ <v>Mibs = [MibName]</v>
+ <v>MibName = string()</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc><marker id="unload_mibs-1"/>
+ <p>Unloads the MIBs from agent <c>snmp_master_agent</c>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>unregister_agents(MgrAgentConfName) -&gt; ok</name>
+ <fsummary>Unregisters all managed agents.</fsummary>
+ <type>
+ <v>MgrAgentConfName = atom()</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc><marker id="unregister_agents-1"/>
+ <p>Unregisters all managed agents.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>unregister_agents(MgrAgentConfName, ManagedAgents) -&gt; ok</name>
+ <fsummary>Unregisters the specified managed agents.</fsummary>
+ <type>
+ <v>MgrAgentConfName = atom()</v>
+ <v>ManagedAgents = [agent_name()]</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc><marker id="unregister_agents-2"/>
+ <p>Unregisters the specified managed agents.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>unregister_users(MgrAgentConfName) -&gt; ok</name>
+ <fsummary>Unregisters all users.</fsummary>
+ <type>
+ <v>MgrAgentConfName = atom()</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc><marker id="unregister_users-1"/>
+ <p>Unregisters all users.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>unregister_users(MgrAgentConfName, Users) -&gt; ok</name>
+ <fsummary>Unregisters the specified users.</fsummary>
+ <type>
+ <v>MgrAgentConfName = atom()</v>
+ <v>Users = [user_name()]</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc><marker id="unregister_users-2"/>
+ <p>Unregisters the specified users.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>unregister_usm_users(MgrAgentConfName) -&gt; ok</name>
+ <fsummary>Unregisters all USM users.</fsummary>
+ <type>
+ <v>MgrAgentConfName = atom()</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc><marker id="unregister_usm_users-1"/>
+ <p>Unregisters all USM users.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>unregister_usm_users(MgrAgentConfName, UsmUsers) -&gt; ok</name>
+ <fsummary>Unregisters the specified USM users.</fsummary>
+ <type>
+ <v>MgrAgentConfName = atom()</v>
+ <v>UsmUsers = [usm_user_name()]</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc><marker id="unregister_usm_users-2"/>
+ <p>Unregisters the specified USM users.</p>
+ </desc>
+ </func>
+ </funcs>
+
+</erlref>
+
+
diff --git a/lib/common_test/doc/src/ct_ssh.xml b/lib/common_test/doc/src/ct_ssh.xml
new file mode 100644
index 0000000000..d00737aa5a
--- /dev/null
+++ b/lib/common_test/doc/src/ct_ssh.xml
@@ -0,0 +1,1150 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE erlref SYSTEM "erlref.dtd">
+
+<erlref>
+ <header>
+ <copyright>
+ <year>2010</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>ct_ssh</title>
+ <prepared></prepared>
+ <responsible></responsible>
+ <docno></docno>
+ <approved></approved>
+ <checked></checked>
+ <date></date>
+ <rev>A</rev>
+ <file>ct_ssh.xml</file>
+ </header>
+ <module>ct_ssh</module>
+ <modulesummary>SSH/SFTP client module.</modulesummary>
+
+<description>
+
+ <p>SSH/SFTP client module.</p>
+
+ <p>This module uses application <c>SSH</c>, which provides detailed
+ information about, for example, functions, types, and options.</p>
+
+ <p>Argument <c>Server</c> in the SFTP functions is only to be used for
+ SFTP sessions that have been started on existing SSH connections
+ (that is, when the original connection type is <c>ssh</c>). Whenever
+ the connection type is <c>sftp</c>, use the SSH connection reference
+ only.</p>
+
+ <p>The following options are valid for specifying an SSH/SFTP
+ connection (that is, can be used as configuration elements):</p>
+
+ <pre>
+ [{ConnType, Addr},
+ {port, Port},
+ {user, UserName}
+ {password, Pwd}
+ {user_dir, String}
+ {public_key_alg, PubKeyAlg}
+ {connect_timeout, Timeout}
+ {key_cb, KeyCallbackMod}]</pre>
+
+ <p><c>ConnType = ssh | sftp</c>.</p>
+
+ <p>For other types, see
+ <seealso marker="ssh:ssh"><c>ssh:ssh(3)</c></seealso>.</p>
+
+ <p>All time-out parameters in <c>ct_ssh</c> functions are values in
+ milliseconds.</p>
+
+ </description>
+
+ <section>
+ <title>Data Types</title>
+ <marker id="types"/>
+ <taglist>
+ <tag><c>connection() = handle() | target_name()</c></tag>
+ <item><marker id="type-connection"/>
+ <p>For <c>target_name</c>, see module
+ <seealso marker="ct"><c>ct</c></seealso>.</p></item>
+
+ <tag><c>handle() = handle()</c></tag>
+ <item><marker id="type-handle"/>
+ <p>Handle for a specific SSH/SFTP connection, see module
+ <seealso marker="ct"><c>ct</c></seealso>.</p></item>
+
+ <tag><c>ssh_sftp_return() = term()</c></tag>
+ <item><marker id="type-ssh_sftp_return"/>
+ <p>Return value from an
+ <seealso marker="ssh:ssh_sftp"><c>ssh:ssh_sftp</c></seealso>
+ function.</p></item>
+ </taglist>
+ </section>
+
+ <funcs>
+ <func>
+ <name>apread(SSH, Handle, Position, Length) -&gt; Result</name>
+ <fsummary>For information and other types, see ssh_sftp(3).</fsummary>
+ <type>
+ <v>SSH = connection()</v>
+ <v>Result = ssh_sftp_return() | {error, Reason}</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc><marker id="apread-4"/>
+ <p>For information and other types, see
+ <seealso marker="ssh:ssh_sftp"><c>ssh:ssh_sftp(3)</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>apread(SSH, Server, Handle, Position, Length) -&gt; Result</name>
+ <fsummary>For information and other types, see ssh_sftp(3).</fsummary>
+ <type>
+ <v>SSH = connection()</v>
+ <v>Result = ssh_sftp_return() | {error, Reason}</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc><marker id="apread-5"/>
+ <p>For information and other types, see
+ <seealso marker="ssh:ssh_sftp"><c>ssh:ssh_sftp(3)</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>apwrite(SSH, Handle, Position, Data) -&gt; Result</name>
+ <fsummary>For information and other types, see ssh_sftp(3).</fsummary>
+ <type>
+ <v>SSH = connection()</v>
+ <v>Result = ssh_sftp_return() | {error, Reason}</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc><marker id="apwrite-4"/>
+ <p>For information and other types, see
+ <seealso marker="ssh:ssh_sftp"><c>ssh:ssh_sftp(3)</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>apwrite(SSH, Server, Handle, Position, Data) -&gt; Result</name>
+ <fsummary>For information and other types, see ssh_sftp(3).</fsummary>
+ <type>
+ <v>SSH = connection()</v>
+ <v>Result = ssh_sftp_return() | {error, Reason}</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc><marker id="apwrite-5"/>
+ <p>For information and other types, see
+ <seealso marker="ssh:ssh_sftp"><c>ssh:ssh_sftp(3)</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>aread(SSH, Handle, Len) -&gt; Result</name>
+ <fsummary>For information and other types, see ssh_sftp(3).</fsummary>
+ <type>
+ <v>SSH = connection()</v>
+ <v>Result = ssh_sftp_return() | {error, Reason}</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc><marker id="aread-3"/>
+ <p>For information and other types, see
+ <seealso marker="ssh:ssh_sftp"><c>ssh:ssh_sftp(3)</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>aread(SSH, Server, Handle, Len) -&gt; Result</name>
+ <fsummary>For inforamtion and other types, see ssh_sftp(3).</fsummary>
+ <type>
+ <v>SSH = connection()</v>
+ <v>Result = ssh_sftp_return() | {error, Reason}</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc><marker id="aread-4"/>
+ <p>For information and other types, see
+ <seealso marker="ssh:ssh_sftp"><c>ssh:ssh_sftp(3)</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>awrite(SSH, Handle, Data) -&gt; Result</name>
+ <fsummary>For information and other types, see ssh_sftp(3).</fsummary>
+ <type>
+ <v>SSH = connection()</v>
+ <v>Result = ssh_sftp_return() | {error, Reason}</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc><marker id="awrite-3"/>
+ <p>For information and other types, see
+ <seealso marker="ssh:ssh_sftp"><c>ssh:ssh_sftp(3)</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>awrite(SSH, Server, Handle, Data) -&gt; Result</name>
+ <fsummary>For information and other types, see ssh_sftp(3).</fsummary>
+ <type>
+ <v>SSH = connection()</v>
+ <v>Result = ssh_sftp_return() | {error, Reason}</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc><marker id="awrite-4"/>
+ <p>For information and other types, see
+ <seealso marker="ssh:ssh_sftp"><c>ssh:ssh_sftp(3)</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>close(SSH, Handle) -&gt; Result</name>
+ <fsummary>For information and other types, see ssh_sftp(3).</fsummary>
+ <type>
+ <v>SSH = connection()</v>
+ <v>Result = ssh_sftp_return() | {error, Reason}</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc><marker id="close-2"/>
+ <p>For information and other types, see
+ <seealso marker="ssh:ssh_sftp"><c>ssh:ssh_sftp(3)</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>close(SSH, Server, Handle) -&gt; Result</name>
+ <fsummary>For information and other types, see ssh_sftp(3).</fsummary>
+ <type>
+ <v>SSH = connection()</v>
+ <v>Result = ssh_sftp_return() | {error, Reason}</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc><marker id="close-3"/>
+ <p>For information and other types, see
+ <seealso marker="ssh:ssh_sftp"><c>ssh:ssh_sftp(3)</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>connect(KeyOrName) -&gt; {ok, Handle} | {error, Reason}</name>
+ <fsummary>Equivalent to connect(KeyOrName, host, []).</fsummary>
+ <desc><marker id="connect-1"/>
+ <p>Equivalent to
+ <seealso marker="#connect-3"><c>ct_ssh:connect(KeyOrName, host,
+ [])</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>connect(KeyOrName, ConnType) -&gt; {ok, Handle} | {error, Reason}</name>
+ <fsummary>Equivalent to connect(KeyOrName, ConnType, []).</fsummary>
+ <desc><marker id="connect-2"/>
+ <p>Equivalent to
+ <seealso marker="#connect-3"><c>ct_ssh:connect(KeyOrName, ConnType,
+ [])</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>connect(KeyOrName, ConnType, ExtraOpts) -&gt; {ok, Handle} | {error, Reason}</name>
+ <fsummary>Opens an SSH or SFTP connection using the information
+ associated with KeyOrName.</fsummary>
+ <type>
+ <v>KeyOrName = Key | Name</v>
+ <v>Key = atom()</v>
+ <v>Name = target_name()</v>
+ <v>ConnType = ssh | sftp | host</v>
+ <v>ExtraOpts = ssh_connect_options()</v>
+ <v>Handle = handle()</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc><marker id="connect-3"/>
+ <p>Opens an SSH or SFTP connection using the information associated
+ with <c>KeyOrName</c>.</p>
+
+ <p>If <c>Name</c> (an alias name for <c>Key</c>) is used to identify
+ the connection, this name can be used as connection reference for
+ subsequent calls. Only one open connection at a time associated
+ with <c>Name</c> is possible. If <c>Key</c> is used, the returned
+ handle must be used for subsequent calls (multiple connections can
+ be opened using the configuration data specified by <c>Key</c>).</p>
+
+ <p>For information on how to create a new <c>Name</c>, see
+ <seealso marker="ct#require-2"><c>ct:require/2</c></seealso>.</p>
+
+ <p>For <c>target_name</c>, see module
+ <seealso marker="ct"><c>ct</c></seealso>.</p>
+
+ <p><c>ConnType</c> always overrides the type specified in the
+ address tuple in the configuration data (and in <c>ExtraOpts</c>).
+ So it is possible to, for example, open an SFTP connection
+ directly using data originally specifying an SSH connection. Value
+ <c>host</c> means that the connection type specified by the host
+ option (either in the configuration data or in <c>ExtraOpts</c>)
+ is used.</p>
+
+ <p><c>ExtraOpts</c> (optional) are extra SSH options to be added to
+ the configuration data for <c>KeyOrName</c>. The extra options
+ override any existing options with the same key in the
+ configuration data. For details on valid SSH options, see
+ application <seealso marker="ssh:index"><c>SSH</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>del_dir(SSH, Name) -&gt; Result</name>
+ <fsummary>For information and other types, see ssh_sftp(3).</fsummary>
+ <type>
+ <v>SSH = connection()</v>
+ <v>Result = ssh_sftp_return() | {error, Reason}</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc><marker id="del_dir-2"/>
+ <p>For information and other types, see
+ <seealso marker="ssh:ssh_sftp"><c>ssh:ssh_sftp(3)</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>del_dir(SSH, Server, Name) -&gt; Result</name>
+ <fsummary>For information and other types, see ssh_sftp(3).</fsummary>
+ <type>
+ <v>SSH = connection()</v>
+ <v>Result = ssh_sftp_return() | {error, Reason}</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc><marker id="del_dir-3"/>
+ <p>For information and other types, see
+ <seealso marker="ssh:ssh_sftp"><c>ssh:ssh_sftp(3)</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>delete(SSH, Name) -&gt; Result</name>
+ <fsummary>For information and other types, see ssh_sftp(3).</fsummary>
+ <type>
+ <v>SSH = connection()</v>
+ <v>Result = ssh_sftp_return() | {error, Reason}</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc><marker id="delete-2"/>
+ <p>For information and other types, see
+ <seealso marker="ssh:ssh_sftp"><c>ssh:ssh_sftp(3)</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>delete(SSH, Server, Name) -&gt; Result</name>
+ <fsummary>For information and other types, see ssh_sftp(3).</fsummary>
+ <type>
+ <v>SSH = connection()</v>
+ <v>Result = ssh_sftp_return() | {error, Reason}</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc><marker id="delete-3"/>
+ <p>For information and other types, see
+ <seealso marker="ssh:ssh_sftp"><c>ssh:ssh_sftp(3)</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>disconnect(SSH) -&gt; ok | {error, Reason}</name>
+ <fsummary>Closes an SSH/SFTP connection.</fsummary>
+ <type>
+ <v>SSH = connection()</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc><marker id="disconnect-1"/>
+ <p>Closes an SSH/SFTP connection.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>exec(SSH, Command) -&gt; {ok, Data} | {error, Reason}</name>
+ <fsummary>Equivalent to exec(SSH, Command, DefaultTimeout).</fsummary>
+ <desc><marker id="exec-2"/>
+ <p>Equivalent to
+ <seealso marker="#exec-3"><c>ct_ssh:exec(SSH, Command,
+ DefaultTimeout)</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>exec(SSH, Command, Timeout) -&gt; {ok, Data} | {error, Reason}</name>
+ <fsummary>Requests server to perform Command.</fsummary>
+ <type>
+ <v>SSH = connection()</v>
+ <v>Command = string()</v>
+ <v>Timeout = integer()</v>
+ <v>Data = list()</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc><marker id="exec-3"/>
+ <p>Requests server to perform <c>Command</c>. A session channel is
+ opened automatically for the request. <c>Data</c> is received from
+ the server as a result of the command.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>exec(SSH, ChannelId, Command, Timeout) -&gt; {ok, Data} | {error, Reason}</name>
+ <fsummary>Requests server to perform Command.</fsummary>
+ <type>
+ <v>SSH = connection()</v>
+ <v>ChannelId = integer()</v>
+ <v>Command = string()</v>
+ <v>Timeout = integer()</v>
+ <v>Data = list()</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc><marker id="exec-4"/>
+ <p>Requests server to perform <c>Command</c>. A previously opened
+ session channel is used for the request. <c>Data</c> is received
+ from the server as a result of the command.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>get_file_info(SSH, Handle) -&gt; Result</name>
+ <fsummary>For information and other types, see ssh_sftp(3).</fsummary>
+ <type>
+ <v>SSH = connection()</v>
+ <v>Result = ssh_sftp_return() | {error, Reason}</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc><marker id="get_file_info-2"/>
+ <p>For information and other types, see
+ <seealso marker="ssh:ssh_sftp"><c>ssh:ssh_sftp(3)</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>get_file_info(SSH, Server, Handle) -&gt; Result</name>
+ <fsummary>For information and other types, see ssh_sftp(3).</fsummary>
+ <type>
+ <v>SSH = connection()</v>
+ <v>Result = ssh_sftp_return() | {error, Reason}</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc><marker id="get_file_info-3"/>
+ <p>For information and other types, see
+ <seealso marker="ssh:ssh_sftp"><c>ssh:ssh_sftp(3)</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>list_dir(SSH, Path) -&gt; Result</name>
+ <fsummary>For information and other types, see ssh_sftp(3).</fsummary>
+ <type>
+ <v>SSH = connection()</v>
+ <v>Result = ssh_sftp_return() | {error, Reason}</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc><marker id="list_dir-2"/>
+ <p>For information and other types, see
+ <seealso marker="ssh:ssh_sftp"><c>ssh:ssh_sftp(3)</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>list_dir(SSH, Server, Path) -&gt; Result</name>
+ <fsummary>For information and other types, see ssh_sftp(3).</fsummary>
+ <type>
+ <v>SSH = connection()</v>
+ <v>Result = ssh_sftp_return() | {error, Reason}</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc><marker id="list_dir-3"/>
+ <p>For information and other types, see
+ <seealso marker="ssh:ssh_sftp"><c>ssh:ssh_sftp(3)</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>make_dir(SSH, Name) -&gt; Result</name>
+ <fsummary>For information and other types, see ssh_sftp(3).</fsummary>
+ <type>
+ <v>SSH = connection()</v>
+ <v>Result = ssh_sftp_return() | {error, Reason}</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc><marker id="make_dir-2"/>
+ <p>For information and other types, see
+ <seealso marker="ssh:ssh_sftp"><c>ssh:ssh_sftp(3)</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>make_dir(SSH, Server, Name) -&gt; Result</name>
+ <fsummary>For information and other types, see ssh_sftp(3).</fsummary>
+ <type>
+ <v>SSH = connection()</v>
+ <v>Result = ssh_sftp_return() | {error, Reason}</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc><marker id="make_dir-3"/>
+ <p>For information and other types, see
+ <seealso marker="ssh:ssh_sftp"><c>ssh:ssh_sftp(3)</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>make_symlink(SSH, Name, Target) -&gt; Result</name>
+ <fsummary>For information and other types, see ssh_sftp(3).</fsummary>
+ <type>
+ <v>SSH = connection()</v>
+ <v>Result = ssh_sftp_return() | {error, Reason}</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc><marker id="make_symlink-3"/>
+ <p>For information and other types, see
+ <seealso marker="ssh:ssh_sftp"><c>ssh:ssh_sftp(3)</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>make_symlink(SSH, Server, Name, Target) -&gt; Result</name>
+ <fsummary>For information and other types, see ssh_sftp(3).</fsummary>
+ <type>
+ <v>SSH = connection()</v>
+ <v>Result = ssh_sftp_return() | {error, Reason}</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc><marker id="make_symlink-4"/>
+ <p>For information and other types, see
+ <seealso marker="ssh:ssh_sftp"><c>ssh:ssh_sftp(3)</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>open(SSH, File, Mode) -&gt; Result</name>
+ <fsummary>For information and other types, see ssh_sftp(3).</fsummary>
+ <type>
+ <v>SSH = connection()</v>
+ <v>Result = ssh_sftp_return() | {error, Reason}</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc><marker id="open-3"/>
+ <p>For information and other types, see
+ <seealso marker="ssh:ssh_sftp"><c>ssh:ssh_sftp(3)</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>open(SSH, Server, File, Mode) -&gt; Result</name>
+ <fsummary>For information and other types, see ssh_sftp(3).</fsummary>
+ <type>
+ <v>SSH = connection()</v>
+ <v>Result = ssh_sftp_return() | {error, Reason}</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc><marker id="open-4"/>
+ <p>For information and other types, see
+ <seealso marker="ssh:ssh_sftp"><c>ssh:ssh_sftp(3)</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>opendir(SSH, Path) -&gt; Result</name>
+ <fsummary>For information and other types, see ssh_sftp(3).</fsummary>
+ <type>
+ <v>SSH = connection()</v>
+ <v>Result = ssh_sftp_return() | {error, Reason}</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc><marker id="opendir-2"/>
+ <p>For information and other types, see
+ <seealso marker="ssh:ssh_sftp"><c>ssh:ssh_sftp(3)</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>opendir(SSH, Server, Path) -&gt; Result</name>
+ <fsummary>For information and other types, see ssh_sftp(3).</fsummary>
+ <type>
+ <v>SSH = connection()</v>
+ <v>Result = ssh_sftp_return() | {error, Reason}</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc><marker id="opendir-3"/>
+ <p>For information and other types, see
+ <seealso marker="ssh:ssh_sftp"><c>ssh:ssh_sftp(3)</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>position(SSH, Handle, Location) -&gt; Result</name>
+ <fsummary>For information and other types, see ssh_sftp(3).</fsummary>
+ <type>
+ <v>SSH = connection()</v>
+ <v>Result = ssh_sftp_return() | {error, Reason}</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc><marker id="position-3"/>
+ <p>For information and other types, see
+ <seealso marker="ssh:ssh_sftp"><c>ssh:ssh_sftp(3)</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>position(SSH, Server, Handle, Location) -&gt; Result</name>
+ <fsummary>For information and other types, see ssh_sftp(3).</fsummary>
+ <type>
+ <v>SSH = connection()</v>
+ <v>Result = ssh_sftp_return() | {error, Reason}</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc><marker id="position-4"/>
+ <p>For information and other types, see
+ <seealso marker="ssh:ssh_sftp"><c>ssh:ssh_sftp(3)</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>pread(SSH, Handle, Position, Length) -&gt; Result</name>
+ <fsummary>For information and other types, see ssh_sftp(3).</fsummary>
+ <type>
+ <v>SSH = connection()</v>
+ <v>Result = ssh_sftp_return() | {error, Reason}</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc><marker id="pread-4"/>
+ <p>For information and other types, see
+ <seealso marker="ssh:ssh_sftp"><c>ssh:ssh_sftp(3)</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>pread(SSH, Server, Handle, Position, Length) -&gt; Result</name>
+ <fsummary>For information and other types, see ssh_sftp(3).</fsummary>
+ <type>
+ <v>SSH = connection()</v>
+ <v>Result = ssh_sftp_return() | {error, Reason}</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc><marker id="pread-5"/>
+ <p>For information and other types, see
+ <seealso marker="ssh:ssh_sftp"><c>ssh:ssh_sftp(3)</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>pwrite(SSH, Handle, Position, Data) -&gt; Result</name>
+ <fsummary>For information and other types, see ssh_sftp(3).</fsummary>
+ <type>
+ <v>SSH = connection()</v>
+ <v>Result = ssh_sftp_return() | {error, Reason}</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc><marker id="pwrite-4"/>
+ <p>For information and other types, see
+ <seealso marker="ssh:ssh_sftp"><c>ssh:ssh_sftp(3)</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>pwrite(SSH, Server, Handle, Position, Data) -&gt; Result</name>
+ <fsummary>For information and other types, see ssh_sftp(3).</fsummary>
+ <type>
+ <v>SSH = connection()</v>
+ <v>Result = ssh_sftp_return() | {error, Reason}</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc><marker id="pwrite-5"/>
+ <p>For information and other types, see
+ <seealso marker="ssh:ssh_sftp"><c>ssh:ssh_sftp(3)</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>read(SSH, Handle, Len) -&gt; Result</name>
+ <fsummary>For information and other types, see ssh_sftp(3).</fsummary>
+ <type>
+ <v>SSH = connection()</v>
+ <v>Result = ssh_sftp_return() | {error, Reason}</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc><marker id="read-3"/>
+ <p>For information and other types, see
+ <seealso marker="ssh:ssh_sftp"><c>ssh:ssh_sftp(3)</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>read(SSH, Server, Handle, Len) -&gt; Result</name>
+ <fsummary>For information and other types, see ssh_sftp(3).</fsummary>
+ <type>
+ <v>SSH = connection()</v>
+ <v>Result = ssh_sftp_return() | {error, Reason}</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc><marker id="read-4"/>
+ <p>For information and other types, see
+ <seealso marker="ssh:ssh_sftp"><c>ssh:ssh_sftp(3)</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>read_file(SSH, File) -&gt; Result</name>
+ <fsummary>For information and other types, see ssh_sftp(3).</fsummary>
+ <type>
+ <v>SSH = connection()</v>
+ <v>Result = ssh_sftp_return() | {error, Reason}</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc><marker id="read_file-2"/>
+ <p>For information and other types, see
+ <seealso marker="ssh:ssh_sftp"><c>ssh:ssh_sftp(3)</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>read_file(SSH, Server, File) -&gt; Result</name>
+ <fsummary>For information and other types, see ssh_sftp(3).</fsummary>
+ <type>
+ <v>SSH = connection()</v>
+ <v>Result = ssh_sftp_return() | {error, Reason}</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc><marker id="read_file-3"/>
+ <p>For information and other types, see
+ <seealso marker="ssh:ssh_sftp"><c>ssh:ssh_sftp(3)</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>read_file_info(SSH, Name) -&gt; Result</name>
+ <fsummary>For information and other types, see ssh_sftp(3).</fsummary>
+ <type>
+ <v>SSH = connection()</v>
+ <v>Result = ssh_sftp_return() | {error, Reason}</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc><marker id="read_file_info-2"/>
+ <p>For information and other types, see
+ <seealso marker="ssh:ssh_sftp"><c>ssh:ssh_sftp(3)</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>read_file_info(SSH, Server, Name) -&gt; Result</name>
+ <fsummary>For information and other types, see ssh_sftp(3).</fsummary>
+ <type>
+ <v>SSH = connection()</v>
+ <v>Result = ssh_sftp_return() | {error, Reason}</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc><marker id="read_file_info-3"/>
+ <p>For information and other types, see
+ <seealso marker="ssh:ssh_sftp"><c>ssh:ssh_sftp(3)</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>read_link(SSH, Name) -&gt; Result</name>
+ <fsummary>For information and other types, see ssh_sftp(3).</fsummary>
+ <type>
+ <v>SSH = connection()</v>
+ <v>Result = ssh_sftp_return() | {error, Reason}</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc><marker id="read_link-2"/>
+ <p>For information and other types, see
+ <seealso marker="ssh:ssh_sftp"><c>ssh:ssh_sftp(3)</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>read_link(SSH, Server, Name) -&gt; Result</name>
+ <fsummary>For information and other types, see ssh_sftp(3).</fsummary>
+ <type>
+ <v>SSH = connection()</v>
+ <v>Result = ssh_sftp_return() | {error, Reason}</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc><marker id="read_link-3"/>
+ <p>For information and other types, see
+ <seealso marker="ssh:ssh_sftp"><c>ssh:ssh_sftp(3)</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>read_link_info(SSH, Name) -&gt; Result</name>
+ <fsummary>For information and other types, see ssh_sftp(3).</fsummary>
+ <type>
+ <v>SSH = connection()</v>
+ <v>Result = ssh_sftp_return() | {error, Reason}</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc><marker id="read_link_info-2"/>
+ <p>For information and other types, see
+ <seealso marker="ssh:ssh_sftp"><c>ssh:ssh_sftp(3)</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>read_link_info(SSH, Server, Name) -&gt; Result</name>
+ <fsummary>For information and other types, see ssh_sftp(3).</fsummary>
+ <type>
+ <v>SSH = connection()</v>
+ <v>Result = ssh_sftp_return() | {error, Reason}</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc><marker id="read_link_info-3"/>
+ <p>For information and other types, see
+ <seealso marker="ssh:ssh_sftp"><c>ssh:ssh_sftp(3)</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>receive_response(SSH, ChannelId) -&gt; {ok, Data} | {error, Reason}</name>
+ <fsummary>Equivalent to receive_response(SSH, ChannelId,
+ close).</fsummary>
+ <desc><marker id="receive_response-2"/>
+ <p>Equivalent to
+ <seealso marker="#receive_response-3"><c>ct_ssh:receive_response(SSH,
+ChannelId, close)</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>receive_response(SSH, ChannelId, End) -&gt; {ok, Data} | {error, Reason}</name>
+ <fsummary>Equivalent to receive_response(SSH, ChannelId, End,
+ DefaultTimeout).</fsummary>
+ <desc><marker id="receive_response-3"/>
+ <p>Equivalent to
+ <seealso marker="#receive_response-4"><c>ct_ssh:receive_response(SSH,
+ChannelId, End, DefaultTimeout)</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>receive_response(SSH, ChannelId, End, Timeout) -&gt; {ok, Data} | {timeout, Data} | {error, Reason}</name>
+ <fsummary>Receives expected data from server on the specified session
+ channel.</fsummary>
+ <type>
+ <v>SSH = connection()</v>
+ <v>ChannelId = integer()</v>
+ <v>End = Fun | close | timeout</v>
+ <v>Timeout = integer()</v>
+ <v>Data = list()</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc><marker id="receive_response-4"/>
+ <p>Receives expected data from server on the specified session
+ channel.</p>
+
+ <p>If <c>End == close</c>, data is returned to the caller when the
+ channel is closed by the server. If a time-out occurs before this
+ happens, the function returns <c>{timeout,Data}</c> (where
+ <c>Data</c> is the data received so far).</p>
+ <p>If <c>End == timeout</c>, a time-out is expected and
+ <c>{ok,Data}</c> is returned both in the case of a time-out and
+ when the channel is closed.</p>
+
+ <p>If <c>End</c> is a fun, this fun is called with one argument, the
+ data value in a received <c>ssh_cm</c> message (see
+ <seealso marker="ssh:ssh_connection"><c>ssh:ssh_connection(3)</c></seealso>.
+ The fun is to return either <c>true</c> to end the receiving
+ operation (and have the so far collected data returned) or
+ <c>false</c> to wait for more data from the server. Even if a fun
+ is supplied, the function returns immediately if the server closes
+ the channel).</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>rename(SSH, OldName, NewName) -&gt; Result</name>
+ <fsummary>For information and other types, see ssh_sftp(3).</fsummary>
+ <type>
+ <v>SSH = connection()</v>
+ <v>Result = ssh_sftp_return() | {error, Reason}</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc><marker id="rename-3"/>
+ <p>For information and other types, see
+ <seealso marker="ssh:ssh_sftp"><c>ssh:ssh_sftp(3)</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>rename(SSH, Server, OldName, NewName) -&gt; Result</name>
+ <fsummary>For information and other types, see ssh_sftp(3).</fsummary>
+ <type>
+ <v>SSH = connection()</v>
+ <v>Result = ssh_sftp_return() | {error, Reason}</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc><marker id="rename-4"/>
+ <p>For information and other types, see
+ <seealso marker="ssh:ssh_sftp"><c>ssh:ssh_sftp(3)</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>send(SSH, ChannelId, Data) -&gt; ok | {error, Reason}</name>
+ <fsummary>Equivalent to send(SSH, ChannelId, 0, Data,
+ DefaultTimeout).</fsummary>
+ <desc><marker id="send-3"/>
+ <p>Equivalent to <seealso marker="#send-5"><c>ct_ssh:send(SSH,
+ ChannelId, 0, Data, DefaultTimeout)</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>send(SSH, ChannelId, Data, Timeout) -&gt; ok | {error, Reason}</name>
+ <fsummary>Equivalent to send(SSH, ChannelId, 0, Data, Timeout).</fsummary>
+ <desc><marker id="send-4"/>
+ <p>Equivalent to <seealso marker="#send-5"><c>ct_ssh:send(SSH,
+ ChannelId, 0, Data, Timeout)</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>send(SSH, ChannelId, Type, Data, Timeout) -&gt; ok | {error, Reason}</name>
+ <fsummary>Sends data to server on specified session channel.</fsummary>
+ <type>
+ <v>SSH = connection()</v>
+ <v>ChannelId = integer()</v>
+ <v>Type = integer()</v>
+ <v>Data = list()</v>
+ <v>Timeout = integer()</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc><marker id="send-5"/>
+ <p>Sends data to server on specified session channel.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>send_and_receive(SSH, ChannelId, Data) -&gt; {ok, Data} | {error, Reason}</name>
+ <fsummary>Equivalent to send_and_receive(SSH, ChannelId, Data,
+ close).</fsummary>
+ <desc><marker id="send_and_receive-3"/>
+ <p>Equivalent to
+ <seealso marker="#send_and_receive-4"><c>ct_ssh:send_and_receive(SSH,
+ ChannelId, Data, close)</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>send_and_receive(SSH, ChannelId, Data, End) -&gt; {ok, Data} | {error, Reason}</name>
+ <fsummary>Equivalent to send_and_receive(SSH, ChannelId, 0, Data, End,
+ DefaultTimeout).</fsummary>
+ <desc><marker id="send_and_receive-4"/>
+ <p>Equivalent to
+ <seealso marker="#send_and_receive-6"><c>ct_ssh;send_and_receive(SSH,
+ChannelId, 0, Data, End, DefaultTimeout)</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>send_and_receive(SSH, ChannelId, Data, End, Timeout) -&gt; {ok, Data} | {error, Reason}</name>
+ <fsummary>Equivalent to send_and_receive(SSH, ChannelId, 0, Data, End,
+ Timeout).</fsummary>
+ <desc><marker id="send_and_receive-5"/>
+ <p>Equivalent to
+ <seealso marker="#send_and_receive-6"><c>ct_ssh:send_and_receive(SSH,
+ChannelId, 0, Data, End, Timeout)</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>send_and_receive(SSH, ChannelId, Type, Data, End, Timeout) -&gt; {ok, Data} | {error, Reason}</name>
+ <fsummary>Sends data to server on specified session channel and waits
+ to receive the server response.</fsummary>
+ <type>
+ <v>SSH = connection()</v>
+ <v>ChannelId = integer()</v>
+ <v>Type = integer()</v>
+ <v>Data = list()</v>
+ <v>End = Fun | close | timeout</v>
+ <v>Timeout = integer()</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc><marker id="send_and_receive-6"/>
+ <p>Sends data to server on specified session channel and waits to
+ receive the server response.</p>
+
+ <p>For details on argument <c>End</c>, see
+ <seealso marker="#receive_response-4"><c>ct_ssh:receive_response/4</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>session_close(SSH, ChannelId) -&gt; ok | {error, Reason}</name>
+ <fsummary>Closes an SSH session channel.</fsummary>
+ <type>
+ <v>SSH = connection()</v>
+ <v>ChannelId = integer()</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc><marker id="session_close-2"/>
+ <p>Closes an SSH session channel.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>session_open(SSH) -&gt; {ok, ChannelId} | {error, Reason}</name>
+ <fsummary>Equivalent to session_open(SSH, DefaultTimeout).</fsummary>
+ <desc><marker id="session_open-1"/>
+ <p>Equivalent to
+ <seealso marker="#session_open-2"><c>ct_ssh:session_open(SSH,
+ DefaultTimeout)</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>session_open(SSH, Timeout) -&gt; {ok, ChannelId} | {error, Reason}</name>
+ <fsummary>Opens a channel for an SSH session.</fsummary>
+ <type>
+ <v>SSH = connection()</v>
+ <v>Timeout = integer()</v>
+ <v>ChannelId = integer()</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc><marker id="session_open-2"/>
+ <p>Opens a channel for an SSH session.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>sftp_connect(SSH) -&gt; {ok, Server} | {error, Reason}</name>
+ <fsummary>Starts an SFTP session on an already existing SSH
+ connection.</fsummary>
+ <type>
+ <v>SSH = connection()</v>
+ <v>Server = pid()</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc><marker id="sftp_connect-1"/>
+ <p>Starts an SFTP session on an already existing SSH connection.
+ <c>Server</c> identifies the new session and must be specified
+ whenever SFTP requests are to be sent.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>subsystem(SSH, ChannelId, Subsystem) -&gt; Status | {error, Reason}</name>
+ <fsummary>Equivalent to subsystem(SSH, ChannelId, Subsystem,
+ DefaultTimeout).</fsummary>
+ <desc><marker id="subsystem-3"/>
+ <p>Equivalent to
+ <seealso marker="#subsystem-4"><c>ct_ssh:subsystem(SSH, ChannelId,
+ Subsystem, DefaultTimeout)</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>subsystem(SSH, ChannelId, Subsystem, Timeout) -&gt; Status | {error, Reason}</name>
+ <fsummary>Sends a request to execute a predefined subsystem.</fsummary>
+ <type>
+ <v>SSH = connection()</v>
+ <v>ChannelId = integer()</v>
+ <v>Subsystem = string()</v>
+ <v>Timeout = integer()</v>
+ <v>Status = success | failure</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc><marker id="subsystem-4"/>
+ <p>Sends a request to execute a predefined subsystem.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>write(SSH, Handle, Data) -&gt; Result</name>
+ <fsummary>For information and other types, see ssh_sftp(3).</fsummary>
+ <type>
+ <v>SSH = connection()</v>
+ <v>Result = ssh_sftp_return() | {error, Reason}</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc><marker id="write-3"/>
+ <p>For information and other types, see
+ <seealso marker="ssh:ssh_sftp"><c>ssh:ssh_sftp(3)</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>write(SSH, Server, Handle, Data) -&gt; Result</name>
+ <fsummary>For information and other types, see ssh_sftp(3).</fsummary>
+ <type>
+ <v>SSH = connection()</v>
+ <v>Result = ssh_sftp_return() | {error, Reason}</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc><marker id="write-4"/>
+ <p>For information and other types, see
+ <seealso marker="ssh:ssh_sftp"><c>ssh:ssh_sftp(3)</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>write_file(SSH, File, Iolist) -&gt; Result</name>
+ <fsummary>For information and other types, see ssh_sftp(3).</fsummary>
+ <type>
+ <v>SSH = connection()</v>
+ <v>Result = ssh_sftp_return() | {error, Reason}</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc><marker id="write_file-3"/>
+ <p>For information and other types, see
+ <seealso marker="ssh:ssh_sftp"><c>ssh:ssh_sftp(3)</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>write_file(SSH, Server, File, Iolist) -&gt; Result</name>
+ <fsummary>For information and other types, see ssh_sftp(3).</fsummary>
+ <type>
+ <v>SSH = connection()</v>
+ <v>Result = ssh_sftp_return() | {error, Reason}</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc><marker id="write_file-4"/>
+ <p>For information and other types, see
+ <seealso marker="ssh:ssh_sftp"><c>ssh:ssh_sftp(3)</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>write_file_info(SSH, Name, Info) -&gt; Result</name>
+ <fsummary>For information and other types, see ssh_sftp(3).</fsummary>
+ <type>
+ <v>SSH = connection()</v>
+ <v>Result = ssh_sftp_return() | {error, Reason}</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc><marker id="write_file_info-3"/>
+ <p>For information and other types, see
+ <seealso marker="ssh:ssh_sftp"><c>ssh:ssh_sftp(3)</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>write_file_info(SSH, Server, Name, Info) -&gt; Result</name>
+ <fsummary>For information and other types, see ssh_sftp(3).</fsummary>
+ <type>
+ <v>SSH = connection()</v>
+ <v>Result = ssh_sftp_return() | {error, Reason}</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc><marker id="write_file_info-4"/>
+ <p>For information and other types, see
+ <seealso marker="ssh:ssh_sftp"><c>ssh:ssh_sftp(3)</c></seealso>.</p>
+ </desc>
+ </func>
+ </funcs>
+
+</erlref>
+
+
diff --git a/lib/common_test/doc/src/ct_telnet.xml b/lib/common_test/doc/src/ct_telnet.xml
new file mode 100644
index 0000000000..e2a45e894b
--- /dev/null
+++ b/lib/common_test/doc/src/ct_telnet.xml
@@ -0,0 +1,604 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE erlref SYSTEM "erlref.dtd">
+
+<erlref>
+ <header>
+ <copyright>
+ <year>2010</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>ct_telnet</title>
+ <prepared></prepared>
+ <responsible></responsible>
+ <docno></docno>
+ <approved></approved>
+ <checked></checked>
+ <date></date>
+ <rev>A</rev>
+ <file>ct_telnet.xml</file>
+ </header>
+ <module>ct_telnet</module>
+ <modulesummary>Common Test specific layer on top of Telnet client ct_telnet_client.erl</modulesummary>
+
+ <description>
+
+ <p><c>Common Test</c> specific layer on top of Telnet client
+ <c>ct_telnet_client.erl</c>.</p>
+
+ <p>Use this module to set up Telnet connections, send commands, and
+ perform string matching on the result. For information about how to use
+ <c>ct_telnet</c> and configure connections, specifically for UNIX hosts,
+ see the
+ <seealso marker="unix_telnet"><c>unix_telnet</c></seealso> manual page.
+ </p>
+
+ <p>Default values defined in <c>ct_telnet</c>:</p>
+ <marker id="Default_values"/>
+
+ <list type="bulleted">
+ <item><p>Connection timeout (time to wait for connection) = 10
+ seconds</p></item>
+ <item><p>Command timeout (time to wait for a command to return) =
+ 10 seconds</p></item>
+ <item><p>Max number of reconnection attempts = 3</p></item>
+ <item><p>Reconnection interval (time to wait in between
+ reconnection attempts) = 5 seconds</p></item>
+ <item><p>Keep alive (sends NOP to the server every 8 sec if
+ connection is idle) = <c>true</c></p></item>
+ <item><p>Polling limit (max number of times to poll to get a
+ remaining string terminated) = 0</p></item>
+ <item><p>Polling interval (sleep time between polls) = 1 second</p>
+ </item>
+ <item><p>The TCP_NODELAY option for the telnet socket
+ is disabled (set to <c>false</c>) per default</p></item>
+ </list>
+
+ <p>These parameters can be modified by the user with the following
+ configuration term:</p>
+
+ <pre>
+ {telnet_settings, [{connect_timeout,Millisec},
+ {command_timeout,Millisec},
+ {reconnection_attempts,N},
+ {reconnection_interval,Millisec},
+ {keep_alive,Bool},
+ {poll_limit,N},
+ {poll_interval,Millisec},
+ {tcp_nodelay,Bool}]}.</pre>
+
+ <p><c>Millisec = integer(), N = integer()</c></p>
+
+ <p>Enter the <c>telnet_settings</c> term in a configuration file included
+ in the test and <c>ct_telnet</c> retrieves the information
+ automatically.</p>
+
+ <p><c>keep_alive</c> can be specified per connection, if necessary. For
+ details, see
+ <seealso marker="unix_telnet"><c>unix_telnet</c></seealso>.</p>
+
+ </description>
+
+ <section>
+ <title>Logging</title>
+ <marker id="Logging"/>
+
+ <p>The default logging behavior of <c>ct_telnet</c> is to print information
+ about performed operations, commands, and their corresponding results to
+ the test case HTML log. The following is not printed to the HTML
+ log: text strings sent from the Telnet server that are not explicitly
+ received by a <c>ct_telnet</c> function, such as <c>expect/3</c>.
+ However, <c>ct_telnet</c> can be configured to use a special purpose
+ event handler, implemented in <c>ct_conn_log_h</c>, for logging
+ <em>all</em> Telnet traffic. To use this handler, install a <c>Common
+ Test</c> hook named <c>cth_conn_log</c>. Example (using the test suite
+ information function):</p>
+
+ <pre>
+ suite() -&gt;
+ [{ct_hooks, [{cth_conn_log, [{conn_mod(),hook_options()}]}]}].</pre>
+
+ <p><c>conn_mod()</c> is the name of the <c>Common Test</c> module
+ implementing the connection protocol, that is, <c>ct_telnet</c>.</p>
+
+ <p>The <c>cth_conn_log</c> hook performs unformatted logging of Telnet
+ data to a separate text file. All Telnet communication is captured and
+ printed, including any data sent from the server. The link to
+ this text file is located at the top of the test case HTML log.</p>
+
+ <p>By default, data for all Telnet connections is logged in one common
+ file (named <c>default</c>), which can get messy, for example, if
+ multiple Telnet sessions are running in parallel. Therefore a separate
+ log file can be created for each connection. To configure this, use hook
+ option <c>hosts</c> and list the names of the servers/connections
+ to be used in the suite. The connections must be named for this to
+ work (see
+ <seealso marker="#open-1"><c>ct_telnet:open/1,2,3,4</c></seealso>).</p>
+
+ <p>Hook option <c>log_type</c> can be used to change the
+ <c>cth_conn_log</c> behavior. The default value of this option is
+ <c>raw</c>, which results in the behavior described above. If the value
+ is set to <c>html</c>, all Telnet communication is printed to the test
+ case HTML log instead.</p>
+
+ <p>All <c>cth_conn_log</c> hook options described can also be
+ specified in a configuration file with configuration variable
+ <c>ct_conn_log</c>.</p>
+
+ <p><em>Example:</em></p>
+
+ <pre>
+ {ct_conn_log, [{ct_telnet,[{log_type,raw},
+ {hosts,[key_or_name()]}]}]}</pre>
+
+ <note>
+ <p>Hook options specified in a configuration file overwrite any
+ hard-coded hook options in the test suite.</p>
+ </note>
+
+ <marker id="Logging_example"/>
+ <p><em>Logging Example:</em></p>
+
+ <p>The following <c>ct_hooks</c> statement causes printing of Telnet
+ traffic to separate logs for the connections <c>server1</c> and
+ <c>server2</c>. Traffic for any other connections is logged in the
+ default Telnet log.</p>
+
+ <pre>
+ suite() -&gt;
+ [{ct_hooks,
+ [{cth_conn_log, [{ct_telnet,[{hosts,[server1,server2]}]}]}]}].</pre>
+
+ <p>As previously explained, this specification can also be provided by an
+ entry like the following in a configuration file:</p>
+
+ <pre>
+ {ct_conn_log, [{ct_telnet,[{hosts,[server1,server2]}]}]}.</pre>
+
+ <p>In this case the <c>ct_hooks</c> statement in the test suite can look
+ as follows:</p>
+
+ <pre>
+ suite() -&gt;
+ [{ct_hooks, [{cth_conn_log, []}]}].</pre>
+ </section>
+
+ <section>
+ <title>Data Types</title>
+ <marker id="types"/>
+ <taglist>
+ <tag><c>connection() = handle() | {target_name(), connection_type()} | target_name()</c></tag>
+ <item><marker id="type-connection"/>
+ <p>For <c>target_name()</c>, see module
+ <seealso marker="ct"><c>ct</c></seealso>.</p></item>
+
+ <tag><c>connection_type() = telnet | ts1 | ts2</c></tag>
+ <item><marker id="type-connection_type"/> </item>
+
+ <tag><c>handle() = handle()</c></tag>
+ <item><marker id="type-handle"/>
+ <p>Handle for a specific Telnet connection, see module
+ <seealso marker="ct"><c>ct</c></seealso>.</p></item>
+
+ <tag><c>prompt_regexp() = string()</c></tag>
+ <item><marker id="type-prompt_regexp"/>
+ <p>Regular expression matching all possible prompts for a specific
+ target type. <c>regexp</c> must not have any groups, that is, when
+ matching, <c>re:run/3</c> (in <c>STDLIB</c>) must return a list with
+ one single element.</p></item>
+ </taglist>
+ </section>
+
+ <funcs>
+ <func>
+ <name>close(Connection) -&gt; ok | {error, Reason}</name>
+ <fsummary>Closes the Telnet connection and stops the process managing
+ it.</fsummary>
+ <type>
+ <v>Connection = connection()</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc><marker id="close-1"/>
+ <p>Closes the Telnet connection and stops the process managing it.</p>
+
+ <p>A connection can be associated with a target name and/or a handle.
+ If <c>Connection</c> has no associated target name, it can only
+ be closed with the handle value (see
+ <seealso marker="#open-4"><c>ct_telnet:open/4</c></seealso>).</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>cmd(Connection, Cmd) -&gt; {ok, Data} | {error, Reason}</name>
+ <fsummary>Equivalent to cmd(Connection, Cmd, []).</fsummary>
+ <desc><marker id="cmd-2"/>
+ <p>Equivalent to
+ <seealso marker="#cmd-3"><c>ct_telnet:cmd(Connection, Cmd,
+ [])</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>cmd(Connection, Cmd, Opts) -&gt; {ok, Data} | {error, Reason}</name>
+ <fsummary>Sends a command through Telnet and waits for prompt.</fsummary>
+ <type>
+ <v>Connection = connection()</v>
+ <v>Cmd = string()</v>
+ <v>Opts = [Opt]</v>
+ <v>Opt = {timeout, timeout()} | {newline, boolean()}</v>
+ <v>Data = [string()]</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc><marker id="cmd-3"/>
+ <p>Sends a command through Telnet and waits for prompt.</p>
+
+ <p>By default, this function adds a new line to the end of the
+ specified command. If this is not desired, use option
+ <c>{newline,false}</c>. This is necessary, for example, when
+ sending Telnet command sequences prefixed with character
+ Interprete As Command (IAC).</p>
+
+ <p>Option <c>timeout</c> specifies how long the client must wait
+ for prompt. If the time expires, the function returns
+ <c>{error,timeout}</c>. For information about the default value
+ for the command timeout, see the
+ <seealso marker="#Default_values">list of default values</seealso>
+ in the beginning of this module.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>cmdf(Connection, CmdFormat, Args) -&gt; {ok, Data} | {error, Reason}</name>
+ <fsummary>Equivalent to cmdf(Connection, CmdFormat, Args, []).</fsummary>
+ <desc><marker id="cmdf-3"/>
+ <p>Equivalent to
+ <seealso marker="#cmdf-4"><c>ct_telnet:cmdf(Connection, CmdFormat,
+ Args, [])</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>cmdf(Connection, CmdFormat, Args, Opts) -&gt; {ok, Data} | {error, Reason}</name>
+ <fsummary>Sends a Telnet command and waits for prompt (uses a format
+ string and a list of arguments to build the command).</fsummary>
+ <type>
+ <v>Connection = connection()</v>
+ <v>CmdFormat = string()</v>
+ <v>Args = list()</v>
+ <v>Opts = [Opt]</v>
+ <v>Opt = {timeout, timeout()} | {newline, boolean()}</v>
+ <v>Data = [string()]</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc><marker id="cmdf-4"/>
+ <p>Sends a Telnet command and waits for prompt (uses a format string
+ and a list of arguments to build the command).</p>
+
+ <p>For details, see
+ <seealso marker="#cmd-3"><c>ct_telnet:cmd/3</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>expect(Connection, Patterns) -&gt; term()</name>
+ <fsummary>Equivalent to expect(Connections, Patterns, []).</fsummary>
+ <desc><marker id="expect-2"/>
+ <p>Equivalent to
+ <seealso marker="#expect-3"><c>ct_telnet:expect(Connections,
+ Patterns, [])</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>expect(Connection, Patterns, Opts) -&gt; {ok, Match} | {ok, MatchList, HaltReason} | {error, Reason}</name>
+ <fsummary>Gets data from Telnet and waits for the expected
+ pattern.</fsummary>
+ <type>
+ <v>Connection = connection()</v>
+ <v>Patterns = Pattern | [Pattern]</v>
+ <v>Pattern = string() | {Tag, string()} | prompt | {prompt, Prompt}</v>
+ <v>Prompt = string()</v>
+ <v>Tag = term()</v>
+ <v>Opts = [Opt]</v>
+ <v>Opt = {idle_timeout, IdleTimeout} | {total_timeout, TotalTimeout} | repeat | {repeat, N} | sequence | {halt, HaltPatterns} | ignore_prompt | no_prompt_check | wait_for_prompt | {wait_for_prompt, Prompt}</v>
+ <v>IdleTimeout = infinity | integer()</v>
+ <v>TotalTimeout = infinity | integer()</v>
+ <v>N = integer()</v>
+ <v>HaltPatterns = Patterns</v>
+ <v>MatchList = [Match]</v>
+ <v>Match = RxMatch | {Tag, RxMatch} | {prompt, Prompt}</v>
+ <v>RxMatch = [string()]</v>
+ <v>HaltReason = done | Match</v>
+ <v>Reason = timeout | {prompt, Prompt}</v>
+ </type>
+ <desc><marker id="expect-3"/>
+ <p>Gets data from Telnet and waits for the expected pattern.</p>
+
+ <p><c>Pattern</c> can be a POSIX regular expression. The function
+ returns when a pattern is successfully matched (at least one, in
+ the case of multiple patterns).</p>
+
+ <p><c>RxMatch</c> is a list of matched strings. It looks as
+ follows <c>[FullMatch, SubMatch1, SubMatch2, ...]</c>, where
+ <c>FullMatch</c> is the string matched by the whole regular
+ expression, and <c>SubMatchN</c> is the string that matched
+ subexpression number <c>N</c>. Subexpressions are denoted with
+ <c>(' ')</c> in the regular expression.</p>
+
+ <p>If a <c>Tag</c> is speciifed, the returned <c>Match</c> also
+ includes the matched <c>Tag</c>. Otherwise, only <c>RxMatch</c>
+ is returned.</p>
+
+ <p><em>Options:</em></p>
+
+ <taglist>
+ <tag><c>idle_timeout</c></tag>
+ <item><p>Indicates that the function must return if the Telnet
+ client is idle (that is, if no data is received) for more than
+ <c>IdleTimeout</c> milliseconds. Default time-out is 10
+ seconds.</p></item>
+ <tag><c>total_timeout</c></tag>
+ <item><p>Sets a time limit for the complete <c>expect</c> operation.
+ After <c>TotalTimeout</c> milliseconds, <c>{error,timeout}</c>
+ is returned. Default is <c>infinity</c> (that is, no time
+ limit).</p></item>
+ <tag><c>ignore_prompt | no_prompt_check</c></tag>
+ <item><p>>The function returns when a prompt is received, even if
+ no pattern has yet been matched, and
+ <c>{error,{prompt,Prompt}}</c> is returned. However, this
+ behavior can be modified with option <c>ignore_prompt</c> or
+ option <c>no_prompt_check</c>, which tells <c>expect</c> to
+ return only when a match is found or after a time-out.</p></item>
+ <tag><c>ignore_prompt</c></tag>
+ <item><p><c>ct_telnet</c> ignores any prompt found. This option is
+ useful if data sent by the server can include a pattern
+ matching prompt <c>regexp</c> (as returned by
+ <c>TargedMod:get_prompt_regexp/0</c>), but is not to not cause
+ the function to return.</p></item>
+ <tag><c>no_prompt_check</c></tag>
+ <item><p><c>ct_telnet</c> does not search for a prompt at all. This
+ is useful if, for example, <c>Pattern</c> itself matches the
+ prompt.</p></item>
+ <tag><c>wait_for_prompt</c></tag>
+ <item><p>Forces <c>ct_telnet</c> to wait until the prompt string
+ is received before returning (even if a pattern has already been
+ matched). This is equal to calling
+ <c>expect(Conn, Patterns++[{prompt,Prompt}], [sequence|Opts])</c>.
+ Notice that option <c>idle_timeout</c> and <c>total_timeout</c>
+ can abort the operation of waiting for prompt.</p></item>
+ <tag><c>repeat | repeat, N</c></tag>
+ <item><p>The pattern(s) must be matched multiple times. If <c>N</c>
+ is speciified, the pattern(s) are matched <c>N</c> times, and
+ the function returns <c>HaltReason = done</c>. This option can be
+ interrupted by one or more <c>HaltPatterns</c>. <c>MatchList</c>
+ is always returned, that is, a list of <c>Match</c> instead of
+ only one <c>Match</c>. Also <c>HaltReason</c> is returned.</p>
+ </item>
+ <tag><c>sequence</c></tag>
+ <item><p>All patterns must be matched in a sequence. A match is not
+ concluded until all patterns are matched. This option can be
+ interrupted by one or more <c>HaltPatterns</c>. <c>MatchList</c>
+ is always returned, that is, a list of <c>Match</c> instead of
+ only one <c>Match</c>. Also <c>HaltReason</c> is returned.</p>
+ </item>
+ </taglist>
+
+ <p><em>Example 1:</em></p>
+
+ <pre>
+ expect(Connection,[{abc,"ABC"},{xyz,"XYZ"}],[sequence,{halt,[{nnn,"NNN"}]}])</pre>
+
+ <p>First this tries to match <c>"ABC"</c>, and then <c>"XYZ"</c>, but
+ if <c>"NNN"</c> appears, the function returns
+ <c>{error,{nnn,["NNN"]}}</c>. If both <c>"ABC"</c> and <c>"XYZ"</c>
+ are matched, the function returns <c>{ok,[AbcMatch,XyzMatch]}</c>.</p>
+
+ <p><em>Example 2:</em></p>
+
+ <pre>
+ expect(Connection,[{abc,"ABC"},{xyz,"XYZ"}],[{repeat,2},{halt,[{nnn,"NNN"}]}])</pre>
+
+ <p>This tries to match <c>"ABC"</c> or <c>"XYZ"</c> twice. If
+ <c>"NNN"</c> appears, the function returns
+ <c>HaltReason = {nnn,["NNN"]}</c>.</p>
+
+ <p>Options <c>repeat</c> and <c>sequence</c> can be combined to
+ match a sequence multiple times.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>get_data(Connection) -&gt; {ok, Data} | {error, Reason}</name>
+ <fsummary>Gets all data received by the Telnet client since the last
+ command was sent.</fsummary>
+ <type>
+ <v>Connection = connection()</v>
+ <v>Data = [string()]</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc><marker id="get_data-1"/>
+ <p>Gets all data received by the Telnet client since the last
+ command was sent. Only newline-terminated strings are returned.
+ If the last received string has not yet been terminated, the
+ connection can be polled automatically until the string is
+ complete.</p>
+
+ <p>The polling feature is controlled by the configuration values
+ <c>poll_limit</c> and <c>poll_interval</c> and is by default
+ disabled. This means that the function immediately returns all
+ complete strings received and saves a remaining non-terminated
+ string for a later <c>get_data</c> call.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>open(Name) -&gt; {ok, Handle} | {error, Reason}</name>
+ <fsummary>Equivalent to open(Name, telnet).</fsummary>
+ <desc><marker id="open-1"/>
+ <p>Equivalent to
+ <seealso marker="#open-2"><c>ct_telnet:open(Name,
+ telnet)</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>open(Name, ConnType) -&gt; {ok, Handle} | {error, Reason}</name>
+ <fsummary>Opens a Telnet connection to the specified target
+ host.</fsummary>
+ <type>
+ <v>Name = target_name()</v>
+ <v>ConnType = connection_type()</v>
+ <v>Handle = handle()</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc><marker id="open-2"/>
+ <p>Opens a Telnet connection to the specified target host.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>open(KeyOrName, ConnType, TargetMod) -&gt; {ok, Handle} | {error, Reason}</name>
+ <fsummary>Equivalent to open(KeyOrName, ConnType, TargetMod, []).</fsummary>
+ <desc><marker id="open-3"/>
+ <p>Equivalent to
+ <seealso marker="#open-4"><c>ct_telnet:ct_telnet:open(KeyOrName,
+ ConnType, TargetMod, [])</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>open(KeyOrName, ConnType, TargetMod, Extra) -&gt; {ok, Handle} | {error, Reason}</name>
+ <fsummary>Opens a Telnet connection to the specified target
+ host.</fsummary>
+ <type>
+ <v>KeyOrName = Key | Name</v>
+ <v>Key = atom()</v>
+ <v>Name = target_name()</v>
+ <v>ConnType = connection_type()</v>
+ <v>TargetMod = atom()</v>
+ <v>Extra = term()</v>
+ <v>Handle = handle()</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc><marker id="open-4"/>
+ <p>Opens a Telnet connection to the specified target host.</p>
+
+ <p>The target data must exist in a configuration file. The connection
+ can be associated with <c>Name</c> and/or the returned <c>Handle</c>.
+ To allocate a name for the target, use one of the following
+ alternatives:</p>
+
+ <list type="bulleted">
+ <item><p><seealso marker="ct#require-2"><c>ct:require/2</c></seealso>
+ in a test case</p></item>
+ <item><p>A <c>require</c> statement in the suite information
+ function (<c>suite/0</c>)</p></item>
+ <item><p>A <c>require</c> statement in a test case information
+ function</p></item>
+ </list>
+
+ <p>If you want the connection to be associated with <c>Handle</c> only
+ (if you, for example, need to open multiple connections to a host),
+ use <c>Key</c>, the configuration variable name, to specify the
+ target. Notice that a connection without an associated target name
+ can only be closed with the <c>Handle</c> value.</p>
+
+ <p><c>TargetMod</c> is a module that exports the functions
+ <c>connect(Ip, Port, KeepAlive, Extra)</c> and
+ <c>get_prompt_regexp()</c> for the specified <c>TargetType</c>
+ (for example, <c>unix_telnet</c>).</p>
+
+ <p>For <c>target_name()</c>, see module
+ <seealso marker="ct"><c>ct</c></seealso>.</p>
+
+ <p>See also
+ <seealso marker="ct#require-2"><c>ct:require/2</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>send(Connection, Cmd) -&gt; ok | {error, Reason}</name>
+ <fsummary>Equivalent to send(Connection, Cmd, []).</fsummary>
+ <desc><marker id="send-2"/>
+ <p>Equivalent to
+ <seealso marker="#send-3"><c>ct_telnet:send(Connection, Cmd,
+ [])</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>send(Connection, Cmd, Opts) -&gt; ok | {error, Reason}</name>
+ <fsummary>Sends a Telnet command and returns immediately.</fsummary>
+ <type>
+ <v>Connection = connection()</v>
+ <v>Cmd = string()</v>
+ <v>Opts = [Opt]</v>
+ <v>Opt = {newline, boolean()}</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc><marker id="send-3"/>
+ <p>Sends a Telnet command and returns immediately.</p>
+
+ <p>By default, this function adds a newline to the end of the
+ specified command. If this is not desired, option
+ <c>{newline,false}</c> can be used. This is necessary, for example,
+ when sending Telnet command sequences prefixed with character
+ Interprete As Command (IAC).</p>
+
+ <p>The resulting output from the command can be read with
+ <seealso marker="#get_data-1"><c>ct_telnet:get_data/2</c></seealso> or
+ <seealso marker="#expect-2"><c>ct_telnet:expect/2,3</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>sendf(Connection, CmdFormat, Args) -&gt; ok | {error, Reason}</name>
+ <fsummary>Equivalent to sendf(Connection, CmdFormat, Args, []).</fsummary>
+ <desc><marker id="sendf-3"/>
+ <p>Equivalent to
+ <seealso marker="#sendf-4"><c>ct_telnet:sendf(Connection, CmdFormat,
+ Args, [])</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>sendf(Connection, CmdFormat, Args, Opts) -&gt; ok | {error, Reason}</name>
+ <fsummary>Sends a Telnet command and returns immediately (uses a format
+ string and a list of arguments to build the command).</fsummary>
+ <type>
+ <v>Connection = connection()</v>
+ <v>CmdFormat = string()</v>
+ <v>Args = list()</v>
+ <v>Opts = [Opt]</v>
+ <v>Opt = {newline, boolean()}</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc><marker id="sendf-4"/>
+ <p>Sends a Telnet command and returns immediately (uses a format
+ string and a list of arguments to build the command).</p>
+ </desc>
+ </func>
+ </funcs>
+
+ <section>
+ <title>See Also</title>
+ <p><seealso marker="unix_telnet"><c>unix_telnet</c></seealso></p>
+ </section>
+
+</erlref>
+
+
diff --git a/lib/common_test/doc/src/dependencies_chapter.xml b/lib/common_test/doc/src/dependencies_chapter.xml
index fb758d90df..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>
@@ -33,217 +33,220 @@
<section>
<title>General</title>
<p>When creating test suites, it is strongly recommended to not
- create dependencies between test cases, i.e. letting test cases
+ create dependencies between test cases, that is, letting test cases
depend on the result of previous test cases. There are various
- reasons for this, for example:</p>
+ reasons for this, such as, the following:</p>
- <list>
+ <list type="bulleted">
<item>It makes it impossible to run test cases individually.</item>
- <item>It makes it impossible to run test cases in different order.</item>
- <item>It makes debugging very difficult (since a fault could be
+ <item>It makes it impossible to run test cases in a different order.</item>
+ <item>It makes debugging difficult (as a fault can be
the result of a problem in a different test case than the one failing).</item>
- <item>There exists no good and explicit ways to declare dependencies, so
- it may be very difficult to see and understand these in test suite
+ <item>There are no good and explicit ways to declare dependencies, so
+ it can be difficult to see and understand these in test suite
code and in test logs.</item>
- <item>Extending, restructuring and maintaining test suites with
+ <item>Extending, restructuring, and maintaining test suites with
test case dependencies is difficult.</item>
</list>
<p>There are often sufficient means to work around the need for test
case dependencies. Generally, the problem is related to the state of
- the system under test (SUT). The action of one test case may alter the state
- of the system and for some other test case to run properly, the new state
+ the System Under Test (SUT). The action of one test case can change the
+ system state. For some other test case to run properly, this new state
must be known.</p>
<p>Instead of passing data between test cases, it is recommended
that the test cases read the state from the SUT and perform assertions
- (i.e. let the test case run if the state is as expected, otherwise reset or fail)
- and/or use the state to set variables necessary for the test case to execute
- properly. Common actions can often be implemented as library functions for
- test cases to call to set the SUT in a required state. (Such common actions
- may of course also be separately tested if necessary, to ensure they are
- working as expected). It is sometimes also possible, but not always desirable,
- to group tests together in one test case, i.e. let a test case perform a
- "scenario" test (a test that consists of subtests).</p>
-
- <p>Consider for example a server application under test. The following
+ (that is, let the test case run if the state is as expected, otherwise reset or fail).
+ It is also recommended to use the state to set variables necessary for the
+ test case to execute properly. Common actions can often be implemented as
+ library functions for test cases to call to set the SUT in a required state.
+ (Such common actions can also be separately tested, if necessary,
+ to ensure that they work as expected). It is sometimes also possible,
+ but not always desirable, to group tests together in one test case, that is,
+ let a test case perform a "scenario" test (a test consisting of subtests).</p>
+
+ <p>Consider, for example, a server application under test. The following
functionality is to be tested:</p>
- <list>
- <item>Starting the server.</item>
- <item>Configuring the server.</item>
- <item>Connecting a client to the server.</item>
- <item>Disconnecting a client from the server.</item>
- <item>Stopping the server.</item>
+ <list type="bulleted">
+ <item>Starting the server</item>
+ <item>Configuring the server</item>
+ <item>Connecting a client to the server</item>
+ <item>Disconnecting a client from the server</item>
+ <item>Stopping the server</item>
</list>
- <p>There are obvious dependencies between the listed functions. We can't configure
- the server if it hasn't first been started, we can't connect a client until
- the server has been properly configured, etc. If we want to have one test
- case for each of the functions, we might be tempted to try to always run the
+ <p>There are obvious dependencies between the listed functions. The server cannot
+ be configured if it has not first been started, a client connot be connectd until
+ the server is properly configured, and so on. If we want to have one test
+ case for each function, we might be tempted to try to always run the
test cases in the stated order and carry possible data (identities, handles,
- etc) between the cases and therefore introduce dependencies between them.
- To avoid this we could consider starting and stopping the server for every test.
- We would implement the start and stop action as common functions that may be
- called from init_per_testcase and end_per_testcase. (We would of course test
- the start and stop functionality separately). The configuration could perhaps also
- be implemented as a common function, maybe grouped with the start function.
- Finally the testing of connecting and disconnecting a client may be grouped into
- one test case. The resulting suite would look something like this:</p>
-
+ and so on) between the cases and therefore introduce dependencies between them.</p>
+
+ <p>To avoid this, we can consider starting and stopping the server for every test.
+ We can thus implement the start and stop action as common functions to be
+ called from
+ <seealso marker="common_test#Module:init_per_testcase-2"><c>init_per_testcase</c></seealso> and
+ <seealso marker="common_test#Module:end_per_testcase-2"><c>end_per_testcase</c></seealso>.
+ (Remember to test the start and stop functionality separately.)
+ The configuration can also be implemented as a common function, maybe grouped
+ with the start function. Finally, the testing of connecting and disconnecting a
+ client can be grouped into one test case. The resulting suite can look as
+ follows:</p>
<pre>
- -module(my_server_SUITE).
- -compile(export_all).
- -include_lib("ct.hrl").
+ -module(my_server_SUITE).
+ -compile(export_all).
+ -include_lib("ct.hrl").
+
+ %%% init and end functions...
- %%% init and end functions...
+ suite() -> [{require,my_server_cfg}].
- suite() -> [{require,my_server_cfg}].
+ init_per_testcase(start_and_stop, Config) ->
+ Config;
- init_per_testcase(start_and_stop, Config) ->
- Config;
+ init_per_testcase(config, Config) ->
+ [{server_pid,start_server()} | Config];
- init_per_testcase(config, Config) ->
- [{server_pid,start_server()} | Config];
+ init_per_testcase(_, Config) ->
+ ServerPid = start_server(),
+ configure_server(),
+ [{server_pid,ServerPid} | Config].
- init_per_testcase(_, Config) ->
- ServerPid = start_server(),
- configure_server(),
- [{server_pid,ServerPid} | Config].
+ end_per_testcase(start_and_stop, _) ->
+ ok;
- end_per_testcase(start_and_stop, _) ->
- ok;
+ end_per_testcase(_, _) ->
+ ServerPid = ?config(server_pid),
+ stop_server(ServerPid).
- end_per_testcase(_, _) ->
- ServerPid = ?config(server_pid),
- stop_server(ServerPid).
+ %%% test cases...
- %%% test cases...
+ all() -> [start_and_stop, config, connect_and_disconnect].
- all() -> [start_and_stop, config, connect_and_disconnect].
+ %% test that starting and stopping works
+ start_and_stop(_) ->
+ ServerPid = start_server(),
+ stop_server(ServerPid).
- %% test that starting and stopping works
- start_and_stop(_) ->
- ServerPid = start_server(),
- stop_server(ServerPid).
+ %% configuration test
+ config(Config) ->
+ ServerPid = ?config(server_pid, Config),
+ configure_server(ServerPid).
- %% configuration test
- config(Config) ->
- ServerPid = ?config(server_pid, Config),
- configure_server(ServerPid).
+ %% test connecting and disconnecting client
+ connect_and_disconnect(Config) ->
+ ServerPid = ?config(server_pid, Config),
+ {ok,SessionId} = my_server:connect(ServerPid),
+ ok = my_server:disconnect(ServerPid, SessionId).
- %% test connecting and disconnecting client
- connect_and_disconnect(Config) ->
- ServerPid = ?config(server_pid, Config),
- {ok,SessionId} = my_server:connect(ServerPid),
- ok = my_server:disconnect(ServerPid, SessionId).
+ %%% common functions...
- %%% common functions...
+ start_server() ->
+ {ok,ServerPid} = my_server:start(),
+ ServerPid.
- start_server() ->
- {ok,ServerPid} = my_server:start(),
- ServerPid.
+ stop_server(ServerPid) ->
+ ok = my_server:stop(),
+ ok.
- stop_server(ServerPid) ->
- ok = my_server:stop(),
- ok.
+ configure_server(ServerPid) ->
+ ServerCfgData = ct:get_config(my_server_cfg),
+ ok = my_server:configure(ServerPid, ServerCfgData),
+ ok.</pre>
- configure_server(ServerPid) ->
- ServerCfgData = ct:get_config(my_server_cfg),
- ok = my_server:configure(ServerPid, ServerCfgData),
- ok.
- </pre>
</section>
<section>
<marker id="save_config"></marker>
- <title>Saving configuration data</title>
+ <title>Saving Configuration Data</title>
- <p>There might be situations where it is impossible, or infeasible at least, to
- implement independent test cases. Maybe it is simply not possible to read the
- SUT state. Maybe resetting the SUT is impossible and it takes much too long
+ <p>Sometimes it is impossible, or infeasible, to
+ implement independent test cases. Maybe it is not possible to read the
+ SUT state. Maybe resetting the SUT is impossible and it takes too long time
to restart the system. In situations where test case dependency is necessary,
CT offers a structured way to carry data from one test case to the next. The
- same mechanism may also be used to carry data from one test suite to the next.</p>
+ same mechanism can also be used to carry data from one test suite to the next.</p>
<p>The mechanism for passing data is called <c>save_config</c>. The idea is that
- one test case (or suite) may save the current value of Config - or any list of
- key-value tuples - so that it can be read by the next executing test case
- (or test suite). The configuration data is not saved permanently but can only
- be passed from one case (or suite) to the next.</p>
+ one test case (or suite) can save the current value of <c>Config</c>, or any list of
+ key-value tuples, so that the next executing test case (or test suite) can read it.
+ The configuration data is not saved permanently but can only be passed from one
+ case (or suite) to the next.</p>
- <p>To save <c>Config</c> data, return the tuple:</p>
+ <p>To save <c>Config</c> data, return tuple <c>{save_config,ConfigList}</c>
+ from <c>end_per_testcase</c> or from the main test case function.</p>
- <p><c>{save_config,ConfigList}</c></p>
-
- <p>from <c>end_per_testcase</c> or from the main test case function. To read data
- saved by a previous test case, use the <c>config</c> macro with a
- <c>saved_config</c> key:</p>
+ <p>To read data saved by a previous test case, use macro <c>config</c> with a
+ <c>saved_config</c> key as follows:</p>
<p><c>{Saver,ConfigList} = ?config(saved_config, Config)</c></p>
<p><c>Saver</c> (<c>atom()</c>) is the name of the previous test case (where the
- data was saved). The <c>config</c> macro may be used to extract particular data
+ data was saved). The <c>config</c> macro can be used to extract particular data
also from the recalled <c>ConfigList</c>. It is strongly recommended that
<c>Saver</c> is always matched to the expected name of the saving test case.
- This way problems due to restructuring of the test suite may be avoided. Also it
- makes the dependency more explicit and the test suite easier to read and maintain.</p>
+ This way, problems because of restructuring of the test suite can be avoided.
+ Also, it makes the dependency more explicit and the test suite easier to read
+ and maintain.</p>
<p>To pass data from one test suite to another, the same mechanism is used. The data
- should be saved by the <c>end_per_suite</c> function and read by <c>init_per_suite</c>
+ is to be saved by finction
+ <seealso marker="common_test#Module:end_per_suite-1"><c>end_per_suite</c></seealso>
+ and read by function
+ <seealso marker="common_test#Module:init_per_suite-1"><c>init_per_suite</c></seealso>
in the suite that follows. When passing data between suites, <c>Saver</c> carries the
name of the test suite.</p>
- <p>Example:</p>
+ <p><em>Example:</em></p>
<pre>
- -module(server_b_SUITE).
- -compile(export_all).
- -include_lib("ct.hrl").
-
- %%% init and end functions...
-
- init_per_suite(Config) ->
- %% read config saved by previous test suite
- {server_a_SUITE,OldConfig} = ?config(saved_config, Config),
- %% extract server identity (comes from server_a_SUITE)
- ServerId = ?config(server_id, OldConfig),
- SessionId = connect_to_server(ServerId),
- [{ids,{ServerId,SessionId}} | Config].
-
- end_per_suite(Config) ->
- %% save config for server_c_SUITE (session_id and server_id)
- {save_config,Config}
-
- %%% test cases...
-
- all() -> [allocate, deallocate].
-
- allocate(Config) ->
- {ServerId,SessionId} = ?config(ids, Config),
- {ok,Handle} = allocate_resource(ServerId, SessionId),
- %% save handle for deallocation test
- NewConfig = [{handle,Handle}],
- {save_config,NewConfig}.
-
- deallocate(Config) ->
- {ServerId,SessionId} = ?config(ids, Config),
- {allocate,OldConfig} = ?config(saved_config, Config),
- Handle = ?config(handle, OldConfig),
- ok = deallocate_resource(ServerId, SessionId, Handle).
- </pre>
-
- <p>It is also possible to save <c>Config</c> data from a test case that is to be
- skipped. To accomplish this, return the following tuple:</p>
-
- <p><c>{skip_and_save,Reason,ConfigList}</c></p>
-
- <p>The result will be that the test case is skipped with <c>Reason</c> printed to
- the log file (as described in previous chapters), and <c>ConfigList</c> is saved
- for the next test case. <c>ConfigList</c> may be read by means of
- <c>?config(saved_config, Config)</c>, as described above. <c>skip_and_save</c>
- may also be returned from <c>init_per_suite</c>, in which case the saved data can
+ -module(server_b_SUITE).
+ -compile(export_all).
+ -include_lib("ct.hrl").
+
+ %%% init and end functions...
+
+ init_per_suite(Config) ->
+ %% read config saved by previous test suite
+ {server_a_SUITE,OldConfig} = ?config(saved_config, Config),
+ %% extract server identity (comes from server_a_SUITE)
+ ServerId = ?config(server_id, OldConfig),
+ SessionId = connect_to_server(ServerId),
+ [{ids,{ServerId,SessionId}} | Config].
+
+ end_per_suite(Config) ->
+ %% save config for server_c_SUITE (session_id and server_id)
+ {save_config,Config}
+
+ %%% test cases...
+
+ all() -> [allocate, deallocate].
+
+ allocate(Config) ->
+ {ServerId,SessionId} = ?config(ids, Config),
+ {ok,Handle} = allocate_resource(ServerId, SessionId),
+ %% save handle for deallocation test
+ NewConfig = [{handle,Handle}],
+ {save_config,NewConfig}.
+
+ deallocate(Config) ->
+ {ServerId,SessionId} = ?config(ids, Config),
+ {allocate,OldConfig} = ?config(saved_config, Config),
+ Handle = ?config(handle, OldConfig),
+ ok = deallocate_resource(ServerId, SessionId, Handle).</pre>
+
+ <p>To save <c>Config</c> data from a test case that is to be
+ skipped, return tuple
+ <c>{skip_and_save,Reason,ConfigList}</c>.</p>
+
+ <p>The result is that the test case is skipped with <c>Reason</c> printed to
+ the log file (as described earlier) and <c>ConfigList</c> is saved
+ for the next test case. <c>ConfigList</c> can be read using
+ <c>?config(saved_config, Config)</c>, as described earlier. <c>skip_and_save</c>
+ can also be returned from <c>init_per_suite</c>. In this case, the saved data can
be read by <c>init_per_suite</c> in the suite that follows.</p>
</section>
@@ -251,60 +254,63 @@
<marker id="sequences"></marker>
<title>Sequences</title>
- <p>It is possible that test cases depend on each other so that
- if one case fails, the following test(s) should not be executed.
+ <p>Sometimes test cases depend on each other so that
+ if one case fails, the following tests are not to be executed.
Typically, if the <c>save_config</c> facility is used and a test
case that is expected to save data crashes, the following
- case can not run. CT offers a way to declare such dependencies,
+ case cannot run. <c>Common Test</c> offers a way to declare such dependencies,
called sequences.</p>
<p>A sequence of test cases is defined as a test case group
- with a <c>sequence</c> property. Test case groups are defined by
- means of the <c>groups/0</c> function in the test suite (see the
- <seealso marker="write_test_chapter#test_case_groups">Test case groups</seealso>
- chapter for details).</p>
-
- <p>For example, if we would like to make sure that if <c>allocate</c>
- in <c>server_b_SUITE</c> (above) crashes, <c>deallocate</c> is skipped,
- we may define a sequence like this:</p>
+ with a <c>sequence</c> property. Test case groups are defined
+ through function <c>groups/0</c> in the test suite (for details, see section
+ <seealso marker="write_test_chapter#test_case_groups">Test Case Groups</seealso>.</p>
+
+ <p>For example, to ensure that if <c>allocate</c>
+ in <c>server_b_SUITE</c> crashes, <c>deallocate</c> is skipped,
+ the following sequence can be defined:</p>
<pre>
- groups() -> [{alloc_and_dealloc, [sequence], [alloc,dealloc]}].</pre>
+ groups() -> [{alloc_and_dealloc, [sequence], [alloc,dealloc]}].</pre>
- <p>Let's also assume the suite contains the test case <c>get_resource_status</c>,
- which is independent of the other two cases, then the <c>all</c> function could
- look like this:</p>
+ <p>Assume that the suite contains the test case <c>get_resource_status</c>
+ that is independent of the other two cases, then function <c>all</c> can
+ look as follows:</p>
<pre>
- all() -> [{group,alloc_and_dealloc}, get_resource_status].</pre>
+ all() -> [{group,alloc_and_dealloc}, get_resource_status].</pre>
<p>If <c>alloc</c> succeeds, <c>dealloc</c> is also executed. If <c>alloc</c> fails
- however, <c>dealloc</c> is not executed but marked as SKIPPED in the html log.
- <c>get_resource_status</c> will run no matter what happens to the <c>alloc_and_dealloc</c>
+ however, <c>dealloc</c> is not executed but marked as <c>SKIPPED</c> in the HTML log.
+ <c>get_resource_status</c> runs no matter what happens to the <c>alloc_and_dealloc</c>
cases.</p>
- <p>Test cases in a sequence will be executed in order until they have all succeeded or
- until one case fails. If one fails, all following cases in the sequence are skipped.
- The cases in the sequence that have succeeded up to that point are reported as successful
- in the log. An arbitrary number of sequences may be specified. Example:</p>
+ <p>Test cases in a sequence are executed in order until all succeed or
+ one fails. If one fails, all following cases in the sequence are skipped.
+ The cases in the sequence that have succeeded up to that point are reported as
+ successful in the log. Any number of sequences can be specified.</p>
+ <p><em>Example:</em></p>
<pre>
- groups() -> [{scenarioA, [sequence], [testA1, testA2]},
- {scenarioB, [sequence], [testB1, testB2, testB3]}].
-
- all() -> [test1,
- test2,
- {group,scenarioA},
- test3,
- {group,scenarioB},
- test4].</pre>
-
- <p>It is possible to have sub-groups in a sequence group. Such sub-groups can have
- any property, i.e. they are not required to also be sequences. If you want the status
- of the sub-group to affect the sequence on the level above, return
- <c>{return_group_result,Status}</c> from <c>end_per_group/2</c>, as described in the
- <seealso marker="write_test_chapter#repeated_groups">Repeated groups</seealso>
- chapter. A failed sub-group (<c>Status == failed</c>) will cause the execution of a
+ groups() -> [{scenarioA, [sequence], [testA1, testA2]},
+ {scenarioB, [sequence], [testB1, testB2, testB3]}].
+
+ all() -> [test1,
+ test2,
+ {group,scenarioA},
+ test3,
+ {group,scenarioB},
+ test4].</pre>
+
+ <p>A sequence group can have subgroups. Such subgroups can have
+ any property, that is, they are not required to also be sequences. If you want the
+ status of the subgroup to affect the sequence on the level above, return
+ <c>{return_group_result,Status}</c> from
+ <seealso marker="common_test#Module:end_per_group-2"><c>end_per_group/2</c></seealso>,
+ as described in section
+ <seealso marker="write_test_chapter#repeated_groups">Repeated Groups</seealso>
+ in Writing Test Suites.
+ A failed subgroup (<c>Status == failed</c>) causes the execution of a
sequence to fail in the same way a test case does.</p>
</section>
</chapter>
diff --git a/lib/common_test/doc/src/event_handler_chapter.xml b/lib/common_test/doc/src/event_handler_chapter.xml
index 78e5bb5e70..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>
@@ -33,144 +33,171 @@
<section>
<marker id="event_handling"></marker>
<title>General</title>
- <p>It is possible for the operator of a Common Test system to receive
- event notifications continously during a test run. It is reported e.g.
- when a test case starts and stops, what the current count of successful,
- failed and skipped cases is, etc. This information can be used for
- different purposes such as logging progress and results on
- other format than HTML, saving statistics to a database for report
- generation and test system supervision.</p>
-
- <p>Common Test has a framework for event handling which is based on
- the OTP event manager concept and gen_event behaviour. When the Common Test
- server starts, it spawns an event manager. During test execution the
- manager gets a notification from the server every time something
- of potential interest happens. Any event handler plugged into the
- event manager can match on events of interest, take action, or maybe
- simply pass the information on. Event handlers are Erlang modules
- implemented by the Common Test user according to the gen_event
- behaviour (see the OTP User's Guide and Reference Manual for more
- information).</p>
-
- <p>As already described, a Common Test server always starts an event manager.
- The server also plugs in a default event handler which has as its only
- purpose to relay notifications to a globally registered CT Master
- event manager (if a CT Master server is running in the system).
- The CT Master also spawns an event manager at startup.
- Event handlers plugged into this manager will receive the events from
- all the test nodes as well as information from the CT Master server
- itself.</p>
-
- <p>User specific event handlers may be plugged into a Common Test event
- manager, either by telling Common Test to install them before the test
- run (see below), or by adding the handlers dynamically during the test
- run by means of
- <c>gen_event:add_handler/3</c> or <c>gen_event:add_sup_handler/3</c>.
- In the latter scenario, the reference of the Common Test event manager is
- required. To get it, call <c>ct:get_event_mgr_ref/0</c> or (on the CT
- Master node) <c>ct_master:get_event_mgr_ref/0</c>.</p>
+ <p>The operator of a <c>Common Test</c> system can receive
+ event notifications continuously during a test run. For example,
+ <c>Common Test</c> reports when a test case starts and stops,
+ the current count of successful, failed, and skipped cases, and so on.
+ This information can be used for different purposes such as logging progress
+ and results in another format than HTML, saving statistics to a database
+ for report generation, and test system supervision.</p>
+
+ <p><c>Common Test</c> has a framework for event handling based on
+ the OTP event manager concept and <c>gen_event</c> behavior.
+ When the <c>Common Test</c> server starts, it spawns an event manager.
+ During test execution the manager gets a notification from the server
+ when something of potential interest happens. Any event handler plugged into
+ the event manager can match on events of interest, take action, or
+ pass the information on. The event handlers are Erlang modules
+ implemented by the <c>Common Test</c> user according to the <c>gen_event</c>
+ behavior (for details, see module
+ <seealso marker="stdlib:gen_event"><c>stdlib:gen_event</c></seealso> and
+ section
+ <seealso marker="doc/design_principles:events"><c>gen_event Behaviour</c></seealso>
+ in OTP Design Principles in the System Documentation).
+ </p>
+
+ <p>A <c>Common Test</c> server always starts an event manager.
+ The server also plugs in a default event handler, which only
+ purpose is to relay notifications to a globally registered <c>Common Test</c>
+ Master event manager (if a <c>Common Test</c> Master server is running in the system).
+ The <c>Common Test</c> Master also spawns an event manager at startup.
+ Event handlers plugged into this manager receives the events from
+ all the test nodes, plus information from the <c>Common Test</c> Master server.
+ </p>
+
+ <p>User-specific event handlers can be plugged into a <c>Common Test</c> event
+ manager, either by telling <c>Common Test</c> to install them before the test
+ run (described later), or by adding the handlers dynamically during the test
+ run using
+ <seealso marker="stdlib:gen_event#add_handler-3"><c>stdlib:gen_event:add_handler/3</c></seealso> or
+ <seealso marker="stdlib:gen_event#add_sup_handler-3"><c>stdlib:gen_event:add_sup_handler/3</c></seealso>.
+ In the latter scenario, the reference of the <c>Common Test</c> event manager is
+ required. To get it, call
+ <seealso marker="ct#get_event_mgr_ref-0"><c>ct:get_event_mgr_ref/0</c></seealso>
+ or (on the <c>Common Test</c> Master node)
+ <seealso marker="ct_master#get_event_mgr_ref-0"><c>ct_master:get_event_mgr_ref/0</c></seealso>.</p>
</section>
<section>
<marker id="usage"></marker>
- <title>Usage</title>
- <p>Event handlers may be installed by means of an <c>event_handler</c>
- start flag (<c>ct_run</c>) or option (<seealso marker="ct#run_test-1"><c>ct:run_test/1</c></seealso>), where the
- argument specifies the names of one or more event handler modules.
- Example:</p>
+ <title>Use</title>
+ <p>Event handlers can be installed by an <c>event_handler</c> start flag
+ (<seealso marker="ct_run"><c>ct_run</c></seealso>) or option
+ <seealso marker="ct#run_test-1"><c>ct:run_test/1</c></seealso>, where the
+ argument specifies the names of one or more event handler modules.</p>
+
+ <p><em>Example:</em></p>
<p><c>$ ct_run -suite test/my_SUITE -event_handler handlers/my_evh1
handlers/my_evh2 -pa $PWD/handlers</c></p>
- <p>Use the <c><![CDATA[ct_run -event_handler_init]]></c> option instead of
- <c><![CDATA[-event_handler]]></c> to pass start arguments to the event handler
- init function.</p>
- <p>All event handler modules must have gen_event behaviour. Note also that
- these modules must be precompiled, and that their locations must be
- added explicitly to the Erlang code server search path (like in the
- example).</p>
- <p>An event_handler tuple in the argument <c>Opts</c> has the following
- definition (see also <seealso marker="ct#run_test-1"><c>ct:run_test/1</c></seealso> in the reference manual):</p>
+ <p>To pass start arguments to the event handler init function, use option
+ <c><![CDATA[ct_run -event_handler_init]]></c> instead of
+ <c><![CDATA[-event_handler]]></c>.</p>
+
+ <note><p>All event handler modules must have <c>gen_event</c> behavior.
+ These modules must be precompiled and their locations must be
+ added explicitly to the Erlang code server search path (as in the previous
+ example).</p></note>
+
+ <p>An event_handler tuple in argument <c>Opts</c> has the following definition
+ (see <seealso marker="ct#run_test-1"><c>ct:run_test/1</c></seealso>):</p>
<pre>
- {event_handler,EventHandlers}
+ {event_handler,EventHandlers}
- EventHandlers = EH | [EH]
- EH = atom() | {atom(),InitArgs} | {[atom()],InitArgs}
- InitArgs = [term()]</pre>
+ EventHandlers = EH | [EH]
+ EH = atom() | {atom(),InitArgs} | {[atom()],InitArgs}
+ InitArgs = [term()]</pre>
- <p>Example:</p>
+ <p>In the following example, two event handlers for the <c>my_SUITE</c> test are installed:</p>
<pre>
- 1> ct:run_test([{suite,"test/my_SUITE"},{event_handler,[my_evh1,{my_evh2,[node()]}]}]).</pre>
- <p>This will install two event handlers for the <c>my_SUITE</c> test. Event handler
- <c>my_evh1</c> is started with <c>[]</c> as argument to the init function. Event handler
- <c>my_evh2</c> is started with the name of the current node in the init argument list.</p>
+ 1> ct:run_test([{suite,"test/my_SUITE"},{event_handler,[my_evh1,{my_evh2,[node()]}]}]).</pre>
+ <p>Event handler <c>my_evh1</c> is started with <c>[]</c> as argument to the init function.
+ Event handler <c>my_evh2</c> is started with the name of the current node in the init argument list.</p>
- <p>Event handlers can also be plugged in by means of
+ <p>Event handlers can also be plugged in using one of the following
<seealso marker="run_test_chapter#test_specifications">test specification</seealso>
terms:</p>
-
- <p><c>{event_handler, EventHandlers}</c>, or</p>
- <p><c>{event_handler, EventHandlers, InitArgs}</c>, or</p>
- <p><c>{event_handler, NodeRefs, EventHandlers}</c>, or</p>
- <p><c>{event_handler, NodeRefs, EventHandlers, InitArgs}</c></p>
+ <list type="bulleted">
+ <item><c>{event_handler, EventHandlers}</c></item>
+ <item><c>{event_handler, EventHandlers, InitArgs}</c></item>
+ <item><c>{event_handler, NodeRefs, EventHandlers}</c></item>
+ <item><c>{event_handler, NodeRefs, EventHandlers, InitArgs}</c></item>
+ </list>
<p><c>EventHandlers</c> is a list of module names. Before a test
session starts, the init function of each plugged in event handler
- is called (with the InitArgs list as argument or [] if
- no start arguments are given).</p>
+ is called (with the <c>InitArgs</c> list as argument or <c>[]</c> if
+ no start arguments are specified).</p>
- <p>To plug a handler into the CT Master event manager, specify
+ <p>To plug in a handler to the <c>Common Test</c> Master event manager, specify
<c>master</c> as the node in <c>NodeRefs</c>.</p>
- <p>For an event handler to be able to match on events, the module must
+ <p>To be able to match on events, the event handler module must
include the header file <c>ct_event.hrl</c>. An event is a record with the
following definition:</p>
<p><c>#event{name, node, data}</c></p>
- <p><c>name</c> is the label (type) of the event. <c>node</c> is the name of the
- node the event has originated from (only relevant for CT Master event handlers).
- <c>data</c> is specific for the particular event.</p>
+ <taglist>
+ <tag><c>name</c></tag>
+ <item><p>Label (type) of the event.</p></item>
+ <tag><c>node</c></tag>
+ <item><p>Name of the node that the event originated from
+ (only relevant for <c>Common Test</c> Master event handlers).</p></item>
+ <tag><c>data</c></tag>
+ <item><p>Specific for the event.</p></item>
+ </taglist>
+
<marker id="events"></marker>
- <p><em>General events:</em></p>
+ <section>
+ <title>General Events</title>
- <list>
- <item><c>#event{name = start_logging, data = LogDir}</c>
- <p><c>LogDir = string()</c>, top level log directory for the test run.</p>
- <p>Indicates that the logging process of Common Test
- has started successfully and is ready to receive IO
+ <p>The general events are as follows:</p>
+
+ <taglist>
+ <tag><c>#event{name = start_logging, data = LogDir}</c></tag>
+ <item>
+ <p><c>LogDir = string()</c>, top-level log directory for the test run.</p>
+ <p>This event indicates that the logging process of <c>Common Test</c>
+ has started successfully and is ready to receive I/O
messages.</p></item>
- <item><c>#event{name = stop_logging, data = []}</c>
- <p>Indicates that the logging process of Common Test
- has been shut down at the end of the test run.
+ <tag><c>#event{name = stop_logging, data = []}</c></tag>
+ <item>
+ <p>This event indicates that the logging process of <c>Common Test</c>
+ was shut down at the end of the test run.
</p></item>
- <item><c>#event{name = test_start, data = {StartTime,LogDir}}</c>
+ <tag><c>#event{name = test_start, data = {StartTime,LogDir}}</c></tag>
+ <item>
<p><c>StartTime = {date(),time()}</c>, test run start date and time.</p>
- <p><c>LogDir = string()</c>, top level log directory for the test run.</p>
- <p>This event indicates that Common Test has finished initial preparations
- and will begin executing test cases.
+ <p><c>LogDir = string()</c>, top-level log directory for the test run.</p>
+ <p>This event indicates that <c>Common Test</c> has finished initial preparations
+ and begins executing test cases.
</p></item>
- <item><c>#event{name = test_done, data = EndTime}</c>
+ <tag><c>#event{name = test_done, data = EndTime}</c></tag>
+ <item>
<p><c>EndTime = {date(),time()}</c>, date and time the test run finished.</p>
- <p>This indicates that the last test case has been executed and
- Common Test is shutting down.
+ <p>This event indicates that the last test case has been executed and
+ <c>Common Test</c> is shutting down.
</p></item>
- <item><c>#event{name = start_info, data = {Tests,Suites,Cases}}</c>
- <p><c>Tests = integer()</c>, the number of tests.</p>
- <p><c>Suites = integer()</c>, the total number of suites.</p>
- <p><c>Cases = integer() | unknown</c>, the total number of test cases.</p>
- <p>Initial test run information that can be interpreted as: "This test
- run will execute <c>Tests</c> separate tests, in total containing
+ <tag><c>#event{name = start_info, data = {Tests,Suites,Cases}}</c></tag>
+ <item>
+ <p><c>Tests = integer()</c>, number of tests.</p>
+ <p><c>Suites = integer()</c>, total number of suites.</p>
+ <p><c>Cases = integer() | unknown</c>, total number of test cases.</p>
+ <p>This event gives initial test run information that can be interpreted as:
+ "This test run will execute <c>Tests</c> separate tests, in total containing
<c>Cases</c> number of test cases, in <c>Suites</c> number of suites".
- Note that if a test case group with a repeat property exists in any test,
- the total number of test cases can not be calculated (unknown).
+ However, if a test case group with a repeat property exists in any test,
+ the total number of test cases cannot be calculated (unknown).
</p></item>
- <item><c>#event{name = tc_start, data = {Suite,FuncOrGroup}}</c>
+ <tag><c>#event{name = tc_start, data = {Suite,FuncOrGroup}}</c></tag>
+ <item>
<p><c>Suite = atom()</c>, name of the test suite.</p>
<p><c>FuncOrGroup = Func | {Conf,GroupName,GroupProperties}</c></p>
<p><c>Func = atom()</c>, name of test case or configuration function.</p>
@@ -180,23 +207,24 @@
<p>This event informs about the start of a test case, or a group configuration
function. The event is sent also for <c>init_per_suite</c> and <c>end_per_suite</c>,
but not for <c>init_per_testcase</c> and <c>end_per_testcase</c>. If a group
- configuration function is starting, the group name and execution properties
- are also given.
+ configuration function starts, the group name and execution properties
+ are also specified.
</p></item>
- <item><c>#event{name = tc_logfile, data = {{Suite,Func},LogFileName}}</c>
+ <tag><c>#event{name = tc_logfile, data = {{Suite,Func},LogFileName}}</c></tag>
+ <item>
<p><c>Suite = atom()</c>, name of the test suite.</p>
<p><c>Func = atom()</c>, name of test case or configuration function.</p>
- <p><c>LogFileName = string()</c>, full name of test case log file.</p>
+ <p><c>LogFileName = string()</c>, full name of the test case log file.</p>
<p>This event is sent at the start of each test case (and configuration function
except <c>init/end_per_testcase</c>) and carries information about the
- full name (i.e. the file name including the absolute directory path) of
+ full name (that is, the file name including the absolute directory path) of
the current test case log file.
</p></item>
+ <tag><c>#event{name = tc_done, data = {Suite,FuncOrGroup,Result}}</c></tag>
<item>
- <marker id="tc_done"/>
- <c>#event{name = tc_done, data = {Suite,FuncOrGroup,Result}}</c>
+ <marker id="tc_done"/>
<p><c>Suite = atom()</c>, name of the suite.</p>
<p><c>FuncOrGroup = Func | {Conf,GroupName,GroupProperties}</c></p>
<p><c>Func = atom()</c>, name of test case or configuration function.</p>
@@ -211,34 +239,37 @@
{require_failed_in_suite0,RequireInfo} |
{failed,{Suite,init_per_testcase,FailInfo}} |
UserTerm</c>,
- the reason why the case has been skipped.</p>
+ why the case was skipped.</p>
<marker id="failreason"/>
<p><c>FailReason = {error,FailInfo} |
{error,{RunTimeError,StackTrace}} |
{timetrap_timeout,integer()} |
{failed,{Suite,end_per_testcase,FailInfo}}</c>, reason for failure.</p>
- <p><c>RequireInfo = {not_available,atom() | tuple()}</c>, why require has failed.</p>
+ <p><c>RequireInfo = {not_available,atom() | tuple()}</c>, why require failed.</p>
<p><c>FailInfo = {timetrap_timeout,integer()} |
{RunTimeError,StackTrace} |
UserTerm</c>,
- detailed information about an error.</p>
- <p><c>RunTimeError = term()</c>, a run-time error, e.g. badmatch, undef, etc.</p>
- <p><c>StackTrace = list()</c>, list of function calls preceeding a run-time error.</p>
- <p><c>UserTerm = term()</c>, arbitrary data specified by user, or <c>exit/1</c> info.</p>
- <p>This event informs about the end of a test case or a configuration function (see the
- <c>tc_start</c> event for details on the FuncOrGroup element). With this event comes the
- final result of the function in question. It is possible to determine on the top level
- of <c>Result</c> if the function was successful, skipped (by the user), or if it failed.
- It is of course possible to dig deeper and also perform pattern matching on the various
- reasons for skipped or failed. Note that <c>{'EXIT',Reason}</c> tuples have been translated into
- <c>{error,Reason}</c>. Note also that if a <c>{failed,{Suite,end_per_testcase,FailInfo}</c>
- result is received, it actually means the test case was successful, but that
+ error details.</p>
+ <p><c>RunTimeError = term()</c>, a runtime error, for example,
+ <c>badmatch</c> or <c>undef</c>.</p>
+ <p><c>StackTrace = list()</c>, list of function calls preceding a runtime error.</p>
+ <p><c>UserTerm = term()</c>, any data specified by user, or <c>exit/1</c> information.</p>
+ <p>This event informs about the end of a test case or a configuration function (see event
+ <c>tc_start</c> for details on element <c>FuncOrGroup</c>). With this event
+ comes the final result of the function in question. It is possible to determine on the
+ top level of <c>Result</c> if the function was successful, skipped (by the user),
+ or if it failed.</p>
+ <p>It is also possible to dig deeper and, for example, perform pattern matching
+ on the various reasons for skipped or failed. Notice that <c>{'EXIT',Reason}</c> tuples
+ are translated into <c>{error,Reason}</c>.
+ Notice also that if a <c>{failed,{Suite,end_per_testcase,FailInfo}</c>
+ result is received, the test case was successful, but
<c>end_per_testcase</c> for the case failed.
</p></item>
+ <tag><c>#event{name = tc_auto_skip, data = {Suite,TestName,Reason}}</c></tag>
<item>
<marker id="tc_auto_skip"></marker>
- <c>#event{name = tc_auto_skip, data = {Suite,TestName,Reason}}</c>
<p><c>Suite = atom()</c>, the name of the suite.</p>
<p><c>TestName = init_per_suite | end_per_suite |
{init_per_group,GroupName} | {end_per_group,GroupName} |
@@ -247,101 +278,116 @@
<p><c>GroupName = atom()</c>, the name of the test case group.</p>
<p><c>Reason = {failed,FailReason} |
{require_failed_in_suite0,RequireInfo}</c>,
- reason for auto skipping <c>Func</c>.</p>
+ reason for auto-skipping <c>Func</c>.</p>
<p><c>FailReason = {Suite,ConfigFunc,FailInfo}} |
{Suite,FailedCaseInSequence}</c>, reason for failure.</p>
- <p><c>RequireInfo = {not_available,atom() | tuple()}</c>, why require has failed.</p>
+ <p><c>RequireInfo = {not_available,atom() | tuple()}</c>, why require failed.</p>
<p><c>ConfigFunc = init_per_suite | init_per_group</c></p>
<p><c>FailInfo = {timetrap_timeout,integer()} |
{RunTimeError,StackTrace} |
bad_return | UserTerm</c>,
- detailed information about an error.</p>
- <p><c>FailedCaseInSequence = atom()</c>, name of a case that has failed in a sequence.</p>
- <p><c>RunTimeError = term()</c>, a run-time error, e.g. badmatch, undef, etc.</p>
- <p><c>StackTrace = list()</c>, list of function calls preceeding a run-time error.</p>
- <p><c>UserTerm = term()</c>, arbitrary data specified by user, or <c>exit/1</c> info.</p>
- <p>This event gets sent for every test case or configuration function that Common Test
+ error details.</p>
+ <p><c>FailedCaseInSequence = atom()</c>, the name of a case that failed in a sequence.</p>
+ <p><c>RunTimeError = term()</c>, a runtime error, for example <c>badmatch</c> or
+ <c>undef</c>.</p>
+ <p><c>StackTrace = list()</c>, list of function calls preceeding a runtime error.</p>
+ <p><c>UserTerm = term()</c>, any data specified by user, or <c>exit/1</c> information.</p>
+ <p>This event is sent for every test case or configuration function that <c>Common Test</c>
has skipped automatically because of either a failed <c>init_per_suite</c> or
<c>init_per_group</c>, a failed <c>require</c> in <c>suite/0</c>, or a failed test case
- in a sequence. Note that this event is never received as a result of a test case getting
- skipped because of <c>init_per_testcase</c> failing, since that information is carried with
- the <c>tc_done</c> event. If a failed test case belongs to a test case group, the second
- data element is a tuple <c>{FuncName,GroupName}</c>, otherwise simply the function name.
+ in a sequence. Notice that this event is never received as a result of a test case getting
+ skipped because of <c>init_per_testcase</c> failing, as that information is carried with
+ event <c>tc_done</c>. If a failed test case belongs to a test case group, the second
+ data element is a tuple <c>{FuncName,GroupName}</c>, otherwise only the function name.
</p></item>
+ <tag><c>#event{name = tc_user_skip, data = {Suite,TestName,Comment}}</c></tag>
<item>
- <marker id="tc_user_skip"></marker>
- <c>#event{name = tc_user_skip, data = {Suite,TestName,Comment}}</c>
+ <marker id="tc_user_skip"></marker>
<p><c>Suite = atom()</c>, the name of the suite.</p>
<p><c>TestName = init_per_suite | end_per_suite |
{init_per_group,GroupName} | {end_per_group,GroupName} |
{FuncName,GroupName} | FuncName</c></p>
<p><c>FuncName = atom()</c>, the name of the test case or configuration function.</p>
<p><c>GroupName = atom()</c>, the name of the test case group.</p>
- <p><c>Comment = string()</c>, reason for skipping the test case.</p>
- <p>This event specifies that a test case has been skipped by the user.
- It is only ever received if the skip was declared in a test specification.
+ <p><c>Comment = string()</c>, why the test case was skipped.</p>
+ <p>This event specifies that a test case was skipped by the user.
+ It is only received if the skip is declared in a test specification.
Otherwise, user skip information is received as a <c>{skipped,SkipReason}</c>
- result in the <c>tc_done</c> event for the test case. If a skipped test case belongs
+ result in event <c>tc_done</c> for the test case. If a skipped test case belongs
to a test case group, the second data element is a tuple <c>{FuncName,GroupName}</c>,
- otherwise simply the function name.
+ otherwise only the function name.
</p></item>
- <item><c>#event{name = test_stats, data = {Ok,Failed,Skipped}}</c>
- <p><c>Ok = integer()</c>, the current number of successful test cases.</p>
- <p><c>Failed = integer()</c>, the current number of failed test cases.</p>
+ <tag><c>#event{name = test_stats, data = {Ok,Failed,Skipped}}</c></tag>
+ <item>
+ <p><c>Ok = integer()</c>, current number of successful test cases.</p>
+ <p><c>Failed = integer()</c>, current number of failed test cases.</p>
<p><c>Skipped = {UserSkipped,AutoSkipped}</c></p>
- <p><c>UserSkipped = integer()</c>, the current number of user skipped test cases.</p>
- <p><c>AutoSkipped = integer()</c>, the current number of auto skipped test cases.</p>
- <p>This is a statistics event with the current count of successful, skipped
- and failed test cases so far. This event gets sent after the end of each test case,
- immediately following the <c>tc_done</c> event.
+ <p><c>UserSkipped = integer()</c>, current number of user-skipped test cases.</p>
+ <p><c>AutoSkipped = integer()</c>, current number of auto-skipped test cases.</p>
+ <p>This is a statistics event with current count of successful, skipped,
+ and failed test cases so far. This event is sent after the end of each test case,
+ immediately following event <c>tc_done</c>.
</p></item>
- </list>
+ </taglist>
+ </section>
+
+ <section>
+ <title>Internal Events</title>
- <p><em>Internal events:</em></p>
+ <p>The internal events are as follows:</p>
- <list>
- <item><c>#event{name = start_make, data = Dir}</c>
+ <taglist>
+ <tag><c>#event{name = start_make, data = Dir}</c></tag>
+ <item>
<p><c>Dir = string()</c>, running make in this directory.</p>
- <p>An internal event saying that Common Test will start compiling
+ <p>This internal event says that <c>Common Test</c> starts compiling
modules in directory <c>Dir</c>.
</p></item>
- <item><c>#event{name = finished_make, data = Dir}</c>
+ <tag><c>#event{name = finished_make, data = Dir}</c></tag>
+ <item>
<p><c>Dir = string()</c>, finished running make in this directory.</p>
- <p>An internal event saying that Common Test is finished compiling
+ <p>This internal event says that <c>Common Test</c> is finished compiling
modules in directory <c>Dir</c>.
</p></item>
- <item><c>#event{name = start_write_file, data = FullNameFile}</c>
+ <tag><c>#event{name = start_write_file, data = FullNameFile}</c></tag>
+ <item>
<p><c>FullNameFile = string(), full name of the file.</c></p>
- <p>An internal event used by the Common Test Master process to
+ <p>This internal event is used by the <c>Common Test</c> Master process to
synchronize particular file operations.
</p></item>
- <item><c>#event{name = finished_write_file, data = FullNameFile}</c>
+ <tag><c>#event{name = finished_write_file, data = FullNameFile}</c></tag>
+ <item>
<p><c>FullNameFile = string(), full name of the file.</c></p>
- <p>An internal event used by the Common Test Master process to
+ <p>This internal event is used by the <c>Common Test</c> Master process to
synchronize particular file operations.
</p></item>
- </list>
-
+ </taglist>
+ </section>
+ <section>
+ <title>Notes</title>
+
<p>The events are also documented in <c>ct_event.erl</c>. This module
- may serve as an example of what an event handler for the CT event
+ can serve as an example of what an event handler for the <c>Common Test</c> event
manager can look like.</p>
- <note><p>To ensure that printouts to standard out (or printouts made with
- <seealso marker="ct#log-2"><c>ct:log/2/3</c></seealso> or <seealso marker="ct:pal-2"><c>ct:pal/2/3</c></seealso>) get written to the test case log
- file, and not to the Common Test framework log, you can syncronize
- with the Common Test server by matching on the <c>tc_start</c> and <c>tc_done</c>
- events. In the period between these events, all IO gets directed to the
+ <note><p>To ensure that printouts to <c>stdout</c> (or printouts made with
+ <seealso marker="ct#log-2"><c>ct:log/2,3</c></seealso> or
+ <seealso marker="ct:pal-2"><c>ct:pal,2,3</c></seealso>) get written to the test case log
+ file, and not to the <c>Common Test</c> framework log, you can synchronize
+ with the <c>Common Test</c> server by matching on evvents <c>tc_start</c> and <c>tc_done</c>.
+ In the period between these events, all I/O is directed to the
test case log file. These events are sent synchronously to avoid potential
- timing problems (e.g. that the test case log file gets closed just before
- an IO message from an external process gets through). Knowing this, you
- need to be careful that your <c>handle_event/2</c> callback function doesn't
- stall the test execution, possibly causing unexpected behaviour as a result.</p></note>
+ timing problems (for example, that the test case log file is closed just before
+ an I/O message from an external process gets through). Knowing this, you
+ need to be careful that your <c>handle_event/2</c> callback function does not
+ stall the test execution, possibly causing unexpected behavior as a result.</p></note>
+ </section>
</section>
</chapter>
diff --git a/lib/common_test/doc/src/example_chapter.xml b/lib/common_test/doc/src/example_chapter.xml
index 8201107c04..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>
@@ -33,476 +33,472 @@
<marker id="top"></marker>
<section>
- <title>Test suite example</title>
- <p>This example test suite shows some tests of a database server.
+ <title>Test Suite Example</title>
+ <p>The following example test suite shows some tests of a database server:
</p>
<code>
--module(db_data_type_SUITE).
-
--include_lib("common_test/include/ct.hrl").
-
-%% Test server callbacks
--export([suite/0, all/0,
- init_per_suite/1, end_per_suite/1,
- init_per_testcase/2, end_per_testcase/2]).
-
-%% Test cases
--export([string/1, integer/1]).
-
--define(CONNECT_STR, "DSN=sqlserver;UID=alladin;PWD=sesame").
-
-%%--------------------------------------------------------------------
-%% COMMON TEST CALLBACK FUNCTIONS
-%%--------------------------------------------------------------------
-
-%%--------------------------------------------------------------------
-%% Function: suite() -> Info
-%%
-%% Info = [tuple()]
-%% List of key/value pairs.
-%%
-%% Description: Returns list of tuples to set default properties
-%% for the suite.
-%%--------------------------------------------------------------------
-suite() ->
- [{timetrap,{minutes,1}}].
-
-%%--------------------------------------------------------------------
-%% Function: init_per_suite(Config0) -> Config1
-%%
-%% Config0 = Config1 = [tuple()]
-%% A list of key/value pairs, holding the test case configuration.
-%%
-%% Description: Initialization before the suite.
-%%--------------------------------------------------------------------
-init_per_suite(Config) ->
- {ok, Ref} = db:connect(?CONNECT_STR, []),
- TableName = db_lib:unique_table_name(),
- [{con_ref, Ref },{table_name, TableName}| Config].
-
-%%--------------------------------------------------------------------
-%% Function: end_per_suite(Config) -> term()
-%%
-%% Config = [tuple()]
-%% A list of key/value pairs, holding the test case configuration.
-%%
-%% Description: Cleanup after the suite.
-%%--------------------------------------------------------------------
-end_per_suite(Config) ->
- Ref = ?config(con_ref, Config),
- db:disconnect(Ref),
- ok.
+ -module(db_data_type_SUITE).
+
+ -include_lib("common_test/include/ct.hrl").
+
+ %% Test server callbacks
+ -export([suite/0, all/0,
+ init_per_suite/1, end_per_suite/1,
+ init_per_testcase/2, end_per_testcase/2]).
+
+ %% Test cases
+ -export([string/1, integer/1]).
+
+ -define(CONNECT_STR, "DSN=sqlserver;UID=alladin;PWD=sesame").
+
+ %%--------------------------------------------------------------------
+ %% COMMON TEST CALLBACK FUNCTIONS
+ %%--------------------------------------------------------------------
+
+ %%--------------------------------------------------------------------
+ %% Function: suite() -> Info
+ %%
+ %% Info = [tuple()]
+ %% List of key/value pairs.
+ %%
+ %% Description: Returns list of tuples to set default properties
+ %% for the suite.
+ %%--------------------------------------------------------------------
+ suite() ->
+ [{timetrap,{minutes,1}}].
+
+ %%--------------------------------------------------------------------
+ %% Function: init_per_suite(Config0) -> Config1
+ %%
+ %% Config0 = Config1 = [tuple()]
+ %% A list of key/value pairs, holding the test case configuration.
+ %%
+ %% Description: Initialization before the suite.
+ %%--------------------------------------------------------------------
+ init_per_suite(Config) ->
+ {ok, Ref} = db:connect(?CONNECT_STR, []),
+ TableName = db_lib:unique_table_name(),
+ [{con_ref, Ref },{table_name, TableName}| Config].
+
+ %%--------------------------------------------------------------------
+ %% Function: end_per_suite(Config) -> term()
+ %%
+ %% Config = [tuple()]
+ %% A list of key/value pairs, holding the test case configuration.
+ %%
+ %% Description: Cleanup after the suite.
+ %%--------------------------------------------------------------------
+ end_per_suite(Config) ->
+ Ref = ?config(con_ref, Config),
+ db:disconnect(Ref),
+ ok.
-%%--------------------------------------------------------------------
-%% Function: init_per_testcase(TestCase, Config0) -> Config1
-%%
-%% TestCase = atom()
-%% Name of the test case that is about to run.
-%% Config0 = Config1 = [tuple()]
-%% A list of key/value pairs, holding the test case configuration.
-%%
-%% Description: Initialization before each test case.
-%%--------------------------------------------------------------------
-init_per_testcase(Case, Config) ->
- Ref = ?config(con_ref, Config),
- TableName = ?config(table_name, Config),
- ok = db:create_table(Ref, TableName, table_type(Case)),
- Config.
-
-%%--------------------------------------------------------------------
-%% Function: end_per_testcase(TestCase, Config) -> term()
-%%
-%% TestCase = atom()
-%% Name of the test case that is finished.
-%% Config = [tuple()]
-%% A list of key/value pairs, holding the test case configuration.
-%%
-%% Description: Cleanup after each test case.
-%%--------------------------------------------------------------------
-end_per_testcase(_Case, Config) ->
- Ref = ?config(con_ref, Config),
- TableName = ?config(table_name, Config),
- ok = db:delete_table(Ref, TableName),
- ok.
-
-%%--------------------------------------------------------------------
-%% Function: all() -> GroupsAndTestCases
-%%
-%% GroupsAndTestCases = [{group,GroupName} | TestCase]
-%% GroupName = atom()
-%% Name of a test case group.
-%% TestCase = atom()
-%% Name of a test case.
-%%
-%% Description: Returns the list of groups and test cases that
-%% are to be executed.
-%%--------------------------------------------------------------------
-all() ->
- [string, integer].
-
-
-%%--------------------------------------------------------------------
-%% TEST CASES
-%%--------------------------------------------------------------------
-
-string(Config) ->
- insert_and_lookup(dummy_key, "Dummy string", Config).
-
-integer(Config) ->
- insert_and_lookup(dummy_key, 42, Config).
-
-
-insert_and_lookup(Key, Value, Config) ->
- Ref = ?config(con_ref, Config),
- TableName = ?config(table_name, Config),
- ok = db:insert(Ref, TableName, Key, Value),
- [Value] = db:lookup(Ref, TableName, Key),
- ok = db:delete(Ref, TableName, Key),
- [] = db:lookup(Ref, TableName, Key),
- ok.
-
-</code>
+ %%--------------------------------------------------------------------
+ %% Function: init_per_testcase(TestCase, Config0) -> Config1
+ %%
+ %% TestCase = atom()
+ %% Name of the test case that is about to run.
+ %% Config0 = Config1 = [tuple()]
+ %% A list of key/value pairs, holding the test case configuration.
+ %%
+ %% Description: Initialization before each test case.
+ %%--------------------------------------------------------------------
+ init_per_testcase(Case, Config) ->
+ Ref = ?config(con_ref, Config),
+ TableName = ?config(table_name, Config),
+ ok = db:create_table(Ref, TableName, table_type(Case)),
+ Config.
+
+ %%--------------------------------------------------------------------
+ %% Function: end_per_testcase(TestCase, Config) -> term()
+ %%
+ %% TestCase = atom()
+ %% Name of the test case that is finished.
+ %% Config = [tuple()]
+ %% A list of key/value pairs, holding the test case configuration.
+ %%
+ %% Description: Cleanup after each test case.
+ %%--------------------------------------------------------------------
+ end_per_testcase(_Case, Config) ->
+ Ref = ?config(con_ref, Config),
+ TableName = ?config(table_name, Config),
+ ok = db:delete_table(Ref, TableName),
+ ok.
+
+ %%--------------------------------------------------------------------
+ %% Function: all() -> GroupsAndTestCases
+ %%
+ %% GroupsAndTestCases = [{group,GroupName} | TestCase]
+ %% GroupName = atom()
+ %% Name of a test case group.
+ %% TestCase = atom()
+ %% Name of a test case.
+ %%
+ %% Description: Returns the list of groups and test cases that
+ %% are to be executed.
+ %%--------------------------------------------------------------------
+ all() ->
+ [string, integer].
+
+
+ %%--------------------------------------------------------------------
+ %% TEST CASES
+ %%--------------------------------------------------------------------
+
+ string(Config) ->
+ insert_and_lookup(dummy_key, "Dummy string", Config).
+
+ integer(Config) ->
+ insert_and_lookup(dummy_key, 42, Config).
+
+
+ insert_and_lookup(Key, Value, Config) ->
+ Ref = ?config(con_ref, Config),
+ TableName = ?config(table_name, Config),
+ ok = db:insert(Ref, TableName, Key, Value),
+ [Value] = db:lookup(Ref, TableName, Key),
+ ok = db:delete(Ref, TableName, Key),
+ [] = db:lookup(Ref, TableName, Key),
+ ok.</code>
</section>
<section>
- <title>Test suite templates</title>
- <p>The Erlang mode for the Emacs editor includes two Common Test test suite
- templates, one with extensive information in the function headers, and
+ <title>Test Suite Templates</title>
+ <p>The Erlang mode for the Emacs editor includes two <c>Common Test</c> test
+ suite templates, one with extensive information in the function headers, and
one with minimal information. A test suite template provides a quick start
- for implementing a suite from scratch and gives you a good overview
- of the available callback functions. Here are the templates in question:
+ for implementing a suite from scratch and gives a good overview
+ of the available callback functions. The two templates follows:
</p>
- <p><em>Large Common Test suite</em></p>
+ <p><em>Large Common Test Suite</em></p>
<code>
-%%%-------------------------------------------------------------------
-%%% File : example_SUITE.erl
-%%% Author :
-%%% Description :
-%%%
-%%% Created :
-%%%-------------------------------------------------------------------
--module(example_SUITE).
-
-%% Note: This directive should only be used in test suites.
--compile(export_all).
-
--include_lib("common_test/include/ct.hrl").
-
-%%--------------------------------------------------------------------
-%% COMMON TEST CALLBACK FUNCTIONS
-%%--------------------------------------------------------------------
-
-%%--------------------------------------------------------------------
-%% Function: suite() -> Info
-%%
-%% Info = [tuple()]
-%% List of key/value pairs.
-%%
-%% Description: Returns list of tuples to set default properties
-%% for the suite.
-%%
-%% Note: The suite/0 function is only meant to be used to return
-%% default data values, not perform any other operations.
-%%--------------------------------------------------------------------
-suite() ->
- [{timetrap,{minutes,10}}].
-
-%%--------------------------------------------------------------------
-%% Function: init_per_suite(Config0) ->
-%% Config1 | {skip,Reason} | {skip_and_save,Reason,Config1}
-%%
-%% Config0 = Config1 = [tuple()]
-%% A list of key/value pairs, holding the test case configuration.
-%% Reason = term()
-%% The reason for skipping the suite.
-%%
-%% Description: Initialization before the suite.
-%%
-%% 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_suite(Config) ->
- Config.
-
-%%--------------------------------------------------------------------
-%% Function: end_per_suite(Config0) -> term() | {save_config,Config1}
-%%
-%% Config0 = Config1 = [tuple()]
-%% A list of key/value pairs, holding the test case configuration.
-%%
-%% Description: Cleanup after the suite.
-%%--------------------------------------------------------------------
-end_per_suite(_Config) ->
- ok.
-
-%%--------------------------------------------------------------------
-%% Function: init_per_group(GroupName, Config0) ->
-%% Config1 | {skip,Reason} | {skip_and_save,Reason,Config1}
-%%
-%% GroupName = atom()
-%% Name of the test case group that is about to run.
-%% Config0 = Config1 = [tuple()]
-%% A list of key/value pairs, holding configuration data for the group.
-%% Reason = term()
-%% The reason for skipping all test cases and subgroups in the group.
-%%
-%% Description: Initialization before each test case group.
-%%--------------------------------------------------------------------
-init_per_group(_GroupName, Config) ->
- Config.
-
-%%--------------------------------------------------------------------
-%% Function: end_per_group(GroupName, Config0) ->
-%% term() | {save_config,Config1}
-%%
-%% GroupName = atom()
-%% Name of the test case group that is finished.
-%% Config0 = Config1 = [tuple()]
-%% A list of key/value pairs, holding configuration data for the group.
-%%
-%% Description: Cleanup after each test case group.
-%%--------------------------------------------------------------------
-end_per_group(_GroupName, _Config) ->
- ok.
-
-%%--------------------------------------------------------------------
-%% Function: init_per_testcase(TestCase, Config0) ->
-%% Config1 | {skip,Reason} | {skip_and_save,Reason,Config1}
-%%
-%% TestCase = atom()
-%% Name of the test case that is about to run.
-%% Config0 = Config1 = [tuple()]
-%% A list of key/value pairs, holding the test case configuration.
-%% Reason = term()
-%% The reason for skipping the test case.
-%%
-%% Description: Initialization 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(_TestCase, Config) ->
- Config.
-
-%%--------------------------------------------------------------------
-%% Function: end_per_testcase(TestCase, Config0) ->
-%% term() | {save_config,Config1} | {fail,Reason}
-%%
-%% TestCase = atom()
-%% Name of the test case that is finished.
-%% Config0 = Config1 = [tuple()]
-%% A list of key/value pairs, holding the test case configuration.
-%% Reason = term()
-%% The reason for failing the test case.
-%%
-%% Description: Cleanup after each test case.
-%%--------------------------------------------------------------------
-end_per_testcase(_TestCase, _Config) ->
- ok.
-
-%%--------------------------------------------------------------------
-%% Function: groups() -> [Group]
-%%
-%% Group = {GroupName,Properties,GroupsAndTestCases}
-%% GroupName = atom()
-%% The name of the group.
-%% Properties = [parallel | sequence | Shuffle | {RepeatType,N}]
-%% Group properties that may be combined.
-%% GroupsAndTestCases = [Group | {group,GroupName} | TestCase]
-%% TestCase = atom()
-%% The name of a test case.
-%% Shuffle = shuffle | {shuffle,Seed}
-%% To get cases executed in random order.
-%% Seed = {integer(),integer(),integer()}
-%% RepeatType = repeat | repeat_until_all_ok | repeat_until_all_fail |
-%% repeat_until_any_ok | repeat_until_any_fail
-%% To get execution of cases repeated.
-%% N = integer() | forever
-%%
-%% Description: Returns a list of test case group definitions.
-%%--------------------------------------------------------------------
-groups() ->
- [].
-
-%%--------------------------------------------------------------------
-%% Function: all() -> GroupsAndTestCases | {skip,Reason}
-%%
-%% GroupsAndTestCases = [{group,GroupName} | TestCase]
-%% GroupName = atom()
-%% Name of a test case group.
-%% TestCase = atom()
-%% Name of a test case.
-%% Reason = term()
-%% The reason for skipping all groups and test cases.
-%%
-%% Description: Returns the list of groups and test cases that
-%% are to be executed.
-%%--------------------------------------------------------------------
-all() ->
- [my_test_case].
-
-
-%%--------------------------------------------------------------------
-%% TEST CASES
-%%--------------------------------------------------------------------
-
-%%--------------------------------------------------------------------
-%% Function: TestCase() -> Info
-%%
-%% Info = [tuple()]
-%% List of key/value pairs.
-%%
-%% Description: Test case info function - returns list of tuples to set
-%% properties for the test case.
-%%
-%% Note: This function is only meant to be used to return a list of
-%% values, not perform any other operations.
-%%--------------------------------------------------------------------
-my_test_case() ->
- [].
-
-%%--------------------------------------------------------------------
-%% Function: TestCase(Config0) ->
-%% ok | exit() | {skip,Reason} | {comment,Comment} |
-%% {save_config,Config1} | {skip_and_save,Reason,Config1}
-%%
-%% Config0 = Config1 = [tuple()]
-%% A list of key/value pairs, holding the test case configuration.
-%% Reason = term()
-%% The reason for skipping the test case.
-%% Comment = term()
-%% A comment about the test case that will be printed in the html log.
-%%
-%% Description: Test case function. (The name of it must be specified in
-%% the all/0 list or in a test case group for the test case
-%% to be executed).
-%%--------------------------------------------------------------------
-my_test_case(_Config) ->
- ok.
-</code>
+ %%%-------------------------------------------------------------------
+ %%% File : example_SUITE.erl
+ %%% Author :
+ %%% Description :
+ %%%
+ %%% Created :
+ %%%-------------------------------------------------------------------
+ -module(example_SUITE).
+
+ %% Note: This directive should only be used in test suites.
+ -compile(export_all).
+
+ -include_lib("common_test/include/ct.hrl").
+
+ %%--------------------------------------------------------------------
+ %% COMMON TEST CALLBACK FUNCTIONS
+ %%--------------------------------------------------------------------
+
+ %%--------------------------------------------------------------------
+ %% Function: suite() -> Info
+ %%
+ %% Info = [tuple()]
+ %% List of key/value pairs.
+ %%
+ %% Description: Returns list of tuples to set default properties
+ %% for the suite.
+ %%
+ %% Note: The suite/0 function is only meant to be used to return
+ %% default data values, not perform any other operations.
+ %%--------------------------------------------------------------------
+ suite() ->
+ [{timetrap,{minutes,10}}].
+
+ %%--------------------------------------------------------------------
+ %% Function: init_per_suite(Config0) ->
+ %% Config1 | {skip,Reason} | {skip_and_save,Reason,Config1}
+ %%
+ %% Config0 = Config1 = [tuple()]
+ %% A list of key/value pairs, holding the test case configuration.
+ %% Reason = term()
+ %% The reason for skipping the suite.
+ %%
+ %% Description: Initialization before the suite.
+ %%
+ %% 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_suite(Config) ->
+ Config.
+
+ %%--------------------------------------------------------------------
+ %% Function: end_per_suite(Config0) -> term() | {save_config,Config1}
+ %%
+ %% Config0 = Config1 = [tuple()]
+ %% A list of key/value pairs, holding the test case configuration.
+ %%
+ %% Description: Cleanup after the suite.
+ %%--------------------------------------------------------------------
+ end_per_suite(_Config) ->
+ ok.
+
+ %%--------------------------------------------------------------------
+ %% Function: init_per_group(GroupName, Config0) ->
+ %% Config1 | {skip,Reason} | {skip_and_save,Reason,Config1}
+ %%
+ %% GroupName = atom()
+ %% Name of the test case group that is about to run.
+ %% Config0 = Config1 = [tuple()]
+ %% A list of key/value pairs, holding configuration data for the group.
+ %% Reason = term()
+ %% The reason for skipping all test cases and subgroups in the group.
+ %%
+ %% Description: Initialization before each test case group.
+ %%--------------------------------------------------------------------
+ init_per_group(_GroupName, Config) ->
+ Config.
+
+ %%--------------------------------------------------------------------
+ %% Function: end_per_group(GroupName, Config0) ->
+ %% term() | {save_config,Config1}
+ %%
+ %% GroupName = atom()
+ %% Name of the test case group that is finished.
+ %% Config0 = Config1 = [tuple()]
+ %% A list of key/value pairs, holding configuration data for the group.
+ %%
+ %% Description: Cleanup after each test case group.
+ %%--------------------------------------------------------------------
+ end_per_group(_GroupName, _Config) ->
+ ok.
+
+ %%--------------------------------------------------------------------
+ %% Function: init_per_testcase(TestCase, Config0) ->
+ %% Config1 | {skip,Reason} | {skip_and_save,Reason,Config1}
+ %%
+ %% TestCase = atom()
+ %% Name of the test case that is about to run.
+ %% Config0 = Config1 = [tuple()]
+ %% A list of key/value pairs, holding the test case configuration.
+ %% Reason = term()
+ %% The reason for skipping the test case.
+ %%
+ %% Description: Initialization 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(_TestCase, Config) ->
+ Config.
+
+ %%--------------------------------------------------------------------
+ %% Function: end_per_testcase(TestCase, Config0) ->
+ %% term() | {save_config,Config1} | {fail,Reason}
+ %%
+ %% TestCase = atom()
+ %% Name of the test case that is finished.
+ %% Config0 = Config1 = [tuple()]
+ %% A list of key/value pairs, holding the test case configuration.
+ %% Reason = term()
+ %% The reason for failing the test case.
+ %%
+ %% Description: Cleanup after each test case.
+ %%--------------------------------------------------------------------
+ end_per_testcase(_TestCase, _Config) ->
+ ok.
+
+ %%--------------------------------------------------------------------
+ %% Function: groups() -> [Group]
+ %%
+ %% Group = {GroupName,Properties,GroupsAndTestCases}
+ %% GroupName = atom()
+ %% The name of the group.
+ %% Properties = [parallel | sequence | Shuffle | {RepeatType,N}]
+ %% Group properties that may be combined.
+ %% GroupsAndTestCases = [Group | {group,GroupName} | TestCase]
+ %% TestCase = atom()
+ %% The name of a test case.
+ %% Shuffle = shuffle | {shuffle,Seed}
+ %% To get cases executed in random order.
+ %% Seed = {integer(),integer(),integer()}
+ %% RepeatType = repeat | repeat_until_all_ok | repeat_until_all_fail |
+ %% repeat_until_any_ok | repeat_until_any_fail
+ %% To get execution of cases repeated.
+ %% N = integer() | forever
+ %%
+ %% Description: Returns a list of test case group definitions.
+ %%--------------------------------------------------------------------
+ groups() ->
+ [].
+
+ %%--------------------------------------------------------------------
+ %% Function: all() -> GroupsAndTestCases | {skip,Reason}
+ %%
+ %% GroupsAndTestCases = [{group,GroupName} | TestCase]
+ %% GroupName = atom()
+ %% Name of a test case group.
+ %% TestCase = atom()
+ %% Name of a test case.
+ %% Reason = term()
+ %% The reason for skipping all groups and test cases.
+ %%
+ %% Description: Returns the list of groups and test cases that
+ %% are to be executed.
+ %%--------------------------------------------------------------------
+ all() ->
+ [my_test_case].
+
+
+ %%--------------------------------------------------------------------
+ %% TEST CASES
+ %%--------------------------------------------------------------------
+
+ %%--------------------------------------------------------------------
+ %% Function: TestCase() -> Info
+ %%
+ %% Info = [tuple()]
+ %% List of key/value pairs.
+ %%
+ %% Description: Test case info function - returns list of tuples to set
+ %% properties for the test case.
+ %%
+ %% Note: This function is only meant to be used to return a list of
+ %% values, not perform any other operations.
+ %%--------------------------------------------------------------------
+ my_test_case() ->
+ [].
+
+ %%--------------------------------------------------------------------
+ %% Function: TestCase(Config0) ->
+ %% ok | exit() | {skip,Reason} | {comment,Comment} |
+ %% {save_config,Config1} | {skip_and_save,Reason,Config1}
+ %%
+ %% Config0 = Config1 = [tuple()]
+ %% A list of key/value pairs, holding the test case configuration.
+ %% Reason = term()
+ %% The reason for skipping the test case.
+ %% Comment = term()
+ %% A comment about the test case that will be printed in the html log.
+ %%
+ %% Description: Test case function. (The name of it must be specified in
+ %% the all/0 list or in a test case group for the test case
+ %% to be executed).
+ %%--------------------------------------------------------------------
+ my_test_case(_Config) ->
+ ok.</code>
<br></br>
- <p><em>Small Common Test suite</em></p>
+ <p><em>Small Common Test Suite</em></p>
<code>
-%%%-------------------------------------------------------------------
-%%% File : example_SUITE.erl
-%%% Author :
-%%% Description :
-%%%
-%%% Created :
-%%%-------------------------------------------------------------------
--module(example_SUITE).
-
--compile(export_all).
-
--include_lib("common_test/include/ct.hrl").
-
-%%--------------------------------------------------------------------
-%% Function: suite() -> Info
-%% Info = [tuple()]
-%%--------------------------------------------------------------------
-suite() ->
- [{timetrap,{seconds,30}}].
-
-%%--------------------------------------------------------------------
-%% Function: init_per_suite(Config0) ->
-%% Config1 | {skip,Reason} | {skip_and_save,Reason,Config1}
-%% Config0 = Config1 = [tuple()]
-%% Reason = term()
-%%--------------------------------------------------------------------
-init_per_suite(Config) ->
- Config.
-
-%%--------------------------------------------------------------------
-%% Function: end_per_suite(Config0) -> term() | {save_config,Config1}
-%% Config0 = Config1 = [tuple()]
-%%--------------------------------------------------------------------
-end_per_suite(_Config) ->
- ok.
-
-%%--------------------------------------------------------------------
-%% Function: init_per_group(GroupName, Config0) ->
-%% Config1 | {skip,Reason} | {skip_and_save,Reason,Config1}
-%% GroupName = atom()
-%% Config0 = Config1 = [tuple()]
-%% Reason = term()
-%%--------------------------------------------------------------------
-init_per_group(_GroupName, Config) ->
- Config.
-
-%%--------------------------------------------------------------------
-%% Function: end_per_group(GroupName, Config0) ->
-%% term() | {save_config,Config1}
-%% GroupName = atom()
-%% Config0 = Config1 = [tuple()]
-%%--------------------------------------------------------------------
-end_per_group(_GroupName, _Config) ->
- ok.
-
-%%--------------------------------------------------------------------
-%% Function: init_per_testcase(TestCase, Config0) ->
-%% Config1 | {skip,Reason} | {skip_and_save,Reason,Config1}
-%% TestCase = atom()
-%% Config0 = Config1 = [tuple()]
-%% Reason = term()
-%%--------------------------------------------------------------------
-init_per_testcase(_TestCase, Config) ->
- Config.
-
-%%--------------------------------------------------------------------
-%% Function: end_per_testcase(TestCase, Config0) ->
-%% term() | {save_config,Config1} | {fail,Reason}
-%% TestCase = atom()
-%% Config0 = Config1 = [tuple()]
-%% Reason = term()
-%%--------------------------------------------------------------------
-end_per_testcase(_TestCase, _Config) ->
- ok.
-
-%%--------------------------------------------------------------------
-%% Function: groups() -> [Group]
-%% Group = {GroupName,Properties,GroupsAndTestCases}
-%% GroupName = atom()
-%% Properties = [parallel | sequence | Shuffle | {RepeatType,N}]
-%% GroupsAndTestCases = [Group | {group,GroupName} | TestCase]
-%% TestCase = atom()
-%% Shuffle = shuffle | {shuffle,{integer(),integer(),integer()}}
-%% RepeatType = repeat | repeat_until_all_ok | repeat_until_all_fail |
-%% repeat_until_any_ok | repeat_until_any_fail
-%% N = integer() | forever
-%%--------------------------------------------------------------------
-groups() ->
- [].
-
-%%--------------------------------------------------------------------
-%% Function: all() -> GroupsAndTestCases | {skip,Reason}
-%% GroupsAndTestCases = [{group,GroupName} | TestCase]
-%% GroupName = atom()
-%% TestCase = atom()
-%% Reason = term()
-%%--------------------------------------------------------------------
-all() ->
- [my_test_case].
-
-%%--------------------------------------------------------------------
-%% Function: TestCase() -> Info
-%% Info = [tuple()]
-%%--------------------------------------------------------------------
-my_test_case() ->
- [].
-
-%%--------------------------------------------------------------------
-%% Function: TestCase(Config0) ->
-%% ok | exit() | {skip,Reason} | {comment,Comment} |
-%% {save_config,Config1} | {skip_and_save,Reason,Config1}
-%% Config0 = Config1 = [tuple()]
-%% Reason = term()
-%% Comment = term()
-%%--------------------------------------------------------------------
-my_test_case(_Config) ->
- ok.
-</code>
+ %%%-------------------------------------------------------------------
+ %%% File : example_SUITE.erl
+ %%% Author :
+ %%% Description :
+ %%%
+ %%% Created :
+ %%%-------------------------------------------------------------------
+ -module(example_SUITE).
+
+ -compile(export_all).
+
+ -include_lib("common_test/include/ct.hrl").
+
+ %%--------------------------------------------------------------------
+ %% Function: suite() -> Info
+ %% Info = [tuple()]
+ %%--------------------------------------------------------------------
+ suite() ->
+ [{timetrap,{seconds,30}}].
+
+ %%--------------------------------------------------------------------
+ %% Function: init_per_suite(Config0) ->
+ %% Config1 | {skip,Reason} | {skip_and_save,Reason,Config1}
+ %% Config0 = Config1 = [tuple()]
+ %% Reason = term()
+ %%--------------------------------------------------------------------
+ init_per_suite(Config) ->
+ Config.
+
+ %%--------------------------------------------------------------------
+ %% Function: end_per_suite(Config0) -> term() | {save_config,Config1}
+ %% Config0 = Config1 = [tuple()]
+ %%--------------------------------------------------------------------
+ end_per_suite(_Config) ->
+ ok.
+
+ %%--------------------------------------------------------------------
+ %% Function: init_per_group(GroupName, Config0) ->
+ %% Config1 | {skip,Reason} | {skip_and_save,Reason,Config1}
+ %% GroupName = atom()
+ %% Config0 = Config1 = [tuple()]
+ %% Reason = term()
+ %%--------------------------------------------------------------------
+ init_per_group(_GroupName, Config) ->
+ Config.
+
+ %%--------------------------------------------------------------------
+ %% Function: end_per_group(GroupName, Config0) ->
+ %% term() | {save_config,Config1}
+ %% GroupName = atom()
+ %% Config0 = Config1 = [tuple()]
+ %%--------------------------------------------------------------------
+ end_per_group(_GroupName, _Config) ->
+ ok.
+
+ %%--------------------------------------------------------------------
+ %% Function: init_per_testcase(TestCase, Config0) ->
+ %% Config1 | {skip,Reason} | {skip_and_save,Reason,Config1}
+ %% TestCase = atom()
+ %% Config0 = Config1 = [tuple()]
+ %% Reason = term()
+ %%--------------------------------------------------------------------
+ init_per_testcase(_TestCase, Config) ->
+ Config.
+
+ %%--------------------------------------------------------------------
+ %% Function: end_per_testcase(TestCase, Config0) ->
+ %% term() | {save_config,Config1} | {fail,Reason}
+ %% TestCase = atom()
+ %% Config0 = Config1 = [tuple()]
+ %% Reason = term()
+ %%--------------------------------------------------------------------
+ end_per_testcase(_TestCase, _Config) ->
+ ok.
+
+ %%--------------------------------------------------------------------
+ %% Function: groups() -> [Group]
+ %% Group = {GroupName,Properties,GroupsAndTestCases}
+ %% GroupName = atom()
+ %% Properties = [parallel | sequence | Shuffle | {RepeatType,N}]
+ %% GroupsAndTestCases = [Group | {group,GroupName} | TestCase]
+ %% TestCase = atom()
+ %% Shuffle = shuffle | {shuffle,{integer(),integer(),integer()}}
+ %% RepeatType = repeat | repeat_until_all_ok | repeat_until_all_fail |
+ %% repeat_until_any_ok | repeat_until_any_fail
+ %% N = integer() | forever
+ %%--------------------------------------------------------------------
+ groups() ->
+ [].
+
+ %%--------------------------------------------------------------------
+ %% Function: all() -> GroupsAndTestCases | {skip,Reason}
+ %% GroupsAndTestCases = [{group,GroupName} | TestCase]
+ %% GroupName = atom()
+ %% TestCase = atom()
+ %% Reason = term()
+ %%--------------------------------------------------------------------
+ all() ->
+ [my_test_case].
+
+ %%--------------------------------------------------------------------
+ %% Function: TestCase() -> Info
+ %% Info = [tuple()]
+ %%--------------------------------------------------------------------
+ my_test_case() ->
+ [].
+
+ %%--------------------------------------------------------------------
+ %% Function: TestCase(Config0) ->
+ %% ok | exit() | {skip,Reason} | {comment,Comment} |
+ %% {save_config,Config1} | {skip_and_save,Reason,Config1}
+ %% Config0 = Config1 = [tuple()]
+ %% Reason = term()
+ %% Comment = term()
+ %%--------------------------------------------------------------------
+ my_test_case(_Config) ->
+ ok.</code>
</section>
</chapter>
diff --git a/lib/common_test/doc/src/getting_started_chapter.xml b/lib/common_test/doc/src/getting_started_chapter.xml
index ef9c409bf1..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>
@@ -31,235 +31,247 @@
</header>
<section>
- <title>Are you new around here?</title>
+ <title>Introduction for Newcomers</title>
<p>
- The purpose of this short chapter is to, with a "learning by example"
- approach, give the newcomer a chance to get started quickly writing and
- executing some first simple tests. The chapter will introduce some of the
- basics, but leave most explanations and details for the later
- chapters in this User's Guide. Hopefully though, after this chapter, you
- will be inspired and unintimidated enough to go on and get into the
- nitty-gritty that follows in this rather heavy User's Guide! If you're
- not much into "learning by example" and prefer to get into more technical
- detail right away, go ahead and skip to the next chapter. Again, the basics
- presented here will be covered in detail in later chapters.
+ The purpose of this section is to let the newcomer get started in
+ quickly writing and executing some first simple tests with a
+ "learning by example" approach. Most explanations are left for later sections.
+ If you are not much into "learning by example" and prefer more technical
+ details, go ahead and skip to the next section.
</p>
<p>
- This chapter also tries to demonstrate how dead simple it actually is
- to write a very basic (yet for many module testing purposes, often sufficiently
- complex) test suite, and execute its test cases. This is not necessarily
- obvious when you read the rest of the chapters in the User's Guide.
- </p>
- <p>
- A quick note before we start: In order to understand what's discussed and
- examplified here, it is recommended that you first read through the
- opening <seealso marker="basics_chapter#basics">Common Test Basics</seealso>
- chapter.
+ This section demonstrates how simple it is to write a basic
+ (yet for many module testing purposes, often sufficiently complex)
+ test suite and execute its test cases. This is not necessarily
+ obvious when you read the remaining sections in this User's Guide.
</p>
+ <note>
+ <p>
+ To understand what is discussed and examplified here, we recommended
+ you to first read section
+ <seealso marker="basics_chapter#basics">Common Test Basics</seealso>.
+ </p>
+ </note>
</section>
<section>
- <title>Test case execution</title>
- <p>Execution of test cases is handled this way:</p>
+ <title>Test Case Execution</title>
+ <p>Execution of test cases is handled as follows:</p>
<image file="tc_execution.gif">
<icaption>
- Successful vs unsuccessful test case execution.
+ Successful and Unsuccessful Test Case Execution
</icaption>
</image>
- <p>For each test case that Common Test is told to execute, it spawns a
- dedicated process on which the test case function in question starts
+ <p>For each test case that <c>Common Test</c> is ordered to execute, it spawns a
+ dedicated process on which the test case function starts
running. (In parallel to the test case process, an idle waiting timer
- process is started which is linked to the test case process. If the timer
+ process is started, which is linked to the test case process. If the timer
process runs out of waiting time, it sends an exit signal to terminate
- the test case process and this is what's called a <em>timetrap</em>).
+ the test case process. This is called a <em>timetrap</em>).
</p>
- <p>In scenario 1, the test case process terminates normally after case A has
- finished executing its test code without detecting any errors. The test
- case function simply returns a value and Common Test logs the test case as
- successful.
+ <p>In scenario 1, the test case process terminates normally after
+ <c>case A</c> has finished executing its test code without detecting
+ any errors. The test case function returns a value and <c>Common Test</c>
+ logs the test case as successful.
</p>
- <p>In scenario 2, an error is detected during test case execution
- which causes the test case B function to generate an exception.
- This causes the test case process to exit with reason
- other than normal, and as a result, Common Test will log this as an
- unsuccessful test case.
+ <p>In scenario 2, an error is detected during test <c>case B</c> execution.
+ This causes the test <c>case B</c> function to generate an exception
+ and, as a result, the test case process exits with reason other than normal.
+ <c>Common Test</c> logs this as an unsuccessful (Failed) test case.
</p>
- <p>As you can understand from the illustration above, Common Test requires
- that a test case generates a runtime error to indicate failure (e.g.
- by causing a bad match error or by calling <c>exit/1</c>, preferrably
- through the <seealso marker="ct#fail-1"><c>ct:fail/1,2</c></seealso> help function). A succesful execution is
- indicated by means of a normal return from the test case function.
+ <p>As you can understand from the illustration, <c>Common Test</c> requires
+ a test case to generate a runtime error to indicate failure (for example,
+ by causing a bad match error or by calling <c>exit/1</c>, preferably
+ through the help function
+ <seealso marker="ct#fail-1"><c>ct:fail/1,2</c></seealso>). A successful
+ execution is indicated by a normal return from the test case function.
</p>
</section>
<section>
- <title>A simple test suite</title>
- <p>As you've seen in the basics chapter, the test suite module implements
+ <title>A Simple Test Suite</title>
+ <p>As shown in section
+ <seealso marker="basics_chapter#External_Interfaces">Common Test Basics</seealso>,
+ the test suite module implements
<seealso marker="common_test">callback functions</seealso>
- (mandatory or optional) for various purposes, e.g:
+ (mandatory or optional) for various purposes, for example:
</p>
- <list>
+ <list type="bulleted">
<item>Init/end configuration function for the test suite</item>
<item>Init/end configuration function for a test case</item>
<item>Init/end configuration function for a test case group</item>
<item>Test cases</item>
</list>
<p>
- The configuration functions are optional and if you don't need them for
- your test, a test suite with one simple test case could look like this:
+ The configuration functions are optional. The following example is a test suite
+ without configuration functions, including one simple test case, to
+ check that module <c>mymod</c> exists (that is, can be successfully loaded by the
+ code server):
</p>
<pre>
- -module(my1st_SUITE).
- -compile(export_all).
+ -module(my1st_SUITE).
+ -compile(export_all).
- all() ->
- [mod_exists].
+ all() ->
+ [mod_exists].
- mod_exists(_) ->
- {module,mymod} = code:load_file(mymod).</pre>
+ mod_exists(_) ->
+ {module,mymod} = code:load_file(mymod).</pre>
<p>
- In this example we check that the <c>mymod</c> module exists (i.e. can be
- successfully loaded by the code server). If the operation fails, we will
- get a bad match error which terminates the test case.
+ If the operation fails, a bad match error occurs that terminates the test case.
</p>
</section>
<section>
- <title>A test suite with configuration functions</title>
+ <title>A Test Suite with Configuration Functions</title>
<p>
- If we need to perform configuration operations in order to run our test, we
- implement configuration functions in our suite. The result from a
- configuration function is configuration data, or simply <em><c>Config</c></em>.
- This is a list of key-value tuples which get passed from the configuration
+ If you need to perform configuration operations to run your test, you can
+ implement configuration functions in your suite. The result from a
+ configuration function is configuration data, or <c>Config</c>.
+ This is a list of key-value tuples that get passed from the configuration
function to the test cases (possibly through configuration functions on
- "lower level"). The data flow looks like this:
+ "lower level"). The data flow looks as follows:
</p>
<image file="config.gif">
<icaption>
- Config data flow in the suite.
+ Configuration Data Flow in a Suite
</icaption>
</image>
<p>
- Here's an example of a test suite which uses configuration functions
- to open and close a log file for the test cases (an operation that would
- be unnecessary and irrelevant to perform by each test case):
+ The following example shows a test suite that uses configuration functions
+ to open and close a log file for the test cases (an operation that is
+ unnecessary and irrelevant to perform by each test case):
</p>
<pre>
- -module(check_log_SUITE).
- -export([all/0, init_per_suite/1, end_per_suite/1]).
- -export([check_restart_result/1, check_no_errors/1]).
-
- -define(value(Key,Config), proplists:get_value(Key,Config)).
+ -module(check_log_SUITE).
+ -export([all/0, init_per_suite/1, end_per_suite/1]).
+ -export([check_restart_result/1, check_no_errors/1]).
- all() -> [check_restart_result, check_no_errors].
+ -define(value(Key,Config), proplists:get_value(Key,Config)).
- init_per_suite(InitConfigData) ->
- [{logref,open_log()} | InitConfigData].
+ all() -> [check_restart_result, check_no_errors].
- end_per_suite(ConfigData) ->
- close_log(?value(logref, ConfigData)).
+ init_per_suite(InitConfigData) ->
+ [{logref,open_log()} | InitConfigData].
- check_restart_result(ConfigData) ->
- TestData = read_log(restart, ?value(logref, ConfigData)),
- {match,_Line} = search_for("restart successful", TestData).
-
- check_no_errors(ConfigData) ->
- TestData = read_log(all, ?value(logref, ConfigData)),
- case search_for("error", TestData) of
- {match,Line} -> ct:fail({error_found_in_log,Line});
- nomatch -> ok
- end.</pre>
+ end_per_suite(ConfigData) ->
+ close_log(?value(logref, ConfigData)).
+
+ check_restart_result(ConfigData) ->
+ TestData = read_log(restart, ?value(logref, ConfigData)),
+ {match,_Line} = search_for("restart successful", TestData).
+
+ check_no_errors(ConfigData) ->
+ TestData = read_log(all, ?value(logref, ConfigData)),
+ case search_for("error", TestData) of
+ {match,Line} -> ct:fail({error_found_in_log,Line});
+ nomatch -> ok
+ end.</pre>
<p>
- In this example we have test cases that verify, by parsing a
- log file, that our SUT has performed a successful restart and
- that no unexpected errors have been printed.
+ The test cases verify, by parsing a log file, that our SUT has performed
+ a successful restart and that no unexpected errors are printed.
</p>
- <p>To execute the test cases in the test suite above, we could type this on
- the Unix/Linux command line (assuming for this example that the suite module
+ <p>To execute the test cases in the recent test suite, type the
+ following on the UNIX/Linux command line (assuming that the suite module
is in the current working directory):
</p>
<pre>
- $ ct_run -dir .</pre>
- <p>or</p>
+ $ ct_run -dir .</pre>
+ <p>or:</p>
<pre>
- $ ct_run -suite check_log_SUITE</pre>
+ $ ct_run -suite check_log_SUITE</pre>
- <p>If we want to use the Erlang shell to run our test, we could evaluate this call:
+ <p>To use the Erlang shell to run our test, you can evaluate the following call:
</p>
<pre>
- 1> ct:run_test([{dir, "."}]).</pre>
- <p>or</p>
+ 1> ct:run_test([{dir, "."}]).</pre>
+ <p>or:</p>
<pre>
- 1> ct:run_test([{suite, "check_log_SUITE"}]).</pre>
+ 1> ct:run_test([{suite, "check_log_SUITE"}]).</pre>
<p>
- The result from running our test is printed in log files in HTML format
- (stored in unique log directories on different level). This illustration
- shows the log file structure:
+ The result from running the test is printed in log files in HTML format
+ (stored in unique log directories on a different level). The following
+ illustration shows the log file structure:
</p>
<image file="html_logs.gif">
<icaption>
- HTML log file structure.
+ HTML Log File Structure
</icaption>
</image>
</section>
<section>
- <title>What happens next?</title>
+ <title>Questions and Answers</title>
- <p>Well, you might already be asking yourself questions such as:</p>
+ <p>Here follows some questions that you might have after reading this section
+ with corresponding tips and links to the answers:
+ </p>
- <list>
- <item>"How and where can I specify variable data for my tests that mustn't
- be hard-coded in the test suites (such as host names, addresses,
- user login data, etc)?" The
- <seealso marker="config_file_chapter#top">External Configuration Data</seealso>
- chapter will give you that information.
+ <list type="bulleted">
+ <item><p><em>Question:</em>
+ "How and where can I specify variable data for my tests that must not
+ be hard-coded in the test suites (such as hostnames, addresses, and
+ user login data)?"</p>
+ <p><em>Answer:</em>
+ See section <seealso marker="config_file_chapter#top">External Configuration Data</seealso>.</p>
</item>
- <item>"Is there a way to declare a number of different tests and run them
- in one session without having to write my own scripts? And can such
- declarations be used for regression testing?" The
+
+ <item><p><em>Question:</em> "Is there a way to declare different tests and run them
+ in one session without having to write my own scripts? Also, can such
+ declarations be used for regression testing?"</p>
+ <p><em>Answer:</em> See section
<seealso marker="run_test_chapter#test_specifications">Test Specifications</seealso>
- chapter answers these questions.
+ in section Running Tests and Analyzing Results.
+ </p>
</item>
- <item>"Can test cases and/or test runs be automatically repeated?" Learn more about
+
+ <item><p><em>Question:</em> "Can test cases and/or test runs be automatically repeated?"</p>
+ <p><em>Answer:</em> Learn more about
<seealso marker="write_test_chapter#test_case_groups">Test Case Groups</seealso>
- and also read about start flags/options in the
- <seealso marker="run_test_chapter#ct_run">Running Tests</seealso> chapter and
- the Reference Manual.
+ and read about start flags/options in section
+ <seealso marker="run_test_chapter#ct_run">Running Tests</seealso> and in
+ the Reference Manual.</p>
</item>
- <item>"Will Common Test execute my test cases in sequence or in parallel?" The
+
+ <item><p><em>Question:</em> "Does <c>Common Test</c> execute my test cases in sequence or in parallel?"</p>
+ <p><em>Answer:</em> See
<seealso marker="write_test_chapter#test_case_groups">Test Case Groups</seealso>
- section in the Running Tests chapter will give you the answer.
+ in section Writing Test Suites.</p>
</item>
- <item>"What's the syntax for timetraps (mentioned above), and how do I set them?"
- This is explained in the
- <seealso marker="write_test_chapter#timetraps">Timetrap Timeouts</seealso>
- part of the Writing Test Suites chapter.
+
+ <item><p><em>Question:</em> "What is the syntax for timetraps (mentioned earlier), and how do I set them?"</p>
+ <p><em>Answer:</em> This is explained in the
+ <seealso marker="write_test_chapter#timetraps">Timetrap Time-Outs</seealso>
+ part of section Writing Test Suites.</p>
</item>
- <item>"What functions are available for logging and printing?" Check the
+
+ <item><p><em>Question:</em> "What functions are available for logging and printing?"</p>
+ <p><em>Answer:</em> See
<seealso marker="write_test_chapter#logging">Logging</seealso>
- section in the Writing Test Suites chapter.
+ in section Writing Test Suites.</p>
</item>
- <item>"I need data files for my tests. Where do I store them preferrably?"
- You should read about
+
+ <item><p><em>Question:</em> "I need data files for my tests. Where do I store them preferably?"</p>
+ <p><em>Answer:</em> See
<seealso marker="write_test_chapter#data_priv_dir">Data and Private
- Directories</seealso> for information about this.
+ Directories</seealso>.</p>
</item>
- <item>"May I start with a test suite example, please?"
- <seealso marker="example_chapter#top">Sure!</seealso>
+
+ <item><p><em>Question:</em> "Can I start with a test suite example, please?"</p>
+ <p><em>Answer:</em> <seealso marker="example_chapter#top">Welcome!</seealso></p>
</item>
</list>
- <p>You will probably want to get started on your own first test suites now, while
- at the same time digging deeper into the Common Test User's Guide and Reference Manual.
- You will find that there's lots more to learn about the things that have been introduced
- in this chapter. You will of course also be presented many more useful features, such as the
- ones listed above. Have fun!
+ <p>You probably want to get started on your own first test suites now, while
+ at the same time digging deeper into the <c>Common Test</c> User's Guide and Reference Manual.
+ There are much more to learn about the things that have been introduced
+ in this section. There are also many other useful features to learn,
+ so please continue to the other sections and have fun.
</p>
</section>
</chapter>
diff --git a/lib/common_test/doc/src/install_chapter.xml b/lib/common_test/doc/src/install_chapter.xml
index 107b0e2eac..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>
@@ -32,22 +32,23 @@
<section>
<marker id="general"></marker>
- <title>General information</title>
-
- <p>The two main interfaces for running tests with Common Test
- are an executable program named <c>ct_run</c> and an
- erlang module named <c>ct</c>. The ct_run program
- is compiled for the underlying operating system (e.g. Unix/Linux
- or Windows) during the build of the Erlang/OTP system, and is
- installed automatically with other executable programs in
+ <title>General Information</title>
+
+ <p>The two main interfaces for running tests with <c>Common Test</c>
+ are an executable program named
+ <seealso marker="ct_run"><c>ct_run</c></seealso> and the
+ Erlang module <seealso marker="ct"><c>ct</c></seealso>.
+ <c>ct_run</c> is compiled for the underlying operating system (for example,
+ Unix/Linux or Windows) during the build of the Erlang/OTP system,
+ and is installed automatically with other executable programs in
the top level <c>bin</c> directory of Erlang/OTP.
The <c>ct</c> interface functions can be called from the Erlang shell,
or from any Erlang function, on any supported platform.</p>
- <p>The Common Test application is installed with the Erlang/OTP
- system and no additional installation step is required to start using
- Common Test by means of the <c>ct_run</c> executable program, and/or
- the interface functions in the <c>ct</c> module.</p>
+ <p>The <c>Common Test</c> application is installed with the Erlang/OTP
+ system. No extra installation step is required to start using
+ <c>Common Test</c> through the <c>ct_run</c> executable program,
+ and/or the interface functions in the <c>ct</c> module.</p>
</section>
</chapter>
diff --git a/lib/common_test/doc/src/introduction.xml b/lib/common_test/doc/src/introduction.xml
new file mode 100644
index 0000000000..40724f24e9
--- /dev/null
+++ b/lib/common_test/doc/src/introduction.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE chapter SYSTEM "chapter.dtd">
+
+<chapter>
+ <header>
+ <copyright>
+ <year>2003</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>Introduction</title>
+ <prepared></prepared>
+ <docno></docno>
+ <date>2015-10-05</date>
+ <rev></rev>
+ <file>introduction.xml</file>
+ </header>
+ <section>
+ <title>Scope</title>
+ <p><c>Common Test</c> is a portable application for automated
+ testing. It is suitable for:</p>
+ <list type="bulleted">
+ <item><p>Black-box testing of target systems of any type (that
+ is, not necessarily implemented in Erlang). This is performed
+ through standard O&amp;M interfaces (such as SNMP, HTTP, CORBA,
+ and Telnet) and, if necessary, through user-specific interfaces
+ (often called test ports).</p></item>
+ <item><p>White-box testing of Erlang/OTP programs. This is easily
+ done by calling the target API functions directly from the test
+ case functions.</p></item>
+ </list>
+ <p><c>Common Test</c> also integrates use of the OTP
+ <seealso marker="tools:cover">cover</seealso> tool in application
+ <c>Tools</c> for code coverage analysis of Erlang/OTP programs.</p>
+
+ <p><c>Common Test</c> executes test suite programs automatically,
+ without operator interaction. Test progress and results are
+ printed to logs in HTML format, easily browsed with a standard
+ web browser. <c>Common Test</c> also sends notifications about progress
+ and results through an OTP event manager to event handlers plugged
+ in to the system. This way, users can integrate their own
+ programs for, for example, logging, database storing, or supervision with
+ <c>Common Test</c>.</p>
+
+ <p><c>Common Test</c> provides libraries with useful support
+ functions to fill various testing needs and requirements.
+ There is, for example, support for flexible test declarations
+ through test specifications. There is also support
+ for central configuration and control of multiple
+ independent test sessions (to different target systems)
+ running in parallel.</p>
+
+ </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/common_test/doc/src/notes.xml b/lib/common_test/doc/src/notes.xml
index 57a8c6c9e2..ebba864606 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,6 +33,153 @@
<file>notes.xml</file>
</header>
+<section><title>Common_Test 1.12.1</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ The <c>nodelay</c> option used to be enabled
+ (<c>true</c>) by default for sockets opened by the Common
+ Test telnet client. This appeared to cause communication
+ problems with telnet servers on some systems, and
+ therefore the option is no longer used. Its value may
+ instead be specified in the telnet connection settings.
+ See the man page for <c>ct_telnet</c> for details. Please
+ note that the interface function <c>connect</c> in
+ <c>unix_telnet</c> has been updated with an extra
+ argument and is now <c>unix_telnet:connect/7</c>.</p>
+ <p>
+ Own Id: OTP-13462 Aux Id: seq13077 </p>
+ </item>
+ <item>
+ <p>
+ Fix bug in cth_surefire: When a pre_init_per_suite hook
+ fails before reaching the
+ cth_surefire:pre_init_per_suite, cth_surefire produced
+ incorrect XML.</p>
+ <p>
+ Own Id: OTP-13513</p>
+ </item>
+ <item>
+ <p>
+ The <c>ct:get_timetrap_info/0</c> function has been
+ updated to return more information about timetrap
+ scaling.</p>
+ <p>
+ Own Id: OTP-13535</p>
+ </item>
+ <item>
+ <p>
+ A problem with stylesheet HTML tags getting incorrectly
+ escaped by Common Test has been corrected.</p>
+ <p>
+ Own Id: OTP-13536</p>
+ </item>
+ <item>
+ <p>
+ The <c>ct_run</c> start flag <c>-no_esc_chars</c> and
+ <c>ct:run_test/1</c> start option <c>{esc_chars,Bool}</c>
+ have been introduced to make it possible to disable
+ automatic escaping of characters. Automatic escaping of
+ special HTML characters printed with <c>io:format/1,2</c>
+ and <c>ct:pal/1,2,3,4</c> was introduced in Common Test
+ 1.12. The new flag/option may be used to disable this
+ feature for backwards compatibility reasons. (The option
+ is also supported in test specifications).</p>
+ <p>
+ Own Id: OTP-13537</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>Common_Test 1.12</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ This update fixes the problem with generic printouts in
+ the html log file not having special characters escaped.
+ Printouts made with <c>io:format/2</c> and
+ <c>ct:pal/2</c> will now get special characters escaped
+ automatically. Common Test will not attempt to escape
+ characters printed with <c>ct:log/2</c> since it is
+ assumed that the user may want to print html tagged data
+ using this function. A new function, <c>ct:log/5</c>, has
+ been added, which offers optional escaping of characters.
+ The latter function may also be used to print text to the
+ log without headers and CSS class wrapping (analogue to
+ <c>io:format/2</c>).</p>
+ <p>
+ Own Id: OTP-13003 Aux Id: seq13005 </p>
+ </item>
+ <item>
+ <p>
+ Commit 4cf832f1ad163f5b25dd8a6f2d314c169c23c82f
+ erroneously removed logging of open and close of netconf
+ connections. This is now corrected.</p>
+ <p>
+ Own Id: OTP-13386</p>
+ </item>
+ <item>
+ <p>
+ The directory to which nodes started with
+ <c>test_server:start_node/3</c> writes their
+ erl_crash.dump is changed. The crashdumps were earlier
+ written to the directory of test_server.beam, but in
+ later versions of Microsoft Windows this is no longer
+ writable (even for administrators). The framework
+ (common_test) log directory is now used instead.</p>
+ <p>
+ Own Id: OTP-13388</p>
+ </item>
+ </list>
+ </section>
+
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ This update makes it possible to specify multiple
+ instances of the same group or test case in one test
+ specification term in order to repeat execution. Example:
+ <c>{groups, "./", my_SUITE, [my_group, my_group], {cases,
+ all}}, or {cases, "./", my_SUITE, [my_tc, my_tc,
+ my_tc]}.</c></p>
+ <p>
+ Own Id: OTP-13241 Aux Id: seq12979 </p>
+ </item>
+ <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>
+ <item>
+ <p>
+ The <c>ct_netconfc</c> was earlier very restrictive as to
+ which SSH options the user could set. This is now
+ changed, and any SSH option is now allowed. The netconf
+ client will simply pass on any option, which it does not
+ recognize, to SSH.</p>
+ <p>
+ Own Id: OTP-13338 Aux Id: seq13053,seq13069 </p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
<section><title>Common_Test 1.11.2</title>
<section><title>Fixed Bugs and Malfunctions</title>
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 0f4c448787..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>
@@ -31,40 +31,9 @@
</header>
<description>
- <p><em>Common Test</em> is a portable application for automated
- testing. It is suitable for black-box testing of target
- systems of any type (i.e. not necessarily implemented in Erlang),
- as well as for white-box testing of Erlang/OTP programs.
- Black-box testing is performed via standard O&amp;M
- interfaces (such as SNMP, HTTP, Corba, Telnet, etc) and,
- if required, via user specific interfaces (often called test
- ports). White-box testing of Erlang/OTP programs is easily
- accomplished by calling the target API functions directly
- from the test case functions. Common Test also integrates
- usage of the OTP cover tool for code coverage analysis of
- Erlang/OTP programs.</p>
-
- <p>Common Test executes test suite programs automatically,
- without operator interaction. Test progress and results is
- printed to logs on HTML format, easily browsed with a standard
- web browser. Common Test also sends notifications about progress
- and results via an OTP event manager to event handlers plugged
- in to the system. This way users can integrate their own
- programs for e.g. logging, database storing or supervision with
- Common Test.</p>
-
- <p>Common Test provides libraries that contain useful support
- functions to fill various testing needs and requirements.
- There is for example support for flexible test declarations
- by means of so called test specifications. There is also support
- for central configuration and control of multiple
- independent test sessions (towards different target systems)
- running in parallel.</p>
-
- <p>Common Test is implemented as a framework based on the OTP Test
- Server application.</p>
</description>
+ <xi:include href="introduction.xml"/>
<xi:include href="basics_chapter.xml"/>
<xi:include href="getting_started_chapter.xml"/>
<xi:include href="install_chapter.xml"/>
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 f98e2475a9..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>
@@ -30,43 +30,10 @@
<file>ref_man.xml</file>
</header>
<description>
- <p><em>Common Test</em> is a portable application for automated
- testing. It is suitable for black-box testing of target
- systems of any type (i.e. not necessarily implemented in Erlang),
- as well as for white-box testing of Erlang/OTP programs.
- Black-box testing is performed via standard O&amp;M
- interfaces (such as SNMP, HTTP, Corba, Telnet, etc) and,
- if required, via user specific interfaces (often called test
- ports). White-box testing of Erlang/OTP programs is easily
- accomplished by calling the target API functions directly
- from the test case functions. Common Test also integrates
- usage of the OTP cover tool for code coverage analysis of
- Erlang/OTP programs.</p>
-
- <p>Common Test executes test suite programs automatically,
- without operator interaction. Test progress and results is
- printed to logs on HTML format, easily browsed with a standard
- web browser. Common Test also sends notifications about progress
- and results via an OTP event manager to event handlers plugged
- in to the system. This way users can integrate their own
- programs for e.g. logging, database storing or supervision with
- Common Test.</p>
-
- <p>Common Test provides libraries that contain useful support
- functions to fill various testing needs and requirements.
- There is for example support for flexible test declarations
- by means of so called test specifications. There is also support
- for central configuration and control of multiple
- independent test sessions (towards different target systems)
- running in parallel.</p>
-
- <p>Common Test is implemented as a framework based on the OTP Test
- Server application.</p>
</description>
+
<xi:include href="common_test_app.xml"/>
<xi:include href="ct_run.xml"/>
- <!-- If you make modifications in the module list below,
- you also need to update CT_MODULES in Makefile. -->
<xi:include href="ct.xml"/>
<xi:include href="ct_master.xml"/>
<xi:include href="ct_cover.xml"/>
@@ -83,6 +50,3 @@
</application>
-
-
-
diff --git a/lib/common_test/doc/src/run_test_chapter.xml b/lib/common_test/doc/src/run_test_chapter.xml
index 082a587c8d..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>
@@ -33,95 +33,96 @@
<section>
<title>Using the Common Test Framework</title>
- <p>The Common Test Framework provides a high level
- operator interface for testing. It adds the following features to
- the Erlang/OTP Test Server:</p>
+ <p>The <c>Common Test</c> framework provides a high-level
+ operator interface for testing, providing the following features:</p>
- <list>
- <item>Automatic compilation of test suites (and help modules).</item>
- <item>Creation of additional HTML pages for better overview.</item>
- <item>Single command interface for running all available tests.</item>
+ <list type="bulleted">
+ <item>Automatic compilation of test suites (and help modules)</item>
+ <item>Creation of extra HTML pages for improved overview.</item>
+ <item>Single-command interface for running all available tests</item>
<item>Handling of configuration files specifying data related to
- the System Under Test (and any other variable data).</item>
+ the System Under Test (SUT) (and any other variable data)</item>
<item>Mode for running multiple independent test sessions in parallel with
- central control and configuration.</item>
+ central control and configuration</item>
</list>
</section>
<section>
- <title>Automatic compilation of test suites and help modules</title>
- <p>When Common Test starts, it will automatically attempt to compile any
+ <title>Automatic Compilation of Test Suites and Help Modules</title>
+ <p>When <c>Common Test</c> starts, it automatically attempts to compile any
suites included in the specified tests. If particular
- suites have been specified, only those suites will be compiled. If a
- particular test object directory has been specified (meaning all suites
- in this directory should be part of the test), Common Test runs
- make:all/1 in the directory to compile the suites.</p>
+ suites are specified, only those suites are compiled. If a
+ particular test object directory is specified (meaning all suites
+ in this directory are to be part of the test), <c>Common Test</c> runs
+ function <c>make:all/1</c> in the directory to compile the suites.</p>
- <p>If compilation should fail for one or more suites, the compilation errors
- are printed to tty and the operator is asked if the test run should proceed
+ <p>If compilation fails for one or more suites, the compilation errors
+ are printed to tty and the operator is asked if the test run is to proceed
without the missing suites, or be aborted. If the operator chooses to proceed,
- it is noted in the HTML log which tests have missing suites. Also, for each failed
- compilation, the failed tests counter in the return value of
- <c><![CDATA[ct:run_test/1]]></c> is incremented. If Common Test is unable to prompt
- the user after compilation failure (if Common Test doesn't control stdin), the test
- run will proceed automatically without the missing suites. In order to always
- abort the test run (without operator interaction) if one or more suites fail
- to compile, the <c><![CDATA[ct_run]]></c> flag <c><![CDATA[-abort_if_missing_suites]]></c>,
- or the <c><![CDATA[ct:run_test/1]]></c> option
- <c><![CDATA[{abort_if_missing_suites,true}]]></c> should be set.</p>
-
- <p>Any help module (i.e. regular Erlang module with name not ending with
- "_SUITE") that resides in the same test object directory as a suite
- which is part of the test, will also be automatically compiled. A help
- module will not be mistaken for a test suite (unless it has a "_SUITE"
- name of course). All help modules in a particular test object directory
- are compiled no matter if all or only particular suites in the directory
+ the tests having missing suites are noted in the HTML log. If <c>Common Test</c> is
+ unable to prompt the user after compilation failure (if <c>Common Test</c> does not
+ control <c>stdin</c>), the test run proceeds automatically without the missing
+ suites. This behavior can however be modified with the
+ <c><![CDATA[ct_run]]></c> flag <c><![CDATA[-abort_if_missing_suites]]></c>,
+ or the <seealso marker="ct#run_test-1"><c>ct:run_test/1</c></seealso> option
+ <c><![CDATA[{abort_if_missing_suites,TrueOrFalse}]]></c>. If
+ <c><![CDATA[abort_if_missing_suites]]></c> is set to <c>true</c>, the test run
+ stops immediately if some suites fail to compile.</p>
+
+ <p>Any help module (that is, regular Erlang module with name not ending with
+ "_SUITE") that resides in the same test object directory as a suite,
+ which is part of the test, is also automatically compiled. A help
+ module is not mistaken for a test suite (unless it has a "_SUITE" name).
+ All help modules in a particular test object directory
+ are compiled, no matter if all or only particular suites in the directory
are part of the test.</p>
<p>If test suites or help modules include header files stored in other
- locations than the test directory, you may specify these include directories
- by means of the <c><![CDATA[-include]]></c> flag with <c><![CDATA[ct_run]]></c>,
- or the <c><![CDATA[include]]></c> option with <c><![CDATA[ct:run_test/1]]></c>.
- In addition to this, an include path may be specified with an OS
- environment variable; <c><![CDATA[CT_INCLUDE_PATH]]></c>. Example (bash):</p>
+ locations than the test directory, these include directories can be specified
+ by using flag <c><![CDATA[-include]]></c> with
+ <seealso marker="ct_run"><c>ct_run</c></seealso>,
+ or option <c><![CDATA[include]]></c> with <c><![CDATA[ct:run_test/1]]></c>.
+ Also, an include path can be specified with an OS
+ environment variable, <c><![CDATA[CT_INCLUDE_PATH]]></c>.</p>
+ <p><em>Example (bash):</em></p>
<p><c>$ export CT_INCLUDE_PATH=~testuser/common_suite_files/include:~testuser/common_lib_files/include</c></p>
- <p>Common Test will pass all include directories (specified either with the
- <c><![CDATA[include]]></c> flag/option, or the <c><![CDATA[CT_INCLUDE_PATH]]></c>
- variable, or both) to the compiler.</p>
+ <p><c>Common Test</c> passes all include directories (specified either with flag/option
+ <c><![CDATA[include]]></c>, or variable <c><![CDATA[CT_INCLUDE_PATH]]></c>
+ , or both, to the compiler.</p>
- <p>It is also possible to specify include directories in test specifications
- (see below).</p>
+ <p>Include directories can also be specified in test specifications,
+ see <seealso marker="#test_specifications">Test Specifications</seealso>.</p>
- <p>If the user wants to run all test suites for a test object (or OTP application)
- by specifying only the top directory (e.g. with the <c>dir</c> start flag/option),
- Common Test will primarily look for test suite modules in a subdirectory named
- <c>test</c>. If this subdirectory doesn't exist, the specified top directory
- is assumed to be the actual test directory, and test suites will be read from
+ <p>If the user wants to run all test suites for a test object (or an OTP application)
+ by specifying only the top directory (for example, with start flag/option <c>dir</c>),
+ <c>Common Test</c> primarily looks for test suite modules in a subdirectory named
+ <c>test</c>. If this subdirectory does not exist, the specified top directory
+ is assumed to be the test directory, and test suites are read from
there instead.</p>
- <p>It is possible to disable the automatic compilation feature by using the
- <c><![CDATA[-no_auto_compile]]></c> flag with <c><![CDATA[ct_run]]></c>, or
- the <c><![CDATA[{auto_compile,false}]]></c> option with
+ <p>To disable the automatic compilation feature, use flag
+ <c><![CDATA[-no_auto_compile]]></c> with <c><![CDATA[ct_run]]></c>, or
+ option <c><![CDATA[{auto_compile,false}]]></c> with
<c><![CDATA[ct:run_test/1]]></c>. With automatic compilation
disabled, the user is responsible for compiling the test suite modules
- (and any help modules) before the test run. If the modules can not be loaded
- from the local file system during startup of Common Test, the user needs to
- pre-load the modules before starting the test. Common Test will only verify
- that the specified test suites exist (i.e. that they are, or can be, loaded).
- This is useful e.g. if the test suites are transferred and loaded as binaries via
- RPC from a remote node.</p>
+ (and any help modules) before the test run. If the modules cannot be loaded
+ from the local file system during startup of <c>Common Test</c>, the user must
+ preload the modules before starting the test. <c>Common Test</c> only verifies
+ that the specified test suites exist (that is, that they are, or can be, loaded).
+ This is useful, for example, if the test suites are transferred and loaded as
+ binaries through RPC from a remote node.</p>
</section>
<section>
<marker id="ct_run"></marker>
- <title>Running tests from the OS command line</title>
+ <title>Running Tests from the OS Command Line</title>
- <p>The <c>ct_run</c> program can be used for running tests from
- the OS command line, e.g.
+ <p>The <seealso marker="ct_run"><c>ct_run</c></seealso> program can be used
+ for running tests from the OS command line, for example, as follows:
</p>
- <list>
+ <list type="bulleted">
<item><c><![CDATA[ct_run -config <configfilenames> -dir <dirs>]]></c></item>
<item><c><![CDATA[ct_run -config <configfilenames> -suite <suiteswithfullpath>]]></c>
</item>
@@ -130,824 +131,924 @@
<item><c><![CDATA[ct_run -config <configfilenames> -suite <suitewithfullpath>
-group <groups> -case <casenames>]]></c></item>
</list>
- <p>Examples:</p>
- <p><c>$ ct_run -config $CFGS/sys1.cfg $CFGS/sys2.cfg -dir $SYS1_TEST $SYS2_TEST</c></p>
- <p><c>$ ct_run -userconfig ct_config_xml $CFGS/sys1.xml $CFGS/sys2.xml -dir $SYS1_TEST $SYS2_TEST</c></p>
- <p><c>$ ct_run -suite $SYS1_TEST/setup_SUITE $SYS2_TEST/config_SUITE</c></p>
- <p><c>$ ct_run -suite $SYS1_TEST/setup_SUITE -case start stop</c></p>
- <p><c>$ ct_run -suite $SYS1_TEST/setup_SUITE -group installation -case start stop</c></p>
+ <p><em>Examples:</em></p>
+ <pre>
+ $ ct_run -config $CFGS/sys1.cfg $CFGS/sys2.cfg -dir $SYS1_TEST $SYS2_TEST
+ $ ct_run -userconfig ct_config_xml $CFGS/sys1.xml $CFGS/sys2.xml -dir $SYS1_TEST $SYS2_TEST
+ $ ct_run -suite $SYS1_TEST/setup_SUITE $SYS2_TEST/config_SUITE
+ $ ct_run -suite $SYS1_TEST/setup_SUITE -case start stop
+ $ ct_run -suite $SYS1_TEST/setup_SUITE -group installation -case start stop</pre>
- <p>It is also possible to combine the <c>dir</c>, <c>suite</c> and <c>group/case</c> flags. E.g, to run
- <c>x_SUITE</c> and <c>y_SUITE</c> in directory <c>testdir</c>:</p>
-
- <p><c>$ ct_run -dir ./testdir -suite x_SUITE y_SUITE</c></p>
-
- <p>This has the same effect as calling:</p>
-
- <p><c>$ ct_run -suite ./testdir/x_SUITE ./testdir/y_SUITE</c></p>
-
- <p>For more details on <seealso marker="run_test_chapter#group_execution">test case group execution</seealso>, please see below.</p>
-
- <p>Other flags that may be used with <c>ct_run</c>:</p>
- <list>
- <item><c><![CDATA[-help]]></c>, lists all available start flags.</item>
- <item><c><![CDATA[-logdir <dir>]]></c>, specifies where the HTML log files are to be written.</item>
- <item><c><![CDATA[-label <name_of_test_run>]]></c>, associates the test run with a name that gets printed
- in the overview HTML log files.</item>
- <item><c>-refresh_logs</c>, refreshes the top level HTML index files.</item>
- <item><c>-vts</c>, start web based GUI (see below).</item>
- <item><c>-shell</c>, start interactive shell mode (see below).</item>
- <item><c>-step [step_opts]</c>, step through test cases using the Erlang Debugger (see below).</item>
- <item><c><![CDATA[-spec <testspecs>]]></c>, use test specification as input (see below).</item>
- <item><c>-allow_user_terms</c>, allows user specific terms in a test specification (see below).</item>
- <item><c>-silent_connections [conn_types]</c>, tells Common Test to suppress printouts for
- specified connections (see below).</item>
- <item><c><![CDATA[-stylesheet <css_file>]]></c>, points out a user HTML style sheet (see below).</item>
- <item><c><![CDATA[-cover <cover_cfg_file>]]></c>, to perform code coverage test (see
- <seealso marker="cover_chapter#cover">Code Coverage Analysis</seealso>).</item>
- <item><c><![CDATA[-cover_stop <bool>]]></c>, to specify if the cover tool shall be stopped after the test is completed (see
- <seealso marker="cover_chapter#cover_stop">Code Coverage Analysis</seealso>).</item>
- <item><c><![CDATA[-event_handler <event_handlers>]]></c>, to install
- <seealso marker="event_handler_chapter#event_handling">event handlers</seealso>.</item>
- <item><c><![CDATA[-event_handler_init <event_handlers>]]></c>, to install
- <seealso marker="event_handler_chapter#event_handling">event handlers</seealso> including start arguments.</item>
- <item><c><![CDATA[-ct_hooks <ct_hooks>]]></c>, to install
- <seealso marker="ct_hooks_chapter#installing">Common Test Hooks</seealso> including start arguments.</item>
- <item><c><![CDATA[-enable_builtin_hooks <bool>]]></c>, to enable/disable
- <seealso marker="ct_hooks_chapter#builtin_cths">Built-in Common Test Hooks</seealso>. Default is <c>true</c>.</item>
- <item><c><![CDATA[-include]]></c>, specifies include directories (see above).</item>
- <item><c><![CDATA[-no_auto_compile]]></c>, disables the automatic test suite compilation feature (see above).</item>
- <item><c><![CDATA[-abort_if_missing_suites]]></c>, aborts the test run if one or more suites fail to compile (see above).</item>
- <item><c><![CDATA[-multiply_timetraps <n>]]></c>, extends <seealso marker="write_test_chapter#timetraps">timetrap
- timeout</seealso> values.</item>
- <item><c><![CDATA[-scale_timetraps <bool>]]></c>, enables automatic <seealso marker="write_test_chapter#timetraps">timetrap
- timeout</seealso> scaling.</item>
- <item><c><![CDATA[-repeat <n>]]></c>, tells Common Test to repeat the tests n times (see below).</item>
- <item><c><![CDATA[-duration <time>]]></c>, tells Common Test to repeat the tests for duration of time (see below).</item>
- <item><c><![CDATA[-until <stop_time>]]></c>, tells Common Test to repeat the tests until stop_time (see below).</item>
- <item><c>-force_stop [skip_rest]</c>, on timeout, the test run will be aborted when current test job is finished. If <c>skip_rest</c> is provided the rest of the test cases in the current test job will be skipped (see below).</item>
- <item><c><![CDATA[-decrypt_key <key>]]></c>, provides a decryption key for
- <seealso marker="config_file_chapter#encrypted_config_files">encrypted configuration files</seealso>.</item>
- <item><c><![CDATA[-decrypt_file <key_file>]]></c>, points out a file containing a decryption key for
- <seealso marker="config_file_chapter#encrypted_config_files">encrypted configuration files</seealso>.</item>
- <item><c><![CDATA[-basic_html]]></c>, switches off html enhancements that might not be compatible with older browsers.</item>
- <item><c><![CDATA[-logopts <opts>]]></c>, makes it possible to modify aspects of the logging behaviour, see
- <seealso marker="run_test_chapter#logopts">Log options</seealso> below.</item>
- <item><c><![CDATA[-verbosity <levels>]]></c>, sets <seealso marker="write_test_chapter#logging">verbosity levels
- for printouts</seealso>.</item>
- </list>
+ <p>The flags <c>dir</c>, <c>suite</c>, and <c>group/case</c> can be combined.
+ For example, to run <c>x_SUITE</c> and <c>y_SUITE</c>
+ in directory <c>testdir</c>, as follows:</p>
+ <pre>
+ $ ct_run -dir ./testdir -suite x_SUITE y_SUITE</pre>
+
+ <p>This has the same effect as the following:</p>
+ <pre>
+ $ ct_run -suite ./testdir/x_SUITE ./testdir/y_SUITE</pre>
+
+ <p>For details, see
+ <seealso marker="run_test_chapter#group_execution">Test Case Group Execution</seealso>.</p>
+
+ <p>The following flags can also be used with
+ <seealso marker="ct_run"><c>ct_run</c></seealso>:</p>
+ <taglist>
+ <tag><c><![CDATA[-help]]></c></tag>
+ <item><p>Lists all available start flags.</p></item>
+
+ <tag><c><![CDATA[-logdir <dir>]]></c></tag>
+ <item><p>Specifies where the HTML log files are to be written.</p></item>
+
+ <tag><c><![CDATA[-label <name_of_test_run>]]></c></tag>
+ <item><p>Associates the test run with a name that gets printed
+ in the overview HTML log files.</p></item>
+
+ <tag><c>-refresh_logs</c></tag>
+ <item><p>Refreshes the top-level HTML index files.</p></item>
+
+ <tag><c>-vts</c></tag>
+ <item><p>Starts web-based GUI (described later).</p></item>
+
+ <tag><c>-shell</c></tag>
+ <item><p>Starts interactive shell mode (described later).</p></item>
+
+ <tag><c>-step [step_opts]</c></tag>
+ <item><p>Steps through test cases using the Erlang Debugger (described later).</p></item>
+
+ <tag><c><![CDATA[-spec <testspecs>]]></c></tag>
+ <item><p>Uses test specification as input (described later).</p></item>
+
+ <tag><c>-allow_user_terms</c></tag>
+ <item><p>Allows user-specific terms in a test specification (described later).</p></item>
+
+ <tag><c>-silent_connections [conn_types]</c></tag>
+ <item><p>, tells <c>Common Test</c> to suppress printouts for
+ specified connections (described later).</p></item>
+
+ <tag><c><![CDATA[-stylesheet <css_file>]]></c></tag>
+ <item><p>Points out a user HTML style sheet (described later).</p></item>
+
+ <tag><c><![CDATA[-cover <cover_cfg_file>]]></c></tag>
+ <item><p>To perform code coverage test (see
+ <seealso marker="cover_chapter#cover">Code Coverage Analysis</seealso>).</p></item>
+
+ <tag><c><![CDATA[-cover_stop <bool>]]></c></tag>
+ <item><p>To specify if the <c>cover</c> tool is to be stopped
+ after the test is completed (see
+ <seealso marker="cover_chapter#cover_stop">Code Coverage Analysis</seealso>).</p></item>
+
+ <tag><c><![CDATA[-event_handler <event_handlers>]]></c></tag>
+ <item><p>To install
+ <seealso marker="event_handler_chapter#event_handling">event handlers</seealso>.</p></item>
+
+ <tag><c><![CDATA[-event_handler_init <event_handlers>]]></c></tag>
+ <item><p>To install
+ <seealso marker="event_handler_chapter#event_handling">event handlers</seealso>
+ including start arguments.</p></item>
+
+ <tag><c><![CDATA[-ct_hooks <ct_hooks>]]></c></tag>
+ <item><p>To install
+ <seealso marker="ct_hooks_chapter#installing">Common Test Hooks</seealso>
+ including start arguments.</p></item>
+
+ <tag><c><![CDATA[-enable_builtin_hooks <bool>]]></c></tag>
+ <item><p>To enable or disable
+ <seealso marker="ct_hooks_chapter#builtin_cths">Built-in Common Test Hooks</seealso>.
+ Default is <c>true</c>.</p></item>
- <note><p>Directories passed to Common Test may have either relative or absolute paths.</p></note>
+ <tag><c><![CDATA[-include]]></c></tag>
+ <item><p>Specifies include directories (described earlier).</p></item>
- <note><p>Arbitrary start flags to the Erlang Runtime System may also be passed as
+ <tag><c><![CDATA[-no_auto_compile]]></c></tag>
+ <item><p>Disables the automatic test suite compilation feature (described earlier).</p></item>
+
+ <tag><c><![CDATA[-abort_if_missing_suites]]></c></tag>
+ <item><p>Aborts the test run if one or more suites fail to compile (described earlier).</p></item>
+
+ <tag><c><![CDATA[-multiply_timetraps <n>]]></c></tag>
+ <item><p>Extends <seealso marker="write_test_chapter#timetraps">timetrap
+ time-out</seealso> values.</p></item>
+
+ <tag><c><![CDATA[-scale_timetraps <bool>]]></c></tag>
+ <item><p>Enables automatic <seealso marker="write_test_chapter#timetraps">timetrap
+ time-out</seealso> scaling.</p></item>
+
+ <tag><c><![CDATA[-repeat <n>]]></c></tag>
+ <item><p>Tells <c>Common Test</c> to repeat the tests <c>n</c> times (described later).</p></item>
+
+ <tag><c><![CDATA[-duration <time>]]></c></tag>
+ <item><p>Tells <c>Common Test</c> to repeat the tests for duration of time (described later).</p></item>
+
+ <tag><c><![CDATA[-until <stop_time>]]></c></tag>
+ <item><p>Tells <c>Common Test</c> to repeat the tests until <c>stop_time</c> (described later).</p></item>
+
+ <tag><c>-force_stop [skip_rest]</c></tag>
+ <item><p>On time-out, the test run is aborted when the current test job is finished. If <c>skip_rest</c>
+ is provided, the remaining test cases in the current test job are skipped (described later).</p></item>
+
+ <tag><c><![CDATA[-decrypt_key <key>]]></c></tag>
+ <item><p>Provides a decryption key for
+ <seealso marker="config_file_chapter#encrypted_config_files">encrypted configuration files</seealso>.</p></item>
+
+ <tag><c><![CDATA[-decrypt_file <key_file>]]></c></tag>
+ <item><p>Points out a file containing a decryption key for
+ <seealso marker="config_file_chapter#encrypted_config_files">encrypted configuration files</seealso>.</p></item>
+
+ <tag><c><![CDATA[-basic_html]]></c></tag>
+ <item><p>Switches off HTML enhancements that can be incompatible with older browsers.</p></item>
+
+ <tag><c><![CDATA[-logopts <opts>]]></c></tag>
+ <item><p>Enables modification of the logging behavior, see
+ <seealso marker="run_test_chapter#logopts">Log options</seealso>.</p></item>
+
+ <tag><c><![CDATA[-verbosity <levels>]]></c></tag>
+ <item><p>Sets <seealso marker="write_test_chapter#logging">verbosity levels
+ for printouts</seealso>.</p></item>
+
+ <tag><c><![CDATA[-no_esc_chars]]></c></tag>
+ <item><p>Disables automatic escaping of special HTML characters.
+ See the <seealso marker="write_test_chapter#logging">Logging chapter</seealso>.</p></item>
+ </taglist>
+
+ <note><p>Directories passed to <c>Common Test</c> can have either relative or absolute paths.</p></note>
+
+ <note><p>Any start flags to the Erlang runtime system (application <c>ERTS</c>) can also be passed as
parameters to <c>ct_run</c>. It is, for example, useful to be able to
- pass directories that should be added to the Erlang code server search path
- with the <c>-pa</c> or <c>-pz</c> flag. If you have common help- or library
+ pass directories to be added to the Erlang code server search path
+ with flag <c>-pa</c> or <c>-pz</c>. If you have common help- or library
modules for test suites (separately compiled), stored in other directories
- than the test suite directories, these help/lib directories are preferrably
- added to the code path this way. Example:</p>
+ than the test suite directories, these <c>help/lib</c> directories are preferably
+ added to the code path this way.</p>
+ <p><em>Example:</em></p>
<p><c>$ ct_run -dir ./chat_server -logdir ./chat_server/testlogs -pa $PWD/chat_server/ebin</c></p>
- <p>Note how in this example, the absolute path of the <c>chat_server/ebin</c>
- directory is passed to the code server. This is essential since relative
- paths are stored by the code server as relative, and Common Test changes
- the current working directory of the Erlang Runtime System during the test run!</p>
+ <p>The absolute path of directory <c>chat_server/ebin</c>
+ is here passed to the code server. This is essential because relative
+ paths are stored by the code server as relative, and <c>Common Test</c> changes
+ the current working directory of <c>ERTS</c> during the test run.</p>
</note>
<p>The <c>ct_run</c> program sets the exit status before shutting down. The following values
are defined:</p>
- <list>
- <item><c>0</c> indicates a successful testrun, i.e. one without failed or auto skipped test cases.</item>
- <item><c>1</c> indicates that one or more test cases have failed, or have been auto skipped.</item>
- <item><c>2</c> indicates that the test execution has failed because of e.g. compilation errors, an
- illegal return value from an info function, etc.</item>
+ <list type="bulleted">
+ <item><c>0</c> indicates a successful testrun, that is, without failed or auto-skipped test cases.</item>
+ <item><c>1</c> indicates that one or more test cases have failed, or have been auto-skipped.</item>
+ <item><c>2</c> indicates that the test execution has failed because of, for example, compilation errors, or an
+ illegal return value from an information function.</item>
</list>
- <p>If auto skipped test cases should not affect the exit status, you may change the default
- behaviour using start flag:</p>
- <pre>-exit_status ignore_config</pre>
+ <p>If auto-skipped test cases do not affect the exit status. The default
+ behavior can be changed using start flag:</p>
+ <pre>
+ -exit_status ignore_config</pre>
- <note><p>Executing <c>ct_run</c> without start flags, is equal to the command:
+ <note><p>Executing <c>ct_run</c> without start flags is equal to the command:
<c>ct_run -dir ./</c></p></note>
- <p>For more information about the <c>ct_run</c> program, see the
- <seealso marker="ct_run">Reference Manual</seealso> and the
- <seealso marker="install_chapter#general">Installation</seealso> chapter.
+ <p>For more information about the <c>ct_run</c> program, see module
+ <seealso marker="ct_run"><c>ct_run</c></seealso> and section
+ <seealso marker="install_chapter#general">Installation</seealso>.
</p>
</section>
<section>
- <title>Running tests from the Erlang shell or from an Erlang program</title>
+ <marker id="erlang_shell_or_program"></marker>
+ <title>Running Tests from the Erlang Shell or from an Erlang Program</title>
- <p>Common Test provides an Erlang API for running tests. The main (and most
- flexible) function for specifying and executing tests is called
+ <p><c>Common Test</c> provides an Erlang API for running tests. The main
+ (and most flexible) function for specifying and executing tests is
<seealso marker="ct#run_test-1"><c>ct:run_test/1</c></seealso>.
- This function takes the same start parameters as
- the <seealso marker="run_test_chapter#ct_run"><c>ct_run</c></seealso>
- program described above, only the flags are instead
- given as options in a list of key-value tuples. E.g. a test specified
- with <c>ct_run</c> like:</p>
+ It takes the same start parameters as
+ <seealso marker="run_test_chapter#ct_run"><c>ct_run</c></seealso>,
+ but the flags are instead specified as options in a list of key-value tuples.
+ For example, a test specified with <c>ct_run</c> as follows:</p>
<p><c>$ ct_run -suite ./my_SUITE -logdir ./results</c></p>
<p>is with <seealso marker="ct#run_test-1"><c>ct:run_test/1</c></seealso> specified as:</p>
<p><c>1> ct:run_test([{suite,"./my_SUITE"},{logdir,"./results"}]).</c></p>
- <p>The function returns the test result, represented by the tuple:
+ <p>The function returns the test result, represented by the tuple
<c>{Ok,Failed,{UserSkipped,AutoSkipped}}</c>, where each element is an
- integer. If test execution fails, the function returns the tuple:
+ integer. If test execution fails, the function returns the tuple
<c>{error,Reason}</c>, where the term <c>Reason</c> explains the
failure.</p>
- <p>The default start option <c>{dir,Cwd}</c> (run all suites in the current
+ <p>The default start option <c>{dir,Cwd}</c> (to run all suites in the current
working directory) is used if the function is called with an empty
list of options.</p>
<section>
- <title>Releasing the Erlang shell</title>
- <p>During execution of tests, started with
+ <title>Releasing the Erlang Shell</title>
+ <p>During execution of tests started with
<seealso marker="ct#run_test-1"><c>ct:run_test/1</c></seealso>,
- the Erlang shell process, controlling stdin, will remain the top
- level process of the Common Test system of processes. The result
- is that the Erlang shell is not available for interaction during
- the test run. If this is not desirable, maybe because the shell is needed
- for debugging purposes or for interaction with the SUT during test
- execution, you may set the <c>release_shell</c> start option to
+ the Erlang shell process, controlling <c>stdin</c>, remains the top-level
+ process of the <c>Common Test</c> system of processes. Consequently,
+ the Erlang shell is not available for interaction during
+ the test run. If this is not desirable, for example, because the shell
+ is needed for debugging purposes or for interaction with the SUT during test
+ execution, set start option <c>release_shell</c> to
<c>true</c> (in the call to <c>ct:run_test/1</c> or by
- using the corresponding test specification term, see below). This will
- make Common Test release the shell immediately after the test suite
+ using the corresponding test specification term, described later). This
+ makes <c>Common Test</c> release the shell immediately after the test suite
compilation stage. To accomplish this, a test runner process
- is spawned to take control of the test execution, and the effect is that
+ is spawned to take control of the test execution. The effect is that
<c>ct:run_test/1</c> returns the pid of this process rather than the
- test result - which instead is printed to tty at the end of the test run.</p>
- <note><p>Note that in order to use the
- <seealso marker="ct#break-1"><c>ct:break/1/2</c></seealso> and
- <seealso marker="ct#continue-0"><c>ct:continue/0/1</c></seealso> functions,
+ test result, which instead is printed to tty at the end of the test run.</p>
+ <note><p>To use the functions
+ <seealso marker="ct#break-1"><c>ct:break/1,2</c></seealso> and
+ <seealso marker="ct#continue-0"><c>ct:continue/0,1</c></seealso>,
<c>release_shell</c> <em>must</em> be set to <c>true</c>.</p></note>
</section>
- <p>For detailed documentation about
- <seealso marker="ct#run_test-1"><c>ct:run_test/1</c></seealso>,
- please see the
- <seealso marker="ct#run_test-1"><c>ct</c></seealso> manual page.</p>
+ <p>For details, see
+ <seealso marker="ct#run_test-1"><c>ct:run_test/1</c></seealso> manual page.</p>
</section>
<section>
<marker id="group_execution"></marker>
- <title>Test case group execution</title>
+ <title>Test Case Group Execution</title>
<p>With the <c>ct_run</c> flag, or <c>ct:run_test/1</c> option <c>group</c>,
one or more test case groups can be specified, optionally in combination
- with specific test cases. The syntax for specifying groups is as follows
- (on the command line):</p>
+ with specific test cases. The syntax for specifying groups on the command line
+ is as follows:</p>
<pre>
- <![CDATA[$ ct_run -group <group_names_or_paths> [-case <cases>]]]></pre>
- <p>or (in the Erlang shell):</p>
+ <![CDATA[$ ct_run -group <group_names_or_paths> [-case <cases>]]]></pre>
+ <p>The syntax in the Erlang shell is as follows:</p>
<pre>
- <![CDATA[1> ct:run_test([{group,GroupsNamesOrPaths}, {case,Cases}]).]]></pre>
+ <![CDATA[1> ct:run_test([{group,GroupsNamesOrPaths}, {case,Cases}]).]]></pre>
- <p>The <c>group_names_or_paths</c> parameter specifies either one
- or more group names and/or one or more group paths. At start up,
- Common Test will search for matching groups in the group definitions
- tree (i.e. the list returned from <c>Suite:groups/0</c>, please see the
- <seealso marker="write_test_chapter#test_case_groups">Test case groups</seealso>
- chapter for details).
- Given a group name, say <c>g</c>, Common Test will search for all paths
- that lead to <c>g</c>. By path here we mean a sequence of nested groups,
- all of which have to be followed in order to get from the top level
- group to <c>g</c>. Actually, what Common Test needs to do in order to
- execute the test cases in group <c>g</c>, is to call the
- <c>init_per_group/2</c> function for each group in the path to
- <c>g</c>, as well as all corresponding <c>end_per_group/2</c>
- functions afterwards. The obvious reason for this is that the configuration
+ <p>Parameter <c>group_names_or_paths</c> specifies one
+ or more group names and/or one or more group paths. At startup,
+ <c>Common Test</c> searches for matching groups in the group definitions
+ tree (that is, the list returned from <c>Suite:groups/0</c>; for details, see section
+ <seealso marker="write_test_chapter#test_case_groups">Test Case Groups</seealso>.
+ </p>
+
+ <p>Given a group name, say <c>g</c>, <c>Common Test</c> searches for all paths
+ leading to <c>g</c>. By path is meant a sequence of nested groups,
+ which must be followed to get from the top-level
+ group to <c>g</c>. To execute the test cases in group <c>g</c>,
+ <c>Common Test</c> must call the <c>init_per_group/2</c> function for
+ each group in the path to <c>g</c>, and all corresponding <c>end_per_group/2</c>
+ functions afterwards. This is because the configuration
of a test case in <c>g</c> (and its <c>Config</c> input data) depends on
<c>init_per_testcase(TestCase, Config)</c> and its return value, which
in turn depends on <c>init_per_group(g, Config)</c> and its return value,
which in turn depends on <c>init_per_group/2</c> of the group above
- <c>g</c>, etc, all the way up to the top level group.</p>
+ <c>g</c>, and so on, all the way up to the top-level group.</p>
- <p>As you may have already realized, this means that if there is more than
- one way to locate a group (and its test cases) in a path, the result of the
- group search operation is a number of tests, all of which will be performed.
- Common Test actually interprets a group specification that consists of a
- single name this way:</p>
+ <p>This means that if there is more than one way to locate a group
+ (and its test cases) in a path, the result of the group search operation
+ is a number of tests, all of which are to be performed.
+ <c>Common Test</c> interprets a group specification that consists of a
+ single name as follows:</p>
<p>"Search and find all paths in the group definitions tree that lead
- to the specified group and, for each path, create a test which (1) executes
- all configuration functions in the path to the specified group, then (2)
- executes all - or all matching - test cases in this group, as well as (3)
- all - or all matching - test cases in all sub groups of the group".
- </p>
+ to the specified group and, for each path, create a test that does the following,
+ in order:</p>
+ <list type="ordered">
+ <item>Executes all configuration functions in the path to the specified group.</item>
+ <item>Executes all, or all matching, test cases in this group.</item>
+ <item>Executes all, or all matching, test cases in all subgroups of the group."</item>
+ </list>
- <p>It is also possible for the user to specify a specific group path with
- the <c>group_names_or_paths</c> parameter. With this type of specification it's
- possible to avoid execution of unwanted groups (in otherwise matching paths),
- and/or the execution of sub groups. The syntax of the group path is a list of
- group names in the path, e.g. on the command line:
+ <p>The user can specify a specific group path with
+ parameter <c>group_names_or_paths</c>. With this type of specification
+ execution of unwanted groups (in otherwise matching paths),
+ and/or the execution of subgroups can be avoided. The command line syntax of the
+ group path is a list of group names in the path, for example:
</p>
<p><c>$ ct_run -suite "./x_SUITE" -group [g1,g3,g4] -case tc1 tc5</c></p>
- <p>or similarly in the Erlang shell (requires a list within the groups list):</p>
+ <p>The syntax in the Erlang shell is as follows (requires a list within the groups list):</p>
<p><c>1> ct:run_test([{suite,"./x_SUITE"}, {group,[[g1,g3,g4]]}, {testcase,[tc1,tc5]}]).</c></p>
- <p>The last group in the specified path will be the terminating group in
- the test, i.e. no sub groups following this group will be executed. In the
- example above, <c>g4</c> is the terminating group, hence Common Test will
- execute a test that calls all init configuration functions in the path to
- <c>g4</c>, i.e. <c>g1..g3..g4</c>. It will then call test cases <c>tc1</c>
- and <c>tc5</c> in <c>g4</c> and finally all end configuration functions in order
- <c>g4..g3..g1</c>.</p>
+ <p>The last group in the specified path is the terminating group in
+ the test, that is, no subgroups following this group are executed. In the
+ previous example, <c>g4</c> is the terminating group. Hence, <c>Common Test</c>
+ executes a test that calls all <c>init</c> configuration functions in the path to
+ <c>g4</c>, that is, <c>g1..g3..g4</c>. It then calls test cases <c>tc1</c>
+ and <c>tc5</c> in <c>g4</c>, and finally all <c>end</c> configuration functions
+ in order <c>g4..g3..g1</c>.</p>
- <p>Note that the group path specification doesn't necessarily
+ <note><p>The group path specification does not necessarily
have to include <em>all</em> groups in the path to the terminating group.
- Common Test will search for all matching paths if given an incomplete group
- path.</p>
+ <c>Common Test</c> searches for all matching paths if an incomplete
+ group path is specified.</p></note>
- <p>Note also that it's possible to combine group names and group paths with the
- <c>group_names_or_paths</c> parameter. Each element is treated as
- an individual specification in combination with the <c>cases</c> parameter.
- See examples below.</p>
+ <note><p>Group names and group paths can be combined with parameter
+ <c>group_names_or_paths</c>. Each element is treated as an individual specification
+ in combination with parameter <c>cases</c>.
+ The following examples illustrates this.</p></note>
+
+ <p><em>Examples:</em></p>
+ <pre>
+ -module(x_SUITE).
+ ...
+ %% The group definitions:
+ groups() ->
+ [{top1,[],[tc11,tc12,
+ {sub11,[],[tc12,tc13]},
+ {sub12,[],[tc14,tc15,
+ {sub121,[],[tc12,tc16]}]}]},
+
+ {top2,[],[{group,sub21},{group,sub22}]},
+ {sub21,[],[tc21,{group,sub2X2}]},
+ {sub22,[],[{group,sub221},tc21,tc22,{group,sub2X2}]},
+ {sub221,[],[tc21,tc23]},
+ {sub2X2,[],[tc21,tc24]}].</pre>
+
+ <p>The following executes two tests, one for all cases and all subgroups
+ under <c>top1</c>, and one for all under <c>top2</c>:</p>
+ <pre>
+ $ ct_run -suite "x_SUITE" -group all
+ 1> ct:run_test([{suite,"x_SUITE"}, {group,all}]).</pre>
+ <p>Using <c>-group top1 top2</c>, or <c>{group,[top1,top2]}</c> gives the same result.</p>
- <p>Examples:</p>
+ <p>The following executes one test for all cases and subgroups under <c>top1</c>:</p>
<pre>
- -module(x_SUITE).
- ...
- %% The group definitions:
- groups() ->
- [{top1,[],[tc11,tc12,
- {sub11,[],[tc12,tc13]},
- {sub12,[],[tc14,tc15,
- {sub121,[],[tc12,tc16]}]}]},
-
- {top2,[],[{group,sub21},{group,sub22}]},
- {sub21,[],[tc21,{group,sub2X2}]},
- {sub22,[],[{group,sub221},tc21,tc22,{group,sub2X2}]},
- {sub221,[],[tc21,tc23]},
- {sub2X2,[],[tc21,tc24]}].
- </pre>
- <br></br>
- <p><c>$ ct_run -suite "x_SUITE" -group all</c></p>
- <p><c>1> ct:run_test([{suite,"x_SUITE"}, {group,all}]).</c></p>
- <p>Two tests will be executed, one for all cases and all sub groups under <c>top1</c>,
- and one for all under <c>top2</c>. (We would get the same result with
- <c>-group top1 top2</c>, or <c>{group,[top1,top2]}</c>.</p>
- <br></br>
- <p><c>$ ct_run -suite "x_SUITE" -group top1</c></p>
- <p><c>1> ct:run_test([{suite,"x_SUITE"}, {group,[top1]}]).</c></p>
- <p>This will execute one test for all cases and sub groups under <c>top1</c>.</p>
- <br></br>
- <p><c>$ ct_run -suite "x_SUITE" -group top1 -case tc12</c></p>
- <p><c>1> ct:run_test([{suite,"x_SUITE"}, {group,[top1]}, {testcase,[tc12]}]).</c></p>
- <p>This will run a test that executes <c>tc12</c> in <c>top1</c> and any sub group
- under <c>top1</c> where it can be found (<c>sub11</c> and <c>sub121</c>).</p>
- <br></br>
- <p><c>$ ct_run -suite "x_SUITE" -group [top1] -case tc12</c></p>
- <p><c>1> ct:run_test([{suite,"x_SUITE"}, {group,[[top1]]}, {testcase,[tc12]}]).</c></p>
- <p>This will execute <c>tc12</c> <em>only</em> in group <c>top1</c>.</p>
- <br></br>
- <p><c>$ ct_run -suite "x_SUITE" -group top1 -case tc16</c></p>
- <p><c>1> ct:run_test([{suite,"x_SUITE"}, {group,[top1]}, {testcase,[tc16]}]).</c></p>
- <p>This will search <c>top1</c> and all its sub groups for <c>tc16</c> and the result
- will be that this test case executes in group <c>sub121</c>. (The specific path:
- <c>-group [sub121]</c> or <c>{group,[[sub121]]}</c>, would have given
- us the same result in this example).</p>
- <br></br>
- <p><c>$ ct_run -suite "x_SUITE" -group sub12 [sub12]</c></p>
- <p><c>1> ct:run_test([{suite,"x_SUITE"}, {group,[sub12,[sub12]]}]).</c></p>
- <p>This will execute two tests, one that includes all cases and sub groups under
- <c>sub12</c>, and one with <em>only</em> the test cases in <c>sub12</c>.</p>
- <br></br>
- <p><c>$ ct_run -suite "x_SUITE" -group sub2X2</c></p>
- <p><c>1> ct:run_test([{suite,"x_SUITE"}, {group,[sub2X2]}]).</c></p>
- <p>In this example, Common Test will find and execute two tests, one for the path from
- <c>top2</c> to <c>sub2X2</c> via <c>sub21</c>, and one from <c>top2</c> to <c>sub2X2</c>
- via <c>sub22</c>.</p>
- <br></br>
- <p><c>$ ct_run -suite "x_SUITE" -group [sub21,sub2X2]</c></p>
- <p><c>1> ct:run_test([{suite,"x_SUITE"}, {group,[[sub21,sub2X2]]}]).</c></p>
- <p>Here, by specifying the unique path: <c>top2 -> sub21 -> sub2X2</c>, only one test
- is executed. The second possible path from <c>top2</c> to <c>sub2X2</c> (above)
- will be discarded.</p>
- <br></br>
- <p><c>$ ct_run -suite "x_SUITE" -group [sub22] -case tc22 tc21</c></p>
- <p><c>1> ct:run_test([{suite,"x_SUITE"}, {group,[[sub22]]}, {testcase,[tc22,tc21]}]).</c></p>
- <p>In this example only the test cases for <c>sub22</c> will be executed, and in
- reverse order compared to the group definition.</p>
- <br></br>
-
- <p>If a test case that belongs to a group (according to the group definition), is executed
- without a group specification, i.e. simply by means of (command line):</p>
+ $ ct_run -suite "x_SUITE" -group top1
+ 1> ct:run_test([{suite,"x_SUITE"}, {group,[top1]}]).</pre>
+
+ <p>The following runs a test executing <c>tc12</c> in <c>top1</c> and any subgroup
+ under <c>top1</c> where it can be found (<c>sub11</c> and <c>sub121</c>):</p>
+ <pre>
+ $ ct_run -suite "x_SUITE" -group top1 -case tc12
+ 1> ct:run_test([{suite,"x_SUITE"}, {group,[top1]}, {testcase,[tc12]}]).</pre>
+
+ <p>The following executes <c>tc12</c> <em>only</em> in group <c>top1</c>:</p>
+ <pre>
+ $ ct_run -suite "x_SUITE" -group [top1] -case tc12
+ 1> ct:run_test([{suite,"x_SUITE"}, {group,[[top1]]}, {testcase,[tc12]}]).</pre>
+
+ <p>The following searches <c>top1</c> and all its subgroups for <c>tc16</c> resulting
+ in that this test case executes in group <c>sub121</c>:</p>
+ <pre>
+ $ ct_run -suite "x_SUITE" -group top1 -case tc16
+ 1> ct:run_test([{suite,"x_SUITE"}, {group,[top1]}, {testcase,[tc16]}]).</pre>
+ <p>Using the specific path <c>-group [sub121]</c> or <c>{group,[[sub121]]}</c> gives
+ the same result in this example.</p>
+
+ <p>The following executes two tests, one including all cases and subgroups under
+ <c>sub12</c>, and one with <em>only</em> the test cases in <c>sub12</c>:</p>
+ <pre>
+ $ ct_run -suite "x_SUITE" -group sub12 [sub12]
+ 1> ct:run_test([{suite,"x_SUITE"}, {group,[sub12,[sub12]]}]).</pre>
+
+ <p>In the following example, <c>Common Test</c> finds and executes two tests,
+ one for the path from <c>top2</c> to <c>sub2X2</c> through <c>sub21</c>,
+ and one from <c>top2</c> to <c>sub2X2</c> through <c>sub22</c>:</p>
+ <pre>
+ $ ct_run -suite "x_SUITE" -group sub2X2
+ 1> ct:run_test([{suite,"x_SUITE"}, {group,[sub2X2]}]).</pre>
+
+ <p>In the following example, by specifying the unique path <c>top2 -> sub21 -> sub2X2</c>,
+ only one test is executed. The second possible path, from <c>top2</c> to <c>sub2X2</c>
+ (from the former example) is discarded:</p>
+ <pre>
+ $ ct_run -suite "x_SUITE" -group [sub21,sub2X2]
+ 1> ct:run_test([{suite,"x_SUITE"}, {group,[[sub21,sub2X2]]}]).</pre>
+
+ <p>The following executes only the test cases for <c>sub22</c> and in reverse order
+ compared to the group definition:</p>
+ <pre>
+ $ ct_run -suite "x_SUITE" -group [sub22] -case tc22 tc21
+ 1> ct:run_test([{suite,"x_SUITE"}, {group,[[sub22]]}, {testcase,[tc22,tc21]}]).</pre>
+
+ <p>If a test case belonging to a group (according to the group definition) is executed
+ without a group specification, that is, simply by
+ (using the command line):</p>
<p><c>$ ct_run -suite "my_SUITE" -case my_tc</c></p>
- <p>or (Erlang shell):</p>
+ <p>or (using the Erlang shell):</p>
<p><c>1> ct:run_test([{suite,"my_SUITE"}, {testcase,my_tc}]).</c></p>
- <p>then Common Test ignores the group definition and executes the test case in the scope of the
- test suite only (no group configuration functions are called).</p>
+ <p>then <c>Common Test</c> ignores the group definition and executes the test case
+ in the scope of the test suite only (no group configuration functions are called).</p>
- <p>The group specification feature, exactly as it has been presented in this section, can also
+ <p>The group specification feature, as presented in this section, can also
be used in <seealso marker="run_test_chapter#test_specifications">Test
- Specifications</seealso> (with some extra features added). Please see below.</p>
+ Specifications</seealso> (with some extra features added).</p>
</section>
<section>
- <title>Running the interactive shell mode</title>
+ <title>Running the Interactive Shell Mode</title>
- <p>You can start Common Test in an interactive shell mode where no
- automatic testing is performed. Instead, in this mode, Common Test
+ <p>You can start <c>Common Test</c> in an interactive shell mode where no
+ automatic testing is performed. Instead, <c>Common Test</c>
starts its utility processes, installs configuration data (if any),
and waits for the user to call functions (typically test case support
functions) from the Erlang shell.</p>
- <p>The shell mode is useful e.g. for debugging test suites, for analysing
+ <p>The shell mode is useful, for example, for debugging test suites, analyzing
and debugging the SUT during "simulated" test case execution, and
- for trying out various operations during test suite development.</p>
-
- <p>To invoke the interactive shell mode, you can start an Erlang shell
- manually and call <seealso marker="ct#install-1"><c>ct:install/1</c></seealso> to install any configuration
- data you might need (use <c>[]</c> as argument otherwise), then
- call <seealso marker="ct#start_interactive-0"><c>ct:start_interactive/0</c></seealso> to start Common Test. If you use
- the <c>ct_run</c> program, you may start the Erlang shell and Common Test
- in the same go by using the <c>-shell</c> and, optionally, the <c>-config</c>
- and/or <c>-userconfig</c> flag. Examples:
- </p>
- <list>
+ trying out various operations during test suite development.</p>
+
+ <p>To start the interactive shell mode, start an Erlang shell
+ manually and call <seealso marker="ct#install-1"><c>ct:install/1</c></seealso>
+ to install any configuration data you might need (use <c>[]</c> as argument otherwise).
+ Then call <seealso marker="ct#start_interactive-0"><c>ct:start_interactive/0</c></seealso>
+ to start <c>Common Test</c>.</p>
+
+ <p>If you use the <c>ct_run</c> program, you can start
+ the Erlang shell and <c>Common Test</c> in one go by using the flag <c>-shell</c> and,
+ optionally, flag <c>-config</c> and/or <c>-userconfig</c>.</p>
+ <p><em>Examples:</em></p>
+ <list type="bulleted">
<item><c>ct_run -shell</c></item>
<item><c><![CDATA[ct_run -shell -config cfg/db.cfg]]></c></item>
<item><c><![CDATA[ct_run -shell -userconfig db_login testuser x523qZ]]></c></item>
</list>
- <p>If no config file is given with the <c>ct_run</c> command,
- a warning will be displayed. If Common Test has been run from the same
- directory earlier, the same config file(s) will be used
- again. If Common Test has not been run from this directory before, no
- config files will be available.</p>
+ <p>If no configuration file is specified with command <c>ct_run</c>,
+ a warning is displayed. If <c>Common Test</c> has been run from the same
+ directory earlier, the same configuration file(s) are used again. If <c>Common Test</c>
+ has not been run from this directory before, no configuration files are available.</p>
- <p>If any functions using "required config data" (e.g. ct_telnet or
- ct_ftp functions) are to be called from the erlang shell, config
- data must first be required with <seealso marker="ct#require-1"><c>
- ct:require/1/2</c></seealso>. This is
- equivalent to a <c>require</c> statement in the <seealso
- marker="write_test_chapter#suite">Test Suite Info
- Function</seealso> or in the <seealso
- marker="write_test_chapter#info_function">Test Case Info
- Function</seealso>.</p>
-
- <p>Example:</p>
+ <p>If any functions using "required configuration data" (for example, functions
+ <c>ct_telnet</c> or <c>ct_ftp</c>) are to be called from the Erlang shell, first require
+ configuration data with <seealso marker="ct#require-1"><c>
+ ct:require/1,2</c></seealso>. This is equivalent to a <c>require</c> statement
+ in the <seealso marker="write_test_chapter#suite">Test Suite Information Function</seealso>
+ or in the <seealso marker="write_test_chapter#info_function">Test Case Information Function</seealso>.</p>
+
+ <p><em>Example:</em></p>
<pre>
- 1> ct:require(unix_telnet, unix).
- ok
- 2> ct_telnet:open(unix_telnet).
- {ok,&lt;0.105.0&gt;}
- 4> ct_telnet:cmd(unix_telnet, "ls .").
- {ok,["ls .","file1 ...",...]}
- </pre>
+ 1> ct:require(unix_telnet, unix).
+ ok
+ 2> ct_telnet:open(unix_telnet).
+ {ok,&lt;0.105.0&gt;}
+ 4> ct_telnet:cmd(unix_telnet, "ls .").
+ {ok,["ls .","file1 ...",...]}</pre>
- <p>Everything that Common Test normally prints in the test case logs,
- will in the interactive mode be written to a log named
- <c>ctlog.html</c> in the <c><![CDATA[ct_run.<timestamp>]]></c>
- directory. A link to this file will be available in the file
- named <c>last_interactive.html</c> in the directory from which
- you executed <c>ct_run</c>. Currently, specifying a different
- root directory for the logs than the current working directory,
+ <p>Everything that <c>Common Test</c> normally prints in the test case logs,
+ are in the interactive mode written to a log named <c>ctlog.html</c>
+ in directory <c><![CDATA[ct_run.<timestamp>]]></c>. A link to this
+ file is available in the file named <c>last_interactive.html</c> in the
+ directory from which you execute <c>ct_run</c>. Specifying a different
+ root directory for the logs than the current working directory
is not supported.</p>
- <p>If you wish to exit the interactive mode (e.g. to start an
- automated test run with <seealso marker="ct#run_test-1"><c>ct:run_test/1</c></seealso>), call the function
- <seealso marker="ct#stop_interactive-0"><c>ct:stop_interactive/0</c></seealso>. This shuts down the
- running <c>ct</c> application. Associations between
+ <p>If you wish to exit the interactive mode (for example, to start an automated
+ test run with <seealso marker="ct#run_test-1"><c>ct:run_test/1</c></seealso>),
+ call function
+ <seealso marker="ct#stop_interactive-0"><c>ct:stop_interactive/0</c></seealso>.
+ This shuts down the running <c>ct</c> application. Associations between
configuration names and data created with <c>require</c> are
- consequently deleted. <seealso marker="ct#start_interactive-0"><c>ct:start_interactive/0</c></seealso> will get you
- back into interactive mode, but the previous state is not restored.</p>
+ consequently deleted. Function
+ <seealso marker="ct#start_interactive-0"><c>ct:start_interactive/0</c></seealso>
+ takes you back into interactive mode, but the previous state is not restored.</p>
</section>
<section>
- <title>Step by step execution of test cases with the Erlang Debugger</title>
+ <title>Step-by-Step Execution of Test Cases with the Erlang Debugger</title>
- <p>By means of <c>ct_run -step [opts]</c>, or by passing the
- <c>{step,Opts}</c> option to <seealso marker="ct#run_test-1"><c>ct:run_test/1</c></seealso>, it is possible
- to get the Erlang Debugger started automatically and use its
- graphical interface to investigate the state of the current test
- case and to execute it step by step and/or set execution breakpoints.</p>
- <p>If no extra options are given with the <c>step</c> flag/option,
- breakpoints will be set automatically on the test cases that
- are to be executed by Common Test, and those functions only. If
- the step option <c>config</c> is specified, breakpoints will
- also be initially set on the configuration functions in the suite, i.e.
+ <p>Using <c>ct_run -step [opts]</c>, or by passing option <c>{step,Opts}</c>
+ to <seealso marker="ct#run_test-1"><c>ct:run_test/1</c></seealso>,
+ the following is possible:</p>
+ <list type="bulleted">
+ <item>Get the Erlang Debugger started automatically.</item>
+ <item>Use its graphical interface to investigate the state of the current test case.</item>
+ <item>Execute the test case step-by-step and/or set execution breakpoints.</item>
+ </list>
+ <p>If no extra options are specified with flag/option <c>step</c>,
+ breakpoints are set automatically on the test cases that
+ are to be executed by <c>Common Test</c>, and those functions only. If
+ step option <c>config</c> is specified, breakpoints are also initially
+ set on the configuration functions in the suite, that is,
<c>init_per_suite/1</c>, <c>end_per_suite/1</c>,
<c>init_per_group/2</c>, <c>end_per_group/2</c>,
<c>init_per_testcase/2</c> and <c>end_per_testcase/2</c>.</p>
- <p>Common Test enables the Debugger auto attach feature, which means
+ <p><c>Common Test</c> enables the Debugger auto-attach feature, which means
that for every new interpreted test case function that starts to execute,
- a new trace window will automatically pop up. (This is because each test
+ a new trace window automatically pops up (as each test
case executes on a dedicated Erlang process). Whenever a new test case starts,
- Common Test will attempt to close the inactive trace window of the previous
- test case. However, if you prefer that Common Test leaves inactive trace
- windows, use the <c>keep_inactive</c> option.</p>
- <p>The step functionality can be used together with the <c>suite</c> and
- the <c>suite</c> + <c>case/testcase</c> flag/option, but not together
- with <c>dir</c>.</p>
+ <c>Common Test</c> attempts to close the inactive trace window of the previous
+ test case. However, if you prefer <c>Common Test</c> to leave inactive trace
+ windows, use option <c>keep_inactive</c>.</p>
+ <p>The step functionality can be used together with flag/option <c>suite</c> and
+ <c>suite</c> + <c>case/testcase</c>, but not together with <c>dir</c>.</p>
</section>
<section>
<marker id="test_specifications"></marker>
<title>Test Specifications</title>
<section>
- <title>General description</title>
- <p>The most flexible way to specify what to test, is to use a so
- called test specification. A test specification is a sequence of
+ <title>General Description</title>
+ <p>The most flexible way to specify what to test, is to use a
+ test specification, which is a sequence of
Erlang terms. The terms are normally declared in one or more text files
(see <seealso marker="ct#run_test-1"><c>ct:run_test/1</c></seealso>), but
- may also be passed to Common Test on the form of a list (see
+ can also be passed to <c>Common Test</c> on the form of a list (see
<seealso marker="ct#run_testspec-1"><c>ct:run_testspec/1</c></seealso>).
There are two general types of terms: configuration terms and test
specification terms.</p>
- <p>With configuration terms it is possible to e.g. label the test
- run (similar to <c>ct_run -label</c>), evaluate arbitrary expressions
- before starting the test, import configuration data (similar to
- <c>ct_run -config/-userconfig</c>), specify the top level HTML log
- directory (similar to <c>ct_run -logdir</c>), enable code coverage
- analysis (similar to <c>ct_run -cover</c>), install Common Test Hooks
- (similar to <c>ct_run -ch_hooks</c>), install event_handler plugins
- (similar to <c>ct_run -event_handler</c>), specify include directories
- that should be passed to the compiler for automatic compilation
- (similar to <c>ct_run -include</c>), disable the auto compilation
- feature (similar to <c>ct_run -no_auto_compile</c>), set verbosity
- levels (similar to <c>ct_run -verbosity</c>), and more.</p>
- <p>Configuration terms can be combined with <c>ct_run</c> start flags,
- or <c>ct:run_test/1</c> options. The result will for some flags/options
- and terms be that the values are merged (e.g. configuration files,
- include directories, verbosity levels, silent connections), and for
+
+ <p>With configuration terms it is, for example, possible to do the following:</p>
+ <list type="bulleted">
+ <item>Label the test run (similar to <c>ct_run -label</c>).</item>
+ <item>Evaluate any expressions before starting the test.</item>
+ <item>Import configuration data (similar to <c>ct_run -config/-userconfig</c>).</item>
+ <item>Specify the top-level HTML log directory (similar to <c>ct_run -logdir</c>).</item>
+ <item>Enable code coverage analysis (similar to <c>ct_run -cover</c>).</item>
+ <item>Install <c>Common Test Hooks</c> (similar to <c>ct_run -ch_hooks</c>).</item>
+ <item>Install <c>event_handler</c> plugins (similar to <c>ct_run -event_handler</c>).</item>
+ <item>Specify include directories to be passed to the compiler for
+ automatic compilation (similar to <c>ct_run -include</c>).</item>
+ <item>Disable the auto-compilation feature (similar to <c>ct_run -no_auto_compile</c>).</item>
+ <item>Set verbosity levels (similar to <c>ct_run -verbosity</c>).</item>
+ </list>
+
+ <p>Configuration terms can be combined with <c>ct_run</c> start flags
+ or <c>ct:run_test/1</c> options. The result is, for some flags/options
+ and terms, that the values are merged (for example, configuration files,
+ include directories, verbosity levels, and silent connections) and for
others that the start flags/options override the test specification
- terms (e.g. log directory, label, style sheet, auto compilation).</p>
- <p>With test specification terms it is possible to state exactly
- which tests should run and in which order. A test term specifies
+ terms (for example, log directory, label, style sheet, and auto-compilation).</p>
+
+ <p>With test specification terms, it is possible to state exactly
+ which tests to run and in which order. A test term specifies
either one or more suites, one or more test case groups (possibly nested),
or one or more test cases in a group (or in multiple groups) or in a suite.</p>
- <p>An arbitrary number of test terms may be declared in sequence.
- Common Test will by default compile the terms into one or more tests
- to be performed in one resulting test run. Note that a term that
- specifies a set of test cases will "swallow" one that only
- specifies a subset of these cases. E.g. the result of merging
- one term that specifies that all cases in suite S should be
+
+ <p>Any number of test terms can be declared in sequence.
+ <c>Common Test</c> compiles by default the terms into one or more tests
+ to be performed in one resulting test run. A term that
+ specifies a set of test cases "swallows" one that only
+ specifies a subset of these cases. For example, the result of merging
+ one term specifying that all cases in suite S are to be
executed, with another term specifying only test case X and Y in
S, is a test of all cases in S. However, if a term specifying
test case X and Y in S is merged with a term specifying case Z
- in S, the result is a test of X, Y and Z in S. To disable this
- behaviour, i.e. to instead perform each test sequentially in a "script-like"
- manner, the term <c>merge_tests</c> can be set to <c>false</c> in
- the test specification.</p>
+ in S, the result is a test of X, Y, and Z in S. To disable this
+ behavior, that is, to instead perform each test sequentially in a
+ "script-like" manner, set term <c>merge_tests</c> to <c>false</c>
+ in the test specification.</p>
+
<p>A test term can also specify one or more test suites, groups,
- or test cases to be skipped. Skipped suites, groups and cases
- are not executed and show up in the HTML log files as
- SKIPPED.</p>
+ or test cases to be skipped. Skipped suites, groups, and cases
+ are not executed and show up in the HTML log files as <c>SKIPPED</c>.</p>
</section>
<section>
- <title>Using multiple test specification files</title>
+ <title>Using Multiple Test Specification Files</title>
- <p>When multiple test specification files are given at startup (either
+ <p>When multiple test specification files are specified at startup (either
with <c>ct_run -spec file1 file2 ...</c> or
<c>ct:run_test([{spec, [File1,File2,...]}])</c>),
- Common Test will either execute one test run per specification file, or
- join the files and perform all tests within one single test run. The first
- behaviour is the default one. The latter requires that the start
- flag/option <c>join_specs</c> is provided, e.g.
+ <c>Common Test</c> either executes one test run per specification file,
+ or joins the files and performs all tests within one single test run.
+ The first behavior is the default one. The latter requires that start
+ flag/option <c>join_specs</c> is provided, for example,
<c>run_test -spec ./my_tests1.ts ./my_tests2.ts -join_specs</c>.</p>
<p>Joining a number of specifications, or running them separately, can
- also be accomplished with (and may be combined with) test specification
- file inclusion, described next.</p>
+ also be accomplished with (and can be combined with) test specification
+ file inclusion.</p>
</section>
<section>
- <title>Test specification file inclusion</title>
- <p>With the <c>specs</c> term (see syntax below), it's possible to have
- a test specification include other specifications. An included
- specification may either be joined with the source specification,
- or used to produce a separate test run (like with the <c>join_specs</c>
- start flag/option above). Example:</p>
+ <title>Test Specification File Inclusion</title>
+ <p>With the term <c>specs</c>, a test specification can include
+ other specifications. An included specification can either be joined
+ with the source specification or used to produce a separate test run
+ (as with start flag/option <c>join_specs</c> above).</p>
+ <p><em>Example:</em></p>
+
<pre>
- %% In specification file "a.spec"
- {specs, join, ["b.spec", "c.spec"]}.
- {specs, separate, ["d.spec", "e.spec"]}.
- %% Config and test terms follow
- ...</pre>
+ %% In specification file "a.spec"
+ {specs, join, ["b.spec", "c.spec"]}.
+ {specs, separate, ["d.spec", "e.spec"]}.
+ %% Config and test terms follow
+ ...</pre>
+
<p>In this example, the test terms defined in files "b.spec" and "c.spec"
- will be joined with the terms in the source specification "a.spec"
+ are joined with the terms in source specification "a.spec"
(if any). The inclusion of specifications "d.spec" and
- "e.spec" will result in two separate, and independent, test runs (i.e.
- one for each included specification).</p>
- <p>Note that the <c>join</c> option does not imply that the test terms
- will be merged (see <c>merge_tests</c> above), only that all tests are
- executed in one single test run.</p>
+ "e.spec" results in two separate, and independent, test runs
+ (one for each included specification).</p>
+
+ <p>Option <c>join</c> does not imply that the test terms
+ are merged, only that all tests are executed in one single test run.</p>
+
<p>Joined specifications share common configuration settings, such as
the list of <c>config</c> files or <c>include</c> directories.
- For configuration that can not be combined, such as settings for <c>logdir</c>
+ For configurations that cannot be combined, such as settings for <c>logdir</c>
or <c>verbosity</c>, it is up to the user to ensure there are no clashes
when the test specifications are joined. Specifications included with
- the <c>separate</c> option, do not share configuration settings with the
- source specification. This is useful e.g. if there are clashing
- configuration settings in included specifications, making it impossible
- to join them.</p>
+ option <c>separate</c> do not share configuration settings with the
+ source specification. This is useful, for example, if there are clashing
+ configuration settings in included specifications, making it them impossible
+ to join.</p>
+
<p>If <c>{merge_tests,true}</c> is set in the source specification
- (which is the default setting), terms in joined specifications will be
+ (which is the default setting), terms in joined specifications are
merged with terms in the source specification (according to the
- description of <c>merge_tests</c> above).</p>
- <p>Note that it is always the <c>merge_tests</c> setting in the source
+ description of <c>merge_tests</c> earlier).</p>
+
+ <p>Notice that it is always the <c>merge_tests</c> setting in the source
specification that is used when joined with other specifications.
- Say e.g. that a source specification A, with tests TA1 and TA2, has
- <c>{merge_tests,false}</c> set, and it includes another specification,
+ Say, for example, that a source specification A, with tests TA1 and TA2, has
+ <c>{merge_tests,false}</c> set, and that it includes another specification,
B, with tests TB1 and TB2, that has <c>{merge_tests,true}</c> set.
- The result will be that the test series: <c>TA1,TA2,merge(TB1,TB2)</c>,
- is executed. The opposite <c>merge_tests</c> settings would result in the
- following the test series: <c>merge(merge(TA1,TA2),TB1,TB2)</c>.</p>
- <p>The <c>specs</c> term may of course be used to nest specifications,
- i.e. have one specification include other specifications, which in turn
- include others, etc.</p>
+ The result is that the test series <c>TA1,TA2,merge(TB1,TB2)</c>
+ is executed. The opposite <c>merge_tests</c> settings would result in
+ the test series <c>merge(merge(TA1,TA2),TB1,TB2)</c>.</p>
+
+ <p>The term <c>specs</c> can be used to nest specifications,
+ that is, have one specification include other specifications, which in turn
+ include others, and so no</p>
</section>
<section>
- <title>Test case groups</title>
+ <title>Test Case Groups</title>
<p>When a test case group is specified, the resulting test
- executes the <c>init_per_group</c> function, followed by all test
- cases and sub groups (including their configuration functions), and
- finally the <c>end_per_group</c> function. Also if particular
+ executes function <c>init_per_group</c>, followed by all test
+ cases and subgroups (including their configuration functions), and
+ finally function <c>end_per_group</c>. Also, if particular
test cases in a group are specified, <c>init_per_group</c>
- and <c>end_per_group</c> for the group in question are
- called. If a group which is defined (in <c>Suite:group/0</c>) to
- be a sub group of another group, is specified (or if particular test
- cases of a sub group are), Common Test will call the configuration
- functions for the top level groups as well as for the sub group
+ and <c>end_per_group</c>, for the group in question, are
+ called. If a group defined (in <c>Suite:group/0</c>) as
+ a subgroup of another group, is specified (or if particular test
+ cases of a subgroup are), <c>Common Test</c> calls the configuration
+ functions for the top-level groups and for the subgroup
in question (making it possible to pass configuration data all
the way from <c>init_per_suite</c> down to the test cases in the
- sub group).</p>
- <p>The test specification utilizes the same mechanism for specifying
- test case groups by means of names and paths, as explained in the
- <seealso marker="run_test_chapter#group_execution">Group Execution</seealso>
- section above, with the addition of the <c>GroupSpec</c> element
- described next.</p>
- <p>The <c>GroupSpec</c> element makes it possible to specify
- group execution properties that will override those in the
- group definition (i.e. in <c>groups/0</c>). Execution properties for
- sub-groups may be overridden as well. This feature makes it possible to
+ subgroup).</p>
+
+ <p>The test specification uses the same mechanism for specifying
+ test case groups through names and paths, as explained in section
+ <seealso marker="run_test_chapter#group_execution">Test Case Group Execution</seealso>,
+ with the addition of element <c>GroupSpec</c>.</p>
+
+ <p>Element <c>GroupSpec</c> makes it possible to specify
+ group execution properties that overrides those in the
+ group definition (that is, in <c>groups/0</c>). Execution properties for
+ subgroups might be overridden as well. This feature makes it possible to
change properties of groups at the time of execution,
- without even having to edit the test suite. The very same
- feature is available for <c>group</c> elements in the <c>Suite:all/0</c>
- list. Therefore, more detailed documentation, and examples, can be
- found in the <seealso marker="write_test_chapter#test_case_groups">
- Test case groups</seealso> chapter.</p>
+ without having to edit the test suite. The same feature is available for
+ <c>group</c> elements in the <c>Suite:all/0</c> list. For details and examples,
+ see section <seealso marker="write_test_chapter#test_case_groups">
+ Test Case Groups</seealso>.</p>
</section>
<section>
- <title>Test specification syntax</title>
-
- <p>Below is the test specification syntax. Test specifications can
- be used to run tests both in a single test host environment and
- in a distributed Common Test environment (Large Scale
- Testing). The node parameters in the <c>init</c> term are only
- relevant in the latter (see the
- <seealso marker="ct_master_chapter#test_specifications">Large
- Scale Testing</seealso> chapter for information). For more information
- about the various terms, please see the corresponding sections in the
- User's Guide, such as e.g. the
- <seealso marker="run_test_chapter#ct_run"><c>ct_run</c>
+ <title>Test Specification Syntax</title>
+
+ <p>Test specifications can be used to run tests both in a single
+ test host environment and in a distributed <c>Common Test</c> environment
+ (Large Scale Testing). The node parameters in term <c>init</c> are only
+ relevant in the latter (see section
+ <seealso marker="ct_master_chapter#test_specifications">Test Specifications</seealso>
+ in Large Scale Testing). For details about the various terms, see the
+ corresponding sections in the User's Guide, for example, the following:
+ </p>
+ <list type="bulleted">
+ <item>The <seealso marker="run_test_chapter#ct_run"><c>ct_run</c>
program</seealso> for an overview of available start flags
- (since most flags have a corresponding configuration term), and
- more detailed explanation of e.g.
- <seealso marker="write_test_chapter#logging">Logging</seealso>
- (for the <c>verbosity</c>, <c>stylesheet</c> and <c>basic_html</c> terms),
- <seealso marker="config_file_chapter#top">External Configuration Data</seealso>
- (for the <c>config</c> and <c>userconfig</c> terms),
- <seealso marker="event_handler_chapter#event_handling">Event
- Handling</seealso> (for the <c>event_handler</c> term),
- <seealso marker="ct_hooks_chapter#installing">Common Test Hooks</seealso>
- (for the <c>ct_hooks</c> term), etc.</p>
- </section>
-
- <p>Config terms:</p>
+ (as most flags have a corresponding configuration term)</item>
+ <item><seealso marker="write_test_chapter#logging">Logging</seealso>
+ (for terms <c>verbosity</c>, <c>stylesheet</c>, <c>basic_html</c> and <c>esc_chars</c>)</item>
+ <item><seealso marker="config_file_chapter#top">External Configuration Data</seealso>
+ (for terms <c>config</c> and <c>userconfig</c>)</item>
+ <item><seealso marker="event_handler_chapter#event_handling">Event
+ Handling</seealso> (for the <c>event_handler</c> term)</item>
+ <item><seealso marker="ct_hooks_chapter#installing">Common Test Hooks</seealso>
+ (for term <c>ct_hooks</c>)</item>
+ </list>
+
+ <p><em>Configuration terms:</em></p>
<pre>
- {merge_tests, Bool}.
-
- {define, Constant, Value}.
-
- {specs, InclSpecsOption, TestSpecs}.
-
- {node, NodeAlias, Node}.
-
- {init, InitOptions}.
- {init, [NodeAlias], InitOptions}.
-
- {label, Label}.
- {label, NodeRefs, Label}.
-
- {verbosity, VerbosityLevels}.
- {verbosity, NodeRefs, VerbosityLevels}.
-
- {stylesheet, CSSFile}.
- {stylesheet, NodeRefs, CSSFile}.
-
- {silent_connections, ConnTypes}.
- {silent_connections, NodeRefs, ConnTypes}.
-
- {multiply_timetraps, N}.
- {multiply_timetraps, NodeRefs, N}.
-
- {scale_timetraps, Bool}.
- {scale_timetraps, NodeRefs, Bool}.
-
- {cover, CoverSpecFile}.
- {cover, NodeRefs, CoverSpecFile}.
-
- {cover_stop, Bool}.
- {cover_stop, NodeRefs, Bool}.
-
- {include, IncludeDirs}.
- {include, NodeRefs, IncludeDirs}.
-
- {auto_compile, Bool},
- {auto_compile, NodeRefs, Bool},
-
- {abort_if_missing_suites, Bool},
- {abort_if_missing_suites, NodeRefs, Bool},
+ {merge_tests, Bool}.
- {config, ConfigFiles}.
- {config, ConfigDir, ConfigBaseNames}.
- {config, NodeRefs, ConfigFiles}.
- {config, NodeRefs, ConfigDir, ConfigBaseNames}.
-
- {userconfig, {CallbackModule, ConfigStrings}}.
- {userconfig, NodeRefs, {CallbackModule, ConfigStrings}}.
-
- {logdir, LogDir}.
- {logdir, NodeRefs, LogDir}.
-
- {logopts, LogOpts}.
- {logopts, NodeRefs, LogOpts}.
-
- {create_priv_dir, PrivDirOption}.
- {create_priv_dir, NodeRefs, PrivDirOption}.
-
- {event_handler, EventHandlers}.
- {event_handler, NodeRefs, EventHandlers}.
- {event_handler, EventHandlers, InitArgs}.
- {event_handler, NodeRefs, EventHandlers, InitArgs}.
-
- {ct_hooks, CTHModules}.
- {ct_hooks, NodeRefs, CTHModules}.
-
- {enable_builtin_hooks, Bool}.
-
- {basic_html, Bool}.
- {basic_html, NodeRefs, Bool}.
-
- {release_shell, Bool}.</pre>
+ {define, Constant, Value}.
+
+ {specs, InclSpecsOption, TestSpecs}.
+
+ {node, NodeAlias, Node}.
+
+ {init, InitOptions}.
+ {init, [NodeAlias], InitOptions}.
+
+ {label, Label}.
+ {label, NodeRefs, Label}.
+
+ {verbosity, VerbosityLevels}.
+ {verbosity, NodeRefs, VerbosityLevels}.
+
+ {stylesheet, CSSFile}.
+ {stylesheet, NodeRefs, CSSFile}.
+
+ {silent_connections, ConnTypes}.
+ {silent_connections, NodeRefs, ConnTypes}.
+
+ {multiply_timetraps, N}.
+ {multiply_timetraps, NodeRefs, N}.
+
+ {scale_timetraps, Bool}.
+ {scale_timetraps, NodeRefs, Bool}.
+
+ {cover, CoverSpecFile}.
+ {cover, NodeRefs, CoverSpecFile}.
+
+ {cover_stop, Bool}.
+ {cover_stop, NodeRefs, Bool}.
+
+ {include, IncludeDirs}.
+ {include, NodeRefs, IncludeDirs}.
+
+ {auto_compile, Bool},
+ {auto_compile, NodeRefs, Bool},
+
+ {abort_if_missing_suites, Bool},
+ {abort_if_missing_suites, NodeRefs, Bool},
+
+ {config, ConfigFiles}.
+ {config, ConfigDir, ConfigBaseNames}.
+ {config, NodeRefs, ConfigFiles}.
+ {config, NodeRefs, ConfigDir, ConfigBaseNames}.
+
+ {userconfig, {CallbackModule, ConfigStrings}}.
+ {userconfig, NodeRefs, {CallbackModule, ConfigStrings}}.
+
+ {logdir, LogDir}.
+ {logdir, NodeRefs, LogDir}.
+
+ {logopts, LogOpts}.
+ {logopts, NodeRefs, LogOpts}.
+
+ {create_priv_dir, PrivDirOption}.
+ {create_priv_dir, NodeRefs, PrivDirOption}.
+
+ {event_handler, EventHandlers}.
+ {event_handler, NodeRefs, EventHandlers}.
+ {event_handler, EventHandlers, InitArgs}.
+ {event_handler, NodeRefs, EventHandlers, InitArgs}.
+
+ {ct_hooks, CTHModules}.
+ {ct_hooks, NodeRefs, CTHModules}.
+
+ {enable_builtin_hooks, Bool}.
+
+ {basic_html, Bool}.
+ {basic_html, NodeRefs, Bool}.
+
+ {esc_chars, Bool}.
+ {esc_chars, NodeRefs, Bool}.
+
+ {release_shell, Bool}.</pre>
- <p>Test terms:</p>
+ <p><em>Test terms:</em></p>
<pre>
- {suites, Dir, Suites}.
- {suites, NodeRefs, Dir, Suites}.
-
- {groups, Dir, Suite, Groups}.
- {groups, NodeRefs, Dir, Suite, Groups}.
-
- {groups, Dir, Suite, Groups, {cases,Cases}}.
- {groups, NodeRefs, Dir, Suite, Groups, {cases,Cases}}.
-
- {cases, Dir, Suite, Cases}.
- {cases, NodeRefs, Dir, Suite, Cases}.
-
- {skip_suites, Dir, Suites, Comment}.
- {skip_suites, NodeRefs, Dir, Suites, Comment}.
-
- {skip_groups, Dir, Suite, GroupNames, Comment}.
- {skip_groups, NodeRefs, Dir, Suite, GroupNames, Comment}.
-
- {skip_cases, Dir, Suite, Cases, Comment}.
- {skip_cases, NodeRefs, Dir, Suite, Cases, Comment}.</pre>
-
- <p>Types:</p>
+ {suites, Dir, Suites}.
+ {suites, NodeRefs, Dir, Suites}.
+
+ {groups, Dir, Suite, Groups}.
+ {groups, NodeRefs, Dir, Suite, Groups}.
+
+ {groups, Dir, Suite, Groups, {cases,Cases}}.
+ {groups, NodeRefs, Dir, Suite, Groups, {cases,Cases}}.
+
+ {cases, Dir, Suite, Cases}.
+ {cases, NodeRefs, Dir, Suite, Cases}.
+
+ {skip_suites, Dir, Suites, Comment}.
+ {skip_suites, NodeRefs, Dir, Suites, Comment}.
+
+ {skip_groups, Dir, Suite, GroupNames, Comment}.
+ {skip_groups, NodeRefs, Dir, Suite, GroupNames, Comment}.
+
+ {skip_cases, Dir, Suite, Cases, Comment}.
+ {skip_cases, NodeRefs, Dir, Suite, Cases, Comment}.</pre>
+
+ <marker id="types"></marker>
+ <p><em>Types:</em></p>
<pre>
- Bool = true | false
- Constant = atom()
- Value = term()
- InclSpecsOption = join | separate
- TestSpecs = string() | [string()]
- NodeAlias = atom()
- Node = node()
- NodeRef = NodeAlias | Node | master
- NodeRefs = all_nodes | [NodeRef] | NodeRef
- InitOptions = term()
- Label = atom() | string()
- VerbosityLevels = integer() | [{Category,integer()}]
- Category = atom()
- CSSFile = string()
- ConnTypes = all | [atom()]
- N = integer()
- CoverSpecFile = string()
- IncludeDirs = string() | [string()]
- ConfigFiles = string() | [string()]
- ConfigDir = string()
- ConfigBaseNames = string() | [string()]
- CallbackModule = atom()
- ConfigStrings = string() | [string()]
- LogDir = string()
- LogOpts = [term()]
- PrivDirOption = auto_per_run | auto_per_tc | manual_per_tc
- EventHandlers = atom() | [atom()]
- InitArgs = [term()]
- CTHModules = [CTHModule |
- {CTHModule, CTHInitArgs} |
- {CTHModule, CTHInitArgs, CTHPriority}]
- CTHModule = atom()
- CTHInitArgs = term()
- Dir = string()
- Suites = atom() | [atom()] | all
- Suite = atom()
- Groups = GroupPath | [GroupPath] | GroupSpec | [GroupSpec] | all
- GroupPath = [GroupName]
- GroupSpec = GroupName | {GroupName,Properties} | {GroupName,Properties,GroupSpec}
- GroupName = atom()
- GroupNames = GroupName | [GroupName]
- Cases = atom() | [atom()] | all
- Comment = string() | ""</pre>
-
- <section>
- <p>The difference between the <c>config</c> terms above, is that with
+ Bool = true | false
+ Constant = atom()
+ Value = term()
+ InclSpecsOption = join | separate
+ TestSpecs = string() | [string()]
+ NodeAlias = atom()
+ Node = node()
+ NodeRef = NodeAlias | Node | master
+ NodeRefs = all_nodes | [NodeRef] | NodeRef
+ InitOptions = term()
+ Label = atom() | string()
+ VerbosityLevels = integer() | [{Category,integer()}]
+ Category = atom()
+ CSSFile = string()
+ ConnTypes = all | [atom()]
+ N = integer()
+ CoverSpecFile = string()
+ IncludeDirs = string() | [string()]
+ ConfigFiles = string() | [string()]
+ ConfigDir = string()
+ ConfigBaseNames = string() | [string()]
+ CallbackModule = atom()
+ ConfigStrings = string() | [string()]
+ LogDir = string()
+ LogOpts = [term()]
+ PrivDirOption = auto_per_run | auto_per_tc | manual_per_tc
+ EventHandlers = atom() | [atom()]
+ InitArgs = [term()]
+ CTHModules = [CTHModule |
+ {CTHModule, CTHInitArgs} |
+ {CTHModule, CTHInitArgs, CTHPriority}]
+ CTHModule = atom()
+ CTHInitArgs = term()
+ Dir = string()
+ Suites = atom() | [atom()] | all
+ Suite = atom()
+ Groups = GroupPath | [GroupPath] | GroupSpec | [GroupSpec] | all
+ GroupPath = [GroupName]
+ GroupSpec = GroupName | {GroupName,Properties} | {GroupName,Properties,GroupSpec}
+ GroupName = atom()
+ GroupNames = GroupName | [GroupName]
+ Cases = atom() | [atom()] | all
+ Comment = string() | ""</pre>
+
+ <p>The difference between the <c>config</c> terms above is that with
<c>ConfigDir</c>, <c>ConfigBaseNames</c> is a list of base names,
- i.e. without directory paths. <c>ConfigFiles</c> must be full names,
- including paths. E.g, these two terms have the same meaning:</p>
+ that is, without directory paths. <c>ConfigFiles</c> must be full names,
+ including paths. For example, the following two terms have the same meaning:</p>
<pre>
- {config, ["/home/testuser/tests/config/nodeA.cfg",
- "/home/testuser/tests/config/nodeB.cfg"]}.
-
- {config, "/home/testuser/tests/config", ["nodeA.cfg","nodeB.cfg"]}.</pre>
+ {config, ["/home/testuser/tests/config/nodeA.cfg",
+ "/home/testuser/tests/config/nodeB.cfg"]}.
+
+ {config, "/home/testuser/tests/config", ["nodeA.cfg","nodeB.cfg"]}.</pre>
- <note><p>Any relative paths specified in the test specification, will be
- relative to the directory which contains the test specification file, if
+ <note><p>Any relative paths, specified in the test specification, are
+ relative to the directory containing the test specification file if
<c>ct_run -spec TestSpecFile ...</c> or
<c>ct:run:test([{spec,TestSpecFile},...])</c>
- executes the test. The path will be relative to the top level log directory, if
+ executes the test.</p>
+ <p>The path is relative to the top-level log directory if
<c>ct:run:testspec(TestSpec)</c> executes the test.</p></note>
</section>
<section>
<title>Constants</title>
- <p>The <c>define</c> term introduces a constant, which is used to
- replace the name <c>Constant</c> with <c>Value</c>, wherever it's found in
- the test specification. This replacement happens during an initial iteration
- through the test specification. Constants may be used anywhere in the test
- specification, e.g. in arbitrary lists and tuples, and even in strings
- and inside the value part of other constant definitions! A constant can
+ <p>The term <c>define</c> introduces a constant that is used to
+ replace the name <c>Constant</c> with <c>Value</c>, wherever it is found in
+ the test specification. This replacement occurs during an initial iteration
+ through the test specification. Constants can be used anywhere in the test
+ specification, for example, in any lists and tuples, and even in strings
+ and inside the value part of other constant definitions. A constant can
also be part of a node name, but that is the only place where a constant
can be part of an atom.</p>
<note><p>For the sake of readability, the name of the constant must always
- begin with an upper case letter, or a <c>$</c>, <c>?</c>, or <c>_</c>.
- This also means that it must always be single quoted (obviously, since
- the constant name is actually an atom, not text).</p></note>
+ begin with an uppercase letter, or a <c>$</c>, <c>?</c>, or <c>_</c>.
+ This means that it must always be single quoted (as the constant name is
+ an atom, not text).</p></note>
<p>The main benefit of constants is that they can be used to reduce the size
- (and avoid repetition) of long strings, such as file paths. Compare these
- terms:</p>
+ (and avoid repetition) of long strings, such as file paths.</p>
+ <p><em>Examples:</em></p>
<pre>
- %% 1a. no constant
- {config, "/home/testuser/tests/config", ["nodeA.cfg","nodeB.cfg"]}.
- {suites, "/home/testuser/tests/suites", all}.
-
- %% 1b. with constant
- {define, 'TESTDIR', "/home/testuser/tests"}.
- {config, "'TESTDIR'/config", ["nodeA.cfg","nodeB.cfg"]}.
- {suites, "'TESTDIR'/suites", all}.
-
- %% 2a. no constants
- {config, [testnode@host1, testnode@host2], "../config", ["nodeA.cfg","nodeB.cfg"]}.
- {suites, [testnode@host1, testnode@host2], "../suites", [x_SUITE, y_SUITE]}.
-
- %% 2b. with constants
- {define, 'NODE', testnode}.
- {define, 'NODES', ['NODE'@host1, 'NODE'@host2]}.
- {config, 'NODES', "../config", ["nodeA.cfg","nodeB.cfg"]}.
- {suites, 'NODES', "../suites", [x_SUITE, y_SUITE]}.</pre>
+ %% 1a. no constant
+ {config, "/home/testuser/tests/config", ["nodeA.cfg","nodeB.cfg"]}.
+ {suites, "/home/testuser/tests/suites", all}.
+
+ %% 1b. with constant
+ {define, 'TESTDIR', "/home/testuser/tests"}.
+ {config, "'TESTDIR'/config", ["nodeA.cfg","nodeB.cfg"]}.
+ {suites, "'TESTDIR'/suites", all}.
+
+ %% 2a. no constants
+ {config, [testnode@host1, testnode@host2], "../config", ["nodeA.cfg","nodeB.cfg"]}.
+ {suites, [testnode@host1, testnode@host2], "../suites", [x_SUITE, y_SUITE]}.
+
+ %% 2b. with constants
+ {define, 'NODE', testnode}.
+ {define, 'NODES', ['NODE'@host1, 'NODE'@host2]}.
+ {config, 'NODES', "../config", ["nodeA.cfg","nodeB.cfg"]}.
+ {suites, 'NODES', "../suites", [x_SUITE, y_SUITE]}.</pre>
<p>Constants make the test specification term <c>alias</c>, in previous
- versions of Common Test, redundant. This term has been deprecated but will
- remain supported in upcoming Common Test releases. Replacing <c>alias</c>
- terms with <c>define</c> is strongly recommended though! Here's an example
- of such a replacement:</p>
+ versions of <c>Common Test</c>, redundant. This term is deprecated but
+ remains supported in upcoming <c>Common Test</c> releases. Replacing <c>alias</c>
+ terms with <c>define</c> is strongly recommended though. An example
+ of such replacement follows:</p>
<pre>
- %% using the old alias term
- {config, "/home/testuser/tests/config/nodeA.cfg"}.
- {alias, suite_dir, "/home/testuser/tests/suites"}.
- {groups, suite_dir, x_SUITE, group1}.
-
- %% replacing with constants
- {define, 'TestDir', "/home/testuser/tests"}.
- {define, 'CfgDir', "'TestDir'/config"}.
- {define, 'SuiteDir', "'TestDir'/suites"}.
- {config, 'CfgDir', "nodeA.cfg"}.
- {groups, 'SuiteDir', x_SUITE, group1}.</pre>
+ %% using the old alias term
+ {config, "/home/testuser/tests/config/nodeA.cfg"}.
+ {alias, suite_dir, "/home/testuser/tests/suites"}.
+ {groups, suite_dir, x_SUITE, group1}.
+
+ %% replacing with constants
+ {define, 'TestDir', "/home/testuser/tests"}.
+ {define, 'CfgDir', "'TestDir'/config"}.
+ {define, 'SuiteDir', "'TestDir'/suites"}.
+ {config, 'CfgDir', "nodeA.cfg"}.
+ {groups, 'SuiteDir', x_SUITE, group1}.</pre>
- <p>Actually, constants could well replace the <c>node</c> term too, but
- this still has declarative value, mainly when used in combination
- with <c>NodeRefs == all_nodes</c> (see types above).</p>
+ <p>Constants can well replace term <c>node</c> also, but
+ this still has a declarative value, mainly when used in combination
+ with <c>NodeRefs == all_nodes</c>
+ (see <seealso marker="#types">Types</seealso>).</p>
</section>
<section>
@@ -955,104 +1056,104 @@
<p>Here follows a simple test specification example:</p>
<pre>
- {define, 'Top', "/home/test"}.
- {define, 'T1', "'Top'/t1"}.
- {define, 'T2', "'Top'/t2"}.
- {define, 'T3', "'Top'/t3"}.
- {define, 'CfgFile', "config.cfg"}.
-
- {logdir, "'Top'/logs"}.
-
- {config, ["'T1'/'CfgFile'", "'T2'/'CfgFile'", "'T3'/'CfgFile'"]}.
-
- {suites, 'T1', all}.
- {skip_suites, 'T1', [t1B_SUITE,t1D_SUITE], "Not implemented"}.
- {skip_cases, 'T1', t1A_SUITE, [test3,test4], "Irrelevant"}.
- {skip_cases, 'T1', t1C_SUITE, [test1], "Ignore"}.
-
- {suites, 'T2', [t2B_SUITE,t2C_SUITE]}.
- {cases, 'T2', t2A_SUITE, [test4,test1,test7]}.
-
- {skip_suites, 'T3', all, "Not implemented"}.</pre>
+ {define, 'Top', "/home/test"}.
+ {define, 'T1', "'Top'/t1"}.
+ {define, 'T2', "'Top'/t2"}.
+ {define, 'T3', "'Top'/t3"}.
+ {define, 'CfgFile', "config.cfg"}.
+
+ {logdir, "'Top'/logs"}.
+
+ {config, ["'T1'/'CfgFile'", "'T2'/'CfgFile'", "'T3'/'CfgFile'"]}.
+
+ {suites, 'T1', all}.
+ {skip_suites, 'T1', [t1B_SUITE,t1D_SUITE], "Not implemented"}.
+ {skip_cases, 'T1', t1A_SUITE, [test3,test4], "Irrelevant"}.
+ {skip_cases, 'T1', t1C_SUITE, [test1], "Ignore"}.
+
+ {suites, 'T2', [t2B_SUITE,t2C_SUITE]}.
+ {cases, 'T2', t2A_SUITE, [test4,test1,test7]}.
+
+ {skip_suites, 'T3', all, "Not implemented"}.</pre>
<p>The example specifies the following:</p>
- <list>
- <item>The specified logdir directory will be used for storing
+ <list type="bulleted">
+ <item>The specified <c>logdir</c> directory is used for storing
the HTML log files (in subdirectories tagged with node name,
- date and time).</item>
- <item>The variables in the specified test system config files will be
+ date, and time).</item>
+ <item>The variables in the specified test system configuration files are
imported for the test.</item>
- <item>The first test to run includes all suites for system t1. Excluded from
- the test are however the t1B and t1D suites. Also test cases test3 and
- test4 in t1A as well as the test1 case in t1C are excluded from
- the test.</item>
- <item>Secondly, the test for system t2 should run. The included suites are
- t2B and t2C. Included are also test cases test4, test1 and test7 in suite
- t2A. Note that the test cases will be executed in the specified order.</item>
- <item>Lastly, all suites for systems t3 are to be completely skipped and this
- should be explicitly noted in the log files.</item>
+ <item>The first test to run includes all suites for system <c>t1</c>.
+ Suites <c>t1B</c> and <c>t1D</c> are excluded from the test. Test cases
+ <c>test3</c> and <c>test4</c> in <c>t1A</c> and <c>test1</c> case in <c>t1C</c>
+ are also excluded from the test.</item>
+ <item>The second test to run is for system <c>t2</c>. The included suites are
+ <c>t2B</c> and <c>t2C</c>. Test cases <c>test4</c>, <c>test1</c>, and <c>test7</c> in suite
+ <c>t2A</c> are also included. The test cases are executed in the specified order.</item>
+ <item>The last test to run is for system <c>t3</c>. Here, all suites are skipped and this
+ is explicitly noted in the log files.</item>
</list>
</section>
<section>
- <title>The init term</title>
- <p>With the <c>init</c> term it's possible to specify initialization options
- for nodes defined in the test specification. Currently, there are options
- to start the node and/or to evaluate any function on the node.
- See the <seealso marker="ct_master_chapter#ct_slave">Automatic startup of
- the test target nodes</seealso> chapter for details.</p>
+ <title>The init Term</title>
+ <p>With term <c>init</c> it is possible to specify initialization options
+ for nodes defined in the test specification. There are options
+ to start the node and to evaluate any function on the node.
+ For details, see section <seealso marker="ct_master_chapter#ct_slave">Automatic Startup of
+ Test Target Nodes</seealso> in section Using Common Test for Large Scale Testing.</p>
</section>
<section>
- <title>User specific terms</title>
- <p>It is possible for the user to provide a test specification that
- includes (for Common Test) unrecognizable terms. If this is desired,
- the <c>-allow_user_terms</c> flag should be used when starting tests with
- <c>ct_run</c>. This forces Common Test to ignore unrecognizable terms.
- Note that in this mode, Common Test is not able to check the specification
- for errors as efficiently as if the scanner runs in default mode.
+ <title>User-Specific Terms</title>
+ <p>The user can provide a test specification including (for <c>Common Test</c>)
+ unrecognizable terms. If this is desired, use flag <c>-allow_user_terms</c>
+ when starting tests with <c>ct_run</c>. This forces <c>Common Test</c> to ignore
+ unrecognizable terms. In this mode, <c>Common Test</c> is not able to check the
+ specification for errors as efficiently as if the scanner runs in default mode.
If <seealso marker="ct#run_test-1"><c>ct:run_test/1</c></seealso> is used
- for starting the tests, the relaxed scanner
- mode is enabled by means of the tuple: <c>{allow_user_terms,true}</c></p>
+ for starting the tests, the relaxed scanner mode is enabled by tuple
+ <c>{allow_user_terms,true}</c>.</p>
</section>
<section>
- <title>Reading test specification terms</title>
- <p>It's possible to look up terms in the current test specification
- (i.e. the spec that's been used to configure and run the current test).
- The function <c>get_testspec_terms()</c> returns a list of all test spec
- terms (both config- and test terms) and <c>get_testspec_terms(Tags)</c>
- returns the term (or a list of terms) matching the tag (or tags) in
- <c>Tags</c>.</p>
+ <title>Reading Test Specification Terms</title>
+ <p>Terms in the current test specification
+ (that is, the specification that has been used to configure and run the current test)
+ can be looked up.
+ The function <seealso marker="ct#get_testspec_terms-0"><c>get_testspec_terms()</c></seealso>
+ returns a list of all test specification terms (both configuration terms and test terms),
+ and <c>get_testspec_terms(Tags)</c> returns the term (or a list of terms) matching the
+ tag (or tags) in <c>Tags</c>.</p>
<p>For example, in the test specification:</p>
<pre>
- ...
- {label, my_server_smoke_test}.
- {config, "../../my_server_setup.cfg"}.
- {config, "../../my_server_interface.cfg"}.
- ...</pre>
- <p>And in e.g. a test suite or a CT hook function:</p>
+ ...
+ {label, my_server_smoke_test}.
+ {config, "../../my_server_setup.cfg"}.
+ {config, "../../my_server_interface.cfg"}.
+ ...</pre>
+ <p>And in, for example, a test suite or a <c>Common Test Hook</c> function:</p>
<pre>
- ...
- [{label,[{_Node,TestType}]}, {config,CfgFiles}] =
- ct:get_testspec_terms([label,config]),
+ ...
+ [{label,[{_Node,TestType}]}, {config,CfgFiles}] =
+ ct:get_testspec_terms([label,config]),
- [verify_my_server_cfg(TestType, CfgFile) || {Node,CfgFile} &lt;- CfgFiles,
- Node == node()];
- ...</pre>
+ [verify_my_server_cfg(TestType, CfgFile) || {Node,CfgFile} &lt;- CfgFiles,
+ Node == node()];
+ ...</pre>
</section>
</section>
<section>
- <title>Running tests from the Web based GUI</title>
+ <title>Running Tests from the Web-Based GUI</title>
- <p>The web based GUI, VTS, is started with the
+ <p>The web-based GUI, Virtual Test Server (VTS), is started with the
<seealso marker="run_test_chapter#ct_run"><c>ct_run</c></seealso>
- program. From the GUI you can load config files, and select
- directories, suites and cases to run. You can also state the
- config files, directories, suites and cases on the command line
- when starting the web based GUI.
+ program. From the GUI, you can load configuration files and select
+ directories, suites, and cases to run. You can also state the
+ configuration files, directories, suites, and cases on the command line
+ when starting the web-based GUI.
</p>
-
- <list>
+ <p><em>Examples:</em></p>
+ <list type="bulleted">
<item><c>ct_run -vts</c></item>
<item><c><![CDATA[ct_run -vts -config <configfilename>]]></c></item>
<item><c><![CDATA[ct_run -vts -config <configfilename> -suite <suitewithfullpath>
@@ -1062,454 +1163,464 @@
<p>From the GUI you can run tests and view the result and the logs.
</p>
- <p>Note that <c>ct_run -vts</c> will try to open the Common Test start
- page in an existing web browser window or start the browser if it is
- not running. Which browser should be started may be specified with
+ <p><c>ct_run -vts</c> tries to open the <c>Common Test</c> start
+ page in an existing web browser window, or start the browser if it is
+ not running. Which browser to start can be specified with
the browser start command option:</p>
<p><c><![CDATA[ct_run -vts -browser <browser_start_cmd>]]></c></p>
- <p>Example:</p>
+ <p><em>Example:</em></p>
<p><c><![CDATA[$ ct_run -vts -browser 'firefox&']]></c></p>
- <p>Note that the browser must run as a separate OS process or VTS will hang!</p>
- <p>If no specific browser start command is specified, Firefox will
- be the default browser on Unix platforms and Internet Explorer on Windows.
- If Common Test fails to start a browser automatically, or <c>'none'</c> is
- specified as the value for -browser (i.e. <c>-browser none</c>), start your
- favourite browser manually and type in the URL that Common Test
+
+ <note><p>The browser must run as a separate OS process, otherwise VTS hangs.</p></note>
+
+ <p>If no specific browser start command is specified, Firefox is
+ the default browser on Unix platforms, and Internet Explorer on Windows.
+ If <c>Common Test</c> fails to start a browser automatically, or <c>none</c> is
+ specified as the value for <c>-browser</c> (that is, <c>-browser none</c>), start your
+ favourite browser manually and type the URL that <c>Common Test</c>
displays in the shell.</p>
</section>
<section>
<marker id="log_files"></marker>
- <title>Log files</title>
+ <title>Log Files</title>
<p>As the execution of the test suites proceed, events are logged in
- four different ways:</p>
+ the following four different ways:</p>
- <list>
- <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 overview log file gets updated with test results.</item>
+ <list type="bulleted">
+ <item>Text to the operator 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 overview log file is updated with test results.</item>
<item>A link to all runs executed from a certain directory is written in
- the log named "all_runs.html" and direct links to all tests (the
- latest results) are written to the top level "index.html".</item>
+ the log named <c>all_runs.html</c> and direct links to all tests (the
+ latest results) are written to the top-level <c>index.html</c>.</item>
</list>
- <p>Typically the operator, who may run hundreds or thousands of
- test cases, doesn't want to fill the console with details
- about, or printouts from, the specific test cases. By default, the
- operator will only see:</p>
+ <p>Typically the operator, possibly running hundreds or thousands of
+ test cases, does not want to fill the console with details
+ about, or printouts from, specific test cases. By default, the
+ operator only sees the following:</p>
- <list>
+ <list type="bulleted">
<item>A confirmation that the test has started and information about how
- many test cases will be executed totally.</item>
+ many test cases are executed in total.</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
+ <item>A confirmation when the test run is complete.</item>
+ <item>Some special information, such as error reports, progress
+ reports, and printouts written with <c>erlang:display/1</c>, or <c>io:format/3</c>
specifically addressed to a receiver other than <c>standard_io</c>
- (e.g. the default group leader process 'user').</item>
+ (for example, the default group leader process <c>user</c>).</item>
</list>
- <p>If/when the operator wants to dig deeper into the general results, or
- the result of a specific test case, he should do so by
- following the links in the HTML presentation and take a look in the
- major or minor log files. The "all_runs.html" page is a practical
- starting point usually. It's located in <c>logdir</c> and contains
- a link to each test run including a quick overview (date and time,
- node name, number of tests, test names and test result totals).</p>
+ <p>To dig deeper into the general results, or
+ the result of a specific test case, the operator can do so by
+ following the links in the HTML presentation and read the
+ major or minor log files. The "all_runs.html" page is a good
+ starting point. It is located in <c>logdir</c> and contains
+ a link to each test run, including a quick overview (with date and time,
+ node name, number of tests, test names, and test result totals).</p>
- <p>An "index.html" page is written for each test run (i.e. stored in
- the "ct_run" directory tagged with node name, date and time). This
- file gives a short overview of all individual tests performed in the
- same test run. The test names follow this convention:</p>
- <list>
- <item><em>TopLevelDir.TestDir</em> (all suites in TestDir executed)</item>
- <item><em>TopLevelDir.TestDir:suites</em> (specific suites were executed)</item>
- <item><em>TopLevelDir.TestDir.Suite</em> (all cases in Suite executed)</item>
- <item><em>TopLevelDir.TestDir.Suite:cases</em> (specific test cases were executed)</item>
- <item><em>TopLevelDir.TestDir.Suite.Case</em> (only Case was executed)</item>
+ <p>An "index.html" page is written for each test run (that is, stored in
+ the <c>ct_run</c> directory tagged with node name, date, and time). This
+ file provides an overview of all individual tests performed in the
+ same test run. The test names follow the following convention:</p>
+ <list type="bulleted">
+ <item><c>TopLevelDir.TestDir</c> (all suites in <c>TestDir</c> executed)</item>
+ <item><c>TopLevelDir.TestDir:suites</c> (specific suites executed)</item>
+ <item><c>TopLevelDir.TestDir.Suite</c> (all cases in <c>Suite</c> executed)</item>
+ <item><c>TopLevelDir.TestDir.Suite:cases</c> (specific test cases executed)</item>
+ <item><c>TopLevelDir.TestDir.Suite.Case</c> (only <c>Case</c> executed)</item>
</list>
- <p>On the test run index page there is a link to the Common Test
+ <p>The "test run index" page includes a link to the <c>Common Test</c>
Framework Log file in which information about imported
configuration data and general test progress is written. This
log file is useful to get snapshot information about the test
- run during execution. It can also be very helpful when
+ run during execution. It can also be helpful when
analyzing test results or debugging test suites.</p>
- <p>On the test run index page it is noted if a test has missing
- suites (i.e. suites that Common Test has failed to
+ <p>The "test run index" page indicates if a test has missing
+ suites (that is, suites that <c>Common Test</c> failed to
compile). Names of the missing suites can be found in the
- Common Test Framework Log file.</p>
+ <c>Common Test</c> Framework Log file.</p>
<p>The major log file shows a detailed report of the test run. It
includes test suite and test case names, execution time, the
- exact reason for failures etc. The information is available in both
+ exact reason for failures, and so on. The information is available in both
a file with textual and with HTML representation. The HTML file shows a
- summary which gives a good overview of the test run. It also has links
+ summary that gives a good overview of the test run. It also has links
to each individual test case log file for quick viewing with an HTML
browser.</p>
<p>The minor log files contain full details of every single test
- case, each one in a separate file. This way, it should be
+ case, each in a separate file. This way, it is
straightforward to compare the latest results to that of previous
- test runs, even if the set of test cases changes. If SASL is running,
- its logs will also be printed to the current minor log file by the
+ test runs, even if the set of test cases changes. If application <c>SASL</c>
+ is running, its logs are also printed to the current minor log file by the
<seealso marker="common_test:ct_hooks_chapter#builtin_cths">
cth_log_redirect built-in hook</seealso>.
</p>
- <p>The full name of the minor log file (i.e. the name of the file
+ <p>The full name of the minor log file (that is, the name of the file
including the absolute directory path) can be read during execution
- of the test case. It comes as value in the tuple
+ of the test case. It comes as value in tuple
<c>{tc_logfile,LogFileName}</c> in the <c>Config</c> list (which means it
- can also be read by a pre- or post Common Test hook function). Also,
+ can also be read by a pre- or post <c>Common Test Hook</c> function). Also,
at the start of a test case, this data is sent with an event
- to any installed event handler. Please see the
- <seealso marker="event_handler_chapter#event_handling">Event Handling</seealso>
- chapter for details.
+ to any installed event handler. For details, see section
+ <seealso marker="event_handler_chapter#event_handling">Event Handling</seealso>.
</p>
-
- <p>Which information 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. See
- the OTP Test Server manual for information. The contents that
- goes to the HTML log file is fixed however and cannot be altered.</p>
-
- <p>The log files are written continously during a test run and links are
- always created initially when a test starts. This makes it possible
- to follow test progress simply by refreshing pages in the HTML browser.
+
+ <p>The log files are written continuously during a test run and links are
+ always created initially when a test starts. Thevtest progress can therefore
+ be followed simply by refreshing pages in the HTML browser.
Statistics totals are not presented until a test is complete however.</p>
<section>
<marker id="logopts"></marker>
- <title>Log options</title>
- <p>With the <c>logopts</c> start flag, it's possible to specify
- options that modify some aspects of the logging behaviour.
- Currently, the following options are available:</p>
- <list>
- <item><c>no_src</c></item>
- <item><c>no_nl</c></item>
- </list>
- <p>With <c>no_src</c>, the html version of the test suite source
- code will not be generated during the test run (and consequently
- not be available in the log file system).</p>
- <p>With <c>no_nl</c>, Common Test will not add a newline character
- (\n) to the end of an output string that it receives from a call to e.g.
- <c>io:format/2</c>, and which it prints to the test case log.</p>
+ <title>Log Options</title>
+ <p>With start flag <c>logopts</c> options that modify some aspects
+ of the logging behavior can be specified.
+ The following options are available:</p>
+ <taglist>
+ <tag><c>no_src</c></tag>
+ <item><p>The HTML version of the test suite source code is not
+ generated during the test run (and is consequently not available
+ in the log file system).</p></item>
+ <tag><c>no_nl</c></tag>
+ <item><p><c>Common Test</c> does not add a newline character <c>(\n)</c>
+ to the end of an output string that it receives from a call to, for example,
+ <c>io:format/2</c>, and which it prints to the test case log.</p></item>
+ </taglist>
+
<p>For example, if a test is started with:</p>
<p><c>$ ct_run -suite my_SUITE -logopts no_src</c></p>
<p>then printouts during the test made by successive calls to <c>io:format("x")</c>,
- will appear in the test case log as:</p>
+ appears in the test case log as:</p>
<p><c>xxx</c></p>
- <p>instead of each <c>x</c> printed on a new line, which is the default behaviour.</p>
+ <p>instead of each <c>x</c> printed on a new line, which is the default behavior.</p>
</section>
<section>
<marker id="table_sorting"></marker>
- <title>Sorting HTML table columns</title>
- <p>By clicking the name in the column header of any table (e.g. "Ok", "Case", "Time", etc),
- the table rows are sorted in whatever order makes sense for the type of value (e.g.
- numerical for "Ok" or "Time", and alphabetical for "Case"). The sorting is performed
- by means of JavaScript code, automatically inserted into the HTML log files. Common Test
- uses the <url href="http://jquery.com">jQuery</url> library and the
- <url href="http://tablesorter.com">tablesorter</url> plugin, with customized sorting
- functions, for this implementation.</p>
+ <title>Sorting HTML Table Columns</title>
+ <p>By clicking the name in the column header of any table
+ (for example, "Ok", "Case", "Time", and so on), the table rows are sorted
+ in whatever order makes sense for the type of value (for example,
+ numerical for "Ok" or "Time", and alphabetical for "Case"). The sorting is
+ performed through JavaScript code, automatically inserted into the HTML
+ log files. <c>Common Test</c> uses the <url href="http://jquery.com">jQuery</url>
+ library and the
+ <url href="http://tablesorter.com">tablesorter</url> plugin,
+ with customized sorting functions, for this implementation.</p>
</section>
<section>
<title>The Unexpected I/O Log</title>
- <p>On the test suites overview page you find a link to the Unexpected I/O Log.
- In this log, Common Test saves printouts made with
- <c>ct:log/2</c> and <c>ct:pal/2</c>, as well as captured system error- and
- progress reports, that cannot be associated with particular test cases and
- therefore cannot be written to individual test case log files. This happens e.g.
- if a log printout is made from an external process (not a test case process),
- or if an error- or progress report comes in, during a short interval while Common
- Test is not executing a test case or configuration function, <em>or</em> while
- Common Test is currently executing a parallell test case group.</p>
+ <p>The test suites overview page includes a link to the Unexpected I/O Log.
+ In this log, <c>Common Test</c> saves printouts made with
+ <seealso marker="ct#log-2"><c>ct:log/2</c></seealso> and
+ <seealso marker="ct#pal-2"><c>ct:pal/2</c></seealso>, as well as captured system
+ error- and progress reports, which cannot be associated with particular test cases and
+ therefore cannot be written to individual test case log files. This occurs,
+ for example, if a log printout is made from an external process (not a test
+ case process), <em>or</em> if an error- or progress report comes in, during a short
+ interval while <c>Common Test</c> is not executing a test case or configuration
+ function, <em>or</em> while <c>Common Test</c> is currently executing a parallel
+ test case group.</p>
</section>
<section>
<marker id="pre_post_test_io_log"></marker>
<title>The Pre- and Post Test I/O Log</title>
- <p>On the Common Test Framework Log page you find links to the so called
- Pre- and Post Test I/O Log. In this log, Common Test saves printouts made with
- <c>ct:log/2</c> and <c>ct:pal/2</c>, as well as captured system error-
- and progress reports, that take place before - and after - the actual test run.
+ <p>The <c>Common Test</c> Framework Log page includes links to the
+ Pre- and Post Test I/O Log. In this log, <c>Common Test</c> saves printouts made
+ with <c>ct:log/2</c> and <c>ct:pal/2</c>, as well as captured system error-
+ and progress reports, which take place before, and after, the test run.
Examples of this are printouts from a CT hook init- or terminate function, or
progress reports generated when an OTP application is started from a CT hook
- init function. Another example is an error report generated due to
+ init function. Another example is an error report generated because of
a failure when an external application is stopped from a CT hook terminate function.
All information in these examples ends up in the Pre- and Post Test I/O Log.
For more information on how to synchronize test runs with external user
- applications, please see the
+ applications, see section
<seealso marker="ct_hooks_chapter#synchronizing">Synchronizing</seealso>
- section in the Common Test Hooks chapter.</p>
- <p>Note that logging to file with <c>ct:log/2</c> or <c>ct:pal/2</c>
- only works when Common Test is running. Printouts with <c>ct:pal/2</c>
- are however always displayed on screen.</p>
+ in section Common Test Hooks.</p>
+ <note><p>Logging to file with <c>ct:log/2</c> or <c>ct:pal/2</c>
+ only works when <c>Common Test</c> is running. Printouts with <c>ct:pal/2</c>
+ are however always displayed on screen.</p></note>
</section>
</section>
<section>
<marker id="html_stylesheet"></marker>
<title>HTML Style Sheets</title>
- <p>Common Test uses an HTML Style Sheet (CSS file) to control the look of
- the HTML log files generated during test runs. If, for some reason, the
- log files are not displayed correctly in the browser of your
- choice, or you prefer a more primitive ("pre Common Test v1.6") look
- of the logs, use the start flag/option:</p>
- <pre>basic_html</pre>
- <p>This disables the use of Style Sheets, as well as JavaScripts (see
- table sorting above).</p>
+ <p><c>Common Test</c> uses an HTML Style Sheet (CSS file) to control the look of
+ the HTML log files generated during test runs. If the log files are not
+ displayed correctly in the browser of your choice, or you prefer a more
+ primitive ("pre <c>Common Test</c> v1.6") look of the logs, use the start
+ flag/option:</p>
+ <pre>
+ basic_html</pre>
+ <p>This disables the use of style sheets and JavaScripts (see
+ <seealso marker="#table_sorting">Sorting HTML Table Columns</seealso>).</p>
- <p>Common Test includes an <em>optional</em> feature to allow
+ <p><c>Common Test</c> includes an <em>optional</em> feature to allow
user HTML style sheets for customizing printouts. The
functions in <c>ct</c> that print to a test case HTML log
file (<c>log/3</c> and <c>pal/3</c>) accept <c>Category</c>
- as first argument. With this argument it's possible to
- specify a category that can be mapped to a selector in a CSS
- definition. This is useful especially for coloring text
+ as first argument. With this argument a category can be specified
+ that can be mapped to a selector in a CSS
+ definition. This is useful, especially for coloring text
differently depending on the type of (or reason for) the
printout. Say you want one color for test system
configuration information, a different one for test system
- state information and finally one for errors detected by the
- test case functions. The corresponding style sheet may
- look like this:</p>
+ state information, and finally one for errors detected by the
+ test case functions. The corresponding style sheet can
+ look as follows:</p>
<pre>
- div.sys_config { background:blue; color:white }
- div.sys_state { background:yellow; color:black }
- div.error { background:red; color:white }</pre>
+ div.sys_config { background:blue; color:white }
+ div.sys_state { background:yellow; color:black }
+ div.error { background:red; color:white }</pre>
- <p>To install the CSS file (Common Test inlines the definition in the
- HTML code), the name may be provided when executing <c>ct_run</c>.
- Example:</p>
+ <p>To install the CSS file (<c>Common Test</c> inlines the definition in the
+ HTML code), the name can be provided when executing <c>ct_run</c>.</p>
+ <p><em>Example:</em></p>
<pre>
- $ ct_run -dir $TEST/prog -stylesheet $TEST/styles/test_categories.css</pre>
+ $ ct_run -dir $TEST/prog -stylesheet $TEST/styles/test_categories.css</pre>
- <p>Categories in a CSS file installed with the <c>-stylesheet</c> flag
+ <p>Categories in a CSS file installed with flag <c>-stylesheet</c>
are on a global test level in the sense that they can be used in any
- suite which is part of the test run.</p>
+ suite that is part of the test run.</p>
- <p>It is also possible to install style sheets on a per suite and
- per test case basis. Example:</p>
+ <p>Style sheets can also be installed on a per suite and
+ per test case basis.</p>
+ <p><em>Example:</em></p>
<pre>
- -module(my_SUITE).
- ...
- suite() -> [..., {stylesheet,"suite_categories.css"}, ...].
- ...
- my_testcase(_) ->
- ...
- ct:log(sys_config, "Test node version: ~p", [VersionInfo]),
- ...
- ct:log(sys_state, "Connections: ~p", [ConnectionInfo]),
- ...
- ct:pal(error, "Error ~p detected! Info: ~p", [SomeFault,ErrorInfo]),
- ct:fail(SomeFault).</pre>
+ -module(my_SUITE).
+ ...
+ suite() -> [..., {stylesheet,"suite_categories.css"}, ...].
+ ...
+ my_testcase(_) ->
+ ...
+ ct:log(sys_config, "Test node version: ~p", [VersionInfo]),
+ ...
+ ct:log(sys_state, "Connections: ~p", [ConnectionInfo]),
+ ...
+ ct:pal(error, "Error ~p detected! Info: ~p", [SomeFault,ErrorInfo]),
+ ct:fail(SomeFault).</pre>
<p>If the style sheet is installed as in this example, the categories are
private to the suite in question. They can be used by all test cases in the
- suite, but can not be used by other suites. A suite private style sheet,
- if specified, will be used in favour of a global style sheet (one specified
- with the <c>-stylesheet</c> flag). A stylesheet tuple (as returned by <c>suite/0</c>
- above) can also be returned from a test case info function. In this case the
+ suite, but cannot be used by other suites. A suite private style sheet,
+ if specified, is used in favor of a global style sheet (one specified
+ with flag <c>-stylesheet</c>). A stylesheet tuple (as returned by <c>suite/0</c>
+ above) can also be returned from a test case information function. In this case the
categories specified in the style sheet can only be used in that particular
- test case. A test case private style sheet is used in favour of a suite or
+ test case. A test case private style sheet is used in favor of a suite or
global level style sheet.
</p>
<p>In a tuple <c>{stylesheet,CSSFile}</c>, if <c>CSSFile</c> is specified
- with a path, e.g. <c>"$TEST/styles/categories.css"</c>, this full
- name will be used to locate the file. If only the file name is specified
- however, e.g. "categories.css", then the CSS file is assumed to be located
- in the data directory, <c>data_dir</c>, of the suite. The latter usage is
- recommended since it is portable compared to hard coding path names in the
- suite!</p>
-
- <p>The <c>Category</c> argument in the example above may have the
+ with a path, for example, <c>"$TEST/styles/categories.css"</c>, this full
+ name is used to locate the file. However, if only the file name is specified,
+ for example, <c>categories.css</c>, the CSS file is assumed to be located
+ in the data directory, <c>data_dir</c>, of the suite. The latter use is
+ recommended, as it is portable compared to hard coding path names in the
+ suite.</p>
+
+ <p>Argument <c>Category</c> in the previous example can have the
value (atom) <c>sys_config</c> (white on blue), <c>sys_state</c>
- (black on yellow) or <c>error</c> (white on red).</p>
+ (black on yellow), or <c>error</c> (white on red).</p>
</section>
<section>
<marker id="repeating_tests"></marker>
- <title>Repeating tests</title>
- <p>You can order Common Test to repeat the tests you specify. You can choose
- to repeat tests a certain number of times, repeat tests for a specific period of time,
+ <title>Repeating Tests</title>
+ <p>You can order <c>Common Test</c> to repeat the tests you specify. You can choose
+ to repeat tests a number of times, repeat tests for a specific period of time,
or repeat tests until a particular stop time is reached. If repetition is controlled by
- means of time, it is also possible to specify what action Common Test should
- take upon timeout. Either Common Test performs all tests in the current run before stopping,
- or it stops as soon as the current test job is finished. Repetition can be activated by
- means of <c>ct_run</c> start flags, or tuples in the <c>ct:run:test/1</c>
- option list argument. The flags (options in parenthesis) are:</p>
- <list>
- <item><c>-repeat N ({repeat,N})</c>, where <c>N</c> is a positive integer.</item>
- <item><c>-duration DurTime ({duration,DurTime})</c>, where <c>DurTime</c> is the duration, see below.</item>
- <item><c>-until StopTime ({until,StopTime})</c>, where <c>StopTime</c> is finish time, see below.</item>
+ time, an action for <c>Common Test</c> to take upon time-out can be specified.
+ Either <c>Common Test</c> performs all tests in the current run
+ before stopping, or it stops when the current test job is finished. Repetition
+ can be activated by <c>ct_run</c> start flags, or tuples in the <c>ct:run:test/1</c>
+ option list argument. The flags (options in parentheses) are the following:</p>
+ <list type="bulleted">
+ <item><c>-repeat N ({repeat,N})</c>, where <c>N</c> is a positive integer</item>
+ <item><c>-duration DurTime ({duration,DurTime})</c>, where <c>DurTime</c> is the duration</item>
+ <item><c>-until StopTime ({until,StopTime})</c>, where <c>StopTime</c> is finish time</item>
<item><c>-force_stop ({force_stop,true})</c></item>
<item><c>-force_stop skip_rest ({force_stop,skip_rest})</c></item>
</list>
- <p>The duration time, <c>DurTime</c>, is specified as <c>HHMMSS</c>. Example:
- <c>-duration 012030</c> or <c>{duration,"012030"}</c>, means the tests will
- be executed and (if time allows) repeated, until timeout occurs after 1 h, 20 min
- and 30 secs.
- <c>StopTime</c> can be specified as <c>HHMMSS</c> and is then interpreted as a time today
- (or possibly tomorrow). <c>StopTime</c> can also be specified as <c>YYMoMoDDHHMMSS</c>.
- Example: <c>-until 071001120000</c> or <c>{until,"071001120000"}</c>, which means the tests
- will be executed and (if time allows) repeated, until 12 o'clock on the 1st of Oct 2007.</p>
-
- <p>When timeout occurs, Common Test will never abort the ongoing test case, since
- this might leave the system under test in an undefined, and possibly bad, state.
- Instead Common Test will by default finish the current test
- run before stopping. If the <c>force_stop</c> flag is
- given, Common Test will stop as soon as the current test job
- is finished, and if the <c>force_stop</c> flag is given with
- <c>skip_rest</c> Common Test will only complete the current
- test case and skip the rest of the tests in the test job.
- Note that since Common Test always finishes off at least the
- current test case,
- the time specified with <c>duration</c> or <c>until</c> is never definitive!</p>
-
- <p>Log files from every single repeated test run is saved in normal Common Test fashion (see above).
- Common Test may later support an optional feature to only store the last (and possibly
- the first) set of logs of repeated test runs, but for now the user must be careful not
- to run out of disk space if tests are repeated during long periods of time.</p>
-
- <p>Note that for each test run that is part of a repeated session, information about the
- particular test run is printed in the Common Test Framework Log. There you can read
- the repetition number, remaining time, etc.</p>
-
- <p>Example 1:</p>
+ <taglist>
+ <tag><c>DurTime</c></tag>
+ <item><p>The duration time is specified as <c>HHMMSS</c>, for example, <c>-duration 012030</c>
+ or <c>{duration,"012030"}</c></p>, which means that the tests are executed and
+ (if time allows) repeated until time-out occurs after 1 hour, 20 minutes, and 30 seconds.
+ </item>
+ <tag><c>StopTime</c></tag>
+ <item><p>The finish time can be specified as <c>HHMMSS</c> and is then interpreted as a
+ time today (or possibly tomorrow), but can also be specified as <c>YYMoMoDDHHMMSS</c>,
+ for example, <c>-until 071001120000</c> or <c>{until,"071001120000"}</c>. This means
+ that the tests are executed and (if time allows) repeated, until 12 o'clock on the 1st
+ of October 2007.</p>
+ </item>
+ </taglist>
+
+ <p>When time-out occurs, <c>Common Test</c> never aborts the ongoing test case,
+ as this can leave the SUT in an undefined, and possibly bad, state.
+ Instead <c>Common Test</c>, by default, finishes the current test
+ run before stopping. If flag <c>force_stop</c> is
+ specified, <c>Common Test</c> stops when the current test job
+ is finished. If flag <c>force_stop</c> is specified with
+ <c>skip_rest</c>, <c>Common Test</c> only completes the current
+ test case and skips the remaining tests in the test job.</p>
+ <note><p>As <c>Common Test</c> always finishes at least the current test case,
+ the time specified with <c>duration</c> or <c>until</c> is never definitive.</p></note>
+
+ <p>Log files from every repeated test run is saved in normal <c>Common Test</c>
+ fashion (described earlier).</p>
+ <p><c>Common Test</c> might later support an optional feature to only store the last (and possibly
+ the first) set of logs of repeated test runs, but for now the user must be careful not
+ to run out of disk space if tests are repeated during long periods of time.</p>
+
+ <p>For each test run that is part of a repeated session, information about the
+ particular test run is printed in the <c>Common Test</c> Framework Log. The information
+ includes the repetition number, remaining time, and so on.</p>
+
+ <p><em>Example 1:</em></p>
<pre>
- $ ct_run -dir $TEST_ROOT/to1 $TEST_ROOT/to2 -duration 001000 -force_stop</pre>
- <p>Here the suites in test directory to1, followed by the suites in to2, will be executed
- in one test run. A timeout event will occur after 10 minutes. As long as there is time
- left, Common Test will repeat the test run (i.e. starting over with the to1 test).
- When the timeout occurs, Common Test will stop as soon as the current job is finished
- (because of the <c>force_stop</c> flag). As a result, the specified test run might be
- aborted after the to1 test and before the to2 test.</p>
-
- <p>Example 2:</p>
+ $ ct_run -dir $TEST_ROOT/to1 $TEST_ROOT/to2 -duration 001000 -force_stop</pre>
+
+ <p>Here, the suites in test directory <c>to1</c>, followed by the suites in <c>to2</c>, are
+ executed in one test run. A time-out event occurs after 10 minutes. As long as there is
+ time left, <c>Common Test</c> repeats the test run (that is, starting over with test <c>to1</c>).
+ After time-out, <c>Common Test</c> stops when the current job is finished
+ (because of flag <c>force_stop</c>). As a result, the specified test run can be
+ aborted after test <c>to1</c> and before test <c>to2</c>.</p>
+
+ <p><em>Example 2:</em></p>
<pre>
- $ ct_run -dir $TEST_ROOT/to1 $TEST_ROOT/to2 -duration 001000 -forces_stop skip_rest</pre>
- <p>Here the same test run as in Example 1, but with the
- <c>force_stop</c> flag set to <c>skip_rest</c>. If the timeout
- occurs while executing tests in directory to1, the rest of the
- test cases in to1 will be skipped and then the test will be
- aborted without running the tests in to2 another time. If the
- timeout occurs while executing tests in directory to2, then the
- rest of the test cases in to2 will be skipped and then the test
- will be aborted.</p>
-
- <p>Example 3:</p>
+ $ ct_run -dir $TEST_ROOT/to1 $TEST_ROOT/to2 -duration 001000 -forces_stop skip_rest</pre>
+
+ <p>Here, the same tests as in Example 1 are run, but with flag <c>force_stop</c> set to
+ <c>skip_rest</c>. If time-out occurs while executing tests in directory <c>to1</c>,
+ the remaining test cases in <c>to1</c> are skipped and the test is aborted without
+ running the tests in <c>to2</c> another time. If time-out occurs while executing
+ tests in directory <c>to2</c>, the remaining test cases in <c>to2</c> are skipped and
+ the test is aborted.</p>
+
+ <p><em>Example 3:</em></p>
<pre>
- $ date
- Fri Sep 28 15:00:00 MEST 2007
-
- $ ct_run -dir $TEST_ROOT/to1 $TEST_ROOT/to2 -until 160000</pre>
- <p>Here the same test run as in the example above will be executed (and possibly repeated).
- In this example, however, the timeout will occur after 1 hour and when that happens,
- Common Test will finish the entire test run before stopping (i.e. the to1 and to2 test
- will always both be executed in the same test run).</p>
+ $ date
+ Fri Sep 28 15:00:00 MEST 2007
+
+ $ ct_run -dir $TEST_ROOT/to1 $TEST_ROOT/to2 -until 160000</pre>
+
+ <p>Here, the same test run as in the previous examples are executed (and possibly repeated).
+ However, when the time-out occurs, after 1 hour, <c>Common Test</c> finishes the entire
+ test run before stopping (that is, both <c>to1</c> and <c>to2</c> are always executed in
+ the same test run).</p>
- <p>Example 4:</p>
+ <p><em>Example 4:</em></p>
<pre>
- $ ct_run -dir $TEST_ROOT/to1 $TEST_ROOT/to2 -repeat 5</pre>
- <p>Here the test run, including both the to1 and the to2 test, will be repeated 5 times.</p>
+ $ ct_run -dir $TEST_ROOT/to1 $TEST_ROOT/to2 -repeat 5</pre>
+
+ <p>Here, the test run, including both the <c>to1</c> and the <c>to2</c> test, is repeated
+ five times.</p>
- <note><p>This feature should not be confused with the <c>repeat</c> property of a test
+ <note><p>Do not confuse this feature with the <c>repeat</c> property of a test
case group. The options described here are used to repeat execution of entire test runs,
while the <c>repeat</c> property of a test case group makes it possible to repeat
execution of sets of test cases within a suite. For more information about the latter,
- see the <seealso marker="write_test_chapter#test_case_groups">Writing Test Suites</seealso>
- chapter.</p></note>
+ see section <seealso marker="write_test_chapter#test_case_groups">Test Case Groups </seealso>
+ in section Writing Test Suites.</p></note>
</section>
<section>
<marker id="silent_connections"></marker>
<title>Silent Connections</title>
- <p>The protocol handling processes in Common Test, implemented by ct_telnet,
- ct_ssh, ct_ftp etc, do verbose printing to the test case logs. This can be switched off
- by means of the <c>-silent_connections</c> flag:</p>
+ <p>The protocol handling processes in <c>Common Test</c>, implemented by <c>ct_telnet</c>,
+ <c>ct_ssh</c>, <c>ct_ftp</c>, and so on, do verbose printing to the test case logs.
+ This can be switched off with flag <c>-silent_connections</c>:</p>
<pre>
- ct_run -silent_connections [conn_types]
- </pre>
+ ct_run -silent_connections [conn_types]</pre>
- <p>where <c>conn_types</c> specifies <c>ssh, telnet, ftp, rpc</c> and/or <c>snmp</c>.</p>
+ <p>Here, <c>conn_types</c> specifies SSH, Telnet, FTP, RPC, and/or SNMP.</p>
- <p>Example:</p>
+ <p><em>Example 1:</em></p>
<pre>
- ct_run ... -silent_connections ssh telnet</pre>
- <p>switches off logging for ssh and telnet connections.</p>
+ ct_run ... -silent_connections ssh telnet</pre>
+ <p>This switches off logging for SSH and Telnet connections.</p>
+
+ <p><em>Example 2:</em></p>
<pre>
- ct_run ... -silent_connections</pre>
- <p>switches off logging for all connection types.</p>
+ ct_run ... -silent_connections</pre>
+ <p>This switches off logging for all connection types.</p>
- <p>Fatal communication error and reconnection attempts will always be printed even
- if logging has been suppressed for the connection type in question. However, operations
- such as sending and receiving data will be performed silently.</p>
+ <p>Fatal communication error and reconnection attempts are always printed, even if
+ logging has been suppressed for the connection type in question. However, operations
+ such as sending and receiving data are performed silently.</p>
- <p>It is possible to also specify <c>silent_connections</c> in a test suite. This is
+ <p><c>silent_connections</c> can also be specified in a test suite. This is
accomplished by returning a tuple, <c>{silent_connections,ConnTypes}</c>, in the
- <c>suite/0</c> or test case info list. If <c>ConnTypes</c> is a list of atoms
- (<c>ssh, telnet, ftp, rpc</c> and/or <c>snmp</c>), output for any corresponding connections
- will be suppressed. Full logging is per default enabled for any connection of type not
+ <c>suite/0</c> or test case information list. If <c>ConnTypes</c> is a list of atoms
+ (SSH, Telnet, FTP, RPC and/or SNMP), output for any corresponding connections
+ are suppressed. Full logging is by default enabled for any connection of type not
specified in <c>ConnTypes</c>. Hence, if <c>ConnTypes</c> is the empty list, logging
is enabled for all connections.</p>
- <p>Example:</p>
+ <p><em>Example 3:</em></p>
<pre>
-
- -module(my_SUITE).
+ -module(my_SUITE).
- suite() -> [..., {silent_connections,[telnet,ssh]}, ...].
+ suite() -> [..., {silent_connections,[telnet,ssh]}, ...].
- ...
+ ...
- my_testcase1() ->
- [{silent_connections,[ssh]}].
+ my_testcase1() ->
+ [{silent_connections,[ssh]}].
- my_testcase1(_) ->
- ...
+ my_testcase1(_) ->
+ ...
- my_testcase2(_) ->
- ...
- </pre>
+ my_testcase2(_) ->
+ ...</pre>
- <p>In this example, <c>suite/0</c> tells Common Test to suppress
- printouts from telnet and ssh connections. This is valid for
+ <p>In this example, <c>suite/0</c> tells <c>Common Test</c> to suppress
+ printouts from Telnet and SSH connections. This is valid for
all test cases. However, <c>my_testcase1/0</c> specifies that
- for this test case, only ssh should be silent. The result is
- that <c>my_testcase1</c> will get telnet info (if any) printed
- in the log, but not ssh info. <c>my_testcase2</c> will get no
- info from either connection printed.</p>
+ for this test case, only SSH is to be silent. The result is
+ that <c>my_testcase1</c> gets Telnet information (if any) printed
+ in the log, but not SSH information. <c>my_testcase2</c> gets no
+ information from either connection printed.</p>
- <p><c>silent_connections</c> may also be specified with a term
+ <p><c>silent_connections</c> can also be specified with a term
in a test specification
- (see <seealso marker="run_test_chapter#test_specifications">Test
- Specifications</seealso>). Connections provided with the
- <c>silent_connections</c> start flag/option, will be merged with
- any connections listed in the test specification.</p>
+ (see section <seealso marker="run_test_chapter#test_specifications">Test
+ Specifications</seealso> in section Running Tests and Analyzing Results).
+ Connections provided with start flag/option <c>silent_connections</c>
+ are merged with any connections listed in the test specification.</p>
- <p>The <c>silent_connections</c> start flag/option and test
- specification term, overrides any settings made by the info functions
+ <p>Start flag/option <c>silent_connections</c> and the test
+ specification term override any settings made by the information functions
inside the test suite.</p>
- <note><p>Note that in the current Common Test version, the
- <c>silent_connections</c> feature only works for telnet
- and ssh connections! Support for other connection types will be added
- in future Common Test versions.</p></note>
+ <note><p>In the current <c>Common Test</c> version, the
+ <c>silent_connections</c> feature only works for Telnet
+ and SSH connections. Support for other connection types can be added
+ in future <c>Common Test</c> versions.</p></note>
</section>
</chapter>
diff --git a/lib/common_test/doc/src/test_structure_chapter.xml b/lib/common_test/doc/src/test_structure_chapter.xml
index d5b92b163f..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>
@@ -31,167 +31,167 @@
</header>
<section>
- <title>Test structure</title>
+ <title>General</title>
<p>A test is performed by running one or more test suites. A test suite
- consists of test cases (as well as configuration functions and info
- functions). Test cases may be grouped in so called test case groups.
+ consists of test cases, configuration functions, and information
+ functions. Test cases can be grouped in so called test case groups.
A test suite is an Erlang module and test cases are implemented as
Erlang functions. Test suites are stored in test directories.</p>
</section>
<section>
- <title>Skipping test cases</title>
+ <marker id="skipping_test_cases"></marker>
+ <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
+ <p>Certain test cases can be skipped, for example, if you
+ know beforehand that a specific test case fails. The reason can be
+ functionality that is not yet implemented, a bug that is known but
+ not yet fixed, or some functionality that does not work or is not
applicable on a specific platform.</p>
- <p>There are several different ways to state that one or more
- test cases should be skipped:</p>
- <list>
+ <p>Test cases can be skipped in the following ways:</p>
+ <list type="bulleted">
<item>Using <c>skip_suites</c> and <c>skip_cases</c>
terms in
<seealso marker="run_test_chapter#test_specifications">test specifications</seealso>.
</item>
- <item>Returning <c>{skip,Reason}</c> from the
- <c>init_per_testcase/2</c> or <c>init_per_suite/1</c> functions.</item>
+ <item>Returning <c>{skip,Reason}</c> from function
+ <seealso marker="common_test#Module:init_per_testcase-2"><c>init_per_testcase/2</c></seealso> or
+ <seealso marker="common_test#Module:init_per_suite-1"><c>init_per_suite/1</c></seealso>.</item>
<item>Returning <c>{skip,Reason}</c> from the execution clause
- of the test case.</item>
+ of the test case. The execution clause is called, so the author
+ must ensure that the test case does not run.</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
- does not run.</p>
-
- <p>When a test case is skipped, it will be noted as <c>SKIPPED</c>
+ <p>When a test case is skipped, it is noted as <c>SKIPPED</c>
in the HTML log.</p>
</section>
<section>
- <title>Definition of terms</title>
+ <title>Definition of Terms</title>
<taglist>
- <tag><em>Auto skipped test case</em></tag>
+ <tag><em>Auto-skipped test case</em></tag>
<item>
- When a configuration function fails (i.e. terminates unexpectedly),
- the test cases that depend on the configuration function will be
- skipped automatically by Common Test. The status of the test cases
- is then "auto skipped". Test cases are also auto skipped by
- Common Test if required configuration data is not available at
- runtime.
+ <p>When a configuration function fails (that is, terminates unexpectedly),
+ the test cases depending on the configuration function are
+ skipped automatically by <c>Common Test</c>. The status of the test cases
+ is then "auto-skipped". Test cases are also "auto-skipped" by
+ <c>Common Test</c> if the required configuration data is unavailable at
+ runtime.</p>
</item>
<tag><em>Configuration function</em></tag>
<item>
- A function in a test suite that is meant to be used for
+ <p>A function in a test suite that is meant to be used for
setting up, cleaning up, and/or verifying the state and
- environment on the SUT (System Under Test) and/or the Common Test
+ environment on the System Under Test (SUT) and/or the <c>Common Test</c>
host node, so that a test case (or a set of test cases) can
- execute correctly.
+ execute correctly.</p>
</item>
<tag><em>Configuration file</em></tag>
<item>
- A file that contains data related to a test and/or an SUT
- (System Under Test), e.g. protocol server addresses, client
- login details, hardware interface addresses, etc - any data
- that should be handled as variable in the suite and not
- be hardcoded.
+ <p>A file containing data related to a test and/or an SUT,
+ for example, protocol server addresses, client
+ login details, and hardware interface addresses. That is, any data
+ that is to be handled as variable in the suite and not
+ be hard-coded.</p>
</item>
<tag><em>Configuration variable</em></tag>
<item>
- A name (an Erlang atom) associated with a data value read from
- a configuration file.
+ <p>A name (an Erlang atom) associated with a data value read from
+ a configuration file.</p>
</item>
- <tag><em>data_dir</em></tag>
+ <tag><c>data_dir</c></tag>
<item>
- Data directory for a test suite. This directory contains
- any files used by the test suite, e.g. additional Erlang
- modules, binaries or data files.
+ <p>Data directory for a test suite. This directory contains
+ any files used by the test suite, for example, extra Erlang
+ modules, binaries, or data files.</p>
</item>
- <tag><em>Info function</em></tag>
+ <tag><em>Information function</em></tag>
<item>
- A function in a test suite that returns a list of properties
- (read by the Common Test server) that describes the conditions
- for executing the test cases in the suite.
+ <p>A function in a test suite that returns a list of properties
+ (read by the <c>Common Test</c> server) that describes the conditions
+ for executing the test cases in the suite.</p>
</item>
<tag><em>Major log file</em></tag>
<item>
- An overview and summary log file for one or more test suites.
+ <p>An overview and summary log file for one or more test suites.</p>
</item>
<tag><em>Minor log file</em></tag>
<item>
- A log file for one particular test case. Also called the
- test case log file.
+ <p>A log file for one particular test case. Also called the
+ test case log file.</p>
</item>
- <tag><em>priv_dir</em></tag>
+
+ <tag><c>priv_dir</c></tag>
<item>
- Private directory for a test suite. This directory should
- be used when the test suite needs to write to files.
+ <p>Private directory for a test suite. This directory is to
+ be used when the test suite needs to write to files.</p>
</item>
- <tag><em>ct_run</em></tag>
+ <tag><c>ct_run</c></tag>
<item>
- The name of an executable program that may be
+ <p>The name of an executable program that can be
used as an interface for specifying and running
- tests with Common Test.
+ tests with <c>Common Test</c>.</p>
</item>
<tag><em>Test case</em></tag>
<item>
- A single test included in a test suite. A test case is
- implemented as a function in a test suite module.
+ <p>A single test included in a test suite. A test case is
+ implemented as a function in a test suite module.</p>
</item>
<tag><em>Test case group</em></tag>
<item>
- A set of test cases that share configuration functions and
- execution properties. The execution properties specify whether
- the test cases in the group should be executed in random order,
- in parallel, in sequence, and if the execution of the group
- should be repeated. Test case groups may also be nested (i.e. a
- group may, besides test cases, contain sub-groups).
+ <p>A set of test cases sharing configuration functions and
+ execution properties. The execution properties specify if
+ the test cases in the group are to be executed in random order,
+ in parallel, or in sequence, and if the execution of the group
+ is be repeated. Test case groups can also be nested. That is,
+ a group can, besides test cases, contain subgroups.</p>
</item>
<tag><em>Test suite</em></tag>
<item>
- An erlang module containing a collection of test cases for
- a specific functional area.
+ <p>An Erlang module containing a collection of test cases for
+ a specific functional area.</p>
</item>
<tag><em>Test directory</em></tag>
<item>
- A directory that contains one or more test suite modules, i.e.
- a group of test suites.
+ <p>A directory containing one or more test suite modules,
+ that is, a group of test suites.</p>
</item>
- <tag><em>The Config argument</em></tag>
+ <tag><em>Argument</em> <c>Config</c></tag>
<item>
- A list of key-value tuples (i.e. a property list) containing
+ <p>A list of key-value tuples (that is, a property list) containing
runtime configuration data passed from the configuration
- functions to the test cases.
+ functions to the test cases.</p>
</item>
- <tag><em>User skipped test case</em></tag>
+ <tag><em>User-skipped test case</em></tag>
<item>
- This is the status of a test case that has been explicitly
- skipped in any of the ways described in the "Skipping test cases"
- section above.
+ <p>The status of a test case explicitly skipped in any of
+ the ways described in section
+ <seealso marker="#skipping_test_cases">Skipping Test Cases</seealso>.
+ </p>
</item>
diff --git a/lib/common_test/doc/src/unix_telnet.xml b/lib/common_test/doc/src/unix_telnet.xml
new file mode 100644
index 0000000000..b2314a53ec
--- /dev/null
+++ b/lib/common_test/doc/src/unix_telnet.xml
@@ -0,0 +1,135 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE erlref SYSTEM "erlref.dtd">
+
+<erlref>
+ <header>
+ <copyright>
+ <year>2010</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>unix_telnet</title>
+ <prepared></prepared>
+ <responsible></responsible>
+ <docno></docno>
+ <approved></approved>
+ <checked></checked>
+ <date></date>
+ <rev>A</rev>
+ <file>unix_telnet.xml</file>
+ </header>
+ <module>unix_telnet</module>
+ <modulesummary>Callback module for ct_telnet, for connecting to a Telnet
+ server on a UNIX host.</modulesummary>
+
+ <description>
+
+ <p>Callback module for
+ <seealso marker="ct_telnet"><c>ct_telnet</c></seealso>,
+ for connecting to a Telnet server on a UNIX host.</p>
+
+ <p>It requires the following entry in the configuration file:</p>
+
+ <pre>
+ {unix,[{telnet,HostNameOrIpAddress},
+ {port,PortNum}, % optional
+ {username,UserName},
+ {password,Password},
+ {keep_alive,Bool}]}. % optional</pre>
+
+ <p>To communicate through Telnet to the host specified by
+ <c>HostNameOrIpAddress</c>, use the interface functions in
+ <seealso marker="ct_telnet"><c>ct_telnet</c></seealso>, for example,
+ <c>open(Name)</c> and <c>cmd(Name,Cmd)</c>.</p>
+
+ <p><c>Name</c> is the name you allocated to the Unix host in your
+ <c>require</c> statement, for example:</p>
+
+ <pre>
+ suite() -&gt; [{require,Name,{unix,[telnet]}}].</pre>
+
+ <p>or</p>
+
+ <pre>
+ ct:require(Name,{unix,[telnet]}).</pre>
+
+ <p>The "keep alive" activity (that is, that <c>Common Test</c> sends NOP
+ to the server every 10 seconds if the connection is idle) can be
+ enabled or disabled for one particular connection as described here.
+ It can be disabled for all connections using <c>telnet_settings</c>
+ (see <seealso marker="ct_telnet"><c>ct_telnet</c></seealso>).</p>
+
+ <p>The <c>{port,PortNum}</c> tuple is optional and if omitted, default
+ Telnet port 23 is used. Also the <c>keep_alive</c> tuple is optional,
+ and the value defauls to <c>true</c> (enabled).</p>
+ </description>
+
+ <funcs>
+ <func>
+ <name>connect(ConnName, Ip, Port, Timeout, KeepAlive, TCPNoDelay, Extra) -&gt; {ok, Handle} | {error, Reason}</name>
+ <fsummary>Callback for ct_telnet.erl.</fsummary>
+ <type>
+ <v>ConnName = target_name()</v>
+ <v>Ip = string() | {integer(), integer(), integer(), integer()}</v>
+ <v>Port = integer()</v>
+ <v>Timeout = integer()</v>
+ <v>KeepAlive = bool()</v>
+ <v>TCPNoDelay = bool()</v>
+ <v>Extra = target_name() | {Username, Password}</v>
+ <v>Username = string()</v>
+ <v>Password = string()</v>
+ <v>Handle = handle()</v>
+ <v>Reason = term()</v>
+ </type>
+ <desc><marker id="connect-6"/>
+ <p>Callback for <c>ct_telnet.erl</c>.</p>
+
+ <p>Setup Telnet connection to a Unix host.</p>
+
+ <p>For <c>target_name()</c>, see
+ <seealso marker="ct"><c>ct</c></seealso>. For <c>handle()</c>, see
+ <seealso marker="ct_telnet"><c>ct_telnet</c></seealso>.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name>get_prompt_regexp() -&gt; PromptRegexp</name>
+ <fsummary>Callback for ct_telnet.erl.</fsummary>
+ <type>
+ <v>PromptRegexp = prompt_regexp()</v>
+ </type>
+ <desc><marker id="get_prompt_regexp-0"/>
+ <p>Callback for <c>ct_telnet.erl</c>.</p>
+
+ <p>Returns a suitable <c>regexp</c> string matching common prompts
+ for users on Unix hosts.</p>
+
+ <p>For <c>prompt_regexp()</c>, see
+ <seealso marker="ct_telnet"><c>ct_telnet</c></seealso>.</p>
+ </desc>
+ </func>
+ </funcs>
+
+ <section>
+ <title>See Also</title>
+ <p><seealso marker="ct"><c>ct</c></seealso>,
+ <seealso marker="ct_telnet"><c>ct_telnet</c></seealso></p>
+ </section>
+
+</erlref>
+
+
diff --git a/lib/common_test/doc/src/why_test_chapter.xml b/lib/common_test/doc/src/why_test_chapter.xml
index 15eb1aaed4..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>
@@ -22,7 +22,7 @@
</legalnotice>
- <title>Some thoughts about testing</title>
+ <title>Some Thoughts about Testing</title>
<prepared>Siri Hansen</prepared>
<docno></docno>
<date></date>
@@ -34,54 +34,53 @@
<section>
<title>Goals</title>
- <p>It's not possible to prove that a program is correct by
+ <p>It is 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
+ program proofs or plain examination of code can be viable options
+ for those wishing 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>
+ bug. If a test suite results in OK, then we know very little that
+ we did not know before.</p>
</section>
<section>
- <title>What to test?</title>
+ <title>What to Test</title>
<p>
There are many kinds of test suites. Some concentrate on
calling every function or command (in the documented way) in
a certain interface.
- Some other do the same, but uses all kinds of illegal
- parameters, and verifies that the server stays alive and rejects
+ Some others do the same, but use all kinds of illegal
+ parameters, and verify 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
+ an application), some try to do tricky requests in general, and some
test suites even test internal functions with help of special
- load-modules on target.</p>
+ Load Modules on target.</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>Another interesting category of test suites is the one
+ checking that fixed bugs do not reoccur. When a bugfix is introduced,
+ a test case that checks for that specific bug is written
+ and submitted to the affected test suites.</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 on the critical parts. Bugs in critical subsystems are much
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
+ suites are to be long lived. Implementation details often 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>
+ must be tested, try to factor them out into separate test
+ cases. These test cases can later be rewritten or 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
+ <p>Also, aim for testing everything once, no less, no more. It is
+ not effective having every test case fail only because one
function in the interface changed.</p>
</section>
diff --git a/lib/common_test/doc/src/write_test_chapter.xml b/lib/common_test/doc/src/write_test_chapter.xml
index 1f5650651f..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>
@@ -32,84 +32,88 @@
<section>
<marker id="intro"></marker>
- <title>Support for test suite authors</title>
+ <title>Support for Test Suite Authors</title>
- <p>The <c>ct</c> module provides the main interface for writing
- test cases. This includes e.g:</p>
+ <p>The <seealso marker="ct"><c>ct</c></seealso> module provides the main
+ interface for writing test cases. This includes for example, the following:</p>
- <list>
+ <list type="bulleted">
<item>Functions for printing and logging</item>
<item>Functions for reading configuration data</item>
<item>Function for terminating a test case with error reason</item>
<item>Function for adding comments to the HTML overview page</item>
</list>
- <p>Please see the reference manual for the <c>ct</c>
- module for details about these functions.</p>
+ <p>For details about these functions, see module <seealso marker="ct"><c>ct</c></seealso>.</p>
- <p>The CT application also includes other modules named
- <c><![CDATA[ct_<component>]]></c> that
+ <p>The <c>Common Test</c> application also includes other modules named
+ <c><![CDATA[ct_<component>]]></c>, which
provide various support, mainly simplified use of communication
- protocols such as rpc, snmp, ftp, telnet, etc.</p>
+ protocols such as RPC, SNMP, FTP, Telnet, and others.</p>
</section>
<section>
- <title>Test suites</title>
+ <title>Test Suites</title>
<p>A test suite is an ordinary Erlang module that contains test
cases. It is recommended that the module has a name on the form
<c>*_SUITE.erl</c>. Otherwise, the directory and auto compilation
- function in CT will not be able to locate it (at least not per default).
+ function in <c>Common Test</c> cannot locate it (at least not by default).
</p>
<p>It is also recommended that the <c>ct.hrl</c> header file is included
in all test suite modules.
</p>
- <p>Each test suite module must export the function <c>all/0</c>
+ <p>Each test suite module must export function
+ <seealso marker="common_test#Module:all-0"><c>all/0</c></seealso>,
which returns the list of all test case groups and test cases
to be executed in that module.
</p>
- <p>The callback functions that the test suite should implement, and
- which will be described in more detail below, are
- all listed in the <seealso marker="common_test">common_test
- reference manual page</seealso>.
+ <p>The callback functions to be implemented by the test suite are
+ all listed in module <seealso marker="common_test">common_test
+ </seealso>. They are also described in more detail later in this User's Guide.
</p>
</section>
<section>
- <title>Init and end per suite</title>
+ <title>Init and End per Suite</title>
- <p>Each test suite module may contain the optional configuration functions
- <c>init_per_suite/1</c> and <c>end_per_suite/1</c>. If the init function
- is defined, so must the end function be.
+ <p>Each test suite module can contain the optional configuration functions
+ <seealso marker="common_test#Module:init_per_suite-1"><c>init_per_suite/1</c></seealso>
+ and <seealso marker="common_test#Module:end_per_suite-1"><c>end_per_suite/1</c></seealso>.
+ If the init function is defined, so must the end function be.
</p>
- <p>If it exists, <c>init_per_suite</c> is called initially before the
- test cases are executed. It typically contains initializations that are
- common for all test cases in the suite, and that are only to be
- performed once. It is recommended to be used for setting up and
- verifying state and environment on the SUT (System Under Test) and/or
- the CT host node, so that the test cases in the suite will execute
- correctly. Examples of initial configuration operations: Opening a connection
- to the SUT, initializing a database, running an installation script, etc.
+ <p>If <c>init_per_suite</c> exists, it is called initially before the
+ test cases are executed. It typically contains initializations common
+ for all test cases in the suite, which are only to be performed once.
+ <c>init_per_suite</c> is recommended for setting up and verifying state
+ and environment on the System Under Test (SUT) or the <c>Common Test</c>
+ host node, or both, so that the test cases in the suite executes correctly.
+ The following are examples of initial configuration operations:
</p>
+ <list type="bulleted">
+ <item>Opening a connection to the SUT</item>
+ <item>Initializing a database</item>
+ <item>Running an installation script</item>
+ </list>
<p><c>end_per_suite</c> is called as the final stage of the test suite execution
(after the last test case has finished). The function is meant to be used
for cleaning up after <c>init_per_suite</c>.
</p>
- <p><c>init_per_suite</c> and <c>end_per_suite</c> will execute on dedicated
+ <p><c>init_per_suite</c> and <c>end_per_suite</c> execute on dedicated
Erlang processes, just like the test cases do. The result of these functions
- is however not included in the test run statistics of successful, failed and
+ is however not included in the test run statistics of successful, failed, and
skipped cases.
</p>
- <p>The argument to <c>init_per_suite</c> is <c>Config</c>, the
+ <p>The argument to <c>init_per_suite</c> is <c>Config</c>, that is, the
same key-value list of runtime configuration data that each test case takes
as input argument. <c>init_per_suite</c> can modify this parameter with
information that the test cases need. The possibly modified <c>Config</c>
@@ -117,671 +121,683 @@
</p>
<p>If <c>init_per_suite</c> fails, all test cases in the test
- suite will be skipped automatically (so called <em>auto skipped</em>),
+ suite are skipped automatically (so called <em>auto skipped</em>),
including <c>end_per_suite</c>.
</p>
- <p>Note that if <c>init_per_suite</c> and <c>end_per_suite</c> do not exist
- in the suite, Common Test calls dummy functions (with the same names)
- instead, so that output generated by hook functions may be saved to the log
- files for these dummies
- (see the <seealso marker="ct_hooks_chapter#manipulating">Common Test Hooks</seealso>
- chapter for more information).
+ <p>Notice that if <c>init_per_suite</c> and <c>end_per_suite</c> do not exist
+ in the suite, <c>Common Test</c> calls dummy functions (with the same names)
+ instead, so that output generated by hook functions can be saved to the log
+ files for these dummies. For details, see
+ <seealso marker="ct_hooks_chapter#manipulating">Common Test Hooks</seealso>.
</p>
</section>
<section>
<marker id="per_testcase"/>
- <title>Init and end per test case</title>
+ <title>Init and End per Test Case</title>
<p>Each test suite module can contain the optional configuration functions
- <c>init_per_testcase/2</c> and <c>end_per_testcase/2</c>. If the init function
- is defined, so must the end function be.</p>
+ <seealso marker="common_test#Module:init_per_testcase-2"><c>init_per_testcase/2</c></seealso>
+ and <seealso marker="common_test#Module:end_per_testcase-2"><c>end_per_testcase/2</c></seealso>.
+ If the init function is defined, so must the end function be.</p>
- <p>If it exists, <c>init_per_testcase</c> is called before each
- test case in the suite. It typically contains initialization which
- must be done for each test case (analogue to <c>init_per_suite</c> for the
+ <p>If <c>init_per_testcase</c> exists, it is called before each
+ test case in the suite. It typically contains initialization that
+ must be done for each test case (analog to <c>init_per_suite</c> for the
suite).</p>
<p><c>end_per_testcase/2</c> is called after each test case has
- finished, giving the opportunity to perform clean-up after
- <c>init_per_testcase</c>.</p>
+ finished, enabling cleanup after <c>init_per_testcase</c>.</p>
<p>The first argument to these functions is the name of the test
case. This value can be used with pattern matching in function clauses
or conditional expressions to choose different initialization and cleanup
- routines for different test cases, or perform the same routine for a number of,
+ routines for different test cases, or perform the same routine for many,
or all, test cases.</p>
<p>The second argument is the <c>Config</c> key-value list of runtime
configuration data, which has the same value as the list returned by
- <c>init_per_suite</c>. <c>init_per_testcase/2</c> may modify this
- parameter or return it as is. The return value of <c>init_per_testcase/2</c>
- is passed as the <c>Config</c> parameter to the test case itself.</p>
+ <c>init_per_suite</c>. <c>init_per_testcase/2</c> can modify this
+ parameter or return it "as is". The return value of <c>init_per_testcase/2</c>
+ is passed as parameter <c>Config</c> to the test case itself.</p>
<p>The return value of <c>end_per_testcase/2</c> is ignored by the
test server, with exception of the
- <seealso marker="dependencies_chapter#save_config">save_config</seealso>
+ <seealso marker="dependencies_chapter#save_config"><c>save_config</c></seealso>
and <c>fail</c> tuple.</p>
- <p>It is possible in <c>end_per_testcase</c> to check if the
- test case was successful or not (which consequently may determine
- how cleanup should be performed). This is done by reading the value
- tagged with <c>tc_status</c> from <c>Config</c>. The value is either
- <c>ok</c>, <c>{failed,Reason}</c> (where <c>Reason</c> is <c>timetrap_timeout</c>,
- info from <c>exit/1</c>, or details of a run-time error), or
- <c>{skipped,Reason}</c> (where Reason is a user specific term).
+ <p><c>end_per_testcase</c> can check if the test case was successful.
+ (which in turn can determine how cleanup is to be performed).
+ This is done by reading the value tagged with <c>tc_status</c> from
+ <c>Config</c>. The value is one of the following:
</p>
-
- <p>The <c>end_per_testcase/2</c> function is called even after a
- test case terminates due to a call to <seealso marker="ct#abort_current_testcase-1"><c>ct:abort_current_testcase/1</c></seealso>,
- or after a timetrap timeout. However, <c>end_per_testcase</c>
- will then execute on a different process than the test case
- function, and in this situation, <c>end_per_testcase</c> will
- not be able to change the reason for test case termination by
- returning <c>{fail,Reason}</c>, nor will it be able to save data with
- <c>{save_config,Data}</c>.</p>
-
- <p>If <c>init_per_testcase</c> crashes, the test case itself gets skipped
- automatically (so called <em>auto skipped</em>). If <c>init_per_testcase</c>
- returns a tuple <c>{skip,Reason}</c>, also then the test case gets skipped
- (so called <em>user skipped</em>). It is also possible, by returning a tuple
- <c>{fail,Reason}</c> from <c>init_per_testcase</c>, to mark the test case
- as failed without actually executing it.
+ <list type="bulleted">
+ <item>
+ <p><c>ok</c></p>
+ </item>
+ <item>
+ <p><c>{failed,Reason}</c></p>
+ <p>where <c>Reason</c> is <c>timetrap_timeout</c>, information from <c>exit/1</c>,
+ or details of a runtime error</p></item>
+ <item>
+ <p><c>{skipped,Reason}</c></p>
+ <p>where <c>Reason</c> is a user-specific term</p></item>
+ </list>
+
+ <p>Function <c>end_per_testcase/2</c> is even called if a
+ test case terminates because of a call to
+ <seealso marker="ct#abort_current_testcase-1"><c>ct:abort_current_testcase/1</c></seealso>,
+ or after a timetrap time-out. However, <c>end_per_testcase</c>
+ then executes on a different process than the test case
+ function. In this situation, <c>end_per_testcase</c> cannot
+ change the reason for test case termination by returning <c>{fail,Reason}</c>
+ or save data with <c>{save_config,Data}</c>.</p>
+
+ <p>The test case is skipped in the following two cases:
</p>
+ <list type="bulleted">
+ <item>If <c>init_per_testcase</c> crashes (called <em>auto skipped</em>).</item>
+ <item>If <c>init_per_testcase</c> returns a tuple <c>{skip,Reason}</c>
+ (called <em>user skipped</em>).</item>
+ </list>
+ <p>The test case can also be marked as failed without executing it
+ by returning a tuple <c>{fail,Reason}</c> from <c>init_per_testcase</c>.</p>
+
<note><p>If <c>init_per_testcase</c> crashes, or returns <c>{skip,Reason}</c>
- or <c>{fail,Reason}</c>, the <c>end_per_testcase</c> function is not called.
+ or <c>{fail,Reason}</c>, function <c>end_per_testcase</c> is not called.
</p></note>
<p>If it is determined during execution of <c>end_per_testcase</c> that
- the status of a successful test case should be changed to failed,
- <c>end_per_testcase</c> may return the tuple: <c>{fail,Reason}</c>
+ the status of a successful test case is to be changed to failed,
+ <c>end_per_testcase</c> can return the tuple <c>{fail,Reason}</c>
(where <c>Reason</c> describes why the test case fails).</p>
- <p><c>init_per_testcase</c> and <c>end_per_testcase</c> execute on the
- same Erlang process as the test case and printouts from these
- configuration functions can be found in the test case log file.</p>
+ <p>As <c>init_per_testcase</c> and <c>end_per_testcase</c> execute on the
+ same Erlang process as the test case, printouts from these
+ configuration functions are included in the test case log file.</p>
</section>
<section>
<marker id="test_cases"></marker>
- <title>Test cases</title>
+ <title>Test Cases</title>
<p>The smallest unit that the test server is concerned with is a
- test case. Each test case can actually test many things, for
- example make several calls to the same interface function with
+ test case. Each test case can test many things, for
+ example, make several calls to the same interface function with
different parameters.
</p>
- <p>It is possible to choose to put many or few tests into each test
- case. What exactly each test case does is of course up to the
- author, but here are some things to keep in mind:
+ <p>The author can choose to put many or few tests into each test
+ case. Some things to keep in mind follows:
</p>
-
- <p>Having many small test cases tend to result in extra, and possibly
+ <list type="bulleted">
+ <item><p>Many small test cases tend to result in extra, and possibly
duplicated code, as well as slow test execution because of
- large overhead for initializations and cleanups. Duplicated
- code should be avoided, e.g. by means of common help functions, or
- the resulting suite will be difficult to read and understand, and
+ large overhead for initializations and cleanups. Avoid duplicated
+ code, for example, by using common help functions. Otherwise,
+ the resulting suite becomes difficult to read and understand, and
expensive to maintain.
- </p>
-
- <p>Larger test cases make it harder to tell what went wrong if it
- fails, and large portions of test code will potentially be skipped
- when errors occur. Furthermore, readability and maintainability suffers
- when test cases become too large and extensive. Also, the resulting log
- files may not reflect very well the number of tests that have
- actually been performed.
- </p>
+ </p></item>
+ <item><p>Larger test cases make it harder to tell what went wrong if it
+ fails. Also, large portions of test code risk being skipped
+ when errors occur.</p>
+ </item>
+ <item><p>Readability and maintainability suffer
+ when test cases become too large and extensive. It is not certain
+ that the resulting log files reflect very well the number of tests
+ performed.
+ </p></item>
+ </list>
<p>The test case function takes one argument, <c>Config</c>, which
contains configuration information such as <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).
- The value of <c>Config</c> at the time of the call, is the same
- as the return value from <c>init_per_testcase</c>, see above.
+ <c>priv_dir</c>. (For details about these, see section
+ <seealso marker="#data_priv_dir">Data and Private Directories</seealso>.
+ The value of <c>Config</c> at the time of the call, is the same
+ as the return value from <c>init_per_testcase</c>, mentioned earlier.
</p>
- <note><p>The test case function argument <c>Config</c> should not be
- confused with the information that can be retrieved from
+ <note><p>The test case function argument <c>Config</c> is not to be
+ confused with the information that can be retrieved from the
configuration files (using <seealso marker="ct#get_config-1"><c>
- ct:get_config/1/2</c></seealso>). The Config argument
- should be used for runtime configuration of the test suite and the
- test cases, while configuration files should typically contain data
+ ct:get_config/1/2</c></seealso>). The test case argument <c>Config</c>
+ is to be used for runtime configuration of the test suite and the
+ test cases, while configuration files are to contain data
related to the SUT. These two types of configuration data are handled
- differently!</p></note>
+ differently.</p></note>
- <p>Since the <c>Config</c> parameter is a list of key-value tuples, i.e.
- a data type generally called a property list, it can be handled by means of the
- <c>proplists</c> module in the OTP <c>stdlib</c>. A value can for example
- be searched for and returned with the <c>proplists:get_value/2</c> function.
- Also, or alternatively, you might want to look in the general <c>lists</c> module,
- also in <c>stdlib</c>, for useful functions. Normally, the only operations you
- ever perform on <c>Config</c> is insert (adding a tuple to the head of the list)
- and lookup. Common Test provides a simple macro named <c>?config</c>, which returns
- a value of an item in <c>Config</c> given the key (exactly like
+ <p>As parameter <c>Config</c> is a list of key-value tuples, that is,
+ a data type called a property list, it can be handled by the
+ <seealso marker="stdlib:proplists"><c>stdlib:proplists</c></seealso> module.
+ A value can, for example, be searched for and returned with function
+ <seealso marker="stdlib:proplists#get_value-2"><c>proplists:get_value/2</c></seealso>.
+ Also, or alternatively, the general <seealso marker="stdlib:lists"><c>stdlib:lists</c></seealso>
+ module contains useful functions. Normally, the only operations
+ performed on <c>Config</c> is insert (adding a tuple to the head of the list)
+ and lookup. <c>Common Test</c> provides a simple macro named <c>?config</c>,
+ which returns a value of an item in <c>Config</c> given the key (exactly like
<c>proplists:get_value</c>). Example: <c>PrivDir = ?config(priv_dir, Config)</c>.
</p>
<p>If the test case function crashes or exits purposely, it is considered
- <em>failed</em>. If it returns a value (no matter what actual value) it is
+ <em>failed</em>. If it returns a value (no matter what value), it is
considered successful. An exception to this rule is the return value
<c>{skip,Reason}</c>. If this tuple is returned, the test case is considered
- skipped and gets logged as such.</p>
+ skipped and is logged as such.</p>
<p>If the test case returns the tuple <c>{comment,Comment}</c>, the case
- is considered successful and <c>Comment</c> is printed out in the overview
- log file. This is by the way equal to calling <c>ct:comment(Comment)</c>.
+ is considered successful and <c>Comment</c> is printed in the overview
+ log file. This is equal to calling
+ <seealso marker="ct#comment-1"><c>ct:comment(Comment)</c></seealso>.
</p>
</section>
<section>
<marker id="info_function"></marker>
- <title>Test case info function</title>
+ <title>Test Case Information Function</title>
- <p>For each test case function there can be an additional function
- with the same name but with no arguments. This is the test case
- info function. The test case info function is expected to return a
- list of tagged tuples that specifies various properties regarding the
- test case.
+ <p>For each test case function there can be an extra function
+ with the same name but without arguments. This is the test case
+ information function. It is expected to return a list of tagged
+ tuples that specifies various properties regarding the test case.
</p>
<p>The following tags have special meaning:</p>
<taglist>
- <tag><em><c>timetrap</c></em></tag>
+ <tag><c>timetrap</c></tag>
<item>
<p>
- Set the maximum time the test case is allowed to execute. If
- the timetrap time is exceeded, the test case fails with
- reason <c>timetrap_timeout</c>. Note that <c>init_per_testcase</c>
+ Sets the maximum time the test case is allowed to execute. If
+ this time is exceeded, the test case fails with
+ reason <c>timetrap_timeout</c>. Notice that <c>init_per_testcase</c>
and <c>end_per_testcase</c> are included in the timetrap time.
- Please see the <seealso marker="write_test_chapter#timetraps">Timetrap</seealso>
- section for more details.
+ For details, see section
+ <seealso marker="write_test_chapter#timetraps">Timetrap Time-Outs</seealso>.
</p>
</item>
- <tag><em><c>userdata</c></em></tag>
+ <tag><c>userdata</c></tag>
<item>
<p>
- Use this to specify arbitrary data related to the testcase. This
- data can be retrieved at any time using the <seealso marker="ct#userdata-3"><c>ct:userdata/3</c></seealso>
+ Specifies any data related to the test case. This
+ data can be retrieved at any time using the
+ <seealso marker="ct#userdata-3"><c>ct:userdata/3</c></seealso>
utility function.
</p>
</item>
- <tag><em><c>silent_connections</c></em></tag>
+ <tag><c>silent_connections</c></tag>
<item>
<p>
- Please see the
- <seealso marker="run_test_chapter#silent_connections">Silent Connections</seealso>
- chapter for details.
+ For details, see section
+ <seealso marker="run_test_chapter#silent_connections">Silent Connections</seealso>.
</p>
</item>
- <tag><em><c>require</c></em></tag>
+ <tag><c>require</c></tag>
<item>
<p>
- Use this to specify configuration variables that are required by the
+ Specifies configuration variables required by the
test case. If the required configuration variables are not
found in any of the test system configuration files, the test case is
skipped.</p>
<p>
- It is also possible to give a required variable a default value that will
+ A required variable can also be given a default value to
be used if the variable is not found in any configuration file. To specify
- a default value, add a tuple on the form:
- <c>{default_config,ConfigVariableName,Value}</c> to the test case info list
+ a default value, add a tuple on the form
+ <c>{default_config,ConfigVariableName,Value}</c> to the test case information list
(the position in the list is irrelevant).
- Examples:</p>
+ </p>
+ <p><em>Examples:</em></p>
<pre>
- testcase1() ->
- [{require, ftp},
- {default_config, ftp, [{ftp, "my_ftp_host"},
- {username, "aladdin"},
- {password, "sesame"}]}}].</pre>
+ testcase1() ->
+ [{require, ftp},
+ {default_config, ftp, [{ftp, "my_ftp_host"},
+ {username, "aladdin"},
+ {password, "sesame"}]}}].</pre>
<pre>
- testcase2() ->
- [{require, unix_telnet, unix},
- {require, {unix, [telnet, username, password]}},
- {default_config, unix, [{telnet, "my_telnet_host"},
- {username, "aladdin"},
- {password, "sesame"}]}}].</pre>
+ testcase2() ->
+ [{require, unix_telnet, unix},
+ {require, {unix, [telnet, username, password]}},
+ {default_config, unix, [{telnet, "my_telnet_host"},
+ {username, "aladdin"},
+ {password, "sesame"}]}}].</pre>
</item>
</taglist>
- <p>See the <seealso marker="config_file_chapter#require_config_data">Config files</seealso>
- chapter and the <seealso marker="ct#require-1"><c>
- ct:require/1/2</c></seealso> function in the
- <seealso marker="ct">ct</seealso> reference manual for more information about
- <c>require</c>.</p>
+ <p>For more information about <c>require</c>, see section
+ <seealso marker="config_file_chapter#require_config_data">
+ Requiring and Reading Configuration Data</seealso>
+ in section External Configuration Data and function
+ <seealso marker="ct#require-1"><c>ct:require/1/2</c></seealso>.</p>
<note><p>Specifying a default value for a required variable can result
- in a test case always getting executed. This might not be a desired behaviour!</p>
+ in a test case always getting executed. This might not be a desired behavior.</p>
</note>
- <p>If <c>timetrap</c> and/or <c>require</c> is not set specifically for
- a particular test case, default values specified by the <c>suite/0</c>
- function are used.
+ <p>If <c>timetrap</c> or <c>require</c>, or both, is not set specifically for
+ a particular test case, default values specified by function
+ <seealso marker="common_test#Module:suite-0"><c>suite/0</c></seealso>
+ are used.
</p>
- <p>Other tags than the ones mentioned above will simply be ignored by
- the test server.
+ <p>Tags other than the earlier mentioned are ignored by the test server.
</p>
<p>
- Example of a test case info function:
+ An example of a test case information function follows:
</p>
<pre>
- reboot_node() ->
- [
- {timetrap,{seconds,60}},
- {require,interfaces},
- {userdata,
- [{description,"System Upgrade: RpuAddition Normal RebootNode"},
- {fts,"http://someserver.ericsson.se/test_doc4711.pdf"}]}
- ].</pre>
+ reboot_node() ->
+ [
+ {timetrap,{seconds,60}},
+ {require,interfaces},
+ {userdata,
+ [{description,"System Upgrade: RpuAddition Normal RebootNode"},
+ {fts,"http://someserver.ericsson.se/test_doc4711.pdf"}]}
+ ].</pre>
</section>
<section>
<marker id="suite"></marker>
- <title>Test suite info function</title>
-
- <p>The <c>suite/0</c> function can be used in a test suite
- module to e.g. set a default <c>timetrap</c> value and to
- <c>require</c> external configuration data. If a test case-, or
- group info function also specifies any of the info tags, it
- overrides the default values set by <c>suite/0</c>. See the test
- case info function above, and group info function below, for more
- details.
+ <title>Test Suite Information Function</title>
+
+ <p>Function <seealso marker="common_test#Module:suite-0"><c>suite/0</c></seealso>
+ can, for example, be used in a test suite module to set a default
+ <c>timetrap</c> value and to <c>require</c> external configuration data.
+ If a test case, or a group information function also specifies any of the information tags, it
+ overrides the default values set by <c>suite/0</c>. For details,
+ see
+ <seealso marker="#info_function">Test Case Information Function</seealso> and
+ <seealso marker="#test_case_groups">Test Case Groups</seealso>.
</p>
- <p>Other options that may be specified with the suite info list are:</p>
- <list>
+ <p>The following options can also be specified with the suite information list:</p>
+ <list type="bulleted">
<item><c>stylesheet</c>,
- see <seealso marker="run_test_chapter#html_stylesheet">HTML Style Sheets</seealso>.</item>
+ see <seealso marker="run_test_chapter#html_stylesheet">HTML Style Sheets</seealso></item>
<item><c>userdata</c>,
- see <seealso marker="#info_function">Test case info function</seealso>.</item>
+ see <seealso marker="#info_function">Test Case Information Function</seealso></item>
<item><c>silent_connections</c>,
- see <seealso marker="run_test_chapter#silent_connections">Silent Connections</seealso>.</item>
+ see <seealso marker="run_test_chapter#silent_connections">Silent Connections</seealso></item>
</list>
<p>
- Example of the suite info function:
+ An example of the suite information function follows:
</p>
<pre>
- suite() ->
- [
- {timetrap,{minutes,10}},
- {require,global_names},
- {userdata,[{info,"This suite tests database transactions."}]},
- {silent_connections,[telnet]},
- {stylesheet,"db_testing.css"}
- ].</pre>
+ suite() ->
+ [
+ {timetrap,{minutes,10}},
+ {require,global_names},
+ {userdata,[{info,"This suite tests database transactions."}]},
+ {silent_connections,[telnet]},
+ {stylesheet,"db_testing.css"}
+ ].</pre>
</section>
<section>
<marker id="test_case_groups"></marker>
- <title>Test case groups</title>
- <p>A test case group is a set of test cases that share configuration
+ <title>Test Case Groups</title>
+ <p>A test case group is a set of test cases sharing configuration
functions and execution properties. Test case groups are defined by
- means of the <c>groups/0</c> function according to the following syntax:</p>
+ function
+ <seealso marker="common_test#Module:groups-0"><c>groups/0</c></seealso>
+ according to the following syntax:</p>
<pre>
- groups() -> GroupDefs
+ groups() -> GroupDefs
- Types:
+ Types:
- GroupDefs = [GroupDef]
- GroupDef = {GroupName,Properties,GroupsAndTestCases}
- GroupName = atom()
- GroupsAndTestCases = [GroupDef | {group,GroupName} | TestCase]
- TestCase = atom()</pre>
+ GroupDefs = [GroupDef]
+ GroupDef = {GroupName,Properties,GroupsAndTestCases}
+ GroupName = atom()
+ GroupsAndTestCases = [GroupDef | {group,GroupName} | TestCase]
+ TestCase = atom()</pre>
- <p><c>GroupName</c> is the name of the group and should be unique within
- the test suite module. Groups may be nested, and this is accomplished
- simply by including a group definition within the <c>GroupsAndTestCases</c>
- list of another group. <c>Properties</c> is the list of execution
- properties for the group. The possible values are:</p>
+ <p><c>GroupName</c> is the name of the group and must be unique within
+ the test suite module. Groups can be nested, by including a group definition
+ within the <c>GroupsAndTestCases</c> list of another group.
+ <c>Properties</c> is the list of execution
+ properties for the group. The possible values are as follows:</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, Common Test will execute
- all test cases in the group in parallel. If <c>sequence</c> is specified,
- the cases will be executed in a sequence, as described in the chapter
- <seealso marker="dependencies_chapter#sequences">Dependencies between
- test cases and suites</seealso>. If <c>shuffle</c> is specified, the cases
- in the group will be executed in random order. The <c>repeat</c> property
- orders Common Test 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>Example:</p>
+ 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><em>Explanations:</em></p>
+ <taglist>
+ <tag><c>parallel</c></tag>
+ <item><p><c>Common Test</c> executes all test cases in the group in parallel.</p></item>
+ <tag><c>sequence</c></tag>
+ <item><p>The cases are executed in a sequence as described in section
+ <seealso marker="dependencies_chapter#sequences">Sequences</seealso> in section
+ Dependencies Between Test Cases and Suites.</p></item>
+ <tag><c>shuffle</c></tag>
+ <item><p>The cases in the group are executed in random order.</p></item>
+ <tag><c>repeat</c></tag>
+ <item><p>Orders <c>Common Test</c> to repeat execution of the cases in the
+ group a given number of times, or until any, or all, cases fail or succeed.</p></item>
+ </taglist>
+
+ <p><em>Example:</em></p>
<pre>
- groups() -> [{group1, [parallel], [test1a,test1b]},
- {group2, [shuffle,sequence], [test2a,test2b,test2c]}].</pre>
+ groups() -> [{group1, [parallel], [test1a,test1b]},
+ {group2, [shuffle,sequence], [test2a,test2b,test2c]}].</pre>
- <p>To specify in which order groups should be executed (also with respect
- to test cases that are not part of any group), tuples on the form
- <c>{group,GroupName}</c> should be added to the <c>all/0</c> list. Example:</p>
+ <p>To specify in which order groups are to be executed (also with respect
+ to test cases that are not part of any group), add tuples on the form
+ <c>{group,GroupName}</c> to the <c>all/0</c> list.</p>
+ <p><em>Example:</em></p>
<pre>
- all() -> [testcase1, {group,group1}, testcase2, {group,group2}].</pre>
+ all() -> [testcase1, {group,group1}, testcase2, {group,group2}].</pre>
- <p>It is also possible to specify execution properties with a group
- tuple in <c>all/0</c>: <c>{group,GroupName,Properties}</c>. These
- properties will override those specified in the group definition (see
- <c>groups/0</c> above). This way, it's possible to run the same set of tests,
+ <p>Execution properties with a group tuple in
+ <c>all/0</c>: <c>{group,GroupName,Properties}</c> can also be specified.
+ These properties override those specified in the group definition (see
+ <c>groups/0</c> earlier). This way, the same set of tests can be run,
but with different properties, without having to make copies of the group
definition in question.</p>
- <p>If a group contains sub-groups, the execution properties for these may
+ <p>If a group contains subgroups, the execution properties for these can
also be specified in the group tuple:
- <c>{group,GroupName,Properties,SubGroups}</c>, where <c>SubGroups</c>
- is a list of tuples, <c>{GroupName,Properties}</c>, or
- <c>{GroupName,Properties,SubGroups}</c>, representing the sub-groups.
- Any sub-groups defined in <c>group/0</c> for a group, that are not specified
- in the <c>SubGroups</c> list, will simply execute with their pre-defined
+ <c>{group,GroupName,Properties,SubGroups}</c>
+ Where, <c>SubGroups</c> is a list of tuples, <c>{GroupName,Properties}</c> or
+ <c>{GroupName,Properties,SubGroups}</c> representing the subgroups.
+ Any subgroups defined in <c>group/0</c> for a group, that are not specified
+ in the <c>SubGroups</c> list, executes with their predefined
properties.</p>
- <p>Example:</p>
+ <p><em>Example:</em></p>
<pre>
- groups() -> {tests1, [], [{tests2, [], [t2a,t2b]},
- {tests3, [], [t31,t3b]}]}.</pre>
- <p>To execute group 'tests1' twice with different properties for 'tests2'
+ groups() -> {tests1, [], [{tests2, [], [t2a,t2b]},
+ {tests3, [], [t31,t3b]}]}.</pre>
+ <p>To execute group <c>tests1</c> twice with different properties for <c>tests2</c>
each time:</p>
<pre>
- all() ->
- [{group, tests1, default, [{tests2, [parallel]}]},
- {group, tests1, default, [{tests2, [shuffle,{repeat,10}]}]}].</pre>
- <p>Note that this is equivalent to this specification:</p>
+ all() ->
+ [{group, tests1, default, [{tests2, [parallel]}]},
+ {group, tests1, default, [{tests2, [shuffle,{repeat,10}]}]}].</pre>
+ <p>This is equivalent to the following specification:</p>
<pre>
- all() ->
- [{group, tests1, default, [{tests2, [parallel]},
- {tests3, default}]},
- {group, tests1, default, [{tests2, [shuffle,{repeat,10}]},
- {tests3, default}]}].</pre>
- <p>The value <c>default</c> states that the pre-defined properties
- should be used.</p>
- <p>Here's an example of how to override properties in a scenario
+ all() ->
+ [{group, tests1, default, [{tests2, [parallel]},
+ {tests3, default}]},
+ {group, tests1, default, [{tests2, [shuffle,{repeat,10}]},
+ {tests3, default}]}].</pre>
+ <p>Value <c>default</c> states that the predefined properties
+ are to be used.</p>
+ <p>The following example shows how to override properties in a scenario
with deeply nested groups:</p>
<pre>
- groups() ->
- [{tests1, [], [{group, tests2}]},
- {tests2, [], [{group, tests3}]},
- {tests3, [{repeat,2}], [t3a,t3b,t3c]}].
-
- all() ->
- [{group, tests1, default,
- [{tests2, default,
- [{tests3, [parallel,{repeat,100}]}]}]}].</pre>
-
- <p>The syntax described above may also be used in Test Specifications
- in order to change properties of groups at the time of execution,
- without even having to edit the test suite (please see the
- <seealso marker="run_test_chapter#test_specifications">Test
- Specifications</seealso> chapter for more info).</p>
-
- <p>As illustrated above, properties may be combined. If e.g.
- <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
+ groups() ->
+ [{tests1, [], [{group, tests2}]},
+ {tests2, [], [{group, tests3}]},
+ {tests3, [{repeat,2}], [t3a,t3b,t3c]}].
+
+ all() ->
+ [{group, tests1, default,
+ [{tests2, default,
+ [{tests3, [parallel,{repeat,100}]}]}]}].</pre>
+
+ <p>The described syntax can also be used in test specifications
+ to change group properties at the time of execution,
+ without having to edit the test suite. For more information, see
+ section <seealso marker="run_test_chapter#test_specifications">Test
+ Specifications</seealso> in section Running Tests and Analyzing Results.</p>
+
+ <p>As illustrated, properties can be combined. If, for example,
+ <c>shuffle</c>, <c>repeat_until_any_fail</c>, and <c>sequence</c>
+ are all specified, the test cases in the group are executed
repeatedly, and in random order, until a test case fails. Then
- execution is immediately stopped and the rest of the cases skipped.</p>
+ execution is immediately stopped and the remaining cases are skipped.</p>
<p>Before execution of a group begins, the configuration function
- <c>init_per_group(GroupName, Config)</c> is called. The list of tuples
- returned from this function is passed to the test cases in the usual
- manner by means of the <c>Config</c> argument. <c>init_per_group/2</c>
- is meant to be used for initializations common for the test cases in the
- group. After execution of the group is finished, the
- <c>end_per_group(GroupName, Config</c> function is called. This function
- is meant to be used for cleaning up after <c>init_per_group/2</c>.</p>
+ <seealso marker="common_test#Module:init_per_group-2"><c>init_per_group(GroupName, Config)</c></seealso>
+ is called. The list of tuples returned from this function is passed to the
+ test cases in the usual manner by argument <c>Config</c>.
+ <c>init_per_group/2</c> is meant to be used for initializations common
+ for the test cases in the group. After execution of the group is finished, function
+ <seealso marker="common_test#Module:end_per_group-2"><c>end_per_group(GroupName, Config)</c></seealso>
+ is called. This function is meant to be used for cleaning up after
+ <c>init_per_group/2</c>.</p>
<p>Whenever a group is executed, if <c>init_per_group</c> and
- <c>end_per_group</c> do not exist in the suite, Common Test calls
+ <c>end_per_group</c> do not exist in the suite, <c>Common Test</c> calls
dummy functions (with the same names) instead. Output generated by
- hook functions will be saved to the log files for these dummies
- (see the <seealso marker="ct_hooks_chapter#manipulating">Common Test
- Hooks</seealso> chapter for more information).
+ hook functions are saved to the log files for these dummies.
+ For more information, see section
+ <seealso marker="ct_hooks_chapter#manipulating">Manipulating Tests</seealso>
+ in section Common Test Hooks.
</p>
<note><p><c>init_per_testcase/2</c> and <c>end_per_testcase/2</c>
are always called for each individual test case, no matter if the case
belongs to a group or not.</p></note>
- <p>The properties for a group is always printed on the top of the HTML log
- for <c>init_per_group/2</c>. Also, the total execution time for a group
- can be found at the bottom of the log for <c>end_per_group/2</c>.</p>
+ <p>The properties for a group are always printed in the top of the HTML log
+ for <c>init_per_group/2</c>. The total execution time for a group is
+ included at the bottom of the log for <c>end_per_group/2</c>.</p>
- <p>Test case groups may be nested so that sets of groups can be
+ <p>Test case groups can be nested so sets of groups can be
configured with the same <c>init_per_group/2</c> and <c>end_per_group/2</c>
- functions. Nested groups may be defined by including a group definition,
- or a group name reference, in the test case list of another group. Example:</p>
+ functions. Nested groups can be defined by including a group definition,
+ or a group name reference, in the test case list of another group.</p>
+ <p><em>Example:</em></p>
<pre>
- groups() -> [{group1, [shuffle], [test1a,
- {group2, [], [test2a,test2b]},
- test1b]},
- {group3, [], [{group,group4},
- {group,group5}]},
- {group4, [parallel], [test4a,test4b]},
- {group5, [sequence], [test5a,test5b,test5c]}].</pre>
-
- <p>In the example above, if <c>all/0</c> would return group name references
- in this order: <c>[{group,group1},{group,group3}]</c>, the order of the
- configuration functions and test cases will be the following (note that
+ groups() -> [{group1, [shuffle], [test1a,
+ {group2, [], [test2a,test2b]},
+ test1b]},
+ {group3, [], [{group,group4},
+ {group,group5}]},
+ {group4, [parallel], [test4a,test4b]},
+ {group5, [sequence], [test5a,test5b,test5c]}].</pre>
+
+ <p>In the previous example, if <c>all/0</c> returns group name references
+ in the order <c>[{group,group1},{group,group3}]</c>, the order of the
+ configuration functions and test cases becomes the following (notice that
<c>init_per_testcase/2</c> and <c>end_per_testcase/2:</c> are also
always called, but not included in this example for simplification):</p>
<pre>
-- init_per_group(group1, Config) -> Config1 (*)
-
--- test1a(Config1)
-
--- init_per_group(group2, Config1) -> Config2
-
---- test2a(Config2), test2b(Config2)
-
--- end_per_group(group2, Config2)
-
--- test1b(Config1)
-
-- end_per_group(group1, Config1)
-
-- init_per_group(group3, Config) -> Config3
-
--- init_per_group(group4, Config3) -> Config4
-
---- test4a(Config4), test4b(Config4) (**)
-
--- end_per_group(group4, Config4)
-
--- init_per_group(group5, Config3) -> Config5
-
---- test5a(Config5), test5b(Config5), test5c(Config5)
-
--- end_per_group(group5, Config5)
-
-- end_per_group(group3, Config3)
-
-
- (*) The order of test case test1a, test1b and group2 is not actually
- defined since group1 has a shuffle property.
-
- (**) These cases are not executed in order, but in parallel.</pre>
-
- <p>Properties are not inherited from top level groups to nested
- sub-groups. E.g, in the example above, the test cases in <c>group2</c>
- will not be executed in random order (which is the property of
- <c>group1</c>).</p>
+ init_per_group(group1, Config) -> Config1 (*)
+ test1a(Config1)
+ init_per_group(group2, Config1) -> Config2
+ test2a(Config2), test2b(Config2)
+ end_per_group(group2, Config2)
+ test1b(Config1)
+ end_per_group(group1, Config1)
+ init_per_group(group3, Config) -> Config3
+ init_per_group(group4, Config3) -> Config4
+ test4a(Config4), test4b(Config4) (**)
+ end_per_group(group4, Config4)
+ init_per_group(group5, Config3) -> Config5
+ test5a(Config5), test5b(Config5), test5c(Config5)
+ end_per_group(group5, Config5)
+ end_per_group(group3, Config3)</pre>
+
+ <p>(*) The order of test case <c>test1a</c>, <c>test1b</c>, and <c>group2</c> is
+ undefined, as <c>group1</c> has a shuffle property.</p>
+ <p>(**) These cases are not executed in order, but in parallel.</p>
+ <p>Properties are not inherited from top-level groups to nested
+ subgroups. For instance, in the previous example, the test cases in <c>group2</c>
+ are not executed in random order (which is the property of <c>group1</c>).</p>
</section>
<section>
- <title>The parallel property and nested groups</title>
- <p>If a group 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 <c>end_per_group/2</c> however, which means
- that the time it takes to execute a parallel group is equal to the
+ <title>Parallel Property and Nested Groups</title>
+ <p>If a group has a parallel property, its test cases are spawned
+ simultaneously and get executed in parallel. However, a test case is not
+ allowed to execute in parallel with <c>end_per_group/2</c>, which means
+ that the time to execute a parallel group 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
- <c>end_per_group/2</c> function for the group has finished.</p>
+ are not updated with links to the individual test case logs until function
+ <c>end_per_group/2</c> for the group has finished.</p>
- <p>A group nested under a parallel group will start executing in parallel
+ <p>A group nested under a parallel group starts executing in parallel
with previous (parallel) test cases (no matter what properties the nested
- group has). Since, however, test cases are never executed in parallel with
- <c>init_per_group/2</c> or <c>end_per_group/2</c> of the same group, it's
- only after a nested group has finished that any remaining parallel cases
- in the previous group get spawned.</p>
+ group has). However, as test cases are never executed in parallel with
+ <c>init_per_group/2</c> or <c>end_per_group/2</c> of the same group, it is
+ only after a nested group has finished that remaining parallel cases
+ in the previous group become spawned.</p>
</section>
<section>
- <title>Parallel test cases and IO</title>
- <p>A parallel test case has a private IO server as its group leader.
- (Please see the Erlang Run-Time System Application documentation for
- a description of the group leader concept). The
- central IO server process that handles the output from regular test
- cases and configuration functions, does not respond to IO messages
+ <title>Parallel Test Cases and I/O</title>
+ <p>A parallel test case has a private I/O server as its group leader.
+ (For a description of the group leader concept, see
+ <seealso marker="erts:index"><c>ERTS</c></seealso>).
+ The central I/O server process, which handles the output from
+ regular test cases and configuration functions, does not respond to I/O messages
during execution of parallel groups. This is important to understand
- in order to avoid certain traps, like this one:</p>
- <p>If a process, <c>P</c>, is spawned during execution of e.g.
- <c>init_per_suite/1</c>, it will inherit the group leader of the
- <c>init_per_suite</c> process. This group leader is the central IO server
- process mentioned above. If, at a later time, <em>during parallel test case
+ to avoid certain traps, like the following:</p>
+ <p>If a process, <c>P</c>, is spawned during execution of, for example,
+ <c>init_per_suite/1</c>, it inherits the group leader of the
+ <c>init_per_suite</c> process. This group leader is the central I/O server
+ process mentioned earlier. If, at a later time, <em>during parallel test case
execution</em>, some event triggers process <c>P</c> to call
- <c>io:format/1/2</c>, that call will never return (since the group leader
- is in a non-responsive state) and cause <c>P</c> to hang.
+ <c>io:format/1/2</c>, that call never returns (as the group leader
+ is in a non-responsive state) and causes <c>P</c> to hang.
</p>
</section>
<section>
- <title>Repeated groups</title>
+ <title>Repeated Groups</title>
<marker id="repeated_groups"></marker>
- <p>A test case group may be repeated a certain number of times
+ <p>A test case group can 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>,
+ The repetition can also be stopped too early if any or all cases
+ fail or succeed, that is, if any of the properties <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 sub-group (ok or
- failed), to affect the execution of the group on the level above.
+ <p>The status of a subgroup can be returned (<c>ok</c> or
+ <c>failed</c>), to affect the execution of the group on the level above.
This is accomplished by, in <c>end_per_group/2</c>, looking up the value
of <c>tc_group_properties</c> in the <c>Config</c> list and checking the
- result of the test cases in the group. If status <c>failed</c> should be
- returned from the group as a result, <c>end_per_group/2</c> should return
- the value <c>{return_group_result,failed}</c>. The status of a sub-group
- is taken into account by Common Test when evaluating if execution of a
- group should be repeated or not (unless the basic <c>repeat</c>
+ result of the test cases in the group. If status <c>failed</c> is to be
+ returned from the group as a result, <c>end_per_group/2</c> is to return
+ the value <c>{return_group_result,failed}</c>. The status of a subgroup
+ is taken into account by <c>Common Test</c> when evaluating if execution of a
+ group is to 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
+ <p>The value of <c>tc_group_properties</c> 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 with 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 group:</p>
+ <p>The following is an example of how to return the status from a group:</p>
<pre>
- end_per_group(_Group, 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 <c>end_per_group/2</c> to check the status of
- a sub-group (maybe to determine what status the current group should also
- return). This is as simple as illustrated in the example above, only the
- name of the group is stored in a tuple <c>{group_result,GroupName}</c>,
- which can be searched for in the status lists. Example:</p>
+ end_per_group(_Group, 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 <c>end_per_group/2</c>, to check the status of
+ a subgroup (maybe to determine what status the current group is to
+ return). This is as simple as illustrated in the previous example, only the
+ group name is stored in a tuple <c>{group_result,GroupName}</c>,
+ which can be searched for in the status lists.</p>
+ <p><em>Example:</em></p>
<pre>
- end_per_group(group1, Config) ->
- Status = ?config(tc_group_result, Config),
- Failed = proplists:get_value(failed, Status),
- case lists:member({group_result,group2}, Failed) of
- true ->
- {return_group_result,failed};
- false ->
- {return_group_result,ok}
- end;
- ...</pre>
+ end_per_group(group1, Config) ->
+ Status = ?config(tc_group_result, Config),
+ Failed = proplists:get_value(failed, Status),
+ case lists:member({group_result,group2}, Failed) of
+ true ->
+ {return_group_result,failed};
+ false ->
+ {return_group_result,ok}
+ end;
+ ...</pre>
<note><p>When a test case group is repeated, the configuration
- functions, <c>init_per_group/2</c> and <c>end_per_group/2</c>, are
+ functions <c>init_per_group/2</c> and <c>end_per_group/2</c> 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 group are executed, is under normal
+ <title>Shuffled Test Case Order</title>
+ <p>The order in which test cases in a group are executed is under normal
circumstances the same as the order specified in the test case list
- in the group definition. With the <c>shuffle</c> property set, however,
- Common Test will instead execute the test cases in random order.</p>
+ in the group definition. With property <c>shuffle</c> set, however,
+ <c>Common Test</c> instead executes 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
+ <p>You can 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 group is executed. If no seed value
- is given, Common Test creates a "random" seed for the shuffling operation
- (using the return value of <c>erlang:now()</c>). The seed value is always
+ is specified, <c>Common Test</c> creates a "random" seed for the shuffling operation
+ (using the return value of <c>erlang:timestamp/0</c>). The seed value is always
printed to the <c>init_per_group/2</c> log file so that it can be used to
recreate the same execution order in a subsequent test run.</p>
- <note><p>If a shuffled test case group is repeated, the seed will not
- be reset in between turns.</p></note>
+ <note><p>If a shuffled test case group is repeated, the seed is not
+ reset between turns.</p></note>
- <p>If a sub-group is specified in a group with a <c>shuffle</c> property,
- the execution order of this sub-group in relation to the test cases
- (and other sub-groups) in the group, is also random. The order of the
- test cases in the sub-group is however not random (unless, of course, the
- sub-group also has a <c>shuffle</c> property).</p>
+ <p>If a subgroup is specified in a group with a <c>shuffle</c> property,
+ the execution order of this subgroup in relation to the test cases
+ (and other subgroups) in the group, is random. The order of the
+ test cases in the subgroup is however not random (unless the
+ subgroup has a <c>shuffle</c> property).</p>
</section>
<section>
<marker id="group_info"></marker>
- <title>Group info function</title>
+ <title>Group Information Function</title>
- <p>The test case group info function, <c>group(GroupName)</c>,
- serves the same purpose as the suite- and test case info
- functions previously described in this chapter. The scope for
- the group info, however, is all test cases and sub-groups in the
+ <p>The test case group information function, <c>group(GroupName)</c>,
+ serves the same purpose as the suite- and test case information
+ functions previously described. However, the scope for
+ the group information function, is all test cases and subgroups in the
group in question (<c>GroupName</c>).</p>
- <p>Example:</p>
+ <p><em>Example:</em></p>
<pre>
- group(connection_tests) ->
- [{require,login_data},
- {timetrap,1000}].</pre>
+ group(connection_tests) ->
+ [{require,login_data},
+ {timetrap,1000}].</pre>
- <p>The group info properties override those set with the
- suite info function, and may in turn be overridden by test
- case info properties. Please see the test case info
- function above for a list of valid info properties and more
- general information.</p>
+ <p>The group information properties override those set with the
+ suite information function, and can in turn be overridden by test
+ case information properties. For a list of valid information properties
+ and more general information, see the
+ <seealso marker="#info_function">Test Case Information Function</seealso>.
+ </p>
</section>
<section>
- <title>Info functions for init- and end-configuration</title>
- <p>It is possible to use info functions also for the <c>init_per_suite</c>,
- <c>end_per_suite</c>, <c>init_per_group</c>, and <c>end_per_group</c>
- functions, and it works the same way as with info functions
- for test cases (see above). This is useful e.g. for setting
- timetraps and requiring external configuration data relevant
- only for the configuration function in question (without
- affecting properties set for groups and test cases in the suite).</p>
-
- <p>The info function <c>init/end_per_suite()</c> is called for
- <c>init/end_per_suite(Config)</c>, and info function
+ <title>Information Functions for Init- and End-Configuration</title>
+ <p>Information functions can also be used for functions <c>init_per_suite</c>,
+ <c>end_per_suite</c>, <c>init_per_group</c>, and <c>end_per_group</c>,
+ and they work the same way as with the
+ <seealso marker="#info_function">Test Case Information Function</seealso>.
+ This is useful, for example, for setting timetraps and requiring
+ external configuration data relevant only for the configuration
+ function in question (without affecting properties set for groups
+ and test cases in the suite).</p>
+
+ <p>The information function <c>init/end_per_suite()</c> is called for
+ <c>init/end_per_suite(Config)</c>, and information function
<c>init/end_per_group(GroupName)</c> is called for
- <c>init/end_per_group(GroupName,Config)</c>. Info functions
- can not be used with <c>init/end_per_testcase(TestCase, Config)</c>,
- however, since these configuration functions execute on the test case process
- and will use the same properties as the test case (i.e. the properties
- set by the test case info function, <c>TestCase()</c>). Please see the test case
- info function above for a list of valid info properties and more
- general information.
+ <c>init/end_per_group(GroupName,Config)</c>. However, information functions
+ cannot be used with <c>init/end_per_testcase(TestCase, Config)</c>,
+ as these configuration functions execute on the test case process
+ and use the same properties as the test case (that is, the properties
+ set by the test case information function, <c>TestCase()</c>). For a list
+ of valid information properties and more general information, see the
+ <seealso marker="#info_function">Test Case Information Function</seealso>.
</p>
</section>
@@ -789,77 +805,67 @@
<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. The name
- of the <c>data_dir</c> is the the name of the test suite followed
- by <c>"_data"</c>. For example,
- <c>"some_path/foo_SUITE.beam"</c> has the data directory
+ <p>In the data directory, <c>data_dir</c>, the test module has
+ its own files needed for the testing. The name of <c>data_dir</c>
+ is the the name of the test suite followed by <c>"_data"</c>.
+ For example, <c>"some_path/foo_SUITE.beam"</c> has the data directory
<c>"some_path/foo_SUITE_data/"</c>. Use this directory for portability,
- i.e. to avoid hardcoding directory names in your suite. Since the data
- directory is stored in the same directory as your test suite, you should
- be able to rely on its existence at runtime, even if the path to your
+ that is, to avoid hardcoding directory names in your suite. As the data
+ directory is stored in the same directory as your test suite, you can
+ rely on its existence at runtime, even if the path to your
test suite directory has changed between test suite implementation and
execution.
</p>
-
-<!--
- <p>
- When using the Common Test framework <c>ct</c>, automatic
- compilation of code in the data directory can be obtained by
- placing a makefile source called Makefile.src in the data
- directory. Makefile.src will be converted to a valid makefile by
- <c>ct</c> when the test suite is run. See the reference manual for
- the <c>ct</c> module for details about the syntax of Makefile.src.
- </p>
--->
<p>
<c>priv_dir</c> is the private directory for the test cases.
- This directory may be used whenever a test case (or configuration function)
+ This directory can be used whenever a test case (or configuration function)
needs to write something to file. The name of the private directory is
- generated by Common Test, which also creates the directory.
+ generated by <c>Common Test</c>, which also creates the directory.
</p>
- <p>By default, Common Test creates one central private directory
- per test run that all test cases share. This may not always be suitable,
- especially if the same test cases are executed multiple times during
- a test run (e.g. if they belong to a test case group with repeat
- property), and there's a risk that files in the private directory get
- overwritten. Under these circumstances, it's possible to configure
- Common Test to create one dedicated private directory per
- test case and execution instead. This is accomplished by means of
- the flag/option: <c>create_priv_dir</c> (to be used with the
- <c>ct_run</c> program, the <seealso marker="ct#run_test-1"><c>ct:run_test/1</c></seealso> function, or
+ <p>By default, <c>Common Test</c> creates one central private directory
+ per test run, shared by all test cases. This is not always suitable.
+ Especially if the same test cases are executed multiple times during
+ a test run (that is, if they belong to a test case group with property
+ <c>repeat</c>) and there is a risk that files in the private directory get
+ overwritten. Under these circumstances, <c>Common Test</c> can be
+ configured to create one dedicated private directory per
+ test case and execution instead. This is accomplished with
+ the flag/option <c>create_priv_dir</c> (to be used with the
+ <seealso marker="ct_run"><c>ct_run</c></seealso> program, the
+ <seealso marker="ct#run_test-1"><c>ct:run_test/1</c></seealso> function, or
as test specification term). There are three possible values
- for this option:
+ for this option as follows:
</p>
- <list>
+ <list type="bulleted">
<item><c>auto_per_run</c></item>
<item><c>auto_per_tc</c></item>
<item><c>manual_per_tc</c></item>
</list>
<p>
- The first value indicates the default priv_dir behaviour, i.e.
+ The first value indicates the default <c>priv_dir</c> behavior, that is,
one private directory created per test run. The two latter
- values tell Common Test to generate a unique test directory name
+ values tell <c>Common Test</c> to generate a unique test directory name
per test case and execution. If the auto version is used, <em>all</em>
- private directories will be created automatically. This can obviously
- become very inefficient for test runs with many test cases and/or
- repetitions. Therefore, in case the manual version is instead used, the
- test case must tell Common Test to create priv_dir when it needs it.
- It does this by calling the function <seealso marker="ct#make_priv_dir-0"><c>ct:make_priv_dir/0</c></seealso>.
+ private directories are created automatically. This can become very
+ inefficient for test runs with many test cases or repetitions, or both.
+ Therefore, if the manual version is used instead, the test case must tell
+ <c>Common Test</c> to create <c>priv_dir</c> when it needs it.
+ It does this by calling the function
+ <seealso marker="ct#make_priv_dir-0"><c>ct:make_priv_dir/0</c></seealso>.
</p>
- <note><p>You should not depend on current working directory for
- reading and writing data files since this is not portable. All
+ <note><p>Do not depend on the current working directory for
+ reading and writing data files, as this is not portable. All
scratch files are to be written in the <c>priv_dir</c> and all
- data files should be located in <c>data_dir</c>. Note also that
- the Common Test server sets current working directory to the test case
- log directory at the start of every case.
+ data files are to be located in <c>data_dir</c>. Also,
+ the <c>Common Test</c> server sets the current working directory to
+ the test case log directory at the start of every case.
</p></note>
</section>
<section>
- <title>Execution environment</title>
+ <title>Execution Environment</title>
<p>Each test case is executed by a dedicated Erlang process. The
process is spawned when the test case starts, and terminated when
@@ -876,236 +882,269 @@
<section>
<marker id="timetraps"></marker>
- <title>Timetrap timeouts</title>
+ <title>Timetrap Time-Outs</title>
<p>The default time limit for a test case is 30 minutes, unless a
<c>timetrap</c> is specified either by the suite-, group-,
- or test case info function. The timetrap timeout value defined by
- <c>suite/0</c> is the value that will be used for each test case
- in the suite (as well as for the configuration functions
+ or test case information function. The timetrap time-out value defined by
+ <c>suite/0</c> is the value that is used for each test case
+ in the suite (and for the configuration functions
<c>init_per_suite/1</c>, <c>end_per_suite/1</c>, <c>init_per_group/2</c>,
and <c>end_per_group/2</c>). A timetrap value defined by
<c>group(GroupName)</c> overrides one defined by <c>suite()</c>
- and will be used for each test case in group <c>GroupName</c>, and any
- of its sub-groups. If a timetrap value is defined by <c>group/1</c>
- for a sub-group, it overrides that of its higher level groups. Timetrap
- values set by individual test cases (by means of the test case info
+ and is used for each test case in group <c>GroupName</c>, and any
+ of its subgroups. If a timetrap value is defined by <c>group/1</c>
+ for a subgroup, it overrides that of its higher level groups. Timetrap
+ values set by individual test cases (by the test case information
function) override both group- and suite- level timetraps.</p>
- <p>It is also possible to dynamically set/reset a timetrap during the
- excution of a test case, or configuration function. This is done by calling
- <seealso marker="ct#timetrap-1"><c>ct:timetrap/1</c></seealso>. This function cancels the current timetrap
- and starts a new one (that stays active until timeout, or end of the
- current function).</p>
+ <p>A timetrap can also be set or reset dynamically during the
+ execution of a test case, or configuration function.
+ This is done by calling
+ <seealso marker="ct#timetrap-1"><c>ct:timetrap/1</c></seealso>.
+ This function cancels the current timetrap and starts a new one
+ (that stays active until time-out, or end of the current function).</p>
<p>Timetrap values can be extended with a multiplier value specified at
- startup with the <c>multiply_timetraps</c> option. It is also possible
- to let the test server decide to scale up timetrap timeout values
- automatically, e.g. if tools such as cover or trace are running during
- the test. This feature is disabled by default and can be enabled with
- the <c>scale_timetraps</c> start option.</p>
+ startup with option <c>multiply_timetraps</c>. It is also possible
+ to let the test server decide to scale up timetrap time-out values
+ automatically. That is, if tools such as <c>cover</c> or <c>trace</c>
+ are running during the test. This feature is disabled by default and
+ can be enabled with start option <c>scale_timetraps</c>.</p>
<p>If a test case needs to suspend itself for a time that also gets
multipled by <c>multiply_timetraps</c> (and possibly also scaled up if
- <c>scale_timetraps</c> is enabled), the function <seealso marker="ct#sleep-1"><c>ct:sleep/1</c></seealso>
- may be used (instead of e.g. <c>timer:sleep/1</c>).</p>
+ <c>scale_timetraps</c> is enabled), the function
+ <seealso marker="ct#sleep-1"><c>ct:sleep/1</c></seealso>
+ can be used (instead of, for example, <c>timer:sleep/1</c>).</p>
- <p>A function (<c>fun/0</c> or <c>MFA</c>) may be specified as
- timetrap value in the suite-, group- and test case info function, as
- well as argument to the <seealso marker="ct#timetrap-1"><c>ct:timetrap/1</c></seealso> function. Examples:</p>
+ <p>A function (<c>fun/0</c> or <c>{Mod,Func,Args}</c> (MFA) tuple) can be
+ specified as timetrap value in the suite-, group- and test case information
+ function, and as argument to function
+ <seealso marker="ct#timetrap-1"><c>ct:timetrap/1</c></seealso>.</p>
+ <p><em>Examples:</em></p>
<p><c>{timetrap,{my_test_utils,timetrap,[?MODULE,system_start]}}</c></p>
<p><c>ct:timetrap(fun() -> my_timetrap(TestCaseName, Config) end)</c></p>
- <p>The user timetrap function may be used for two things:</p>
- <list>
- <item>To act as a timetrap - the timeout is triggered when the
+ <p>The user timetrap function can be used for two things as follows:</p>
+ <list type="bulleted">
+ <item>To act as a timetrap. The time-out is triggered when the
function returns.</item>
<item>To return a timetrap time value (other than a function).</item>
</list>
<p>Before execution of the timetrap function (which is performed
- on a parallel, dedicated timetrap process), Common Test cancels
+ on a parallel, dedicated timetrap process), <c>Common Test</c> cancels
any previously set timer for the test case or configuration function.
- When the timetrap function returns, the timeout is triggered, <em>unless</em>
+ When the timetrap function returns, the time-out is triggered, <em>unless</em>
the return value is a valid timetrap time, such as an integer,
- or a <c>{SecMinOrHourTag,Time}</c> tuple (see the
- <seealso marker="common_test">common_test reference manual</seealso> for
- details). If a time value is returned, a new timetrap is started
- to generate a timeout after the specified time.</p>
+ or a <c>{SecMinOrHourTag,Time}</c> tuple (for details, see module
+ <seealso marker="common_test">common_test</seealso>). If a time value
+ is returned, a new timetrap is started to generate a time-out after
+ the specified time.</p>
- <p>The user timetrap function may of course return a time value after a delay,
- and if so, the effective timetrap time is the delay time <em>plus</em> the
+ <p>The user timetrap function can return a time value after a delay.
+ The effective timetrap time is then the delay time <em>plus</em> the
returned time.</p>
</section>
<section>
<marker id="logging"></marker>
- <title>Logging - categories and verbosity levels</title>
- <p>Common Test provides three main functions for printing strings:</p>
- <list>
- <item><c>ct:log(Category, Importance, Format, Args)</c></item>
- <item><c>ct:print(Category, Importance, Format, Args)</c></item>
- <item><c>ct:pal(Category, Importance, Format, Args)</c></item>
+ <title>Logging - Categories and Verbosity Levels</title>
+ <p><c>Common Test</c> provides the following three main functions for
+ printing strings:</p>
+ <list type="bulleted">
+ <item><c>ct:log(Category, Importance, Format, FormatArgs, Opts)</c></item>
+ <item><c>ct:print(Category, Importance, Format, FormatArgs)</c></item>
+ <item><c>ct:pal(Category, Importance, Format, FormatArgs)</c></item>
</list>
- <p>The <c>log/1/2/3/4</c> function will print a string to the test case
- log file. The <c>print/1/2/3/4</c> function will print the string to screen,
- and the <c>pal/1/2/3/4</c> function will print the same string both to file and
- screen. (The functions are documented in the <c>ct</c> reference manual).</p>
-
- <p>The optional <c>Category</c> argument may be used to categorize the
- log printout, and categories can be used for two things:</p>
- <list>
+ <p>The <seealso marker="ct#log-1"><c>log/1,2,3,4,5</c></seealso> function
+ prints a string to the test case log file.
+ The <seealso marker="ct#print-1"><c>print/1,2,3,4</c></seealso> function
+ prints the string to screen.
+ The <seealso marker="ct#pal-1"><c>pal/1,2,3,4</c></seealso> function
+ prints the same string both to file and screen. The functions are described
+ in module <seealso marker="ct">ct</seealso>.
+ </p>
+
+ <p>The optional <c>Category</c> argument can be used to categorize the
+ log printout. Categories can be used for two things as follows:</p>
+ <list type="bulleted">
<item>To compare the importance of the printout to a specific
- verbosity level, and</item>
- <item>to format the printout according to a user specific HTML
+ verbosity level.</item>
+ <item>To format the printout according to a user-specific HTML
Style Sheet (CSS).</item>
</list>
- <p>The <c>Importance</c> argument specifies a level of importance
- which, compared to a verbosity level (general and/or set per category),
- determines if the printout should be visible or not. <c>Importance</c>
- is an arbitrary integer in the range 0..99. Pre-defined constants
+ <p>Argument <c>Importance</c> specifies a level of importance
+ that, compared to a verbosity level (general and/or set per category),
+ determines if the printout is to be visible. <c>Importance</c>
+ is any integer in the range 0..99. Predefined constants
exist in the <c>ct.hrl</c> header file. The default importance level,
- <c>?STD_IMPORTANCE</c> (used if the <c>Importance</c> argument is not
- provided), is 50. This is also the importance used for standard IO, e.g.
- from printouts made with <c>io:format/2</c>, <c>io:put_chars/1</c>, etc.</p>
+ <c>?STD_IMPORTANCE</c> (used if argument <c>Importance</c> is not
+ provided), is 50. This is also the importance used for standard I/O,
+ for example, from printouts made with <c>io:format/2</c>,
+ <c>io:put_chars/1</c>, and so on.</p>
- <p><c>Importance</c> is compared to a verbosity level set by means of the
+ <p><c>Importance</c> is compared to a verbosity level set by the
<c>verbosity</c> start flag/option. The verbosity level can be set per
- category and/or generally. The default verbosity level, <c>?STD_VERBOSITY</c>,
- is 50, i.e. all standard IO gets printed. If a lower verbosity level is set,
- standard IO printouts will be ignored. Common Test performs the following test:</p>
- <pre>Importance >= (100-VerbosityLevel)</pre>
+ category or generally, or both. The default verbosity level,
+ <c>?STD_VERBOSITY</c>, is 50, that is, all standard I/O gets printed.
+ If a lower verbosity level is set, standard I/O printouts are ignored.
+ <c>Common Test</c> performs the following test:</p>
+ <pre>
+ Importance >= (100-VerbosityLevel)</pre>
<p>This also means that verbosity level 0 effectively turns all logging off
- (with the exception of printouts made by Common Test itself).</p>
+ (except from printouts made by <c>Common Test</c> itself).</p>
<p>The general verbosity level is not associated with any particular
- category. This level sets the threshold for the standard IO printouts,
- uncategorized <c>ct:log/print/pal</c> printouts, as well as
+ category. This level sets the threshold for the standard I/O printouts,
+ uncategorized <c>ct:log/print/pal</c> printouts, and
printouts for categories with undefined verbosity level.</p>
- <p>Example:</p>
- <pre>
- Some printouts during test case execution:
-
- io:format("1. Standard IO, importance = ~w~n", [?STD_IMPORTANCE]),
- ct:log("2. Uncategorized, importance = ~w", [?STD_IMPORTANCE]),
- ct:log(info, "3. Categorized info, importance = ~w", [?STD_IMPORTANCE]]),
- ct:log(info, ?LOW_IMPORTANCE, "4. Categorized info, importance = ~w", [?LOW_IMPORTANCE]),
- ct:log(error, "5. Categorized error, importance = ~w", [?HI_IMPORTANCE]),
- ct:log(error, ?HI_IMPORTANCE, "6. Categorized error, importance = ~w", [?MAX_IMPORTANCE]),
-
- If starting the test without specifying any verbosity levels:
-
- $ ct_run ...
-
- the following gets printed:
-
- 1. Standard IO, importance = 50
- 2. Uncategorized, importance = 50
- 3. Categorized info, importance = 50
- 5. Categorized error, importance = 75
- 6. Categorized error, importance = 99
-
- If starting the test with:
-
- $ ct_run -verbosity 1 and info 75
-
- the following gets printed:
-
- 3. Categorized info, importance = 50
- 4. Categorized info, importance = 25
- 6. Categorized error, importance = 99</pre>
-
- <p>How categories can be mapped to CSS tags is documented in the
- <seealso marker="run_test_chapter#html_stylesheet">Running Tests</seealso>
- chapter.</p>
-
- <p>The <c>Format</c> and <c>Args</c> arguments in <c>ct:log/print/pal</c> are
- always passed on to the <c>io:format/3</c> function in <c>stdlib</c>
- (please see the <c>io</c> manual page for details).</p>
+ <p><em>Examples:</em></p>
+ <p>Some printouts during test case execution:</p>
+ <pre>
+ io:format("1. Standard IO, importance = ~w~n", [?STD_IMPORTANCE]),
+ ct:log("2. Uncategorized, importance = ~w", [?STD_IMPORTANCE]),
+ ct:log(info, "3. Categorized info, importance = ~w", [?STD_IMPORTANCE]]),
+ ct:log(info, ?LOW_IMPORTANCE, "4. Categorized info, importance = ~w", [?LOW_IMPORTANCE]),
+ ct:log(error, "5. Categorized error, importance = ~w", [?HI_IMPORTANCE]),
+ ct:log(error, ?HI_IMPORTANCE, "6. Categorized error, importance = ~w", [?MAX_IMPORTANCE]),</pre>
+
+ <p>If starting the test without specifying any verbosity levels as follows:</p>
+ <pre>
+ $ ct_run ...</pre>
+ <p>the following is printed:</p>
+ <pre>
+ 1. Standard IO, importance = 50
+ 2. Uncategorized, importance = 50
+ 3. Categorized info, importance = 50
+ 5. Categorized error, importance = 75
+ 6. Categorized error, importance = 99</pre>
+
+ <p>If starting the test with:</p>
+ <pre>
+ $ ct_run -verbosity 1 and info 75</pre>
+ <p>the following is printed:</p>
+ <pre>
+ 3. Categorized info, importance = 50
+ 4. Categorized info, importance = 25
+ 6. Categorized error, importance = 99</pre>
+
+ <p>The arguments <c>Format</c> and <c>FormatArgs</c> in <c>ct:log/print/pal</c> are
+ always passed on to the <c>stdlib</c> function <c>io:format/3</c> (For details,
+ see the <seealso marker="stdlib:io"><c>stdlib:io</c></seealso> manual page).</p>
+
+ <p><c>ct:pal/4</c> and <c>ct:log/5</c> add headers to strings being printed to the
+ log file. The strings are also wrapped in div tags with a CSS class
+ attribute, so that stylesheet formatting can be applied. To disable this feature for
+ a printout (i.e. to get a result similar to using <c>io:format/2</c>),
+ call <c>ct:log/5</c> with the <c>no_css</c> option.</p>
+
+ <p>How categories can be mapped to CSS tags is documented in section
+ <seealso marker="run_test_chapter#html_stylesheet">HTML Style Sheets</seealso>
+ in section Running Tests and Analyzing Results.</p>
- <p>For more information about log files, please see the
- <seealso marker="run_test_chapter#log_files">Running Tests</seealso> chapter.</p>
+ <p>Common Test will escape special HTML characters (&lt;, &gt; and &amp;) in printouts
+ to the log file made with <c>ct:pal/4</c> and <c>io:format/2</c>. In order to print
+ strings with HTML tags to the log, use the <c>ct:log/3,4,5</c> function. The character
+ escaping feature is per default disabled for <c>ct:log/3,4,5</c> but can be enabled with
+ the <c>esc_chars</c> option in the <c>Opts</c> list, see <seealso marker="ct#log-5">
+ <c>ct:log/3,4,5</c></seealso>.</p>
+
+ <p>If the character escaping feature needs to be disabled (typically for backwards
+ compatibility reasons), use the <c>ct_run</c> start flag <c>-no_esc_chars</c>, or the
+ <c>ct:run_test/1</c> start option <c>{esc_chars,Bool}</c> (this start option is also
+ supported in test specifications).</p>
+
+ <p>For more information about log files, see section
+ <seealso marker="run_test_chapter#log_files">Log Files</seealso>
+ in section Running Tests and Analyzing Results.</p>
</section>
<section>
- <title>Illegal dependencies</title>
+ <title>Illegal Dependencies</title>
<p>Even though it is highly efficient to write test suites with
- the Common Test framework, there will surely be mistakes made,
- mainly due to illegal dependencies. Noted below are some of the
+ the <c>Common Test</c> framework, mistakes can be made,
+ mainly because of illegal dependencies. Some of the
more frequent mistakes from our own experience with running the
- Erlang/OTP test suites.</p>
+ Erlang/OTP test suites follows:</p>
- <list>
- <item>Depending on current directory, and writing there:<br></br>
+ <list type="bulleted">
+ <item><p>Depending on current directory, and writing there:</p>
<p>This is a common error in test suites. It is assumed that
- the current directory is the same as what the author used as
+ the current directory is the same as the author used as
current directory when the test case was developed. Many test
cases even try to write scratch files to this directory. Instead
- <c>data_dir</c> and <c>priv_dir</c> should be used to locate
+ <c>data_dir</c> and <c>priv_dir</c> are to be used to locate
data and for writing scratch files.
</p>
</item>
- <item>Depending on execution order:<br></br>
+ <item><p>Depending on execution order:</p>
- <p>During development of test suites, no assumption should preferrably
- be made about the execution order of the test cases or suites.
- E.g. a test case should not assume that a server it depends on,
- has already been started by a previous test case. There are
- several reasons for this:
- </p>
- <p>Firstly, the user/operator may specify the order at will, and maybe
- a different execution order is more relevant or efficient on
- some particular occasion. Secondly, if the user specifies a whole
- directory of test suites for his/her test, the order the suites are
- executed will depend on how the files are listed by the operating
- system, which varies between systems. Thirdly, if a user
- wishes to run only a subset of a test suite, there is no way
- one test case could successfully depend on another.
+ <p>During development of test suites, make no assumptions on the
+ execution order of the test cases or suites. For example, a test
+ case must not assume that a server it depends on is already
+ started by a previous test case. Reasons for this follows:
</p>
+ <list type="bulleted">
+ <item>The user/operator can specify the order at will, and maybe
+ a different execution order is sometimes more relevant or
+ efficient.</item>
+ <item>If the user specifies a whole directory of test suites
+ for the test, the execution order of the suites depends on
+ how the files are listed by the operating system, which varies
+ between systems.</item>
+ <item>If a user wants to run only a subset of a test suite,
+ there is no way one test case could successfully depend on
+ another.</item>
+ </list>
</item>
- <item>Depending on Unix:<br></br>
+ <item><p>Depending on Unix:</p>
- <p>Running unix commands through <c>os:cmd</c> are likely
- not to work on non-unix platforms.
+ <p>Running Unix commands through <c>os:cmd</c> are likely
+ not to work on non-Unix platforms.
</p>
</item>
- <item>Nested test cases:<br></br>
+ <item><p>Nested test cases:</p>
- <p>Invoking a test case from another not only tests the same
- thing twice, but also makes it harder to follow what exactly
- is being tested. Also, if the called test case fails for some
- reason, so will the caller. This way one error gives cause to
- several error reports, which is less than ideal.
+ <p>Starting a test case from another not only tests the same
+ thing twice, but also makes it harder to follow what is being
+ tested. Also, if the called test case fails for some
+ reason, so do the caller. This way, one error gives cause to
+ several error reports, which is to be avoided.
</p>
- <p>Functionality common for many test case functions may be implemented
- in common help functions. If these functions are useful for test cases
- across suites, put the help functions into common help modules.
+ <p>Functionality common for many test case functions can be
+ implemented in common help functions. If these functions are
+ useful for test cases across suites, put the help functions
+ into common help modules.
</p>
</item>
- <item>Failure to crash or exit when things go wrong:<br></br>
+ <item><p>Failure to crash or exit when things go wrong:</p>
<p>Making requests without checking that the return value
- indicates success may be ok if the test case will fail at a
- later stage, but it is never acceptable just to print an error
- message (into the log file) and return successfully. Such test cases
- do harm since they create a false sense of security when overviewing
- the test results.
+ indicates success can be OK if the test case fails
+ later, but it is never acceptable just to print an error
+ message (into the log file) and return successfully. Such test
+ cases do harm, as they create a false sense of security when
+ overviewing the test results.
</p>
</item>
- <item>Messing up for subsequent test cases:<br></br>
+ <item><p>Messing up for subsequent test cases:</p>
- <p>Test cases should restore as much of the execution
- environment as possible, so that the subsequent test cases will
- not crash because of execution order of the test cases.
- The function <c>end_per_testcase</c> is suitable for this.
+ <p>Test cases are to restore as much of the execution
+ environment as possible, so that subsequent test cases
+ do not crash because of their execution order.
+ The function
+ <seealso marker="common_test#Module:end_per_testcase-2"><c>end_per_testcase</c></seealso>
+ is suitable for this.
</p>
</item>
</list>
diff --git a/lib/common_test/include/ct.hrl b/lib/common_test/include/ct.hrl
index 5806f75806..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.
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 91c1e8ede8..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.
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 7958a349b4..cae7bea406 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.
@@ -64,7 +64,8 @@
-export([require/1, require/2,
get_config/1, get_config/2, get_config/3,
reload_config/1,
- log/1, log/2, log/3, log/4,
+ escape_chars/1, escape_chars/2,
+ log/1, log/2, log/3, log/4, log/5,
print/1, print/2, print/3, print/4,
pal/1, pal/2, pal/3, pal/4,
capture_start/0, capture_stop/0, capture_get/0, capture_get/1,
@@ -160,9 +161,9 @@ run(TestDirs) ->
%%% {repeat,N} | {duration,DurTime} | {until,StopTime} |
%%% {force_stop,ForceStop} | {decrypt,DecryptKeyOrFile} |
%%% {refresh_logs,LogDir} | {logopts,LogOpts} |
-%%% {verbosity,VLevels} | {basic_html,Bool} |
-%%% {ct_hooks, CTHs} | {enable_builtin_hooks,Bool} |
-%%% {release_shell,Bool}
+%%% {verbosity,VLevels} | {basic_html,Bool} |
+%%% {esc_chars,Bool} | {ct_hooks, CTHs} |
+%%% {enable_builtin_hooks,Bool} | {release_shell,Bool}
%%% TestDirs = [string()] | string()
%%% Suites = [string()] | [atom()] | string() | atom()
%%% Cases = [atom()] | atom()
@@ -509,44 +510,88 @@ get_testspec_terms(Tags) ->
%%%-----------------------------------------------------------------
+%%% @spec escape_chars(IoList1) -> IoList2 | {error,Reason}
+%%% IoList1 = iolist()
+%%% IoList2 = iolist()
+%%%
+%%% @doc Escape special characters to be printed in html log
+%%%
+escape_chars(IoList) ->
+ ct_logs:escape_chars(IoList).
+
+%%%-----------------------------------------------------------------
+%%% @spec escape_chars(Format, Args) -> IoList | {error,Reason}
+%%% Format = string()
+%%% Args = list()
+%%%
+%%% @doc Escape special characters to be printed in html log
+%%%
+escape_chars(Format, Args) ->
+ try io_lib:format(Format, Args) of
+ IoList ->
+ ct_logs:escape_chars(IoList)
+ catch
+ _:Reason ->
+ {error,Reason}
+ end.
+
+%%%-----------------------------------------------------------------
%%% @spec log(Format) -> ok
-%%% @equiv log(default,50,Format,[])
+%%% @equiv log(default,50,Format,[],[])
log(Format) ->
- log(default,?STD_IMPORTANCE,Format,[]).
+ log(default,?STD_IMPORTANCE,Format,[],[]).
%%%-----------------------------------------------------------------
%%% @spec log(X1,X2) -> ok
%%% X1 = Category | Importance | Format
%%% X2 = Format | Args
-%%% @equiv log(Category,Importance,Format,Args)
+%%% @equiv log(Category,Importance,Format,Args,[])
log(X1,X2) ->
{Category,Importance,Format,Args} =
if is_atom(X1) -> {X1,?STD_IMPORTANCE,X2,[]};
is_integer(X1) -> {default,X1,X2,[]};
is_list(X1) -> {default,?STD_IMPORTANCE,X1,X2}
end,
- log(Category,Importance,Format,Args).
+ log(Category,Importance,Format,Args,[]).
%%%-----------------------------------------------------------------
%%% @spec log(X1,X2,X3) -> ok
+%%% X1 = Category | Importance | Format
+%%% X2 = Importance | Format | Args
+%%% X3 = Format | Args | Opts
+%%% @equiv log(Category,Importance,Format,Args,Opts)
+log(X1,X2,X3) ->
+ {Category,Importance,Format,Args,Opts} =
+ if is_atom(X1), is_integer(X2) -> {X1,X2,X3,[],[]};
+ is_atom(X1), is_list(X2) -> {X1,?STD_IMPORTANCE,X2,X3,[]};
+ is_integer(X1) -> {default,X1,X2,X3,[]};
+ is_list(X1), is_list(X2) -> {default,?STD_IMPORTANCE,X1,X2,X3}
+ end,
+ log(Category,Importance,Format,Args,Opts).
+
+%%%-----------------------------------------------------------------
+%%% @spec log(X1,X2,X3,X4) -> ok
%%% X1 = Category | Importance
%%% X2 = Importance | Format
%%% X3 = Format | Args
-%%% @equiv log(Category,Importance,Format,Args)
-log(X1,X2,X3) ->
- {Category,Importance,Format,Args} =
- if is_atom(X1), is_integer(X2) -> {X1,X2,X3,[]};
- is_atom(X1), is_list(X2) -> {X1,?STD_IMPORTANCE,X2,X3};
- is_integer(X1) -> {default,X1,X2,X3}
+%%% X4 = Args | Opts
+%%% @equiv log(Category,Importance,Format,Args,Opts)
+log(X1,X2,X3,X4) ->
+ {Category,Importance,Format,Args,Opts} =
+ if is_atom(X1), is_integer(X2) -> {X1,X2,X3,X4,[]};
+ is_atom(X1), is_list(X2) -> {X1,?STD_IMPORTANCE,X2,X3,X4};
+ is_integer(X1) -> {default,X1,X2,X3,X4}
end,
- log(Category,Importance,Format,Args).
+ log(Category,Importance,Format,Args,Opts).
%%%-----------------------------------------------------------------
-%%% @spec log(Category,Importance,Format,Args) -> ok
+%%% @spec log(Category,Importance,Format,Args,Opts) -> ok
%%% Category = atom()
%%% Importance = integer()
%%% Format = string()
%%% Args = list()
+%%% Opts = [Opt]
+%%% Opt = esc_chars | no_css
%%%
%%% @doc Printout from a test case to the log file.
%%%
@@ -558,8 +603,8 @@ log(X1,X2,X3) ->
%%% and default value for <c>Args</c> is <c>[]</c>.</p>
%%% <p>Please see the User's Guide for details on <c>Category</c>
%%% and <c>Importance</c>.</p>
-log(Category,Importance,Format,Args) ->
- ct_logs:tc_log(Category,Importance,Format,Args).
+log(Category,Importance,Format,Args,Opts) ->
+ ct_logs:tc_log(Category,Importance,Format,Args,Opts).
%%%-----------------------------------------------------------------
diff --git a/lib/common_test/src/ct_config.erl b/lib/common_test/src/ct_config.erl
index 33efe7a14a..b499bc8b05 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.
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 f7615fdc14..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.
@@ -105,52 +105,62 @@ terminate(_,#state{logs=Logs}) ->
%%% Writing reports
write_report(_Time,#conn_log{header=false,module=ConnMod}=Info,Data,GL,State) ->
case get_log(Info,GL,State) of
- {silent,_} ->
+ {silent,_,_} ->
ok;
- {LogType,Fd} ->
- io:format(Fd,"~n~ts",[format_data(ConnMod,LogType,Data)])
+ {LogType,Dest,Fd} ->
+ Str = if LogType == html, Dest == gl -> ["$tc_html","~n~ts"];
+ true -> "~n~ts"
+ end,
+ io:format(Fd,Str,[format_data(ConnMod,LogType,Data)])
end;
write_report(Time,#conn_log{module=ConnMod}=Info,Data,GL,State) ->
case get_log(Info,GL,State) of
- {silent,_} ->
+ {silent,_,_} ->
ok;
- {LogType,Fd} ->
+ {LogType,Dest,Fd} ->
case format_data(ConnMod,LogType,Data) of
- [] ->
+ [] when Info#conn_log.action==send; Info#conn_log.action==recv ->
ok;
FormattedData ->
- io:format(Fd,"~n~ts~ts~ts",[format_head(ConnMod,LogType,Time),
- format_title(LogType,Info),
- FormattedData])
+ Str = if LogType == html, Dest == gl ->
+ ["$tc_html","~n~ts~ts~ts"];
+ true ->
+ "~n~ts~ts~ts"
+ end,
+ io:format(Fd,Str,[format_head(ConnMod,LogType,Time),
+ format_title(LogType,Info),
+ FormattedData])
end
end.
write_error(Time,#conn_log{module=ConnMod}=Info,Report,GL,State) ->
case get_log(Info,GL,State) of
- {LogType,_} when LogType==html; LogType==silent ->
+ {LogType,_,_} when LogType==html; LogType==silent ->
%% The error will anyway be written in the html log by the
%% sasl error handler, so don't write it again.
ok;
- {LogType,Fd} ->
- io:format(Fd,"~n~ts~ts~ts",
- [format_head(ConnMod,LogType,Time," ERROR"),
- format_title(LogType,Info),
- format_error(LogType,Report)])
+ {LogType,Dest,Fd} ->
+ Str = if LogType == html, Dest == gl -> ["$tc_html","~n~ts~ts~ts"];
+ true -> "~n~ts~ts~ts"
+ end,
+ io:format(Fd,Str,[format_head(ConnMod,LogType,Time," ERROR"),
+ format_title(LogType,Info),
+ format_error(LogType,Report)])
end.
get_log(Info,GL,State) ->
case proplists:get_value(GL,State#state.logs) of
undefined ->
- {html,State#state.default_gl};
+ {html,gl,State#state.default_gl};
ConnLogs ->
case proplists:get_value(Info#conn_log.module,ConnLogs) of
{html,_} ->
- {html,GL};
+ {html,gl,GL};
{LogType,Fds} ->
- {LogType,get_fd(Info,Fds)};
+ {LogType,file,get_fd(Info,Fds)};
undefined ->
- {html,GL}
+ {html,gl,GL}
end
end.
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 f792269c41..eb32f7f3fc 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.
@@ -28,7 +28,7 @@
-export([init_tc/3, end_tc/3, end_tc/4, get_suite/2, get_all_cases/1]).
-export([report/2, warn/1, error_notification/4]).
--export([get_logopts/0, format_comment/1, get_html_wrapper/4]).
+-export([get_log_dir/0, get_logopts/0, format_comment/1, get_html_wrapper/4]).
-export([error_in_suite/1, init_per_suite/1, end_per_suite/1,
init_per_group/2, end_per_group/2]).
@@ -52,9 +52,23 @@
%%%
%%% @doc Test server framework callback, called by the test_server
%%% when a new test case is started.
-init_tc(Mod,Func,Config) ->
+init_tc(Mod,EPTC={end_per_testcase,_},[Config]) ->
%% in case Mod == ct_framework, lookup the suite name
Suite = get_suite_name(Mod, Config),
+ case ct_hooks:init_tc(Suite,EPTC,Config) of
+ NewConfig when is_list(NewConfig) ->
+ {ok,[NewConfig]};
+ Other->
+ Other
+ end;
+
+init_tc(Mod,Func0,Args) ->
+ %% in case Mod == ct_framework, lookup the suite name
+ Suite = get_suite_name(Mod, Args),
+ {Func,HookFunc} = case Func0 of
+ {init_per_testcase,F} -> {F,Func0};
+ _ -> {Func0,Func0}
+ end,
%% check if previous testcase was interpreted and has left
%% a "dead" trace window behind - if so, kill it
@@ -86,7 +100,7 @@ init_tc(Mod,Func,Config) ->
end, [create]),
case ct_util:read_suite_data({seq,Suite,Func}) of
undefined ->
- init_tc1(Mod,Suite,Func,Config);
+ init_tc1(Mod,Suite,Func,HookFunc,Args);
Seq when is_atom(Seq) ->
case ct_util:read_suite_data({seq,Suite,Seq}) of
[Func|TCs] -> % this is the 1st case in Seq
@@ -102,27 +116,27 @@ init_tc(Mod,Func,Config) ->
_ ->
ok
end,
- init_tc1(Mod,Suite,Func,Config);
+ init_tc1(Mod,Suite,Func,HookFunc,Args);
{failed,Seq,BadFunc} ->
{auto_skip,{sequence_failed,Seq,BadFunc}}
end
end
- end.
+ end.
-init_tc1(?MODULE,_,error_in_suite,[Config0]) when is_list(Config0) ->
+init_tc1(?MODULE,_,error_in_suite,_,[Config0]) when is_list(Config0) ->
ct_logs:init_tc(false),
ct_event:notify(#event{name=tc_start,
node=node(),
data={?MODULE,error_in_suite}}),
- ct_suite_init(?MODULE, error_in_suite, [], Config0),
- case ?val(error, Config0) of
+ ct_suite_init(?MODULE,error_in_suite,[],Config0),
+ case ?val(error,Config0) of
undefined ->
{fail,"unknown_error_in_suite"};
Reason ->
{fail,Reason}
end;
-init_tc1(Mod,Suite,Func,[Config0]) when is_list(Config0) ->
+init_tc1(Mod,Suite,Func,HookFunc,[Config0]) when is_list(Config0) ->
Config1 =
case ct_util:read_suite_data(last_saved_config) of
{{Suite,LastFunc},SavedConfig} -> % last testcase
@@ -156,11 +170,13 @@ init_tc1(Mod,Suite,Func,[Config0]) when is_list(Config0) ->
%% testcase info function (these should only survive the
%% testcase, not the whole suite)
FuncSpec = group_or_func(Func,Config0),
- if is_tuple(FuncSpec) -> % group
- ok;
- true ->
- ct_config:delete_default_config(testcase)
- end,
+ HookFunc1 =
+ if is_tuple(FuncSpec) -> % group
+ FuncSpec;
+ true ->
+ ct_config:delete_default_config(testcase),
+ HookFunc
+ end,
Initialize = fun() ->
ct_logs:init_tc(false),
ct_event:notify(#event{name=tc_start,
@@ -184,14 +200,15 @@ init_tc1(Mod,Suite,Func,[Config0]) when is_list(Config0) ->
Initialize(),
{fail,Reason};
_ ->
- init_tc2(Mod,Suite,Func,SuiteInfo,MergeResult,Config)
+ init_tc2(Mod,Suite,Func,HookFunc1,
+ SuiteInfo,MergeResult,Config)
end
end;
-init_tc1(_Mod,_Suite,_Func,Args) ->
+init_tc1(_Mod,_Suite,_Func,_HookFunc,Args) ->
{ok,Args}.
-init_tc2(Mod,Suite,Func,SuiteInfo,MergeResult,Config) ->
+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
@@ -238,7 +255,7 @@ init_tc2(Mod,Suite,Func,SuiteInfo,MergeResult,Config) ->
{ok,PostInitHook,Config1} ->
case get('$test_server_framework_test') of
undefined ->
- ct_suite_init(Suite, FuncSpec, PostInitHook, Config1);
+ ct_suite_init(Suite,HookFunc,PostInitHook,Config1);
Fun ->
PostInitHookResult = do_post_init_hook(PostInitHook,
Config1),
@@ -251,16 +268,16 @@ init_tc2(Mod,Suite,Func,SuiteInfo,MergeResult,Config) ->
end
end.
-ct_suite_init(Suite, FuncSpec, PostInitHook, Config) when is_list(Config) ->
- case ct_hooks:init_tc(Suite, FuncSpec, Config) of
+ct_suite_init(Suite,HookFunc,PostInitHook,Config) when is_list(Config) ->
+ case ct_hooks:init_tc(Suite,HookFunc,Config) of
NewConfig when is_list(NewConfig) ->
- PostInitHookResult = do_post_init_hook(PostInitHook, NewConfig),
+ PostInitHookResult = do_post_init_hook(PostInitHook,NewConfig),
{ok, [PostInitHookResult ++ NewConfig]};
Else ->
Else
end.
-do_post_init_hook(PostInitHook, Config) ->
+do_post_init_hook(PostInitHook,Config) ->
lists:flatmap(fun({Tag,Fun}) ->
case lists:keysearch(Tag,1,Config) of
{value,_} ->
@@ -657,9 +674,23 @@ end_tc(Mod,Func,{TCPid,Result,[Args]}, Return) when is_pid(TCPid) ->
end_tc(Mod,Func,{Result,[Args]}, Return) ->
end_tc(Mod,Func,self(),Result,Args,Return).
-end_tc(Mod,Func,TCPid,Result,Args,Return) ->
+end_tc(Mod,IPTC={init_per_testcase,_Func},_TCPid,Result,Args,Return) ->
+ %% in case Mod == ct_framework, lookup the suite name
+ Suite = get_suite_name(Mod, Args),
+ case ct_hooks:end_tc(Suite,IPTC,Args,Result,Return) of
+ '$ct_no_change' ->
+ ok;
+ HookResult ->
+ HookResult
+ end;
+
+end_tc(Mod,Func0,TCPid,Result,Args,Return) ->
%% in case Mod == ct_framework, lookup the suite name
Suite = get_suite_name(Mod, Args),
+ {EPTC,Func} = case Func0 of
+ {end_per_testcase,F} -> {true,F};
+ _ -> {false,Func0}
+ end,
test_server:timetrap_cancel(),
@@ -686,11 +717,15 @@ end_tc(Mod,Func,TCPid,Result,Args,Return) ->
end,
ct_util:delete_suite_data(last_saved_config),
- FuncSpec = group_or_func(Func,Args),
-
+ {FuncSpec,HookFunc} =
+ if not EPTC ->
+ FS = group_or_func(Func,Args),
+ {FS,FS};
+ true ->
+ {Func,Func0}
+ end,
{Result1,FinalNotify} =
- case ct_hooks:end_tc(
- Suite, FuncSpec, Args, Result, Return) of
+ case ct_hooks:end_tc(Suite,HookFunc,Args,Result,Return) of
'$ct_no_change' ->
{ok,Result};
HookResult ->
@@ -831,13 +866,13 @@ tag(_Other) ->
%%% <code>Func</code> in suite <code>Mod</code> crashing.
%%% <code>Error</code> specifies the reason for failing.
error_notification(Mod,Func,_Args,{Error,Loc}) ->
- ErrSpec = case Error of
+ ErrorSpec = case Error of
{What={_E,_R},Trace} when is_list(Trace) ->
What;
What ->
What
end,
- ErrStr = case ErrSpec of
+ ErrorStr = case ErrorSpec of
{badmatch,Descr} ->
Descr1 = lists:flatten(io_lib:format("~P",[Descr,10])),
if length(Descr1) > 50 ->
@@ -859,7 +894,8 @@ error_notification(Mod,Func,_Args,{Error,Loc}) ->
Other ->
io_lib:format("~P", [Other,5])
end,
- ErrorHtml = "<font color=\"brown\">" ++ ErrStr ++ "</font>",
+ ErrorHtml =
+ "<font color=\"brown\">" ++ ct_logs:escape_chars(ErrorStr) ++ "</font>",
case {Mod,Error} of
%% some notifications come from the main test_server process
%% and for these cases the existing comment may not be modified
@@ -887,41 +923,43 @@ error_notification(Mod,Func,_Args,{Error,Loc}) ->
end
end,
- PrintErr = fun(ErrFormat, ErrArgs) ->
+ PrintError = fun(ErrorFormat, ErrorArgs) ->
Div = "~n- - - - - - - - - - - - - - - - - - - "
"- - - - - - - - - - - - - - - - - - - - -~n",
- io:format(user, lists:concat([Div,ErrFormat,Div,"~n"]),
- ErrArgs),
+ ErrorStr2 = io_lib:format(ErrorFormat, ErrorArgs),
+ io:format(user, lists:concat([Div,ErrorStr2,Div,"~n"]),
+ []),
Link =
"\n\n<a href=\"#end\">"
"Full error description and stacktrace"
"</a>",
+ ErrorHtml2 = ct_logs:escape_chars(ErrorStr2),
ct_logs:tc_log(ct_error_notify,
?MAX_IMPORTANCE,
"CT Error Notification",
- ErrFormat++Link, ErrArgs)
+ ErrorHtml2++Link, [], [])
end,
case Loc of
[{?MODULE,error_in_suite}] ->
- PrintErr("Error in suite detected: ~ts", [ErrStr]);
+ PrintError("Error in suite detected: ~ts", [ErrorStr]);
R when R == unknown; R == undefined ->
- PrintErr("Error detected: ~ts", [ErrStr]);
+ PrintError("Error detected: ~ts", [ErrorStr]);
%% if a function specified by all/0 does not exist, we
%% pick up undef here
- [{LastMod,LastFunc}|_] when ErrStr == "undef" ->
- PrintErr("~w:~w could not be executed~nReason: ~ts",
- [LastMod,LastFunc,ErrStr]);
+ [{LastMod,LastFunc}|_] when ErrorStr == "undef" ->
+ PrintError("~w:~w could not be executed~nReason: ~ts",
+ [LastMod,LastFunc,ErrorStr]);
[{LastMod,LastFunc}|_] ->
- PrintErr("~w:~w failed~nReason: ~ts", [LastMod,LastFunc,ErrStr]);
+ PrintError("~w:~w failed~nReason: ~ts", [LastMod,LastFunc,ErrorStr]);
[{LastMod,LastFunc,LastLine}|_] ->
%% print error to console, we are only
%% interested in the last executed expression
- PrintErr("~w:~w failed on line ~w~nReason: ~ts",
- [LastMod,LastFunc,LastLine,ErrStr]),
+ PrintError("~w:~w failed on line ~w~nReason: ~ts",
+ [LastMod,LastFunc,LastLine,ErrorStr]),
case ct_util:read_suite_data({seq,Mod,Func}) of
undefined ->
@@ -1480,3 +1518,8 @@ get_html_wrapper(TestName, PrintLabel, Cwd, TableCols) ->
get_html_wrapper(TestName, PrintLabel, Cwd, TableCols, Encoding) ->
ct_logs:get_ts_html_wrapper(TestName, PrintLabel, Cwd, TableCols, Encoding).
+
+%%%-----------------------------------------------------------------
+%%% @spec get_log_dir() -> {ok,LogDir}
+get_log_dir() ->
+ ct_logs:get_log_dir(true).
diff --git a/lib/common_test/src/ct_ftp.erl b/lib/common_test/src/ct_ftp.erl
index 616b1a8934..48914864e4 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.
diff --git a/lib/common_test/src/ct_gen_conn.erl b/lib/common_test/src/ct_gen_conn.erl
index e46fd77383..23ba1ab981 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 7636f15f59..dd04c5410a 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.
@@ -81,7 +81,7 @@ find(Mod, all, all, [{Name,Props,Tests} | Gs], Known, Defs, _)
find(Mod, all, TCs, [{Name,Props,Tests} | Gs], Known, Defs, _)
when is_atom(Name), is_list(Props), is_list(Tests) ->
cyclic_test(Mod, Name, Known),
- Tests1 = rm_unwanted_tcs(Tests, TCs, []),
+ Tests1 = modify_tc_list(Tests, TCs, []),
trim(make_conf(Mod, Name, Props,
find(Mod, all, TCs, Tests1, [Name | Known],
Defs, true))) ++
@@ -91,7 +91,7 @@ find(Mod, all, TCs, [{Name,Props,Tests} | Gs], Known, Defs, _)
find(Mod, [Name|GrNames]=SPath, TCs, [{Name,Props,Tests} | Gs], Known,
Defs, FindAll) when is_atom(Name), is_list(Props), is_list(Tests) ->
cyclic_test(Mod, Name, Known),
- Tests1 = rm_unwanted_tcs(Tests, TCs, GrNames),
+ Tests1 = modify_tc_list(Tests, TCs, GrNames),
trim(make_conf(Mod, Name, Props,
find(Mod, GrNames, TCs, Tests1, [Name|Known],
Defs, FindAll))) ++
@@ -133,7 +133,7 @@ find(_Mod, [_|_], _TCs, [], _Known, _Defs, _) ->
find(Mod, GrNames, TCs, [{Name,Props,Tests} | Gs], Known,
Defs, FindAll) when is_atom(Name), is_list(Props), is_list(Tests) ->
cyclic_test(Mod, Name, Known),
- Tests1 = rm_unwanted_tcs(Tests, TCs, GrNames),
+ Tests1 = modify_tc_list(Tests, TCs, GrNames),
trim(make_conf(Mod, Name, Props,
find(Mod, GrNames, TCs, Tests1, [Name|Known],
Defs, FindAll))) ++
@@ -284,70 +284,57 @@ trim_test(Test) ->
%% GrNames is [] if the terminating group has been found. From
%% that point, all specified test should be included (as well as
%% sub groups for deeper search).
-rm_unwanted_tcs(Tests, all, []) ->
- Tests;
-
-rm_unwanted_tcs(Tests, TCs, []) ->
- sort_tests(lists:flatmap(fun(Test) when is_tuple(Test),
- (size(Test) > 2) ->
- [Test];
- (Test={group,_}) ->
- [Test];
- (Test={_M,TC}) ->
- case lists:member(TC, TCs) of
- true -> [Test];
- false -> []
- end;
- (Test) when is_atom(Test) ->
- case lists:keysearch(Test, 2, TCs) of
- {value,_} ->
- [Test];
- _ ->
- case lists:member(Test, TCs) of
- true -> [Test];
- false -> []
- end
- end;
- (Test) -> [Test]
- end, Tests), TCs);
-
-rm_unwanted_tcs(Tests, _TCs, _) ->
- [Test || Test <- Tests, not is_atom(Test)].
-
-%% make sure the order of tests is according to the order in TCs
-sort_tests(Tests, TCs) when is_list(TCs)->
- lists:sort(fun(T1, T2) ->
- case {is_tc(T1),is_tc(T2)} of
- {true,true} ->
- (position(T1, TCs) =<
- position(T2, TCs));
- {false,true} ->
- (position(T2, TCs) == (length(TCs)+1));
- _ -> true
-
- end
- end, Tests);
-sort_tests(Tests, _) ->
- Tests.
-
-is_tc(T) when is_atom(T) -> true;
-is_tc({group,_}) -> false;
-is_tc({_M,T}) when is_atom(T) -> true;
-is_tc(_) -> false.
-
-position(T, TCs) ->
- position(T, TCs, 1).
-
-position(T, [T|_TCs], Pos) ->
- Pos;
-position(T, [{_,T}|_TCs], Pos) ->
- Pos;
-position({M,T}, [T|_TCs], Pos) when M /= group ->
- Pos;
-position(T, [_|TCs], Pos) ->
- position(T, TCs, Pos+1);
-position(_, [], Pos) ->
- Pos.
+modify_tc_list(GrSpecTs, all, []) ->
+ GrSpecTs;
+
+modify_tc_list(GrSpecTs, TSCs, []) ->
+ modify_tc_list1(GrSpecTs, TSCs);
+
+modify_tc_list(GrSpecTs, _TSCs, _) ->
+ [Test || Test <- GrSpecTs, not is_atom(Test)].
+
+modify_tc_list1(GrSpecTs, TSCs) ->
+ %% remove all cases in group tc list that should not be executed
+ GrSpecTs1 =
+ lists:flatmap(fun(Test) when is_tuple(Test),
+ (size(Test) > 2) ->
+ [Test];
+ (Test={group,_}) ->
+ [Test];
+ (Test={_M,TC}) ->
+ case lists:member(TC, TSCs) of
+ true -> [Test];
+ false -> []
+ end;
+ (Test) when is_atom(Test) ->
+ case lists:keysearch(Test, 2, TSCs) of
+ {value,_} ->
+ [Test];
+ _ ->
+ case lists:member(Test, TSCs) of
+ true -> [Test];
+ false -> []
+ end
+ end;
+ (Test) -> [Test]
+ end, GrSpecTs),
+ {TSCs2,GrSpecTs3} =
+ lists:foldr(
+ fun(TC, {TSCs1,GrSpecTs2}) ->
+ case lists:member(TC,GrSpecTs1) of
+ true ->
+ {[TC|TSCs1],lists:delete(TC,GrSpecTs2)};
+ false ->
+ case lists:keysearch(TC, 2, GrSpecTs) of
+ {value,Test} ->
+ {[Test|TSCs1],
+ lists:keydelete(TC, 2, GrSpecTs2)};
+ false ->
+ {TSCs1,GrSpecTs2}
+ end
+ end
+ end, {[],GrSpecTs1}, TSCs),
+ TSCs2 ++ GrSpecTs3.
%%%-----------------------------------------------------------------
diff --git a/lib/common_test/src/ct_hooks.erl b/lib/common_test/src/ct_hooks.erl
index 86d18696dc..5422d449fd 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.
@@ -67,6 +67,8 @@ terminate(Hooks) ->
%% tests.
-spec init_tc(Mod :: atom(),
FuncSpec :: atom() |
+ {ConfigFunc :: init_per_testcase | end_per_testcase,
+ TestCase :: atom()} |
{ConfigFunc :: init_per_group | end_per_group,
GroupName :: atom(),
Properties :: list()},
@@ -93,13 +95,19 @@ init_tc(Mod, {init_per_group, GroupName, Properties}, Config) ->
call(fun call_generic/3, Config, [pre_init_per_group, GroupName]);
init_tc(_Mod, {end_per_group, GroupName, _}, Config) ->
call(fun call_generic/3, Config, [pre_end_per_group, GroupName]);
-init_tc(_Mod, TC, Config) ->
+init_tc(_Mod, {init_per_testcase,TC}, Config) ->
+ call(fun call_generic/3, Config, [pre_init_per_testcase, TC]);
+init_tc(_Mod, {end_per_testcase,TC}, Config) ->
+ call(fun call_generic/3, Config, [pre_end_per_testcase, TC]);
+init_tc(_Mod, TC = error_in_suite, Config) ->
call(fun call_generic/3, Config, [pre_init_per_testcase, TC]).
%% @doc Called as each test case is completed. This includes all configuration
%% tests.
-spec end_tc(Mod :: atom(),
- FuncSpec :: atom() |
+ FuncSpec :: atom() |
+ {ConfigFunc :: init_per_testcase | end_per_testcase,
+ TestCase :: atom()} |
{ConfigFunc :: init_per_group | end_per_group,
GroupName :: atom(),
Properties :: list()},
@@ -126,10 +134,17 @@ end_tc(Mod, {end_per_group, GroupName, Properties}, Config, Result, _Return) ->
[post_end_per_group, GroupName, Config], '$ct_no_change'),
maybe_stop_locker(Mod, GroupName, Properties),
Res;
-end_tc(_Mod, TC, Config, Result, _Return) ->
+end_tc(_Mod, {init_per_testcase,TC}, Config, Result, _Return) ->
+ call(fun call_generic/3, Result, [post_init_per_testcase, TC, Config],
+ '$ct_no_change');
+end_tc(_Mod, {end_per_testcase,TC}, Config, Result, _Return) ->
+ call(fun call_generic/3, Result, [post_end_per_testcase, TC, Config],
+ '$ct_no_change');
+end_tc(_Mod, TC = error_in_suite, Config, Result, _Return) ->
call(fun call_generic/3, Result, [post_end_per_testcase, TC, Config],
'$ct_no_change').
+
%% Case = TestCase | {TestCase,GroupName}
on_tc_skip(How, {Suite, Case, Reason}) ->
call(fun call_cleanup/3, {How, Reason}, [on_tc_skip, Suite, Case]).
@@ -244,6 +259,8 @@ remove(_, Else) ->
%% Translate scopes, i.e. init_per_group,group1 -> end_per_group,group1 etc
scope([pre_init_per_testcase, TC|_]) ->
+ [post_init_per_testcase, TC];
+scope([pre_end_per_testcase, TC|_]) ->
[post_end_per_testcase, TC];
scope([pre_init_per_group, GroupName|_]) ->
[post_end_per_group, GroupName];
@@ -317,7 +334,8 @@ get_hooks() ->
%% If we are doing a cleanup call i.e. {post,pre}_end_per_*, all priorities
%% are reversed. Probably want to make this sorting algorithm pluginable
%% as some point...
-resort(Calls,Hooks,[F|_R]) when F == post_end_per_testcase;
+resort(Calls,Hooks,[F|_R]) when F == pre_end_per_testcase;
+ F == post_end_per_testcase;
F == pre_end_per_group;
F == post_end_per_group;
F == pre_end_per_suite;
@@ -367,10 +385,10 @@ pos(Id,[_|Rest],Num) ->
catch_apply(M,F,A, Default) ->
try
- apply(M,F,A)
+ erlang:apply(M,F,A)
catch _:Reason ->
case erlang:get_stacktrace() of
- %% Return the default if it was the CTH module which did not have the function.
+ %% Return the default if it was the CTH module which did not have the function.
[{M,F,A,_}|_] when Reason == undef ->
Default;
Trace ->
diff --git a/lib/common_test/src/ct_hooks_lock.erl b/lib/common_test/src/ct_hooks_lock.erl
index 1a058aa8ca..f41f259f7b 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.
diff --git a/lib/common_test/src/ct_logs.erl b/lib/common_test/src/ct_logs.erl
index 78081380e7..e6d683c8a9 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.
@@ -37,15 +37,17 @@
-export([add_external_logs/1, add_link/3]).
-export([make_last_run_index/0]).
-export([make_all_suites_index/1,make_all_runs_index/1]).
--export([get_ts_html_wrapper/5]).
+-export([get_ts_html_wrapper/5, escape_chars/1]).
-export([xhtml/2, locate_priv_file/1, make_relative/1]).
-export([insert_javascript/1]).
-export([uri/1]).
%% Logging stuff directly from testcase
--export([tc_log/3, tc_log/4, tc_log/5, tc_log_async/3, tc_log_async/5,
+-export([tc_log/3, tc_log/4, tc_log/5, tc_log/6,
+ tc_log_async/3, tc_log_async/5,
tc_print/3, tc_print/4,
- tc_pal/3, tc_pal/4, ct_log/3, basic_html/0]).
+ tc_pal/3, tc_pal/4, ct_log/3,
+ basic_html/0]).
%% Simulate logger process for use without ct environment running
-export([simulate/0]).
@@ -267,7 +269,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(xhtml("", "<br />")),
+ tc_io_format(group_leader(), xhtml("", "<br />"), []),
ok.
%%%-----------------------------------------------------------------
@@ -314,9 +316,10 @@ unregister_groupleader(Pid) ->
%%% data to log (as in <code>io:format(Format,Args)</code>).</p>
log(Heading,Format,Args) ->
cast({log,sync,self(),group_leader(),ct_internal,?MAX_IMPORTANCE,
- [{int_header(),[log_timestamp(?now),Heading]},
+ [{hd,int_header(),[log_timestamp(?now),Heading]},
{Format,Args},
- {int_footer(),[]}]}),
+ {ft,int_footer(),[]}],
+ true}),
ok.
%%%-----------------------------------------------------------------
@@ -336,7 +339,7 @@ log(Heading,Format,Args) ->
%%% @see end_log/0
start_log(Heading) ->
cast({log,sync,self(),group_leader(),ct_internal,?MAX_IMPORTANCE,
- [{int_header(),[log_timestamp(?now),Heading]}]}),
+ [{hd,int_header(),[log_timestamp(?now),Heading]}],false}),
ok.
%%%-----------------------------------------------------------------
@@ -351,7 +354,7 @@ cont_log([],[]) ->
cont_log(Format,Args) ->
maybe_log_timestamp(),
cast({log,sync,self(),group_leader(),ct_internal,?MAX_IMPORTANCE,
- [{Format,Args}]}),
+ [{Format,Args}],true}),
ok.
%%%-----------------------------------------------------------------
@@ -363,7 +366,7 @@ cont_log(Format,Args) ->
%%% @see cont_log/2
end_log() ->
cast({log,sync,self(),group_leader(),ct_internal,?MAX_IMPORTANCE,
- [{int_footer(), []}]}),
+ [{ft,int_footer(), []}],false}),
ok.
@@ -400,32 +403,46 @@ add_link(Heading,File,Type) ->
%%% @spec tc_log(Category,Format,Args) -> ok
%%% @equiv tc_log(Category,?STD_IMPORTANCE,Format,Args)
tc_log(Category,Format,Args) ->
- tc_log(Category,?STD_IMPORTANCE,Format,Args).
+ tc_log(Category,?STD_IMPORTANCE,"User",Format,Args,[]).
%%%-----------------------------------------------------------------
%%% @spec tc_log(Category,Importance,Format,Args) -> ok
%%% @equiv tc_log(Category,Importance,"User",Format,Args)
tc_log(Category,Importance,Format,Args) ->
- tc_log(Category,Importance,"User",Format,Args).
+ tc_log(Category,Importance,"User",Format,Args,[]).
%%%-----------------------------------------------------------------
-%%% @spec tc_log(Category,Importance,Printer,Format,Args) -> ok
+%%% @spec tc_log(Category,Importance,Format,Args) -> ok
+%%% @equiv tc_log(Category,Importance,"User",Format,Args)
+tc_log(Category,Importance,Format,Args,Opts) ->
+ tc_log(Category,Importance,"User",Format,Args,Opts).
+
+%%%-----------------------------------------------------------------
+%%% @spec tc_log(Category,Importance,Printer,Format,Args,Opts) -> ok
%%% Category = atom()
%%% Importance = integer()
%%% Printer = string()
%%% Format = string()
%%% Args = list()
+%%% Opts = list()
%%%
%%% @doc Printout from a testcase.
%%%
%%% <p>This function is called by <code>ct</code> when logging
%%% stuff directly from a testcase (i.e. not from within the CT
%%% framework).</p>
-tc_log(Category,Importance,Printer,Format,Args) ->
- cast({log,sync,self(),group_leader(),Category,Importance,
- [{div_header(Category,Printer),[]},
- {Format,Args},
- {div_footer(),[]}]}),
+tc_log(Category,Importance,Printer,Format,Args,Opts) ->
+ Data =
+ case lists:member(no_css, Opts) of
+ true ->
+ [{Format,Args}];
+ false ->
+ [{hd,div_header(Category,Printer),[]},
+ {Format,Args},
+ {ft,div_footer(),[]}]
+ end,
+ cast({log,sync,self(),group_leader(),Category,Importance,Data,
+ lists:member(esc_chars, Opts)}),
ok.
%%%-----------------------------------------------------------------
@@ -451,9 +468,10 @@ tc_log_async(Category,Format,Args) ->
%%% asks ct_logs for an html wrapper.</p>
tc_log_async(Category,Importance,Printer,Format,Args) ->
cast({log,async,self(),group_leader(),Category,Importance,
- [{div_header(Category,Printer),[]},
+ [{hd,div_header(Category,Printer),[]},
{Format,Args},
- {div_footer(),[]}]}),
+ {ft,div_footer(),[]}],
+ true}),
ok.
%%%-----------------------------------------------------------------
%%% @spec tc_print(Category,Format,Args)
@@ -522,43 +540,45 @@ tc_pal(Category,Format,Args) ->
tc_pal(Category,Importance,Format,Args) ->
tc_print(Category,Importance,Format,Args),
cast({log,sync,self(),group_leader(),Category,Importance,
- [{div_header(Category),[]},
+ [{hd,div_header(Category),[]},
{Format,Args},
- {div_footer(),[]}]}),
+ {ft,div_footer(),[]}],
+ true}),
ok.
%%%-----------------------------------------------------------------
-%%% @spec ct_pal(Category,Format,Args) -> ok
+%%% @spec ct_log(Category,Format,Args) -> ok
%%% Category = atom()
%%% Format = string()
%%% Args = list()
%%%
-%%% @doc Print and log to the ct framework log
+%%% @doc Print to the ct framework log
%%%
%%% <p>This function is called by internal ct functions to
%%% force logging to the ct framework log</p>
ct_log(Category,Format,Args) ->
- cast({ct_log,[{div_header(Category),[]},
+ cast({ct_log,[{hd,div_header(Category),[]},
{Format,Args},
- {div_footer(),[]}]}),
+ {ft,div_footer(),[]}],
+ true}),
ok.
%%%=================================================================
%%% Internal functions
int_header() ->
- "<div class=\"ct_internal\"><b>*** CT ~s *** ~ts</b>".
+ "</pre>\n<div class=\"ct_internal\"><pre><b>*** CT ~s *** ~ts</b>".
int_footer() ->
- "</div>".
+ "</pre></div>\n<pre>".
div_header(Class) ->
div_header(Class,"User").
div_header(Class,Printer) ->
- "\n<div class=\"" ++ atom_to_list(Class) ++ "\"><b>*** " ++ Printer ++
- " " ++ log_timestamp(?now) ++ " ***</b>".
+ "\n</pre>\n<div class=\"" ++ atom_to_list(Class) ++ "\"><pre><b>*** "
+ ++ Printer ++ " " ++ log_timestamp(?now) ++ " ***</b>".
div_footer() ->
- "</div>".
+ "</pre></div>\n<pre>".
maybe_log_timestamp() ->
@@ -568,7 +588,7 @@ maybe_log_timestamp() ->
ok;
_ ->
cast({log,sync,self(),group_leader(),ct_internal,?MAX_IMPORTANCE,
- [{"<i>~s</i>",[log_timestamp({MS,S,US})]}]})
+ [{hd,"<i>~s</i>",[log_timestamp({MS,S,US})]}],false})
end.
log_timestamp({MS,S,US}) ->
@@ -589,7 +609,8 @@ log_timestamp({MS,S,US}) ->
ct_log_fd,
tc_groupleaders,
stylesheet,
- async_print_jobs}).
+ async_print_jobs,
+ tc_esc_chars}).
logger(Parent, Mode, Verbosity) ->
register(?MODULE,self()),
@@ -708,14 +729,18 @@ logger(Parent, Mode, Verbosity) ->
end
end || {Cat,VLvl} <- Verbosity],
io:nl(CtLogFd),
-
+ TcEscChars = case application:get_env(common_test, esc_chars) of
+ {ok,ECBool} -> ECBool;
+ _ -> true
+ end,
logger_loop(#logger_state{parent=Parent,
log_dir=AbsDir,
start_time=Time,
orig_GL=group_leader(),
ct_log_fd=CtLogFd,
tc_groupleaders=[],
- async_print_jobs=[]}).
+ async_print_jobs=[],
+ tc_esc_chars=TcEscChars}).
copy_priv_files([SrcF | SrcFs], [DestF | DestFs]) ->
case file:copy(SrcF, DestF) of
@@ -729,7 +754,7 @@ copy_priv_files([], []) ->
logger_loop(State) ->
receive
- {log,SyncOrAsync,Pid,GL,Category,Importance,List} ->
+ {log,SyncOrAsync,Pid,GL,Category,Importance,Content,EscChars} ->
VLvl = case Category of
ct_internal ->
?MAX_VERBOSITY;
@@ -741,20 +766,21 @@ logger_loop(State) ->
end,
if Importance >= (100-VLvl) ->
CtLogFd = State#logger_state.ct_log_fd,
+ DoEscChars = State#logger_state.tc_esc_chars and EscChars,
case get_groupleader(Pid, GL, State) of
{tc_log,TCGL,TCGLs} ->
case erlang:is_process_alive(TCGL) of
true ->
State1 = print_to_log(SyncOrAsync, Pid,
- Category,
- TCGL, List, State),
+ Category, TCGL, Content,
+ DoEscChars, State),
logger_loop(State1#logger_state{
tc_groupleaders = TCGLs});
false ->
%% Group leader is dead, so write to the
%% CtLog or unexpected_io log instead
- unexpected_io(Pid,Category,Importance,
- List,CtLogFd),
+ unexpected_io(Pid, Category, Importance,
+ Content, CtLogFd, DoEscChars),
logger_loop(State)
end;
@@ -762,7 +788,8 @@ logger_loop(State) ->
%% If category is ct_internal then write
%% to ct_log, else write to unexpected_io
%% log
- unexpected_io(Pid,Category,Importance,List,CtLogFd),
+ unexpected_io(Pid, Category, Importance, Content,
+ CtLogFd, DoEscChars),
logger_loop(State#logger_state{
tc_groupleaders = TCGLs})
end;
@@ -773,7 +800,8 @@ 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, 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 ->
@@ -818,10 +846,17 @@ logger_loop(State) ->
logger_loop(State);
{clear_stylesheet,_} ->
logger_loop(State#logger_state{stylesheet = undefined});
- {ct_log, List} ->
+ {ct_log,Content,EscChars} ->
+ Str = lists:map(fun({_HdOrFt,Str,Args}) ->
+ [io_lib:format(Str,Args),io_lib:nl()];
+ ({Str,Args}) when EscChars ->
+ Io = io_lib:format(Str,Args),
+ [escape_chars(Io),io_lib:nl()];
+ ({Str,Args}) ->
+ [io_lib:format(Str,Args),io_lib:nl()]
+ end, Content),
Fd = State#logger_state.ct_log_fd,
- [begin io:format(Fd,Str,Args),io:nl(Fd) end ||
- {Str,Args} <- List],
+ io:format(Fd, "~ts", [Str]),
logger_loop(State);
{'DOWN',Ref,_,_Pid,_} ->
%% there might be print jobs executing in parallel with ct_logs
@@ -843,45 +878,79 @@ logger_loop(State) ->
ok
end.
-create_io_fun(FromPid, CtLogFd) ->
+create_io_fun(FromPid, CtLogFd, EscChars) ->
%% we have to build one io-list of all strings
%% before printing, or other io printouts (made in
%% parallel) may get printed between this header
%% and footer
- fun({Str,Args}, IoList) ->
- case catch io_lib:format(Str,Args) of
- {'EXIT',_Reason} ->
+ fun(FormatData, IoList) ->
+ {Escapable,Str,Args} =
+ case FormatData of
+ {_HdOrFt,S,A} -> {false,S,A};
+ {S,A} -> {true,S,A}
+ end,
+ try io_lib:format(Str, Args) of
+ IoStr when Escapable, EscChars, IoList == [] ->
+ escape_chars(IoStr);
+ IoStr when Escapable, EscChars ->
+ [IoList,"\n",escape_chars(IoStr)];
+ IoStr when IoList == [] ->
+ IoStr;
+ IoStr ->
+ [IoList,"\n",IoStr]
+ catch
+ _:_Reason ->
io:format(CtLogFd, "Logging fails! Str: ~p, Args: ~p~n",
[Str,Args]),
%% stop the testcase, we need to see the fault
exit(FromPid, {log_printout_error,Str,Args}),
- [];
- IoStr when IoList == [] ->
- [IoStr];
- IoStr ->
- [IoList,"\n",IoStr]
+ []
end
end.
-print_to_log(sync, FromPid, Category, TCGL, List, State) ->
+escape_chars([Bin | Io]) when is_binary(Bin) ->
+ [Bin | escape_chars(Io)];
+escape_chars([List | Io]) when is_list(List) ->
+ [escape_chars(List) | escape_chars(Io)];
+escape_chars([$< | Io]) ->
+ ["&lt;" | escape_chars(Io)];
+escape_chars([$> | Io]) ->
+ ["&gt;" | escape_chars(Io)];
+escape_chars([$& | Io]) ->
+ ["&amp;" | escape_chars(Io)];
+escape_chars([Char | Io]) when is_integer(Char) ->
+ [Char | escape_chars(Io)];
+escape_chars([]) ->
+ [];
+escape_chars(Bin) ->
+ Bin.
+
+print_to_log(sync, FromPid, Category, TCGL, Content, EscChars, State) ->
%% in some situations (exceptions), the printout is made from the
%% test server IO process and there's no valid group leader to send to
CtLogFd = State#logger_state.ct_log_fd,
if FromPid /= TCGL ->
- IoFun = create_io_fun(FromPid, CtLogFd),
- io:format(TCGL,"~ts", [lists:foldl(IoFun, [], List)]);
+ IoFun = create_io_fun(FromPid, CtLogFd, EscChars),
+ IoList = lists:foldl(IoFun, [], Content),
+ try tc_io_format(TCGL, "~ts", [IoList]) of
+ ok -> ok
+ catch
+ _:_ ->
+ io:format(TCGL,"~ts", [IoList])
+ end;
true ->
- unexpected_io(FromPid,Category,?MAX_IMPORTANCE,List,CtLogFd)
+ unexpected_io(FromPid, Category, ?MAX_IMPORTANCE, Content,
+ CtLogFd, EscChars)
end,
State;
-print_to_log(async, FromPid, Category, TCGL, List, State) ->
+print_to_log(async, FromPid, Category, TCGL, Content, EscChars, State) ->
%% in some situations (exceptions), the printout is made from the
%% test server IO process and there's no valid group leader to send to
CtLogFd = State#logger_state.ct_log_fd,
Printer =
if FromPid /= TCGL ->
- IoFun = create_io_fun(FromPid, CtLogFd),
+ IoFun = create_io_fun(FromPid, CtLogFd, EscChars),
fun() ->
test_server:permit_io(TCGL, self()),
@@ -894,25 +963,28 @@ print_to_log(async, FromPid, Category, TCGL, List, State) ->
case erlang:is_process_alive(TCGL) of
true ->
- try io:format(TCGL, "~ts",
- [lists:foldl(IoFun,[],List)]) of
+ try tc_io_format(TCGL, "~ts",
+ [lists:foldl(IoFun,[],Content)]) of
_ -> ok
catch
_:terminated ->
unexpected_io(FromPid, Category,
?MAX_IMPORTANCE,
- List, CtLogFd)
+ Content, CtLogFd, EscChars);
+ _:_ ->
+ io:format(TCGL, "~ts",
+ [lists:foldl(IoFun,[],Content)])
end;
false ->
unexpected_io(FromPid, Category,
?MAX_IMPORTANCE,
- List, CtLogFd)
+ Content, CtLogFd, EscChars)
end
end;
true ->
fun() ->
unexpected_io(FromPid, Category, ?MAX_IMPORTANCE,
- List, CtLogFd)
+ Content, CtLogFd, EscChars)
end
end,
case State#logger_state.async_print_jobs of
@@ -1042,26 +1114,25 @@ open_ctlog(MiscIoName) ->
"View I/O logged after the test run</a></li>\n</ul>\n",
[MiscIoName,MiscIoName]),
- print_style(Fd,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,undefined) ->
+print_style(Fd, IoFormat, undefined) ->
case basic_html() of
true ->
- io:format(Fd,
- "<style>\n"
- "div.ct_internal { background:lightgrey; color:black; }\n"
- "div.default { background:lightgreen; color:black; }\n"
- "</style>\n",
- []);
+ Style = "<style>\n
+ div.ct_internal { background:lightgrey; color:black; }\n
+ div.default { background:lightgreen; color:black; }\n
+ </style>\n",
+ IoFormat(Fd, Style, []);
_ ->
ok
end;
-print_style(Fd,StyleSheet) ->
+print_style(Fd, IoFormat, StyleSheet) ->
case file:read_file(StyleSheet) of
{ok,Bin} ->
Str = b2s(Bin,encoding(StyleSheet)),
@@ -1074,35 +1145,55 @@ print_style(Fd,StyleSheet) ->
N1 -> N1
end,
if (Pos0 == 0) and (Pos1 /= 0) ->
- print_style_error(Fd,StyleSheet,missing_style_start_tag);
+ print_style_error(Fd, IoFormat,
+ StyleSheet, missing_style_start_tag);
(Pos0 /= 0) and (Pos1 == 0) ->
- print_style_error(Fd,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),
- io:format(Fd,"~ts\n",[Style]);
+ IoFormat(Fd,"~ts\n",[Style]);
Pos0 == 0 ->
- io:format(Fd,"<style>~ts</style>\n",[Str])
+ IoFormat(Fd,"<style>\n~ts</style>\n",[Str])
end;
{error,Reason} ->
- print_style_error(Fd,StyleSheet,Reason)
+ print_style_error(Fd,IoFormat,StyleSheet,Reason)
end.
-%% Simple link version, doesn't work with all browsers unfortunately. :-(
-%% print_style(Fd, StyleSheet) ->
-%% io:format(Fd,
-%% "<link href=~p rel=\"stylesheet\" type=\"text/css\">",
-%% [StyleSheet]).
-
-print_style_error(Fd,StyleSheet,Reason) ->
- io:format(Fd,"\n<!-- Failed to load stylesheet ~ts: ~p -->\n",
- [StyleSheet,Reason]),
- print_style(Fd,undefined).
+print_style_error(Fd, IoFormat, StyleSheet, Reason) ->
+ IO = io_lib:format("\n<!-- Failed to load stylesheet ~ts: ~p -->\n",
+ [StyleSheet,Reason]),
+ 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).
+%%%-----------------------------------------------------------------
+%%% 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()).
+
%%%-----------------------------------------------------------------
%%% Make an index page for the last run
@@ -1364,11 +1455,11 @@ total_row(Success, Fail, UserSkip, AutoSkip, NotBuilt, All) ->
[xhtml("<tr valign=top>\n",
["</tbody>\n<tfoot>\n<tr class=\"",odd_or_even(),"\">\n"]),
"<td><b>Total</b></td>\n", Label, TimestampCell,
- "<td align=right><b>",integer_to_list(Success),"<b></td>\n",
- "<td align=right><b>",integer_to_list(Fail),"<b></td>\n",
+ "<td align=right><b>",integer_to_list(Success),"</b></td>\n",
+ "<td align=right><b>",integer_to_list(Fail),"</b></td>\n",
"<td align=right>",integer_to_list(AllSkip),
" (",UserSkipStr,"/",AutoSkipStr,")</td>\n",
- "<td align=right><b>",integer_to_list(NotBuilt),"<b></td>\n",
+ "<td align=right><b>",integer_to_list(NotBuilt),"</b></td>\n",
AllInfo, "</tr>\n",
xhtml("","</tfoot>\n")].
@@ -1560,10 +1651,12 @@ header1(Title, SubTitle, TableCols) ->
"<!-- autogenerated by '"++atom_to_list(?MODULE)++"' -->\n",
"<head>\n",
"<title>" ++ Title ++ " " ++ SubTitle ++ "</title>\n",
- "<meta http-equiv=\"cache-control\" content=\"no-cache\">\n",
- "<meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\">\n",
+ "<meta http-equiv=\"cache-control\" content=\"no-cache\"></meta>\n",
+ "<meta http-equiv=\"content-type\" content=\"text/html; "
+ "charset=utf-8\"></meta>\n",
xhtml("",
- ["<link rel=\"stylesheet\" href=\"",uri(CSSFile),"\" type=\"text/css\">\n"]),
+ ["<link rel=\"stylesheet\" href=\"",uri(CSSFile),
+ "\" type=\"text/css\"></link>\n"]),
xhtml("",
["<script type=\"text/javascript\" src=\"",JQueryFile,
"\"></script>\n"]),
@@ -1610,7 +1703,7 @@ footer() ->
"Copyright &copy; ", year(),
" <a href=\"http://www.erlang.org\">Open Telecom Platform</a>",
xhtml("<br>\n", "<br />\n"),
- "Updated: <!date>", current_time(), "<!/date>",
+ "Updated: <!--date-->", current_time(), "<!--/date-->",
xhtml("<br>\n", "<br />\n"),
xhtml("</font></p>\n", "</div>\n"),
"</center>\n"
@@ -1780,7 +1873,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
@@ -1985,9 +2078,9 @@ interactive_link() ->
"<!-- autogenerated by '"++atom_to_list(?MODULE)++"' -->\n",
"<head>\n",
"<title>Last interactive run</title>\n",
- "<meta http-equiv=\"cache-control\" content=\"no-cache\">\n",
+ "<meta http-equiv=\"cache-control\" content=\"no-cache\"></meta>\n",
"<meta http-equiv=\"content-type\" content=\"text/html; "
- "charset=utf-8\">\n",
+ "charset=utf-8\"></meta>\n",
"</head>\n",
"<body>\n",
"Log from last interactive run: <a href=\"",uri(CtLog),"\">",
@@ -2519,7 +2612,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} ->
@@ -2846,8 +2939,12 @@ simulate() ->
simulate_logger_loop() ->
receive
- {log,_,_,_,_,_,List} ->
- S = [[io_lib:format(Str,Args),io_lib:nl()] || {Str,Args} <- List],
+ {log,_,_,_,_,_,Content,_} ->
+ S = lists:map(fun({_,Str,Args}) ->
+ [io_lib:format(Str,Args),io_lib:nl()];
+ ({Str,Args}) ->
+ [io_lib:format(Str,Args),io_lib:nl()]
+ end, Content),
io:format("~ts",[S]),
simulate_logger_loop();
stop ->
@@ -3053,15 +3150,15 @@ get_ts_html_wrapper(TestName, Logdir, PrintLabel, Cwd, TableCols, Encoding) ->
"Copyright &copy; ", year(),
" <a href=\"http://www.erlang.org\">",
"Open Telecom Platform</a><br>\n",
- "Updated: <!date>", current_time(), "<!/date>",
+ "Updated: <!--date-->", current_time(), "<!--/date-->",
"<br>\n</font></p>\n"],
{basic_html,
["<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 3.2 Final//EN\">\n",
"<html>\n",
"<head><title>", TestName1, "</title>\n",
- "<meta http-equiv=\"cache-control\" content=\"no-cache\">\n",
+ "<meta http-equiv=\"cache-control\" content=\"no-cache\"></meta>\n",
"<meta http-equiv=\"content-type\" content=\"text/html; charset=",
- html_encoding(Encoding),"\">\n",
+ html_encoding(Encoding),"\"></meta>\n",
"</head>\n",
"<body", Bgr, " bgcolor=\"white\" text=\"black\" ",
"link=\"blue\" vlink=\"purple\" alink=\"red\">\n",
@@ -3078,7 +3175,7 @@ get_ts_html_wrapper(TestName, Logdir, PrintLabel, Cwd, TableCols, Encoding) ->
"Copyright &copy; ", year(),
" <a href=\"http://www.erlang.org\">",
"Open Telecom Platform</a><br />\n",
- "Updated: <!date>", current_time(), "<!/date>",
+ "Updated: <!--date-->", current_time(), "<!--/date-->",
"<br />\n</div>\n"],
CSSFile =
xhtml(fun() -> "" end,
@@ -3105,9 +3202,11 @@ get_ts_html_wrapper(TestName, Logdir, PrintLabel, Cwd, TableCols, Encoding) ->
"\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n",
"<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en\" lang=\"en\">\n",
"<head>\n<title>", TestName1, "</title>\n",
- "<meta http-equiv=\"cache-control\" content=\"no-cache\">\n",
- "<meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\">\n",
- "<link rel=\"stylesheet\" href=\"", uri(CSSFile), "\" type=\"text/css\">\n",
+ "<meta http-equiv=\"cache-control\" content=\"no-cache\"></meta>\n",
+ "<meta http-equiv=\"content-type\" content=\"text/html; ",
+ "charset=utf-8\"></meta>\n",
+ "<link rel=\"stylesheet\" href=\"", uri(CSSFile),
+ "\" type=\"text/css\"></link>\n",
"<script type=\"text/javascript\" src=\"", JQueryFile, "\"></script>\n",
"<script type=\"text/javascript\" src=\"", TableSorterFile, "\"></script>\n"] ++
TableSorterScript ++ ["</head>\n","<body>\n", LabelStr, "\n"],
@@ -3233,11 +3332,11 @@ html_encoding(latin1) ->
html_encoding(utf8) ->
"utf-8".
-unexpected_io(Pid,ct_internal,_Importance,List,CtLogFd) ->
- IoFun = create_io_fun(Pid,CtLogFd),
- io:format(CtLogFd, "~ts", [lists:foldl(IoFun, [], List)]);
-unexpected_io(Pid,_Category,_Importance,List,CtLogFd) ->
- IoFun = create_io_fun(Pid,CtLogFd),
- Data = io_lib:format("~ts", [lists:foldl(IoFun, [], List)]),
+unexpected_io(Pid, ct_internal, _Importance, Content, CtLogFd, EscChars) ->
+ IoFun = create_io_fun(Pid, CtLogFd, EscChars),
+ io:format(CtLogFd, "~ts", [lists:foldl(IoFun, [], Content)]);
+unexpected_io(Pid, _Category, _Importance, Content, CtLogFd, EscChars) ->
+ IoFun = create_io_fun(Pid, CtLogFd, EscChars),
+ Data = io_lib:format("~ts", [lists:foldl(IoFun, [], Content)]),
test_server_io:print_unexpected(Data),
ok.
diff --git a/lib/common_test/src/ct_master.erl b/lib/common_test/src/ct_master.erl
index 228daf459b..c4905b316f 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.
@@ -27,7 +27,7 @@
-export([run_on_node/2,run_on_node/3]).
-export([run_test/1,run_test/2]).
-export([get_event_mgr_ref/0]).
--export([basic_html/1]).
+-export([basic_html/1,esc_chars/1]).
-export([abort/0,abort/1,progress/0]).
@@ -317,6 +317,16 @@ basic_html(Bool) ->
ok.
%%%-----------------------------------------------------------------
+%%% @spec esc_chars(Bool) -> ok
+%%% Bool = true | false
+%%%
+%%% @doc If set to false, the ct_master logs will be written without
+%%% special characters being escaped in the HTML logs.
+esc_chars(Bool) ->
+ application:set_env(common_test_master, esc_chars, Bool),
+ ok.
+
+%%%-----------------------------------------------------------------
%%% MASTER, runs on central controlling node.
%%%-----------------------------------------------------------------
start_master(NodeOptsList) ->
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 2adced42ae..39f87a7f09 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.
@@ -238,9 +238,9 @@ config_table1([]) ->
["</tbody>\n</table>\n"].
int_header() ->
- "<div class=\"ct_internal\"><b>*** CT MASTER ~s *** ~ts</b>".
+ "</pre>\n<div class=\"ct_internal\"><pre><b>*** CT MASTER ~s *** ~ts</b>".
int_footer() ->
- "</div>".
+ "</pre></div>\n<pre>".
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% NodeDir Index functions %%%
@@ -387,11 +387,12 @@ header(Title, TableCols) ->
"<!-- autogenerated by '"++atom_to_list(?MODULE)++"' -->\n",
"<head>\n",
"<title>" ++ Title ++ "</title>\n",
- "<meta http-equiv=\"cache-control\" content=\"no-cache\">\n",
- "<meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\">\n",
+ "<meta http-equiv=\"cache-control\" content=\"no-cache\"></meta>\n",
+ "<meta http-equiv=\"content-type\" content=\"text/html; ",
+ "charset=utf-8\"></meta>\n",
xhtml("",
["<link rel=\"stylesheet\" href=\"",ct_logs:uri(CSSFile),
- "\" type=\"text/css\">"]),
+ "\" type=\"text/css\"></link>\n"]),
xhtml("",
["<script type=\"text/javascript\" src=\"",JQueryFile,
"\"></script>\n"]),
@@ -419,7 +420,7 @@ footer() ->
"Copyright &copy; ", year(),
" <a href=\"http://www.erlang.org\">Open Telecom Platform</a>",
xhtml("<br>\n", "<br />\n"),
- "Updated: <!date>", current_time(), "<!/date>",
+ "Updated: <!--date-->", current_time(), "<--!/date-->",
xhtml("<br>\n", "<br />\n"),
xhtml("</font></p>\n", "</div>\n"),
"</center>\n"
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 3da1115c76..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.
@@ -234,7 +234,6 @@
%% Internal defines
%%----------------------------------------------------------------------
-define(APPLICATION,?MODULE).
--define(VALID_SSH_OPTS,[user, password, user_dir]).
-define(DEFAULT_STREAM,"NETCONF").
-define(error(ConnName,Report),
@@ -1257,13 +1256,11 @@ check_options([{port,Port}|T], Host, _, #options{} = Options) ->
check_options([{timeout, Timeout}|T], Host, Port, Options)
when is_integer(Timeout); Timeout==infinity ->
check_options(T, Host, Port, Options#options{timeout = Timeout});
-check_options([{X,_}=Opt|T], Host, Port, #options{ssh=SshOpts}=Options) ->
- case lists:member(X,?VALID_SSH_OPTS) of
- true ->
- check_options(T, Host, Port, Options#options{ssh=[Opt|SshOpts]});
- false ->
- {error, {invalid_option, Opt}}
- end.
+check_options([{timeout, _} = Opt|_T], _Host, _Port, _Options) ->
+ {error, {invalid_option, Opt}};
+check_options([Opt|T], Host, Port, #options{ssh=SshOpts}=Options) ->
+ %% Option verified by ssh
+ check_options(T, Host, Port, Options#options{ssh=[Opt|SshOpts]}).
%%%-----------------------------------------------------------------
set_request_timer(infinity) ->
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..7dc78e949a 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.
diff --git a/lib/common_test/src/ct_release_test.erl b/lib/common_test/src/ct_release_test.erl
index 6438ea01c1..4e0f88cf5f 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.
@@ -131,7 +131,7 @@
-include_lib("kernel/include/file.hrl").
%%-----------------------------------------------------------------
--define(testnode, otp_upgrade).
+-define(testnode, 'ct_release_test-upgrade').
-define(exclude_apps, [hipe, typer, dialyzer]). % never include these apps
%%-----------------------------------------------------------------
@@ -304,7 +304,13 @@ upgrade(Apps,Level,Callback,Config) ->
%% Note, we will not reach this if the test fails with a
%% timetrap timeout in the test suite! Thus we can have
%% hanging nodes...
- Nodes = nodes(),
+ Nodes = lists:filter(fun(Node) ->
+ case atom_to_list(Node) of
+ "ct_release_test-" ++_ -> true;
+ _ -> false
+ end
+ end,
+ nodes()),
[rpc:call(Node,erlang,halt,[]) || Node <- Nodes]
end.
@@ -328,7 +334,14 @@ upgrade(Apps,Level,Callback,Config) ->
%% ct_release_test:cleanup(Config).'''
%%
cleanup(Config) ->
- Nodes = [node_name(?testnode)|nodes()],
+ AllNodes = [node_name(?testnode)|nodes()],
+ Nodes = lists:filter(fun(Node) ->
+ case atom_to_list(Node) of
+ "ct_release_test-" ++_ -> true;
+ _ -> false
+ end
+ end,
+ AllNodes),
[rpc:call(Node,erlang,halt,[]) || Node <- Nodes],
Config.
@@ -455,9 +468,9 @@ get_rels(minor) ->
{CurrentMajor,Current}.
init_upgrade_test(FromVsn,ToVsn,OldRel) ->
- OtpRel = list_to_atom("otp-"++FromVsn),
+ Name = list_to_atom("ct_release_test-otp-"++FromVsn),
ct:log("Starting node to fetch application versions to upgrade from"),
- {ok,Node} = test_server:start_node(OtpRel,peer,[{erl,[OldRel]}]),
+ {ok,Node} = test_server:start_node(Name,peer,[{erl,[OldRel]}]),
{Apps,Path} = fetch_all_apps(Node),
test_server:stop_node(Node),
{FromVsn,ToVsn,Apps,Path}.
@@ -642,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]},
@@ -723,7 +732,7 @@ do_callback(Node,Mod,Func,Args) ->
ct:log("~p:~p/~w returned: ~p",[Mod,Func,length(Args),R]),
case R of
{badrpc,Error} ->
- test_server:fail({test_upgrade_callback,Mod,Func,Args,Error});
+ throw({fail,{test_upgrade_callback,Mod,Func,Args,Error}});
NewState ->
NewState
end.
@@ -753,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)],
diff --git a/lib/common_test/src/ct_repeat.erl b/lib/common_test/src/ct_repeat.erl
index 1cb32f5bcd..31c5755c7e 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.
diff --git a/lib/common_test/src/ct_rpc.erl b/lib/common_test/src/ct_rpc.erl
index 73520b3dd5..cbcc212bb8 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.
diff --git a/lib/common_test/src/ct_run.erl b/lib/common_test/src/ct_run.erl
index 39b2c2a8cd..1e5f935198 100644
--- a/lib/common_test/src/ct_run.erl
+++ b/lib/common_test/src/ct_run.erl
@@ -65,6 +65,7 @@
logdir,
logopts = [],
basic_html,
+ esc_chars = true,
verbosity = [],
config = [],
event_handlers = [],
@@ -346,6 +347,15 @@ script_start1(Parent, Args) ->
application:set_env(common_test, basic_html, true),
true
end,
+ %% esc_chars - used by ct_logs
+ EscChars = case proplists:get_value(no_esc_chars, Args) of
+ undefined ->
+ application:set_env(common_test, esc_chars, true),
+ undefined;
+ _ ->
+ application:set_env(common_test, esc_chars, false),
+ false
+ end,
%% disable_log_cache - used by ct_logs
case proplists:get_value(disable_log_cache, Args) of
undefined ->
@@ -359,6 +369,7 @@ script_start1(Parent, Args) ->
cover = Cover, cover_stop = CoverStop,
logdir = LogDir, logopts = LogOpts,
basic_html = BasicHtml,
+ esc_chars = EscChars,
verbosity = Verbosity,
event_handlers = EvHandlers,
ct_hooks = CTHooks,
@@ -587,6 +598,17 @@ combine_test_opts(TS, Specs, Opts) ->
BHBool
end,
+ EscChars =
+ case choose_val(Opts#opts.esc_chars,
+ TSOpts#opts.esc_chars) of
+ undefined ->
+ true;
+ ECBool ->
+ application:set_env(common_test, esc_chars,
+ ECBool),
+ ECBool
+ end,
+
Opts#opts{label = Label,
profile = Profile,
testspec_files = Specs,
@@ -595,6 +617,7 @@ combine_test_opts(TS, Specs, Opts) ->
logdir = which(logdir, LogDir),
logopts = AllLogOpts,
basic_html = BasicHtml,
+ esc_chars = EscChars,
verbosity = AllVerbosity,
silent_connections = AllSilentConns,
config = TSOpts#opts.config,
@@ -795,6 +818,7 @@ script_usage() ->
"\n\t [-scale_timetraps]"
"\n\t [-create_priv_dir auto_per_run | auto_per_tc | manual_per_tc]"
"\n\t [-basic_html]"
+ "\n\t [-no_esc_chars]"
"\n\t [-repeat N] |"
"\n\t [-duration HHMMSS [-force_stop [skip_rest]]] |"
"\n\t [-until [YYMoMoDD]HHMMSS [-force_stop [skip_rest]]]"
@@ -822,6 +846,7 @@ script_usage() ->
"\n\t [-scale_timetraps]"
"\n\t [-create_priv_dir auto_per_run | auto_per_tc | manual_per_tc]"
"\n\t [-basic_html]"
+ "\n\t [-no_esc_chars]"
"\n\t [-repeat N] |"
"\n\t [-duration HHMMSS [-force_stop [skip_rest]]] |"
"\n\t [-until [YYMoMoDD]HHMMSS [-force_stop [skip_rest]]]\n\n"),
@@ -847,7 +872,8 @@ script_usage() ->
"\n\t [-multiply_timetraps N]"
"\n\t [-scale_timetraps]"
"\n\t [-create_priv_dir auto_per_run | auto_per_tc | manual_per_tc]"
- "\n\t [-basic_html]\n\n").
+ "\n\t [-basic_html]"
+ "\n\t [-no_esc_chars]\n\n").
%%%-----------------------------------------------------------------
%%% @hidden
@@ -1089,7 +1115,17 @@ run_test2(StartOpts) ->
application:set_env(common_test, basic_html, BasicHtmlBool),
BasicHtmlBool
end,
-
+ %% esc_chars - used by ct_logs
+ EscChars =
+ case proplists:get_value(esc_chars, StartOpts) of
+ undefined ->
+ application:set_env(common_test, esc_chars, true),
+ undefined;
+ EscCharsBool ->
+ application:set_env(common_test, esc_chars, EscCharsBool),
+ EscCharsBool
+ end,
+ %% disable_log_cache - used by ct_logs
case proplists:get_value(disable_log_cache, StartOpts) of
undefined ->
application:set_env(common_test, disable_log_cache, false);
@@ -1104,6 +1140,7 @@ run_test2(StartOpts) ->
cover = Cover, cover_stop = CoverStop,
step = Step, logdir = LogDir,
logopts = LogOpts, basic_html = BasicHtml,
+ esc_chars = EscChars,
config = CfgFiles,
verbosity = Verbosity,
event_handlers = EvHandlers,
@@ -1445,6 +1482,7 @@ get_data_for_node(#testspec{label = Labels,
logdir = LogDirs,
logopts = LogOptsList,
basic_html = BHs,
+ esc_chars = EscChs,
stylesheet = SSs,
verbosity = VLvls,
silent_connections = SilentConnsList,
@@ -1472,6 +1510,7 @@ get_data_for_node(#testspec{label = Labels,
LOs -> LOs
end,
BasicHtml = proplists:get_value(Node, BHs),
+ EscChars = proplists:get_value(Node, EscChs),
Stylesheet = proplists:get_value(Node, SSs),
Verbosity = case proplists:get_value(Node, VLvls) of
undefined -> [];
@@ -1498,6 +1537,7 @@ get_data_for_node(#testspec{label = Labels,
logdir = LogDir,
logopts = LogOpts,
basic_html = BasicHtml,
+ esc_chars = EscChars,
stylesheet = Stylesheet,
verbosity = Verbosity,
silent_connections = SilentConns,
@@ -2055,6 +2095,13 @@ final_tests1([{TestDir,Suite,GrsOrCs}|Tests], Final, Skip, Bad) when
({skipped,Group,TCs}) ->
[ct_groups:make_conf(TestDir, Suite,
Group, [skipped], TCs)];
+ ({skipped,TC}) ->
+ case lists:member(TC, GrsOrCs) of
+ true ->
+ [];
+ false ->
+ [TC]
+ end;
({GrSpec = {GroupName,_},TCs}) ->
Props = [{override,GrSpec}],
[ct_groups:make_conf(TestDir, Suite,
@@ -2175,10 +2222,18 @@ do_run_test(Tests, Skip, Opts0) ->
%% test_server needs to know the include path too
InclPath = case application:get_env(common_test, include) of
{ok,Incls} -> Incls;
- _ -> []
+ _ -> []
end,
application:set_env(test_server, include, InclPath),
+ %% copy the escape characters setting to test_server
+ EscChars =
+ case application:get_env(common_test, esc_chars) of
+ {ok,ECBool} -> ECBool;
+ _ -> true
+ end,
+ application:set_env(test_server, esc_chars, EscChars),
+
test_server_ctrl:start_link(local),
%% let test_server expand the test tuples and count no of cases
@@ -3062,6 +3117,10 @@ opts2args(EnvStartOpts) ->
[{basic_html,[]}];
({basic_html,false}) ->
[];
+ ({esc_chars,false}) ->
+ [{no_esc_chars,[]}];
+ ({esc_chars,true}) ->
+ [];
({event_handler,EH}) when is_atom(EH) ->
[{event_handler,[atom_to_list(EH)]}];
({event_handler,EHs}) when is_list(EHs) ->
diff --git a/lib/common_test/src/ct_ssh.erl b/lib/common_test/src/ct_ssh.erl
index d19004fa2c..92d912052e 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.
diff --git a/lib/common_test/src/ct_telnet.erl b/lib/common_test/src/ct_telnet.erl
index 4d3fd2d094..f5f4f648f4 100644
--- a/lib/common_test/src/ct_telnet.erl
+++ b/lib/common_test/src/ct_telnet.erl
@@ -42,7 +42,8 @@
%% {reconnection_interval,Millisec},
%% {keep_alive,Bool},
%% {poll_limit,N},
-%% {poll_interval,Millisec}]}.</pre>
+%% {poll_interval,Millisec},
+%% {tcp_nodelay,Bool}]}.</pre>
%% <p><code>Millisec = integer(), N = integer()</code></p>
%% <p>Enter the <code>telnet_settings</code> term in a configuration
%% file included in the test and ct_telnet will retrieve the information
@@ -182,7 +183,8 @@
conn_to=?DEFAULT_TIMEOUT,
com_to=?DEFAULT_TIMEOUT,
reconns=?RECONNS,
- reconn_int=?RECONN_TIMEOUT}).
+ reconn_int=?RECONN_TIMEOUT,
+ tcp_nodelay=false}).
%%%-----------------------------------------------------------------
%%% @spec open(Name) -> {ok,Handle} | {error,Reason}
@@ -602,8 +604,18 @@ init(Name,{Ip,Port,Type},{TargetMod,KeepAlive,Extra}) ->
Settings ->
set_telnet_defaults(Settings,#state{})
end,
- case catch TargetMod:connect(Name,Ip,Port,S0#state.conn_to,
- KeepAlive,Extra) of
+ %% Handle old user versions of TargetMod
+ code:ensure_loaded(TargetMod),
+ try
+ case erlang:function_exported(TargetMod,connect,7) of
+ true ->
+ TargetMod:connect(Name,Ip,Port,S0#state.conn_to,
+ KeepAlive,S0#state.tcp_nodelay,Extra);
+ false ->
+ TargetMod:connect(Name,Ip,Port,S0#state.conn_to,
+ KeepAlive,Extra)
+ end
+ of
{ok,TelnPid} ->
put({ct_telnet_pid2name,TelnPid},Name),
S1 = S0#state{host=Ip,
@@ -625,15 +637,18 @@ init(Name,{Ip,Port,Type},{TargetMod,KeepAlive,Extra}) ->
"Connection timeout: ~p\n"
"Keep alive: ~w\n"
"Poll limit: ~w\n"
- "Poll interval: ~w",
+ "Poll interval: ~w\n"
+ "TCP nodelay: ~w",
[Ip,Port,S1#state.com_to,S1#state.reconns,
S1#state.reconn_int,S1#state.conn_to,KeepAlive,
- S1#state.poll_limit,S1#state.poll_interval]),
+ S1#state.poll_limit,S1#state.poll_interval,
+ S1#state.tcp_nodelay]),
{ok,TelnPid,S1};
- {'EXIT',Reason} ->
- {error,Reason};
Error ->
Error
+ catch
+ _:Reason ->
+ {error,Reason}
end.
type(telnet) -> ip;
@@ -653,6 +668,8 @@ set_telnet_defaults([{poll_limit,PL}|Ss],S) ->
set_telnet_defaults(Ss,S#state{poll_limit=PL});
set_telnet_defaults([{poll_interval,PI}|Ss],S) ->
set_telnet_defaults(Ss,S#state{poll_interval=PI});
+set_telnet_defaults([{tcp_nodelay,NoDelay}|Ss],S) ->
+ set_telnet_defaults(Ss,S#state{tcp_nodelay=NoDelay});
set_telnet_defaults([Unknown|Ss],S) ->
force_log(S,error,
"Bad element in telnet_settings: ~p",[Unknown]),
@@ -794,8 +811,17 @@ reconnect(Ip,Port,N,State=#state{name=Name,
keep_alive=KeepAlive,
extra=Extra,
conn_to=ConnTo,
- reconn_int=ReconnInt}) ->
- case TargetMod:connect(Name,Ip,Port,ConnTo,KeepAlive,Extra) of
+ reconn_int=ReconnInt,
+ tcp_nodelay=NoDelay}) ->
+ %% Handle old user versions of TargetMod
+ ConnResult =
+ case erlang:function_exported(TargetMod,connect,7) of
+ true ->
+ TargetMod:connect(Name,Ip,Port,ConnTo,KeepAlive,NoDelay,Extra);
+ false ->
+ TargetMod:connect(Name,Ip,Port,ConnTo,KeepAlive,Extra)
+ end,
+ case ConnResult of
{ok,NewPid} ->
put({ct_telnet_pid2name,NewPid},Name),
{ok, NewPid, State#state{teln_pid=NewPid}};
diff --git a/lib/common_test/src/ct_telnet_client.erl b/lib/common_test/src/ct_telnet_client.erl
index 99d683244c..1f1311776f 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.
@@ -35,7 +35,7 @@
%%-define(debug, true).
--export([open/2, open/3, open/4, open/5, close/1]).
+-export([open/2, open/3, open/4, open/5, open/6, close/1]).
-export([send_data/2, send_data/3, get_data/1]).
-define(TELNET_PORT, 23).
@@ -70,19 +70,22 @@
-record(state,{conn_name, get_data, keep_alive=true, log_pos=1}).
open(Server, ConnName) ->
- open(Server, ?TELNET_PORT, ?OPEN_TIMEOUT, true, ConnName).
+ open(Server, ?TELNET_PORT, ?OPEN_TIMEOUT, true, false, ConnName).
open(Server, Port, ConnName) ->
- open(Server, Port, ?OPEN_TIMEOUT, true, ConnName).
+ open(Server, Port, ?OPEN_TIMEOUT, true, false, ConnName).
open(Server, Port, Timeout, ConnName) ->
- open(Server, Port, Timeout, true, ConnName).
+ open(Server, Port, Timeout, true, false, ConnName).
open(Server, Port, Timeout, KeepAlive, ConnName) ->
+ open(Server, Port, Timeout, KeepAlive, false, ConnName).
+
+open(Server, Port, Timeout, KeepAlive, NoDelay, ConnName) ->
Self = self(),
Pid = spawn(fun() ->
init(Self, Server, Port, Timeout,
- KeepAlive, ConnName)
+ KeepAlive, NoDelay, ConnName)
end),
receive
{open,Pid} ->
@@ -114,8 +117,8 @@ get_data(Pid) ->
%%%-----------------------------------------------------------------
%%% Internal functions
-init(Parent, Server, Port, Timeout, KeepAlive, ConnName) ->
- case gen_tcp:connect(Server, Port, [list,{packet,0},{nodelay,true}], Timeout) of
+init(Parent, Server, Port, Timeout, KeepAlive, NoDelay, ConnName) ->
+ case gen_tcp:connect(Server, Port, [list,{packet,0},{nodelay,NoDelay}], Timeout) of
{ok,Sock} ->
dbg("~p connected to: ~p (port: ~w, keep_alive: ~w)\n",
[ConnName,Server,Port,KeepAlive]),
diff --git a/lib/common_test/src/ct_testspec.erl b/lib/common_test/src/ct_testspec.erl
index 5d5448f352..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.
@@ -70,13 +70,17 @@ prepare_tests(TestSpec) when is_record(TestSpec,testspec) ->
Tests = TestSpec#testspec.tests,
%% Sort Tests into "flat" Run and Skip lists (not sorted per node).
{Run,Skip} = get_run_and_skip(Tests,[],[]),
+
%% Create initial list of {Node,{Run,Skip}} tuples
NodeList = lists:map(fun(N) -> {N,{[],[]}} end, list_nodes(TestSpec)),
+
%% Get all Run tests sorted per node basis.
NodeList1 = run_per_node(Run,NodeList,
- TestSpec#testspec.merge_tests),
+ TestSpec#testspec.merge_tests),
+
%% Get all Skip entries sorted per node basis.
NodeList2 = skip_per_node(Skip,NodeList1),
+
%% Change representation.
Result=
lists:map(fun({Node,{Run1,Skip1}}) ->
@@ -103,7 +107,7 @@ run_per_node([{{Node,Dir},Test}|Ts],Result,MergeTests) ->
true ->
merge_tests(Dir,Test,Run)
end,
- run_per_node(Ts,insert_in_order({Node,{Run1,Skip}},Result),
+ run_per_node(Ts,insert_in_order({Node,{Run1,Skip}},Result,replace),
MergeTests);
run_per_node([],Result,_) ->
Result.
@@ -140,7 +144,7 @@ merge_suites(Dir,Test,[]) ->
skip_per_node([{{Node,Dir},Test}|Ts],Result) ->
{value,{Node,{Run,Skip}}} = lists:keysearch(Node,1,Result),
Skip1 = [{Dir,Test}|Skip],
- skip_per_node(Ts,insert_in_order({Node,{Run,Skip1}},Result));
+ skip_per_node(Ts,insert_in_order({Node,{Run,Skip1}},Result,replace));
skip_per_node([],Result) ->
Result.
@@ -156,7 +160,7 @@ skip_per_node([],Result) ->
%%
%% Skip entry: {Suites,Comment} or {Suite,Cases,Comment}
%%
-get_run_and_skip([{{Node,Dir},Suites}|Tests],Run,Skip) ->
+get_run_and_skip([{{Node,Dir},Suites}|Tests],Run,Skip) ->
TestDir = ct_util:get_testdir(Dir,catch element(1,hd(Suites))),
case lists:keysearch(all,1,Suites) of
{value,_} -> % all Suites in Dir
@@ -183,18 +187,33 @@ prepare_suites(Node,Dir,[{Suite,Cases}|Suites],Run,Skip) ->
[[{{Node,Dir},{Suite,all}}]|Run],
[Skipped|Skip]);
false ->
- {RL,SL} = prepare_cases(Node,Dir,Suite,Cases),
- prepare_suites(Node,Dir,Suites,[RL|Run],[SL|Skip])
+ {Run1,Skip1} = prepare_cases(Node,Dir,Suite,Cases,Run,Skip),
+ prepare_suites(Node,Dir,Suites,Run1,Skip1)
end;
prepare_suites(_Node,_Dir,[],Run,Skip) ->
{lists:flatten(lists:reverse(Run)),
lists:flatten(lists:reverse(Skip))}.
-prepare_cases(Node,Dir,Suite,Cases) ->
+prepare_cases(Node,Dir,Suite,Cases,Run,Skip) ->
case get_skipped_cases(Node,Dir,Suite,Cases) of
- SkipAll=[{{Node,Dir},{Suite,_Cmt}}] -> % all cases to be skipped
- %% note: this adds an 'all' test even if only skip is specified
- {[{{Node,Dir},{Suite,all}}],SkipAll};
+ [SkipAll={{Node,Dir},{Suite,_Cmt}}] -> % all cases to be skipped
+ case lists:any(fun({{N,D},{S,all}}) when N == Node,
+ D == Dir,
+ S == Suite ->
+ true;
+ ({{N,D},{S,Cs}}) when N == Node,
+ D == Dir,
+ S == Suite ->
+ lists:member(all,Cs);
+ (_) -> false
+ end, lists:flatten(Run)) of
+ true ->
+ {Run,[SkipAll|Skip]};
+ false ->
+ %% note: this adds an 'all' test even if
+ %% only skip is specified
+ {[{{Node,Dir},{Suite,all}}|Run],[SkipAll|Skip]}
+ end;
Skipped ->
%% note: this adds a test even if only skip is specified
PrepC = lists:foldr(fun({{G,Cs},{skip,_Cmt}}, Acc) when
@@ -210,11 +229,11 @@ prepare_cases(Node,Dir,Suite,Cases) ->
true ->
Acc;
false ->
- [C|Acc]
+ [{skipped,C}|Acc]
end;
(C,Acc) -> [C|Acc]
end, [], Cases),
- {{{Node,Dir},{Suite,PrepC}},Skipped}
+ {[{{Node,Dir},{Suite,PrepC}}|Run],[Skipped|Skip]}
end.
get_skipped_suites(Node,Dir,Suites) ->
@@ -431,6 +450,7 @@ collect_tests({Replace,Terms},TestSpec=#testspec{alias=As,nodes=Ns},Relaxed) ->
merge_tests = MergeTestsDef}),
TestSpec2 = get_all_nodes(Terms2,TestSpec1),
{Terms3, TestSpec3} = filter_init_terms(Terms2, [], TestSpec2),
+
add_tests(Terms3,TestSpec3).
%% replace names (atoms) in the testspec matching those in 'define' terms by
@@ -1126,8 +1146,9 @@ should_be_added(Tag,Node,_Data,Spec) ->
if
%% list terms *without* possible duplicates here
Tag == logdir; Tag == logopts;
- Tag == basic_html; Tag == label;
- Tag == auto_compile; Tag == abort_if_missing_suites;
+ Tag == basic_html; Tag == esc_chars;
+ Tag == label; Tag == auto_compile;
+ Tag == abort_if_missing_suites;
Tag == stylesheet; Tag == verbosity;
Tag == silent_connections ->
lists:keymember(ref2node(Node,Spec#testspec.nodes),1,
@@ -1257,7 +1278,7 @@ insert_groups1(Suite,Groups,Suites0) ->
Suites0;
{value,{Suite,GrAndCases0}} ->
GrAndCases = insert_groups2(Groups,GrAndCases0),
- insert_in_order({Suite,GrAndCases},Suites0);
+ insert_in_order({Suite,GrAndCases},Suites0,replace);
false ->
insert_in_order({Suite,Groups},Suites0)
end.
@@ -1282,7 +1303,7 @@ insert_cases(Node,Dir,Suite,Cases,Tests,false) when is_list(Cases) ->
insert_cases(Node,Dir,Suite,Cases,Tests,true) when is_list(Cases) ->
{Tests1,Done} =
lists:foldr(fun(All={{N,D},[{all,_}]},{Merged,_}) when N == Node,
- D == Dir ->
+ D == Dir ->
{[All|Merged],true};
({{N,D},Suites0},{Merged,_}) when N == Node,
D == Dir ->
@@ -1312,7 +1333,7 @@ insert_cases1(Suite,Cases,Suites0) ->
Suites0;
{value,{Suite,Cases0}} ->
Cases1 = insert_in_order(Cases,Cases0),
- insert_in_order({Suite,Cases1},Suites0);
+ insert_in_order({Suite,Cases1},Suites0,replace);
false ->
insert_in_order({Suite,Cases},Suites0)
end.
@@ -1369,9 +1390,9 @@ skip_groups1(Suite,Groups,Cmt,Suites0) ->
case lists:keysearch(Suite,1,Suites0) of
{value,{Suite,GrAndCases0}} ->
GrAndCases1 = GrAndCases0 ++ SkipGroups,
- insert_in_order({Suite,GrAndCases1},Suites0);
+ insert_in_order({Suite,GrAndCases1},Suites0,replace);
false ->
- insert_in_order({Suite,SkipGroups},Suites0)
+ insert_in_order({Suite,SkipGroups},Suites0,replace)
end.
skip_cases(Node,Dir,Suite,Cases,Cmt,Tests,false) when is_list(Cases) ->
@@ -1380,7 +1401,7 @@ skip_cases(Node,Dir,Suite,Cases,Cmt,Tests,false) when is_list(Cases) ->
skip_cases(Node,Dir,Suite,Cases,Cmt,Tests,true) when is_list(Cases) ->
{Tests1,Done} =
lists:foldr(fun({{N,D},Suites0},{Merged,_}) when N == Node,
- D == Dir ->
+ D == Dir ->
Suites1 = skip_cases1(Suite,Cases,Cmt,Suites0),
{[{{N,D},Suites1}|Merged],true};
(T,{Merged,Match}) ->
@@ -1401,32 +1422,55 @@ skip_cases1(Suite,Cases,Cmt,Suites0) ->
case lists:keysearch(Suite,1,Suites0) of
{value,{Suite,Cases0}} ->
Cases1 = Cases0 ++ SkipCases,
- insert_in_order({Suite,Cases1},Suites0);
+ insert_in_order({Suite,Cases1},Suites0,replace);
false ->
- insert_in_order({Suite,SkipCases},Suites0)
+ case Suites0 of
+ [{all,_}=All|Skips]->
+ [All|Skips++[{Suite,SkipCases}]];
+ _ ->
+ insert_in_order({Suite,SkipCases},Suites0,replace)
+ end
end.
append(Elem, List) ->
List ++ [Elem].
-insert_in_order([E|Es],List) ->
- List1 = insert_elem(E,List,[]),
- insert_in_order(Es,List1);
-insert_in_order([],List) ->
+insert_in_order(Elems,Dest) ->
+ insert_in_order1(Elems,Dest,false).
+
+insert_in_order(Elems,Dest,replace) ->
+ insert_in_order1(Elems,Dest,true).
+
+insert_in_order1([_E|Es],all,Replace) ->
+ insert_in_order1(Es,all,Replace);
+
+insert_in_order1([E|Es],List,Replace) ->
+ List1 = insert_elem(E,List,[],Replace),
+ insert_in_order1(Es,List1,Replace);
+insert_in_order1([],List,_Replace) ->
List;
-insert_in_order(E,List) ->
- insert_elem(E,List,[]).
+insert_in_order1(E,List,Replace) ->
+ insert_elem(E,List,[],Replace).
+
-%% replace an existing entry (same key) or add last in list
-insert_elem({Key,_}=E,[{Key,_}|Rest],SoFar) ->
+insert_elem({Key,_}=E,[{Key,_}|Rest],SoFar,true) ->
lists:reverse([E|SoFar]) ++ Rest;
-insert_elem({E,_},[E|Rest],SoFar) ->
+insert_elem({E,_},[E|Rest],SoFar,true) ->
lists:reverse([E|SoFar]) ++ Rest;
-insert_elem(E,[E|Rest],SoFar) ->
+insert_elem(E,[E|Rest],SoFar,true) ->
+ lists:reverse([E|SoFar]) ++ Rest;
+
+insert_elem({all,_}=E,_,SoFar,_Replace) ->
+ lists:reverse([E|SoFar]);
+insert_elem(_E,[all|_],SoFar,_Replace) ->
+ lists:reverse(SoFar);
+insert_elem(_E,[{all,_}],SoFar,_Replace) ->
+ lists:reverse(SoFar);
+insert_elem({Key,_}=E,[{Key,[]}|Rest],SoFar,_Replace) ->
lists:reverse([E|SoFar]) ++ Rest;
-insert_elem(E,[E1|Rest],SoFar) ->
- insert_elem(E,Rest,[E1|SoFar]);
-insert_elem(E,[],SoFar) ->
+insert_elem(E,[E1|Rest],SoFar,Replace) ->
+ insert_elem(E,Rest,[E1|SoFar],Replace);
+insert_elem(E,[],SoFar,_Replace) ->
lists:reverse([E|SoFar]).
ref2node(all_nodes,_Refs) ->
@@ -1501,6 +1545,8 @@ valid_terms() ->
{logopts,3},
{basic_html,2},
{basic_html,3},
+ {esc_chars,2},
+ {esc_chars,3},
{verbosity,2},
{verbosity,3},
{silent_connections,2},
diff --git a/lib/common_test/src/ct_util.erl b/lib/common_test/src/ct_util.erl
index 445fce1db8..d5a8e3fbc0 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.
@@ -459,6 +459,7 @@ loop(Mode,TestData,StartDir) ->
error:badarg -> []
end,
ct_hooks:terminate(Callbacks),
+
close_connections(ets:tab2list(?conn_table)),
ets:delete(?conn_table),
ets:delete(?board_table),
@@ -485,6 +486,8 @@ loop(Mode,TestData,StartDir) ->
{'EXIT',Pid,Reason} ->
case ets:lookup(?conn_table,Pid) of
[#conn{address=A,callback=CB}] ->
+ ErrorStr = io_lib:format("~tp", [Reason]),
+ ErrorHtml = ct_logs:escape_chars(ErrorStr),
%% A connection crashed - remove the connection but don't die
ct_logs:tc_log_async(ct_error_notify,
?MAX_IMPORTANCE,
@@ -492,8 +495,8 @@ loop(Mode,TestData,StartDir) ->
"Connection process died: "
"Pid: ~w, Address: ~p, "
"Callback: ~w\n"
- "Reason: ~p\n\n",
- [Pid,A,CB,Reason]),
+ "Reason: ~ts\n\n",
+ [Pid,A,CB,ErrorHtml]),
catch CB:close(Pid),
%% in case CB:close failed to do this:
unregister_connection(Pid),
diff --git a/lib/common_test/src/ct_util.hrl b/lib/common_test/src/ct_util.hrl
index 2c1954c2b3..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.
@@ -37,6 +37,7 @@
logdir=["."],
logopts=[],
basic_html=[],
+ esc_chars=[],
verbosity=[],
silent_connections=[],
cover=[],
diff --git a/lib/common_test/src/ct_webtool.erl b/lib/common_test/src/ct_webtool.erl
index 014487eb10..6cbcd98cc3 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.
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 9b3dc0b5f1..0501c6ed1c 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.
@@ -132,7 +132,7 @@ pre_init_per_testcase(TestCase,Config,CthState) ->
[S,ct_logs:uri(L),filename:basename(L)])
|| {S,L} <- Ls] ++
"</table>",
- io:format(Str,[]),
+ ct:log(Str,[],[no_css]),
{ConnMod,{LogType,Ls}};
_ ->
{ConnMod,{LogType,[]}}
diff --git a/lib/common_test/src/cth_log_redirect.erl b/lib/common_test/src/cth_log_redirect.erl
index e6970a2bad..33a3813a16 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.
@@ -30,7 +30,8 @@
pre_init_per_suite/3, pre_end_per_suite/3, post_end_per_suite/4,
pre_init_per_group/3, post_init_per_group/4,
pre_end_per_group/3, post_end_per_group/4,
- pre_init_per_testcase/3, post_end_per_testcase/4]).
+ pre_init_per_testcase/3, post_init_per_testcase/4,
+ pre_end_per_testcase/3, post_end_per_testcase/4]).
%% Event handler Callbacks
-export([init/1,
@@ -89,6 +90,12 @@ pre_init_per_testcase(TC, Config, State) ->
set_curr_func(TC, Config),
{Config, State}.
+post_init_per_testcase(_TC, _Config, Return, State) ->
+ {Return, State}.
+
+pre_end_per_testcase(_TC, Config, State) ->
+ {Config, State}.
+
post_end_per_testcase(_TC, _Config, Result, State) ->
%% Make sure that the event queue is flushed
%% before ending this test case.
@@ -123,7 +130,14 @@ handle_event(Event, #eh_state{log_func = LogFunc} = State) ->
tag_event(Event)),
if is_list(SReport) ->
SaslHeader = format_header(State),
- ct_logs:LogFunc(sasl, ?STD_IMPORTANCE, SaslHeader, SReport, []);
+ case LogFunc of
+ tc_log ->
+ ct_logs:tc_log(sasl, ?STD_IMPORTANCE,
+ SaslHeader, SReport, [], []);
+ tc_log_async ->
+ ct_logs:tc_log_async(sasl, ?STD_IMPORTANCE,
+ SaslHeader, SReport, [])
+ end;
true -> %% Report is an atom if no logging is to be done
ignore
end
@@ -132,7 +146,14 @@ handle_event(Event, #eh_state{log_func = LogFunc} = State) ->
tag_event(Event),io_lib),
if is_list(EReport) ->
ErrHeader = format_header(State),
- ct_logs:LogFunc(error_logger, ?STD_IMPORTANCE, ErrHeader, EReport, []);
+ case LogFunc of
+ tc_log ->
+ ct_logs:tc_log(error_logger, ?STD_IMPORTANCE,
+ ErrHeader, EReport, [], []);
+ tc_log_async ->
+ ct_logs:tc_log_async(error_logger, ?STD_IMPORTANCE,
+ ErrHeader, EReport, [])
+ end;
true -> %% Report is an atom if no logging is to be done
ignore
end,
diff --git a/lib/common_test/src/cth_surefire.erl b/lib/common_test/src/cth_surefire.erl
index 31a8e1c076..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.
@@ -82,7 +82,8 @@ init(Path, Opts) ->
url_base = proplists:get_value(url_base,Opts),
timer = ?now }.
-pre_init_per_suite(Suite,SkipOrFail,State) when is_tuple(SkipOrFail) ->
+pre_init_per_suite(Suite,SkipOrFail,#state{ test_cases = [] } = State)
+ when is_tuple(SkipOrFail) ->
{SkipOrFail, init_tc(State#state{curr_suite = Suite,
curr_suite_ts = ?now},
SkipOrFail) };
diff --git a/lib/common_test/src/erl2html2.erl b/lib/common_test/src/erl2html2.erl
index e281c9de1b..a1e0bf3879 100644
--- a/lib/common_test/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.
@@ -44,7 +44,7 @@ convert(File, Dest, InclPath) ->
"<html>\n"
"<head>\n"
"<meta http-equiv=\"Content-Type\" content=\"text/html;"
- "charset=",html_encoding(Encoding),"\"/>\n"
+ "charset=",html_encoding(Encoding),"\"/></meta>\n"
"<title>", to_raw_list(File,Encoding), "</title>\n"
"</head>\n\n"
"<body bgcolor=\"white\" text=\"black\""
diff --git a/lib/common_test/src/test_server.app.src b/lib/common_test/src/test_server.app.src
deleted file mode 100644
index 334be8109d..0000000000
--- a/lib/common_test/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/common_test/src/test_server.appup.src b/lib/common_test/src/test_server.appup.src
deleted file mode 100644
index 7c4aa630ae..0000000000
--- a/lib/common_test/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/common_test/src/test_server.erl b/lib/common_test/src/test_server.erl
index 73803030a3..919526c5d7 100644
--- a/lib/common_test/src/test_server.erl
+++ b/lib/common_test/src/test_server.erl
@@ -63,13 +63,11 @@
init_target_info() ->
[$.|Emu] = code:objfile_extension(),
{_, OTPRel} = init:script_id(),
- TestServerDir = filename:absname(filename:dirname(code:which(?MODULE))),
#target_info{os_family=test_server_sup:get_os_family(),
os_type=os:type(),
version=erlang:system_info(version),
system_version=erlang:system_info(system_version),
root_dir=code:root_dir(),
- test_server_dir=TestServerDir,
emulator=Emu,
otp_release=OTPRel,
username=test_server_sup:get_username(),
@@ -716,10 +714,10 @@ call_end_conf(Mod,Func,TCPid,TCExitReason,Loc,Conf,TVal) ->
Starter ! {self(),{call_end_conf,Data,ok}}
end);
true ->
- do_call_end_conf(Starter,Mod,Func,Data,Conf,TVal)
+ do_call_end_conf(Starter,Mod,Func,Data,TCExitReason,Conf,TVal)
end.
-do_call_end_conf(Starter,Mod,Func,Data,Conf,TVal) ->
+do_call_end_conf(Starter,Mod,Func,Data,TCExitReason,Conf,TVal) ->
EndConfProc =
fun() ->
process_flag(trap_exit,true), % to catch timetraps
@@ -727,16 +725,25 @@ do_call_end_conf(Starter,Mod,Func,Data,Conf,TVal) ->
EndConfApply =
fun() ->
timetrap(TVal),
- try apply(Mod,end_per_testcase,[Func,Conf]) of
+ %% We can't handle fails or skips here
+ %% (neither input nor output). The error can
+ %% be read from Conf though (tc_status).
+ EndConf =
+ case do_init_tc_call(Mod,{end_per_testcase,Func},
+ [Conf],
+ {TCExitReason,[Conf]}) of
+ {_,[EPTCInit]} when is_list(EPTCInit) ->
+ EPTCInit;
+ _ ->
+ Conf
+ end,
+ try apply(Mod,end_per_testcase,[Func,EndConf]) of
_ -> ok
catch
- _:Why ->
+ _:Error ->
timer:sleep(1),
- group_leader() ! {printout,12,
- "WARNING! "
- "~w:end_per_testcase(~w, ~p)"
- " crashed!\n\tReason: ~p\n",
- [Mod,Func,Conf,Why]}
+ print_end_conf_result(Mod,Func,Conf,
+ "crashed",Error)
end,
Supervisor ! {self(),end_conf}
end,
@@ -745,10 +752,7 @@ do_call_end_conf(Starter,Mod,Func,Data,Conf,TVal) ->
{Pid,end_conf} ->
Starter ! {self(),{call_end_conf,Data,ok}};
{'EXIT',Pid,Reason} ->
- group_leader() ! {printout,12,
- "WARNING! ~w:end_per_testcase(~w, ~p)"
- " failed!\n\tReason: ~p\n",
- [Mod,Func,Conf,Reason]},
+ print_end_conf_result(Mod,Func,Conf,"failed",Reason),
Starter ! {self(),{call_end_conf,Data,{error,Reason}}};
{'EXIT',_OtherPid,Reason} ->
%% Probably the parent - not much to do about that
@@ -757,28 +761,55 @@ do_call_end_conf(Starter,Mod,Func,Data,Conf,TVal) ->
end,
spawn_link(EndConfProc).
-spawn_fw_call(Mod,{init_per_testcase,Func},CurrConf,Pid,
- {timetrap_timeout,TVal}=Why,
- Loc,SendTo) ->
+print_end_conf_result(Mod,Func,Conf,Cause,Error) ->
+ Str2Print =
+ fun(NoHTML) when NoHTML == stdout; NoHTML == major ->
+ io_lib:format("WARNING! "
+ "~w:end_per_testcase(~w, ~tp)"
+ " ~s!\n\tReason: ~tp\n",
+ [Mod,Func,Conf,Cause,Error]);
+ (minor) ->
+ ErrorStr = test_server_ctrl:escape_chars(Error),
+ io_lib:format("WARNING! "
+ "~w:end_per_testcase(~w, ~tp)"
+ " ~s!\n\tReason: ~ts\n",
+ [Mod,Func,Conf,Cause,ErrorStr])
+ end,
+ group_leader() ! {printout,12,Str2Print}.
+
+
+spawn_fw_call(Mod,IPTC={init_per_testcase,Func},CurrConf,Pid,
+ Why,Loc,SendTo) ->
FwCall =
fun() ->
Skip = {skip,{failed,{Mod,init_per_testcase,Why}}},
%% if init_per_testcase fails, the test case
%% should be skipped
- try do_end_tc_call(Mod,Func, {Pid,Skip,[CurrConf]}, Why) of
+ try begin do_end_tc_call(Mod,IPTC, {Pid,Skip,[CurrConf]}, Why),
+ do_init_tc_call(Mod,{end_per_testcase,Func},
+ [CurrConf],{ok,[CurrConf]}),
+ do_end_tc_call(Mod,{end_per_testcase,Func},
+ {Pid,Skip,[CurrConf]}, Why) end of
_ -> ok
catch
_:FwEndTCErr ->
exit({fw_notify_done,end_tc,FwEndTCErr})
end,
+ Time = case Why of
+ {timetrap_timeout,TVal} -> TVal/1000;
+ _ -> died
+ end,
+ group_leader() ! {printout,12,
+ "ERROR! ~w:init_per_testcase(~w, ~p)"
+ " failed!\n\tReason: ~tp\n",
+ [Mod,Func,CurrConf,Why]},
%% finished, report back
- SendTo ! {self(),fw_notify_done,
- {TVal/1000,Skip,Loc,[],undefined}}
+ SendTo ! {self(),fw_notify_done,{Time,Skip,Loc,[],undefined}}
end,
spawn_link(FwCall);
-spawn_fw_call(Mod,{end_per_testcase,Func},EndConf,Pid,
- {timetrap_timeout,TVal}=Why,_Loc,SendTo) ->
+spawn_fw_call(Mod,EPTC={end_per_testcase,Func},EndConf,Pid,
+ Why,_Loc,SendTo) ->
FwCall =
fun() ->
{RetVal,Report} =
@@ -792,24 +823,38 @@ spawn_fw_call(Mod,{end_per_testcase,Func},EndConf,Pid,
E = {failed,{Mod,end_per_testcase,Why}},
{Result,E}
end,
- group_leader() ! {printout,12,
- "WARNING! ~w:end_per_testcase(~w, ~p)"
- " failed!\n\tReason: timetrap timeout"
- " after ~w ms!\n", [Mod,Func,EndConf,TVal]},
- FailLoc = proplists:get_value(tc_fail_loc, EndConf),
- try do_end_tc_call(Mod,Func,
- {Pid,Report,[EndConf]}, Why) of
+ {Time,Warn} =
+ case Why of
+ {timetrap_timeout,TVal} ->
+ group_leader() !
+ {printout,12,
+ "WARNING! ~w:end_per_testcase(~w, ~p)"
+ " failed!\n\tReason: timetrap timeout"
+ " after ~w ms!\n", [Mod,Func,EndConf,TVal]},
+ W = "<font color=\"red\">"
+ "WARNING: end_per_testcase timed out!</font>",
+ {TVal/1000,W};
+ _ ->
+ group_leader() !
+ {printout,12,
+ "WARNING! ~w:end_per_testcase(~w, ~p)"
+ " failed!\n\tReason: ~tp\n",
+ [Mod,Func,EndConf,Why]},
+ W = "<font color=\"red\">"
+ "WARNING: end_per_testcase failed!</font>",
+ {died,W}
+ end,
+ try do_end_tc_call(Mod,EPTC,{Pid,Report,[EndConf]}, Why) of
_ -> ok
catch
_:FwEndTCErr ->
exit({fw_notify_done,end_tc,FwEndTCErr})
end,
- Warn = "<font color=\"red\">"
- "WARNING: end_per_testcase timed out!</font>",
+ FailLoc = proplists:get_value(tc_fail_loc, EndConf),
%% finished, report back (if end_per_testcase fails, a warning
%% should be printed as part of the comment)
SendTo ! {self(),fw_notify_done,
- {TVal/1000,RetVal,FailLoc,[],Warn}}
+ {Time,RetVal,FailLoc,[],Warn}}
end,
spawn_link(FwCall);
@@ -832,10 +877,12 @@ spawn_fw_call(FwMod,FwFunc,_,_Pid,{framework_error,FwError},_,SendTo) ->
spawn_link(FwCall);
spawn_fw_call(Mod,Func,CurrConf,Pid,Error,Loc,SendTo) ->
- Func1 = case Func of
- {_InitOrEndPerTC,F} -> F;
- F -> F
- end,
+ {Func1,EndTCFunc} = case Func of
+ CF when CF == init_per_suite; CF == end_per_suite;
+ CF == init_per_group; CF == end_per_group ->
+ {CF,CF};
+ TC -> {TC,{end_per_testcase,TC}}
+ end,
FwCall =
fun() ->
try fw_error_notify(Mod,Func1,[],
@@ -847,8 +894,7 @@ spawn_fw_call(Mod,Func,CurrConf,Pid,Error,Loc,SendTo) ->
FwErrorNotifyErr})
end,
Conf = [{tc_status,{failed,Error}}|CurrConf],
- try do_end_tc_call(Mod,Func1,
- {Pid,Error,[Conf]},Error) of
+ try do_end_tc_call(Mod,EndTCFunc,{Pid,Error,[Conf]},Error) of
_ -> ok
catch
_:FwEndTCErr ->
@@ -925,32 +971,38 @@ run_test_case_eval(Mod, Func, Args0, Name, Ref, RunInit,
Where = [{Mod,Func}],
put(test_server_loc, Where),
- FWInitResult = test_server_sup:framework_call(init_tc,[Mod,Func,Args0],
- {ok,Args0}),
+ FWInitFunc = case RunInit of
+ run_init -> {init_per_testcase,Func};
+ _ -> Func
+ end,
+
+ FWInitResult0 = do_init_tc_call(Mod,FWInitFunc,Args0,{ok,Args0}),
+
set_tc_state(running),
{{Time,Value},Loc,Opts} =
- case FWInitResult of
+ case FWInitResult0 of
{ok,Args} ->
run_test_case_eval1(Mod, Func, Args, Name, RunInit, TCCallback);
Error = {error,_Reason} ->
- NewResult = do_end_tc_call(Mod,Func, {Error,Args0},
+ NewResult = do_end_tc_call(Mod,FWInitFunc, {Error,Args0},
{auto_skip,{failed,Error}}),
{{0,NewResult},Where,[]};
{fail,Reason} ->
- Conf = [{tc_status,{failed,Reason}} | hd(Args0)],
+ Conf = [{tc_status,{failed,Reason}} | hd(Args0)],
fw_error_notify(Mod, Func, Conf, Reason),
- NewResult = do_end_tc_call(Mod,Func, {{error,Reason},[Conf]},
+ NewResult = do_end_tc_call(Mod,FWInitFunc,
+ {{error,Reason},[Conf]},
{fail,Reason}),
{{0,NewResult},Where,[]};
Skip = {SkipType,_Reason} when SkipType == skip;
SkipType == skipped ->
- NewResult = do_end_tc_call(Mod,Func,
+ NewResult = do_end_tc_call(Mod,FWInitFunc,
{Skip,Args0}, Skip),
{{0,NewResult},Where,[]};
AutoSkip = {auto_skip,_Reason} ->
%% special case where a conf case "pretends" to be skipped
NewResult =
- do_end_tc_call(Mod,Func, {AutoSkip,Args0}, AutoSkip),
+ do_end_tc_call(Mod,FWInitFunc, {AutoSkip,Args0}, AutoSkip),
{{0,NewResult},Where,[]}
end,
exit({Ref,Time,Value,Loc,Opts}).
@@ -965,31 +1017,41 @@ run_test_case_eval1(Mod, Func, Args, Name, RunInit, TCCallback) ->
SkipType == skipped ->
Line = get_loc(),
Conf = [{tc_status,{skipped,Reason}}|hd(Args)],
- NewRes = do_end_tc_call(Mod,Func,
+ NewRes = do_end_tc_call(Mod,{init_per_testcase,Func},
{Skip,[Conf]}, Skip),
{{0,NewRes},Line,[]};
{skip_and_save,Reason,SaveCfg} ->
Line = get_loc(),
Conf = [{tc_status,{skipped,Reason}},
{save_config,SaveCfg}|hd(Args)],
- NewRes = do_end_tc_call(Mod,Func, {{skip,Reason},[Conf]},
+ NewRes = do_end_tc_call(Mod,{init_per_testcase,Func},
+ {{skip,Reason},[Conf]},
{skip,Reason}),
{{0,NewRes},Line,[]};
FailTC = {fail,Reason} -> % user fails the testcase
EndConf = [{tc_status,{failed,Reason}} | hd(Args)],
fw_error_notify(Mod, Func, EndConf, Reason),
- NewRes = do_end_tc_call(Mod,Func,
+ NewRes = do_end_tc_call(Mod,{init_per_testcase,Func},
{{error,Reason},[EndConf]},
FailTC),
{{0,NewRes},[{Mod,Func}],[]};
{ok,NewConf} ->
- %% call user callback function if defined
- NewConf1 =
- user_callback(TCCallback, Mod, Func, init, NewConf),
- %% save current state in controller loop
- set_tc_state(tc, NewConf1),
- %% execute the test case
- {{T,Return},Loc} = {ts_tc(Mod,Func,[NewConf1]), get_loc()},
+ IPTCEndRes = do_end_tc_call(Mod,{init_per_testcase,Func},
+ {ok,[NewConf]}, NewConf),
+ {{T,Return},Loc,NewConf1} =
+ if not is_list(IPTCEndRes) ->
+ %% received skip or fail, not config
+ {{0,IPTCEndRes},undefined,NewConf};
+ true ->
+ %% call user callback function if defined
+ NewConfUC =
+ user_callback(TCCallback, Mod, Func,
+ init, IPTCEndRes),
+ %% save current state in controller loop
+ set_tc_state(tc, NewConfUC),
+ %% execute the test case
+ {ts_tc(Mod,Func,[NewConfUC]),get_loc(),NewConfUC}
+ end,
{EndConf,TSReturn,FWReturn} =
case Return of
{E,TCError} when E=='EXIT' ; E==failed ->
@@ -1015,36 +1077,47 @@ run_test_case_eval1(Mod, Func, Args, Name, RunInit, TCCallback) ->
%% call user callback function if defined
EndConf1 =
user_callback(TCCallback, Mod, Func, 'end', EndConf),
+
+ %% We can't handle fails or skips here
+ EndConf2 =
+ case do_init_tc_call(Mod,{end_per_testcase,Func},
+ [EndConf1],{ok,[EndConf1]}) of
+ {ok,[EPTCInitRes]} when is_list(EPTCInitRes) ->
+ EPTCInitRes;
+ _ ->
+ EndConf1
+ end,
+
%% update current state in controller loop
- {FWReturn1,TSReturn1,EndConf2} =
- case end_per_testcase(Mod, Func, EndConf1) of
+ {FWReturn1,TSReturn1,EndConf3} =
+ case end_per_testcase(Mod, Func, EndConf2) of
SaveCfg1={save_config,_} ->
{FWReturn,TSReturn,
[SaveCfg1|lists:keydelete(save_config,1,
- EndConf1)]};
+ EndConf2)]};
{fail,ReasonToFail} ->
%% user has failed the testcase
- fw_error_notify(Mod, Func, EndConf1,
+ fw_error_notify(Mod, Func, EndConf2,
ReasonToFail),
{{error,ReasonToFail},
{failed,ReasonToFail},
- EndConf1};
+ EndConf2};
{failed,{_,end_per_testcase,_}} = Failure when
FWReturn == ok ->
%% unexpected termination in end_per_testcase
%% report this as the result to the framework
- {Failure,TSReturn,EndConf1};
+ {Failure,TSReturn,EndConf2};
_ ->
%% test case result should be reported to
%% framework no matter the status of
%% end_per_testcase
- {FWReturn,TSReturn,EndConf1}
+ {FWReturn,TSReturn,EndConf2}
end,
%% clear current state in controller loop
- case do_end_tc_call(Mod,Func,
- {FWReturn1,[EndConf2]}, TSReturn1) of
+ case do_end_tc_call(Mod,{end_per_testcase,Func},
+ {FWReturn1,[EndConf3]}, TSReturn1) of
{failed,Reason} = NewReturn ->
- fw_error_notify(Mod,Func,EndConf2, Reason),
+ fw_error_notify(Mod,Func,EndConf3, Reason),
{{T,NewReturn},[{Mod,Func}],[]};
NewReturn ->
{{T,NewReturn},Loc,[]}
@@ -1070,7 +1143,38 @@ run_test_case_eval1(Mod, Func, Args, Name, RunInit, TCCallback) ->
{{T,Return2},Loc,Opts}
end.
+do_init_tc_call(Mod, Func, Res, Return) ->
+ test_server_sup:framework_call(init_tc,[Mod,Func,Res],Return).
+
+do_end_tc_call(Mod, IPTC={init_per_testcase,Func}, Res, Return) ->
+ case Return of
+ {NOk,_} when NOk == auto_skip; NOk == fail;
+ NOk == skip ; NOk == skipped ->
+ {_,Args} = Res,
+ IPTCEndRes =
+ case do_end_tc_call1(Mod, IPTC, Res, Return) of
+ IPTCEndConfig when is_list(IPTCEndConfig) ->
+ IPTCEndConfig;
+ _ ->
+ Args
+ end,
+ EPTCInitRes =
+ case do_init_tc_call(Mod,{end_per_testcase,Func},
+ IPTCEndRes,Return) of
+ {ok,EPTCInitConfig} when is_list(EPTCInitConfig) ->
+ {Return,EPTCInitConfig};
+ _ ->
+ Return
+ end,
+ do_end_tc_call1(Mod, {end_per_testcase,Func},
+ EPTCInitRes, Return);
+ _Ok ->
+ do_end_tc_call1(Mod, IPTC, Res, Return)
+ end;
do_end_tc_call(Mod, Func, Res, Return) ->
+ do_end_tc_call1(Mod, Func, Res, Return).
+
+do_end_tc_call1(Mod, Func, Res, Return) ->
FwMod = os:getenv("TEST_SERVER_FRAMEWORK"),
Ref = make_ref(),
if FwMod == "ct_framework" ; FwMod == "undefined"; FwMod == false ->
@@ -1209,7 +1313,7 @@ do_init_per_testcase(Mod, Args) ->
Bad ->
group_leader() ! {printout,12,
"ERROR! init_per_testcase has returned "
- "bad elements in Config: ~p\n",[Bad]},
+ "bad elements in Config: ~tp\n",[Bad]},
{skip,{failed,{Mod,init_per_testcase,bad_return}}}
end;
{fail,_Reason}=Res ->
@@ -1227,25 +1331,33 @@ do_init_per_testcase(Mod, Args) ->
throw:Other ->
set_loc(erlang:get_stacktrace()),
Line = get_loc(),
- FormattedLoc = test_server_sup:format_loc(Line),
- group_leader() ! {printout,12,
- "ERROR! init_per_testcase thrown!\n"
- "\tLocation: ~ts\n\tReason: ~p\n",
- [FormattedLoc, Other]},
+ print_init_conf_result(Line,"thrown",Other),
{skip,{failed,{Mod,init_per_testcase,Other}}};
_:Reason0 ->
Stk = erlang:get_stacktrace(),
Reason = {Reason0,Stk},
set_loc(Stk),
Line = get_loc(),
- FormattedLoc = test_server_sup:format_loc(Line),
- group_leader() ! {printout,12,
- "ERROR! init_per_testcase crashed!\n"
- "\tLocation: ~ts\n\tReason: ~p\n",
- [FormattedLoc,Reason]},
+ print_init_conf_result(Line,"crashed",Reason),
{skip,{failed,{Mod,init_per_testcase,Reason}}}
end.
+print_init_conf_result(Line,Cause,Reason) ->
+ FormattedLoc = test_server_sup:format_loc(Line),
+ Str2Print =
+ fun(NoHTML) when NoHTML == stdout; NoHTML == major ->
+ io_lib:format("ERROR! init_per_testcase ~s!\n"
+ "\tLocation: ~p\n\tReason: ~tp\n",
+ [Cause,Line,Reason]);
+ (minor) ->
+ ReasonStr = test_server_ctrl:escape_chars(Reason),
+ io_lib:format("ERROR! init_per_testcase ~s!\n"
+ "\tLocation: ~ts\n\tReason: ~ts\n",
+ [Cause,FormattedLoc,ReasonStr])
+ end,
+ group_leader() ! {printout,12,Str2Print}.
+
+
end_per_testcase(Mod, Func, Conf) ->
case erlang:function_exported(Mod,end_per_testcase,2) of
true ->
@@ -1280,12 +1392,7 @@ do_end_per_testcase(Mod,EndFunc,Func,Conf) ->
comment(io_lib:format("~ts<font color=\"red\">"
"WARNING: ~w thrown!"
"</font>\n",[Comment0,EndFunc])),
- group_leader() ! {printout,12,
- "WARNING: ~w thrown!\n"
- "Reason: ~p\n"
- "Line: ~ts\n",
- [EndFunc, Other,
- test_server_sup:format_loc(get_loc())]},
+ print_end_tc_warning(EndFunc,Other,"thrown",get_loc()),
{failed,{Mod,end_per_testcase,Other}};
Class:Reason ->
Stk = erlang:get_stacktrace(),
@@ -1302,15 +1409,25 @@ do_end_per_testcase(Mod,EndFunc,Func,Conf) ->
comment(io_lib:format("~ts<font color=\"red\">"
"WARNING: ~w crashed!"
"</font>\n",[Comment0,EndFunc])),
- group_leader() ! {printout,12,
- "WARNING: ~w crashed!\n"
- "Reason: ~p\n"
- "Line: ~ts\n",
- [EndFunc, Reason,
- test_server_sup:format_loc(get_loc())]},
+ print_end_tc_warning(EndFunc,Reason,"crashed",get_loc()),
{failed,{Mod,end_per_testcase,Why}}
end.
+print_end_tc_warning(EndFunc,Reason,Cause,Loc) ->
+ FormattedLoc = test_server_sup:format_loc(Loc),
+ Str2Print =
+ fun(NoHTML) when NoHTML == stdout; NoHTML == major ->
+ io_lib:format("WARNING: ~w ~s!\n"
+ "Reason: ~tp\nLine: ~p\n",
+ [EndFunc,Cause,Reason,Loc]);
+ (minor) ->
+ ReasonStr = test_server_ctrl:escape_chars(Reason),
+ io_lib:format("WARNING: ~w ~s!\n"
+ "Reason: ~ts\nLine: ~ts\n",
+ [EndFunc,Cause,ReasonStr,FormattedLoc])
+ end,
+ group_leader() ! {printout,12,Str2Print}.
+
get_loc() ->
get(test_server_loc).
@@ -2048,10 +2165,19 @@ get_timetrap_info(TCPid, SendToServer) ->
Timers ->
case [Info || {Handle,Pid,Info} <- Timers,
Pid == TCPid, Handle /= infinity] of
- [I|_] ->
- I;
+ [{TVal,true}|_] ->
+ {TVal,{true,test_server:timetrap_scale_factor()}};
+ [{TVal,false}|_] ->
+ {TVal,{false,1}};
[] when SendToServer == true ->
- tc_supervisor_req({get_timetrap_info,TCPid});
+ case tc_supervisor_req({get_timetrap_info,TCPid}) of
+ {TVal,true} ->
+ {TVal,{true,test_server:timetrap_scale_factor()}};
+ {TVal,false} ->
+ {TVal,{false,1}};
+ Error ->
+ Error
+ end;
[] ->
undefined
end
diff --git a/lib/common_test/src/test_server_ctrl.erl b/lib/common_test/src/test_server_ctrl.erl
index cd08a25bd8..ff960c22a5 100644
--- a/lib/common_test/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.
@@ -77,7 +77,7 @@
-export([handle_call/3, handle_cast/2, handle_info/2]).
-export([do_test_cases/4]).
-export([do_spec/2, do_spec_list/2]).
--export([xhtml/2]).
+-export([xhtml/2, escape_chars/1]).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -1825,13 +1825,14 @@ start_minor_log_file1(Mod, Func, LogDir, AbsName, MFA) ->
case {filelib:is_file(filename:join(LogDir, SrcListing)),
lists:member(no_src, get(test_server_logopts))} of
{true,false} ->
- print(Lev, Info ++ "<a href=\"~ts#~ts\">~w:~w/~w</a> "
- "(click for source code)\n",
+ print(Lev, ["$tc_html",
+ Info ++ "<a href=\"~ts#~ts\">~w:~w/~w</a> "
+ "(click for source code)\n"],
[uri_encode(SrcListing),
uri_encode(atom_to_list(Func)++"-1",utf8),
Mod,Func,Arity]);
_ ->
- print(Lev, Info ++ "~w:~w/~w\n", [Mod,Func,Arity])
+ print(Lev, ["$tc_html",Info ++ "~w:~w/~w\n"], [Mod,Func,Arity])
end
end,
@@ -3747,7 +3748,10 @@ run_test_case1(Ref, Num, Mod, Func, Args, RunInit,
true ->
ok
end,
- print(minor, "Config value:\n\n ~tp\n", [Args2Print]),
+
+ print(minor,
+ escape_chars(io_lib:format("Config value:\n\n ~tp\n", [Args2Print])),
+ []),
print(minor, "Current directory is ~tp\n", [Cwd]),
GrNameStr = case GrName of
@@ -3762,7 +3766,7 @@ run_test_case1(Ref, Num, Mod, Func, Args, RunInit,
"<td>" ++ Col0 ++ "~w" ++ Col1 ++ "</td>"
"<td>" ++ Col0 ++ "~ts" ++ Col1 ++ "</td>"
"<td><a href=\"~ts\">~w</a></td>"
- "<td><a href=\"~ts#top\"><</a> <a href=\"~ts#end\">></a></td>",
+ "<td><a href=\"~ts#top\">&lt;</a> <a href=\"~ts#end\">&gt;</a></td>",
[num2str(Num),fw_name(Mod),GrNameStr,EncMinorBase,Func,
EncMinorBase,EncMinorBase]),
@@ -3939,7 +3943,7 @@ progress(skip, CaseNum, Mod, Func, GrName, Loc, Reason, Time,
[get_info_str(Mod,Func, CaseNum, get(test_server_cases))]),
test_server_sup:framework_call(report, [tc_done,{Mod,{Func,GrName},
{ReportTag,Reason1}}]),
- ReasonStr = reason_to_string(Reason1),
+ ReasonStr = escape_chars(reason_to_string(Reason1)),
ReasonStr1 = lists:flatten([string:strip(S,left) ||
S <- string:tokens(ReasonStr,[$\n])]),
ReasonStr2 =
@@ -4011,7 +4015,10 @@ progress(failed, CaseNum, Mod, Func, GrName, Loc, {testcase_aborted,Reason}, _T,
[Comment]),
FormatLoc = test_server_sup:format_loc(Loc),
print(minor, "=== Location: ~ts", [FormatLoc]),
- print(minor, "=== Reason: {testcase_aborted,~p}", [Reason]),
+ print(minor,
+ escape_chars(io_lib:format("=== Reason: {testcase_aborted,~p}",
+ [Reason])),
+ []),
failed;
progress(failed, CaseNum, Mod, Func, GrName, unknown, Reason, Time,
@@ -4024,7 +4031,7 @@ progress(failed, CaseNum, Mod, Func, GrName, unknown, Reason, Time,
TimeStr = io_lib:format(if is_float(Time) -> "~.3fs";
true -> "~w"
end, [Time]),
- ErrorReason = lists:flatten(io_lib:format("~p", [Reason])),
+ ErrorReason = escape_chars(lists:flatten(io_lib:format("~p", [Reason]))),
ErrorReason1 = lists:flatten([string:strip(S,left) ||
S <- string:tokens(ErrorReason,[$\n])]),
ErrorReason2 =
@@ -4047,7 +4054,9 @@ progress(failed, CaseNum, Mod, Func, GrName, unknown, Reason, Time,
[TimeStr,Comment]),
print(minor, "=== Location: ~w", [unknown]),
{FStr,FormattedReason} = format_exception(Reason),
- print(minor, "=== Reason: " ++ FStr, [FormattedReason]),
+ print(minor,
+ escape_chars(io_lib:format("=== Reason: " ++ FStr, [FormattedReason])),
+ []),
failed;
progress(failed, CaseNum, Mod, Func, GrName, Loc, Reason, Time,
@@ -4081,7 +4090,8 @@ progress(failed, CaseNum, Mod, Func, GrName, Loc, Reason, Time,
FormatLoc = test_server_sup:format_loc(LocMin),
print(minor, "=== Location: ~ts", [FormatLoc]),
{FStr,FormattedReason} = format_exception(Reason),
- print(minor, "=== Reason: " ++ FStr, [FormattedReason]),
+ print(minor, "=== Reason: " ++
+ escape_chars(io_lib:format(FStr, [FormattedReason])), []),
failed;
progress(ok, _CaseNum, Mod, Func, GrName, _Loc, RetVal, Time,
@@ -4110,11 +4120,36 @@ progress(ok, _CaseNum, Mod, Func, GrName, _Loc, RetVal, Time,
"<td><font color=\"green\">Ok</font></td>"
"~ts</tr>\n",
[Time,Comment]),
- print(minor, "=== Returned value: ~p", [RetVal]),
+ print(minor,
+ escape_chars(io_lib:format("=== Returned value: ~tp", [RetVal])),
+ []),
ok.
%%--------------------------------------------------------------------
%% various help functions
+escape_chars(Term) when not is_list(Term), not is_binary(Term) ->
+ esc_chars_in_list(io_lib:format("~tp", [Term]));
+escape_chars(List = [Term | _]) when not is_list(Term), not is_integer(Term) ->
+ esc_chars_in_list(io_lib:format("~tp", [List]));
+escape_chars(List) ->
+ esc_chars_in_list(List).
+
+esc_chars_in_list([Bin | Io]) when is_binary(Bin) ->
+ [Bin | esc_chars_in_list(Io)];
+esc_chars_in_list([List | Io]) when is_list(List) ->
+ [esc_chars_in_list(List) | esc_chars_in_list(Io)];
+esc_chars_in_list([$< | Io]) ->
+ ["&lt;" | esc_chars_in_list(Io)];
+esc_chars_in_list([$> | Io]) ->
+ ["&gt;" | esc_chars_in_list(Io)];
+esc_chars_in_list([$& | Io]) ->
+ ["&amp;" | esc_chars_in_list(Io)];
+esc_chars_in_list([Char | Io]) when is_integer(Char) ->
+ [Char | esc_chars_in_list(Io)];
+esc_chars_in_list([]) ->
+ [];
+esc_chars_in_list(Bin) ->
+ Bin.
get_fw_mod(Mod) ->
case get(test_server_framework) of
@@ -4328,6 +4363,10 @@ print(Detail, Format) ->
print(Detail, Format, Args) ->
print(Detail, Format, Args, internal).
+print(Detail, ["$tc_html",Format], Args, Printer) ->
+ Msg = io_lib:format(Format, Args),
+ print_or_buffer(Detail, ["$tc_html",Msg], Printer);
+
print(Detail, Format, Args, Printer) ->
Msg = io_lib:format(Format, Args),
print_or_buffer(Detail, Msg, Printer).
@@ -5570,8 +5609,9 @@ html_header(Title) ->
"<html>\n"
"<head>\n"
"<title>", Title, "</title>\n"
- "<meta http-equiv=\"cache-control\" content=\"no-cache\">\n"
- "<meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\">\n"
+ "<meta http-equiv=\"cache-control\" content=\"no-cache\"></meta>\n"
+ "<meta http-equiv=\"content-type\" content=\"text/html; "
+ "charset=utf-8\"></meta>\n"
"</head>\n"
"<body bgcolor=\"white\" text=\"black\" "
"link=\"blue\" vlink=\"purple\" alink=\"red\">\n"].
diff --git a/lib/common_test/src/test_server_gl.erl b/lib/common_test/src/test_server_gl.erl
index 31098d9726..333c8fc06e 100644
--- a/lib/common_test/src/test_server_gl.erl
+++ b/lib/common_test/src/test_server_gl.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.
@@ -37,7 +37,8 @@
reject_io :: boolean(), %Reject I/O requests...
permit_io, %... and exceptions
auto_nl=true :: boolean(), %Automatically add NL
- levels %{Stdout,Major,Minor}
+ levels, %{Stdout,Major,Minor}
+ escape_chars=true %Switch escaping HTML on/off
}).
%% start_link()
@@ -130,6 +131,10 @@ set_props(GL, PropList) ->
%%% Internal functions.
init([]) ->
+ EscChars = case application:get_env(test_server, esc_chars) of
+ {ok,ECBool} -> ECBool;
+ _ -> true
+ end,
{ok,#st{tc_supervisor=none,
minor=none,
minor_monitor=none,
@@ -137,7 +142,8 @@ init([]) ->
reject_io=false,
permit_io=gb_sets:empty(),
auto_nl=true,
- levels={1,19,10}
+ levels={1,19,10},
+ escape_chars=EscChars
}}.
req(GL, Req) ->
@@ -182,7 +188,7 @@ handle_info({io_request,From,ReplyAs,Req}=IoReq, St) ->
try io_req(Req, From, St) of
passthrough ->
group_leader() ! IoReq;
- Data ->
+ {EscapeHtml,Data} ->
case is_io_permitted(From, St) of
false ->
ok;
@@ -193,7 +199,13 @@ handle_info({io_request,From,ReplyAs,Req}=IoReq, St) ->
#st{capture=CapturePid} ->
CapturePid ! {captured,Data}
end,
- output(minor, Data, From, From, St)
+ case EscapeHtml andalso St#st.escape_chars of
+ true ->
+ output(minor, test_server_ctrl:escape_chars(Data),
+ From, From, St);
+ false ->
+ output(minor, Data, From, From, St)
+ end
end,
From ! {io_reply,ReplyAs,ok}
catch
@@ -204,9 +216,20 @@ handle_info({io_request,From,ReplyAs,Req}=IoReq, St) ->
handle_info({structured_io,ClientPid,{Detail,Str}}, St) ->
output(Detail, Str, ClientPid, ClientPid, St),
{noreply,St};
+handle_info({printout,Detail,["$tc_html",Format],Args}, St) ->
+ Str = io_lib:format(Format, Args),
+ output(Detail, ["$tc_html",Str], internal, none, St),
+ {noreply,St};
+handle_info({printout,Detail,Fun}, St) when is_function(Fun)->
+ output(Detail, Fun, internal, none, St),
+ {noreply,St};
handle_info({printout,Detail,Format,Args}, St) ->
Str = io_lib:format(Format, Args),
- output(Detail, Str, internal, none, St),
+ if not St#st.escape_chars ->
+ output(Detail, ["$tc_html",Str], internal, none, St);
+ true ->
+ output(Detail, Str, internal, none, St)
+ end,
{noreply,St};
handle_info(Msg, #st{tc_supervisor=Pid}=St) when is_pid(Pid) ->
%% The process overseeing the testcase process also used to be
@@ -231,25 +254,55 @@ do_set_props([{reject_io_reqs,Bool}|Ps], St) ->
do_set_props(Ps, St#st{reject_io=Bool});
do_set_props([], St) -> St.
-io_req({put_chars,Enc,Bytes}, _, _) when Enc =:= latin1; Enc =:= unicode ->
- unicode:characters_to_list(Bytes, Enc);
+io_req({put_chars,Enc,Str}, _, _) when Enc =:= latin1; Enc =:= unicode ->
+ case Str of
+ ["$tc_html",Str0] ->
+ {false,unicode:characters_to_list(Str0, Enc)};
+ _ ->
+ {true,unicode:characters_to_list(Str, Enc)}
+ end;
io_req({put_chars,Encoding,Mod,Func,[Format,Args]}, _, _) ->
- Str = Mod:Func(Format, Args),
- unicode:characters_to_list(Str, Encoding);
+ case Format of
+ ["$tc_html",Format0] ->
+ Str = Mod:Func(Format0, Args),
+ {false,unicode:characters_to_list(Str, Encoding)};
+ _ ->
+ Str = Mod:Func(Format, Args),
+ {true,unicode:characters_to_list(Str, Encoding)}
+ end;
io_req(_, _, _) -> passthrough.
-output(Level, Str, Sender, From, St) when is_integer(Level) ->
+output(Level, StrOrFun, Sender, From, St) when is_integer(Level) ->
case selected_by_level(Level, stdout, St) of
- true -> output(stdout, Str, Sender, From, St);
- false -> ok
+ true when hd(StrOrFun) == "$tc_html" ->
+ output(stdout, tl(StrOrFun), Sender, From, St);
+ true when is_function(StrOrFun) ->
+ output(stdout, StrOrFun(stdout), Sender, From, St);
+ true ->
+ output(stdout, StrOrFun, Sender, From, St);
+ false ->
+ ok
end,
case selected_by_level(Level, major, St) of
- true -> output(major, Str, Sender, From, St);
- false -> ok
+ true when hd(StrOrFun) == "$tc_html" ->
+ output(major, tl(StrOrFun), Sender, From, St);
+ true when is_function(StrOrFun) ->
+ output(major, StrOrFun(major), Sender, From, St);
+ true ->
+ output(major, StrOrFun, Sender, From, St);
+ false ->
+ ok
end,
case selected_by_level(Level, minor, St) of
- true -> output(minor, Str, Sender, From, St);
- false -> ok
+ true when hd(StrOrFun) == "$tc_html" ->
+ output(minor, tl(StrOrFun), Sender, From, St);
+ true when is_function(StrOrFun) ->
+ output(minor, StrOrFun(minor), Sender, From, St);
+ true ->
+ output(minor, test_server_ctrl:escape_chars(StrOrFun),
+ Sender, From, St);
+ false ->
+ ok
end;
output(stdout, Str, _Sender, From, St) ->
output_to_file(stdout, Str, From, St);
diff --git a/lib/common_test/src/test_server_internal.hrl b/lib/common_test/src/test_server_internal.hrl
index 578f359010..f0c1876dd6 100644
--- a/lib/common_test/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.
@@ -30,7 +30,6 @@
version, % string()
system_version, % string()
root_dir, % string()
- test_server_dir, % string()
emulator, % string()
otp_release, % string()
username, % string()
diff --git a/lib/common_test/src/test_server_io.erl b/lib/common_test/src/test_server_io.erl
index 0d881d0ada..8c5c0aef35 100644
--- a/lib/common_test/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.
diff --git a/lib/common_test/src/test_server_node.erl b/lib/common_test/src/test_server_node.erl
index c12832e0d0..c64399e485 100644
--- a/lib/common_test/src/test_server_node.erl
+++ b/lib/common_test/src/test_server_node.erl
@@ -307,11 +307,11 @@ start_node_peer(SlaveName, OptList, From, TI) ->
HostStr, " ", WaitPort]),
% Support for erl_crash_dump files..
- CrashFile = filename:join([TI#target_info.test_server_dir,
+ CrashDir = test_server_sup:crash_dump_dir(),
+ CrashFile = filename:join([CrashDir,
"erl_crash_dump."++cast_to_list(SlaveName)]),
CrashArgs = lists:concat([" -env ERL_CRASH_DUMP \"",CrashFile,"\" "]),
FailOnError = start_node_get_option_value(fail_on_error, OptList, true),
- Pa = TI#target_info.test_server_dir,
Prog0 = start_node_get_option_value(erl, OptList, default),
Prog = quote_progname(pick_erl_program(Prog0)),
Args =
@@ -322,7 +322,6 @@ start_node_peer(SlaveName, OptList, From, TI) ->
Cmd = lists:concat([Prog,
" -detached ",
TI#target_info.naming, " ", SlaveName,
- " -pa \"", Pa,"\"",
NodeStarted,
CrashArgs,
" ", Args]),
@@ -370,15 +369,15 @@ wait_for_node_started_fun(LSock, Tmo, Cleanup, TI, Self) ->
%% Slave nodes are started on a remote host if
%% - the option remote is given when calling test_server:start_node/3
%%
-start_node_slave(SlaveName, OptList, From, TI) ->
+start_node_slave(SlaveName, OptList, From, _TI) ->
SuppliedArgs = start_node_get_option_value(args, OptList, []),
Cleanup = start_node_get_option_value(cleanup, OptList, true),
- CrashFile = filename:join([TI#target_info.test_server_dir,
+ CrashDir = test_server_sup:crash_dump_dir(),
+ CrashFile = filename:join([CrashDir,
"erl_crash_dump."++cast_to_list(SlaveName)]),
CrashArgs = lists:concat([" -env ERL_CRASH_DUMP \"",CrashFile,"\" "]),
- Pa = TI#target_info.test_server_dir,
- Args = lists:concat([" -pa \"", Pa, "\" ", SuppliedArgs, CrashArgs]),
+ Args = lists:concat([" ", SuppliedArgs, CrashArgs]),
Prog0 = start_node_get_option_value(erl, OptList, default),
Prog = pick_erl_program(Prog0),
diff --git a/lib/common_test/src/test_server_sup.erl b/lib/common_test/src/test_server_sup.erl
index fc2cfd57bd..fa2bb33c2d 100644
--- a/lib/common_test/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.
@@ -594,7 +594,11 @@ cleanup_crash_dumps() ->
delete_files(Dumps).
crash_dump_dir() ->
- filename:dirname(code:which(?MODULE)).
+ %% If no framework is known, then we use current working directory
+ %% - in most cases that will be the same as the default log
+ %% directory.
+ {ok,Dir} = test_server_sup:framework_call(get_log_dir,[],file:get_cwd()),
+ Dir.
tar_crash_dumps() ->
Dir = crash_dump_dir(),
diff --git a/lib/common_test/src/unix_telnet.erl b/lib/common_test/src/unix_telnet.erl
index e5b3058999..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.
@@ -27,7 +27,8 @@
%%% {port,PortNum}, % optional
%%% {username,UserName},
%%% {password,Password},
-%%% {keep_alive,Bool}]}. % optional</pre>
+%%% {keep_alive,Bool}, % optional
+%%% {tcp_nodely,Bool}]} % optional</pre>
%%%
%%% <p>To communicate via telnet to the host specified by
%%% <code>HostNameOrIpAddress</code>, use the interface functions in
@@ -55,7 +56,7 @@
-compile(export_all).
%% Callbacks for ct_telnet.erl
--export([connect/6,get_prompt_regexp/0]).
+-export([connect/7,get_prompt_regexp/0]).
-import(ct_telnet,[start_gen_log/1,log/4,end_gen_log/0]).
-define(username,"login: ").
@@ -82,6 +83,7 @@ get_prompt_regexp() ->
%%% Port = integer()
%%% Timeout = integer()
%%% KeepAlive = bool()
+%%% TCPNoDelay = bool()
%%% Extra = ct:target_name() | {Username,Password}
%%% Username = string()
%%% Password = string()
@@ -91,25 +93,25 @@ get_prompt_regexp() ->
%%% @doc Callback for ct_telnet.erl.
%%%
%%% <p>Setup telnet connection to a unix host.</p>
-connect(ConnName,Ip,Port,Timeout,KeepAlive,Extra) ->
+connect(ConnName,Ip,Port,Timeout,KeepAlive,TCPNoDelay,Extra) ->
case Extra of
{Username,Password} ->
- connect1(ConnName,Ip,Port,Timeout,KeepAlive,
+ connect1(ConnName,Ip,Port,Timeout,KeepAlive,TCPNoDelay,
Username,Password);
KeyOrName ->
case get_username_and_password(KeyOrName) of
{ok,{Username,Password}} ->
- connect1(ConnName,Ip,Port,Timeout,KeepAlive,
+ connect1(ConnName,Ip,Port,Timeout,KeepAlive,TCPNoDelay,
Username,Password);
Error ->
Error
end
end.
-connect1(Name,Ip,Port,Timeout,KeepAlive,Username,Password) ->
+connect1(Name,Ip,Port,Timeout,KeepAlive,TCPNoDelay,Username,Password) ->
start_gen_log("unix_telnet connect"),
Result =
- case ct_telnet_client:open(Ip,Port,Timeout,KeepAlive,Name) of
+ case ct_telnet_client:open(Ip,Port,Timeout,KeepAlive,TCPNoDelay,Name) of
{ok,Pid} ->
case ct_telnet:silent_teln_expect(Name,Pid,[],
[prompt],?prx,[]) of
diff --git a/lib/common_test/src/vts.erl b/lib/common_test/src/vts.erl
index df434d62c8..e1c16fbda4 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.
diff --git a/lib/common_test/test/Makefile b/lib/common_test/test/Makefile
index aa99fe1af1..1532b6c1f7 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.
@@ -68,7 +68,8 @@ MODULES= \
ct_telnet_SUITE \
erl2html2_SUITE \
test_server_SUITE \
- test_server_test_lib
+ test_server_test_lib \
+ ct_release_test_SUITE
ERL_FILES= $(MODULES:%=%.erl)
HRL_FILES= test_server_test_lib.hrl
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..9879e0f20d 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.
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..c64774cd4f 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.
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 8326705575..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.
@@ -728,23 +728,25 @@ test_events(lib_error) ->
{lib_error_1_SUITE,no_lines_throw,{failed,{error,{thrown,catch_me_if_u_can}}}}},
{?eh,test_stats,{0,8,{0,0}}},
{?eh,tc_start,{lib_error_1_SUITE,init_tc_error}},
- {?eh,tc_done,{lib_error_1_SUITE,init_tc_error,ok}},
- {?eh,test_stats,{1,8,{0,0}}},
+ {?eh,tc_done,{ct_framework,init_tc,
+ {framework_error,{{badmatch,[1,2]},'_'}}}},
+ {?eh,test_stats,{0,9,{0,0}}},
{?eh,tc_start,{lib_error_1_SUITE,init_tc_exit}},
- {?eh,tc_done,{lib_error_1_SUITE,init_tc_exit,ok}},
- {?eh,test_stats,{2,8,{0,0}}},
+ {?eh,tc_done,{ct_framework,init_tc,{framework_error,byebye}}},
+ {?eh,test_stats,{0,10,{0,0}}},
{?eh,tc_start,{lib_error_1_SUITE,init_tc_throw}},
- {?eh,tc_done,{lib_error_1_SUITE,init_tc_throw,ok}},
- {?eh,test_stats,{3,8,{0,0}}},
+ {?eh,tc_done,{ct_framework,init_tc,{framework_error,catch_me_if_u_can}}},
+ {?eh,test_stats,{0,11,{0,0}}},
{?eh,tc_start,{lib_error_1_SUITE,end_tc_error}},
- {?eh,tc_done,{lib_error_1_SUITE,end_tc_error,ok}},
- {?eh,test_stats,{3,9,{0,0}}},
+ {?eh,tc_done,{ct_framework,end_tc,
+ {framework_error,{{badmatch,[1,2]},'_'}}}},
+ {?eh,test_stats,{0,12,{0,0}}},
{?eh,tc_start,{lib_error_1_SUITE,end_tc_exit}},
- {?eh,tc_done,{lib_error_1_SUITE,end_tc_exit,ok}},
- {?eh,test_stats,{3,10,{0,0}}},
+ {?eh,tc_done,{ct_framework,end_tc,{framework_error,byebye}}},
+ {?eh,test_stats,{0,13,{0,0}}},
{?eh,tc_start,{lib_error_1_SUITE,end_tc_throw}},
- {?eh,tc_done,{lib_error_1_SUITE,end_tc_throw,ok}},
- {?eh,test_stats,{3,11,{0,0}}},
+ {?eh,tc_done,{ct_framework,end_tc,{framework_error,catch_me_if_u_can}}},
+ {?eh,test_stats,{0,14,{0,0}}},
{?eh,tc_start,{lib_error_1_SUITE,end_per_suite}},
{?eh,tc_done,{lib_error_1_SUITE,end_per_suite,ok}},
{?eh,test_done,{'DEF','STOP_TIME'}},
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 658c7e8232..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.
@@ -152,23 +152,32 @@ no_lines_throw(_) ->
lib_no_lines:do_throw(),
ok.
-init_tc_error(_) ->
+init_tc_error() ->
put('$test_server_framework_test',
fun(init_tc, _Default) -> lib_no_lines:do_error(), ok;
(_, Default) -> Default
- end), ok.
+ end), [].
-init_tc_exit(_) ->
+init_tc_error(_) ->
+ ok.
+
+init_tc_exit() ->
put('$test_server_framework_test',
fun(init_tc, _Default) -> lib_no_lines:do_exit(), ok;
(_, Default) -> Default
- end), ok.
+ end), [].
-init_tc_throw(_) ->
+init_tc_exit(_) ->
+ ok.
+
+init_tc_throw() ->
put('$test_server_framework_test',
fun(init_tc, _Default) -> lib_no_lines:do_throw(), ok;
(_, Default) -> Default
- end), ok.
+ end), [].
+
+init_tc_throw(_) ->
+ ok.
end_tc_error(_) ->
put('$test_server_framework_test',
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 29c25bf151..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.
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..1404df6410 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.
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 06bc0c07f4..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.
@@ -324,6 +324,8 @@ test_events(one_empty_cth) ->
{?eh,tc_start,{ct_cth_empty_SUITE,test_case}},
{?eh,cth,{empty_cth,pre_init_per_testcase,[test_case,'$proplist',[]]}},
+ {?eh,cth,{empty_cth,post_init_per_testcase,[test_case,'$proplist','_',[]]}},
+ {?eh,cth,{empty_cth,pre_end_per_testcase,[test_case,'$proplist',[]]}},
{?eh,cth,{empty_cth,post_end_per_testcase,[test_case,'$proplist','_',[]]}},
{?eh,tc_done,{ct_cth_empty_SUITE,test_case,ok}},
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 3b2fd4b3c0..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,8 +1,8 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2010-2011. All Rights Reserved.
-%%
+%%
+%% %CopyrightBegin%
+%%
+%% 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.
%% You may obtain a copy of the License at
@@ -14,22 +14,22 @@
%% 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(crash_init_cth).
-
-
--include_lib("common_test/src/ct_util.hrl").
--include_lib("common_test/include/ct_event.hrl").
-
-
-%% CT Hooks
--export([init/2]).
-
-init(Id, Opts) ->
- empty_cth:init(Id, Opts),
- exit(diediedie).
-
+%%
+%% %CopyrightEnd%
+%%
+
+
+-module(crash_init_cth).
+
+
+-include_lib("common_test/src/ct_util.hrl").
+-include_lib("common_test/include/ct_event.hrl").
+
+
+%% CT Hooks
+-export([init/2]).
+
+init(Id, Opts) ->
+ empty_cth:init(Id, Opts),
+ exit(diediedie).
+
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 be2ade0715..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,8 +1,8 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2010-2011. All Rights Reserved.
-%%
+%%
+%% %CopyrightBegin%
+%%
+%% 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.
%% You may obtain a copy of the License at
@@ -14,35 +14,36 @@
%% 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(ct_cth_empty_SUITE).
-
--suite_defaults([{timetrap, {minutes, 10}}]).
-
-%% Note: This directive should only be used in test suites.
--compile(export_all).
-
--include("ct.hrl").
-
-%% 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.
-
-all() ->
- [test_case].
-
-%% Test cases starts here.
-test_case(Config) when is_list(Config) ->
- ok.
+%%
+%% %CopyrightEnd%
+%%
+
+-module(ct_cth_empty_SUITE).
+
+-suite_defaults([{timetrap, {minutes, 10}}]).
+
+%% Note: This directive should only be used in test suites.
+-compile(export_all).
+
+-include("ct.hrl").
+
+%% 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.
+
+all() ->
+ [test_case].
+
+%% Test cases starts here.
+test_case(Config) when is_list(Config) ->
+ ok.
+
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 9a924a66ac..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,8 +1,8 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2010-2011. All Rights Reserved.
-%%
+%%
+%% %CopyrightBegin%
+%%
+%% 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.
%% You may obtain a copy of the License at
@@ -14,46 +14,46 @@
%% 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(ct_update_config_SUITE).
-
--suite_defaults([{timetrap, {minutes, 10}}]).
-
-%% Note: This directive should only be used in test suites.
--compile(export_all).
-
--include("ct.hrl").
-
--define(now, os:timestamp()).
-
-%% Test server callback functions
-init_per_suite(Config) ->
- [{init_per_suite,?now}|Config].
-
-end_per_suite(_Config) ->
- ok.
-
-init_per_testcase(_TestCase, Config) ->
- [{init_per_testcase,?now}|Config].
-
-end_per_testcase(_TestCase, _Config) ->
- ok.
-
-init_per_group(GroupName, Config) ->
- [{init_per_group,?now}|Config].
-
-end_per_group(GroupName, Config) ->
- ok.
-
-all() ->
- [{group,group1}].
-
-groups() ->
- [{group1,[],[test_case]}].
-
-%% Test cases starts here.
-test_case(Config) when is_list(Config) ->
- ok.
+%%
+%% %CopyrightEnd%
+%%
+
+-module(ct_update_config_SUITE).
+
+-suite_defaults([{timetrap, {minutes, 10}}]).
+
+%% Note: This directive should only be used in test suites.
+-compile(export_all).
+
+-include("ct.hrl").
+
+-define(now, ct_test_support:unique_timestamp()).
+
+%% Test server callback functions
+init_per_suite(Config) ->
+ [{init_per_suite,?now}|Config].
+
+end_per_suite(_Config) ->
+ ok.
+
+init_per_testcase(_TestCase, Config) ->
+ [{init_per_testcase,?now}|Config].
+
+end_per_testcase(_TestCase, _Config) ->
+ ok.
+
+init_per_group(GroupName, Config) ->
+ [{init_per_group,?now}|Config].
+
+end_per_group(GroupName, Config) ->
+ ok.
+
+all() ->
+ [{group,group1}].
+
+groups() ->
+ [{group1,[],[test_case]}].
+
+%% Test cases starts here.
+test_case(Config) when is_list(Config) ->
+ ok.
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..7b9b5687e5 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.
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 f223f031d7..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.
@@ -50,6 +50,8 @@
-export([post_end_per_group/4]).
-export([pre_init_per_testcase/3]).
+-export([post_init_per_testcase/4]).
+-export([pre_end_per_testcase/3]).
-export([post_end_per_testcase/4]).
-export([on_tc_fail/3]).
@@ -88,7 +90,7 @@ id(Opts) ->
gen_event:notify(?CT_EVMGR_REF, #event{ name = cth, node = node(),
data = {?MODULE, id, [Opts]}}),
ct:log("~w:id called", [?MODULE]),
- os:timestamp().
+ ct_test_support:unique_timestamp().
%% @doc Called before init_per_suite is called. Note that this callback is
%% only called if the CTH is added before init_per_suite is run (eg. in a test
@@ -208,7 +210,7 @@ post_end_per_group(Group,Config,Return,State) ->
ct:log("~w:post_end_per_group(~w) called", [?MODULE,Group]),
{Return, State}.
-%% @doc Called before each test case.
+%% @doc Called before init_per_testcase/2 for each test case.
%% You can change the config in this function.
-spec pre_init_per_testcase(TC :: atom(),
Config :: config(),
@@ -222,8 +224,36 @@ pre_init_per_testcase(TC,Config,State) ->
ct:log("~w:pre_init_per_testcase(~w) called", [?MODULE,TC]),
{Config, State}.
-%% @doc Called after each test case. Note that the config cannot be
-%% changed here, only the status of the test case.
+%% @doc Called after init_per_testcase/2, and before the test case.
+-spec post_init_per_testcase(TC :: atom(),
+ Config :: config(),
+ Return :: config() | skip_or_fail(),
+ State :: #state{}) ->
+ {config() | skip_or_fail(), NewState :: #state{}}.
+post_init_per_testcase(TC,Config,Return,State) ->
+ gen_event:notify(
+ ?CT_EVMGR_REF, #event{ name = cth, node = node(),
+ data = {?MODULE, post_init_per_testcase,
+ [TC,Config,Return,State]}}),
+ ct:log("~w:post_init_per_testcase(~w) called", [?MODULE,TC]),
+ {Return, State}.
+
+%% @doc Called before end_per_testacse/2. No skip or fail allowed here,
+%% only config additions.
+-spec pre_end_per_testcase(TC :: atom(),
+ Config :: config(),
+ State :: #state{}) ->
+ {config(), NewState :: #state{}}.
+pre_end_per_testcase(TC,Config,State) ->
+ gen_event:notify(
+ ?CT_EVMGR_REF, #event{ name = cth, node = node(),
+ data = {?MODULE, pre_end_per_testcase,
+ [TC,Config,State]}}),
+ ct:log("~w:pre_end_per_testcase(~w) called", [?MODULE,TC]),
+ {Config, State}.
+
+%% @doc Called after end_per_testcase/2 for each test case. Note that
+%% the config cannot be changed here, only the status of the test case.
-spec post_end_per_testcase(TC :: atom(),
Config :: config(),
Return :: term(),
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 98e4548864..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,8 +1,8 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2010-2011. All Rights Reserved.
-%%
+%%
+%% %CopyrightBegin%
+%%
+%% 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.
%% You may obtain a copy of the License at
@@ -14,60 +14,66 @@
%% 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(fail_pre_suite_cth).
-
-
--include_lib("common_test/src/ct_util.hrl").
--include_lib("common_test/include/ct_event.hrl").
-
-
-%% CT Hooks
--compile(export_all).
-
-init(Id, Opts) ->
- empty_cth:init(Id, Opts).
-
-pre_init_per_suite(Suite, Config, State) ->
- empty_cth:pre_init_per_suite(Suite,Config,State),
- {{fail, "Test failure"}, State}.
-
-post_init_per_suite(Suite,Config,Return,State) ->
- empty_cth:post_init_per_suite(Suite,Config,Return,State).
-
-pre_end_per_suite(Suite,Config,State) ->
- empty_cth:pre_end_per_suite(Suite,Config,State).
-
-post_end_per_suite(Suite,Config,Return,State) ->
- empty_cth:post_end_per_suite(Suite,Config,Return,State).
-
-pre_init_per_group(Group,Config,State) ->
- empty_cth:pre_init_per_group(Group,Config,State).
-
-post_init_per_group(Group,Config,Return,State) ->
- empty_cth:post_init_per_group(Group,Config,Return,State).
-
-pre_end_per_group(Group,Config,State) ->
- empty_cth:pre_end_per_group(Group,Config,State).
-
-post_end_per_group(Group,Config,Return,State) ->
- empty_cth:post_end_per_group(Group,Config,Return,State).
-
-pre_init_per_testcase(TC,Config,State) ->
- empty_cth:pre_init_per_testcase(TC,Config,State).
-
-post_end_per_testcase(TC,Config,Return,State) ->
- empty_cth:post_end_per_testcase(TC,Config,Return,State).
-
-on_tc_fail(TC, Reason, State) ->
- empty_cth:on_tc_fail(TC,Reason,State).
-
-on_tc_skip(TC, Reason, State) ->
- empty_cth:on_tc_skip(TC,Reason,State).
-
-terminate(State) ->
- empty_cth:terminate(State).
+%%
+%% %CopyrightEnd%
+%%
+
+
+-module(fail_pre_suite_cth).
+
+
+-include_lib("common_test/src/ct_util.hrl").
+-include_lib("common_test/include/ct_event.hrl").
+
+
+%% CT Hooks
+-compile(export_all).
+
+init(Id, Opts) ->
+ empty_cth:init(Id, Opts).
+
+pre_init_per_suite(Suite, Config, State) ->
+ empty_cth:pre_init_per_suite(Suite,Config,State),
+ {{fail, "Test failure"}, State}.
+
+post_init_per_suite(Suite,Config,Return,State) ->
+ empty_cth:post_init_per_suite(Suite,Config,Return,State).
+
+pre_end_per_suite(Suite,Config,State) ->
+ empty_cth:pre_end_per_suite(Suite,Config,State).
+
+post_end_per_suite(Suite,Config,Return,State) ->
+ empty_cth:post_end_per_suite(Suite,Config,Return,State).
+
+pre_init_per_group(Group,Config,State) ->
+ empty_cth:pre_init_per_group(Group,Config,State).
+
+post_init_per_group(Group,Config,Return,State) ->
+ empty_cth:post_init_per_group(Group,Config,Return,State).
+
+pre_end_per_group(Group,Config,State) ->
+ empty_cth:pre_end_per_group(Group,Config,State).
+
+post_end_per_group(Group,Config,Return,State) ->
+ empty_cth:post_end_per_group(Group,Config,Return,State).
+
+pre_init_per_testcase(TC,Config,State) ->
+ empty_cth:pre_init_per_testcase(TC,Config,State).
+
+post_init_per_testcase(TC,Config,Return,State) ->
+ empty_cth:post_init_per_testcase(TC,Config,Return,State).
+
+pre_end_per_testcase(TC,Config,State) ->
+ empty_cth:pre_end_per_testcase(TC,Config,State).
+
+post_end_per_testcase(TC,Config,Return,State) ->
+ empty_cth:post_end_per_testcase(TC,Config,Return,State).
+
+on_tc_fail(TC, Reason, State) ->
+ empty_cth:on_tc_fail(TC,Reason,State).
+
+on_tc_skip(TC, Reason, State) ->
+ empty_cth:on_tc_skip(TC,Reason,State).
+
+terminate(State) ->
+ empty_cth:terminate(State).
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 8898a54b8d..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,8 +1,8 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2010-2011. All Rights Reserved.
-%%
+%%
+%% %CopyrightBegin%
+%%
+%% 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.
%% You may obtain a copy of the License at
@@ -14,21 +14,21 @@
%% 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(minimal_cth).
-
-
--include_lib("common_test/src/ct_util.hrl").
--include_lib("common_test/include/ct_event.hrl").
-
-
-%% CT Hooks
--export([init/2]).
-
-init(Id, Opts) ->
- empty_cth:init(Id, Opts).
-
+%%
+%% %CopyrightEnd%
+%%
+
+
+-module(minimal_cth).
+
+
+-include_lib("common_test/src/ct_util.hrl").
+-include_lib("common_test/include/ct_event.hrl").
+
+
+%% CT Hooks
+-export([init/2]).
+
+init(Id, Opts) ->
+ empty_cth:init(Id, Opts).
+
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 2414da0683..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,8 +1,8 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2010-2011. All Rights Reserved.
-%%
+%%
+%% %CopyrightBegin%
+%%
+%% 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.
%% You may obtain a copy of the License at
@@ -14,30 +14,30 @@
%% 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(minimal_terminate_cth).
-
-
--include_lib("common_test/src/ct_util.hrl").
--include_lib("common_test/include/ct_event.hrl").
-
-
-%% CT Hooks
--export([init/2]).
--export([terminate/1]).
--export([on_tc_skip/3]).
-
-init(Id, Opts) ->
- empty_cth:init(Id, Opts).
-
-on_tc_skip(TC, Reason, State) ->
- empty_cth:on_tc_skip(TC,Reason,State).
-
-terminate(State) ->
- empty_cth:terminate(State).
-
-
+%%
+%% %CopyrightEnd%
+%%
+
+
+-module(minimal_terminate_cth).
+
+
+-include_lib("common_test/src/ct_util.hrl").
+-include_lib("common_test/include/ct_event.hrl").
+
+
+%% CT Hooks
+-export([init/2]).
+-export([terminate/1]).
+-export([on_tc_skip/3]).
+
+init(Id, Opts) ->
+ empty_cth:init(Id, Opts).
+
+on_tc_skip(TC, Reason, State) ->
+ empty_cth:on_tc_skip(TC,Reason,State).
+
+terminate(State) ->
+ empty_cth:terminate(State).
+
+
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 0f6ef7c596..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,8 +1,8 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2010-2011. All Rights Reserved.
-%%
+%%
+%% %CopyrightBegin%
+%%
+%% 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.
%% You may obtain a copy of the License at
@@ -14,62 +14,68 @@
%% 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(prio_cth).
-
-
--include_lib("common_test/src/ct_util.hrl").
-
-
-%% CT Hooks
--compile(export_all).
-
-id(Opts) ->
- empty_cth:id(Opts).
-
-init(Id, Opts) ->
- {ok, [Prio|_] = State} = empty_cth:init(Id, Opts),
- {ok, State, Prio}.
-
-pre_init_per_suite(Suite, Config, State) ->
- empty_cth:pre_init_per_suite(Suite,Config,State).
-
-post_init_per_suite(Suite,Config,Return,State) ->
- empty_cth:post_init_per_suite(Suite,Config,Return,State).
-
-pre_end_per_suite(Suite,Config,State) ->
- empty_cth:pre_end_per_suite(Suite,Config,State).
-
-post_end_per_suite(Suite,Config,Return,State) ->
- empty_cth:post_end_per_suite(Suite,Config,Return,State).
-
-pre_init_per_group(Group,Config,State) ->
- empty_cth:pre_init_per_group(Group,Config,State).
-
-post_init_per_group(Group,Config,Return,State) ->
- empty_cth:post_init_per_group(Group,Config,Return,State).
-
-pre_end_per_group(Group,Config,State) ->
- empty_cth:pre_end_per_group(Group,Config,State).
-
-post_end_per_group(Group,Config,Return,State) ->
- empty_cth:post_end_per_group(Group,Config,Return,State).
-
-pre_init_per_testcase(TC,Config,State) ->
- empty_cth:pre_init_per_testcase(TC,Config,State).
-
-post_end_per_testcase(TC,Config,Return,State) ->
- empty_cth:post_end_per_testcase(TC,Config,Return,State).
-
-on_tc_fail(TC, Reason, State) ->
- empty_cth:on_tc_fail(TC,Reason,State).
-
-on_tc_skip(TC, Reason, State) ->
- empty_cth:on_tc_skip(TC,Reason,State).
-
-terminate(State) ->
- empty_cth:terminate(State).
+%%
+%% %CopyrightEnd%
+%%
+
+
+-module(prio_cth).
+
+
+-include_lib("common_test/src/ct_util.hrl").
+
+
+%% CT Hooks
+-compile(export_all).
+
+id(Opts) ->
+ empty_cth:id(Opts).
+
+init(Id, Opts) ->
+ {ok, [Prio|_] = State} = empty_cth:init(Id, Opts),
+ {ok, State, Prio}.
+
+pre_init_per_suite(Suite, Config, State) ->
+ empty_cth:pre_init_per_suite(Suite,Config,State).
+
+post_init_per_suite(Suite,Config,Return,State) ->
+ empty_cth:post_init_per_suite(Suite,Config,Return,State).
+
+pre_end_per_suite(Suite,Config,State) ->
+ empty_cth:pre_end_per_suite(Suite,Config,State).
+
+post_end_per_suite(Suite,Config,Return,State) ->
+ empty_cth:post_end_per_suite(Suite,Config,Return,State).
+
+pre_init_per_group(Group,Config,State) ->
+ empty_cth:pre_init_per_group(Group,Config,State).
+
+post_init_per_group(Group,Config,Return,State) ->
+ empty_cth:post_init_per_group(Group,Config,Return,State).
+
+pre_end_per_group(Group,Config,State) ->
+ empty_cth:pre_end_per_group(Group,Config,State).
+
+post_end_per_group(Group,Config,Return,State) ->
+ empty_cth:post_end_per_group(Group,Config,Return,State).
+
+pre_init_per_testcase(TC,Config,State) ->
+ empty_cth:pre_init_per_testcase(TC,Config,State).
+
+post_init_per_testcase(TC,Config,Return,State) ->
+ empty_cth:post_init_per_testcase(TC,Config,Return,State).
+
+pre_end_per_testcase(TC,Config,State) ->
+ empty_cth:pre_end_per_testcase(TC,Config,State).
+
+post_end_per_testcase(TC,Config,Return,State) ->
+ empty_cth:post_end_per_testcase(TC,Config,Return,State).
+
+on_tc_fail(TC, Reason, State) ->
+ empty_cth:on_tc_fail(TC,Reason,State).
+
+on_tc_skip(TC, Reason, State) ->
+ empty_cth:on_tc_skip(TC,Reason,State).
+
+terminate(State) ->
+ empty_cth:terminate(State).
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 dfb696bcb9..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,8 +1,8 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2010-2011. All Rights Reserved.
-%%
+%%
+%% %CopyrightBegin%
+%%
+%% 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.
%% You may obtain a copy of the License at
@@ -14,62 +14,68 @@
%% 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(recover_post_suite_cth).
-
-
--include_lib("common_test/src/ct_util.hrl").
--include_lib("common_test/include/ct_event.hrl").
-
-
-%% CT Hooks
--compile(export_all).
-
-init(Id, Opts) ->
- empty_cth:init(Id, Opts).
-
-pre_init_per_suite(Suite, Config, State) ->
- empty_cth:pre_init_per_suite(Suite,Config,State).
-
-post_init_per_suite(Suite,Config,{'EXIT',Reason} = Return,State) ->
- empty_cth:post_init_per_suite(Suite,Config,Return,State),
- {lists:keydelete(tc_status,1,Config),State};
-post_init_per_suite(Suite,Config,Return,State) ->
- empty_cth:post_init_per_suite(Suite,Config,Return,State).
-
-pre_end_per_suite(Suite,Config,State) ->
- empty_cth:pre_end_per_suite(Suite,Config,State).
-
-post_end_per_suite(Suite,Config,Return,State) ->
- empty_cth:post_end_per_suite(Suite,Config,Return,State).
-
-pre_init_per_group(Group,Config,State) ->
- empty_cth:pre_init_per_group(Group,Config,State).
-
-post_init_per_group(Group,Config,Return,State) ->
- empty_cth:post_init_per_group(Group,Config,Return,State).
-
-pre_end_per_group(Group,Config,State) ->
- empty_cth:pre_end_per_group(Group,Config,State).
-
-post_end_per_group(Group,Config,Return,State) ->
- empty_cth:post_end_per_group(Group,Config,Return,State).
-
-pre_init_per_testcase(TC,Config,State) ->
- empty_cth:pre_init_per_testcase(TC,Config,State).
-
-post_end_per_testcase(TC,Config,Return,State) ->
- empty_cth:post_end_per_testcase(TC,Config,Return,State).
-
-on_tc_fail(TC, Reason, State) ->
- empty_cth:on_tc_fail(TC,Reason,State).
-
-on_tc_skip(TC, Reason, State) ->
- empty_cth:on_tc_skip(TC,Reason,State).
-
-terminate(State) ->
- empty_cth:terminate(State).
+%%
+%% %CopyrightEnd%
+%%
+
+
+-module(recover_post_suite_cth).
+
+
+-include_lib("common_test/src/ct_util.hrl").
+-include_lib("common_test/include/ct_event.hrl").
+
+
+%% CT Hooks
+-compile(export_all).
+
+init(Id, Opts) ->
+ empty_cth:init(Id, Opts).
+
+pre_init_per_suite(Suite, Config, State) ->
+ empty_cth:pre_init_per_suite(Suite,Config,State).
+
+post_init_per_suite(Suite,Config,{'EXIT',Reason} = Return,State) ->
+ empty_cth:post_init_per_suite(Suite,Config,Return,State),
+ {lists:keydelete(tc_status,1,Config),State};
+post_init_per_suite(Suite,Config,Return,State) ->
+ empty_cth:post_init_per_suite(Suite,Config,Return,State).
+
+pre_end_per_suite(Suite,Config,State) ->
+ empty_cth:pre_end_per_suite(Suite,Config,State).
+
+post_end_per_suite(Suite,Config,Return,State) ->
+ empty_cth:post_end_per_suite(Suite,Config,Return,State).
+
+pre_init_per_group(Group,Config,State) ->
+ empty_cth:pre_init_per_group(Group,Config,State).
+
+post_init_per_group(Group,Config,Return,State) ->
+ empty_cth:post_init_per_group(Group,Config,Return,State).
+
+pre_end_per_group(Group,Config,State) ->
+ empty_cth:pre_end_per_group(Group,Config,State).
+
+post_end_per_group(Group,Config,Return,State) ->
+ empty_cth:post_end_per_group(Group,Config,Return,State).
+
+pre_init_per_testcase(TC,Config,State) ->
+ empty_cth:pre_init_per_testcase(TC,Config,State).
+
+post_init_per_testcase(TC,Config,Return,State) ->
+ empty_cth:post_init_per_testcase(TC,Config,Return,State).
+
+pre_end_per_testcase(TC,Config,State) ->
+ empty_cth:pre_end_per_testcase(TC,Config,State).
+
+post_end_per_testcase(TC,Config,Return,State) ->
+ empty_cth:post_end_per_testcase(TC,Config,Return,State).
+
+on_tc_fail(TC, Reason, State) ->
+ empty_cth:on_tc_fail(TC,Reason,State).
+
+on_tc_skip(TC, Reason, State) ->
+ empty_cth:on_tc_skip(TC,Reason,State).
+
+terminate(State) ->
+ empty_cth:terminate(State).
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 50b220d093..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,8 +1,8 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2010-2011. All Rights Reserved.
-%%
+%%
+%% %CopyrightBegin%
+%%
+%% 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.
%% You may obtain a copy of the License at
@@ -14,63 +14,69 @@
%% 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(same_id_cth).
-
-
--include_lib("common_test/src/ct_util.hrl").
--include_lib("common_test/include/ct_event.hrl").
-
-
-%% CT Hooks
--compile(export_all).
-
-id(Opts) ->
- empty_cth:id(Opts),
- ?MODULE.
-
-init(Id, Opts) ->
- empty_cth:init(Id, Opts).
-
-pre_init_per_suite(Suite, Config, State) ->
- empty_cth:pre_init_per_suite(Suite,Config,State).
-
-post_init_per_suite(Suite,Config,Return,State) ->
- empty_cth:post_init_per_suite(Suite,Config,Return,State).
-
-pre_end_per_suite(Suite,Config,State) ->
- empty_cth:pre_end_per_suite(Suite,Config,State).
-
-post_end_per_suite(Suite,Config,Return,State) ->
- empty_cth:post_end_per_suite(Suite,Config,Return,State).
-
-pre_init_per_group(Group,Config,State) ->
- empty_cth:pre_init_per_group(Group,Config,State).
-
-post_init_per_group(Group,Config,Return,State) ->
- empty_cth:post_init_per_group(Group,Config,Return,State).
-
-pre_end_per_group(Group,Config,State) ->
- empty_cth:pre_end_per_group(Group,Config,State).
-
-post_end_per_group(Group,Config,Return,State) ->
- empty_cth:post_end_per_group(Group,Config,Return,State).
-
-pre_init_per_testcase(TC,Config,State) ->
- empty_cth:pre_init_per_testcase(TC,Config,State).
-
-post_end_per_testcase(TC,Config,Return,State) ->
- empty_cth:post_end_per_testcase(TC,Config,Return,State).
-
-on_tc_fail(TC, Reason, State) ->
- empty_cth:on_tc_fail(TC,Reason,State).
-
-on_tc_skip(TC, Reason, State) ->
- empty_cth:on_tc_skip(TC,Reason,State).
-
-terminate(State) ->
- empty_cth:terminate(State).
+%%
+%% %CopyrightEnd%
+%%
+
+
+-module(same_id_cth).
+
+
+-include_lib("common_test/src/ct_util.hrl").
+-include_lib("common_test/include/ct_event.hrl").
+
+
+%% CT Hooks
+-compile(export_all).
+
+id(Opts) ->
+ empty_cth:id(Opts),
+ ?MODULE.
+
+init(Id, Opts) ->
+ empty_cth:init(Id, Opts).
+
+pre_init_per_suite(Suite, Config, State) ->
+ empty_cth:pre_init_per_suite(Suite,Config,State).
+
+post_init_per_suite(Suite,Config,Return,State) ->
+ empty_cth:post_init_per_suite(Suite,Config,Return,State).
+
+pre_end_per_suite(Suite,Config,State) ->
+ empty_cth:pre_end_per_suite(Suite,Config,State).
+
+post_end_per_suite(Suite,Config,Return,State) ->
+ empty_cth:post_end_per_suite(Suite,Config,Return,State).
+
+pre_init_per_group(Group,Config,State) ->
+ empty_cth:pre_init_per_group(Group,Config,State).
+
+post_init_per_group(Group,Config,Return,State) ->
+ empty_cth:post_init_per_group(Group,Config,Return,State).
+
+pre_end_per_group(Group,Config,State) ->
+ empty_cth:pre_end_per_group(Group,Config,State).
+
+post_end_per_group(Group,Config,Return,State) ->
+ empty_cth:post_end_per_group(Group,Config,Return,State).
+
+pre_init_per_testcase(TC,Config,State) ->
+ empty_cth:pre_init_per_testcase(TC,Config,State).
+
+post_init_per_testcase(TC,Config,Return,State) ->
+ empty_cth:post_init_per_testcase(TC,Config,Return,State).
+
+pre_end_per_testcase(TC,Config,State) ->
+ empty_cth:pre_end_per_testcase(TC,Config,State).
+
+post_end_per_testcase(TC,Config,Return,State) ->
+ empty_cth:post_end_per_testcase(TC,Config,Return,State).
+
+on_tc_fail(TC, Reason, State) ->
+ empty_cth:on_tc_fail(TC,Reason,State).
+
+on_tc_skip(TC, Reason, State) ->
+ empty_cth:on_tc_skip(TC,Reason,State).
+
+terminate(State) ->
+ empty_cth:terminate(State).
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 d8332f77f6..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,8 +1,8 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2010-2011. All Rights Reserved.
-%%
+%%
+%% %CopyrightBegin%
+%%
+%% 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.
%% You may obtain a copy of the License at
@@ -14,60 +14,66 @@
%% 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(skip_post_suite_cth).
-
-
--include_lib("common_test/src/ct_util.hrl").
--include_lib("common_test/include/ct_event.hrl").
-
-
-%% CT Hooks
--compile(export_all).
-
-init(Id, Opts) ->
- empty_cth:init(Id, Opts).
-
-pre_init_per_suite(Suite, Config, State) ->
- empty_cth:pre_init_per_suite(Suite,Config,State).
-
-post_init_per_suite(Suite,Config,Return,State) ->
- empty_cth:post_init_per_suite(Suite,Config,Return,State),
- {{skip, "Test skip"}, State}.
-
-pre_end_per_suite(Suite,Config,State) ->
- empty_cth:pre_end_per_suite(Suite,Config,State).
-
-post_end_per_suite(Suite,Config,Return,State) ->
- empty_cth:post_end_per_suite(Suite,Config,Return,State).
-
-pre_init_per_group(Group,Config,State) ->
- empty_cth:pre_init_per_group(Group,Config,State).
-
-post_init_per_group(Group,Config,Return,State) ->
- empty_cth:post_init_per_group(Group,Config,Return,State).
-
-pre_end_per_group(Group,Config,State) ->
- empty_cth:pre_end_per_group(Group,Config,State).
-
-post_end_per_group(Group,Config,Return,State) ->
- empty_cth:post_end_per_group(Group,Config,Return,State).
-
-pre_init_per_testcase(TC,Config,State) ->
- empty_cth:pre_init_per_testcase(TC,Config,State).
-
-post_end_per_testcase(TC,Config,Return,State) ->
- empty_cth:post_end_per_testcase(TC,Config,Return,State).
-
-on_tc_fail(TC, Reason, State) ->
- empty_cth:on_tc_fail(TC,Reason,State).
-
-on_tc_skip(TC, Reason, State) ->
- empty_cth:on_tc_skip(TC,Reason,State).
-
-terminate(State) ->
- empty_cth:terminate(State).
+%%
+%% %CopyrightEnd%
+%%
+
+
+-module(skip_post_suite_cth).
+
+
+-include_lib("common_test/src/ct_util.hrl").
+-include_lib("common_test/include/ct_event.hrl").
+
+
+%% CT Hooks
+-compile(export_all).
+
+init(Id, Opts) ->
+ empty_cth:init(Id, Opts).
+
+pre_init_per_suite(Suite, Config, State) ->
+ empty_cth:pre_init_per_suite(Suite,Config,State).
+
+post_init_per_suite(Suite,Config,Return,State) ->
+ empty_cth:post_init_per_suite(Suite,Config,Return,State),
+ {{skip, "Test skip"}, State}.
+
+pre_end_per_suite(Suite,Config,State) ->
+ empty_cth:pre_end_per_suite(Suite,Config,State).
+
+post_end_per_suite(Suite,Config,Return,State) ->
+ empty_cth:post_end_per_suite(Suite,Config,Return,State).
+
+pre_init_per_group(Group,Config,State) ->
+ empty_cth:pre_init_per_group(Group,Config,State).
+
+post_init_per_group(Group,Config,Return,State) ->
+ empty_cth:post_init_per_group(Group,Config,Return,State).
+
+pre_end_per_group(Group,Config,State) ->
+ empty_cth:pre_end_per_group(Group,Config,State).
+
+post_end_per_group(Group,Config,Return,State) ->
+ empty_cth:post_end_per_group(Group,Config,Return,State).
+
+pre_init_per_testcase(TC,Config,State) ->
+ empty_cth:pre_init_per_testcase(TC,Config,State).
+
+post_init_per_testcase(TC,Config,Return,State) ->
+ empty_cth:post_init_per_testcase(TC,Config,Return,State).
+
+pre_end_per_testcase(TC,Config,State) ->
+ empty_cth:pre_end_per_testcase(TC,Config,State).
+
+post_end_per_testcase(TC,Config,Return,State) ->
+ empty_cth:post_end_per_testcase(TC,Config,Return,State).
+
+on_tc_fail(TC, Reason, State) ->
+ empty_cth:on_tc_fail(TC,Reason,State).
+
+on_tc_skip(TC, Reason, State) ->
+ empty_cth:on_tc_skip(TC,Reason,State).
+
+terminate(State) ->
+ empty_cth:terminate(State).
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 3c490c9fea..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,8 +1,8 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2010-2011. All Rights Reserved.
-%%
+%%
+%% %CopyrightBegin%
+%%
+%% 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.
%% You may obtain a copy of the License at
@@ -14,62 +14,68 @@
%% 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(skip_pre_end_cth).
-
-
--include_lib("common_test/src/ct_util.hrl").
--include_lib("common_test/include/ct_event.hrl").
-
-
-%% CT Hooks
--compile(export_all).
-
-init(Id, Opts) ->
- empty_cth:init(Id, Opts).
-
-
-pre_init_per_suite(Suite, Config, State) ->
- empty_cth:pre_init_per_suite(Suite,Config,State).
-
-post_init_per_suite(Suite,Config,Return,State) ->
- empty_cth:post_init_per_suite(Suite,Config,Return,State).
-
-pre_end_per_suite(Suite,Config,State) ->
- empty_cth:pre_end_per_suite(Suite,Config,State),
- {{skip, "Test skip"}, State}.
-
-post_end_per_suite(Suite,Config,Return,State) ->
- empty_cth:post_end_per_suite(Suite,Config,Return,State).
-
-pre_init_per_group(Group,Config,State) ->
- empty_cth:pre_init_per_group(Group,Config,State).
-
-post_init_per_group(Group,Config,Return,State) ->
- empty_cth:post_init_per_group(Group,Config,Return,State).
-
-pre_end_per_group(Group,Config,State) ->
- empty_cth:pre_end_per_group(Group,Config,State),
- {{skip, "Test skip"}, State}.
-
-post_end_per_group(Group,Config,Return,State) ->
- empty_cth:post_end_per_group(Group,Config,Return,State).
-
-pre_init_per_testcase(TC,Config,State) ->
- empty_cth:pre_init_per_testcase(TC,Config,State).
-
-post_end_per_testcase(TC,Config,Return,State) ->
- empty_cth:post_end_per_testcase(TC,Config,Return,State).
-
-on_tc_fail(TC, Reason, State) ->
- empty_cth:on_tc_fail(TC,Reason,State).
-
-on_tc_skip(TC, Reason, State) ->
- empty_cth:on_tc_skip(TC,Reason,State).
-
-terminate(State) ->
- empty_cth:terminate(State).
+%%
+%% %CopyrightEnd%
+%%
+
+
+-module(skip_pre_end_cth).
+
+
+-include_lib("common_test/src/ct_util.hrl").
+-include_lib("common_test/include/ct_event.hrl").
+
+
+%% CT Hooks
+-compile(export_all).
+
+init(Id, Opts) ->
+ empty_cth:init(Id, Opts).
+
+
+pre_init_per_suite(Suite, Config, State) ->
+ empty_cth:pre_init_per_suite(Suite,Config,State).
+
+post_init_per_suite(Suite,Config,Return,State) ->
+ empty_cth:post_init_per_suite(Suite,Config,Return,State).
+
+pre_end_per_suite(Suite,Config,State) ->
+ empty_cth:pre_end_per_suite(Suite,Config,State),
+ {{skip, "Test skip"}, State}.
+
+post_end_per_suite(Suite,Config,Return,State) ->
+ empty_cth:post_end_per_suite(Suite,Config,Return,State).
+
+pre_init_per_group(Group,Config,State) ->
+ empty_cth:pre_init_per_group(Group,Config,State).
+
+post_init_per_group(Group,Config,Return,State) ->
+ empty_cth:post_init_per_group(Group,Config,Return,State).
+
+pre_end_per_group(Group,Config,State) ->
+ empty_cth:pre_end_per_group(Group,Config,State),
+ {{skip, "Test skip"}, State}.
+
+post_end_per_group(Group,Config,Return,State) ->
+ empty_cth:post_end_per_group(Group,Config,Return,State).
+
+pre_init_per_testcase(TC,Config,State) ->
+ empty_cth:pre_init_per_testcase(TC,Config,State).
+
+post_init_per_testcase(TC,Config,Return,State) ->
+ empty_cth:post_init_per_testcase(TC,Config,Return,State).
+
+pre_end_per_testcase(TC,Config,State) ->
+ empty_cth:pre_end_per_testcase(TC,Config,State).
+
+post_end_per_testcase(TC,Config,Return,State) ->
+ empty_cth:post_end_per_testcase(TC,Config,Return,State).
+
+on_tc_fail(TC, Reason, State) ->
+ empty_cth:on_tc_fail(TC,Reason,State).
+
+on_tc_skip(TC, Reason, State) ->
+ empty_cth:on_tc_skip(TC,Reason,State).
+
+terminate(State) ->
+ empty_cth:terminate(State).
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 3ef08ff4e1..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,8 +1,8 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2010-2011. All Rights Reserved.
-%%
+%%
+%% %CopyrightBegin%
+%%
+%% 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.
%% You may obtain a copy of the License at
@@ -14,61 +14,67 @@
%% 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(skip_pre_suite_cth).
-
-
--include_lib("common_test/src/ct_util.hrl").
--include_lib("common_test/include/ct_event.hrl").
-
-
-%% CT Hooks
--compile(export_all).
-
-init(Id, Opts) ->
- empty_cth:init(Id, Opts).
-
-
-pre_init_per_suite(Suite, Config, State) ->
- empty_cth:pre_init_per_suite(Suite,Config,State),
- {{skip, "Test skip"}, State}.
-
-post_init_per_suite(Suite,Config,Return,State) ->
- empty_cth:post_init_per_suite(Suite,Config,Return,State).
-
-pre_end_per_suite(Suite,Config,State) ->
- empty_cth:pre_end_per_suite(Suite,Config,State).
-
-post_end_per_suite(Suite,Config,Return,State) ->
- empty_cth:post_end_per_suite(Suite,Config,Return,State).
-
-pre_init_per_group(Group,Config,State) ->
- empty_cth:pre_init_per_group(Group,Config,State).
-
-post_init_per_group(Group,Config,Return,State) ->
- empty_cth:post_init_per_group(Group,Config,Return,State).
-
-pre_end_per_group(Group,Config,State) ->
- empty_cth:pre_end_per_group(Group,Config,State).
-
-post_end_per_group(Group,Config,Return,State) ->
- empty_cth:post_end_per_group(Group,Config,Return,State).
-
-pre_init_per_testcase(TC,Config,State) ->
- empty_cth:pre_init_per_testcase(TC,Config,State).
-
-post_end_per_testcase(TC,Config,Return,State) ->
- empty_cth:post_end_per_testcase(TC,Config,Return,State).
-
-on_tc_fail(TC, Reason, State) ->
- empty_cth:on_tc_fail(TC,Reason,State).
-
-on_tc_skip(TC, Reason, State) ->
- empty_cth:on_tc_skip(TC,Reason,State).
-
-terminate(State) ->
- empty_cth:terminate(State).
+%%
+%% %CopyrightEnd%
+%%
+
+
+-module(skip_pre_suite_cth).
+
+
+-include_lib("common_test/src/ct_util.hrl").
+-include_lib("common_test/include/ct_event.hrl").
+
+
+%% CT Hooks
+-compile(export_all).
+
+init(Id, Opts) ->
+ empty_cth:init(Id, Opts).
+
+
+pre_init_per_suite(Suite, Config, State) ->
+ empty_cth:pre_init_per_suite(Suite,Config,State),
+ {{skip, "Test skip"}, State}.
+
+post_init_per_suite(Suite,Config,Return,State) ->
+ empty_cth:post_init_per_suite(Suite,Config,Return,State).
+
+pre_end_per_suite(Suite,Config,State) ->
+ empty_cth:pre_end_per_suite(Suite,Config,State).
+
+post_end_per_suite(Suite,Config,Return,State) ->
+ empty_cth:post_end_per_suite(Suite,Config,Return,State).
+
+pre_init_per_group(Group,Config,State) ->
+ empty_cth:pre_init_per_group(Group,Config,State).
+
+post_init_per_group(Group,Config,Return,State) ->
+ empty_cth:post_init_per_group(Group,Config,Return,State).
+
+pre_end_per_group(Group,Config,State) ->
+ empty_cth:pre_end_per_group(Group,Config,State).
+
+post_end_per_group(Group,Config,Return,State) ->
+ empty_cth:post_end_per_group(Group,Config,Return,State).
+
+pre_init_per_testcase(TC,Config,State) ->
+ empty_cth:pre_init_per_testcase(TC,Config,State).
+
+post_init_per_testcase(TC,Config,Return,State) ->
+ empty_cth:post_init_per_testcase(TC,Config,Return,State).
+
+pre_end_per_testcase(TC,Config,State) ->
+ empty_cth:pre_end_per_testcase(TC,Config,State).
+
+post_end_per_testcase(TC,Config,Return,State) ->
+ empty_cth:post_end_per_testcase(TC,Config,Return,State).
+
+on_tc_fail(TC, Reason, State) ->
+ empty_cth:on_tc_fail(TC,Reason,State).
+
+on_tc_skip(TC, Reason, State) ->
+ empty_cth:on_tc_skip(TC,Reason,State).
+
+terminate(State) ->
+ empty_cth:terminate(State).
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 338336a140..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,8 +1,8 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2010-2011. All Rights Reserved.
-%%
+%%
+%% %CopyrightBegin%
+%%
+%% 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.
%% You may obtain a copy of the License at
@@ -14,71 +14,79 @@
%% 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(state_update_cth).
-
-
--include_lib("common_test/src/ct_util.hrl").
--include_lib("common_test/include/ct_event.hrl").
-
-%% CT Hooks
--compile(export_all).
-
-init(Id, Opts) ->
- State = empty_cth:init(Id, Opts),
- {ok, [init|State]}.
-
-pre_init_per_suite(Suite, Config, State) ->
- empty_cth:pre_init_per_suite(Suite,Config,State),
- {Config, [pre_init_per_suite|State]}.
-
-post_init_per_suite(Suite,Config,Return,State) ->
- empty_cth:post_init_per_suite(Suite,Config,Return,State),
- {Config, [post_init_per_suite|State]}.
-
-pre_end_per_suite(Suite,Config,State) ->
- empty_cth:pre_end_per_suite(Suite,Config,State),
- {Config, [pre_end_per_suite|State]}.
-
-post_end_per_suite(Suite,Config,Return,State) ->
- empty_cth:post_end_per_suite(Suite,Config,Return,State),
- {Return, [post_end_per_suite|State]}.
-
-pre_init_per_group(Group,Config,State) ->
- empty_cth:pre_init_per_group(Group,Config,State),
- {Config, [pre_init_per_group|State]}.
-
-post_init_per_group(Group,Config,Return,State) ->
- empty_cth:post_init_per_group(Group,Config,Return,State),
- {Return, [post_init_per_group|State]}.
-
-pre_end_per_group(Group,Config,State) ->
- empty_cth:pre_end_per_group(Group,Config,State),
- {Config, [pre_end_per_group|State]}.
-
-post_end_per_group(Group,Config,Return,State) ->
- empty_cth:post_end_per_group(Group,Config,Return,State),
- {Return, [post_end_per_group|State]}.
-
-pre_init_per_testcase(TC,Config,State) ->
- empty_cth:pre_init_per_testcase(TC,Config,State),
- {Config, [pre_init_per_testcase|State]}.
-
-post_end_per_testcase(TC,Config,Return,State) ->
- empty_cth:post_end_per_testcase(TC,Config,Return,State),
- {Return, [post_end_per_testcase|State]}.
-
-on_tc_fail(TC, Reason, State) ->
- empty_cth:on_tc_fail(TC,Reason,State),
- [on_tc_fail|State].
-
-on_tc_skip(TC, Reason, State) ->
- empty_cth:on_tc_skip(TC,Reason,State),
- [on_tc_skip|State].
-
-terminate(State) ->
- empty_cth:terminate(State).
+%%
+%% %CopyrightEnd%
+%%
+
+
+-module(state_update_cth).
+
+
+-include_lib("common_test/src/ct_util.hrl").
+-include_lib("common_test/include/ct_event.hrl").
+
+%% CT Hooks
+-compile(export_all).
+
+init(Id, Opts) ->
+ State = empty_cth:init(Id, Opts),
+ {ok, [init|State]}.
+
+pre_init_per_suite(Suite, Config, State) ->
+ empty_cth:pre_init_per_suite(Suite,Config,State),
+ {Config, [pre_init_per_suite|State]}.
+
+post_init_per_suite(Suite,Config,Return,State) ->
+ empty_cth:post_init_per_suite(Suite,Config,Return,State),
+ {Config, [post_init_per_suite|State]}.
+
+pre_end_per_suite(Suite,Config,State) ->
+ empty_cth:pre_end_per_suite(Suite,Config,State),
+ {Config, [pre_end_per_suite|State]}.
+
+post_end_per_suite(Suite,Config,Return,State) ->
+ empty_cth:post_end_per_suite(Suite,Config,Return,State),
+ {Return, [post_end_per_suite|State]}.
+
+pre_init_per_group(Group,Config,State) ->
+ empty_cth:pre_init_per_group(Group,Config,State),
+ {Config, [pre_init_per_group|State]}.
+
+post_init_per_group(Group,Config,Return,State) ->
+ empty_cth:post_init_per_group(Group,Config,Return,State),
+ {Return, [post_init_per_group|State]}.
+
+pre_end_per_group(Group,Config,State) ->
+ empty_cth:pre_end_per_group(Group,Config,State),
+ {Config, [pre_end_per_group|State]}.
+
+post_end_per_group(Group,Config,Return,State) ->
+ empty_cth:post_end_per_group(Group,Config,Return,State),
+ {Return, [post_end_per_group|State]}.
+
+pre_init_per_testcase(TC,Config,State) ->
+ empty_cth:pre_init_per_testcase(TC,Config,State),
+ {Config, [pre_init_per_testcase|State]}.
+
+post_init_per_testcase(TC,Config,Return,State) ->
+ empty_cth:post_init_per_testcase(TC,Config,Return,State),
+ {Return, [post_init_per_testcase|State]}.
+
+pre_end_per_testcase(TC,Config,State) ->
+ empty_cth:pre_end_per_testcase(TC,Config,State),
+ {Config, [pre_end_per_testcase|State]}.
+
+post_end_per_testcase(TC,Config,Return,State) ->
+ empty_cth:post_end_per_testcase(TC,Config,Return,State),
+ {Return, [post_end_per_testcase|State]}.
+
+on_tc_fail(TC, Reason, State) ->
+ empty_cth:on_tc_fail(TC,Reason,State),
+ [on_tc_fail|State].
+
+on_tc_skip(TC, Reason, State) ->
+ empty_cth:on_tc_skip(TC,Reason,State),
+ [on_tc_skip|State].
+
+terminate(State) ->
+ empty_cth:terminate(State).
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 da43d56c12..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,8 +1,8 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2010-2011. All Rights Reserved.
-%%
+%%
+%% %CopyrightBegin%
+%%
+%% 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.
%% You may obtain a copy of the License at
@@ -14,59 +14,65 @@
%% 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(undef_cth).
-
-
--include_lib("common_test/src/ct_util.hrl").
--include_lib("common_test/include/ct_event.hrl").
-
-
-%% CT Hooks
--compile(export_all).
-
-init(Id, Opts) ->
- empty_cth:init(Id, Opts).
-
-pre_init_per_suite(_Suite, _Config, _State) ->
- lists:flaten([1,2,[3,4]]).
-
-post_init_per_suite(Suite,Config,Return,State) ->
- empty_cth:post_init_per_suite(Suite,Config,Return,State).
-
-pre_end_per_suite(Suite,Config,State) ->
- empty_cth:pre_end_per_suite(Suite,Config,State).
-
-post_end_per_suite(Suite,Config,Return,State) ->
- empty_cth:post_end_per_suite(Suite,Config,Return,State).
-
-pre_init_per_group(Group,Config,State) ->
- empty_cth:pre_init_per_group(Group,Config,State).
-
-post_init_per_group(Group,Config,Return,State) ->
- empty_cth:post_init_per_group(Group,Config,Return,State).
-
-pre_end_per_group(Group,Config,State) ->
- empty_cth:pre_end_per_group(Group,Config,State).
-
-post_end_per_group(Group,Config,Return,State) ->
- empty_cth:post_end_per_group(Group,Config,Return,State).
-
-pre_init_per_testcase(TC,Config,State) ->
- empty_cth:pre_init_per_testcase(TC,Config,State).
-
-post_end_per_testcase(TC,Config,Return,State) ->
- empty_cth:post_end_per_testcase(TC,Config,Return,State).
-
-on_tc_fail(TC, Reason, State) ->
- empty_cth:on_tc_fail(TC,Reason,State).
-
-on_tc_skip(TC, Reason, State) ->
- empty_cth:on_tc_skip(TC,Reason,State).
-
-terminate(State) ->
- empty_cth:terminate(State).
+%%
+%% %CopyrightEnd%
+%%
+
+
+-module(undef_cth).
+
+
+-include_lib("common_test/src/ct_util.hrl").
+-include_lib("common_test/include/ct_event.hrl").
+
+
+%% CT Hooks
+-compile(export_all).
+
+init(Id, Opts) ->
+ empty_cth:init(Id, Opts).
+
+pre_init_per_suite(_Suite, _Config, _State) ->
+ lists:flaten([1,2,[3,4]]).
+
+post_init_per_suite(Suite,Config,Return,State) ->
+ empty_cth:post_init_per_suite(Suite,Config,Return,State).
+
+pre_end_per_suite(Suite,Config,State) ->
+ empty_cth:pre_end_per_suite(Suite,Config,State).
+
+post_end_per_suite(Suite,Config,Return,State) ->
+ empty_cth:post_end_per_suite(Suite,Config,Return,State).
+
+pre_init_per_group(Group,Config,State) ->
+ empty_cth:pre_init_per_group(Group,Config,State).
+
+post_init_per_group(Group,Config,Return,State) ->
+ empty_cth:post_init_per_group(Group,Config,Return,State).
+
+pre_end_per_group(Group,Config,State) ->
+ empty_cth:pre_end_per_group(Group,Config,State).
+
+post_end_per_group(Group,Config,Return,State) ->
+ empty_cth:post_end_per_group(Group,Config,Return,State).
+
+pre_init_per_testcase(TC,Config,State) ->
+ empty_cth:pre_init_per_testcase(TC,Config,State).
+
+post_init_per_testcase(TC,Config,Return,State) ->
+ empty_cth:post_init_per_testcase(TC,Config,Return,State).
+
+pre_end_per_testcase(TC,Config,State) ->
+ empty_cth:pre_end_per_testcase(TC,Config,State).
+
+post_end_per_testcase(TC,Config,Return,State) ->
+ empty_cth:post_end_per_testcase(TC,Config,Return,State).
+
+on_tc_fail(TC, Reason, State) ->
+ empty_cth:on_tc_fail(TC,Reason,State).
+
+on_tc_skip(TC, Reason, State) ->
+ empty_cth:on_tc_skip(TC,Reason,State).
+
+terminate(State) ->
+ empty_cth:terminate(State).
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 0202201eed..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,8 +1,8 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2010-2011. All Rights Reserved.
-%%
+%%
+%% %CopyrightBegin%
+%%
+%% 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.
%% You may obtain a copy of the License at
@@ -14,71 +14,79 @@
%% 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(update_config_cth).
-
-
--include_lib("common_test/src/ct_util.hrl").
--include_lib("common_test/include/ct_event.hrl").
-
--define(now, os:timestamp()).
-
-%% CT Hooks
--compile(export_all).
-
-init(Id, Opts) ->
- empty_cth:init(Id, Opts).
-
-pre_init_per_suite(Suite, Config, State) ->
- empty_cth:pre_init_per_suite(Suite,Config,State),
- {[{pre_init_per_suite,?now}|Config],State}.
-
-post_init_per_suite(Suite,Config,Return,State) ->
- empty_cth:post_init_per_suite(Suite,Config,Return,State),
- {[{post_init_per_suite,?now}|Return],State}.
-
-pre_end_per_suite(Suite,Config,State) ->
- empty_cth:pre_end_per_suite(Suite,Config,State),
- {[{pre_end_per_suite,?now}|Config],State}.
-
-post_end_per_suite(Suite,Config,Return,State) ->
- empty_cth:post_end_per_suite(Suite,Config,Return,State),
- NewConfig = [{post_end_per_suite,?now}|Config],
- {NewConfig,NewConfig}.
-
-pre_init_per_group(Group,Config,State) ->
- empty_cth:pre_init_per_group(Group,Config,State),
- {[{pre_init_per_group,?now}|Config],State}.
-
-post_init_per_group(Group,Config,Return,State) ->
- empty_cth:post_init_per_group(Group,Config,Return,State),
- {[{post_init_per_group,?now}|Return],State}.
-
-pre_end_per_group(Group,Config,State) ->
- empty_cth:pre_end_per_group(Group,Config,State),
- {[{pre_end_per_group,?now}|Config],State}.
-
-post_end_per_group(Group,Config,Return,State) ->
- empty_cth:post_end_per_group(Group,Config,Return,State),
- {[{post_end_per_group,?now}|Config],State}.
-
-pre_init_per_testcase(TC,Config,State) ->
- empty_cth:pre_init_per_testcase(TC,Config,State),
- {[{pre_init_per_testcase,?now}|Config],State}.
-
-post_end_per_testcase(TC,Config,Return,State) ->
- empty_cth:post_end_per_testcase(TC,Config,Return,State),
- {[{post_end_per_testcase,?now}|Config],State}.
-
-on_tc_fail(TC, Reason, State) ->
- empty_cth:on_tc_fail(TC,Reason,State).
-
-on_tc_skip(TC, Reason, State) ->
- empty_cth:on_tc_skip(TC,Reason,State).
-
-terminate(State) ->
- empty_cth:terminate(State).
+%%
+%% %CopyrightEnd%
+%%
+
+
+-module(update_config_cth).
+
+
+-include_lib("common_test/src/ct_util.hrl").
+-include_lib("common_test/include/ct_event.hrl").
+
+-define(now, ct_test_support:unique_timestamp()).
+
+%% CT Hooks
+-compile(export_all).
+
+init(Id, Opts) ->
+ empty_cth:init(Id, Opts).
+
+pre_init_per_suite(Suite, Config, State) ->
+ empty_cth:pre_init_per_suite(Suite,Config,State),
+ {[{pre_init_per_suite,?now}|Config],State}.
+
+post_init_per_suite(Suite,Config,Return,State) ->
+ empty_cth:post_init_per_suite(Suite,Config,Return,State),
+ {[{post_init_per_suite,?now}|Return],State}.
+
+pre_end_per_suite(Suite,Config,State) ->
+ empty_cth:pre_end_per_suite(Suite,Config,State),
+ {[{pre_end_per_suite,?now}|Config],State}.
+
+post_end_per_suite(Suite,Config,Return,State) ->
+ empty_cth:post_end_per_suite(Suite,Config,Return,State),
+ NewConfig = [{post_end_per_suite,?now}|Config],
+ {NewConfig,NewConfig}.
+
+pre_init_per_group(Group,Config,State) ->
+ empty_cth:pre_init_per_group(Group,Config,State),
+ {[{pre_init_per_group,?now}|Config],State}.
+
+post_init_per_group(Group,Config,Return,State) ->
+ empty_cth:post_init_per_group(Group,Config,Return,State),
+ {[{post_init_per_group,?now}|Return],State}.
+
+pre_end_per_group(Group,Config,State) ->
+ empty_cth:pre_end_per_group(Group,Config,State),
+ {[{pre_end_per_group,?now}|Config],State}.
+
+post_end_per_group(Group,Config,Return,State) ->
+ empty_cth:post_end_per_group(Group,Config,Return,State),
+ {[{post_end_per_group,?now}|Config],State}.
+
+pre_init_per_testcase(TC,Config,State) ->
+ empty_cth:pre_init_per_testcase(TC,Config,State),
+ {[{pre_init_per_testcase,?now}|Config],State}.
+
+post_init_per_testcase(TC,Config,Return,State) ->
+ empty_cth:post_init_per_testcase(TC,Config,Return,State),
+ {[{post_init_per_testcase,?now}|Config],State}.
+
+pre_end_per_testcase(TC,Config,State) ->
+ empty_cth:pre_end_per_testcase(TC,Config,State),
+ {[{pre_end_per_testcase,?now}|Config],State}.
+
+post_end_per_testcase(TC,Config,Return,State) ->
+ empty_cth:post_end_per_testcase(TC,Config,Return,State),
+ {[{post_end_per_testcase,?now}|Config],State}.
+
+on_tc_fail(TC, Reason, State) ->
+ empty_cth:on_tc_fail(TC,Reason,State).
+
+on_tc_skip(TC, Reason, State) ->
+ empty_cth:on_tc_skip(TC,Reason,State).
+
+terminate(State) ->
+ empty_cth:terminate(State).
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 754163abae..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,8 +1,8 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2010-2012. All Rights Reserved.
-%%
+%%
+%% %CopyrightBegin%
+%%
+%% 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.
%% You may obtain a copy of the License at
@@ -14,118 +14,126 @@
%% 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_config_cth).
-
--include_lib("common_test/src/ct_util.hrl").
-
-%% CT Hooks
--compile(export_all).
-
--define(val(K, L), proplists:get_value(K, L)).
-
-id(Opts) ->
- ?MODULE.
-
-init(Id, Opts) ->
- {ok, State} = empty_cth:init(Id, Opts),
- {ok, State}.
-
-pre_init_per_suite(Suite, Config, State) ->
- ct_no_config_SUITE = ct:get_config(suite_cfg),
- empty_cth:pre_init_per_suite(Suite,
- [{pre_init_per_suite,true} | Config],
- State).
-
-post_init_per_suite(Suite,Config,Return,State) ->
- true = ?val(pre_init_per_suite, Return),
- ct_no_config_SUITE = ct:get_config(suite_cfg),
- empty_cth:post_init_per_suite(Suite,
- Config,
- [{post_init_per_suite,true} | Return],
- State).
-
-pre_end_per_suite(Suite,Config,State) ->
- true = ?val(post_init_per_suite, Config),
- ct_no_config_SUITE = ct:get_config(suite_cfg),
- empty_cth:pre_end_per_suite(Suite,
- [{pre_end_per_suite,true} | Config],
- State).
-
-post_end_per_suite(Suite,Config,Return,State) ->
- true = ?val(pre_end_per_suite, Config),
- ct_no_config_SUITE = ct:get_config(suite_cfg),
- empty_cth:post_end_per_suite(Suite,Config,Return,State).
-
-pre_init_per_group(Group,Config,State) ->
- true = ?val(post_init_per_suite, Config),
- ct_no_config_SUITE = ct:get_config(suite_cfg),
- test_group = ct:get_config(group_cfg),
- empty_cth:pre_init_per_group(Group,
- [{pre_init_per_group,true} | Config],
- State).
-
-post_init_per_group(Group,Config,Return,State) ->
- true = ?val(pre_init_per_group, Return),
- test_group = ct:get_config(group_cfg),
- empty_cth:post_init_per_group(Group,
- Config,
- [{post_init_per_group,true} | Return],
- State).
-
-pre_end_per_group(Group,Config,State) ->
- true = ?val(post_init_per_group, Config),
- ct_no_config_SUITE = ct:get_config(suite_cfg),
- test_group = ct:get_config(group_cfg),
- empty_cth:pre_end_per_group(Group,
- [{pre_end_per_group,true} | Config],
- State).
-
-post_end_per_group(Group,Config,Return,State) ->
- true = ?val(pre_end_per_group, Config),
- ct_no_config_SUITE = ct:get_config(suite_cfg),
- test_group = ct:get_config(group_cfg),
- empty_cth:post_end_per_group(Group,Config,Return,State).
-
-pre_init_per_testcase(TC,Config,State) ->
- true = ?val(post_init_per_suite, Config),
- case ?val(name, ?val(tc_group_properties, Config)) of
- undefined ->
- ok;
- _ ->
- true = ?val(post_init_per_group, Config),
- test_group = ct:get_config(group_cfg)
- end,
- ct_no_config_SUITE = ct:get_config(suite_cfg),
- CfgKey = list_to_atom(atom_to_list(TC) ++ "_cfg"),
- TC = ct:get_config(CfgKey),
- empty_cth:pre_init_per_testcase(TC,
- [{pre_init_per_testcase,true} | Config],
- State).
-
-post_end_per_testcase(TC,Config,Return,State) ->
- true = ?val(post_init_per_suite, Config),
- true = ?val(pre_init_per_testcase, Config),
- case ?val(name, ?val(tc_group_properties, Config)) of
- undefined ->
- ok;
- _ ->
- true = ?val(post_init_per_group, Config),
- test_group = ct:get_config(group_cfg)
- end,
- ct_no_config_SUITE = ct:get_config(suite_cfg),
- CfgKey = list_to_atom(atom_to_list(TC) ++ "_cfg"),
- TC = ct:get_config(CfgKey),
- empty_cth:post_end_per_testcase(TC,Config,Return,State).
-
-on_tc_fail(TC, Reason, State) ->
- empty_cth:on_tc_fail(TC,Reason,State).
-
-on_tc_skip(TC, Reason, State) ->
- empty_cth:on_tc_skip(TC,Reason,State).
-
-terminate(State) ->
- empty_cth:terminate(State).
+%%
+%% %CopyrightEnd%
+%%
+
+-module(verify_config_cth).
+
+-include_lib("common_test/src/ct_util.hrl").
+
+%% CT Hooks
+-compile(export_all).
+
+-define(val(K, L), proplists:get_value(K, L)).
+
+id(Opts) ->
+ ?MODULE.
+
+init(Id, Opts) ->
+ {ok, State} = empty_cth:init(Id, Opts),
+ {ok, State}.
+
+pre_init_per_suite(Suite, Config, State) ->
+ ct_no_config_SUITE = ct:get_config(suite_cfg),
+ empty_cth:pre_init_per_suite(Suite,
+ [{pre_init_per_suite,true} | Config],
+ State).
+
+post_init_per_suite(Suite,Config,Return,State) ->
+ true = ?val(pre_init_per_suite, Return),
+ ct_no_config_SUITE = ct:get_config(suite_cfg),
+ empty_cth:post_init_per_suite(Suite,
+ Config,
+ [{post_init_per_suite,true} | Return],
+ State).
+
+pre_end_per_suite(Suite,Config,State) ->
+ true = ?val(post_init_per_suite, Config),
+ ct_no_config_SUITE = ct:get_config(suite_cfg),
+ empty_cth:pre_end_per_suite(Suite,
+ [{pre_end_per_suite,true} | Config],
+ State).
+
+post_end_per_suite(Suite,Config,Return,State) ->
+ true = ?val(pre_end_per_suite, Config),
+ ct_no_config_SUITE = ct:get_config(suite_cfg),
+ empty_cth:post_end_per_suite(Suite,Config,Return,State).
+
+pre_init_per_group(Group,Config,State) ->
+ true = ?val(post_init_per_suite, Config),
+ ct_no_config_SUITE = ct:get_config(suite_cfg),
+ test_group = ct:get_config(group_cfg),
+ empty_cth:pre_init_per_group(Group,
+ [{pre_init_per_group,true} | Config],
+ State).
+
+post_init_per_group(Group,Config,Return,State) ->
+ true = ?val(pre_init_per_group, Return),
+ test_group = ct:get_config(group_cfg),
+ empty_cth:post_init_per_group(Group,
+ Config,
+ [{post_init_per_group,true} | Return],
+ State).
+
+pre_end_per_group(Group,Config,State) ->
+ true = ?val(post_init_per_group, Config),
+ ct_no_config_SUITE = ct:get_config(suite_cfg),
+ test_group = ct:get_config(group_cfg),
+ empty_cth:pre_end_per_group(Group,
+ [{pre_end_per_group,true} | Config],
+ State).
+
+post_end_per_group(Group,Config,Return,State) ->
+ true = ?val(pre_end_per_group, Config),
+ ct_no_config_SUITE = ct:get_config(suite_cfg),
+ test_group = ct:get_config(group_cfg),
+ empty_cth:post_end_per_group(Group,Config,Return,State).
+
+pre_init_per_testcase(TC,Config,State) ->
+ true = ?val(post_init_per_suite, Config),
+ case ?val(name, ?val(tc_group_properties, Config)) of
+ undefined ->
+ ok;
+ _ ->
+ true = ?val(post_init_per_group, Config),
+ test_group = ct:get_config(group_cfg)
+ end,
+ ct_no_config_SUITE = ct:get_config(suite_cfg),
+ CfgKey = list_to_atom(atom_to_list(TC) ++ "_cfg"),
+ TC = ct:get_config(CfgKey),
+ empty_cth:pre_init_per_testcase(TC,
+ [{pre_init_per_testcase,true} | Config],
+ State).
+
+%%! TODO: Verify Config also in post_init and pre_end!
+
+post_init_per_testcase(TC,Config,Return,State) ->
+ empty_cth:post_init_per_testcase(TC,Config,Return,State).
+
+pre_end_per_testcase(TC,Config,State) ->
+ empty_cth:pre_end_per_testcase(TC,Config,State).
+
+post_end_per_testcase(TC,Config,Return,State) ->
+ true = ?val(post_init_per_suite, Config),
+ true = ?val(pre_init_per_testcase, Config),
+ case ?val(name, ?val(tc_group_properties, Config)) of
+ undefined ->
+ ok;
+ _ ->
+ true = ?val(post_init_per_group, Config),
+ test_group = ct:get_config(group_cfg)
+ end,
+ ct_no_config_SUITE = ct:get_config(suite_cfg),
+ CfgKey = list_to_atom(atom_to_list(TC) ++ "_cfg"),
+ TC = ct:get_config(CfgKey),
+ empty_cth:post_end_per_testcase(TC,Config,Return,State).
+
+on_tc_fail(TC, Reason, State) ->
+ empty_cth:on_tc_fail(TC,Reason,State).
+
+on_tc_skip(TC, Reason, State) ->
+ empty_cth:on_tc_skip(TC,Reason,State).
+
+terminate(State) ->
+ empty_cth:terminate(State).
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 2c8f7a50aa..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,8 +1,8 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2010-2012. All Rights Reserved.
-%%
+%%
+%% %CopyrightBegin%
+%%
+%% 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.
%% You may obtain a copy of the License at
@@ -14,83 +14,91 @@
%% 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_data_dir_cth).
-
--include_lib("common_test/src/ct_util.hrl").
-
-%% CT Hooks
--compile(export_all).
-
--define(val(K, L), proplists:get_value(K, L)).
-
-check_dirs(State,Config) ->
- DataDirName = ?val(data_dir_name, State),
- %% check priv_dir
- PrivDir = proplists:get_value(priv_dir, Config),
- "log_private" = filename:basename(PrivDir),
- {ok,_} = file:list_dir(PrivDir),
-
- %% check data_dir
- DataDir = proplists:get_value(data_dir, Config),
- DataDirName = filename:basename(DataDir),
- ok.
-
-id(_Opts) ->
- ?MODULE.
-
-init(Id, _Opts) ->
- {ok, _State} = empty_cth:init(Id, []),
- {ok, [{data_dir_name,"ct_data_dir_SUITE_data"}]}.
-
-pre_init_per_suite(Suite,Config,State) ->
- check_dirs(State,Config),
- empty_cth:pre_init_per_suite(Suite,Config,State).
-
-post_init_per_suite(Suite,Config,Return,State) ->
- check_dirs(State,Return),
- empty_cth:post_init_per_suite(Suite,Config,Return,State).
-
-pre_end_per_suite(Suite,Config,State) ->
- check_dirs(State,Config),
- empty_cth:pre_end_per_suite(Suite,Config,State).
-
-post_end_per_suite(Suite,Config,Return,State) ->
- check_dirs(State,Config),
- empty_cth:post_end_per_suite(Suite,Config,Return,State).
-
-pre_init_per_group(Group,Config,State) ->
- check_dirs(State,Config),
- empty_cth:pre_init_per_group(Group,Config,State).
-
-post_init_per_group(Group,Config,Return,State) ->
- check_dirs(State,Return),
- empty_cth:post_init_per_group(Group,Config,Return,State).
-
-pre_end_per_group(Group,Config,State) ->
- check_dirs(State,Config),
- empty_cth:pre_end_per_group(Group,Config,State).
-
-post_end_per_group(Group,Config,Return,State) ->
- check_dirs(State,Config),
- empty_cth:post_end_per_group(Group,Config,Return,State).
-
-pre_init_per_testcase(TC,Config,State) ->
- check_dirs(State,Config),
- empty_cth:pre_init_per_testcase(TC,Config,State).
-
-post_end_per_testcase(TC,Config,Return,State) ->
- check_dirs(State,Config),
- empty_cth:post_end_per_testcase(TC,Config,Return,State).
-
-on_tc_fail(TC, Reason, State) ->
- empty_cth:on_tc_fail(TC,Reason,State).
-
-on_tc_skip(TC, Reason, State) ->
- empty_cth:on_tc_skip(TC,Reason,State).
-
-terminate(State) ->
- empty_cth:terminate(State).
+%%
+%% %CopyrightEnd%
+%%
+
+-module(verify_data_dir_cth).
+
+-include_lib("common_test/src/ct_util.hrl").
+
+%% CT Hooks
+-compile(export_all).
+
+-define(val(K, L), proplists:get_value(K, L)).
+
+check_dirs(State,Config) ->
+ DataDirName = ?val(data_dir_name, State),
+ %% check priv_dir
+ PrivDir = proplists:get_value(priv_dir, Config),
+ "log_private" = filename:basename(PrivDir),
+ {ok,_} = file:list_dir(PrivDir),
+
+ %% check data_dir
+ DataDir = proplists:get_value(data_dir, Config),
+ DataDirName = filename:basename(DataDir),
+ ok.
+
+id(_Opts) ->
+ ?MODULE.
+
+init(Id, _Opts) ->
+ {ok, _State} = empty_cth:init(Id, []),
+ {ok, [{data_dir_name,"ct_data_dir_SUITE_data"}]}.
+
+pre_init_per_suite(Suite,Config,State) ->
+ check_dirs(State,Config),
+ empty_cth:pre_init_per_suite(Suite,Config,State).
+
+post_init_per_suite(Suite,Config,Return,State) ->
+ check_dirs(State,Return),
+ empty_cth:post_init_per_suite(Suite,Config,Return,State).
+
+pre_end_per_suite(Suite,Config,State) ->
+ check_dirs(State,Config),
+ empty_cth:pre_end_per_suite(Suite,Config,State).
+
+post_end_per_suite(Suite,Config,Return,State) ->
+ check_dirs(State,Config),
+ empty_cth:post_end_per_suite(Suite,Config,Return,State).
+
+pre_init_per_group(Group,Config,State) ->
+ check_dirs(State,Config),
+ empty_cth:pre_init_per_group(Group,Config,State).
+
+post_init_per_group(Group,Config,Return,State) ->
+ check_dirs(State,Return),
+ empty_cth:post_init_per_group(Group,Config,Return,State).
+
+pre_end_per_group(Group,Config,State) ->
+ check_dirs(State,Config),
+ empty_cth:pre_end_per_group(Group,Config,State).
+
+post_end_per_group(Group,Config,Return,State) ->
+ check_dirs(State,Config),
+ empty_cth:post_end_per_group(Group,Config,Return,State).
+
+pre_init_per_testcase(TC,Config,State) ->
+ check_dirs(State,Config),
+ empty_cth:pre_init_per_testcase(TC,Config,State).
+
+post_init_per_testcase(TC,Config,Return,State) ->
+ check_dirs(State,Config),
+ empty_cth:post_init_per_testcase(TC,Config,Return,State).
+
+pre_end_per_testcase(TC,Config,State) ->
+ check_dirs(State,Config),
+ empty_cth:pre_end_per_testcase(TC,Config,State).
+
+post_end_per_testcase(TC,Config,Return,State) ->
+ check_dirs(State,Config),
+ empty_cth:post_end_per_testcase(TC,Config,Return,State).
+
+on_tc_fail(TC, Reason, State) ->
+ empty_cth:on_tc_fail(TC,Reason,State).
+
+on_tc_skip(TC, Reason, State) ->
+ empty_cth:on_tc_skip(TC,Reason,State).
+
+terminate(State) ->
+ empty_cth:terminate(State).
diff --git a/lib/common_test/test/ct_master_SUITE.erl b/lib/common_test/test/ct_master_SUITE.erl
index 55837352e2..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.
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 a562719296..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.
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..03fbc17bd2 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.
@@ -48,7 +48,12 @@ init_per_suite(Config) ->
{error,Reason} when Reason=/={already_loaded,crypto} ->
{skip, Reason};
_ ->
- ct_test_support:init_per_suite(Config)
+ case application:load(ssh) of
+ {error,Reason} when Reason=/={already_loaded,ssh} ->
+ {skip, Reason};
+ _ ->
+ ct_test_support:init_per_suite(Config)
+ end
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 49b02d2bba..065639dd36 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.
@@ -123,15 +123,21 @@ init_per_testcase(_Case, Config) ->
end_per_testcase(_Case, _Config) ->
ok.
+init_per_suite() ->
+ [{timetrap,2*?default_timeout}]. % making dsa files can be slow
init_per_suite(Config) ->
- case catch {crypto:start(), ssh:start()} of
- {ok, ok} ->
+ case catch ssh:start() of
+ Ok when Ok==ok; Ok=={error,{already_started,ssh}} ->
+ ct:log("ssh started",[]),
{ok, _} = netconfc_test_lib:get_id_keys(Config),
netconfc_test_lib:make_dsa_files(Config),
+ ct:log("dsa files created",[]),
Server = ?NS:start(?config(data_dir,Config)),
+ ct:log("netconf server started",[]),
[{server,Server}|Config];
- _ ->
- {skip, "Crypto and/or SSH could not be started!"}
+ Other ->
+ ct:log("could not start ssh: ~p",[Other]),
+ {skip, "SSH could not be started!"}
end.
end_per_suite(Config) ->
@@ -332,7 +338,8 @@ invalid_opt(Config) ->
Opts1 = ?DEFAULT_SSH_OPTS(DataDir) ++ [{timeout,invalidvalue}],
{error,{invalid_option,{timeout,invalidvalue}}} = ct_netconfc:open(Opts1),
Opts2 = ?DEFAULT_SSH_OPTS(DataDir) ++ [{some_other_opt,true}],
- {error,{invalid_option,{some_other_opt,true}}} = ct_netconfc:open(Opts2),
+ {error,{ssh,could_not_connect_to_server,{options,_}}} =
+ ct_netconfc:open(Opts2),
ok.
timeout_close_session(Config) ->
@@ -805,7 +812,7 @@ 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) ->
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..04bfe75187 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) ->
stop_node(Case),
- Dog=?config(watchdog, Config),
- test_server:timetrap_cancel(Dog),
ok.
stop_node(Case) ->
@@ -63,14 +61,19 @@ stop_node(Case) ->
rpc:call(Node,erlang,halt,[]).
+init_per_suite() ->
+ [{timetrap,2*?default_timeout}]. % making dsa files can be slow
init_per_suite(Config) ->
- case {crypto:start(),ssh:start()} of
- {ok,ok} ->
+ case ssh:start() of
+ Ok when Ok==ok; Ok=={error,{already_started,ssh}} ->
+ ct:log("SSH started locally",[]),
{ok, _} = netconfc_test_lib:get_id_keys(Config),
netconfc_test_lib:make_dsa_files(Config),
+ ct:log("dsa files created",[]),
Config;
- _ ->
- {skip, "Crypto and/or SSH could not be started locally!"}
+ Other ->
+ ct:log("could not start ssh locally: ~p",[Other]),
+ {skip, "SSH could not be started locally!"}
end.
end_per_suite(Config) ->
@@ -87,12 +90,15 @@ remote_crash(Config) ->
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} ->
+ case rpc:call(Node,ssh,start,[]) of
+ Ok when Ok==ok; Ok=={error,{already_started,ssh}} ->
+ ct:log("SSH started remote",[]),
Server = rpc:call(Node,?NS,start,[?config(data_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 remote: ~p",[Other]),
+ {skip, "SSH could not be started remote!"}
end.
remote_crash(Node,Config) ->
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..9fb1fb6547 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.
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 2994ce4a96..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.
@@ -44,13 +44,29 @@
%% instance, the tests need to be performed on a separate node (or
%% there will be clashes with logging processes etc).
%%--------------------------------------------------------------------
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{seconds,120}}].
+
+all() ->
+ [
+ pre_post_io
+ ].
+
init_per_suite(Config) ->
- DataDir = ?config(data_dir, Config),
- CTH = filename:join(DataDir, "cth_ctrl.erl"),
- ct:pal("Compiling ~p: ~p",
- [CTH,compile:file(CTH,[{outdir,DataDir},debug_info])]),
- ct_test_support:init_per_suite([{path_dirs,[DataDir]},
- {start_sasl,true} | 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 ->
+ DataDir = ?config(data_dir, Config),
+ CTH = filename:join(DataDir, "cth_ctrl.erl"),
+ ct:pal("Compiling ~p: ~p",
+ [CTH,compile:file(CTH,[{outdir,DataDir},
+ debug_info])]),
+ ct_test_support:init_per_suite([{path_dirs,[DataDir]},
+ {start_sasl,true} | Config])
+ end.
end_per_suite(Config) ->
ct_test_support:end_per_suite(Config).
@@ -61,13 +77,6 @@ init_per_testcase(TestCase, Config) ->
end_per_testcase(TestCase, Config) ->
ct_test_support:end_per_testcase(TestCase, Config).
-suite() -> [{ct_hooks,[ts_install_cth]}].
-
-all() ->
- [
- pre_post_io
- ].
-
%%--------------------------------------------------------------------
%% TEST CASES
%%--------------------------------------------------------------------
@@ -90,31 +99,50 @@ pre_post_io(Config) ->
%%!--------------------------------------------------------------------
spawn(fun() ->
- ct:pal("CONTROLLER: Started!", []),
+ ct:pal("CONTROLLER: Starting test run #1...", []),
%% --- test run 1 ---
- ct:sleep(3000),
- ct:pal("CONTROLLER: Handle remote events = true", []),
- ok = ct_test_support:ct_rpc({cth_log_redirect,
- handle_remote_events,
- [true]}, Config),
- ct:sleep(2000),
- ct:pal("CONTROLLER: Proceeding with test run #1!", []),
+ try_loop(ct_test_support, ct_rpc, [{cth_log_redirect,
+ handle_remote_events,
+ [true]}, Config], 3000),
+ CTLoggerPid1 = ct_test_support:ct_rpc({erlang,whereis,
+ [ct_logs]}, Config),
+ ct:pal("CONTROLLER: Logger = ~w~nHandle remote events = true",
+ [CTLoggerPid1]),
+ ct:sleep(5000),
+ ct:pal("CONTROLLER: Proceeding with test run #1...", []),
ok = ct_test_support:ct_rpc({cth_ctrl,proceed,[]}, Config),
ct:sleep(6000),
- ct:pal("CONTROLLER: Proceeding with shutdown #1!", []),
+ ct:pal("CONTROLLER: Proceeding with shutdown #1...", []),
ok = ct_test_support:ct_rpc({cth_ctrl,proceed,[]}, Config),
+ try_loop(fun() ->
+ false = ct_test_support:ct_rpc({erlang,
+ is_process_alive,
+ [CTLoggerPid1]},
+ Config)
+ end, 3000),
+ ct:pal("CONTROLLER: Shutdown #1 complete!", []),
+ ct:pal("CONTROLLER: Starting test run #2...", []),
%% --- test run 2 ---
- ct:sleep(3000),
- ct:pal("CONTROLLER: Handle remote events = true", []),
- ok = ct_test_support:ct_rpc({cth_log_redirect,
- handle_remote_events,
- [true]}, Config),
- ct:sleep(2000),
- ct:pal("CONTROLLER: Proceeding with test run #2!", []),
+ try_loop(ct_test_support, ct_rpc, [{cth_log_redirect,
+ handle_remote_events,
+ [true]}, Config], 3000),
+ CTLoggerPid2 = ct_test_support:ct_rpc({erlang,whereis,
+ [ct_logs]}, Config),
+ ct:pal("CONTROLLER: Logger = ~w~nHandle remote events = true",
+ [CTLoggerPid2]),
+ ct:sleep(5000),
+ ct:pal("CONTROLLER: Proceeding with test run #2...", []),
ok = ct_test_support:ct_rpc({cth_ctrl,proceed,[]}, Config),
ct:sleep(6000),
- ct:pal("CONTROLLER: Proceeding with shutdown #2!", []),
- ok = ct_test_support:ct_rpc({cth_ctrl,proceed,[]}, Config)
+ ct:pal("CONTROLLER: Proceeding with shutdown #2...", []),
+ ok = ct_test_support:ct_rpc({cth_ctrl,proceed,[]}, Config),
+ try_loop(fun() ->
+ false = ct_test_support:ct_rpc({erlang,
+ is_process_alive,
+ [CTLoggerPid2]},
+ Config)
+ end, 3000),
+ ct:pal("CONTROLLER: Shutdown #2 complete!", [])
end),
ct_test_support:run(Opts, Config),
Events = ct_test_support:get_events(ERPid, Config),
@@ -157,7 +185,7 @@ pre_post_io(Config) ->
Counters
end, {pre,0,0,0,0}, Ts),
[_|Counters] = tuple_to_list(PrePostIOEntries),
- ct:log("Entries in the Pre/Post Test IO Log: ~p", [Counters]),
+ ct:pal("Entries in the Pre/Post Test IO Log: ~w", [Counters]),
case [C || C <- Counters, C < 2] of
[] ->
ok;
@@ -183,7 +211,7 @@ pre_post_io(Config) ->
[LogN,ErrN+1];
(_, Counters) -> Counters
end, [0,0], Ts),
- ct:log("Entries in the Unexpected IO Log: ~p", [UnexpIOEntries]),
+ ct:log("Entries in the Unexpected IO Log: ~w", [UnexpIOEntries]),
case [N || N <- UnexpIOEntries, N < 2] of
[] ->
ok;
@@ -208,6 +236,38 @@ setup(Test, Config) ->
reformat(Events, EH) ->
ct_test_support:reformat(Events, EH).
+try_loop(_Fun, 0) ->
+ ct:pal("WARNING! Fun never succeeded!", []),
+ gave_up;
+try_loop(Fun, N) ->
+ try Fun() of
+ {error,_} ->
+ timer:sleep(10),
+ try_loop(Fun, N-1);
+ Result ->
+ Result
+ catch
+ _:_What ->
+ timer:sleep(10),
+ try_loop(Fun, N-1)
+ end.
+
+try_loop(M, F, _A, 0) ->
+ ct:pal("WARNING! ~w:~w never succeeded!", [M,F]),
+ gave_up;
+try_loop(M, F, A, N) ->
+ try apply(M, F, A) of
+ {error,_} ->
+ timer:sleep(10),
+ try_loop(M, F, A, N-1);
+ Result ->
+ Result
+ catch
+ _:_ ->
+ timer:sleep(10),
+ try_loop(M, F, A, N-1)
+ end.
+
%%%-----------------------------------------------------------------
%%% TEST EVENTS
%%%-----------------------------------------------------------------
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 b8595b40b9..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.
@@ -53,8 +53,7 @@ init(_Id, _Opts) ->
receive
{?MODULE,proceed} -> ok
after
- 10000 ->
- ok
+ 10000 -> ok
end,
{ok,[],ct_last}.
@@ -66,8 +65,7 @@ terminate(_State) ->
receive
{?MODULE,proceed} -> ok
after
- 10000 ->
- ok
+ 10000 -> ok
end,
stop_external_logger(cth_logger),
stop_dispatcher(),
@@ -94,7 +92,7 @@ init_logger(Name) ->
logger_loop(N) ->
ct:log("Logger iteration: ~p", [N]),
error_logger:error_report(N),
- timer:sleep(250),
+ timer:sleep(100),
logger_loop(N+1).
%%%-----------------------------------------------------------------
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
new file mode 100644
index 0000000000..f9450453c9
--- /dev/null
+++ b/lib/common_test/test/ct_release_test_SUITE.erl
@@ -0,0 +1,190 @@
+%%
+%% %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_release_test_SUITE
+%%%
+%%% Description:
+%%% Test ct_release_test module
+%%%
+%%%-------------------------------------------------------------------
+-module(ct_release_test_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).
+-define(suite, release_test_SUITE).
+
+%%--------------------------------------------------------------------
+%% TEST SERVER CALLBACK FUNCTIONS
+%%--------------------------------------------------------------------
+
+%%--------------------------------------------------------------------
+%% Description: Since Common Test starts another Test Server
+%% instance, the tests need to be performed on a separate node (or
+%% there will be clashes with logging processes etc).
+%%--------------------------------------------------------------------
+init_per_suite(Config) ->
+ case os:type() of
+ {win32,_} ->
+ {skipped, "Upgrade tests do currently not work on windows"};
+ _ ->
+ ct_test_support:init_per_suite(Config)
+ end.
+
+end_per_suite(Config) ->
+ ct_test_support:end_per_suite(Config).
+
+init_per_testcase(TestCase, Config) ->
+ ct_test_support:init_per_testcase(TestCase, Config).
+
+end_per_testcase(TestCase, Config) ->
+ ct_test_support:end_per_testcase(TestCase, Config).
+
+suite() -> [{ct_hooks,[ts_install_cth]}].
+
+all() ->
+ [
+ minor,
+ major,
+ major_fail_init,
+ major_fail_upgraded,
+ major_fail_downgraded,
+ major_fail_no_init
+ ].
+
+%%--------------------------------------------------------------------
+%% TEST CASES
+%%--------------------------------------------------------------------
+
+%%%-----------------------------------------------------------------
+%%%
+minor(Config) when is_list(Config) ->
+ {Suite,Cfg} = setup1(Config),
+ {Opts,ERPid} = setup([{suite,Suite},
+ {testcase,minor},
+ {label,minor}|Cfg], Config),
+ execute(minor, Opts, ERPid, Config).
+
+major(Config) when is_list(Config) ->
+ {Suite,Cfg} = setup1(Config),
+ {Opts,ERPid} = setup([{suite,Suite},
+ {testcase,major},
+ {label,major}|Cfg], Config),
+ execute(major, Opts, ERPid, Config).
+
+major_fail_init(Config) when is_list(Config) ->
+ {Suite,Cfg} = setup1(Config),
+ {Opts,ERPid} = setup([{suite,Suite},
+ {testcase,major_fail_init},
+ {label,major_fail_init}|Cfg], Config),
+ execute(major_fail_init, Opts, ERPid, Config).
+
+major_fail_upgraded(Config) when is_list(Config) ->
+ {Suite,Cfg} = setup1(Config),
+ {Opts,ERPid} = setup([{suite,Suite},
+ {testcase,major_fail_upgraded},
+ {label,major_fail_upgraded}|Cfg], Config),
+ execute(major_fail_upgraded, Opts, ERPid, Config).
+
+major_fail_downgraded(Config) when is_list(Config) ->
+ {Suite,Cfg} = setup1(Config),
+ {Opts,ERPid} = setup([{suite,Suite},
+ {testcase,major_fail_downgraded},
+ {label,major_fail_downgraded}|Cfg], Config),
+ execute(major_fail_downgraded, Opts, ERPid, Config).
+
+major_fail_no_init(Config) when is_list(Config) ->
+ {Suite,Cfg} = setup1(Config),
+ {Opts,ERPid} = setup([{suite,Suite},
+ {testcase,major_fail_no_init},
+ {label,major_fail_no_init}|Cfg], Config),
+ execute(major_fail_no_init, Opts, ERPid, Config).
+
+
+%%%-----------------------------------------------------------------
+%%% HELP FUNCTIONS
+%%%-----------------------------------------------------------------
+setup1(Config) ->
+ DataDir = ?config(data_dir, Config),
+ Suite = filename:join(DataDir, atom_to_list(?suite)),
+ Cfg = case ct:get_config(otp_releases) of
+ undefined ->
+ [];
+ Rels ->
+ CfgFile = filename:join(DataDir, "release_test.cfg"),
+ file:write_file(CfgFile,
+ io_lib:format("{otp_releases,~p}.",[Rels])),
+ [{config,CfgFile}]
+ end,
+ {Suite,Cfg}.
+
+setup(Test, Config) ->
+ Opts0 = ct_test_support:get_opts(Config),
+ Level = ?config(trace_level, Config),
+ EvHArgs = [{cbm,ct_test_support},{trace_level,Level}],
+ Opts = Opts0 ++ [{event_handler,{?eh,EvHArgs}}|Test],
+ ERPid = ct_test_support:start_event_receiver(Config),
+ {Opts,ERPid}.
+
+execute(Name, Opts, ERPid, Config) ->
+ ok = ct_test_support:run(Opts, Config),
+ Events = ct_test_support:get_events(ERPid, Config),
+
+ ct_test_support:log_events(Name,
+ reformat(Events, ?eh),
+ ?config(priv_dir, Config),
+ Opts),
+
+ verify_events(Name,Events,Config).
+
+reformat(Events, EH) ->
+ ct_test_support:reformat(Events, EH).
+
+%%%-----------------------------------------------------------------
+%%% TEST EVENTS
+%%%-----------------------------------------------------------------
+verify_events(TC,Events,Config) ->
+ Ok = expected_events(TC,ok),
+ case ct_test_support:verify_events(Ok, Events, Config) of
+ ok ->
+ ok;
+ {event_not_found,{?eh,tc_done,{_Suite,TC,ok}}}=R1 ->
+ ct:log("Did not find 'ok', checking if skipped...",[]),
+ Skipped = expected_events(TC,{skipped,"Old release not available"}),
+ case ct_test_support:verify_events(Skipped, Events, Config) of
+ ok ->
+ {skipped,"Old release not available"};
+ R2 ->
+ ct:log("Did not find skipped case either: ~n~p",[R2]),
+ exit(R1)
+ end
+ end.
+
+expected_events(TC,Result) ->
+ OneTest =
+ [{?eh,start_logging,{'DEF','RUNDIR'}},
+ {?eh,tc_done,{?suite,TC,Result}},
+ {?eh,stop_logging,[]}],
+ %% 2 tests (ct:run_test + script_start) is default
+ OneTest ++ OneTest.
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
new file mode 100644
index 0000000000..7f0ba65791
--- /dev/null
+++ b/lib/common_test/test/ct_release_test_SUITE_data/release_test_SUITE.erl
@@ -0,0 +1,118 @@
+%%
+%% %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%
+%%
+%%%----------------------------------------------------------------
+%%% Purpose: Test the support for application upgrade/code_change test
+%%%-----------------------------------------------------------------
+-module(release_test_SUITE).
+-include_lib("common_test/include/ct.hrl").
+
+-compile(export_all).
+
+-define(APP,runtime_tools). % "randomly" selected 'application under test'
+
+%%
+%% all/1
+%%
+all() ->
+ [minor,
+ major,
+ major_fail_init,
+ major_fail_upgraded,
+ major_fail_downgraded,
+ major_fail_no_init].
+
+init_per_suite(Config) ->
+ Config.
+
+end_per_suite(_Config) ->
+ ok.
+
+init_per_testcase(major_fail_no_init, Config) ->
+ Config;
+init_per_testcase(_Case, Config) ->
+ ct_release_test:init(Config).
+end_per_testcase(_Case, Config) ->
+ ct_release_test:cleanup(Config).
+
+%%%-----------------------------------------------------------------
+%%% Test cases
+minor(Config) ->
+ ct_release_test:upgrade(?APP,minor,{?MODULE,[]},Config).
+
+major(Config) ->
+ ct_release_test:upgrade(?APP,major,{?MODULE,[]},Config).
+
+major_fail_init(Config) ->
+ try ct_release_test:upgrade(?APP,major,{?MODULE,fail_init},Config)
+ catch exit:{test_case_failed,
+ {test_upgrade_callback,_Mod,_Func,_Args,
+ {'EXIT',{test_case_failed,upgrade_init_failed}}}} ->
+ ok
+ end.
+
+major_fail_upgraded(Config) ->
+ try ct_release_test:upgrade(?APP,major,{?MODULE,fail_upgraded},Config)
+ catch exit:{test_case_failed,
+ {test_upgrade_callback,_Mod,_Func,_Args,
+ {'EXIT',{test_case_failed,upgrade_upgraded_failed}}}} ->
+ ok
+ end.
+
+major_fail_downgraded(Config) ->
+ try ct_release_test:upgrade(?APP,major,{?MODULE,fail_downgraded},Config)
+ catch exit:{test_case_failed,
+ {test_upgrade_callback,_Mod,_Func,_Args,
+ {'EXIT',{test_case_failed,upgrade_downgraded_failed}}}} ->
+ ok
+ end.
+
+major_fail_no_init(Config) ->
+ try ct_release_test:upgrade(?APP,major,[],Config)
+ catch exit:{test_case_failed,"ct_release_test:init/1 not run"} ->
+ ok
+ end.
+
+%%%-----------------------------------------------------------------
+%%% ct_release_test callbacks
+
+%% Version numbers are checked by ct_release_test, so there is nothing
+%% more to check here...
+upgrade_init(CtData,fail_init) ->
+ ct:fail(upgrade_init_failed);
+upgrade_init(CtData,State) ->
+ {ok,{FromVsn,ToVsn}} = ct_release_test:get_app_vsns(CtData,?APP),
+ case ct_release_test:get_appup(CtData,?APP) of
+ {ok,{FromVsn,ToVsn,UpInstrs,DownInstrs}} ->
+ io:format("Upgrade/downgrade ~p: ~p <--> ~p~n"
+ "Upgrade instructions: ~p~n"
+ "Downgrade instructions: ~p",
+ [?APP,FromVsn,ToVsn,UpInstrs,DownInstrs]);
+ {error,{vsn_not_found,_}} when FromVsn==ToVsn ->
+ io:format("No upgrade test for ~p, same version",[?APP])
+ end,
+ State.
+upgrade_upgraded(CtData,fail_upgraded) ->
+ ct:fail(upgrade_upgraded_failed);
+upgrade_upgraded(_CtData,State) ->
+ State.
+upgrade_downgraded(CtData,fail_downgraded) ->
+ ct:fail(upgrade_downgraded_failed);
+upgrade_downgraded(_CtData,State) ->
+ State.
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..632597c214 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.
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 82ab1c19bb..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.
@@ -49,8 +49,11 @@
%% there will be clashes with logging processes etc).
%%--------------------------------------------------------------------
init_per_suite(Config) ->
- Config1 = ct_test_support:init_per_suite(Config),
- Config1.
+ DataDir = ?config(data_dir,Config),
+ Hook = "fail_pre_init_per_suite.erl",
+ io:format("Compiling ~p: ~p~n",
+ [Hook, compile:file(Hook,[{outdir,DataDir},debug_info])]),
+ ct_test_support:init_per_suite([{path_dirs,[DataDir]}|Config]).
end_per_suite(Config) ->
ct_test_support:end_per_suite(Config).
@@ -69,7 +72,8 @@ all() ->
absolute_path,
relative_path,
url,
- logdir
+ logdir,
+ fail_pre_init_per_suite
].
%%--------------------------------------------------------------------
@@ -107,6 +111,14 @@ logdir(Config) when is_list(Config) ->
Path = "logdir.xml",
run(logdir,[{cth_surefire,[{path,Path}]}],Path,Config,[{logdir,MyLogDir}]).
+fail_pre_init_per_suite(Config) when is_list(Config) ->
+ DataDir = ?config(data_dir,Config),
+ Suites = [filename:join(DataDir,"pass_SUITE"),
+ filename:join(DataDir,"fail_SUITE")],
+ Path = "fail_pre_init_per_suite.xml",
+ run(fail_pre_init_per_suite,[fail_pre_init_per_suite,
+ {cth_surefire,[{path,Path}]}],Path,Config,[],Suites).
+
%%%-----------------------------------------------------------------
%%% HELP FUNCTIONS
%%%-----------------------------------------------------------------
@@ -115,6 +127,8 @@ run(Case,CTHs,Report,Config) ->
run(Case,CTHs,Report,Config,ExtraOpts) ->
DataDir = ?config(data_dir, Config),
Suite = filename:join(DataDir, "surefire_SUITE"),
+ run(Case,CTHs,Report,Config,ExtraOpts,Suite).
+run(Case,CTHs,Report,Config,ExtraOpts,Suite) ->
{Opts,ERPid} = setup([{suite,Suite},{ct_hooks,CTHs},{label,Case}|ExtraOpts],
Config),
ok = execute(Case, Opts, ERPid, Config),
@@ -142,7 +156,6 @@ setup(Test, Config) ->
execute(Name, Opts, ERPid, Config) ->
ok = ct_test_support:run(Opts, Config),
Events = ct_test_support:get_events(ERPid, Config),
-
ct_test_support:log_events(Name,
reformat(Events, ?eh),
?config(priv_dir, Config),
@@ -166,10 +179,30 @@ events_to_check(_, 0) ->
events_to_check(Test, N) ->
test_events(Test) ++ events_to_check(Test, N-1).
-test_events(_) ->
- [{?eh,start_logging,'_'},
- {?eh,start_info,{1,1,9}},
- {?eh,tc_start,{surefire_SUITE,init_per_suite}},
+test_suite_events(fail_SUITE, TestStat) ->
+ [{?eh,tc_start,{ct_framework,init_per_suite}},
+ {?eh,tc_done,{ct_framework,init_per_suite,
+ {failed,{error,pre_init_per_suite}}}},
+ {?eh,tc_auto_skip,
+ {fail_SUITE,test_case,
+ {failed,{ct_framework,init_per_suite,{failed,pre_init_per_suite}}}}},
+ {?eh,test_stats,TestStat},
+ {?eh,tc_auto_skip,
+ {ct_framework,end_per_suite,
+ {failed,{ct_framework,init_per_suite,{failed,pre_init_per_suite}}}}}].
+
+test_suite_events(fail_SUITE) ->
+ test_suite_events(fail_SUITE, {0,0,{0,1}});
+test_suite_events(pass_SUITE) ->
+ [{?eh,tc_start,{ct_framework,init_per_suite}},
+ {?eh,tc_done,{ct_framework,init_per_suite,ok}},
+ {?eh,tc_start,{pass_SUITE,test_case}},
+ {?eh,tc_done,{pass_SUITE,test_case,ok}},
+ {?eh,test_stats,{1,0,{0,0}}},
+ {?eh,tc_start,{ct_framework,end_per_suite}},
+ {?eh,tc_done,{ct_framework,end_per_suite,ok}}];
+test_suite_events(_) ->
+ [{?eh,tc_start,{surefire_SUITE,init_per_suite}},
{?eh,tc_done,{surefire_SUITE,init_per_suite,ok}},
{?eh,tc_start,{surefire_SUITE,tc_ok}},
{?eh,tc_done,{surefire_SUITE,tc_ok,ok}},
@@ -216,9 +249,18 @@ test_events(_) ->
{surefire_SUITE,init_per_group,
{'EXIT',all_cases_should_be_skipped}}}}}],
{?eh,tc_start,{surefire_SUITE,end_per_suite}},
- {?eh,tc_done,{surefire_SUITE,end_per_suite,ok}},
- {?eh,stop_logging,[]}].
-
+ {?eh,tc_done,{surefire_SUITE,end_per_suite,ok}}].
+
+test_events(fail_pre_init_per_suite) ->
+ [{?eh,start_logging,{'DEF','RUNDIR'}},
+ {?eh,start_info,{2,2,2}}] ++
+ test_suite_events(pass_SUITE) ++
+ test_suite_events(fail_SUITE, {1,0,{0,1}}) ++
+ [{?eh,stop_logging,[]}];
+test_events(Test) ->
+ [{?eh,start_logging,'_'}, {?eh,start_info,{1,1,9}}] ++
+ test_suite_events(Test) ++
+ [{?eh,stop_logging,[]}].
%%%-----------------------------------------------------------------
%%% Check generated xml log files
@@ -251,9 +293,9 @@ do_check_xml(Case,[Xml|Xmls]) ->
{E,_} = xmerl_scan:file(Xml),
Expected = events_to_result(lists:flatten(test_events(Case))),
ParseResult = testsuites(Case,E),
- ct:log("Expecting: ~p~n",[[Expected]]),
+ ct:log("Expecting: ~p~n",[Expected]),
ct:log("Actual : ~p~n",[ParseResult]),
- [Expected] = ParseResult,
+ Expected = ParseResult,
do_check_xml(Case,Xmls);
do_check_xml(_,[]) ->
ok.
@@ -265,7 +307,8 @@ testsuites(Case,#xmlElement{name=testsuites,content=TS}) ->
testsuite(Case,TS).
testsuite(Case,[#xmlElement{name=testsuite,content=TC,attributes=A}|TS]) ->
- {ET,EF,ES} = events_to_numbers(lists:flatten(test_events(Case))),
+ TestSuiteEvents = test_suite_events(get_ts_name(A)),
+ {ET,EF,ES} = events_to_numbers(lists:flatten(TestSuiteEvents)),
{T,E,F,S} = get_numbers_from_attrs(A,false,false,false,false),
ct:log("Expecting total:~p, error:~p, failure:~p, skipped:~p~n",[ET,0,EF,ES]),
ct:log("Actual total:~p, error:~p, failure:~p, skipped:~p~n",[T,E,F,S]),
@@ -318,14 +361,32 @@ failed_or_skipped([]) ->
%% Testsuites = [Testsuite]
%% Testsuite = [Testcase]
%% Testcase = [] | [f] | [s], indicating ok, failed and skipped respectively
-events_to_result([{?eh,tc_done,{_Suite,_Case,R}}|E]) ->
- [result(R)|events_to_result(E)];
-events_to_result([{?eh,tc_auto_skip,_}|E]) ->
- [[s]|events_to_result(E)];
-events_to_result([_|E]) ->
- events_to_result(E);
-events_to_result([]) ->
- [].
+events_to_result(E) ->
+ events_to_result(E, []).
+
+events_to_result([{?eh,tc_auto_skip,{_Suite,init_per_suite,_}}|E], Result) ->
+ {Suite,Rest} = events_to_result1(E),
+ events_to_result(Rest, [[[s]|Suite]|Result]);
+events_to_result([{?eh,tc_done,{_Suite,init_per_suite,R}}|E], Result) ->
+ {Suite,Rest} = events_to_result1(E),
+ events_to_result(Rest, [[result(R)|Suite]|Result]);
+events_to_result([_|E], Result) ->
+ events_to_result(E, Result);
+events_to_result([], Result) ->
+ Result.
+
+events_to_result1([{?eh,tc_auto_skip,{_Suite, end_per_suite,_}}|E]) ->
+ {[[s]],E};
+events_to_result1([{?eh,tc_done,{_Suite, end_per_suite,R}}|E]) ->
+ {[result(R)],E};
+events_to_result1([{?eh,tc_done,{_Suite,_Case,R}}|E]) ->
+ {Suite,Rest} = events_to_result1(E),
+ {[result(R)|Suite],Rest};
+events_to_result1([{?eh,tc_auto_skip,_}|E]) ->
+ {Suite,Rest} = events_to_result1(E),
+ {[[s]|Suite],Rest};
+events_to_result1([_|E]) ->
+ events_to_result1(E).
result(ok) ->[];
result({skipped,_}) -> [s];
@@ -374,3 +435,7 @@ del_files(Dir,[F0|Fs] ) ->
end;
del_files(_,[]) ->
ok.
+
+get_ts_name(Attributes) ->
+ {_,name,_,_,_,_,_,_,Name,_} = lists:keyfind(name, 2, Attributes),
+ list_to_atom(Name).
diff --git a/lib/compiler/test/compilation_SUITE_data/otp_2173.erl b/lib/common_test/test/ct_surefire_SUITE_data/fail_SUITE.erl
index 4155e2d1ff..3f5f42c054 100644
--- a/lib/compiler/test/compilation_SUITE_data/otp_2173.erl
+++ b/lib/common_test/test/ct_surefire_SUITE_data/fail_SUITE.erl
@@ -1,8 +1,7 @@
-%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1998-2009. All Rights Reserved.
-%%
+%%
+%% 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
@@ -14,19 +13,16 @@
%% 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).
+-module(fail_SUITE).
+-include_lib("common_test/include/ct.hrl").
--record(t, {a = fun(X) -> X*X end}).
+-export([all/0, test_case/1]).
-otp_2173() ->
- ok.
-
-t() ->
- #t{}.
+all() ->
+ [test_case].
-
-
+test_case(_Config) ->
+ ok.
diff --git a/lib/common_test/test/ct_surefire_SUITE_data/fail_pre_init_per_suite.erl b/lib/common_test/test/ct_surefire_SUITE_data/fail_pre_init_per_suite.erl
new file mode 100644
index 0000000000..ff278db378
--- /dev/null
+++ b/lib/common_test/test/ct_surefire_SUITE_data/fail_pre_init_per_suite.erl
@@ -0,0 +1,47 @@
+%%
+%% %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%
+%%
+
+%%% This tests that the correct XML is produced when pre_init_per_suite
+%%% fails in a hook
+-module(fail_pre_init_per_suite).
+
+%% CT Hooks
+-export([init/2, pre_init_per_suite/3]).
+
+-type config() :: proplists:proplist().
+-type reason() :: term().
+-type skip_or_fail() :: skip | auto_skip | fail | 'EXIT'.
+
+-record(state, {}).
+
+-spec init(Id :: term(), Opts :: proplists:proplist()) ->
+ {ok, proplists:proplist()}.
+init(_Id, Opts) ->
+ {ok, Opts}.
+
+-spec pre_init_per_suite(Suite :: atom(),
+ Config :: config(),
+ State :: #state{}) ->
+ {config() | {skip_or_fail(), reason()}, NewState :: #state{}}.
+pre_init_per_suite(fail_SUITE, _Config, State) ->
+ {{fail, pre_init_per_suite}, State};
+pre_init_per_suite(_Suite, Config, State) ->
+ {Config, State}.
+
diff --git a/lib/compiler/test/compilation_SUITE_data/bin_syntax_1.erl b/lib/common_test/test/ct_surefire_SUITE_data/pass_SUITE.erl
index b381c539b7..74ed5b730e 100644
--- a/lib/compiler/test/compilation_SUITE_data/bin_syntax_1.erl
+++ b/lib/common_test/test/ct_surefire_SUITE_data/pass_SUITE.erl
@@ -1,8 +1,7 @@
-%%
%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2000-2009. All Rights Reserved.
-%%
+%%
+%% 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
@@ -14,19 +13,16 @@
%% 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).
+-module(pass_SUITE).
+-include_lib("common_test/include/ct.hrl").
--export([f/2,?MODULE/0]).
+-export([all/0, test_case/1]).
-?MODULE() ->
- ok.
+all() ->
+ [test_case].
-f(X, Y) ->
- case X of
- a ->
- Y2 = 8
- end,
- <<5:Y2>> = Y.
+test_case(_Config) ->
+ ok.
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_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 4a47d345e9..477fcb8a26 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.
@@ -43,6 +43,8 @@
-export([random_error/1]).
+-export([unique_timestamp/0]).
+
-include_lib("kernel/include/file.hrl").
%%%-----------------------------------------------------------------
@@ -110,7 +112,8 @@ start_slave(NodeName, Config, Level) ->
undefined -> [];
Ds -> Ds
end,
- PathDirs = [PrivDir,TSDir | AddPathDirs],
+ TestSupDir = filename:dirname(code:which(?MODULE)),
+ PathDirs = [PrivDir,TSDir,TestSupDir | AddPathDirs],
[true = rpc:call(CTNode, code, add_patha, [D]) || D <- PathDirs],
test_server:format(Level, "Dirs added to code path (on ~w):~n",
[CTNode]),
@@ -1228,8 +1231,8 @@ log_events(TC, Events, EvLogDir, Opts) ->
file:close(Dev),
FullLogFile = join_abs_dirs(proplists:get_value(net_dir, Opts),
LogFile),
- io:format("Events written to logfile: <a href=\"file://~s\">~s</a>~n",
- [FullLogFile,FullLogFile]),
+ ct:log("Events written to logfile: <a href=\"file://~s\">~s</a>~n",
+ [FullLogFile,FullLogFile],[no_css]),
io:format(user, "Events written to logfile: ~p~n", [LogFile]).
log_events1(Evs, Dev, "") ->
@@ -1430,7 +1433,21 @@ rm_files([F | Fs]) ->
end;
rm_files([]) ->
ok.
-
+
+unique_timestamp() ->
+ unique_timestamp(os:timestamp(), 100000).
+
+unique_timestamp(TS, 0) ->
+ TS;
+unique_timestamp(TS0, N) ->
+ case os:timestamp() of
+ TS0 ->
+ timer:sleep(1),
+ unique_timestamp(TS0, N-1);
+ TS1 ->
+ TS1
+ end.
+
%%%-----------------------------------------------------------------
%%%
slave_stop(Node) ->
diff --git a/lib/common_test/test/ct_test_support_eh.erl b/lib/common_test/test/ct_test_support_eh.erl
index f3d933da04..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.
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/common_test/test/erl2html2_SUITE.erl b/lib/common_test/test/erl2html2_SUITE.erl
index 9e6389109b..bdce43c9c9 100644
--- a/lib/common_test/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.
@@ -31,7 +31,7 @@
"<html>\n",
"<head><title>Module ", Src, "</title>\n",
"<meta http-equiv=\"cache-control\" ",
- "content=\"no-cache\">\n",
+ "content=\"no-cache\"></meta>\n",
"</head>\n",
"<body bgcolor=\"white\" text=\"black\" ",
"link=\"blue\" vlink=\"purple\" alink=\"red\">\n"]).
diff --git a/lib/common_test/test/test_server_SUITE.erl b/lib/common_test/test/test_server_SUITE.erl
index d1c789f34c..50d8bdd1ac 100644
--- a/lib/common_test/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.
diff --git a/lib/common_test/test/test_server_SUITE_data/test_server_SUITE.erl b/lib/common_test/test/test_server_SUITE_data/test_server_SUITE.erl
index c3d4315cb8..559e23fad3 100644
--- a/lib/common_test/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.
diff --git a/lib/common_test/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 171f83df0f..85b9cb1151 100644
--- a/lib/common_test/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.
diff --git a/lib/common_test/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 e4f40f6c03..5921582713 100644
--- a/lib/common_test/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.
diff --git a/lib/common_test/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 1c6fe6dd0b..90e6f0b8ee 100644
--- a/lib/common_test/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.
diff --git a/lib/common_test/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 3371418980..2c7cbb6473 100644
--- a/lib/common_test/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.
diff --git a/lib/common_test/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 ad639b585d..cd704e986f 100644
--- a/lib/common_test/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.
diff --git a/lib/common_test/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 0f7118a810..ebd686c3c0 100644
--- a/lib/common_test/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.
diff --git a/lib/common_test/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 ae2321c6ad..cfdca8dd00 100644
--- a/lib/common_test/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.
diff --git a/lib/common_test/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 0cabce995f..5249756565 100644
--- a/lib/common_test/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.
diff --git a/lib/common_test/test/test_server_test_lib.erl b/lib/common_test/test/test_server_test_lib.erl
index e2680938e0..cf5951ae03 100644
--- a/lib/common_test/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/common_test/test_server/Makefile b/lib/common_test/test_server/Makefile
index 0adf64b837..f015064b39 100644
--- a/lib/common_test/test_server/Makefile
+++ b/lib/common_test/test_server/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/common_test/test_server/configure.in b/lib/common_test/test_server/configure.in
index 001de72a1e..0511d126b4 100644
--- a/lib/common_test/test_server/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/common_test/test_server/ts.config b/lib/common_test/test_server/ts.config
index cf3d269616..d05e4885fc 100644
--- a/lib/common_test/test_server/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/common_test/test_server/ts.erl b/lib/common_test/test_server/ts.erl
index 8bbdc8f8cf..5bfea9f4de 100644
--- a/lib/common_test/test_server/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/common_test/test_server/ts.hrl b/lib/common_test/test_server/ts.hrl
index 4c940fdc4f..403c62d22e 100644
--- a/lib/common_test/test_server/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/common_test/test_server/ts_autoconf_win32.erl b/lib/common_test/test_server/ts_autoconf_win32.erl
index 288305b406..52e5ac8e69 100644
--- a/lib/common_test/test_server/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/common_test/test_server/ts_benchmark.erl b/lib/common_test/test_server/ts_benchmark.erl
index 3e55edefb0..e4e06b54c2 100644
--- a/lib/common_test/test_server/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/common_test/test_server/ts_erl_config.erl b/lib/common_test/test_server/ts_erl_config.erl
index ab7363c106..032593bdda 100644
--- a/lib/common_test/test_server/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/common_test/test_server/ts_install.erl b/lib/common_test/test_server/ts_install.erl
index 600a576820..b906eb21f5 100644
--- a/lib/common_test/test_server/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.
diff --git a/lib/common_test/test_server/ts_install_cth.erl b/lib/common_test/test_server/ts_install_cth.erl
index ec0d54ccde..5d325b1115 100644
--- a/lib/common_test/test_server/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.
@@ -41,6 +41,8 @@
-export([post_end_per_group/4]).
-export([pre_init_per_testcase/3]).
+-export([post_init_per_testcase/4]).
+-export([pre_end_per_testcase/3]).
-export([post_end_per_testcase/4]).
-export([on_tc_fail/3]).
@@ -181,7 +183,22 @@ post_end_per_group(_Group,_Config,Return,State) ->
pre_init_per_testcase(_TC,Config,State) ->
{add_node_name(Config, State), State}.
+-spec post_init_per_testcase(TC :: atom(),
+ Config :: config(),
+ Return :: term(),
+ State :: #state{}) ->
+ {ok | skip_or_fail(), NewState :: #state{}}.
+post_init_per_testcase(_TC,_Config,Return,State) ->
+ {Return, State}.
+
%% @doc Called after each test case.
+-spec pre_end_per_testcase(TC :: atom(),
+ Config :: config(),
+ State :: #state{}) ->
+ {config() | skip_or_fail(), NewState :: #state{}}.
+pre_end_per_testcase(_TC,Config,State) ->
+ {Config, State}.
+
-spec post_end_per_testcase(TC :: atom(),
Config :: config(),
Return :: term(),
diff --git a/lib/common_test/test_server/ts_lib.erl b/lib/common_test/test_server/ts_lib.erl
index 7c3f450194..a7be740c5c 100644
--- a/lib/common_test/test_server/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/common_test/test_server/ts_make.erl b/lib/common_test/test_server/ts_make.erl
index 921edb264a..456e913c39 100644
--- a/lib/common_test/test_server/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.
diff --git a/lib/common_test/test_server/ts_run.erl b/lib/common_test/test_server/ts_run.erl
index 188094921d..66db1ff9a7 100644
--- a/lib/common_test/test_server/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 34ed657e01..2fab4d3883 100644
--- a/lib/common_test/vsn.mk
+++ b/lib/common_test/vsn.mk
@@ -1 +1 @@
-COMMON_TEST_VSN = 1.11.2
+COMMON_TEST_VSN = 1.13
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..954750fcdd 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>
diff --git a/lib/compiler/doc/src/notes.xml b/lib/compiler/doc/src/notes.xml
index 3c06e4f98e..ae375c5f58 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,55 @@
<p>This document describes the changes made to the Compiler
application.</p>
+<section><title>Compiler 6.0.3</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ An complicated guard expression in a function call could
+ crash the compiler. (Thanks to Thomas Arts for reporting
+ this bug.)</p>
+ <p>
+ Own Id: OTP-13208</p>
+ </item>
+ <item>
+ <p>Constructing a map in a guard in a catch could crash
+ the compiler. (Thanks to Thomas Arts for reporting this
+ bug.)</p>
+ <p>
+ Own Id: OTP-13223</p>
+ </item>
+ <item>
+ <p>Updating a fun as if it were a map would cause the
+ compiler to crash. (Thanks to Thomas Arts for reporting
+ this bug.)</p>
+ <p>
+ Own Id: OTP-13231</p>
+ </item>
+ <item>
+ <p>
+ Fix pretty printing of Core Maps</p>
+ <p>
+ Literal maps could cause Dialyzer to crash when pretty
+ printing the results.</p>
+ <p>
+ Own Id: OTP-13238</p>
+ </item>
+ <item>
+ <p>
+ A complex combination of bit syntax matching operations
+ would cause an internal consistency check failure during
+ compilation. (Thanks to Jose Valim for reporting this
+ bug.)</p>
+ <p>
+ Own Id: OTP-13309</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
<section><title>Compiler 6.0.2</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 f75beaba20..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.
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 95be471de3..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.
@@ -225,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 10dbaf462c..a8cfdffdf3 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.
@@ -58,6 +58,13 @@ blockify(Is) ->
blockify([{loop_rec,{f,Fail},{x,0}},{loop_rec_end,_Lbl},{label,Fail}|Is], Acc) ->
%% Useless instruction sequence.
blockify(Is, Acc);
+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 collect(I) of
error -> blockify(Is0, [I|Acc]);
@@ -81,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,[]}}};
@@ -101,9 +110,6 @@ 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'=Op,R,L}) ->
{set,[R],[],{try_catch,Op,L}};
collect({'try'=Op,R,L}) ->
diff --git a/lib/compiler/src/beam_bool.erl b/lib/compiler/src/beam_bool.erl
index efd935f666..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.
@@ -238,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])
@@ -311,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
index 55fa7ce10c..2aed98d4e7 100644
--- a/lib/compiler/src/beam_bs.erl
+++ b/lib/compiler/src/beam_bs.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_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 d9108c383d..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.
diff --git a/lib/compiler/src/beam_dead.erl b/lib/compiler/src/beam_dead.erl
index 11129c39bc..dd42add433 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.
diff --git a/lib/compiler/src/beam_dict.erl b/lib/compiler/src/beam_dict.erl
index 654fb47dbd..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.
diff --git a/lib/compiler/src/beam_disasm.erl b/lib/compiler/src/beam_disasm.erl
index 84a94f09e3..5badcce696 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.
diff --git a/lib/compiler/src/beam_disasm.hrl b/lib/compiler/src/beam_disasm.hrl
index 30e3f22665..e18214644f 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.
diff --git a/lib/compiler/src/beam_except.erl b/lib/compiler/src/beam_except.erl
index e33655281f..cb3a6b79de 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.
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 3b6eb19fe8..359248c6af 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.
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 0c1abfe6a0..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.
@@ -83,6 +83,9 @@ 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([{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
[] ->
diff --git a/lib/compiler/src/beam_receive.erl b/lib/compiler/src/beam_receive.erl
index 7276537949..c593184746 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.
diff --git a/lib/compiler/src/beam_reorder.erl b/lib/compiler/src/beam_reorder.erl
index 41586a7bf2..6a7c033ec6 100644
--- a/lib/compiler/src/beam_reorder.erl
+++ b/lib/compiler/src/beam_reorder.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.
@@ -87,6 +87,15 @@ reorder_1([{test,_,_,_}=I,
%% 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
diff --git a/lib/compiler/src/beam_split.erl b/lib/compiler/src/beam_split.erl
index bb1c0e23a9..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)]);
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 4b45c28623..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.
@@ -513,12 +513,23 @@ update({call_ext,Ar,{extfunc,math,Math,Ar}}, 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);
@@ -748,7 +759,7 @@ 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).
%%%
@@ -785,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;
@@ -810,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);
@@ -820,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.
@@ -855,6 +892,7 @@ 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}})
diff --git a/lib/compiler/src/beam_utils.erl b/lib/compiler/src/beam_utils.erl
index 68d6105cfa..47703b4aa3 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}.
@@ -235,21 +227,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);
@@ -461,8 +460,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,6 +484,18 @@ 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);
@@ -494,12 +506,8 @@ 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
@@ -518,7 +526,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.
@@ -570,9 +578,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.
@@ -583,8 +591,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
@@ -593,11 +603,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) ->
@@ -628,8 +633,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) ->
@@ -745,11 +749,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) ->
@@ -849,14 +848,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 fd38fc0095..faff9940ec 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.
@@ -509,6 +509,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),
@@ -1162,12 +1165,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}}).
@@ -1546,8 +1554,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;
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 b86be95cab..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.
@@ -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
@@ -752,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 46917905de..149086152a 100644
--- a/lib/compiler/src/compile.erl
+++ b/lib/compiler/src/compile.erl
@@ -1317,7 +1317,7 @@ 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,crypto:rand_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),
@@ -1328,7 +1328,7 @@ save_core_code(St) ->
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),
@@ -1337,6 +1337,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
@@ -1681,6 +1691,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;
@@ -1745,3 +1756,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 a2b2a1d277..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.
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 839c736ff2..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.
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 5a4a870769..936c5f6106 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.
@@ -603,7 +603,8 @@ generate(_N, Range) ->
%% same BEAM code.
case rand:export_seed() of
undefined ->
- rand:seed(exsplus, {1,42,2053});
+ _ = rand:seed(exsplus, {1,42,2053}),
+ ok;
_ ->
ok
end,
diff --git a/lib/compiler/src/sys_core_dsetel.erl b/lib/compiler/src/sys_core_dsetel.erl
index c6cfdbae7e..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.
diff --git a/lib/compiler/src/sys_core_fold.erl b/lib/compiler/src/sys_core_fold.erl
index ab67c8164b..dbc27db377 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.
@@ -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),
@@ -3395,6 +3406,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/v3_codegen.erl b/lib/compiler/src/v3_codegen.erl
index 6f1912c616..f531056591 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.
diff --git a/lib/compiler/src/v3_core.erl b/lib/compiler/src/v3_core.erl
index 68c9f964d8..a3b0236134 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.
@@ -681,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;
@@ -725,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{}) ->
@@ -784,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),
@@ -1080,13 +1133,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}.
@@ -1307,7 +1386,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),
diff --git a/lib/compiler/src/v3_kernel.erl b/lib/compiler/src/v3_kernel.erl
index 4446d5ff1d..402e3c4912 100644
--- a/lib/compiler/src/v3_kernel.erl
+++ b/lib/compiler/src/v3_kernel.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.
@@ -147,6 +147,7 @@ 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) ->
@@ -401,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),
@@ -496,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),
@@ -1988,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 c2d757da4d..203a50db55 100644
--- a/lib/compiler/test/Makefile
+++ b/lib/compiler/test/Makefile
@@ -8,6 +8,8 @@ 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 \
@@ -44,6 +46,8 @@ MODULES= \
NO_OPT= \
andor \
apply \
+ beam_block \
+ beam_bool \
beam_except \
beam_reorder \
beam_type \
@@ -67,6 +71,8 @@ NO_OPT= \
INLINE= \
andor \
apply \
+ beam_block \
+ beam_bool \
beam_utils \
bs_bincomp \
bs_bit_binaries \
diff --git a/lib/compiler/test/andor_SUITE.erl b/lib/compiler/test/andor_SUITE.erl
index 9736f75fe8..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,8 +22,7 @@
-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("common_test/include/ct.hrl").
@@ -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.
@@ -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) ->
- 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}.
-
-
-record(state, {stack = []}).
slow_compilation(_) ->
diff --git a/lib/compiler/test/apply_SUITE.erl b/lib/compiler/test/apply_SUITE.erl
index 8abcfe9dac..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.
diff --git a/lib/compiler/test/beam_block_SUITE.erl b/lib/compiler/test/beam_block_SUITE.erl
new file mode 100644
index 0000000000..d343e26737
--- /dev/null
+++ b/lib/compiler/test/beam_block_SUITE.erl
@@ -0,0 +1,182 @@
+%%
+%% %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]).
+
+%% 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
+ ]}].
+
+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).
+
+%%%
+%%% 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 90598d9639..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.
diff --git a/lib/compiler/test/beam_except_SUITE.erl b/lib/compiler/test/beam_except_SUITE.erl
index afacb939d1..8746e62fb9 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.
diff --git a/lib/compiler/test/beam_reorder_SUITE.erl b/lib/compiler/test/beam_reorder_SUITE.erl
index 4b2262f65b..ff31f2d3bd 100644
--- a/lib/compiler/test/beam_reorder_SUITE.erl
+++ b/lib/compiler/test/beam_reorder_SUITE.erl
@@ -21,7 +21,7 @@
-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]).
+ alloc/1,confused_beam_validator/1]).
suite() -> [{ct_hooks,[ts_install_cth]}].
@@ -31,7 +31,8 @@ all() ->
groups() ->
[{p,[parallel],
- [alloc
+ [alloc,
+ confused_beam_validator
]}].
init_per_suite(Config) ->
@@ -65,5 +66,16 @@ alloc_b(_U1, _U2, R) ->
_ = 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
index 8d5c0190ed..69e2f1838d 100644
--- a/lib/compiler/test/beam_type_SUITE.erl
+++ b/lib/compiler/test/beam_type_SUITE.erl
@@ -21,7 +21,8 @@
-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]).
+ integers/1,coverage/1,booleans/1,setelement/1,cons/1,
+ tuple/1]).
suite() -> [{ct_hooks,[ts_install_cth]}].
@@ -33,7 +34,10 @@ groups() ->
[{p,[parallel],
[integers,
coverage,
- booleans
+ booleans,
+ setelement,
+ cons,
+ tuple
]}].
init_per_suite(Config) ->
@@ -55,6 +59,8 @@ integers(_Config) ->
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) ->
@@ -71,6 +77,12 @@ do_integers_2(Bin) ->
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),
@@ -94,5 +106,25 @@ do_booleans(B) ->
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..ae813d563b 100644
--- a/lib/compiler/test/beam_utils_SUITE.erl
+++ b/lib/compiler/test/beam_utils_SUITE.erl
@@ -23,7 +23,7 @@
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]).
-export([id/1]).
suite() -> [{ct_hooks,[ts_install_cth]}].
@@ -41,7 +41,10 @@ groups() ->
is_not_killed,
is_not_used_at,
select,
- y_catch
+ y_catch,
+ otp_8949_b,
+ liveopt,
+ coverage
]}].
init_per_suite(Config) ->
@@ -232,6 +235,82 @@ 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.
+
%% 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 d27512b6eb..7c4e88ca3e 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.
@@ -312,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) ->
diff --git a/lib/compiler/test/bs_bincomp_SUITE.erl b/lib/compiler/test/bs_bincomp_SUITE.erl
index 93bce5c1f6..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,7 +26,7 @@
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("common_test/include/ct.hrl").
@@ -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() ->
[].
@@ -295,6 +295,48 @@ sizes(Config) when is_list(Config) ->
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),
+
+ 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 c1f8f12bf1..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.
diff --git a/lib/compiler/test/bs_construct_SUITE.erl b/lib/compiler/test/bs_construct_SUITE.erl
index d94e870e21..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.
diff --git a/lib/compiler/test/bs_match_SUITE.erl b/lib/compiler/test/bs_match_SUITE.erl
index 7fa26b6c26..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,
@@ -38,7 +38,7 @@
no_partition/1,calling_a_binary/1,binary_in_map/1,
match_string_opt/1,select_on_integer/1,
map_and_binary/1,unsafe_branch_caching/1,
- bad_literals/1,good_literals/1]).
+ bad_literals/1,good_literals/1,constant_propagation/1]).
-export([coverage_id/1,coverage_external_ignore/2]).
@@ -56,11 +56,11 @@ 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,
@@ -69,7 +69,7 @@ groups() ->
no_partition,calling_a_binary,binary_in_map,
match_string_opt,select_on_integer,
map_and_binary,unsafe_branch_caching,
- bad_literals,good_literals]}].
+ bad_literals,good_literals,constant_propagation]}].
init_per_suite(Config) ->
@@ -91,33 +91,54 @@ init_per_testcase(Case, Config) when is_atom(Case), is_list(Config) ->
end_per_testcase(Case, Config) when is_atom(Case), is_list(Config) ->
ok.
-fun_shadow(Config) when is_list(Config) ->
- %% OTP-5270
- 7 = fun_shadow_1(),
- 7 = fun_shadow_2(8),
- 7 = fun_shadow_3(),
- 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
<<103133.0:64/float>> = <<103133:64/float>>,
@@ -504,6 +525,23 @@ 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) ->
@@ -1387,6 +1425,32 @@ good_literals(_Config) ->
<<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 518e89a9cb..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.
diff --git a/lib/compiler/test/compilation_SUITE.erl b/lib/compiler/test/compilation_SUITE.erl
index 76b7e852f1..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,11 +19,48 @@
%%% Purpose : Compiles various modules with tough code
-module(compilation_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_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").
--compile(export_all).
-
suite() ->
[{ct_hooks,[ts_install_cth]},
{timetrap,{minutes,10}}].
@@ -37,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.
@@ -70,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).
@@ -159,8 +131,6 @@ 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).
@@ -193,91 +163,38 @@ redundant_case_1(3) -> d;
redundant_case_1(4) -> d;
redundant_case_1(_) -> d.
-failure(Module, Conf) ->
- Src = filename:join(proplists:get_value(data_dir, Conf),
- atom_to_list(Module)),
- Out = proplists:get_value(priv_dir, Conf),
- io:format("Compiling: ~ts\n", [Src]),
- CompRc = compile:file(Src, [{outdir,Out},return,time]),
- io:format("Result: ~p\n",[CompRc]),
- case CompRc of
- error -> ok;
- {error,Errors,_} -> check_errors(Errors);
- _ -> ct: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 ->
- ct: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) ->
- try_it(StartNode, Module, {minutes,10}, Conf).
-
-try_it(StartNode, Module, Timetrap, Conf) ->
+ 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, [clint,{outdir,Out},report,
- bin_opt_info|OtherOpts]),
+ CompRc0 = compile:file(Src, [clint0,clint,{outdir,Out},report,
+ bin_opt_info|OtherOpts]),
io:format("Result: ~p\n",[CompRc0]),
{ok,_Mod} = CompRc0,
- Node = case StartNode of
- false ->
- node();
- true ->
- Pa = "-pa " ++ filename:dirname(code:which(?MODULE)),
- {ok,Node0} = start_node(compiler, Pa),
- Node0
- end,
-
- ok = rpc:call(Node, ?MODULE, load_and_call, [Out, Module]),
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]),
+ [no_copt,no_postopt,
+ {outdir,Out},report|OtherOpts]),
io:format("Result: ~p\n",[CompRc1]),
{ok,_Mod} = CompRc1,
- ok = rpc:call(Node, ?MODULE, load_and_call, [Out, Module]),
+ load_and_call(Out, Module),
ct:timetrap(Timetrap),
io:format("Compiling (with old inliner): ~s\n", [Src]),
- CompRc2 = compile:file(Src, [{outdir,Out},report,bin_opt_info,
- {inline,1000}|OtherOpts]),
+ CompRc2 = compile:file(Src, [clint,
+ {outdir,Out},report,bin_opt_info,
+ {inline,1000}|OtherOpts]),
io:format("Result: ~p\n",[CompRc2]),
{ok,_Mod} = CompRc2,
- ok = rpc:call(Node, ?MODULE, load_and_call, [Out, Module]),
+ load_and_call(Out, Module),
ct:timetrap(Timetrap),
io:format("Compiling (from assembly): ~s\n", [Src]),
@@ -286,12 +203,8 @@ try_it(StartNode, Module, Timetrap, Conf) ->
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]),
+ load_and_call(Out, Module),
- case StartNode of
- false -> ok;
- true -> test_server:stop_node(Node)
- end,
ok.
load_and_call(Out, Module) ->
@@ -319,24 +232,6 @@ 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 ->
- ct:fail(Error)
- end.
-
-from(H, [H | T]) -> T;
-from(H, [_ | T]) -> from(H, T);
-from(_, []) -> [].
-
-
%% Test generation of 'vsn' attribute.
vsn_1(Conf) when is_list(Conf) ->
M = vsn_1,
@@ -397,11 +292,6 @@ get_vsn(M) ->
{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.
- try_it(false, long_string, {minutes,1}, Config),
- ok.
-
compile_load(Module, Dir, Conf) ->
Src = filename:join(Dir, atom_to_list(Module)),
Out = proplists:get_value(priv_dir,Conf),
@@ -465,6 +355,7 @@ 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++"\""},
@@ -480,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),
@@ -502,112 +389,6 @@ 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) ->
@@ -640,24 +421,6 @@ do_otp_8949_a() ->
end
end.
-otp_8949_b(Config) when is_list(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.
-
split_cases(_) ->
dummy1 = do_split_cases(x),
{'EXIT',{{badmatch,b},_}} = (catch do_split_cases(y)),
@@ -673,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_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_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 b2e9558cba..a15efc2a00 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.
@@ -22,6 +22,7 @@
%% Tests compile:file/1 and compile:file/2 with various options.
-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,
@@ -30,13 +31,12 @@
binary/1, makedep/1, cond_and_ifdef/1, listings/1, listings_big/1,
other_output/1, encrypted_abstr/1,
strict_record/1,
- missing_testheap/1, cover/1, env/1, core/1, asm/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
]).
--export([init/3]).
-
suite() -> [{ct_hooks,[ts_install_cth]}].
%% To cover the stripping of 'type' and 'spec' in beam_asm.
@@ -49,8 +49,8 @@ all() ->
binary, makedep, cond_and_ifdef, listings, listings_big,
other_output, encrypted_abstr,
strict_record,
- missing_testheap, cover, env, core, asm,
- sys_pre_attributes, dialyzer, warnings].
+ cover, env, core, core_roundtrip, asm,
+ sys_pre_attributes, dialyzer, warnings, pre_load_check].
groups() ->
[].
@@ -126,13 +126,39 @@ 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),
@@ -140,7 +166,9 @@ 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) ->
DataDir = proplists:get_value(data_dir, Config),
@@ -516,7 +544,6 @@ verify_abstract(Target) ->
has_crypto() ->
try
crypto:start(),
- <<_,_,_,_,_>> = crypto:rand_bytes(5),
crypto:stop(),
true
catch
@@ -620,46 +647,6 @@ test_sloppy() ->
{1,2} = record_access:test(Turtle),
Turtle.
-missing_testheap(Config) when is_list(Config) ->
- DataDir = proplists:get_value(data_dir, Config),
- PrivDir = proplists:get_value(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),
- ok = test(fun() ->
- missing_testheap1:f({a,self()},{state,true,b})
- end, {a,b}),
- 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]),
- ct:fail(failed)
- end.
-
-init(ReplyTo, Fun, _Filler) ->
- ReplyTo ! {result, Fun()}.
-
env(Config) when is_list(Config) ->
{Simple,Target} = get_files(Config, simple, env),
{ok,Cwd} = file:get_cwd(),
@@ -706,8 +693,7 @@ core(Config) when is_list(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]),
@@ -761,6 +747,124 @@ 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.
@@ -769,8 +873,7 @@ asm(Config) when is_list(Config) ->
Outdir = filename:join(PrivDir, "asm"),
ok = file:make_dir(Outdir),
- Wc = filename:join(filename:dirname(code:which(?MODULE)), "*.beam"),
- TestBeams = filelib:wildcard(Wc),
+ TestBeams = get_unique_beam_files(),
Res = test_lib:p_run(fun(F) -> do_asm(F, Outdir) end, TestBeams),
Res.
@@ -846,8 +949,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) ->
@@ -881,6 +983,115 @@ 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].
+
%%%
%%% Utilities.
%%%
@@ -892,3 +1103,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/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 22f6443a77..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.
diff --git a/lib/compiler/test/core_fold_SUITE.erl b/lib/compiler/test/core_fold_SUITE.erl
index ee2a2c523f..442b2d424c 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.
diff --git a/lib/compiler/test/error_SUITE.erl b/lib/compiler/test/error_SUITE.erl
index dd2e766599..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.
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 771016812b..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.
diff --git a/lib/compiler/test/fun_SUITE.erl b/lib/compiler/test/fun_SUITE.erl
index 77559ae2e6..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,7 +22,7 @@
-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]).
@@ -33,10 +33,12 @@ 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.
@@ -221,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 129db039e1..83298e546e 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.
@@ -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.
@@ -947,6 +948,26 @@ 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) ->
error = gbif_1(1, {false,true}),
ok = gbif_1(2, {false,true}),
@@ -1831,27 +1852,6 @@ 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).
-
-found(_, _) -> million.
-
%% Building maps in a guard in a 'catch' would crash v3_codegen.
guard_in_catch(_Config) ->
diff --git a/lib/compiler/test/inline_SUITE.erl b/lib/compiler/test/inline_SUITE.erl
index 4c53b96fe6..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.
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 70c80d3353..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.
@@ -89,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]),
diff --git a/lib/compiler/test/match_SUITE.erl b/lib/compiler/test/match_SUITE.erl
index 41fa1603ef..31402ac717 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,10 +21,10 @@
-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]).
-include_lib("common_test/include/ct.hrl").
@@ -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]}].
init_per_suite(Config) ->
@@ -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;
@@ -142,13 +144,6 @@ aliases(Config) when is_list(Config) ->
{a,b} = list_alias2([a,b]),
{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),
-
ok.
str_alias(V) ->
@@ -252,12 +247,79 @@ 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) ->
@@ -465,4 +527,53 @@ 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.
+
+
+
id(I) -> I.
diff --git a/lib/compiler/test/misc_SUITE.erl b/lib/compiler/test/misc_SUITE.erl
index 8a639f741f..f05fe6c943 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,7 +23,8 @@
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("common_test/include/ct.hrl").
diff --git a/lib/compiler/test/num_bif_SUITE.erl b/lib/compiler/test/num_bif_SUITE.erl
index 78f6fdc3c7..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.
diff --git a/lib/compiler/test/receive_SUITE.erl b/lib/compiler/test/receive_SUITE.erl
index 8d2c78aae2..3c397561fc 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.
diff --git a/lib/compiler/test/record_SUITE.erl b/lib/compiler/test/record_SUITE.erl
index 680bd38317..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.
@@ -28,7 +28,7 @@
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) ->
Config.
@@ -48,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) ->
@@ -601,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 3fd4645529..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.
diff --git a/lib/compiler/test/test_lib.erl b/lib/compiler/test/test_lib.erl
index 3ca93fb021..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.
@@ -22,7 +22,7 @@
-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.
@@ -91,6 +91,17 @@ get_data_dir(Config) ->
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.
@@ -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) ->
diff --git a/lib/compiler/test/trycatch_SUITE.erl b/lib/compiler/test/trycatch_SUITE.erl
index 82e3c86649..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,7 +26,7 @@
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("common_test/include/ct.hrl").
@@ -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) ->
@@ -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 d66f2d5053..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.
diff --git a/lib/compiler/vsn.mk b/lib/compiler/vsn.mk
index c5089ff57e..c83455240d 100644
--- a/lib/compiler/vsn.mk
+++ b/lib/compiler/vsn.mk
@@ -1 +1 @@
-COMPILER_VSN = 6.0.2
+COMPILER_VSN = 6.0.3
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..83fa5fa4b7 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>
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 028b0221b6..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.
diff --git a/lib/cosEvent/test/event_channel_SUITE.erl b/lib/cosEvent/test/event_channel_SUITE.erl
index 3a01a0eab6..d237db8e9b 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.
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 1533c0be9c..2fa15c3a96 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.
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..5617efe697 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>
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 d8f6a863d6..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.
diff --git a/lib/cosEventDomain/test/event_domain_SUITE.erl b/lib/cosEventDomain/test/event_domain_SUITE.erl
index 37a04a34aa..b80b16ae6f 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.
diff --git a/lib/cosEventDomain/test/generated_SUITE.erl b/lib/cosEventDomain/test/generated_SUITE.erl
index afaa70db0a..51b627f0d6 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.
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..eacc75062b 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>
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 332f90cb39..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.
diff --git a/lib/cosFileTransfer/test/fileTransfer_SUITE.erl b/lib/cosFileTransfer/test/fileTransfer_SUITE.erl
index 173cf71e61..7ca6eaf7b3 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.
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 d7e8101164..3f3f0be3e7 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,21 @@
<file>notes.xml</file>
</header>
- <section><title>cosNotification 1.2</title>
+ <section><title>cosNotification 1.2.1</title>
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p> Suppress Dialyzer warnings. </p>
+ <p>
+ Own Id: OTP-12862</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>cosNotification 1.2</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 5a4c5e18aa..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.
diff --git a/lib/cosNotification/test/eventDB_SUITE.erl b/lib/cosNotification/test/eventDB_SUITE.erl
index 2d095adfae..337c7effed 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.
diff --git a/lib/cosNotification/test/generated_SUITE.erl b/lib/cosNotification/test/generated_SUITE.erl
index 8e29989e30..810a007672 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.
diff --git a/lib/cosNotification/test/grammar_SUITE.erl b/lib/cosNotification/test/grammar_SUITE.erl
index b17ddba1c4..34b832327d 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.
diff --git a/lib/cosNotification/test/notification_SUITE.erl b/lib/cosNotification/test/notification_SUITE.erl
index 6824a2805f..f23dacce4f 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.
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 c1affdf0de..07b9bf474b 100644
--- a/lib/cosNotification/vsn.mk
+++ b/lib/cosNotification/vsn.mk
@@ -1,2 +1,2 @@
-COSNOTIFICATION_VSN = 1.2
+COSNOTIFICATION_VSN = 1.2.1
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..4ec7eca94a 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>
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 b5e063129d..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.
diff --git a/lib/cosProperty/test/generated_SUITE.erl b/lib/cosProperty/test/generated_SUITE.erl
index 1789650cbd..8eb794bd8f 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.
diff --git a/lib/cosProperty/test/property_SUITE.erl b/lib/cosProperty/test/property_SUITE.erl
index ae508fa7b6..42ddf04038 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.
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 cf842af81f..62c1aa3c26 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,21 @@
<file>notes.xml</file>
</header>
- <section><title>cosTime 1.2</title>
+ <section><title>cosTime 1.2.1</title>
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p> Suppress Dialyzer warnings. </p>
+ <p>
+ Own Id: OTP-12862</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>cosTime 1.2</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 003ea886a3..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.
diff --git a/lib/cosTime/test/generated_SUITE.erl b/lib/cosTime/test/generated_SUITE.erl
index 03dffedc05..ea1362adef 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.
diff --git a/lib/cosTime/test/time_SUITE.erl b/lib/cosTime/test/time_SUITE.erl
index 7213680b99..431b1d2d8a 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.
diff --git a/lib/cosTime/vsn.mk b/lib/cosTime/vsn.mk
index 32416f0087..39b457b53b 100644
--- a/lib/cosTime/vsn.mk
+++ b/lib/cosTime/vsn.mk
@@ -1,2 +1,2 @@
-COSTIME_VSN = 1.2
+COSTIME_VSN = 1.2.1
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 cb45f8ed5e..b681330391 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,21 @@
<file>notes.xml</file>
</header>
- <section><title>cosTransactions 1.3</title>
+ <section><title>cosTransactions 1.3.1</title>
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p> Suppress Dialyzer warnings. </p>
+ <p>
+ Own Id: OTP-12862</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>cosTransactions 1.3</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 9bcd461f04..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.
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 c4bd86a892..e4a7a5bf27 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.
diff --git a/lib/cosTransactions/test/transactions_SUITE.erl b/lib/cosTransactions/test/transactions_SUITE.erl
index 63ec04f74f..0d270c1f07 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.
diff --git a/lib/cosTransactions/vsn.mk b/lib/cosTransactions/vsn.mk
index 929f8c73d1..3a18cae384 100644
--- a/lib/cosTransactions/vsn.mk
+++ b/lib/cosTransactions/vsn.mk
@@ -1 +1 @@
-COSTRANSACTIONS_VSN = 1.3
+COSTRANSACTIONS_VSN = 1.3.1
diff --git a/lib/crypto/Makefile b/lib/crypto/Makefile
index fbf108c410..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.
diff --git a/lib/crypto/c_src/Makefile.in b/lib/crypto/c_src/Makefile.in
index e7f750b60a..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.
diff --git a/lib/crypto/c_src/crypto.c b/lib/crypto/c_src/crypto.c
index d1f620d892..067e220863 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.
@@ -214,7 +214,6 @@ static ERL_NIF_TERM aes_ctr_stream_init(ErlNifEnv* env, int argc, const ERL_NIF_
static ERL_NIF_TERM aes_ctr_stream_encrypt(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[]);
@@ -285,7 +284,6 @@ static ErlNifFunc nif_funcs[] = {
{"aes_ctr_stream_decrypt", 2, aes_ctr_stream_encrypt},
{"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},
@@ -314,7 +312,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},
@@ -378,86 +376,96 @@ struct hmac_context
static void hmac_context_dtor(ErlNifEnv* env, struct hmac_context*);
struct digest_type_t {
- const char* type_str;
- const EVP_MD* (*md_func)(void); /* NULL if notsup */
- ERL_NIF_TERM type_atom;
+ 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",
+ {{"md4"}, {&EVP_md4}},
+ {{"md5"}, {&EVP_md5}},
+ {{"ripemd160"}, {&EVP_ripemd160}},
+ {{"sha"}, {&EVP_sha1}},
+ {{"sha224"},
#ifdef HAVE_SHA224
- &EVP_sha224
+ {&EVP_sha224}
#else
- NULL
+ {NULL}
#endif
},
- {"sha256",
+ {{"sha256"},
#ifdef HAVE_SHA256
- &EVP_sha256
+ {&EVP_sha256}
#else
- NULL
+ {NULL}
#endif
},
- {"sha384",
+ {{"sha384"},
#ifdef HAVE_SHA384
- &EVP_sha384
+ {&EVP_sha384}
#else
- NULL
+ {NULL}
#endif
},
- {"sha512",
+ {{"sha512"},
#ifdef HAVE_SHA512
- &EVP_sha512
+ {&EVP_sha512}
#else
- NULL
+ {NULL}
#endif
},
- {NULL}
+ {{NULL}}
};
static struct digest_type_t* get_digest_type(ERL_NIF_TERM type);
struct cipher_type_t {
- const char* type_str;
- const EVP_CIPHER* (*cipher_func)(void); /* NULL if notsup */
+ 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 */
- ERL_NIF_TERM type_atom;
};
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",
+ {{"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
+ {&EVP_des_ede3_cfb8}
#else
- NULL
+ {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}
+ {{"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);
@@ -829,6 +837,15 @@ static ERL_NIF_TERM info_lib(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]
ver_term));
}
+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);
+}
+
static ERL_NIF_TERM hash_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
{/* (Type, Data) */
struct digest_type_t *digp = NULL;
@@ -842,11 +859,11 @@ static ERL_NIF_TERM hash_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]
!enif_inspect_iolist_as_binary(env, argv[1], &data)) {
return enif_make_badarg(env);
}
- if (!digp->md_func) {
+ md = digp->md.p;
+ if (!md) {
return atom_notsup;
}
- md = digp->md_func();
ret_size = (unsigned)EVP_MD_size(md);
ASSERT(0 < ret_size && ret_size <= EVP_MAX_MD_SIZE);
if (!EVP_Digest(data.data, data.size,
@@ -872,12 +889,12 @@ static ERL_NIF_TERM hash_init_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM a
if (!digp) {
return enif_make_badarg(env);
}
- if (!digp->md_func) {
+ if (!digp->md.p) {
return atom_notsup;
}
ctx = enif_alloc_resource(evp_md_ctx_rtype, sizeof(EVP_MD_CTX));
- if (!EVP_DigestInit(ctx, digp->md_func())) {
+ if (!EVP_DigestInit(ctx, digp->md.p)) {
enif_release_resource(ctx);
return atom_notsup;
}
@@ -946,11 +963,11 @@ static ERL_NIF_TERM hash_init_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM a
if (!digp) {
return enif_make_badarg(env);
}
- if (!digp->md_func) {
+ if (!digp->md.p) {
return atom_notsup;
}
- switch (EVP_MD_type(digp->md_func()))
+ switch (EVP_MD_type(digp->md.p))
{
case NID_md4:
ctx_size = MD4_CTX_LEN;
@@ -1020,11 +1037,11 @@ static ERL_NIF_TERM hash_update_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM
!enif_inspect_iolist_as_binary(env, argv[1], &data)) {
return enif_make_badarg(env);
}
- if (!digp->md_func) {
+ if (!digp->md.p) {
return atom_notsup;
}
- switch (EVP_MD_type(digp->md_func()))
+ switch (EVP_MD_type(digp->md.p))
{
case NID_md4:
ctx_size = MD4_CTX_LEN;
@@ -1102,11 +1119,11 @@ static ERL_NIF_TERM hash_final_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM
!enif_inspect_binary(env, tuple[1], &ctx)) {
return enif_make_badarg(env);
}
- if (!digp->md_func) {
+ md = digp->md.p;
+ if (!md) {
return atom_notsup;
}
- md = digp->md_func();
switch (EVP_MD_type(md))
{
@@ -1186,8 +1203,8 @@ static ERL_NIF_TERM hmac_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]
return enif_make_badarg(env);
}
- if (!digp->md_func ||
- !HMAC(digp->md_func(),
+ if (!digp->md.p ||
+ !HMAC(digp->md.p,
key.data, key.size,
data.data, data.size,
buff, &size)) {
@@ -1229,7 +1246,7 @@ static ERL_NIF_TERM hmac_init_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM a
!enif_inspect_iolist_as_binary(env, argv[1], &key)) {
return enif_make_badarg(env);
}
- if (!digp->md_func) {
+ if (!digp->md.p) {
return atom_notsup;
}
@@ -1239,12 +1256,12 @@ static ERL_NIF_TERM hmac_init_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM a
#if OPENSSL_VERSION_NUMBER >= 0x1000000fL
// 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_func())) {
+ 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_func());
+ HMAC_Init(&obj->ctx, key.data, key.size, digp->md.p);
#endif
ret = enif_make_resource(env, obj);
@@ -1323,7 +1340,8 @@ static ERL_NIF_TERM block_crypt_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM
|| !enif_inspect_iolist_as_binary(env, argv[argc - 2], &text)) {
return enif_make_badarg(env);
}
- if (!cipherp->cipher_func) {
+ cipher = cipherp->cipher.p;
+ if (!cipher) {
return enif_raise_exception(env, atom_notsup);
}
@@ -1335,7 +1353,6 @@ static ERL_NIF_TERM block_crypt_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM
return aes_cfb_8_crypt(env, argc-1, argv+1);
}
- cipher = cipherp->cipher_func();
ivec_size = EVP_CIPHER_iv_length(cipher);
#ifdef HAVE_ECB_IVEC_BUG
@@ -1629,6 +1646,7 @@ static ERL_NIF_TERM aes_gcm_encrypt(ErlNifEnv* env, int argc, const ERL_NIF_TERM
EVP_CIPHER_CTX ctx;
const EVP_CIPHER *cipher = NULL;
ErlNifBinary key, iv, aad, in;
+ unsigned int tag_len;
unsigned char *outp, *tagp;
ERL_NIF_TERM out, out_tag;
int len;
@@ -1637,7 +1655,8 @@ static ERL_NIF_TERM aes_gcm_encrypt(ErlNifEnv* env, int argc, const ERL_NIF_TERM
|| (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);
}
@@ -1669,9 +1688,9 @@ static ERL_NIF_TERM aes_gcm_encrypt(ErlNifEnv* env, int argc, const ERL_NIF_TERM
if (EVP_EncryptFinal_ex(&ctx, outp+len, &len) != 1)
goto out_err;
- tagp = enif_make_new_binary(env, EVP_GCM_TLS_TAG_LEN, &out_tag);
+ tagp = enif_make_new_binary(env, tag_len, &out_tag);
- if (EVP_CIPHER_CTX_ctrl(&ctx, EVP_CTRL_GCM_GET_TAG, EVP_GCM_TLS_TAG_LEN, tagp) != 1)
+ if (EVP_CIPHER_CTX_ctrl(&ctx, EVP_CTRL_GCM_GET_TAG, tag_len, tagp) != 1)
goto out_err;
EVP_CIPHER_CTX_cleanup(&ctx);
@@ -1704,7 +1723,7 @@ static ERL_NIF_TERM aes_gcm_decrypt(ErlNifEnv* env, int argc, const ERL_NIF_TERM
|| !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);
}
@@ -1730,7 +1749,7 @@ static ERL_NIF_TERM aes_gcm_decrypt(ErlNifEnv* env, int argc, const ERL_NIF_TERM
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, EVP_GCM_TLS_TAG_LEN, tag.data) != 1)
+ 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;
@@ -1906,27 +1925,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;
- 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;
@@ -2110,27 +2109,31 @@ 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);
+ 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;
}
}
@@ -2140,8 +2143,8 @@ static struct digest_type_t* get_digest_type(ERL_NIF_TERM type)
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_str; p++) {
- if (type == p->type_atom && (!p->key_len || key_len == p->key_len)) {
+ 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;
}
}
@@ -2166,12 +2169,12 @@ static ERL_NIF_TERM rsa_verify_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM
if (!digp) {
return enif_make_badarg(env);
}
- if (!digp->md_func) {
+ md = digp->md.p;
+ if (!md) {
return atom_notsup;
}
rsa = RSA_new();
- md = digp->md_func();
if (!enif_inspect_binary(env, argv[1], &digest_bin)
|| digest_bin.size != EVP_MD_size(md)
@@ -2329,10 +2332,10 @@ static ERL_NIF_TERM rsa_sign_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM ar
if (!digp) {
return enif_make_badarg(env);
}
- if (!digp->md_func) {
+ md = digp->md.p;
+ if (!md) {
return atom_notsup;
}
- md = digp->md_func();
if (!enif_inspect_binary(env,argv[1],&digest_bin)
|| digest_bin.size != EVP_MD_size(md)) {
@@ -2904,8 +2907,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))) {
@@ -2942,9 +2944,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;
@@ -3221,7 +3225,7 @@ 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
@@ -3241,10 +3245,10 @@ static ERL_NIF_TERM ecdsa_sign_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM
if (!digp) {
return enif_make_badarg(env);
}
- if (!digp->md_func) {
+ md = digp->md.p;
+ if (!md) {
return atom_notsup;
}
- md = digp->md_func();
len = EVP_MD_size(md);
if (!enif_inspect_binary(env,argv[1],&digest_bin)
@@ -3272,7 +3276,7 @@ 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
@@ -3292,10 +3296,10 @@ static ERL_NIF_TERM ecdsa_verify_nif(ErlNifEnv* env, int argc, const ERL_NIF_TER
if (!digp) {
return enif_make_badarg(env);
}
- if (!digp->md_func) {
+ md = digp->md.p;
+ if (!md) {
return atom_notsup;
}
- md = digp->md_func();
len = EVP_MD_size(md);
if (!enif_inspect_binary(env, argv[1], &digest_bin)
@@ -3314,7 +3318,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
@@ -3339,7 +3343,7 @@ static ERL_NIF_TERM ecdh_compute_key_nif(ErlNifEnv* env, int argc, const ERL_NIF
EC_KEY *other_ecdh = NULL;
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);
diff --git a/lib/crypto/c_src/crypto_callback.c b/lib/crypto/c_src/crypto_callback.c
index af9545bd63..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.
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 d3e827b3e6..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>
@@ -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 f684b6f6eb..6c76a0d7b0 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,29 @@
</header>
<p>This document describes the changes made to the Crypto application.</p>
+<section><title>Crypto 3.6.3</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ Fix bug for <c>aes_ecb</c> block crypto when data is
+ larger than 16 bytes.</p>
+ <p>
+ Own Id: OTP-13249</p>
+ </item>
+ <item>
+ <p>
+ Improve portability of ECC tests in Crypto and SSL for
+ "exotic" OpenSSL versions.</p>
+ <p>
+ Own Id: OTP-13311</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
<section><title>Crypto 3.6.2</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 3e24ff2b0a..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]).
@@ -302,6 +305,8 @@ block_encrypt(aes_ige256, Key, Ivec, Data) ->
aes_ige_crypt_nif(Key, Ivec, Data, true);
block_encrypt(aes_gcm, Key, Ivec, {AAD, Data}) ->
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}) ->
chacha20_poly1305_encrypt(Key, Ivec, AAD, Data).
@@ -405,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
@@ -544,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);
@@ -552,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);
@@ -604,16 +607,6 @@ compute_key(ecdh, Others, My, Curve) ->
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
%%--------------------------------------------------------------------
@@ -917,7 +910,10 @@ aes_cfb_128_decrypt(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.
%%
diff --git a/lib/crypto/test/blowfish_SUITE.erl b/lib/crypto/test/blowfish_SUITE.erl
index 19f60450e9..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.
diff --git a/lib/crypto/test/crypto_SUITE.erl b/lib/crypto/test/crypto_SUITE.erl
index f34d27649a..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.
@@ -269,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)).
%%--------------------------------------------------------------------
@@ -462,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}) ->
@@ -634,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),
@@ -1938,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 37cce2ebd2..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.
@@ -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 de4329e612..6dcb28ec8a 100644
--- a/lib/crypto/vsn.mk
+++ b/lib/crypto/vsn.mk
@@ -1 +1 @@
-CRYPTO_VSN = 3.6.2
+CRYPTO_VSN = 3.6.3
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 3eaecf86b2..3028d8dd41 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,21 @@
<p>This document describes the changes made to the Debugger
application.</p>
+<section><title>Debugger 4.1.2</title>
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ Documentation corrections.</p>
+ <p>
+ Own Id: OTP-12994</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
<section><title>Debugger 4.1.1</title>
<section><title>Fixed Bugs and Malfunctions</title>
<list>
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..5b1469a10e 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.
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_iserver.erl b/lib/debugger/src/dbg_iserver.erl
index 28e8012f71..0ad303d8d9 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.
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..cd1e81456f 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.
diff --git a/lib/debugger/src/dbg_wx_code.erl b/lib/debugger/src/dbg_wx_code.erl
index a0e6c94d60..f8fc331a81 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.
diff --git a/lib/debugger/src/dbg_wx_filedialog_win.erl b/lib/debugger/src/dbg_wx_filedialog_win.erl
index 910eda7fad..2103536a04 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.
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..345367a911 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.
diff --git a/lib/debugger/src/dbg_wx_mon_win.erl b/lib/debugger/src/dbg_wx_mon_win.erl
index 5377ef83af..2e48210f55 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.
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..571c6b01bb 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.
diff --git a/lib/debugger/src/dbg_wx_trace_win.erl b/lib/debugger/src/dbg_wx_trace_win.erl
index 232d61b1db..51687ad4e9 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.
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_winman.erl b/lib/debugger/src/dbg_wx_winman.erl
index 0045948d2f..efa58ae325 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.
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..4ed5265bdf 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.
diff --git a/lib/debugger/src/int.erl b/lib/debugger/src/int.erl
index 1e43d1858a..3906c22afd 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.
diff --git a/lib/debugger/test/Makefile b/lib/debugger/test/Makefile
index 1594c891b4..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.
diff --git a/lib/debugger/test/andor_SUITE.erl b/lib/debugger/test/andor_SUITE.erl
index 9750fa018d..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.
@@ -29,7 +29,9 @@
-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 18b4198354..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.
@@ -34,15 +34,14 @@
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 966c096c3a..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.
@@ -38,7 +38,9 @@
-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 98c1013210..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.
@@ -29,7 +29,9 @@
-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 11b5e30efd..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.
@@ -30,7 +30,9 @@
-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 7196026dc7..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.
@@ -31,7 +31,9 @@
-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 f4201ee7db..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.
@@ -28,7 +28,9 @@
-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 5bf776226a..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.
@@ -31,7 +31,9 @@
-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 516d9f4b8d..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.
@@ -28,7 +28,9 @@
-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 58f3c9380f..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.
@@ -26,22 +26,21 @@
-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 39ecb51b57..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.
@@ -25,14 +25,14 @@
-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 678ca0e5c3..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.
@@ -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 c75e4012f3..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("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(_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 e35326a798..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.
@@ -30,13 +30,13 @@
-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 b8092ab16c..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.
@@ -32,7 +32,9 @@
-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 2b87ef23ba..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.
@@ -44,7 +44,9 @@
-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 ec4de88331..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.
@@ -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,48 +200,45 @@ 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),
+ 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(?config(priv_dir, Config), ""),
+ PrivDir = filename:join(proplists:get_value(priv_dir, Config), ""),
{ok, _} = file:copy(filename:join([DataDir,"lists1.beam"]),
- filename:join([PrivDir,"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}], []),
@@ -272,24 +246,33 @@ interpretable(Config) when is_list(Config) ->
{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 75bdd69a7d..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.
@@ -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 3f3c03492e..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.
@@ -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 851d0fbc20..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.
@@ -30,7 +30,9 @@
-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 592f0a1f32..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.
@@ -28,7 +28,9 @@
-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 eabcdcbf42..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) ->
@@ -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 115e65c685..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.
@@ -30,7 +30,9 @@
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 0303d1bd82..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.
@@ -30,7 +30,9 @@
-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 e47ed98128..cf8ffd3272 100644
--- a/lib/debugger/vsn.mk
+++ b/lib/debugger/vsn.mk
@@ -1 +1 @@
-DEBUGGER_VSN = 4.1.1
+DEBUGGER_VSN = 4.1.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_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 27364ae06a..d9af2cb4cd 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,65 @@
<p>This document describes the changes made to the Dialyzer
application.</p>
+<section><title>Dialyzer 2.9</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p> Dialyzer no longer asserts that files and directories
+ to be removed from a PLT exist. </p>
+ <p>
+ Own Id: OTP-13103 Aux Id: ERL-40 </p>
+ </item>
+ <item>
+ <p> Fix a bug concerning parameterized opaque types. </p>
+ <p>
+ Own Id: OTP-13237</p>
+ </item>
+ <item>
+ <p>
+ Fix pretty printing of Core Maps</p>
+ <p>
+ Literal maps could cause Dialyzer to crash when pretty
+ printing the results.</p>
+ <p>
+ Own Id: OTP-13238</p>
+ </item>
+ <item>
+ <p>
+ If a behavior module contains an non-exported function
+ with the same name as one of the behavior's callbacks,
+ the callback info was inadvertently deleted from the PLT
+ as the <c>dialyzer_plt:delete_list/2</c> function was
+ cleaning up the callback table.</p>
+ <p>
+ Own Id: OTP-13287</p>
+ </item>
+ <item>
+ <p> Correct the contract for <c>erlang:byte_size/1</c>
+ </p> <p> Correct the handling of comparison operators for
+ map and bit string operands. </p>
+ <p>
+ Own Id: OTP-13312</p>
+ </item>
+ </list>
+ </section>
+
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ Dialyzer recognizes calls to <c>M:F/A</c> where <c>M</c>,
+ <c>F</c>, and <c>A</c> are all literals.</p>
+ <p>
+ Own Id: OTP-13217</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
<section><title>Dialyzer 2.8.2</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 fd75cd5cd8..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.
diff --git a/lib/dialyzer/src/dialyzer.app.src b/lib/dialyzer/src/dialyzer.app.src
index 003d7f2ba4..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.
@@ -47,6 +47,6 @@
{registered, []},
{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 601e2e954b..ea6a71217c 100644
--- a/lib/dialyzer/src/dialyzer.hrl
+++ b/lib/dialyzer/src/dialyzer.hrl
@@ -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
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_cl.erl b/lib/dialyzer/src/dialyzer_cl.erl
index 50ff5304d6..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.
diff --git a/lib/dialyzer/src/dialyzer_contracts.erl b/lib/dialyzer/src/dialyzer_contracts.erl
index e03e4d5bb4..d1ffa07706 100644
--- a/lib/dialyzer/src/dialyzer_contracts.erl
+++ b/lib/dialyzer/src/dialyzer_contracts.erl
@@ -210,10 +210,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 ->
@@ -277,28 +277,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().
@@ -327,15 +344,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),
@@ -343,7 +360,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.
@@ -373,23 +390,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().
@@ -459,7 +479,8 @@ initialize_constraints([], _MFA, _RecDict, _ExpTypes, _AllRecords, Acc) ->
initialize_constraints([Constr|Rest], MFA, RecDict, ExpTypes, AllRecords, 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 = final_form(Type1, ExpTypes, MFA, AllRecords, VarTable),
Entry = {T1, Type2},
initialize_constraints(Rest, MFA, RecDict, ExpTypes, AllRecords, [Entry|Acc]);
{type, _, constraint, [{atom,_,Name}, List]} ->
@@ -469,8 +490,9 @@ initialize_constraints([Constr|Rest], MFA, RecDict, ExpTypes, AllRecords, Acc) -
end.
constraints_fixpoint(Constrs, MFA, RecDict, ExpTypes, AllRecords) ->
+ VarTable = erl_types:var_table__new(),
VarDict =
- constraints_to_dict(Constrs, MFA, RecDict, ExpTypes, AllRecords, dict:new()),
+ constraints_to_dict(Constrs, MFA, RecDict, ExpTypes, AllRecords, VarTable),
constraints_fixpoint(VarDict, MFA, Constrs, RecDict, ExpTypes, AllRecords).
constraints_fixpoint(OldVarDict, MFA, Constrs, RecDict, ExpTypes, AllRecords) ->
@@ -478,11 +500,11 @@ constraints_fixpoint(OldVarDict, MFA, Constrs, RecDict, ExpTypes, AllRecords) ->
constraints_to_dict(Constrs, MFA, RecDict, ExpTypes, AllRecords, OldVarDict),
case NewVarDict of
OldVarDict ->
- DictFold =
+ Fun =
fun(Key, Value, Acc) ->
[{subtype, erl_types:t_var(Key), Value}|Acc]
end,
- FinalConstrs = dict:fold(DictFold, [], NewVarDict),
+ FinalConstrs = maps:fold(Fun, [], NewVarDict),
{FinalConstrs, NewVarDict};
_Other ->
constraints_fixpoint(NewVarDict, MFA, Constrs, RecDict, ExpTypes, AllRecords)
@@ -492,18 +514,18 @@ final_form(Form, ExpTypes, MFA, AllRecords, VarDict) ->
from_form_with_check(Form, ExpTypes, MFA, AllRecords, VarDict).
from_form_with_check(Form, ExpTypes, MFA, AllRecords) ->
- from_form_with_check(Form, ExpTypes, MFA, AllRecords, dict:new()).
+ VarTable = erl_types:var_table__new(),
+ from_form_with_check(Form, ExpTypes, MFA, AllRecords, VarTable).
from_form_with_check(Form, ExpTypes, MFA, AllRecords, VarDict) ->
Site = {spec, MFA},
- erl_types:t_check_record_fields(Form, ExpTypes, Site, AllRecords,
- VarDict),
+ 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()).
+ insert_constraints(Subtypes).
constraints_to_subs([], _MFA, _RecDict, _ExpTypes, _AllRecords, _VarDict, Acc) ->
Acc;
@@ -588,8 +610,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.
diff --git a/lib/dialyzer/src/dialyzer_dataflow.erl b/lib/dialyzer/src/dialyzer_dataflow.erl
index 6e49043551..5ab0c39c04 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).
@@ -126,8 +125,8 @@
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}).
@@ -135,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
@@ -342,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),
@@ -1102,15 +1099,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).
%%----------------------------------------
@@ -1445,7 +1481,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], [],
@@ -1486,14 +1524,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} =
@@ -1682,7 +1765,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};
@@ -1710,20 +1793,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),
@@ -1732,7 +1858,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),
@@ -1761,7 +1887,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);
@@ -1841,6 +1967,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();
@@ -2349,6 +2476,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()],
@@ -2421,7 +2572,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;
@@ -2535,10 +2688,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)
@@ -2549,8 +2702,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) ->
@@ -2579,11 +2732,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.
@@ -2614,15 +2767,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;
@@ -2634,13 +2787,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);
@@ -2649,7 +2803,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 ->
@@ -2663,22 +2817,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
@@ -2703,6 +2857,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)};
_ ->
@@ -2713,12 +2870,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.
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 9f344d87ff..30d2bdeca4 100644
--- a/lib/dialyzer/src/dialyzer_gui_wx.erl
+++ b/lib/dialyzer/src/dialyzer_gui_wx.erl
@@ -422,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_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 5f0881bbcd..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,9 +66,11 @@
%%-----------------------------------------------------------------------------
-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()],
+-record(fun_var, {'fun' :: fun((_) -> erl_types:erl_type()), deps :: deps(),
origin :: integer() | 'undefined'}).
-type constr_op() :: 'eq' | 'sub'.
@@ -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()])},
+ 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,34 +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()
- | 'undefined',
- 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()
- | 'undefined',
- 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).
@@ -187,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);
@@ -311,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)};
@@ -392,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],
@@ -437,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)};
@@ -476,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
@@ -827,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);
@@ -839,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),
@@ -866,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 ->
@@ -882,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 ->
@@ -914,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,
@@ -948,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()};
@@ -1004,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),
@@ -1015,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 ->
@@ -1048,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
@@ -1064,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
%%
@@ -1263,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) ->
@@ -1644,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),
@@ -1664,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],
@@ -1672,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),
@@ -1694,130 +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,
- callgraph = undefined,
- plt = undefined,
- mfas = []
- }.
-
-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)),
@@ -1859,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) ->
@@ -1899,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},
@@ -2061,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.
@@ -2164,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.
@@ -2217,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).
@@ -2233,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.
@@ -2248,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,
@@ -2304,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,
@@ -2359,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
[_] ->
@@ -2367,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
@@ -2381,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) ->
@@ -2465,7 +2511,7 @@ report_failed_constraint(_C, _Map) ->
%% ============================================================================
map_new() ->
- dict:new().
+ maps:new().
join_maps([Map]) ->
Map;
@@ -2475,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)),
@@ -2523,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
@@ -2548,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;
@@ -2582,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.
@@ -2600,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;
@@ -2648,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))]]).
%% ============================================================================
%%
@@ -2658,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 =
@@ -2672,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) ->
@@ -2700,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),
@@ -2768,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;
@@ -2845,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).
@@ -2861,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),
@@ -2936,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, [])).
@@ -2975,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) ->
@@ -3179,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).
%% ============================================================================
%%
@@ -3263,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} ->
@@ -3309,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.
@@ -3319,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).
@@ -3327,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 5fc1c0e691..d37701f03b 100644
--- a/lib/dialyzer/src/dialyzer_utils.erl
+++ b/lib/dialyzer/src/dialyzer_utils.erl
@@ -49,6 +49,7 @@
process_record_remote_types/1,
sets_filter/2,
src_compiler_opts/0,
+ refold_pattern/1,
parallelism/0,
family/1
]).
@@ -752,6 +753,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.
@@ -832,6 +840,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/test/behaviour_SUITE_data/results/supervisor_incorrect_return b/lib/dialyzer/test/behaviour_SUITE_data/results/supervisor_incorrect_return
index 89eb295604..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(),atom(),'undefined' | [any()]},'permanent' | 'temporary' | 'transient','brutal_kill' | 'infinity' | non_neg_integer(),'supervisor' | 'worker','dynamic' | [atom()]} | #{}]}}, 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 8a2324a7c2..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.
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..374ada8869
--- /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..e4bc892195
--- /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..6bc0c010d7
--- /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/dialyzer/test/map_SUITE_data/results/subtract_value_flip b/lib/dialyzer/test/map_SUITE_data/results/subtract_value_flip
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ 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..e3378a24bb
--- /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..3049402860
--- /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/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/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/small_SUITE_data/results/literals b/lib/dialyzer/test/small_SUITE_data/results/literals
index 222d2c0cdb..1ee39453a4 100644
--- a/lib/dialyzer/test/small_SUITE_data/results/literals
+++ b/lib/dialyzer/test/small_SUITE_data/results/literals
@@ -5,6 +5,7 @@ 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'
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'
+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'}
@@ -12,3 +13,5 @@ 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'}
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 e88c91f21f..a178e96b20 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() 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/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/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/vsn.mk b/lib/dialyzer/vsn.mk
index 9480f17f51..077fe01e85 100644
--- a/lib/dialyzer/vsn.mk
+++ b/lib/dialyzer/vsn.mk
@@ -1 +1 @@
-DIALYZER_VSN = 2.8.2
+DIALYZER_VSN = 3.0
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 828ade4a71..82448e7f51 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,38 @@ first.</p>
<!-- ===================================================================== -->
+<section><title>diameter 1.11.2</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ Make peer handling more efficient.</p>
+ <p>
+ Inefficient lookup and manipulation of peer lists could
+ result in poor performance when many outgoing requests
+ were sent simultaneously, or when many peers connected
+ simultaneously. Filtering peer lists on realm/host is now
+ also more efficient in many cases.</p>
+ <p>
+ Own Id: OTP-13164</p>
+ </item>
+ <item>
+ <p>
+ Fix handling of shared peer connections in watchdog state
+ SUSPECT.</p>
+ <p>
+ A peer connection shared from a remote node was regarded
+ as being up for the lifetime of the connection, ignoring
+ watchdog transitions into state SUSPECT.</p>
+ <p>
+ Own Id: OTP-13342</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
<section><title>diameter 1.11.1</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_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_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 fb874013a3..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,
@@ -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_service.erl b/lib/diameter/src/base/diameter_service.erl
index 58b1cd742b..cfb5cb5b82 100644
--- a/lib/diameter/src/base/diameter_service.erl
+++ b/lib/diameter/src/base/diameter_service.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,7 @@
-export([subscribe/1,
unsubscribe/1,
services/0,
+ peer_info/1,
info/2]).
%% towards diameter_config
@@ -83,16 +84,8 @@
-define(DEFAULT_TC, 30000). %% RFC 3588 ch 2.1
-define(RESTART_TC, 1000). %% if restart was this recent
-%% Used to be able to swap this with anything else dict-like but now
-%% rely on the fact that a service's #state{} record does not change
-%% in storing in it ?STATE table and not always going through the
-%% service process. In particular, rely on the fact that operations on
-%% a ?Dict don't change the handle to it.
--define(Dict, diameter_dict).
-
-%% Maintains state in a table. In contrast to previously, a service's
-%% stat is not constant and is accessed outside of the service
-%% process.
+%% Maintain state in a table since a service's state is accessed
+%% outside of the service process.
-define(STATE_TABLE, ?MODULE).
%% The default sequence mask.
@@ -117,12 +110,11 @@
service :: #diameter_service{},
watchdogT = ets_new(watchdogs) %% #watchdog{} at start
:: ets:tid(),
- peerT = ets_new(peers) %% #peer{pid = TPid} at okay/reopen
- :: ets:tid(),
- shared_peers = ?Dict:new() %% Alias -> [{TPid, Caps}, ...]
- :: ets:tid(),
- local_peers = ?Dict:new() %% Alias -> [{TPid, Caps}, ...]
- :: ets:tid(),
+ peerT, %% undefined in new code, but remain for upgrade
+ shared_peers, %% reasons. Replaced by local/remote.
+ local_peers, %%
+ local :: {ets:tid(), ets:tid(), ets:tid()},
+ remote :: {ets:tid(), ets:tid(), ets:tid()},
monitor = false :: false | pid(), %% process to die with
options
:: [{sequence, diameter:sequence()} %% sequence mask
@@ -146,14 +138,16 @@
peer = false :: match(boolean() | pid())}).
%% true at accepted, pid() at okay/reopen
-%% Record representing an Peer State Machine processes implemented by
+%% Record representing a Peer State Machine processes implemented by
%% diameter_peer_fsm.
-record(peer,
- {pid :: pid(),
- apps :: [{0..16#FFFFFFFF, diameter:app_alias()}], %% {Id, Alias}
- caps :: #diameter_caps{},
- started = diameter_lib:now(), %% at process start
- watchdog :: pid()}). %% key into watchdogT
+ {pid :: pid(),
+ apps :: match([{0..16#FFFFFFFF, diameter:app_alias()}] %% {Id, Alias}
+ | [diameter:app_alias()]), %% remote
+ caps :: match(#diameter_caps{}),
+ started = diameter_lib:now(), %% at process start or sharing
+ watchdog :: match(pid() %% key into watchdogT
+ | undefined)}). %% undefined if remote
%% ---------------------------------------------------------------------------
%% # start/1
@@ -181,7 +175,7 @@ stop(SvcName) ->
end.
stop(ok, Pid) ->
- MRef = erlang:monitor(process, Pid),
+ MRef = monitor(process, Pid),
receive {'DOWN', MRef, process, _, _} -> ok end;
stop(No, _) ->
No.
@@ -225,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
%% ---------------------------------------------------------------------------
@@ -495,6 +512,9 @@ transition({service, Pid}, S) ->
transition({peer, TPid, Aliases, Caps}, S) ->
remote_peer_up(TPid, Aliases, Caps, S),
ok;
+transition({peer, TPid}, S) ->
+ remote_peer_down(TPid, S),
+ ok;
%% Remote peer process has died.
transition({'DOWN', _, process, TPid, _}, S) ->
@@ -514,7 +534,7 @@ transition(Req, S) ->
%% # terminate/2
%% ---------------------------------------------------------------------------
-terminate(Reason, #state{service_name = Name, peerT = PeerT} = S) ->
+terminate(Reason, #state{service_name = Name, local = {PeerT, _, _}} = S) ->
send_event(Name, stop),
ets:delete(?STATE_TABLE, Name),
@@ -536,23 +556,80 @@ terminate(Reason, #state{service_name = Name, peerT = PeerT} = S) ->
%% # code_change/3
%% ---------------------------------------------------------------------------
-code_change(FromVsn,
- #state{service_name = SvcName,
- service = #diameter_service{applications = Apps}}
- = S,
- Extra) ->
- lists:foreach(fun(A) ->
- code_change(FromVsn, SvcName, Extra, A)
- end,
- Apps),
+code_change(_FromVsn, #state{} = S, _Extra) ->
+ {ok, S};
+
+%% Don't support downgrade since we won't in appup.
+code_change({down = T, _}, _, _Extra) ->
+ {error, T};
+
+%% Upgrade local/shared peers dicts populated in old code. Don't
+code_change(_FromVsn, S0, _Extra) ->
+ {state, Id, SvcName, Svc, WT, PeerT, SDict, LDict, Monitor, Opts}
+ = S0,
+
+ init_peers(LT = setelement(1, {PT, _, _} = init_peers(), PeerT),
+ fun({_,A}) -> A end),
+ init_peers(init_peers(RT = init_peers(), SDict),
+ fun(A) -> A end),
+
+ S = #state{id = Id,
+ service_name = SvcName,
+ service = Svc,
+ watchdogT = WT,
+ peerT = PT, %% empty
+ shared_peers = SDict,
+ local_peers = LDict,
+ local = LT,
+ remote = RT,
+ monitor = Monitor,
+ options = Opts},
+
+ %% Replacing the table entry and deleting the old shared tables
+ %% can make outgoing requests return {error, no_connection} until
+ %% everyone is running new code. Don't delete the tables to avoid
+ %% crashing request processes.
+ ets:delete_all_objects(SDict),
+ ets:delete_all_objects(LDict),
+ ets:insert(?STATE_TABLE, S),
{ok, S}.
-code_change(FromVsn, SvcName, Extra, #diameter_app{alias = Alias} = A) ->
- {ok, S} = cb(A, code_change, [FromVsn,
- mod_state(Alias),
- Extra,
- SvcName]),
- mod_state(Alias, S).
+%% init_peers/2
+
+%% Populate app and identity bags from a new-style #peer{} sets.
+init_peers({PeerT, _, _} = T, F)
+ when is_function(F) ->
+ ets:foldl(fun(#peer{pid = P, apps = As, caps = C}, N) ->
+ insert_peer(P, lists:map(F, As), C, T),
+ N+1
+ end,
+ 0,
+ PeerT);
+
+%% Populate #peer{} table given a shared peers dict.
+init_peers({PeerT, _, _}, SDict) ->
+ dict:fold(fun(P, As, N) ->
+ ets:update_element(PeerT, P, {#peer.apps, As}),
+ N+1
+ end,
+ 0,
+ diameter_dict:fold(fun(A, Ps, D) ->
+ init_peers(A, Ps, PeerT, D)
+ end,
+ dict:new(),
+ SDict)).
+
+%% init_peers/4
+
+init_peers(App, TCs, PeerT, Dict) ->
+ lists:foldl(fun({P,C}, D) ->
+ ets:insert(PeerT, #peer{pid = P,
+ apps = [],
+ caps = C}),
+ dict:append(P, App, D)
+ end,
+ Dict,
+ TCs).
%% ===========================================================================
%% ===========================================================================
@@ -560,9 +637,6 @@ code_change(FromVsn, SvcName, Extra, #diameter_app{alias = Alias} = A) ->
unexpected(F, A, #state{service_name = Name}) ->
?UNEXPECTED(F, A ++ [Name]).
-cb(#diameter_app{module = [_|_] = M}, F, A) ->
- eval(M, F, A).
-
eval([M|X], F, A) ->
apply(M, F, A ++ X).
@@ -582,10 +656,6 @@ choose(false, _, X) -> X.
ets_new(Tbl) ->
ets:new(Tbl, [{keypos, 2}]).
-insert(Tbl, Rec) ->
- ets:insert(Tbl, Rec),
- Rec.
-
%% Using the process dictionary for the callback state was initially
%% just a way to make what was horrendous trace (big state record and
%% much else everywhere) somewhat more readable. There's not as much
@@ -686,6 +756,8 @@ cfg_acc({SvcName, #diameter_service{applications = Apps} = Rec, Opts},
lists:foreach(fun init_mod/1, Apps),
S = #state{service_name = SvcName,
service = Rec#diameter_service{pid = self()},
+ local = init_peers(),
+ remote = init_peers(),
monitor = mref(get_value(monitor, Opts)),
options = service_options(Opts)},
{S, Acc};
@@ -695,6 +767,13 @@ cfg_acc({_Ref, Type, _Opts} = T, {S, Acc})
Type == listen ->
{S, [T | Acc]}.
+init_peers() ->
+ {ets_new(caps), %% #peer{}
+ ets:new(apps, [bag]), %% {Alias, TPid}
+ ets:new(idents, [bag])}. %% {{host, OH} | {realm, OR} | {OR, OH},
+ %% Alias,
+ %% TPid}
+
service_options(Opts) ->
[{sequence, proplists:get_value(sequence, Opts, ?NOMASK)},
{share_peers, get_value(share_peers, Opts)},
@@ -711,7 +790,7 @@ service_options(Opts) ->
mref(false = No) ->
No;
mref(P) ->
- erlang:monitor(process, P).
+ monitor(process, P).
init_shared(#state{options = [_, _, {_,T} | _],
service_name = Svc}) ->
@@ -810,7 +889,7 @@ start(Ref, Type, Opts, State) ->
%% start/5
start(Ref, Type, Opts, N, #state{watchdogT = WatchdogT,
- peerT = PeerT,
+ local = {PeerT, _, _},
options = SvcOpts,
service_name = SvcName,
service = Svc0})
@@ -841,7 +920,7 @@ binary_caps(#diameter_service{capabilities = Caps} = Svc, false) ->
wd(Type, Ref, T, WatchdogT, Rec) ->
Pid = start_watchdog(Type, Ref, T),
- insert(WatchdogT, Rec#watchdog{pid = Pid}),
+ ets:insert(WatchdogT, Rec#watchdog{pid = Pid}),
Pid.
%% Note that the service record passed into the watchdog is the merged
@@ -898,8 +977,8 @@ accepted(Pid, _TPid, #state{watchdogT = WatchdogT} = S) ->
#watchdog{ref = Ref, type = accept = T, peer = false, options = Opts}
= Wd
= fetch(WatchdogT, Pid),
- insert(WatchdogT, Wd#watchdog{peer = true}),%% mark replacement as started
- start(Ref, T, Opts, S). %% start new watchdog
+ ets:insert(WatchdogT, Wd#watchdog{peer = true}),%% mark replacement started
+ start(Ref, T, Opts, S). %% start new watchdog
fetch(Tid, Key) ->
[T] = ets:lookup(Tid, Key),
@@ -925,13 +1004,14 @@ watchdog(TPid, [], ?WD_SUSPECT, ?WD_OKAY, Wd, State) ->
#watchdog{peer = TPid} = Wd, %% assert
connection_up(Wd, State);
-%% Watchdog has an unresponsive connection.
+%% Watchdog has an unresponsive connection. Note that the peer table
+%% entry isn't removed until DOWN.
watchdog(TPid, [], ?WD_OKAY, ?WD_SUSPECT = To, Wd, State) ->
#watchdog{peer = TPid} = Wd, %% assert
watchdog_down(Wd, To, State);
%% Watchdog has lost its connection.
-watchdog(TPid, [], _, ?WD_DOWN = To, Wd, #state{peerT = PeerT} = S) ->
+watchdog(TPid, [], _, ?WD_DOWN = To, Wd, #state{local = {PeerT, _, _}} = S) ->
close(Wd),
watchdog_down(Wd, To, S),
ets:delete(PeerT, TPid);
@@ -940,7 +1020,7 @@ watchdog(_, [], _, _, _, _) ->
ok.
watchdog_down(Wd, To, #state{watchdogT = WatchdogT} = S) ->
- insert(WatchdogT, Wd#watchdog{state = To}),
+ ets:insert(WatchdogT, Wd#watchdog{state = To}),
connection_down(Wd, To, S).
%% ---------------------------------------------------------------------------
@@ -952,14 +1032,14 @@ watchdog_down(Wd, To, #state{watchdogT = WatchdogT} = S) ->
connection_up({TPid, {Caps, SupportedApps, Pkt}},
#watchdog{pid = Pid}
= Wd,
- #state{peerT = PeerT}
+ #state{local = {PeerT, _, _}}
= S) ->
- Pr = #peer{pid = TPid,
- apps = SupportedApps,
- caps = Caps,
- watchdog = Pid},
- insert(PeerT, Pr),
- connection_up([Pkt], Wd#watchdog{peer = TPid}, Pr, S).
+ Rec = #peer{pid = TPid,
+ apps = SupportedApps,
+ caps = Caps,
+ watchdog = Pid},
+ ets:insert(PeerT, Rec),
+ connection_up([Pkt], Wd#watchdog{peer = TPid}, Rec, S).
%% ---------------------------------------------------------------------------
%% # reopen/3
@@ -969,22 +1049,23 @@ reopen({TPid, {Caps, SupportedApps, _Pkt}},
#watchdog{pid = Pid}
= Wd,
#state{watchdogT = WatchdogT,
- peerT = PeerT}) ->
- insert(PeerT, #peer{pid = TPid,
- apps = SupportedApps,
- caps = Caps,
- watchdog = Pid}),
- insert(WatchdogT, Wd#watchdog{state = ?WD_REOPEN,
- peer = TPid}).
+ local = {PeerT, _, _}}) ->
+ ets:insert(PeerT, #peer{pid = TPid,
+ apps = SupportedApps,
+ caps = Caps,
+ watchdog = Pid}),
+ ets:insert(WatchdogT, Wd#watchdog{state = ?WD_REOPEN,
+ peer = TPid}).
%% ---------------------------------------------------------------------------
%% # connection_up/2
%% ---------------------------------------------------------------------------
-%% Watchdog has recovered as suspect connection. Note that there has
+%% Watchdog has recovered a suspect connection. Note that there has
%% been no new capabilties exchange in this case.
-connection_up(#watchdog{peer = TPid} = Wd, #state{peerT = PeerT} = S) ->
+connection_up(#watchdog{peer = TPid} = Wd, #state{local = {PeerT, _, _}}
+ = S) ->
connection_up([], Wd, fetch(PeerT, TPid), S).
%% connection_up/4
@@ -995,23 +1076,23 @@ connection_up(Extra,
#peer{apps = SApps, caps = Caps}
= Pr,
#state{watchdogT = WatchdogT,
- local_peers = LDict,
+ local = LT,
service_name = SvcName,
service = #diameter_service{applications = Apps}}
= S) ->
- insert(WatchdogT, Wd#watchdog{state = ?WD_OKAY}),
+ ets:insert(WatchdogT, Wd#watchdog{state = ?WD_OKAY}),
diameter_traffic:peer_up(TPid),
- insert_local_peer(SApps, {{TPid, Caps}, {SvcName, Apps}}, LDict),
+ local_peer_up(SApps, {TPid, Caps}, {SvcName, Apps}, LT),
report_status(up, Wd, Pr, S, Extra).
-insert_local_peer(SApps, T, LDict) ->
- lists:foldl(fun(A,D) -> ilp(A, T, D) end, LDict, SApps).
+local_peer_up(SApps, {TPid, Caps} = TC, SA, LT) ->
+ insert_peer(TPid, [A || {_,A} <- SApps], Caps, LT),
+ lists:foreach(fun(A) -> peer_up(A, TC, SA) end, SApps).
-ilp({Id, Alias}, {TC, SA}, LDict) ->
- init_conn(Id, Alias, TC, SA),
- ?Dict:append(Alias, TC, LDict).
+peer_up({Id, Alias}, TC, SA) ->
+ peer_up(Id, Alias, TC, SA).
-init_conn(Id, Alias, {TPid, _} = TC, {SvcName, Apps}) ->
+peer_up(Id, Alias, {TPid, _} = TC, {SvcName, Apps}) ->
#diameter_app{id = Id} %% assert
= App
= find_app(Alias, Apps),
@@ -1109,17 +1190,17 @@ connection_down(#watchdog{state = ?WD_OKAY,
= Pr,
#state{service_name = SvcName,
service = #diameter_service{applications = Apps},
- local_peers = LDict}
+ local = LT}
= S) ->
report_status(down, Wd, Pr, S, []),
- remove_local_peer(SApps, {{TPid, Caps}, {SvcName, Apps}}, LDict),
+ local_peer_down(SApps, {TPid, Caps}, {SvcName, Apps}, LT),
diameter_traffic:peer_down(TPid);
connection_down(#watchdog{state = ?WD_OKAY,
peer = TPid}
= Wd,
To,
- #state{peerT = PeerT}
+ #state{local = {PeerT, _, _}}
= S)
when is_atom(To) ->
connection_down(Wd, #peer{} = fetch(PeerT, TPid), S);
@@ -1127,15 +1208,14 @@ connection_down(#watchdog{state = ?WD_OKAY,
connection_down(#watchdog{}, _, _) ->
ok.
-remove_local_peer(SApps, T, LDict) ->
- lists:foldl(fun(A,D) -> rlp(A, T, D) end, LDict, SApps).
+local_peer_down(SApps, {TPid, _Caps} = TC, SA, LT) ->
+ delete_peer(TPid, LT),
+ lists:foreach(fun(A) -> peer_down(A, TC, SA) end, SApps).
-rlp({Id, Alias}, {TC, SA}, LDict) ->
- L = ?Dict:fetch(Alias, LDict),
- down_conn(Id, Alias, TC, SA),
- ?Dict:store(Alias, lists:delete(TC, L), LDict).
+peer_down({Id, Alias}, TC, SA) ->
+ peer_down(Id, Alias, TC, SA).
-down_conn(Id, Alias, TC, {SvcName, Apps}) ->
+peer_down(Id, Alias, TC, {SvcName, Apps}) ->
#diameter_app{id = Id} %% assert
= App
= find_app(Alias, Apps),
@@ -1160,7 +1240,7 @@ wd_down(#watchdog{peer = B}, _)
ok;
%% ... or maybe it has.
-wd_down(#watchdog{peer = TPid} = Wd, #state{peerT = PeerT} = S) ->
+wd_down(#watchdog{peer = TPid} = Wd, #state{local = {PeerT, _, _}} = S) ->
connection_down(Wd, ?WD_DOWN, S),
ets:delete(PeerT, TPid).
@@ -1368,19 +1448,37 @@ share_peer(up, Caps, Apps, TPid, #state{options = [_, {_,T} | _],
service_name = Svc}) ->
notify(T, Svc, {peer, TPid, [A || {_,A} <- Apps], Caps});
-share_peer(_, _, _, _, _) ->
- ok.
+share_peer(down, _Caps, _Apps, TPid, #state{options = [_, {_,T} | _],
+ service_name = Svc}) ->
+ notify(T, Svc, {peer, TPid}).
%% ---------------------------------------------------------------------------
%% # share_peers/2
%% ---------------------------------------------------------------------------
-share_peers(Pid, #state{options = [_, {_,T} | _], local_peers = PDict}) ->
- is_remote(Pid, T)
- andalso ?Dict:fold(fun(A,Ps,ok) -> sp(Pid, A, Ps), ok end, ok, PDict).
-
-sp(Pid, Alias, Peers) ->
- lists:foreach(fun({P,C}) -> Pid ! {peer, P, [Alias], C} end, Peers).
+share_peers(Pid, #state{options = [_, {_,SP} | _],
+ local = {PeerT, AppT, _}}) ->
+ is_remote(Pid, SP)
+ andalso ets:foldl(fun(T, N) -> N + sp(Pid, AppT, T) end,
+ 0,
+ PeerT).
+
+%% An entry in the peer table doesn't mean the watchdog state is OKAY,
+%% an entry in the app table does.
+
+sp(Pid, AppT, #peer{pid = TPid,
+ apps = [{_, Alias} | _] = Apps,
+ caps = Caps}) ->
+ Spec = [{{'$1', TPid},
+ [{'==', '$1', {const, Alias}}],
+ ['$_']}],
+ case ets:select(AppT, Spec, 1) of
+ '$end_of_table' ->
+ 0;
+ _ ->
+ Pid ! {peer, TPid, [A || {_,A} <- Apps], Caps},
+ 1
+ end.
is_remote(Pid, T) ->
Node = node(Pid),
@@ -1390,32 +1488,49 @@ is_remote(Pid, T) ->
%% # remote_peer_up/4
%% ---------------------------------------------------------------------------
-remote_peer_up(Pid, Aliases, Caps, #state{options = [_, _, {_,T} | _]} = S) ->
- is_remote(Pid, T)
- andalso rpu(Pid, Aliases, Caps, S).
+remote_peer_up(TPid, Aliases, Caps, #state{options = [_, _, {_,T} | _]} = S) ->
+ is_remote(TPid, T) andalso rpu(TPid, Aliases, Caps, S).
-rpu(Pid, Aliases, Caps, #state{service = Svc, shared_peers = PDict}) ->
+rpu(TPid, Aliases, Caps, #state{service = Svc, remote = RT}) ->
#diameter_service{applications = Apps} = Svc,
Key = #diameter_app.alias,
F = fun(A) -> lists:keymember(A, Key, Apps) end,
- rpu(Pid, lists:filter(F, Aliases), Caps, PDict);
+ rpu(TPid, lists:filter(F, Aliases), Caps, RT);
rpu(_, [] = No, _, _) ->
No;
-rpu(Pid, Aliases, Caps, PDict) ->
- erlang:monitor(process, Pid),
- T = {Pid, Caps},
- lists:foreach(fun(A) -> ?Dict:append(A, T, PDict) end, Aliases).
+rpu(TPid, Aliases, Caps, {PeerT, _, _} = RT) ->
+ monitor(process, TPid),
+ ets:insert(PeerT, #peer{pid = TPid,
+ apps = Aliases,
+ caps = Caps}),
+ insert_peer(TPid, Aliases, Caps, RT).
+
+%% insert_peer/4
+
+insert_peer(TPid, Aliases, Caps, {_PeerT, AppT, IdentT}) ->
+ #diameter_caps{origin_host = {_, OH},
+ origin_realm = {_, OR}}
+ = Caps,
+ ets:insert(AppT, [{A, TPid} || A <- Aliases]),
+ H = iolist_to_binary(OH),
+ R = iolist_to_binary(OR),
+ ets:insert(IdentT, [{T, A, TPid} || T <- [{host, H}, {realm, R}, {R, H}],
+ A <- Aliases]).
%% ---------------------------------------------------------------------------
%% # remote_peer_down/2
%% ---------------------------------------------------------------------------
-remote_peer_down(Pid, #state{shared_peers = PDict}) ->
- lists:foreach(fun(A) -> rpd(Pid, A, PDict) end, ?Dict:fetch_keys(PDict)).
+remote_peer_down(TPid, #state{remote = {PeerT, _, _} = RT}) ->
+ ets:delete(PeerT, TPid),
+ delete_peer(TPid, RT).
+
+%% delete_peer/2
-rpd(Pid, Alias, PDict) ->
- ?Dict:update(Alias, fun(Ps) -> lists:keydelete(Pid, 1, Ps) end, PDict).
+delete_peer(TPid, {_PeerT, AppT, IdentT}) ->
+ ets:select_delete(AppT, [{{'_', TPid}, [], [true]}]),
+ ets:select_delete(IdentT, [{{'_', '_', TPid}, [], [true]}]).
%% ---------------------------------------------------------------------------
%% pick_peer/4
@@ -1425,12 +1540,12 @@ pick_peer(#diameter_app{alias = Alias}
= App,
RealmAndHost,
Filter,
- #state{local_peers = L,
- shared_peers = S,
+ #state{local = LT,
+ remote = RT,
service_name = SvcName,
service = #diameter_service{pid = Pid}}) ->
- pick_peer(peers(Alias, RealmAndHost, Filter, L),
- peers(Alias, RealmAndHost, Filter, S),
+ pick_peer(peers(Alias, RealmAndHost, Filter, LT),
+ peers(Alias, RealmAndHost, Filter, RT),
Pid,
SvcName,
App).
@@ -1495,54 +1610,196 @@ pick_peer(Local,
%% peers/4
-peers(Alias, RH, Filter, Peers) ->
- case ?Dict:find(Alias, Peers) of
- {ok, L} ->
- filter(L, RH, Filter);
- error ->
+peers(Alias, RH, Filter, T) ->
+ filter(Alias, RH, Filter, T, true).
+
+%% filter/5
+%%
+%% Try to limit the peers list by starting with a host/realm lookup.
+
+filter(Alias, RH, {neg, F}, T, B) ->
+ filter(Alias, RH, F, T, not B);
+
+filter(_, _, none, _, false) ->
+ [];
+
+filter(Alias, _, none, T, true) ->
+ all_peers(Alias, T);
+
+filter(Alias, [DR,DH] = RH, K, T, B)
+ when K == realm, DR == undefined;
+ K == host, DH == undefined ->
+ filter(Alias, RH, none, T, B);
+
+filter(Alias, [DR,_] = RH, realm = K, T, B) ->
+ filter(Alias, RH, {K, DR}, T, B);
+
+filter(Alias, [_,DH] = RH, host = K, T, B) ->
+ filter(Alias, RH, {K, DH}, T, B);
+
+filter(Alias, _, {K, D}, {PeerT, _AppT, IdentT}, true)
+ when K == host;
+ K == realm ->
+ try iolist_to_binary(D) of
+ B ->
+ caps(PeerT, ets:select(IdentT, [{{{K, B}, '$1', '$2'},
+ [{'==', '$1', {const, Alias}}],
+ ['$2']}]))
+ catch
+ error:_ ->
[]
- end.
+ end;
-%% filter/3
+filter(Alias, RH, {all, Filters}, T, B)
+ when is_list(Filters) ->
+ fltr_all(Alias, RH, Filters, T, B);
+
+filter(Alias, RH, {first, Filters}, T, B)
+ when is_list(Filters) ->
+ fltr_first(Alias, RH, Filters, T, B);
+
+filter(Alias, RH, Filter, T, B) ->
+ {Ts, Fs} = filter(all_peers(Alias, T), RH, Filter),
+ choose(B, Ts, Fs).
+
+%% fltr_all/5
+
+fltr_all(Alias, RH, [{K, any} | Filters], T, B)
+ when K == host;
+ K == realm ->
+ fltr_all(Alias, RH, Filters, T, B);
+
+fltr_all(Alias, RH, [{host, _} = H, {realm, _} = R | Filters], T, B) ->
+ fltr_all(Alias, RH, [R, H | Filters], T, B);
+
+fltr_all(Alias, RH, [{realm, _} = R, {host, any} | Filters], T, B) ->
+ fltr_all(Alias, RH, [R | Filters], T, B);
+
+fltr_all(Alias, RH, [{realm, OR}, {host, OH} | Filters], T, true) ->
+ {PeerT, _AppT, IdentT} = T,
+ try {iolist_to_binary(OR), iolist_to_binary(OH)} of
+ BT ->
+ Peers = caps(PeerT,
+ ets:select(IdentT, [{{BT, '$1', '$2'},
+ [{'==', '$1', {const, Alias}}],
+ ['$2']}])),
+ {Ts, _} = filter(Peers, RH, {all, Filters}),
+ Ts
+ catch
+ error:_ ->
+ []
+ end;
+
+fltr_all(Alias, [undefined,_] = RH, [realm | Filters], T, B) ->
+ fltr_all(Alias, RH, Filters, T, B);
+
+fltr_all(Alias, [DR,_] = RH, [realm | Filters], T, B) ->
+ fltr_all(Alias, RH, [{realm, DR} | Filters], T, B);
+
+fltr_all(Alias, [_,undefined] = RH, [host | Filters], T, B) ->
+ fltr_all(Alias, RH, Filters, T, B);
+
+fltr_all(Alias, [_,DH] = RH, [host | Filters], T, B) ->
+ fltr_all(Alias, RH, [{host, DH} | Filters], T, B);
+
+fltr_all(Alias, RH, [{K, _} = KT, KA | Filters], T, B)
+ when K == host, KA == realm;
+ K == realm, KA == host ->
+ fltr_all(Alias, RH, [KA, KT | Filters], T, B);
+
+fltr_all(Alias, RH, [F | Filters], T, B) ->
+ {Ts, Fs} = filter(filter(Alias, RH, F, T, B), RH, {all, Filters}),
+ choose(B, Ts, Fs);
+
+fltr_all(Alias, RH, [], T, B) ->
+ filter(Alias, RH, none, T, B).
+
+%% fltr_first/5
%%
-%% Return peers in match order.
+%% Like any, but stop at the first filter with any matches.
+
+fltr_first(Alias, RH, [F | Filters], T, B) ->
+ case filter(Alias, RH, F, T, B) of
+ [] ->
+ fltr_first(Alias, RH, Filters, T, B);
+ [_|_] = Ts ->
+ Ts
+ end;
+
+fltr_first(Alias, RH, [], T, B) ->
+ filter(Alias, RH, none, T, not B).
+
+%% all_peers/2
+
+all_peers(Alias, {PeerT, AppT, _}) ->
+ ets:select(PeerT, [{#peer{pid = P, caps = '$1', _ = '_'},
+ [],
+ [{{P, '$1'}}]}
+ || {_,P} <- ets:lookup(AppT, Alias)]).
-filter(Peers, RH, Filter) ->
- {Ts, _} = fltr(Peers, RH, Filter),
- Ts.
+%% caps/2
-%% fltr/4
+caps(PeerT, Pids) ->
+ ets:select(PeerT, [{#peer{pid = P, caps = '$1', _ = '_'},
+ [],
+ [{{P, '$1'}}]}
+ || P <- Pids]).
+
+%% filter/3
+%%
+%% Return peers in match order.
-fltr(Peers, _, none) ->
+filter(Peers, _, none) ->
{Peers, []};
-fltr(Peers, RH, {neg, F}) ->
- {Ts, Fs} = fltr(Peers, RH, F),
+filter(Peers, RH, {neg, F}) ->
+ {Ts, Fs} = filter(Peers, RH, F),
{Fs, Ts};
-fltr(Peers, RH, {all, L})
+filter(Peers, RH, {all, L})
when is_list(L) ->
lists:foldl(fun(F,A) -> fltr_all(F, A, RH) end,
{Peers, []},
L);
-fltr(Peers, RH, {any, L})
+filter(Peers, RH, {any, L})
when is_list(L) ->
lists:foldl(fun(F,A) -> fltr_any(F, A, RH) end,
{[], Peers},
L);
-fltr(Peers, RH, F) ->
+filter(Peers, RH, {first, L})
+ when is_list(L) ->
+ fltr_first(Peers, RH, L);
+
+filter(Peers, RH, F) ->
lists:partition(fun({_,C}) -> caps_filter(C, RH, F) end, Peers).
+%% fltr_all/3
+
fltr_all(F, {Ts0, Fs0}, RH) ->
- {Ts1, Fs1} = fltr(Ts0, RH, F),
+ {Ts1, Fs1} = filter(Ts0, RH, F),
{Ts1, Fs0 ++ Fs1}.
+%% fltr_any/3
+
fltr_any(F, {Ts0, Fs0}, RH) ->
- {Ts1, Fs1} = fltr(Fs0, RH, F),
+ {Ts1, Fs1} = filter(Fs0, RH, F),
{Ts0 ++ Ts1, Fs1}.
+%% fltr_first/3
+
+fltr_first(Peers, _, []) ->
+ {[], Peers};
+
+fltr_first(Peers, RH, [F | Filters]) ->
+ case filter(Peers, RH, F) of
+ {[], _} ->
+ fltr_first(Peers, RH, Filters);
+ {_, _} = T ->
+ T
+ end.
+
%% caps_filter/3
caps_filter(#diameter_caps{origin_host = {_,OH}}, [_,DH], host) ->
@@ -1586,8 +1843,8 @@ eq(Any, Id, PeerId) ->
transports(#state{watchdogT = WatchdogT}) ->
ets:select(WatchdogT, [{#watchdog{peer = '$1', _ = '_'},
- [{'is_pid', '$1'}],
- ['$1']}]).
+ [{'is_pid', '$1'}],
+ ['$1']}]).
%% ---------------------------------------------------------------------------
%% # service_info/2
@@ -1640,7 +1897,7 @@ tagged_info(Item, S)
undefined
end;
-tagged_info(TPid, #state{watchdogT = WatchdogT, peerT = PeerT})
+tagged_info(TPid, #state{watchdogT = WatchdogT, local = {PeerT, _, _}})
when is_pid(TPid) ->
try
[#peer{watchdog = Pid}] = ets:lookup(PeerT, TPid),
@@ -1790,7 +2047,7 @@ keys(connect = T, Opts) ->
keys(_, _) ->
[{listen, accept}].
-peer_dict(#state{watchdogT = WatchdogT, peerT = PeerT}, Dict0) ->
+peer_dict(#state{watchdogT = WatchdogT, local = {PeerT, _, _}}, Dict0) ->
try ets:tab2list(WatchdogT) of
L -> lists:foldl(fun(T,A) -> peer_acc(PeerT, A, T) end, Dict0, L)
catch
diff --git a/lib/diameter/src/base/diameter_session.erl b/lib/diameter/src/base/diameter_session.erl
index 4cd76ed1f1..53973649fd 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.
diff --git a/lib/diameter/src/base/diameter_traffic.erl b/lib/diameter/src/base/diameter_traffic.erl
index 07f39c562f..2112941d5e 100644
--- a/lib/diameter/src/base/diameter_traffic.erl
+++ b/lib/diameter/src/base/diameter_traffic.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.
@@ -41,7 +41,6 @@
-export([make_recvdata/1,
peer_up/1,
peer_down/1,
- failover/1,
pending/1]).
%% towards ?MODULE
@@ -231,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,
@@ -245,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
@@ -264,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
@@ -274,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
@@ -1566,6 +1575,8 @@ answer(Pkt,
Req) ->
a(Pkt, SvcName, ModX, AE, Req).
+-spec a(_, _, _) -> no_return(). %% silence dialyzer
+
a(#diameter_packet{errors = Es}
= Pkt,
SvcName,
@@ -1814,7 +1825,7 @@ store_request(T, TPid) ->
ets:member(?REQUEST_TABLE, TPid)
orelse begin
{_Seqs, _Req, TRef} = T,
- (self() ! {failover, TRef}) %% failover/1 may have missed
+ self() ! {failover, TRef} %% failover/1 may have missed
end.
%% lookup_request/2
@@ -1864,7 +1875,7 @@ failover(TPid)
%% notifications are sent here: store_request/2 sends the notification
%% in that case.
-%% Failover as a consequence of request_peer_down/1: inform the
+%% Failover as a consequence of peer_down/1: inform the
%% request process.
failover({_, Req, TRef}) ->
#request{handler = Pid,
diff --git a/lib/diameter/src/base/diameter_watchdog.erl b/lib/diameter/src/base/diameter_watchdog.erl
index ea8b2fdb0e..3fd87b223e 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.
@@ -449,8 +449,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) ->
@@ -578,22 +584,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 +626,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 +666,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 +735,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 ba0e79907c..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.
@@ -46,24 +46,10 @@
{"1.9.2.1", [{restart_application, diameter}]}, %% 17.5.6.3
{"1.9.2.2", [{restart_application, diameter}]}, %% 17.5.6.7
{"1.9.2.3", [{restart_application, diameter}]}, %% 17.5.6.8
- {"1.10", [{load_module, diameter_codec}, %% 18.0
- {load_module, diameter_peer_fsm},
- {load_module, diameter_watchdog},
- {load_module, diameter_stats},
- {load_module, diameter_config},
- {load_module, diameter_lib},
- {load_module, diameter_peer},
- {load_module, diameter_reg},
- {load_module, diameter_traffic},
- {load_module, diameter_service},
- {load_module, diameter_sync},
- {load_module, diameter},
- {load_module, diameter_gen_base_rfc6733},
- {load_module, diameter_gen_acct_rfc6733},
- {load_module, diameter_gen_base_rfc3588},
- {load_module, diameter_gen_base_accounting},
- {load_module, diameter_gen_relay}]},
- {"1.11", [{load_module, diameter_traffic}]} %% 18.1
+ {"1.10", [{restart_application, diameter}]}, %% 18.0
+ {"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}]},
@@ -91,23 +77,9 @@
{"1.9.2.1", [{restart_application, diameter}]},
{"1.9.2.2", [{restart_application, diameter}]},
{"1.9.2.3", [{restart_application, diameter}]},
- {"1.10", [{load_module, diameter_gen_relay},
- {load_module, diameter_gen_base_accounting},
- {load_module, diameter_gen_base_rfc3588},
- {load_module, diameter_gen_acct_rfc6733},
- {load_module, diameter_gen_base_rfc6733},
- {load_module, diameter},
- {load_module, diameter_sync},
- {load_module, diameter_service},
- {load_module, diameter_traffic},
- {load_module, diameter_reg},
- {load_module, diameter_peer},
- {load_module, diameter_lib},
- {load_module, diameter_config},
- {load_module, diameter_stats},
- {load_module, diameter_watchdog},
- {load_module, diameter_peer_fsm},
- {load_module, diameter_codec}]},
- {"1.11", [{load_module, diameter_traffic}]}
+ {"1.10", [{restart_application, diameter}]},
+ {"1.11", [{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/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_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 c79d85820b..6a5e5fe89d 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).
@@ -102,7 +103,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 +112,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 +203,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.
@@ -246,14 +256,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 +263,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 +395,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
@@ -536,53 +538,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 +584,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 +652,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 +754,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 +798,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 +827,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 +840,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_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_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..3d9ad8bfa8 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.
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..976abf9138 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.
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 7ac4a7adfb..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.1
+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 5260a1d465..130a5a850e 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,33 @@
<p>This document describes the changes made to the EDoc
application.</p>
+<section><title>Edoc 0.7.18</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p> Assign correct names to list arguments. </p>
+ <p>
+ Own Id: OTP-13234 Aux Id: ERL-63 </p>
+ </item>
+ </list>
+ </section>
+
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ Unless the <c>sort_functions</c> option is <c>true</c>,
+ <c>edoc_layout</c> does not sort functions.</p>
+ <p>
+ Own Id: OTP-13302</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
<section><title>Edoc 0.7.17</title>
<section><title>Improvements and New Features</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/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..e7a4c36ca4 100644
--- a/lib/edoc/src/edoc_extract.erl
+++ b/lib/edoc/src/edoc_extract.erl
@@ -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([], _, _, _, _, _) ->
[].
diff --git a/lib/edoc/src/edoc_specs.erl b/lib/edoc/src/edoc_specs.erl
index f2e5891c2e..faee8adf7b 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
@@ -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/vsn.mk b/lib/edoc/vsn.mk
index 49a73331c6..83514ac94f 100644
--- a/lib/edoc/vsn.mk
+++ b/lib/edoc/vsn.mk
@@ -1 +1 @@
-EDOC_VSN = 0.7.17
+EDOC_VSN = 0.7.18
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 b40977cfd9..aa3e3137ae 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,37 @@
</header>
<p>This document describes the changes made to the Eldap application.</p>
+<section><title>Eldap 1.2.1</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ ELDAP did not send an <c>'unBind'</c> request before
+ closing the connection.</p>
+ <p>
+ Own Id: OTP-13327</p>
+ </item>
+ </list>
+ </section>
+
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ Handles the <c>referral</c> result code from LDAP
+ servers. Adds the return value <c>{ok,
+ {referral,UrlList}}</c> to some functions. See the Eldap
+ reference manual for details.</p>
+ <p>
+ Own Id: OTP-12272</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
<section><title>Eldap 1.2</title>
<section><title>Improvements and New Features</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 dc236f8a44..625309271b 100644
--- a/lib/eldap/src/eldap.erl
+++ b/lib/eldap/src/eldap.erl
@@ -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);
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 4c1c2f8144..536e891a1e 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.
@@ -94,7 +94,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
].
@@ -312,6 +313,30 @@ 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),
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 aa8bf14919..be94c0a7a0 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,22 @@
</header>
<p>This document describes the changes made to the <em>erl_docgen</em> application.</p>
- <section><title>Erl_Docgen 0.4.1</title>
+ <section><title>Erl_Docgen 0.4.2</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ Correctly generate anno tags for maps keys</p>
+ <p>
+ Own Id: OTP-12955</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>Erl_Docgen 0.4.1</title>
<section><title>Improvements and New Features</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..ac4278bf22 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.
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/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_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..c2d7d40446 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.
@@ -383,9 +383,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>
@@ -1855,6 +1853,7 @@
</xsl:choose>
</xsl:template>
+ <!-- Used both in <datatype> and in <func>! -->
<xsl:template name="name">
<xsl:variable name="tmpstring">
@@ -1911,7 +1910,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}"><span class="bold_code"><xsl:value-of select="."/></span></a><br/>
+ </xsl:when>
+ <xsl:otherwise>
+ <a name="{$fname}-{$arity}"><span class="bold_code"><xsl:value-of select="."/></span></a><br/>
+ </xsl:otherwise>
+ </xsl:choose>
</xsl:when>
<xsl:otherwise>
<span class="bold_code"><xsl:value-of select="."/></span>
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..f75615c105 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.
diff --git a/lib/erl_docgen/priv/xsl/db_pdf.xsl b/lib/erl_docgen/priv/xsl/db_pdf.xsl
index 37a2d55274..e5e624ac4c 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.
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_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/vsn.mk b/lib/erl_docgen/vsn.mk
index 43f5a570d7..3188b926ff 100644
--- a/lib/erl_docgen/vsn.mk
+++ b/lib/erl_docgen/vsn.mk
@@ -1 +1 @@
-ERL_DOCGEN_VSN = 0.4.1
+ERL_DOCGEN_VSN = 0.4.2
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 3ac9212085..9e52a2adcf 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.
@@ -251,7 +251,7 @@ case "$threads_disabled" in
;;
win32_threads)
EI_THREADS="true"
- THR_DEFS="$THR_DEFS -D_WIN32_WINNT=0x0500 -DWINVER=0x0500"
+ THR_DEFS="$THR_DEFS -D_WIN32_WINNT=0x0600 -DWINVER=0x0600"
;;
pthread)
EI_THREADS="true"
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 6d951e895f..9420beaf43 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,36 @@
</header>
<p>This document describes the changes made to the Erl_interface application.</p>
+<section><title>Erl_Interface 3.8.2</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ Fix Erl_Interface build error on Debian/Hurd and
+ Debian/kFreeBSD. (Thanks to Sergei Golovan)</p>
+ <p>
+ Own Id: OTP-13328</p>
+ </item>
+ </list>
+ </section>
+
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ EPMD supports both IPv4 and IPv6</p>
+ <p>
+ Also affects oldest supported windows version.</p>
+ <p>
+ Own Id: OTP-13364</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
<section><title>Erl_Interface 3.8.1</title>
<section><title>Improvements and New Features</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 d6176ec053..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.
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..3c212bf177 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) |
@@ -801,9 +841,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 +856,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 +883,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 +897,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 +915,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 +927,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 +1175,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 +1231,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 +1307,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 +1325,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 +1680,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 +1723,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..a14fdbd7d1 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.
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..81accab4b6 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.
@@ -398,6 +398,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 +433,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 +443,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 db3587339e..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.
@@ -24,94 +24,67 @@
-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 c94ac37af4..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.
@@ -24,173 +24,145 @@
-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 91357c99f2..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.
@@ -24,20 +24,15 @@
-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..30f5fe33a0 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.
diff --git a/lib/erl_interface/test/ei_decode_encode_SUITE.erl b/lib/erl_interface/test/ei_decode_encode_SUITE.erl
index 6a25b98209..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.
@@ -24,34 +24,15 @@
-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 d94f3adf42..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.
@@ -24,22 +24,19 @@
-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 ed6a755f9b..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.
@@ -24,155 +24,131 @@
-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 36ee90c7ee..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.
@@ -24,141 +24,117 @@
-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 f506b3dbb0..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.
@@ -25,333 +25,300 @@
-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 d3fe020bce..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.
@@ -24,87 +24,64 @@
-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 230310f63b..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.
@@ -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..687a45bbab 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.
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 cbc93b4cfb..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.
@@ -24,74 +24,44 @@
-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 afbbe6a241..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.
@@ -24,134 +24,108 @@
-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 493ad576c9..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.
@@ -24,9 +24,9 @@
-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 ecdebad212..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.
@@ -24,246 +24,218 @@
-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 3bc1a03eab..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]).
+-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..9a27eda038 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.
@@ -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,7 +119,7 @@ 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) ->
@@ -127,5 +127,5 @@ get_reply(Port, Timeout) when is_port(Port) ->
{Port, {data, Reply}} ->
Reply
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 18ba9df41e..56dbdbac9f 100644
--- a/lib/erl_interface/vsn.mk
+++ b/lib/erl_interface/vsn.mk
@@ -1,2 +1,2 @@
-EI_VSN = 3.8.1
+EI_VSN = 3.8.2
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..ee9e34d14d 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>
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..b8916c0eb9 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.
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..d5347a43db 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.
diff --git a/lib/et/src/et_wx_viewer.erl b/lib/et/src/et_wx_viewer.erl
index 1e71880b79..0fc10cb37b 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.
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/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 cf0523d230..b513caf95b 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,20 @@
</header>
<p>This document describes the changes made to the EUnit application.</p>
+<section><title>Eunit 2.2.13</title>
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p> Suppress Dialyzer warnings. </p>
+ <p>
+ Own Id: OTP-12862</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
<section><title>Eunit 2.2.12</title>
<section><title>Fixed Bugs and Malfunctions</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/test/Makefile b/lib/eunit/test/Makefile
index 6f166f99aa..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.
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 00cbab5829..dcb7fad699 100644
--- a/lib/eunit/vsn.mk
+++ b/lib/eunit/vsn.mk
@@ -1 +1 @@
-EUNIT_VSN = 2.2.12
+EUNIT_VSN = 2.2.13
diff --git a/lib/gs/Makefile b/lib/gs/Makefile
index b95d435461..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.
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..3ceae98bc5 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>
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/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..0d81ff4d72 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.
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..6622680ee1 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.
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..78930154a9 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.
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_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..594f2bf81c 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.
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 7684dc4a81..9453ca6c6f 100644
--- a/lib/hipe/cerl/erl_bif_types.erl
+++ b/lib/hipe/cerl/erl_bif_types.erl
@@ -115,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).
@@ -755,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]) ->
@@ -1645,6 +1654,89 @@ type(lists, zipwith3, 4, Xs, Opaques) ->
fun ([F,_As,_Bs,_Cs]) -> t_sup(t_list(t_fun_range(F, Opaques)),
t_nil()) end, Opaques);
+%%-- 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 ->
+ 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),
is_integer(A), 0 =< A, A =< 255 ->
@@ -2556,6 +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()];
+%%------- 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 fae12d7421..b037a4360c 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.
@@ -140,6 +140,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_singleton/1,
+ t_is_singleton/2,
t_is_string/1,
t_is_subtype/2,
t_is_tuple/1, t_is_tuple/2,
@@ -152,6 +154,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,
@@ -178,6 +188,7 @@
%% t_maybe_improper_list/2,
t_product/1,
t_reference/0,
+ t_singleton_to_term/2,
t_string/0,
t_struct_from_opaque/2,
t_subst/2,
@@ -208,7 +219,9 @@
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,
+ map_pairwise_merge/3
]).
%%-define(DO_ERL_TYPES_TEST, true).
@@ -341,7 +354,8 @@
-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(tuple(Types, Arity, Qual), #c{tag=?tuple_tag, elements=Types,
@@ -367,7 +381,7 @@
-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
@@ -484,9 +498,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;
@@ -1581,16 +1594,107 @@ 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]);
+ error:{badarg, E} -> error({badarg, E}, [Pairs0,DefK0,DefV0])
+ end,
+ ?map(Pairs, DefK, DefV).
+
+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([{_,?mand,?none}|_]) -> error({badarg, none_in_mand});
+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.
-spec t_is_map(erl_type()) -> boolean().
@@ -1602,9 +1706,242 @@ 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) ->
+ case {As0, Bs0} of
+ {[{K,AMNess,AV}|As], [{K, BMNess,BV}|Bs]} -> ok;
+ {[{K,AMNess,AV}|As], [{BK,_, _ }|_]=Bs} when K < BK ->
+ {BMNess, BV} = {?opt, mapmerge_otherv(K, BDefK, BDefV)};
+ {As, [{K, BMNess,BV}|Bs]} ->
+ {AMNess, AV} = {?opt, mapmerge_otherv(K, ADefK, ADefV)};
+ {[{K,AMNess,AV}|As], []=Bs} ->
+ {BMNess, BV} = {?opt, mapmerge_otherv(K, BDefK, BDefV)}
+ end,
+ MK = K, %% Rename to make clear that we are matching below
+ case F(K, AMNess, AV, BMNess, BV) of
+ false -> map_pairwise_merge(F,As,ADefK,ADefV,Bs,BDefK,BDefV);
+ M={MK,_,_} -> [M|map_pairwise_merge(F,As,ADefK,ADefV,Bs,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) ->
+ case {As0, Bs0} of
+ {[{K,AMNess,AV}|As], [{K, BMNess,BV}|Bs]} -> ok;
+ {[{K,AMNess,AV}|As], [{BK,_, _ }|_]=Bs} when K < BK ->
+ {BMNess, BV} = {?opt, mapmerge_otherv(K, BDefK, BDefV)};
+ {As, [{K, BMNess,BV}|Bs]} ->
+ {AMNess, AV} = {?opt, mapmerge_otherv(K, ADefK, ADefV)};
+ {[{K,AMNess,AV}|As], []=Bs} ->
+ {BMNess, BV} = {?opt, mapmerge_otherv(K, BDefK, BDefV)}
+ end,
+ F(K, AMNess, AV, BMNess, BV,
+ map_pairwise_merge_foldr(F,AccIn,As,ADefK,ADefV,Bs,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
%%
@@ -1862,8 +2199,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)]);
@@ -1898,9 +2236,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);
@@ -1935,7 +2273,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();
@@ -2225,6 +2571,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),
@@ -2343,7 +2696,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 = ?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);
@@ -2380,7 +2733,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
@@ -2462,6 +2815,25 @@ 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),
+ %% If the infinimum of any mandatory values is ?none, the entire map infinimum
+ %% is ?none.
+ case lists:any(fun({_,?mand,?none})->true; ({_,_,_}) -> false end, Pairs) of
+ true -> t_none();
+ false -> t_map(Pairs, t_inf(ADefK, BDefK), t_inf(ADefV, BDefV))
+ end;
t_inf(?matchstate(Pres1, Slots1), ?matchstate(Pres2, Slots2), _Opaques) ->
?matchstate(t_inf(Pres1, Pres2), t_inf(Slots1, Slots2));
t_inf(?nil, ?nil, _Opaques) -> ?nil;
@@ -2924,87 +3296,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 ->
@@ -3012,27 +3330,27 @@ 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.
%%-----------------------------------------------------------------------------
@@ -3044,33 +3362,33 @@ t_subst_aux(T, _VarMap) ->
-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),
@@ -3104,6 +3422,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) ->
@@ -3307,7 +3642,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;
@@ -3460,8 +3795,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(_)) ->
@@ -3592,6 +3969,11 @@ 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) ->
@@ -3622,12 +4004,17 @@ 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,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.
@@ -3679,6 +4066,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.
%%============================================================================
@@ -3753,6 +4150,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).
@@ -3894,8 +4294,23 @@ 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(?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, []};
+ {?any, ?any} -> {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) ++ "}";
@@ -3916,12 +4331,6 @@ 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, ",") ++ "}".
@@ -4010,7 +4419,7 @@ mod_name(Mod, Name) ->
site(), mod_records()) -> erl_type().
t_from_form(Form, ExpTypes, Site, RecDict) ->
- t_from_form(Form, ExpTypes, Site, RecDict, dict:new()).
+ t_from_form(Form, ExpTypes, Site, RecDict, maps:new()).
-spec t_from_form(parse_form(), sets:set(mfa()),
site(), mod_records(), var_table()) -> erl_type().
@@ -4027,7 +4436,7 @@ 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, _} = t_from_form1(Form, ExpTypes, Site, RecDict, maps:new()),
T.
%% REC_TYPE_LIMIT is used for limiting the depth of recursive types.
@@ -4083,7 +4492,7 @@ t_from_form(_, _TypeNames, _ET, _S, _MR, _V, D, L) when D =< 0 ; L =< 0 ->
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
+ case maps:find(Name, V) of
error -> {t_var(Name), L};
{ok, Val} -> {Val, L}
end;
@@ -4149,7 +4558,7 @@ t_from_form({type, _L, 'fun', [{type, _, any}, Range]}, TypeNames,
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),
+ {Ran1, L2} = t_from_form(Range, TypeNames, ET, S, MR, V, D, L1),
{t_fun(Dom1, Ran1), L2};
t_from_form({type, _L, identifier, []}, _TypeNames, _ET, _S, _MR, _V, _D, L) ->
{t_identifier(), L};
@@ -4164,8 +4573,26 @@ t_from_form({type, _L, list, []}, _TypeNames, _ET, _S, _MR, _V, _D, 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, map, any}, TypeNames, ET, S, MR, V, D, L) ->
+ builtin_type(map, t_map(), TypeNames, ET, S, MR, V, D, L);
+t_from_form({type, _L, map, List}, TypeNames, ET, S, MR, V, D, L) ->
+ {Pairs1, L5} =
+ fun PairsFromForm(_, L1) when L1 =< 0 -> {[{?any,?opt,?any}], L1};
+ PairsFromForm([], L1) -> {[], L1};
+ PairsFromForm([{type, _, Oper, [KF, VF]}|T], L1) ->
+ {Key, L2} = t_from_form(KF, TypeNames, ET, S, MR, V, D - 1, L1),
+ {Val, L3} = t_from_form(VF, TypeNames, ET, S, MR, V, D - 1, L2),
+ {Pairs0, L4} = PairsFromForm(T, L3 - 1),
+ case Oper of
+ map_field_assoc -> {[{Key,?opt, Val}|Pairs0], L4};
+ map_field_exact -> {[{Key,?mand,Val}|Pairs0], L4}
+ end
+ end(List, L),
+ try
+ {Pairs, DefK, DefV} = map_from_form(Pairs1, [], [], [], ?none, ?none),
+ {t_map(Pairs, DefK, DefV), L5}
+ catch none -> {t_none(), L5}
+ end;
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) ->
@@ -4284,7 +4711,7 @@ type_from_form(Name, Args, TypeNames, ET, Site0, MR, V, D, L) ->
{ArgTypes, L1} =
list_from_form(Args, TypeNames, ET, Site0, MR, V, D, L),
List = lists:zip(ArgNames, ArgTypes),
- TmpV = dict:from_list(List),
+ TmpV = maps:from_list(List),
Site = TypeName,
t_from_form(Form, NewTypeNames, ET, Site, MR, TmpV, D, L1);
false ->
@@ -4297,7 +4724,7 @@ type_from_form(Name, Args, TypeNames, ET, Site0, MR, V, D, L) ->
{ArgTypes, L1} =
list_from_form(Args, NewTypeNames, ET, Site0, MR, V, D, L),
List = lists:zip(ArgNames, ArgTypes),
- TmpV = dict:from_list(List),
+ TmpV = maps:from_list(List),
Site = TypeName,
{Rep, L2} =
t_from_form(Form, NewTypeNames, ET, Site, MR, TmpV, D, L1),
@@ -4339,7 +4766,7 @@ remote_from_form(RemMod, Name, Args, TypeNames, ET, S, MR, V, D, L) ->
{ArgTypes, L1} = list_from_form(Args, TypeNames,
ET, S, MR, V, D, L),
List = lists:zip(ArgNames, ArgTypes),
- TmpVarDict = dict:from_list(List),
+ TmpVarDict = maps:from_list(List),
Site = RemType,
t_from_form(Form, NewTypeNames, ET,
Site, MR, TmpVarDict, D, L1);
@@ -4353,7 +4780,7 @@ remote_from_form(RemMod, Name, Args, TypeNames, ET, S, MR, V, D, L) ->
{ArgTypes, L1} = list_from_form(Args, NewTypeNames,
ET, S, MR, V, D, L),
List = lists:zip(ArgNames, ArgTypes),
- TmpVarDict = dict:from_list(List),
+ TmpVarDict = maps:from_list(List),
Site = RemType,
{NewRep, L2} =
t_from_form(Form, NewTypeNames, ET, Site, MR,
@@ -4424,7 +4851,7 @@ record_from_form({atom, _, Name}, ModFields, TypeNames, ET, S, MR, V, D, L) ->
{ok, NewFields} ->
{NewFields1, L2} =
fields_from_form(NewFields, NewTypeNames, ET, S1, MR,
- dict:new(), D, L1),
+ maps:new(), D, L1),
Rec = t_tuple(
[t_atom(Name)|[Type
|| {_FieldName, Type} <- NewFields1]]),
@@ -4495,11 +4922,55 @@ list_from_form([H|Tail], TypeNames, ET, S, MR, V, D, L) ->
{T1, L2} = list_from_form(Tail, TypeNames, ET, S, MR, V, D, L1),
{[H1|T1], L2}.
+%% 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).
+
+%% 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().
+
+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)].
+
-spec t_check_record_fields(parse_form(), sets:set(mfa()), site(),
mod_records()) -> ok.
t_check_record_fields(Form, ExpTypes, Site, RecDict) ->
- t_check_record_fields(Form, ExpTypes, Site, RecDict, dict:new()).
+ t_check_record_fields(Form, ExpTypes, Site, RecDict, maps:new()).
-spec t_check_record_fields(parse_form(), sets:set(mfa()), site(),
mod_records(), var_table()) -> ok.
@@ -4627,8 +5098,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()";
@@ -4663,8 +5139,9 @@ t_form_to_string({type, _L, Name, []} = T) ->
D0 = dict:new(),
MR = dict:from_list([{M, D0}]),
S = {type, {M,Name,0}},
+ V = #{},
{T1, _} =
- t_from_form(T, [], sets:new(), S, MR, D0, _Deep=1000, _ALot=100000),
+ t_from_form(T, [], sets:new(), S, MR, V, _Deep=1000, _ALot=100000),
t_to_string(T1)
catch throw:{error, _} -> atom_to_string(Name) ++ "()"
end;
@@ -4789,11 +5266,70 @@ do_opaque(?union(List) = Type, Opaques, Pred) ->
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().
+
+t_singleton_to_term(Type, Opaques) ->
+ do_opaque(Type, Opaques, fun singleton_type_to_term/1).
-map_values(?map(Pairs)) ->
- [V || {_, V} <- Pairs].
+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
@@ -4929,6 +5465,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 b5b13948e9..4ebd4b817c 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,70 @@
</header>
<p>This document describes the changes made to HiPE.</p>
+<section><title>Hipe 3.15</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ Fix pretty printing of Core Maps</p>
+ <p>
+ Literal maps could cause Dialyzer to crash when pretty
+ printing the results.</p>
+ <p>
+ Own Id: OTP-13238</p>
+ </item>
+ <item>
+ <p>
+ Dialyzer warnings removed.</p>
+ <p>
+ Own Id: OTP-13379</p>
+ </item>
+ </list>
+ </section>
+
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ Fix HiPE ErLLVM code generation for pattern matching with
+ UTF binaries.</p>
+ <p>
+ Own Id: OTP-13269</p>
+ </item>
+ <item>
+ <p>
+ Fix various binary construction inconsistencies for hipe
+ compiled code. <list> <item>Passing bad field sizes to
+ binary constructions would throw <c>badarith</c> rather
+ than <c>badarg</c>. Worse, in guards, when the unit size
+ of the field was 1, the exception would leak rather than
+ failing the function clause match.</item> <item>Passing
+ bignums as field sizes to binary constructions would
+ always fail (and always with <c>badarg</c>).</item>
+ <item>A bug in bs_init_bits that cased binary
+ constructions to fail with system_limit if they were at
+ least 1/8th of the actual limit.</item> <item>Compiler
+ crashes when matches against an integer literal whose
+ size fits an unsigned word, but not a signed word or
+ matches against an integer literal that whose size is
+ larger than the largest allowed bignum.</item> <item>Very
+ large binary constructions that should fail with
+ system_limit could instead fail with <c>badarg</c> or
+ even succeed with a faulty result.</item> <item>Add
+ missing check for unit size match when inserting a
+ binary. For example, a faulty expression like
+ <c>&lt;&lt;&lt;&lt;1:7&gt;&gt;/binary&gt;&gt;</c> would
+ succeed.</item> </list></p>
+ <p>
+ Own Id: OTP-13272</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
<section><title>Hipe 3.14</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..fe1675b7dd 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.
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..1b147607c7 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.
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..a5edb10d90 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.
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.hrl b/lib/hipe/icode/hipe_icode.hrl
index 3bb7bae019..999c54732b 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.
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_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..b9969fa69d 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.
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_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..24ffc71237 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.
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_type.erl b/lib/hipe/icode/hipe_icode_type.erl
index fd81915f9f..e3ba00c5e9 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.
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..d2d39fb9e3 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.
diff --git a/lib/hipe/main/Makefile b/lib/hipe/main/Makefile
index d44be2d9fa..6b6cad3ed3 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.
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/misc/Makefile b/lib/hipe/misc/Makefile
index be5c9bc2b6..60d2861c62 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.
diff --git a/lib/hipe/misc/hipe_consttab.erl b/lib/hipe/misc/hipe_consttab.erl
index fd4c2e2f27..f361edc79c 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.
diff --git a/lib/hipe/misc/hipe_consttab.hrl b/lib/hipe/misc/hipe_consttab.hrl
index 8f3bc8e337..d2dbbe509c 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.
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..ec0d01b42e 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.
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..576c089f15 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.
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..2b94f5ecfe 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.
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..e0ff225a25 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.
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..1d627ed024 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.
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..645bc83f9f 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.
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_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..ef866d0843 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.
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..e248457806 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.
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..9fea887ebd 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.
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/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/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..64c5c0a7c9 100644
--- a/lib/hipe/test/hipe_testsuite_driver.erl
+++ b/lib/hipe/test/hipe_testsuite_driver.erl
@@ -107,7 +107,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/tools/Makefile b/lib/hipe/tools/Makefile
index 095a210529..4e3b93d464 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.
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..32135d60dd 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.
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 123792e708..2edfd790ed 100644
--- a/lib/hipe/vsn.mk
+++ b/lib/hipe/vsn.mk
@@ -1 +1 @@
-HIPE_VSN = 3.14
+HIPE_VSN = 3.15
diff --git a/lib/hipe/x86/Makefile b/lib/hipe/x86/Makefile
index ddd704d054..e8a73bbc42 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.
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..4b73aa5509 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>
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 93cbaf4dfe..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.
diff --git a/lib/ic/test/c_client_erl_server_SUITE.erl b/lib/ic/test/c_client_erl_server_SUITE.erl
index 90e5808c0a..7668300b58 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.
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..6953227824 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.
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..2336a8417c 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.
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..ed45b7fd82 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.
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..cc0dbfda74 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.
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..48330b95a8 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.
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 c9fbf49a55..1d436eda2b 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.
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 49dd9953cb..2fa28fc103 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.
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 e85ce788e3..38e936f9bc 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.
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 c6e23a1f8c..61becf74bf 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.
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 86d89e72d5..5eb50202d7 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.
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 a670c5546e..50ea3f43ca 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.
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/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 66c59a0c60..deef010e54 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>
@@ -23,10 +23,6 @@
</legalnotice>
<title>mod_esi</title>
- <prepared>Joakim Greben&ouml;</prepared>
- <docno></docno>
- <date>1997-10-14</date>
- <rev>2.2</rev>
<file>mod_esi.sgml</file>
</header>
<module>mod_esi</module>
@@ -39,6 +35,56 @@
<marker id="deliver"></marker>
</description>
+ <section>
+ <title>DATA TYPES</title>
+ <p>The following data types are used in the functions for mod_esi:</p>
+
+ <taglist>
+ <tag><c>env() = </c></tag>
+ <item> <p><c>{EnvKey()::atom(), Value::term()}</c></p>
+ </item>
+
+ <p>Currently supported key value pairs</p>
+ <taglist>
+
+ <tag><c>{server_software, string()}</c></tag>
+ <item><p>Indicates the inets version.</p></item>
+
+ <tag><c>{server_name, string()}</c></tag>
+ <item><p>The local hostname. </p></item>
+
+ <tag><c>{gateway_interface, string()}</c></tag>
+ <item><p>Legacy string used in CGI, just ignore.</p> </item>
+
+ <tag><c>{server_protocol, string()}</c></tag>
+ <item><p> HTTP version, currently "HTTP/1.1"</p></item>
+
+ <tag>{server_port, integer()}</tag>
+ <item><p>Servers port number.</p></item>
+
+ <tag><c>{request_method, "GET | "PUT" | "DELETE | "POST" | "PATCH"}</c></tag>
+
+ <tag><c>{remote_adress, inet:ip_address()} </c></tag>
+ <item><p>The clients ip address.</p></item>
+
+ <tag><c>{peer_cert, undefined | no_peercert | DER:binary()</c></tag>
+ <item>
+ <p>For TLS connections where client certificates are used this will
+ be an ASN.1 DER-encoded X509-certificate as an Erlang binary.
+ If client certificates are not used the value will be <c>no_peercert</c>,
+ and if TLS is not used (HTTP or connection is lost due to network failure)
+ the value will be <c>undefined</c>.
+ </p></item>
+
+ <tag><c>{script_name, string()}</c></tag>
+ <item><p>Request URI</p></item>
+
+ <tag><c>{http_LowerCaseHTTPHeaderName, string()}</c></tag>
+ <item><p>example: {http_content_type, "text/html"}</p></item>
+ </taglist>
+
+ </taglist>
+
<funcs>
<func>
<name>deliver(SessionID, Data) -> ok | {error, Reason}</name>
@@ -63,11 +109,11 @@
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>
+ </note>
</desc>
</func>
</funcs>
-
+ </section>
<section>
<title>ESI Callback Functions</title>
</section>
@@ -78,9 +124,7 @@
to the server process by calling <c>mod_esi:deliver/2</c>.</fsummary>
<type>
<v>SessionID = term()</v>
- <v>Env = [EnvironmentDirectives] ++ ParsedHeader</v>
- <v>EnvironmentDirectives = {Key,Value}</v>
- <v>Key = query_string | content_length | server_software | gateway_interface | server_protocol | server_port | request_method | remote_addr | script_name</v>
+ <v>Env = env()</v>
<v>Input = string()</v>
</type>
<desc>
@@ -111,9 +155,7 @@
<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 = [EnvironmentDirectives] ++ ParsedHeader</v>
- <v>EnvironmentDirectives = {Key,Value}</v>
- <v>Key = query_string | content_length | server_software | gateway_interface | server_protocol | server_port | request_method | remote_addr | script_name.</v>
+ <v>Env = env()</v>
<v>Input = string()</v>
<v>Response = string()</v>
</type>
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 44e1ea9abe..5cebce18a9 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,92 @@
<file>notes.xml</file>
</header>
- <section><title>Inets 6.1.1</title>
+ <section><title>Inets 6.2.3</title>
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ Put back unused module inets_regexp and remove it in OTP
+ 19 instead as it is an incompatibility, although it is an
+ undocumented module and should not affect other
+ applications.</p>
+ <p>
+ Own Id: OTP-13533</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>Inets 6.2.2</title>
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ Add environment information item peer_cert to mod_esi</p>
+ <p>
+ Own Id: OTP-13510</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>Inets 6.2.1</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ Mend ipv6_host_with_brackets option in httpc</p>
+ <p>
+ Own Id: OTP-13417</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>Inets 6.2</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ The TFTP client/server has been fixed to allow file sizes
+ larger than 32MB block by allowing the 16 bit block
+ counter to wrap. Since this is a commonly accepted
+ behavior we regard it as a bug fix.</p>
+ <p>
+ Own Id: OTP-13403</p>
+ </item>
+ </list>
+ </section>
+
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ Handle HTTP PATCH method in client.</p>
+ <p>
+ Own Id: OTP-13286</p>
+ </item>
+ <item>
+ <p>
+ Expected termination should not be logged as an
+ application error.</p>
+ <p>
+ Own Id: OTP-13389</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>Inets 6.1.1</title>
<section><title>Fixed Bugs and Malfunctions</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..c2ca511795 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.
@@ -2177,7 +2177,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},
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..32db2dfe66 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.
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 85663b5ded..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.
@@ -556,7 +556,7 @@ handle_request(Method, Url,
Request = #request{from = Receiver,
scheme = Scheme,
- address = {Host, Port},
+ address = {host_address(Host, BracketedHost), Port},
path = MaybeEscPath,
pquery = MaybeEscQuery,
method = Method,
@@ -1268,3 +1268,7 @@ child_name(Pid, [_ | Children]) ->
%% d(_, _, _) ->
%% ok.
+host_address(Host, false) ->
+ Host;
+host_address(Host, true) ->
+ string:strip(string:strip(Host, right, $]), left, $[).
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 a7783bc1e9..6a801c973d 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 0222487a4b..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.
@@ -20,7 +20,7 @@
%%
-module(httpd_example).
-export([print/1]).
--export([get/2, post/2, yahoo/2, test1/2, get_bin/2]).
+-export([get/2, post/2, yahoo/2, test1/2, get_bin/2, peer/2]).
-export([newformat/3]).
%% These are used by the inets test-suite
@@ -94,10 +94,26 @@ default(Env,Input) ->
io_lib:format("~p",[httpd:parse_query(Input)]),"\n",
footer()].
+peer(Env, Input) ->
+ Header =
+ case proplists:get_value(peer_cert, Env) of
+ undefined ->
+ header("text/html", "Peer-Cert-Exist:false");
+ _ ->
+ header("text/html", "Peer-Cert-Exist:true")
+ end,
+ [Header,
+ top("Test peer_cert environment option"),
+ "<B>Peer cert:</B> ",
+ io_lib:format("~p",[proplists:get_value(peer_cert, Env)]),"\n",
+ footer()].
+
header() ->
header("text/html").
header(MimeType) ->
"Content-type: " ++ MimeType ++ "\r\n\r\n".
+header(MimeType, Other) ->
+ "Content-type: " ++ MimeType ++ "\r\n" ++ Other ++ "\r\n\r\n".
top(Title) ->
"<HTML>
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 134576059d..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.
@@ -102,8 +102,8 @@ init([Manager, ConfigDB, AcceptTimeout]) ->
KeepAliveTimeOut = 1000 * httpd_util:lookup(ConfigDB, keep_alive_timeout, 150),
case http_transport:negotiate(SocketType, Socket, ?HANDSHAKE_TIMEOUT) of
- {error, _Error} ->
- exit(shutdown); %% Can be 'normal'.
+ {error, Error} ->
+ exit({shutdown, Error}); %% Can be 'normal'.
ok ->
continue_init(Manager, ConfigDB, SocketType, Socket, KeepAliveTimeOut)
end.
@@ -294,7 +294,10 @@ handle_info(Info, #state{mod = ModData} = State) ->
%% cleaning up. When it returns, the gen_server terminates with Reason.
%% The return value is ignored.
%%--------------------------------------------------------------------
-terminate(normal, State) ->
+terminate(Reason, State) when Reason == normal;
+ Reason == shutdown ->
+ do_terminate(State);
+terminate({shutdown,_}, State) ->
do_terminate(State);
terminate(Reason, #state{response_sent = false, mod = ModData} = State) ->
httpd_response:send_status(ModData, 500, none),
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 232bf96bd4..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.
@@ -61,6 +61,19 @@ which_port(#mod{config_db = ConfigDb}) ->
which_peername(#mod{init_data = #init_data{peername = {_, RemoteAddr}}}) ->
RemoteAddr.
+which_peercert(#mod{socket_type = {Type, _}, socket = Socket}) when Type == essl;
+ Type == ssl ->
+ case ssl:peercert(Socket) of
+ {ok, Cert} ->
+ Cert;
+ {error, no_peercert} ->
+ no_peercert;
+ _ ->
+ undefined
+ end;
+which_peercert(_) -> %% Not an ssl connection
+ undefined.
+
which_resolve(#mod{init_data = #init_data{resolve = Resolve}}) ->
Resolve.
@@ -78,6 +91,7 @@ create_basic_elements(esi, ModData) ->
{server_port, which_port(ModData)},
{request_method, which_method(ModData)},
{remote_addr, which_peername(ModData)},
+ {peer_cert, which_peercert(ModData)},
{script_name, which_request_uri(ModData)}];
create_basic_elements(cgi, ModData) ->
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 0a4b625b6a..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,8 +48,7 @@ MODULES = \
inets_app \
inets_sup \
inets_trace \
- inets_lib \
- inets_time_compat
+ 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 2f213794a3..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,7 +28,6 @@
inets_service,
inets_trace,
inets_lib,
- inets_time_compat,
%% 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_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 79203fd1a4..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-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.
@@ -657,22 +657,11 @@ common_read(Config, Callback, Req, _LocalAccess, ExpectedBlockNo, ActualBlockNo,
do_common_read(Config, Callback, Req, LocalAccess, BlockNo, Data, Prepared)
when is_binary(Data), is_record(Prepared, prepared) ->
- NextBlockNo = BlockNo + 1,
- case NextBlockNo =< 65535 of
- true ->
- Reply = #tftp_msg_data{block_no = NextBlockNo, data = Data},
- {Config2, Callback2, TransferRes} =
- transfer(Config, Callback, Req, Reply, LocalAccess, NextBlockNo, Prepared),
- ?MODULE:common_loop(Config2, Callback2, Req, TransferRes, LocalAccess, NextBlockNo);
- false ->
- Code = badblk,
- Text = "Too big transfer ID = " ++
- integer_to_list(NextBlockNo) ++ " > 65535",
- {undefined, Error} =
- callback({abort, {Code, Text}}, Config, Callback, Req),
- send_msg(Config, Req, Error),
- terminate(Config, Req, ?ERROR(read, Code, Text, Req#tftp_msg_req.filename))
- end.
+ NextBlockNo = (BlockNo + 1) rem 65536,
+ Reply = #tftp_msg_data{block_no = NextBlockNo, data = Data},
+ {Config2, Callback2, TransferRes} =
+ transfer(Config, Callback, Req, Reply, LocalAccess, NextBlockNo, Prepared),
+ ?MODULE:common_loop(Config2, Callback2, Req, TransferRes, LocalAccess, NextBlockNo).
-spec common_write(#config{}, #callback{}, _, 'write', integer(), integer(), _, #prepared{}) -> no_return().
@@ -716,21 +705,10 @@ common_write(Config, Callback, Req, _, ExpectedBlockNo, ActualBlockNo, Data, Pre
common_ack(Config, Callback, Req, LocalAccess, BlockNo, Prepared)
when is_record(Prepared, prepared) ->
Reply = #tftp_msg_ack{block_no = BlockNo},
- NextBlockNo = BlockNo + 1,
+ NextBlockNo = (BlockNo + 1) rem 65536,
{Config2, Callback2, TransferRes} =
transfer(Config, Callback, Req, Reply, LocalAccess, NextBlockNo, Prepared),
- case NextBlockNo =< 65535 of
- true ->
- ?MODULE:common_loop(Config2, Callback2, Req, TransferRes, LocalAccess, NextBlockNo);
- false ->
- Code = badblk,
- Text = "Too big transfer ID = " ++
- integer_to_list(NextBlockNo) ++ " > 65535",
- {undefined, Error} =
- callback({abort, {Code, Text}}, Config, Callback2, Req),
- send_msg(Config, Req, Error),
- terminate(Config, Req, ?ERROR(read, Code, Text, Req#tftp_msg_req.filename))
- end.
+ ?MODULE:common_loop(Config2, Callback2, Req, TransferRes, LocalAccess, NextBlockNo).
pre_terminate(Config, Req, Result) ->
if
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 67c979bd59..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.
@@ -151,7 +151,6 @@ MODULES = \
inets_test_lib \
erl_make_certs \
ftp_SUITE \
- ftp_suite_lib \
ftp_format_SUITE \
http_format_SUITE \
httpc_SUITE \
@@ -169,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 \
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..08295d4e3c 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,8 +42,10 @@
-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 -----------------------------------
@@ -90,7 +92,14 @@ ftp_tests()->
recv_chunk,
type,
quote,
- ip_v6_disabled
+ ip_v6_disabled,
+ progress_report_send,
+ progress_report_recv,
+ not_owner,
+ unexpected_call,
+ unexpected_cast,
+ unexpected_bang,
+ clean_shutdown
].
%%--------------------------------------------------------------------
@@ -117,9 +126,9 @@ ftp_tests()->
-define(default_ftp_servers,
[{"vsftpd",
fun(__CONF__) ->
- DataDir = ?config(data_dir,__CONF__),
+ 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"),
" -oftpd_banner=erlang_otp_testing",
@@ -145,7 +154,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 +170,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,8 +190,16 @@ 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)),
+
+init_per_testcase(Case, Config) when (Case =:= progress_report_send) orelse
+ (Case =:= progress_report_recv) ->
+ common_init_per_testcase(Case, [{progress, {?MODULE, progress, #progress{}}} | Config]);
+
+init_per_testcase(Case, Config) ->
+ common_init_per_testcase(Case, Config).
+
+common_init_per_testcase(Case, Config0) ->
+ Group = proplists:get_value(name,proplists:get_value(tc_group_properties,Config0)),
try ?MODULE:Case(doc) of
Msg -> ct:comment(Msg)
catch
@@ -203,9 +220,9 @@ init_per_testcase(Case, Config0) ->
user -> Config;
bad_user -> 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.
@@ -213,10 +230,10 @@ init_per_testcase(Case, Config0) ->
end_per_testcase(user, _Config) -> ok;
end_per_testcase(bad_user, _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,38 +245,43 @@ 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),
@@ -267,12 +289,12 @@ cd(Config0) ->
{error, epath} = ftp:cd(Pid, ?BAD_DIR).
%%-------------------------------------------------------------------------
-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 +302,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 +323,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,13 +345,14 @@ 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),
@@ -338,13 +363,14 @@ rename(Config0) ->
%%-------------------------------------------------------------------------
-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),
@@ -356,14 +382,15 @@ chk_file([SrcDir,File],Contents,Config),
chk_file(File, Contents, Config).
%%-------------------------------------------------------------------------
-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)),
@@ -372,23 +399,25 @@ send_3(Config0) ->
chk_file([Dir,RemoteFile], Contents, Config).
%%-------------------------------------------------------------------------
-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).
%%-------------------------------------------------------------------------
-send_chunk(doc) -> ["Send a binary using chunks."];
+send_chunk() ->
+ [{doc, "Send a binary using chunks."}].
send_chunk(Config0) ->
Contents = <<"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:cd(Pid, "incoming"),
@@ -399,63 +428,69 @@ send_chunk(Config0) ->
chk_file(File, <<Contents/binary,Contents/binary>>, Config).
%%-------------------------------------------------------------------------
-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).
%%-------------------------------------------------------------------------
-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).
%%-------------------------------------------------------------------------
-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).
%%-------------------------------------------------------------------------
-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).
%%-------------------------------------------------------------------------
-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 +500,58 @@ 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).
%%-------------------------------------------------------------------------
-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).
%%-------------------------------------------------------------------------
-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 +561,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 +581,6 @@ quote(Config) ->
%% = ftp:quote(Pid, "list"),
ok.
-
-%%-------------------------------------------------------------------------
-ip_v6_disabled(doc) -> ["Test ipv4 command PORT"];
-ip_v6_disabled(_Config) ->
- %%% FIXME!!!! What is this???
- ok.%% send(Config).
-
-%%-------------------------------------------------------------------------
-%% 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).
-
-%% 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.
-
-
%%--------------------------------------------------------------------
%% Internal functions -----------------------------------------------
%%--------------------------------------------------------------------
@@ -676,13 +674,114 @@ chk_no_dir(PathList, Config) ->
ct:fail("Unexpected error for ~p: ~p",[Path,Error])
end.
+%%-------------------------------------------------------------------------
+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.
+%%-------------------------------------------------------------------------
+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.
+
+%%-------------------------------------------------------------------------
+
+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),
+ OtherPid = spawn_link(?MODULE, not_owner, [Pid, self()]),
+
+ 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).
+%%-------------------------------------------------------------------------
+
+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) ->
+ PrivDir = proplists:get_value(priv_dir, Config),
+ LogFile = filename:join([PrivDir,"ticket_6035.log"]),
+ Host = proplists:get_value(ftpd_host,Config),
+ try
+ Pid = spawn(?MODULE, open_wait_6035, [Host, self()]),
+ error_logger:logfile({open, LogFile}),
+ true = kill_ftp_proc_6035(Pid, LogFile),
+ error_logger:logfile(close)
+ catch
+ throw:{error, not_found} ->
+ {skip, "No available FTP servers"}
+ end.
%%--------------------------------------------------------------------
+%% Internal functions
%%--------------------------------------------------------------------
-%% find a suitable ftpd
-%%
+
find_executable(Config) ->
- FTPservers = case ?config(ftpservers,Config) of
+ FTPservers = case proplists:get_value(ftpservers,Config) of
undefined -> ?default_ftp_servers;
L -> L
end,
@@ -694,11 +793,9 @@ find_executable(Config) ->
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),
+ {Name,StartCmd,_ChkUp,_StopCommand,ConfigRewrite,Host,Port} = proplists:get_value(ftpd_data, Config),
case StartCmd(Config) of
{ok,StartResult} ->
[{ftpd_host,Host},
@@ -709,38 +806,31 @@ start_ftpd(Config) ->
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 +843,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 +876,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 +893,115 @@ rm(F, Pfx) ->
ok
end.
-%%--------------------------------------------------------------------
-%%
+not_owner(FtpPid, Pid) ->
+ {error, not_connection_owner} = ftp:pwd(FtpPid),
+ ftp:close(FtpPid),
+ ct:sleep(100),
+ Pid ! {self(), ok}.
-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).
+
+
+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;
+ _ ->
+ ct: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.
+
+kill_ftp_proc_6035(Pid, LogFile) ->
+ receive
+ open ->
+ exit(Pid, shutdown),
+ kill_ftp_proc_6035(Pid, LogFile);
+ {open_failed, Reason} ->
+ exit({skip, {failed_openening_server_connection, Reason}})
+ after
+ 5000 ->
+ is_error_report_6035(LogFile)
+ end.
+
+open_wait_6035({_Tag, FtpServer}, From) ->
+ case ftp:open(FtpServer, [{timeout, timer:seconds(15)}]) of
+ {ok, Pid} ->
+ _LoginResult = ftp:user(Pid,"anonymous","kldjf"),
+ From ! open,
+ receive
+ dummy ->
+ ok
+ after
+ 10000 ->
+ ok
+ end,
+ ok;
+ {error, Reason} ->
+ From ! {open_failed, {Reason, FtpServer}},
+ ok
+ end.
+
+is_error_report_6035(LogFile) ->
+ Res =
+ case file:read_file(LogFile) of
+ {ok, Bin} ->
+ Txt = binary_to_list(Bin),
+ read_log_6035(Txt);
+ _ ->
+ false
+ end,
+ %% file:delete(LogFile),
+ Res.
+
+read_log_6035("=ERROR REPORT===="++_Rest) ->
+ true;
+read_log_6035([_|T]) ->
+ read_log_6035(T);
+read_log_6035([]) ->
+ false.
diff --git a/lib/inets/test/ftp_format_SUITE.erl b/lib/inets/test/ftp_format_SUITE.erl
index 9b71d2944b..2c17e2657c 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.
@@ -24,18 +24,13 @@
-include_lib("common_test/include/ct.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].
@@ -60,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"],
@@ -84,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]],
@@ -100,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"],
@@ -113,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]],
@@ -126,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"],
@@ -138,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 =
@@ -153,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"],
@@ -166,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"
@@ -247,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
@@ -289,11 +260,9 @@ ftp_other_status_codes(Config) when is_list(Config) ->
{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"],
@@ -306,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),
@@ -346,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 2f9170fa0c..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("common_test/include/ct.hrl").
--include_lib("common_test/include/ct.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..42772923e4 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",_,_,_,_) ->
@@ -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} ->
@@ -2153,7 +2188,7 @@ 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).
diff --git a/lib/inets/test/httpc_cookie_SUITE.erl b/lib/inets/test/httpc_cookie_SUITE.erl
index 2efca9a5c8..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.
@@ -23,14 +23,8 @@
-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 1d8a603981..f5167116ce 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() ->
[
@@ -149,8 +151,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),
@@ -218,22 +220,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.
@@ -271,7 +273,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 ->
@@ -282,11 +285,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) ->
@@ -300,10 +305,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}]).
@@ -312,13 +317,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"},
@@ -339,8 +344,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,
@@ -380,15 +385,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,
@@ -550,12 +555,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 ->
@@ -576,11 +581,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
@@ -691,23 +696,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"}].
@@ -755,13 +760,17 @@ esi(Config) when is_list(Config) ->
%% Check "ErlScriptNoCache" directive (default: false)
ok = http_status("GET /cgi-bin/erl/httpd_example:get ",
Config, [{statuscode, 200},
- {no_header, "cache-control"}]).
+ {no_header, "cache-control"}]),
+ ok = http_status("GET /cgi-bin/erl/httpd_example:peer ",
+ Config, [{statuscode, 200},
+ {header, "peer-cert-exist", peer(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() ->
@@ -842,7 +851,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, _} ->
@@ -854,9 +863,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() ->
@@ -916,52 +925,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},
@@ -971,10 +980,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},
@@ -983,10 +992,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}]).
@@ -997,12 +1006,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"},
@@ -1015,12 +1024,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"},
@@ -1032,24 +1041,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) ->
@@ -1061,15 +1070,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"]),
@@ -1167,7 +1176,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),
@@ -1196,11 +1205,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),
@@ -1231,11 +1240,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)),
@@ -1263,11 +1272,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),
@@ -1292,15 +1301,15 @@ non_disturbing(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),
@@ -1310,7 +1319,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}]),
@@ -1323,7 +1332,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}]).
@@ -1402,7 +1411,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,
@@ -1453,54 +1462,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"]},
@@ -1515,7 +1524,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,
@@ -1689,35 +1698,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}]).
@@ -1769,11 +1778,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
@@ -2065,3 +2074,11 @@ response_default_headers() ->
{"X-Frame-Options", "SAMEORIGIN"},
%% Override built-in default
{"Date", "Override-date"}].
+
+peer(Config) ->
+ case proplists:get_value(type, Config) of
+ ssl ->
+ "true";
+ _ ->
+ "false"
+ 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 fef693d818..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.
@@ -63,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;
@@ -86,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 016989a22e..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.
@@ -86,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) ->
@@ -743,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 ++
@@ -771,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",
@@ -827,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) ->
@@ -1018,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.
@@ -1045,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.
@@ -1130,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 f972f0f435..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.
@@ -286,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 ->
@@ -314,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.
@@ -346,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"
@@ -499,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
@@ -581,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];
@@ -613,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.
@@ -641,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.
%%-------------------------------------------------------------------------
@@ -651,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.
%%-------------------------------------------------------------------------
@@ -660,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.
%%-------------------------------------------------------------------------
@@ -672,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.
%%-------------------------------------------------------------------------
@@ -681,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),
@@ -695,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) ->
@@ -704,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) ->
@@ -713,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) ->
@@ -722,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.
%%-------------------------------------------------------------------------
@@ -732,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.
%%-------------------------------------------------------------------------
@@ -742,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) ->
@@ -751,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) ->
@@ -759,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.
%%-------------------------------------------------------------------------
@@ -769,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.
%%-------------------------------------------------------------------------
@@ -779,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.
@@ -791,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.
@@ -802,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.
%%-------------------------------------------------------------------------
@@ -818,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) ->
@@ -829,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) ->
@@ -840,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) ->
@@ -851,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) ->
@@ -862,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.
%%-------------------------------------------------------------------------
@@ -877,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.
%%-------------------------------------------------------------------------
@@ -893,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.
@@ -910,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.
%%-------------------------------------------------------------------------
@@ -927,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.
%%-------------------------------------------------------------------------
@@ -939,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) ->
@@ -949,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) ->
@@ -958,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) ->
@@ -967,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.
%%-------------------------------------------------------------------------
@@ -1002,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.
%%-------------------------------------------------------------------------
@@ -1043,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.
@@ -1060,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.
@@ -1075,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.
@@ -1096,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.
@@ -1112,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),
@@ -1134,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.
@@ -1151,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.
@@ -1168,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.
@@ -1185,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.
@@ -1202,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.
@@ -1219,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.
@@ -1236,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.
@@ -1253,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.
@@ -1269,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.
@@ -1293,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.
@@ -1320,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.
@@ -1337,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.
@@ -1372,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.
@@ -1391,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.
@@ -1410,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.
@@ -1429,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.
@@ -1448,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.
@@ -1468,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.
@@ -1490,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,
@@ -1513,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,
@@ -1539,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,
@@ -1562,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.
@@ -1579,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.
@@ -1597,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.
@@ -1613,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.
@@ -1664,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.
@@ -1701,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) ->
@@ -1710,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) ->
@@ -1720,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) ->
@@ -1729,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) ->
@@ -1738,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) ->
@@ -1749,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) ->
@@ -1758,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.
%%-------------------------------------------------------------------------
@@ -1768,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},
@@ -1791,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"}]),
@@ -1804,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"}]),
@@ -1817,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 "
@@ -1832,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, _} ->
@@ -1846,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.
@@ -1875,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]),
@@ -1910,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",
@@ -1927,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},
@@ -1939,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"]),
@@ -1957,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",
@@ -1977,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},
@@ -1989,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},
@@ -2002,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"}]),
@@ -2030,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]),
@@ -2424,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 d29d210d7d..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.
@@ -76,7 +76,7 @@ suite() -> [{ct_hooks,[ts_install_cth]}].
all() ->
[simple, extra, reuse_connection, resend_client,
- resend_server].
+ resend_server, large_file].
groups() ->
[].
@@ -902,6 +902,41 @@ reuse_connection(Config) when is_list(Config) ->
ok.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Large file: transfer > 65535 blocks
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+large_file(doc) ->
+ ["Start the daemon and test transfer of files greater than 32M."];
+large_file(suite) ->
+ [];
+large_file(Config) when is_list(Config) ->
+ ?VERIFY(ok, application:start(inets)),
+
+ {Port, DaemonPid} = ?IGNORE(?START_DAEMON(0, [{debug, brief}])),
+
+ %% Read fail
+ RemoteFilename = "tftp_temporary_large_file_remote_test_file.txt",
+ LocalFilename = "tftp_temporary_large_file_local_test_file.txt",
+
+ {ok, FH} = file:open(LocalFilename, [write,exclusive]),
+ {ok, Size} = file:position(FH, {eof, 2*512*65535}),
+ ok = file:truncate(FH),
+ ?IGNORE(file:close(FH)),
+
+ %% Write and read
+ ?VERIFY({ok, Size}, tftp:write_file(RemoteFilename, LocalFilename, [{port, Port}])),
+ ?IGNORE(file:delete(LocalFilename)),
+ ?VERIFY({ok, Size}, tftp:read_file(RemoteFilename, LocalFilename, [{port, Port}])),
+
+ %% Cleanup
+ unlink(DaemonPid),
+ exit(DaemonPid, kill),
+ ?VERIFY(ok, file:delete(LocalFilename)),
+ ?VERIFY(ok, file:delete(RemoteFilename)),
+ ?VERIFY(ok, application:stop(inets)),
+ ok.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Goodies
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
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 ee5f41aaec..543e0d44fd 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.1.1
+INETS_VSN = 6.3
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..c1b7c027ed 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>
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 5c4618dcde..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.
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 9910334749..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.
@@ -31,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,
@@ -123,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) -> [];
@@ -144,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) -> [];
@@ -759,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, _}} ->
@@ -778,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, _}} ->
@@ -795,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,
@@ -822,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/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 d6d6167923..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 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 819da544c3..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,238 +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>
+ <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>
@@ -312,33 +314,36 @@
</datatype>
<datatype>
<name name="prepared_code"/>
- <desc>An opaque term holding prepared code.</desc>
+ <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
@@ -351,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
@@ -365,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
@@ -437,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.
@@ -616,92 +633,94 @@ ok = code:finish_loading(Prepared),
</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
@@ -715,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>
@@ -726,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>
@@ -737,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>
@@ -791,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>
@@ -799,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>
@@ -810,43 +830,43 @@ 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="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.
@@ -859,32 +879,39 @@ rpc:call(Node, code, load_binary, [Module, Filename, Binary]),
<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..8bd94892ad 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,256 @@ 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, 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, ip_address()}</c></tag>
+ <item><p>Same as <c>{ip, 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, 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>
-
+ <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>{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>
+ </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>
+ <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, 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>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, ip_address()}</c></tag>
+ <item><p>Same as <c>{ip, 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>
+ <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>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>
+ <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="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>
- <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>
- </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 +346,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 +392,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 +401,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 +447,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..3db291600d 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,139 @@
<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>
+ <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>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 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>
-
- <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>
-
+ <item><p>Sets up the socket for IPv4.</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>
- <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>
+ <fsummary>Receive a packet from a passive 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 an IP 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..c587e39345 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,80 @@
<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>
- <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
+ <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 +115,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 +152,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..bca04aa244 100644
--- a/lib/kernel/doc/src/inet.xml
+++ b/lib/kernel/doc/src/inet.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1997</year><year>2015</year>
+ <year>1997</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -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"/>
@@ -110,17 +119,20 @@ fe80::204:acff:fe17:bf38
</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 +143,415 @@ 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>
</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"><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 <seealso marker="#type-ip_address">ip_address()</seealso> and returns an IPv4 or IPv6 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>.
+ 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 +559,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 +860,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 +961,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,148 +1123,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 b625ddba5d..d0540768de 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,100 @@
</header>
<p>This document describes the changes made to the Kernel application.</p>
+<section><title>Kernel 4.2</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p><c>code:load_abs([10100])</c> would bring down the
+ entire runtime system and create a crash dump. Corrected
+ to generate an error exception in the calling
+ process.</p>
+ <p>Also corrected specs for code loading functions and
+ added more information in the documentation about the
+ error reasons returned by code-loading functions.</p>
+ <p>
+ Own Id: OTP-9375</p>
+ </item>
+ <item>
+ <p>
+ <seealso
+ marker="kernel:gen_tcp#accept/2"><c>gen_tcp:accept/2</c></seealso>
+ was not <seealso
+ marker="erts:time_correction#Time_Warp_Safe_Code">time
+ warp safe</seealso>. This since it used the same time as
+ returned by <seealso
+ marker="erts:erlang#now/0"><c>erlang:now/0</c></seealso>
+ when calculating timeout. This has now been fixed.</p>
+ <p>
+ Own Id: OTP-13254 Aux Id: OTP-11997, OTP-13222 </p>
+ </item>
+ <item>
+ <p> Correct the contract for <c>inet:getifaddrs/1</c>.
+ </p>
+ <p>
+ Own Id: OTP-13335 Aux Id: ERL-95 </p>
+ </item>
+ </list>
+ </section>
+
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ Time warp safety improvements.</p>
+ <p>
+ Introduced the options <c>monotonic_timestamp</c>, and
+ <c>strict_monotonic_timestamp</c> to the trace,
+ sequential trace, and system profile functionality. This
+ since the already existing <c>timestamp</c> option is not
+ time warp safe.</p>
+ <p>
+ Introduced the option <c>safe_fixed_monotonic_time</c> to
+ <c>ets:info/2</c> and <c>dets:info/2</c>. This since the
+ already existing <c>safe_fixed</c> option is not time
+ warp safe.</p>
+ <p>
+ Own Id: OTP-13222 Aux Id: OTP-11997 </p>
+ </item>
+ <item>
+ <p>
+ Add validation callback for heart</p>
+ <p>
+ The erlang heart process may now have a validation
+ callback installed. The validation callback will be
+ executed, if present, before any heartbeat to heart port
+ program. If the validation fails, or stalls, no heartbeat
+ will be sent and the node will go down.</p>
+ <p>
+ With the option <c>'check_schedulers'</c> heart executes
+ a responsiveness check of the schedulers before a
+ heartbeat is sent to the port program. If the
+ responsiveness check fails, the heartbeat will not be
+ performed (as intended).</p>
+ <p>
+ Own Id: OTP-13250</p>
+ </item>
+ <item>
+ <p>
+ Clarify documentation of <c>net_kernel:allow/1</c></p>
+ <p>
+ Own Id: OTP-13299</p>
+ </item>
+ <item>
+ <p>
+ EPMD supports both IPv4 and IPv6</p>
+ <p>
+ Also affects oldest supported windows version.</p>
+ <p>
+ Own Id: OTP-13364</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
<section><title>Kernel 4.1.1</title>
<section><title>Fixed Bugs and Malfunctions</title>
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 165160a909..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,98 +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,
@@ -128,88 +137,93 @@ 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>
@@ -227,7 +241,7 @@ format_utc_timestamp() ->
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 till be converted to the resolution passed as an argument.</p>
+ 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>
@@ -236,41 +250,43 @@ format_utc_timestamp() ->
</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/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/examples/uds_dist/c_src/uds_drv.c b/lib/kernel/examples/uds_dist/c_src/uds_drv.c
index e32ad69adf..8c028ba910 100644
--- a/lib/kernel/examples/uds_dist/c_src/uds_drv.c
+++ b/lib/kernel/examples/uds_dist/c_src/uds_drv.c
@@ -957,28 +957,24 @@ static void put_packet_length(char *b, int len)
/*
** Malloc wrappers
-** Note!
-** The function erl_exit is actually not a pert of the
-** driver interface, but it is very nice to use if one wants to halt
-** with a core and an erlang crash dump.
*/
static void *my_malloc(size_t size)
{
- void erl_exit(int, char *, ...);
void *ptr;
if ((ptr = driver_alloc(size)) == NULL) {
- erl_exit(1,"Could not allocate %lu bytes of memory",(unsigned long) size);
+ fprintf(stderr, "Could not allocate %lu bytes of memory",(unsigned long) size);
+ abort();
}
return ptr;
}
static void *my_realloc(void *ptr, size_t size)
{
- void erl_exit(int, char *, ...);
void *nptr;
if ((nptr = driver_realloc(ptr, size)) == NULL) {
- erl_exit(1,"Could not reallocate %lu bytes of memory",(unsigned long) size);
+ fprintf(stderr, "Could not reallocate %lu bytes of memory",(unsigned long) size);
+ abort();
}
return nptr;
}
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/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..8bf02afec9 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.
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 0882cb170c..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.
@@ -258,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
diff --git a/lib/kernel/src/code_server.erl b/lib/kernel/src/code_server.erl
index 6262407354..6174136507 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.
@@ -32,7 +32,12 @@
-import(lists, [foreach/2]).
--type on_load_item() :: {reference(),module(),file:name_all(),[pid()]}.
+-type on_load_action() ::
+ fun((term(), state()) -> {'reply',term(),state()} |
+ {'noreply',state()}).
+
+-type on_load_item() :: {{pid(),reference()},module(),
+ [{pid(),on_load_action()}]}.
-record(state, {supervisor :: pid(),
root :: file:name_all(),
@@ -67,14 +72,16 @@ init(Ref, Parent, [Root,Mode]) ->
%% Pre-loaded modules are always sticky.
ets:insert(Db, [{M,preloaded},{{sticky,M},true}])
end, erlang:pre_loaded()),
- ets:insert(Db, init:fetch_loaded()),
+ 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;
_ ->
@@ -109,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);
@@ -140,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);
@@ -153,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)
@@ -223,90 +230,90 @@ 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) when is_atom(Mod) ->
- load_file(Mod, Caller, St);
+handle_call({load_file,Mod}, From, St) when is_atom(Mod) ->
+ load_file(Mod, From, St);
-handle_call({add_path,Where,Dir0}, {_From,_Tag},
+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},
+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,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,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,S#state{path=Path}};
-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) when is_atom(Mod) ->
- 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, 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, S),
{reply,Status,S};
-handle_call({ensure_loaded,Mod}, Caller, St) when is_atom(Mod) ->
+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 ->
- load_file(Mod, Caller, St);
+ ensure_loaded(Mod, From, St);
false ->
{reply,{error,embedded},St}
end;
-handle_call({delete,Mod}, {_From,_Tag}, St) when is_atom(Mod) ->
+handle_call({delete,Mod}, _From, St) when is_atom(Mod) ->
case catch erlang:delete_module(Mod) of
true ->
ets:delete(St#state.moddb, Mod),
@@ -315,48 +322,50 @@ handle_call({delete,Mod}, {_From,_Tag}, St) when is_atom(Mod) ->
{reply,false,St}
end;
-handle_call({purge,Mod}, {_From,_Tag}, St) when is_atom(Mod) ->
+handle_call({purge,Mod}, _From, St) when is_atom(Mod) ->
{reply,do_purge(Mod),St};
-handle_call({soft_purge,Mod}, {_From,_Tag}, St) when is_atom(Mod) ->
+handle_call({soft_purge,Mod}, _From, St) when is_atom(Mod) ->
{reply,do_soft_purge(Mod),St};
-handle_call({is_loaded,Mod}, {_From,_Tag}, St) when is_atom(Mod) ->
+handle_call({is_loaded,Mod}, _From, St) when is_atom(Mod) ->
{reply,is_loaded(Mod, St#state.moddb),St};
-handle_call(all_loaded, {_From,_Tag}, S) ->
+handle_call(all_loaded, _From, S) ->
Db = S#state.moddb,
{reply,all_loaded(Db),S};
-handle_call({get_object_code,Mod}, {_From,_Tag}, St) when is_atom(Mod) ->
+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({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(get_mode, {_From,_Tag}, S=#state{mode=Mode}) ->
+handle_call(get_mode, _From, S=#state{mode=Mode}) ->
{reply, Mode, S};
-handle_call({finish_loading,Prepared,EnsureLoaded}, {_,_}, S) ->
+handle_call({finish_loading,Prepared,EnsureLoaded}, _From, S) ->
{reply,finish_loading(Prepared, EnsureLoaded, S),S};
-handle_call(Other,{_From,_Tag}, S) ->
+handle_call(Other,_From, S) ->
error_msg(" ** Codeserver*** ignoring ~w~n ",[Other]),
{noreply,S}.
@@ -369,7 +378,7 @@ handle_call(Other,{_From,_Tag}, S) ->
%%
make_path(BundleDir, Bundles0) ->
Bundles = choose_bundles(Bundles0),
- make_path(BundleDir, Bundles, [], []).
+ make_path(BundleDir, Bundles, []).
choose_bundles(Bundles) ->
ArchiveExt = archive_extension(),
@@ -379,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}
@@ -455,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.
%%
@@ -607,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(),
@@ -628,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] ->
@@ -664,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;
_ ->
@@ -766,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.
@@ -779,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)
@@ -925,22 +930,22 @@ 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;
- _ ->
- Dir
- end.
+ filename:join(del_ebin_1(filename:split(Dir))).
+
+del_ebin_1([Parent,App,"ebin"]) ->
+ Ext = archive_extension(),
+ case filename:basename(Parent, Ext) of
+ Parent ->
+ %% Plain directory.
+ [Parent,App];
+ Archive ->
+ %% Archive.
+ [Archive]
+ end;
+del_ebin_1([H|T]) ->
+ [H|del_ebin_1(T)];
+del_ebin_1([]) ->
+ [].
replace_name(Dir, Db) ->
case get_name(Dir) of
@@ -1056,14 +1061,14 @@ add_paths(Where,[Dir|Tail],Path,NameDb) ->
add_paths(_,_,Path,_) ->
{ok,Path}.
-do_load_binary(Module, File, Binary, Caller, St) ->
+do_load_binary(Module, File, Binary, From, St) ->
case modp(File) andalso is_binary(Binary) of
true ->
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.
@@ -1072,63 +1077,61 @@ 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(File, Mod, Bin, {From,_}=Caller, St0) ->
- case pending_on_load(Mod, From, St0) of
- no ->
- try_load_module_1(File, Mod, 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 hipe_unified_loader:load_native_code(Mod, Bin, Architecture) of
{module,Mod} = Module ->
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, St),
- {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.
+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
@@ -1153,18 +1156,29 @@ int_list([H|T]) when is_integer(H) -> int_list(T);
int_list([_|_]) -> false;
int_list([]) -> true.
-load_file(Mod, {From,_}=Caller, St0) ->
- 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}=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_1(File, Mod, Binary, Caller, St)
+ try_load_module_1(File, Mod, Binary, From, St)
end.
mod_to_bin([Dir|Tail], Mod) ->
@@ -1172,8 +1186,13 @@ mod_to_bin([Dir|Tail], Mod) ->
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
@@ -1234,6 +1253,11 @@ do_purge(Mod) ->
do_soft_purge(Mod) ->
erts_code_purger:soft_purge(Mod).
+is_dir(Path) ->
+ case erl_prim_loader:read_file_info(Path) of
+ {ok,#file_info{type=directory}} -> true;
+ _ -> false
+ end.
%%%
%%% Loading of multiple modules in parallel.
@@ -1297,59 +1321,78 @@ run([F|Fs], Data0) ->
%% 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.
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 55ce9a7e64..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.
@@ -32,7 +32,7 @@
%% External exports
-export([start/0, start_link/0, stop/0, port_please/2,
port_please/3, names/0, names/1,
- register_node/2, open/0, open/1, open/2]).
+ register_node/2, register_node/3, open/0, open/1, open/2]).
%% gen_server callbacks
-export([init/1, handle_call/3, handle_cast/2, handle_info/2,
@@ -102,7 +102,9 @@ names(EpmdAddr) ->
register_node(Name, PortNo) ->
- gen_server:call(erl_epmd, {register, Name, PortNo}, infinity).
+ register_node(Name, PortNo, inet).
+register_node(Name, PortNo, Family) ->
+ gen_server:call(erl_epmd, {register, Name, PortNo, Family}, infinity).
%%%----------------------------------------------------------------------
%%% Callback functions from gen_server
@@ -120,10 +122,10 @@ init(_) ->
-spec handle_call(calls(), term(), state()) ->
{'reply', term(), state()} | {'stop', 'shutdown', 'ok', state()}.
-handle_call({register, Name, PortNo}, _From, State) ->
+handle_call({register, Name, PortNo, Family}, _From, State) ->
case State#state.socket of
P when P < 0 ->
- case do_register_node(Name, PortNo) of
+ case do_register_node(Name, PortNo, Family) of
{alive, Socket, Creation} ->
S = State#state{socket = Socket,
port_no = PortNo,
@@ -206,8 +208,12 @@ open({A,B,C,D,E,F,G,H}=EpmdAddr, Timeout) when ?ip6(A,B,C,D,E,F,G,H) ->
close(Socket) ->
gen_tcp:close(Socket).
-do_register_node(NodeName, TcpPort) ->
- case open() of
+do_register_node(NodeName, TcpPort, Family) ->
+ Localhost = case Family of
+ inet -> open({127,0,0,1});
+ inet6 -> open({0,0,0,0,0,0,0,1})
+ end,
+ case Localhost of
{ok, Socket} ->
Name = to_string(NodeName),
Extra = "",
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 30a9457bb3..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.
diff --git a/lib/kernel/src/erts_debug.erl b/lib/kernel/src/erts_debug.erl
index 8e2b5ad214..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.
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..d00ed828a7 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.
diff --git a/lib/kernel/src/gen_tcp.erl b/lib/kernel/src/gen_tcp.erl
index 8cb2a725e8..1f0d44b8e1 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.
diff --git a/lib/kernel/src/gen_udp.erl b/lib/kernel/src/gen_udp.erl
index 6698d5f0fa..5e85c61dd9 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.
diff --git a/lib/kernel/src/global_group.erl b/lib/kernel/src/global_group.erl
index e71f83f9d3..8ac0bd9551 100644
--- a/lib/kernel/src/global_group.erl
+++ b/lib/kernel/src/global_group.erl
@@ -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 73fcb2469c..087cceb5d8 100644
--- a/lib/kernel/src/hipe_unified_loader.erl
+++ b/lib/kernel/src/hipe_unified_loader.erl
@@ -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,7 +114,7 @@ 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.
@@ -125,12 +125,12 @@ load_native_code(Mod, Bin, Architecture) when is_atom(Mod), is_binary(Bin) ->
post_beam_load([])->
ok;
post_beam_load([_|_]=Mods) ->
- erlang:system_flag(multi_scheduling, block),
+ erlang:system_flag(multi_scheduling, block_normal),
try
_ = [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/inet6_sctp.erl b/lib/kernel/src/inet6_sctp.erl
index 5934c269fa..cc98bc0ccb 100644
--- a/lib/kernel/src/inet6_sctp.erl
+++ b/lib/kernel/src/inet6_sctp.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/kernel/src/inet6_tcp.erl b/lib/kernel/src/inet6_tcp.erl
index 1978307b3c..3dfe5dfc86 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.
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..eb6945f60a 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.
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 a0d5344f11..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.
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..65d78b66c9 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.
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..60677cb7de 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.
diff --git a/lib/kernel/src/inet_tcp.erl b/lib/kernel/src/inet_tcp.erl
index f551af9709..ee885af3b0 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.
diff --git a/lib/kernel/src/inet_udp.erl b/lib/kernel/src/inet_udp.erl
index 5b2e5120c9..7e8d9cdb72 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.
diff --git a/lib/kernel/src/kernel.app.src b/lib/kernel/src/kernel.app.src
index 419dc0a2fc..15e0ec02a9 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.
@@ -116,6 +116,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-2.6", "sasl-2.6"]}
]
}.
diff --git a/lib/kernel/src/kernel.appup.src b/lib/kernel/src/kernel.appup.src
index 860d3640d0..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-1](\\.[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-1](\\.[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 40544da6c3..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.
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/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..a38356c224 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.
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 4947088635..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.
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 7b233741e0..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.
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 0ff512bb6e..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.
@@ -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 284ca8f377..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,
+
+ spawn_failures/1,
+
+ run_fun/1,
+ decode_packet_delim/1,
+ wilderness/1]).
-export([init_per_testcase/2, end_per_testcase/2]).
-include_lib("common_test/include/ct.hrl").
-% 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),
+ 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 7f623b9fc3..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.
@@ -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 00f29aa8ed..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.
@@ -20,6 +20,7 @@
-module(code_SUITE).
-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,
@@ -33,8 +34,11 @@
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]).
@@ -46,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,
@@ -58,8 +64,9 @@ all() ->
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() ->
[].
@@ -92,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),
@@ -133,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({})),
@@ -166,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([{}]),
@@ -213,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
@@ -224,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),
@@ -249,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,""),
@@ -287,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),
@@ -298,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),
@@ -314,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"),
@@ -328,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
@@ -346,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),
@@ -364,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),
@@ -408,7 +388,7 @@ purge_many_exits_do(PurgeF) ->
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}) ->
@@ -428,8 +408,6 @@ purge_many_exits_do(PurgeF) ->
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),
@@ -446,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),
@@ -461,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.
@@ -492,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(),
@@ -510,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],
@@ -542,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.
@@ -565,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(),
@@ -587,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]]),
@@ -611,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) ->
@@ -638,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),
@@ -679,17 +640,17 @@ 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(),
%% test non-clashing entries
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),
@@ -697,17 +658,17 @@ clash(Config) when is_list(Config) ->
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"
- Priv = ?config(priv_dir, Config),
+ 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"),
@@ -719,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},
@@ -748,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.
@@ -872,19 +830,25 @@ 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) ->
@@ -909,10 +873,7 @@ where_is_file(Config) when is_list(Config) ->
non_existing = code:where_is_file("kernel"), % no such file
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)
@@ -953,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"),
@@ -963,12 +924,11 @@ 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}]),
- TSPath = filename:dirname(code:which(test_server)),
Path0 = rpc:call(Node, code, get_path, []),
- [TSPath,"."|Path1] = Path0,
+ ["."|Path1] = Path0,
[Kernel|Path2] = Path1,
[Stdlib|Path3] = Path2,
mult_lib_verify_lib(Kernel, "kernel"),
@@ -1012,16 +972,19 @@ mult_lib_remove_prefix([$/|T], []) -> T.
bad_erl_libs(Config) when is_list(Config) ->
{ok,Node} =
- ?t:start_node(mult_lib_roots, slave,
- [{args,"-env ERL_LIBS "}]),
-
- ?t:stop_node(Node),
+ test_server:start_node(bad_erl_libs, slave, []),
+ Code = rpc:call(Node,code,get_path,[]),
+ test_server:stop_node(Node),
{ok,Node2} =
- ?t:start_node(mult_lib_roots, 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,[]),
+ test_server:stop_node(Node2),
+
+ %% Test that code path is not affected by the faulty ERL_LIBS
+ Code = Code2,
- ?t:stop_node(Node2),
ok.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -1036,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 =
@@ -1070,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"]),
@@ -1084,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,
@@ -1103,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) ->
@@ -1129,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} <-
@@ -1148,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}]),
@@ -1192,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.
@@ -1216,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),
@@ -1260,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(),
@@ -1271,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,
@@ -1315,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),
@@ -1342,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!
@@ -1402,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}]),
@@ -1428,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,
@@ -1457,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 ->
@@ -1486,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.)
@@ -1517,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 21da958c11..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)).
@@ -31,8 +31,8 @@
-else.
-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 2450761ac9..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.
@@ -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 3ac87384b4..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,7 +19,6 @@
%%
-module(erl_distribution_SUITE).
-%-define(line_trace, 1).
-include_lib("common_test/include/ct.hrl").
-export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
@@ -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 e453cb2cdd..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.
@@ -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 bccca59b93..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.
@@ -23,6 +23,7 @@
-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,
@@ -32,13 +33,14 @@
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,
@@ -64,54 +66,60 @@ 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) ->
+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
@@ -121,10 +129,15 @@ get_modules(_Config) ->
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,{Succ,FailExp}} = erl_prim_loader:get_modules(Ms, Process, Path),
- SuccExp = lists:sort(Succ),
+ {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),
@@ -132,7 +145,7 @@ get_modules(_Config) ->
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]),
+ get_modules, [Ms,Process,Path]),
SuccExp = lists:sort(InetSucc),
stop_node(Node),
@@ -141,6 +154,13 @@ get_modules(_Config) ->
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
@@ -151,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),
@@ -162,8 +182,8 @@ 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,
BootPid = start_boot_server(),
@@ -174,14 +194,14 @@ inet_existing(Config) when is_list(Config) ->
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,
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)),
+ ct:sleep({seconds,6}),
BootPid = start_boot_server(),
wait_really_started(Node, 25),
@@ -193,25 +213,25 @@ 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 ->
Name = erl_prim_test_inet_disconnects,
-
+
BootPid = start_boot_server(),
unlink(BootPid),
Self = self(),
@@ -230,9 +250,9 @@ 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.
@@ -270,13 +290,12 @@ 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) ->
- ?line Name = erl_prim_test_multiple_slaves,
- ?line Host = host(),
- ?line IpStr = ip_str(Host),
+ 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
@@ -289,54 +308,54 @@ multiple_slaves(Config) when is_list(Config) ->
{list_to_atom(NameN),list_to_atom(NodeN)}
end, lists:seq(1, NoOfNodes)),
- ?line Nodes = start_multiple_nodes(NamesAndNodes, Args, []),
+ 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)),
+ 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
- ?line test_server:sleep(test_server:seconds(10)),
+ ct:sleep({seconds,10}),
- ?line wait_and_shutdown(lists:reverse(Nodes), 30),
+ wait_and_shutdown(lists:reverse(Nodes), 30),
- ?line unlink(BootPid),
- ?line exit(BootPid, kill),
+ 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"),
@@ -360,149 +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.
-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
ok = rpc:call(Node, erl_prim_loader, purge_archive_cache, []),
- ?line ok = file:delete(Archive),
+ 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) ->
@@ -512,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()]),
@@ -526,29 +533,29 @@ 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
ok = erl_prim_loader:purge_archive_cache(),
- ?line ok = file:delete(Archive),
+ ok = file:delete(Archive),
ok.
%%%
@@ -611,7 +618,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) ->
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 fa0fc5b75c..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.
@@ -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 40b3f6bd53..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.
@@ -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 e9401e26ef..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]).
@@ -112,7 +112,9 @@
-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},
@@ -172,7 +174,7 @@ 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_MODULE:read_file_info(Priv) of
{ok, #file_info{atime={_, {0, 0, 0}}}} ->
@@ -261,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"),
@@ -340,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],
@@ -493,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"
@@ -599,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"),
@@ -665,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
@@ -723,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.
@@ -733,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, []).
@@ -763,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"),
@@ -804,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"),
@@ -852,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
@@ -863,565 +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 Str = io:get_line(Fd2,''),
- ?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),
@@ -1432,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) ->
@@ -1498,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),
@@ -1518,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),
@@ -1550,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
@@ -1566,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
@@ -1576,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]),
@@ -1630,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
@@ -2265,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.
@@ -2282,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"),
@@ -2304,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"),
@@ -2320,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
@@ -2330,46 +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
- 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.
@@ -2392,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),
@@ -2416,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.
@@ -2445,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.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -2454,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);
@@ -2492,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.
@@ -2640,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)],
+
+ ok = file:write_file(MyFile, Cat),
- ?line {ok,Fd} = file:open(MyFile, [read,compressed,binary]),
- ?line {ok,All} = file:read(Fd, 100000),
- ?line ok = file:close(Fd),
+ {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) ->
@@ -2740,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),
@@ -2801,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"};
@@ -2857,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"};
@@ -2911,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 ->
@@ -2955,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.
@@ -3014,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());
@@ -3039,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,.",
@@ -3127,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),
%%
@@ -3146,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},
@@ -3180,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),
%%
@@ -3193,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},
@@ -3203,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),
@@ -3223,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",
- %%
- ?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),
+ RootDir = proplists:get_value(priv_dir, Config),
+ Base = test_server:temp_name(
+ filename:join(RootDir, "pid2name_")),
+ Name1 = [Base, '.txt'],
+ Name2 = Base ++ ".txt",
%%
- ?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.
@@ -3318,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}.
@@ -3457,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),
@@ -3558,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)),
- %%
- ?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]),
+ 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 [] = 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;
@@ -3689,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]),
@@ -3841,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]),
@@ -3867,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,
@@ -3948,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,
@@ -3969,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).
@@ -4005,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) ->
@@ -4023,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) ->
@@ -4043,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]).
@@ -4063,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) ->
@@ -4082,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);
@@ -4164,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) ->
@@ -4179,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() ->
@@ -4532,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
@@ -4546,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 =
@@ -4561,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 e6f8761f95..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.
@@ -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) ->
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,6 +740,48 @@ 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 = rand:uniform(Max),
L = [ rand_decomp() || _ <- lists:seq(1,N) ],
@@ -851,7 +789,7 @@ rand_comp_decomp(Max) ->
LD = lists:flatten([B || {_,B} <- L]),
LB = unicode:characters_to_binary(LD,unicode,utf8),
{LC,LB}.
-
+
rand_decomp() ->
BT = bigtup(),
SZ = tuple_size(BT),
diff --git a/lib/kernel/test/gen_sctp_SUITE.erl b/lib/kernel/test/gen_sctp_SUITE.erl
index 99f8625ba9..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.
@@ -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..6f6f53309e 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.
@@ -38,7 +38,9 @@
-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},
@@ -65,74 +67,67 @@ end_per_group(_,_Config) ->
ok.
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.
%%% 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),
@@ -149,96 +144,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,53 +261,51 @@ 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),
+ %%
+ Localhost = "localhost",
+ Localaddr = ok(inet:getaddr(Localhost, inet6)),
+ io:format("~s ~p~n", [Localhost,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).
%%% Utilities
@@ -323,13 +316,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 +337,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.
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 fe81cbac18..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.
@@ -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.
@@ -451,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, []).
@@ -463,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) ->
@@ -505,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}]),
@@ -545,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() ->
["*",
@@ -568,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,[]),
@@ -589,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 323796665b..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.
@@ -21,13 +21,13 @@
-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,
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,25 +59,15 @@
oct_acceptor/1,
otp_7731_server/1, zombie_server/2, do_iter_max_socks/2]).
-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(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,
@@ -120,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(),
@@ -199,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),
@@ -296,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]),
@@ -329,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),
@@ -355,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),
@@ -369,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),
@@ -392,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) ->
@@ -419,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}])),
@@ -531,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;
@@ -551,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),
@@ -591,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
@@ -660,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),
@@ -673,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.
@@ -698,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).
@@ -710,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.
@@ -741,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 ->
@@ -759,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.
@@ -804,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.
%%
@@ -834,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) ->
@@ -844,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) ->
@@ -864,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, []),
@@ -888,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) ->
@@ -901,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(),
@@ -916,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),
@@ -958,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.
@@ -1039,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.
@@ -1091,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.
@@ -1112,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) ->
@@ -1133,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
@@ -1142,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) ->
@@ -1161,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.
@@ -1174,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) ->
@@ -1186,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.
@@ -1199,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) ->
@@ -1216,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.
@@ -1247,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
@@ -1262,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) ->
@@ -1286,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
@@ -1301,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) ->
@@ -1325,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.
@@ -1344,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).
%%
@@ -1371,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).
@@ -1450,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.
@@ -1461,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) ->
@@ -1551,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.
@@ -1630,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"),
@@ -1638,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.
@@ -1849,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
@@ -1863,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]),
@@ -1893,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.
@@ -1908,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}]),
@@ -1931,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"});
_ ->
@@ -1990,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),
@@ -2011,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(),
@@ -2027,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(),
@@ -2038,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(),
@@ -2052,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(),
@@ -2066,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(),
@@ -2080,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(),
@@ -2095,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(),
@@ -2110,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(),
@@ -2125,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(),
@@ -2146,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(),
@@ -2169,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),
@@ -2187,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(),
@@ -2212,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(),
@@ -2249,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(),
@@ -2296,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),
@@ -2349,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(),
@@ -2400,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) ->
@@ -2484,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) ->
@@ -2565,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
@@ -2606,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}]),
@@ -2621,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},
@@ -2635,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},
@@ -2672,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),
@@ -2702,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,
@@ -2722,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,
@@ -2775,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,
@@ -2856,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),
@@ -2947,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),
@@ -2988,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),
@@ -3048,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),
@@ -3115,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 2efbf26e1c..85dc6312ea 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.
-%
+
+%%
+%% 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,
@@ -38,7 +37,9 @@
buffer_size/1, binary_passive_recv/1, bad_address/1,
read_packets/1, open_fd/1, connect/1, implicit_inet6/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,
@@ -62,28 +63,22 @@ 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),
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 +86,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 +107,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 +122,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 +202,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 +227,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 +283,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 +295,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 +391,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 +422,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 +441,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 +550,84 @@ active_n(Config) when is_list(Config) ->
ok = gen_udp:close(S1),
ok.
-%
-% Utils
-%
+%%
+%% 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, 5) 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),
+ %%
+ Localhost = "localhost",
+ Localaddr = ok(inet:getaddr(Localhost, inet6)),
+ io:format("~s ~p~n", [Localhost,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).
+ 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.
diff --git a/lib/kernel/test/global_SUITE.erl b/lib/kernel/test/global_SUITE.erl
index 0046fdafa4..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,
@@ -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 -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) ->
@@ -2933,17 +2876,15 @@ sync_until(LogFile) ->
shuffle(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 e7d321418c..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,7 +28,7 @@
-export([init_per_testcase/2, end_per_testcase/2]).
-%-compile(export_all).
+%%-compile(export_all).
-include_lib("common_test/include/ct.hrl").
@@ -36,7 +36,9 @@
-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 eb6cb06622..548b27db97 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.
@@ -37,31 +37,35 @@
-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,
@@ -97,7 +101,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 +111,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 +147,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 +174,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 +188,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 +198,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 +221,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 +240,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 +249,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 +270,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 +285,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 +305,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 +315,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 +332,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 +352,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 +380,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 +414,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 +442,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 +475,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),
diff --git a/lib/kernel/test/ignore_cores.erl b/lib/kernel/test/ignore_cores.erl
index 6a37b48189..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.
@@ -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 0a36bc9673..c93b10fa1c 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.
@@ -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),
@@ -155,79 +152,77 @@ 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]}]),
+
+ {_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]}]),
+ {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]}]),
%%
- ?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),
@@ -287,33 +282,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 +334,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 +354,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]}]);
+ {_,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 +428,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 +511,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 +614,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 +737,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 +749,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,77 +777,73 @@ 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 () ->
lookup_loop(Hosts, Delay, Tag, Parent, Cnt, Hosts)
@@ -877,7 +855,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.
@@ -892,27 +870,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);
@@ -923,8 +900,8 @@ 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
@@ -934,10 +911,7 @@ lookup_loop([H|Hs], Delay, Tag, Parent, Cnt, Hosts) ->
-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.
@@ -947,24 +921,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) ->
@@ -973,10 +944,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) ->
@@ -985,99 +956,95 @@ 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)
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),
+ 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),
ok.
-record(ifopts, {name,flags,addrs=[],hwaddr}).
ifaddrs([]) -> [];
ifaddrs([{If,Opts}|IOs]) ->
- ?line #ifopts{flags=Flags} = Ifopts =
+ #ifopts{flags=Flags} = Ifopts =
check_ifopts(Opts, #ifopts{name=If}),
- ?line case Flags =/= undefined andalso lists:member(up, Flags) of
- true ->
- Ifopts#ifopts.addrs;
- false ->
- []
- end++ifaddrs(IOs).
+ case Flags =/= undefined andalso lists:member(up, Flags) of
+ true ->
+ Ifopts#ifopts.addrs;
+ false ->
+ []
+ end++ifaddrs(IOs).
check_ifopts([], #ifopts{name=If,flags=Flags,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})
+ ct:fail({flags_undefined,If})
end,
case lists:member(broadcast, Flags) of
true ->
@@ -1085,12 +1052,12 @@ check_ifopts([], #ifopts{name=If,flags=Flags,addrs=Raddrs}=Ifopts) ->
{_,_,_} -> A;
{T,_} when tuple_size(T) =:= 8 -> A;
_ ->
- ?t:fail({broaddr_missing,If,A})
+ ct:fail({broaddr_missing,If,A})
end || A <- Addrs];
false ->
[case A of {_,_} -> A;
_ ->
- ?t:fail({should_have_netmask,If,A})
+ ct:fail({should_have_netmask,If,A})
end || A <- Addrs]
end,
R;
@@ -1101,13 +1068,17 @@ check_ifopts([{flags,Fs}|Opts], #ifopts{flags=Flags}=Ifopts) ->
Flags ->
check_ifopts(Opts, Ifopts#ifopts{});
_ ->
- ?t:fail({multiple_flags,Fs,Ifopts})
+ ct:fail({multiple_flags,Fs,Ifopts})
end;
check_ifopts(
[{addr,Addr},{netmask,Netmask},{broadaddr,Broadaddr}|Opts],
#ifopts{addrs=Addrs}=Ifopts) ->
check_ifopts(Opts, Ifopts#ifopts{addrs=[{Addr,Netmask,Broadaddr}|Addrs]});
check_ifopts(
+ [{addr,Addr},{netmask,Netmask},{dstaddr,_}|Opts],
+ #ifopts{addrs=Addrs}=Ifopts) ->
+ check_ifopts(Opts, Ifopts#ifopts{addrs=[{Addr,Netmask}|Addrs]});
+check_ifopts(
[{addr,Addr},{netmask,Netmask}|Opts],
#ifopts{addrs=Addrs}=Ifopts) ->
check_ifopts(Opts, Ifopts#ifopts{addrs=[{Addr,Netmask}|Addrs]});
@@ -1117,7 +1088,7 @@ check_ifopts([{hwaddr,Hwaddr}|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}).
+ ct:fail({multiple_hwaddrs,HwAddr,Ifopts}).
%% Works just like lists:member/2, except that any {127,_,_,_} tuple
%% matches any other {127,_,_,_}. We do this to handle Linux systems
@@ -1151,9 +1122,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.
@@ -1167,24 +1142,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 ea06061c74..9662d1fef5 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.
@@ -42,7 +42,9 @@
-define(RUN_NAMED, "run-named").
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,1}}].
all() ->
[basic, resolve, edns0, txt_record, files_monitor,
@@ -77,8 +79,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),
@@ -88,29 +90,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) ->
@@ -277,8 +277,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",
@@ -340,8 +339,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),
@@ -471,8 +469,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",
@@ -533,10 +530,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",
@@ -555,10 +549,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),
@@ -573,7 +564,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 =
@@ -647,8 +638,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 a6981854c8..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.
@@ -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 cb531f7b57..e7b44a714c 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.
@@ -25,7 +25,7 @@
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]).
-export([boot1/1, boot2/1]).
@@ -41,7 +41,9 @@
%% 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,
@@ -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,205 +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)).
-
+
%% ------------------------------------------------
%% 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(30,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 PurgerPid = rpc:call(Node, erlang, whereis, [erts_code_purger]),
- ?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),
+ InitP = pid_to_list(InitPid1),
%% and same purger process!
- ?line PurgerPid1 = rpc:call(Node, erlang, whereis, [erts_code_purger]),
+ PurgerPid1 = rpc:call(Node, erlang, whereis, [erts_code_purger]),
PurgerP = pid_to_list(PurgerPid),
- ?line PurgerP = pid_to_list(PurgerPid1),
+ PurgerP = pid_to_list(PurgerPid1),
- ?line NewProcs0 = rpc:call(Node, erlang, processes, []),
+ NewProcs0 = rpc:call(Node, erlang, processes, []),
NewProcs = NewProcs0 -- [InitPid1, PurgerPid1],
- ?line case check_processes(NewProcs, MaxPid) of
- true ->
- ok;
- _ ->
- loose_node:stop(Node),
- ?t:fail(processes_not_greater)
- end,
+ 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.
@@ -480,124 +440,98 @@ 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(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"]),
@@ -610,9 +544,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);
@@ -620,16 +554,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);
@@ -645,18 +578,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 d7fa52b721..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.
@@ -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 64c7ce6136..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.
@@ -24,18 +24,17 @@
-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 1486619b1c..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.
@@ -25,7 +25,9 @@
-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..93530c2735 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.
diff --git a/lib/kernel/test/multi_load_SUITE.erl b/lib/kernel/test/multi_load_SUITE.erl
index bb87443e36..369e25ac64 100644
--- a/lib/kernel/test/multi_load_SUITE.erl
+++ b/lib/kernel/test/multi_load_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.
@@ -28,7 +28,9 @@
-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() ->
[basic_atomic_load,basic_errors,sticky_dir,on_load_failing,
@@ -272,7 +274,12 @@ do_ensure_modules_loaded(Dir) ->
true = is_loaded(Mod),
true = is_loaded(OLMod),
true = is_loaded(NativeMod),
- true = NativeMod:module_info(native),
+
+ ModuleNative = case erlang:system_info(hipe_architecture) of
+ undefined -> false;
+ _ -> true
+ end,
+ ModuleNative = NativeMod:module_info(native),
ok.
@@ -357,9 +364,9 @@ atomic_load_error(Modules, ErrorInFinishLoading) ->
{B,B} ->
Errors;
{false,true} ->
- ct:fail("LastAction fun must not be called");
+ ct:fail("code:prepare_loading/1 should have failed");
{true,false} ->
- ct:fail("LastAction fun was not called")
+ ct:fail("code:prepare_loading/1 should have succeeded")
end.
is_loaded(Mod) ->
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 29fc3a2ea5..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.
@@ -28,7 +28,9 @@
-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,
@@ -56,15 +58,13 @@ init_per_testcase(_TC,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.
@@ -75,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
@@ -154,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.
@@ -241,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
@@ -275,10 +261,8 @@ deep_list_command(Config) when is_list(Config) ->
%% FYI: [$e, $c, "ho"] =:= io_lib:format("ec~s", ["ho"])
ok.
-large_output_command(doc) ->
- "Test to take sure that the correct data is"
- "received when doing large commands";
-large_output_command(suite) -> [];
+%% 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),
@@ -325,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 80025d2fd9..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,7 +18,6 @@
%% %CopyrightEnd%
%%
-module(pdict_SUITE).
-%% NB: The ?line macro cannot be used when testing the dictionary.
-include_lib("common_test/include/ct.hrl").
@@ -38,14 +37,14 @@
-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,
@@ -67,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),
@@ -111,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,
@@ -145,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(),
@@ -158,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),
@@ -187,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'],
diff --git a/lib/kernel/test/pg2_SUITE.erl b/lib/kernel/test/pg2_SUITE.erl
index 6e4f5ee682..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.
@@ -22,8 +22,8 @@
-module(pg2_SUITE).
-include_lib("common_test/include/ct.hrl").
--define(datadir, ?config(data_dir, Config)).
--define(privdir, ?config(priv_dir, Config)).
+-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 1265180354..cc7f2f6713 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]).
@@ -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,437 +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 {ok, Str} = ?PRIM_FILE:read(Fd2,Length),
- ?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,
@@ -878,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) ->
@@ -907,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
@@ -966,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
@@ -976,171 +924,153 @@ 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
+ %% 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}]),
ok = file_write_read_file_info_opts(Handle, Name, 300000, [{time, posix}]),
@@ -1148,14 +1078,15 @@ file_write_read_file_info_opts(Config) when is_list(Config) ->
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.
@@ -1163,136 +1094,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.
@@ -1304,7 +1230,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,
@@ -1317,187 +1242,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.
@@ -1506,45 +1421,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
@@ -1552,66 +1463,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
@@ -1619,163 +1527,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;
- _ ->
- 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
- 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);
@@ -1785,72 +1679,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.
@@ -1859,71 +1747,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"};
@@ -1933,58 +1811,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"};
@@ -1992,18 +1860,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]),
@@ -2011,45 +1879,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."}.
@@ -2118,7 +1980,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.
@@ -2128,7 +1990,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, []).
@@ -2159,7 +2021,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
@@ -2173,9 +2035,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 =
@@ -2188,7 +2050,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 fdb61a3619..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,7 +26,8 @@
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("common_test/include/ct.hrl").
-include_lib("kernel/include/file.hrl").
@@ -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 42c522b1bd..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.
@@ -30,7 +30,9 @@
-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 fb6f62d2e5..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,12 +27,11 @@
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("common_test/include/ct.hrl").
-define(TIMESTAMP_MODES, [no_timestamp,
@@ -40,9 +39,9 @@
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 27ff98dc17..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)).
@@ -31,7 +31,7 @@
-else.
-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 d9d4c138d5..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.
@@ -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 ->
@@ -921,7 +872,7 @@ smp(Config) ->
false ->
{skipped,"No smp support"}
end.
-
+
worker(Seed, FnATpl, Parent) ->
io:format("smp worker ~p, seed=~p~n",[self(),Seed]),
@@ -936,30 +887,29 @@ worker_loop(N, 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 703075634b..e7d422d03c 100644
--- a/lib/kernel/vsn.mk
+++ b/lib/kernel/vsn.mk
@@ -1 +1 @@
-KERNEL_VSN = 4.1.1
+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..7deafc79e9 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>
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.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 d621b0f16d..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.
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/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..ba0746e736 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>
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..437df63aab 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>
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 8650e03a60..4a68e76d50 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,39 @@
thus constitutes one section in this document. The title of each
section is the version number of Mnesia.</p>
- <section><title>Mnesia 4.13.2</title>
+ <section><title>Mnesia 4.13.4</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ Mnesia transactions could hang while waiting on a
+ response from a node who had stopped.</p>
+ <p>
+ Own Id: OTP-13423</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>Mnesia 4.13.3</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ Avoid deadlock possibility in
+ <c>mnesia:del_table_copy/2</c></p>
+ <p>
+ Own Id: OTP-13284</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>Mnesia 4.13.2</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 a5eded4f0f..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 ->
@@ -1044,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) ->
@@ -1066,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).
@@ -1075,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).
@@ -1089,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);
@@ -1116,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);
@@ -1130,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);
@@ -1140,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).
@@ -1173,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 e7ee938312..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)
@@ -1692,13 +1707,10 @@ commit_participant(Coord, Tid, Bin, C0, DiscNs, _RamNs) ->
?eval_debug_fun({?MODULE, commit_participant, undo_prepare},
[{tid, Tid}]);
- {'EXIT', _, _} ->
+ {'EXIT', _MnesiaTM, Reason} ->
+ reply(Coord, {do_abort, Tid, self(), {bad_commit,Reason}}),
mnesia_recover:log_decision(D#decision{outcome = aborted}),
- ?eval_debug_fun({?MODULE, commit_participant, exit_log_abort},
- [{tid, Tid}]),
- mnesia_schema:undo_prepare_commit(Tid, C0),
- ?eval_debug_fun({?MODULE, commit_participant, exit_undo_prepare},
- [{tid, Tid}]);
+ mnesia_schema:undo_prepare_commit(Tid, C0);
Msg ->
verbose("** ERROR ** commit_participant ~p, got unexpected msg: ~p~n",
@@ -1753,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) ->
@@ -1785,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}) ->
@@ -1808,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
@@ -1899,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]};
@@ -1951,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) ->
@@ -1970,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) ->
@@ -2031,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
@@ -2210,8 +2243,6 @@ reconfigure_coordinators(N, [{Tid, [Store | _]} | Coordinators]) ->
true ->
send_mnesia_down(Tid, Store, N)
end;
- aborted ->
- ignore; % avoid spurious mnesia_down messages
_ ->
%% Tell the coordinator about the mnesia_down
send_mnesia_down(Tid, Store, N)
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..612c4ad368 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.
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 279e7bc1ec..9cc84de87b 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 ->
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..b71348f144 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.
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..2388b595d0 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.
@@ -576,7 +576,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 +1542,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..793fb125e6 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.
diff --git a/lib/mnesia/vsn.mk b/lib/mnesia/vsn.mk
index 0fe5b5db8b..194bc439a0 100644
--- a/lib/mnesia/vsn.mk
+++ b/lib/mnesia/vsn.mk
@@ -1 +1 @@
-MNESIA_VSN = 4.13.2
+MNESIA_VSN = 4.13.4
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 e2eeffc667..c3bd0d33b9 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,21 @@
<p>This document describes the changes made to the Observer
application.</p>
+<section><title>Observer 2.1.2</title>
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ Documentation corrections.</p>
+ <p>
+ Own Id: OTP-12994</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
<section><title>Observer 2.1.1</title>
<section><title>Fixed Bugs and Malfunctions</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/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/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..85dc5933c1 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.
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..de52e2a995 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.
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..5ddf65fa59 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.
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 d37623d1cc..77609b11ce 100644
--- a/lib/observer/src/observer_alloc_wx.erl
+++ b/lib/observer/src/observer_alloc_wx.erl
@@ -53,25 +53,29 @@ start_link(Notebook, Parent) ->
init([Notebook, Parent]) ->
try
- Panel = wxPanel:new(Notebook),
+ TopP = wxPanel:new(Notebook),
Main = wxBoxSizer:new(?wxVERTICAL),
+ Panel = wxPanel:new(TopP),
+ GSzr = wxBoxSizer:new(?wxVERTICAL),
BorderFlags = ?wxLEFT bor ?wxRIGHT,
- Carrier = make_win(alloc, Panel, Main, BorderFlags bor ?wxTOP),
- Utilz = make_win(utilz, Panel, Main, BorderFlags),
-
- MemWin = {MemPanel,_} = create_mem_info(Panel),
- wxSizer:add(Main, MemPanel, [{flag, ?wxEXPAND bor BorderFlags bor ?wxBOTTOM},
- {proportion, 1}, {border, 5}]),
- wxWindow:setSizer(Panel, Main),
+ 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),
- {Panel, #state{parent= Parent,
- panel = Panel,
- wins = Windows,
- mem = MemWin,
- paint = PaintInfo,
- time = setup_time()
- }
+ {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()]),
@@ -84,12 +88,14 @@ setup_time() ->
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
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) ->
+ #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;
@@ -120,7 +126,7 @@ 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, panel=Panel, samples=Data, active=Active, wins=Wins0,
+ #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),
@@ -131,7 +137,6 @@ handle_info({Key, {promise_reply, SysInfo}},
if Active ->
update_alloc(S0, Info),
State = precalc(S1),
- catch wxWindow:refresh(Panel),
{noreply, State};
true ->
{noreply, S1}
@@ -193,7 +198,8 @@ precalc(#state{samples=Data0, paint=Paint, time=Ti, wins=Wins0}=State) ->
State#state{wins=Wins}.
-update_alloc(#state{mem={_, 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, ""),
@@ -203,6 +209,7 @@ update_alloc(#state{mem={_, Grid}}, Fields) ->
Row + 1
end,
wx:foldl(Update, 0, Fields),
+ wxWindow:thaw(Grid),
Fields.
alloc_info(SysInfo) ->
@@ -249,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),
@@ -267,12 +273,7 @@ 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, _) ->
View = {"View", [#create_menu{id = ?ID_REFRESH_INTERVAL, text = "Graph Settings"}]},
diff --git a/lib/observer/src/observer_app_wx.erl b/lib/observer/src/observer_app_wx.erl
index 40e117357c..cef83037d0 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.
@@ -302,7 +302,9 @@ 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 = make_gc(AppWin, UseGC),
+ GC = if UseGC -> {?wxGC:create(AppWin), false};
+ true -> {false, wxWindowDC:new(AppWin)}
+ end,
setFont(GC, Font, {0,0,0}),
App = build_tree(AppData, GC),
destroy_gc(GC),
diff --git a/lib/observer/src/observer_defs.hrl b/lib/observer/src/observer_defs.hrl
index c4ba84a8c4..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.
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 56da5a862a..1010a6af4c 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.
@@ -100,7 +100,7 @@ setup_graph_drawing(Panels) ->
IsWindows = element(1, os:type()) =:= win32,
IgnoreCB = {callback, fun(_,_) -> ok end},
Do = fun(#win{panel=Panel}) ->
- wxWindow:setBackgroundColour(Panel, ?wxWHITE),
+ wxWindow:setBackgroundStyle(Panel, ?wxBG_STYLE_SYSTEM),
wxPanel:connect(Panel, paint, [callback]),
IsWindows andalso
wxPanel:connect(Panel, erase_background, [IgnoreCB])
@@ -142,6 +142,8 @@ handle_event(#wx{id=?ID_REFRESH_INTERVAL, event=#wxCommand{type=command_menu_sel
#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;
@@ -762,7 +764,10 @@ make_gc(Panel,UseGC) ->
destroy_gc({GC, DC}) ->
(GC =/= false) andalso ?wxGC:destroy(GC),
- wxPaintDC:destroy(DC).
+ case DC =/= false andalso wx:getObjectType(DC) of
+ false -> ok;
+ Type -> Type:destroy(DC)
+ end.
haveGC() ->
try
diff --git a/lib/observer/src/observer_pro_wx.erl b/lib/observer/src/observer_pro_wx.erl
index dd3441e482..bd914cdf65 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.
diff --git a/lib/observer/src/observer_procinfo.erl b/lib/observer/src/observer_procinfo.erl
index 871ef603db..fe2aa11450 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}}},
@@ -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..9c0243e4a7 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.
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..1860f2f469 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.
diff --git a/lib/observer/src/observer_wx.erl b/lib/observer/src/observer_wx.erl
index 68e814e01a..30bd4043e4 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.
@@ -65,7 +65,8 @@
node,
nodes,
prev_node="",
- log = false
+ log = false,
+ reply_to=false
}).
start() ->
@@ -229,14 +230,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 +379,9 @@ 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(stop, From, State) ->
+ stop_servers(State),
+ {noreply, State#state{reply_to=From}};
handle_call(log_status, _From, State) ->
{reply, State#state.log, State};
@@ -426,17 +426,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) ->
diff --git a/lib/observer/src/ttb.erl b/lib/observer/src/ttb.erl
index 3cba3b97b0..4d6eb3ba8d 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.
@@ -434,7 +434,9 @@ procs(Procs) when is_list(Procs) ->
procs(Proc) ->
proc(Proc).
-proc(Procs) when Procs=:=all; Procs=:=existing; Procs=:=new ->
+proc(Procs) when Procs=:=all; Procs=:=ports; Procs=:=processes;
+ Procs=:=existing; Procs=:=existing_ports; Procs=:=existing_processes;
+ Procs=:=new; Procs=:=new_ports; Procs=:=new_processes ->
[Procs];
proc(Name) when is_atom(Name) ->
[Name]; % can be registered on this node or other node
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/crashdump_helper.erl b/lib/observer/test/crashdump_helper.erl
index e9a3ba0369..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.
diff --git a/lib/observer/test/crashdump_viewer_SUITE.erl b/lib/observer/test/crashdump_viewer_SUITE.erl
index 2d47054600..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.
@@ -101,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].
@@ -563,22 +563,11 @@ dump_with_strange_module_name(DataDir,Rel,DumpName) ->
CD.
dump(Node,DataDir,Rel,DumpName) ->
+ Crashdump = filename:join(DataDir, dump_prefix(Rel)++DumpName),
+ rpc:call(Node,os,putenv,["ERL_CRASH_DUMP",Crashdump]),
rpc:call(Node,erlang,halt,[DumpName]),
- Crashdump0 = filename:join(filename:dirname(code:which(?t)),
- "erl_crash_dump.n1"),
- Crashdump1 = filename:join(DataDir, dump_prefix(Rel)++DumpName),
- ok = rename(Crashdump0,Crashdump1),
- Crashdump1.
-
-rename(From,To) ->
- ok = check_complete(From),
- case file:rename(From,To) of
- {error,exdev} ->
- {ok,_} = file:copy(From,To),
- ok = file:delete(From);
- ok ->
- ok
- end.
+ ok = check_complete(Crashdump),
+ Crashdump.
check_complete(File) ->
check_complete1(File,10).
@@ -617,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 4b05e4c2a0..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.
diff --git a/lib/observer/test/observer_SUITE.erl b/lib/observer/test/observer_SUITE.erl
index a33df61b98..ae8111dcd6 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.
@@ -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]}].
diff --git a/lib/observer/test/ttb_SUITE.erl b/lib/observer/test/ttb_SUITE.erl
index f1649e6cb9..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.
@@ -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 bd89977e28..aede0858d6 100644
--- a/lib/observer/vsn.mk
+++ b/lib/observer/vsn.mk
@@ -1 +1 @@
-OBSERVER_VSN = 2.1.1
+OBSERVER_VSN = 2.1.2
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..ac3c99badc 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>
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 4fecea3aae..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.
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 41601a2750..5727c1ca50 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.
diff --git a/lib/odbc/test/odbc_data_type_SUITE.erl b/lib/odbc/test/odbc_data_type_SUITE.erl
index 25988bef2a..c88c00725e 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.
diff --git a/lib/odbc/test/odbc_query_SUITE.erl b/lib/odbc/test/odbc_query_SUITE.erl
index 79c756e956..5f719b7287 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.
diff --git a/lib/odbc/test/odbc_start_SUITE.erl b/lib/odbc/test/odbc_start_SUITE.erl
index e16b4cfb7f..f055eeb60e 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.
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 88d772467c..37c2249303 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.
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/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 7b5d0f96ca..74d9d7a98c 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,21 @@
</header>
- <section><title>Orber 3.8</title>
+ <section><title>Orber 3.8.1</title>
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p> Suppress Dialyzer warnings. </p>
+ <p>
+ Own Id: OTP-12862</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>Orber 3.8</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 1d4e3c70f0..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.
diff --git a/lib/orber/test/cdrcoding_10_SUITE.erl b/lib/orber/test/cdrcoding_10_SUITE.erl
index dac6e78ddd..3eb35572c1 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.
diff --git a/lib/orber/test/cdrcoding_11_SUITE.erl b/lib/orber/test/cdrcoding_11_SUITE.erl
index f4fe3d06e3..7513888449 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.
diff --git a/lib/orber/test/cdrcoding_12_SUITE.erl b/lib/orber/test/cdrcoding_12_SUITE.erl
index 8843233d35..1c04dc0711 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.
diff --git a/lib/orber/test/cdrlib_SUITE.erl b/lib/orber/test/cdrlib_SUITE.erl
index 8fc9c655ce..e3482d11bd 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.
diff --git a/lib/orber/test/corba_SUITE.erl b/lib/orber/test/corba_SUITE.erl
index 018d8b5f12..559e405226 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.
diff --git a/lib/orber/test/csiv2_SUITE.erl b/lib/orber/test/csiv2_SUITE.erl
index cf4dbec073..48818e4cab 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.
diff --git a/lib/orber/test/data_types_SUITE.erl b/lib/orber/test/data_types_SUITE.erl
index f910eecae7..8dd404a173 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.
diff --git a/lib/orber/test/generated_SUITE.erl b/lib/orber/test/generated_SUITE.erl
index 7af355620e..2062afe2bb 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.
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 ec30187aca..1bce0a3bfd 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.
diff --git a/lib/orber/test/iop_ior_10_SUITE.erl b/lib/orber/test/iop_ior_10_SUITE.erl
index edfe566dcd..8779e123e0 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.
diff --git a/lib/orber/test/iop_ior_11_SUITE.erl b/lib/orber/test/iop_ior_11_SUITE.erl
index d24e3fb882..46342ddfd7 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.
diff --git a/lib/orber/test/iop_ior_12_SUITE.erl b/lib/orber/test/iop_ior_12_SUITE.erl
index 725118b609..bce9f3af88 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.
diff --git a/lib/orber/test/ip_v4v6_interop_SUITE.erl b/lib/orber/test/ip_v4v6_interop_SUITE.erl
index 4840501418..cc5bcd71a5 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.
diff --git a/lib/orber/test/lname_SUITE.erl b/lib/orber/test/lname_SUITE.erl
index 1fb4d7bbb9..a12f2b88a7 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.
diff --git a/lib/orber/test/multi_ORB_SUITE.erl b/lib/orber/test/multi_ORB_SUITE.erl
index abedcec407..9708111525 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.
diff --git a/lib/orber/test/naming_context_SUITE.erl b/lib/orber/test/naming_context_SUITE.erl
index 626b9237b5..12d93caf9f 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.
diff --git a/lib/orber/test/orber_SUITE.erl b/lib/orber/test/orber_SUITE.erl
index 1ca22cd60b..46403c00cb 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.
diff --git a/lib/orber/test/orber_acl_SUITE.erl b/lib/orber/test/orber_acl_SUITE.erl
index 0d8f79de5c..43dc4497bd 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.
diff --git a/lib/orber/test/orber_firewall_ipv4_in_SUITE.erl b/lib/orber/test/orber_firewall_ipv4_in_SUITE.erl
index efa4f120c7..a76682608f 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.
diff --git a/lib/orber/test/orber_firewall_ipv4_out_SUITE.erl b/lib/orber/test/orber_firewall_ipv4_out_SUITE.erl
index cfe1ab2d95..b1c8e00aba 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.
diff --git a/lib/orber/test/orber_firewall_ipv6_in_SUITE.erl b/lib/orber/test/orber_firewall_ipv6_in_SUITE.erl
index 514504716f..e1a172140c 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.
diff --git a/lib/orber/test/orber_firewall_ipv6_out_SUITE.erl b/lib/orber/test/orber_firewall_ipv6_out_SUITE.erl
index 9ff57a0294..8dfc7d9d6f 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.
diff --git a/lib/orber/test/orber_nat_SUITE.erl b/lib/orber/test/orber_nat_SUITE.erl
index 0751cdf89c..24744a6348 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.
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 796ed21489..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.
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 31c67be9d8..2966fbd994 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.
diff --git a/lib/orber/test/tc_SUITE.erl b/lib/orber/test/tc_SUITE.erl
index c670ebdea2..565d9f4645 100644
--- a/lib/orber/test/tc_SUITE.erl
+++ b/lib/orber/test/tc_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.
diff --git a/lib/orber/vsn.mk b/lib/orber/vsn.mk
index 505c77de18..4947315ad0 100644
--- a/lib/orber/vsn.mk
+++ b/lib/orber/vsn.mk
@@ -1 +1 @@
-ORBER_VSN = 3.8
+ORBER_VSN = 3.8.1
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..c565df7f3b 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>
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 aace77a3f0..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.
diff --git a/lib/os_mon/test/cpu_sup_SUITE.erl b/lib/os_mon/test/cpu_sup_SUITE.erl
index 13d47c6a89..41115ee6e2 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.
@@ -21,7 +21,7 @@
-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),
+ {ok, _Pid} = 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 8e2825ec26..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.
@@ -21,7 +21,7 @@
-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 904c9b95b0..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.
@@ -21,7 +21,7 @@
-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 0f7ae3a508..033a5ae162 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.
@@ -21,92 +21,58 @@
-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, 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) ->
- 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 f8fb9e20fc..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.
@@ -35,25 +35,23 @@
-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 5857faa0a6..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.
@@ -21,17 +21,13 @@
-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/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..7beac5ffcb 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>
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 18d7e915db..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.
diff --git a/lib/otp_mibs/test/otp_mibs_SUITE.erl b/lib/otp_mibs/test/otp_mibs_SUITE.erl
index 4d1eb155cd..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.
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..06d66e28c3 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>
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 75f9624fd5..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.
diff --git a/lib/parsetools/test/leex_SUITE.erl b/lib/parsetools/test/leex_SUITE.erl
index f5ff32c358..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.
diff --git a/lib/parsetools/test/yecc_SUITE.erl b/lib/parsetools/test/yecc_SUITE.erl
index a1bb5eb16c..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.
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..750dcb6cf5 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>
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 6891de832d..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.
diff --git a/lib/percept/test/egd_SUITE.erl b/lib/percept/test/egd_SUITE.erl
index 0b1149e1f1..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.
@@ -22,195 +22,183 @@
-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) ->
- rand:seed(exsplus),
- 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,7 +382,7 @@ 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]).
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 06d62630ba..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.
@@ -22,51 +22,23 @@
-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 5b878e8462..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.
@@ -22,54 +22,32 @@
-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/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..f3db24afc9 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.
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 8eb56f7354..49b2ba0326 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,22 @@
<file>notes.xml</file>
</header>
+<section><title>Public_Key 1.1.1</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ An encapsulated PEM header shall be followed by a blank
+ line</p>
+ <p>
+ Own Id: OTP-13381 Aux Id: seq13070 </p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
<section><title>Public_Key 1.1</title>
<section><title>Improvements and New Features</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..04daee460f 100644
--- a/lib/public_key/doc/src/public_key.xml
+++ b/lib/public_key/doc/src/public_key.xml
@@ -118,7 +118,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 +141,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 +418,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>
diff --git a/lib/public_key/doc/src/ref_man.xml b/lib/public_key/doc/src/ref_man.xml
index b3823e1dc3..75c5374257 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>
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..c5e6ffded5 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.
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 6a722b0525..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.
@@ -103,7 +103,7 @@ encode_pem_entry({'PrivateKeyInfo', Der, EncParams}) ->
[StartStr, "\n", b64encode_and_split(EncDer), "\n", pem_end(StartStr) ,"\n\n"];
encode_pem_entry({Type, Der, {Cipher, Salt}}) ->
StartStr = pem_start(Type),
- [StartStr,"\n", pem_decrypt(),"\n", pem_decrypt_info(Cipher, Salt),"\n",
+ [StartStr,"\n", pem_decrypt(),"\n", pem_decrypt_info(Cipher, Salt),"\n\n",
b64encode_and_split(Der), "\n", pem_end(StartStr) ,"\n\n"].
decode_pem_entries([], Entries) ->
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..a5944bd604 100644
--- a/lib/public_key/src/public_key.erl
+++ b/lib/public_key/src/public_key.erl
@@ -134,7 +134,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 +182,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}.
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 5e677f31d6..9c39c36be4 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,
@@ -46,7 +47,7 @@ all() ->
pkix_iso_rsa_oid, pkix_iso_dsa_oid, pkix_crl].
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 +109,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 +124,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 +152,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,13 +209,15 @@ 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"),
erl_make_certs:der_to_pem(DesKeyFile, [Entry1]),
[{'RSAPrivateKey', _, {"DES-CBC", Salt1}} =Entry2] =
erl_make_certs:pem_to_der(DesKeyFile),
+ {ok, Pem} = file:read_file(DesKeyFile),
+ check_encapsulated_header(Pem),
true = check_entry_type(public_key:pem_entry_decode(Entry2, "4567efgh"),
'RSAPrivateKey').
@@ -197,7 +226,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).
@@ -207,7 +236,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).
@@ -215,7 +244,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] =
@@ -227,7 +256,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")),
@@ -245,7 +274,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),
@@ -271,7 +300,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),
@@ -297,7 +326,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),
@@ -322,7 +351,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}] =
@@ -338,7 +367,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}] =
@@ -358,7 +387,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}] =
@@ -378,7 +407,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},
@@ -407,7 +436,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}]
@@ -427,7 +456,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},
@@ -453,7 +482,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},
@@ -481,7 +510,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).
@@ -490,7 +519,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),
@@ -549,7 +578,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),
@@ -578,7 +607,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}) ->
@@ -721,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),
@@ -733,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),
@@ -746,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),
@@ -823,11 +852,29 @@ 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.
-strip_ending_newlines(Bin) ->
- string:strip(binary_to_list(Bin), right, 10).
+check_encapsulated_header(Pem) when is_binary(Pem)->
+ check_encapsulated_header( binary:split(Pem, <<"\n">>, [global]));
+check_encapsulated_header([<<"DEK-Info: DES-CBC,FB7577791A9056A1">>, <<>> | _]) ->
+ true;
+check_encapsulated_header([ _ | Rest]) ->
+ check_encapsulated_header(Rest);
+check_encapsulated_header([]) ->
+ false.
+
+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 d5ffe6ca35..f801f55073 100644
--- a/lib/public_key/vsn.mk
+++ b/lib/public_key/vsn.mk
@@ -1 +1 @@
-PUBLIC_KEY_VSN = 1.1
+PUBLIC_KEY_VSN = 1.1.1
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..0a83954865 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>
@@ -194,7 +194,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 +224,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 +271,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 +309,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 +336,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 +355,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_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 deab502bfe..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.
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..21a4485f94 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.
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..e9bd46fb27 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.
@@ -2530,13 +2530,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 +2585,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_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/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 aeacee0655..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,37 +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@
+TRACE_LIBS = $(foreach LIB, $(TRACE_LIBNAME), $(LIBDIR)/$(LIB)$(TYPEMARKER).@DED_EXT@)
-ifeq ($(HOST_OS),)
-HOST_OS := $(shell $(ERL_TOP)/erts/autoconf/config.guess)
-endif
-
-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))
-debug opt valgrind: $(SOLIBS) $(OBJDIR) $(LIBDIR) $(NIF_LIB)
-
-DYNTRACE_OBJS = $(before_DTrace_OBJS)
+debug opt valgrind: $(SOLIBS) $(OBJDIR) $(LIBDIR) $(TRACE_LIBS)
$(OBJDIR):
-@mkdir -p $(OBJDIR)
@@ -112,50 +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"
- $(INSTALL_PROGRAM) $(DYNTRACE_OBJS) "$(RELSYSDIR)/priv/obj"
- $(INSTALL_PROGRAM) $(NIF_LIB) $(SOLIBS) "$(RELSYSDIR)/priv/lib"
+ $(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..e7a4a73373 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,56 @@ 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", 6, trace_procs},
+ {"trace_ports", 6, trace_ports},
+ {"trace_running_procs", 6, trace_running_procs},
+ {"trace_running_ports", 6, trace_running_ports},
+ {"trace_call", 6, trace_call},
+ {"trace_send", 6, trace_send},
+ {"trace_receive", 6, trace_receive},
+ {"trace_garbage_collection", 6, 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},
+ {"trace", 6, trace}
};
ERL_NIF_INIT(dyntrace, nif_funcs, load, NULL, NULL, NULL)
@@ -76,6 +127,61 @@ 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");
@@ -85,6 +191,61 @@ static int load(ErlNifEnv* env, void** priv_data, ERL_NIF_TERM load_info)
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 +284,442 @@ 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 == 6);
+
+ /* 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;
+ int arity;
+ lttng_decl_mfabuf(mfa);
+ char class[LTTNG_BUFFER_SZ];
+
+ enif_get_tuple(env, argv[4], &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[])
+{
+ lttng_decl_procbuf(pid);
+ lttng_pid_to_str(argv[2], pid);
+
+ if (argv[0] == atom_send) {
+ lttng_decl_procbuf(to);
+ char msg[LTTNG_BUFFER_SZ];
+
+ lttng_pid_to_str(argv[4], 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(argv[4], 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) {
+ char undef[] = "undefined";
+ const ERL_NIF_TERM* tuple;
+ int arity;
+ unsigned int len;
+ lttng_decl_mfabuf(mfa);
+
+ lttng_pid_to_str(argv[3], to);
+
+ if (enif_get_tuple(env, argv[4], &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) {
+ char driver[LTTNG_BUFFER_SZ];
+ lttng_decl_procbuf(pid);
+ lttng_pid_to_str(argv[3], pid);
+
+ enif_snprintf(driver, LTTNG_BUFFER_SZ, "%T", argv[4]);
+ 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..2a3224e191
--- /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 com_ericsson_dyntrace
+
+#if !defined(DYNTRACE_LTTNG_H) || defined(TRACEPOINT_HEADER_MULTI_READ)
+#define DYNTRACE_LTTNG_H
+
+#include <lttng/tracepoint.h>
+
+#define LTTNG1(Name, Arg1) \
+ tracepoint(com_ericsson_dyntrace, Name, (Arg1))
+
+#define LTTNG2(Name, Arg1, Arg2) \
+ tracepoint(com_ericsson_dyntrace, Name, (Arg1), (Arg2))
+
+#define LTTNG3(Name, Arg1, Arg2, Arg3) \
+ tracepoint(com_ericsson_dyntrace, Name, (Arg1), (Arg2), (Arg3))
+
+#define LTTNG4(Name, Arg1, Arg2, Arg3, Arg4) \
+ tracepoint(com_ericsson_dyntrace, Name, (Arg1), (Arg2), (Arg3), (Arg4))
+
+#define LTTNG5(Name, Arg1, Arg2, Arg3, Arg4, Arg5) \
+ tracepoint(com_ericsson_dyntrace, Name, (Arg1), (Arg2), (Arg3), (Arg4), (Arg5))
+
+#define LTTNG_ENABLED(Name) \
+ tracepoint_enabled(com_ericsson_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(
+ com_ericsson_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(
+ com_ericsson_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(
+ com_ericsson_dyntrace,
+ process_exit,
+ TP_ARGS(
+ char*, p,
+ char*, reason
+ ),
+ TP_FIELDS(
+ ctf_string(pid, p)
+ ctf_string(reason, reason)
+ )
+)
+
+TRACEPOINT_EVENT(
+ com_ericsson_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(
+ com_ericsson_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(
+ com_ericsson_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(
+ com_ericsson_dyntrace,
+ port_exit,
+ TP_ARGS(
+ char*, port,
+ char*, reason
+ ),
+ TP_FIELDS(
+ ctf_string(port, port)
+ ctf_string(reason, reason)
+ )
+)
+
+TRACEPOINT_EVENT(
+ com_ericsson_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(
+ com_ericsson_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(
+ com_ericsson_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(
+ com_ericsson_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(
+ com_ericsson_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(
+ com_ericsson_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(
+ com_ericsson_dyntrace,
+ message_receive,
+ TP_ARGS(
+ char*, receiver,
+ char*, msg
+ ),
+ TP_FIELDS(
+ ctf_string(to, receiver)
+ ctf_string(message, msg)
+ )
+)
+
+/* Process Memory */
+
+TRACEPOINT_EVENT(
+ com_ericsson_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(
+ com_ericsson_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(
+ com_ericsson_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(
+ com_ericsson_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 a63a7d3ad9..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.
@@ -75,12 +75,8 @@
#ifdef DEBUG
-#ifndef __WIN32__
-#define ASSERT(X) do {if (!(X)) {erl_exit(1,"%s",#X);} } while(0)
-#else
#include <assert.h>
#define ASSERT(X) assert(X)
-#endif
#else
#define ASSERT(X)
#endif
@@ -176,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,
@@ -218,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 */
@@ -367,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 f7b5ea65cb..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.
@@ -44,19 +44,8 @@
#endif
#ifdef DEBUG
-# ifndef __WIN32__
- /* erl_exit is not available to dll_drivers on windows. */
- void erl_exit(int, char *, ...);
-# define ASSERT(X) \
- do { \
- if (!(X)) { \
- erl_exit(1,"%s",#X); \
- } \
- } while(0)
-# else
-# include <assert.h>
-# define ASSERT(X) assert(X)
-# endif
+# include <assert.h>
+# define ASSERT(X) assert(X)
#else
# define ASSERT(X)
#endif
@@ -385,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));
}
@@ -423,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);
@@ -746,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..06152c66d6
--- /dev/null
+++ b/lib/runtime_tools/doc/src/LTTng.xml
@@ -0,0 +1,459 @@
+<?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>com_ericsson_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>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>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>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>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>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>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>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>
+ <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><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>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>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>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>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>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>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>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>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>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>com_ericsson_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>Examples</title>
+ </section>
+</chapter>
diff --git a/lib/runtime_tools/doc/src/Makefile b/lib/runtime_tools/doc/src/Makefile
index 38725807ae..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.
@@ -45,7 +45,7 @@ XML_REF3_FILES = dbg.xml dyntrace.xml erts_alloc_config.xml system_information.x
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..49b11ddc3c 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>all_processes</c></tag>
+ <item>All processes in the system as well as all processes created hereafter are to be traced.</item>
+ <tag><c>all_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/notes.xml b/lib/runtime_tools/doc/src/notes.xml
index e92f0e02ad..57241edbdc 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,21 @@
<p>This document describes the changes made to the Runtime_Tools
application.</p>
+<section><title>Runtime_Tools 1.9.3</title>
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p><c>dbg:trace_client()</c> now uses a read buffer to
+ speed up reading of trace files.</p>
+ <p>
+ Own Id: OTP-13279</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
<section><title>Runtime_Tools 1.9.2</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 8657a07a30..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>
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/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 3b41184f4e..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.
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..8cdb5a43e3 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].
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])).
@@ -1311,7 +1368,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 +1468,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..28e6d67d96 100644
--- a/lib/runtime_tools/src/dyntrace.erl
+++ b/lib/runtime_tools/src/dyntrace.erl
@@ -41,6 +41,28 @@
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/6,
+ trace_procs/6,
+ trace_ports/6,
+ trace_running_procs/6,
+ trace_running_ports/6,
+ trace_call/6,
+ trace_send/6,
+ trace_receive/6,
+ trace_garbage_collection/6]).
+
+-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 +147,63 @@ user_trace_i4s4(_, _, _, _, _, _, _, _, _) ->
user_trace_n(_, _, _, _, _, _, _, _, _, _) ->
erlang:nif_error(nif_not_loaded).
+trace(_TracerState, _Label, _SeqTraceInfo, _, _Opts) ->
+ erlang:nif_error(nif_not_loaded).
+
+trace(_TraceTag, _TracerState, _Tracee, _FirstTraceTerm, _SecondTraceTerm, _Opts) ->
+ erlang:nif_error(nif_not_loaded).
+
+trace_procs(_TraceTag, _TracerState, _Tracee, _FirstTraceTerm, _SecondTraceTerm, _Opts) ->
+ erlang:nif_error(nif_not_loaded).
+
+trace_ports(_TraceTag, _TracerState, _Tracee, _FirstTraceTerm, _SecondTraceTerm, _Opts) ->
+ erlang:nif_error(nif_not_loaded).
+
+trace_running_procs(_TraceTag, _TracerState, _Tracee, _FirstTraceTerm, _SecondTraceTerm, _Opts) ->
+ erlang:nif_error(nif_not_loaded).
+
+trace_running_ports(_TraceTag, _TracerState, _Tracee, _FirstTraceTerm, _SecondTraceTerm, _Opts) ->
+ erlang:nif_error(nif_not_loaded).
+
+trace_call(_TraceTag, _TracerState, _Tracee, _FirstTraceTerm, _SecondTraceTerm, _Opts) ->
+ erlang:nif_error(nif_not_loaded).
+
+trace_send(_TraceTag, _TracerState, _Tracee, _FirstTraceTerm, _SecondTraceTerm, _Opts) ->
+ erlang:nif_error(nif_not_loaded).
+
+trace_receive(_TraceTag, _TracerState, _Tracee, _FirstTraceTerm, _SecondTraceTerm, _Opts) ->
+ erlang:nif_error(nif_not_loaded).
+
+trace_garbage_collection(_TraceTag, _TracerState, _Tracee, _FirstTraceTerm, _SecondTraceTerm, _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
index 612effa5aa..4db5dbec91 100644
--- a/lib/runtime_tools/src/msacc.erl
+++ b/lib/runtime_tools/src/msacc.erl
@@ -32,18 +32,18 @@
-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_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_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.
diff --git a/lib/runtime_tools/src/observer_backend.erl b/lib/runtime_tools/src/observer_backend.erl
index 9177752cef..66653c5b7f 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.
@@ -259,7 +259,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 +335,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 +355,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 +364,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 +374,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 +393,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 +411,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 +442,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 +531,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 +588,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 aeda103e72..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.
@@ -28,7 +28,7 @@
{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 432a361468..61377ea09e 100644
--- a/lib/runtime_tools/test/Makefile
+++ b/lib/runtime_tools/test/Makefile
@@ -4,6 +4,7 @@ include $(ERL_TOP)/make/$(TARGET)/otp.mk
MODULES = \
dyntrace_SUITE \
+ dyntrace_lttng_SUITE \
runtime_tools_SUITE \
system_information_SUITE \
dbg_SUITE \
diff --git a/lib/runtime_tools/test/dbg_SUITE.erl b/lib/runtime_tools/test/dbg_SUITE.erl
index fd9b8f23bd..5a3c885571 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/6, load_nif/1]).
-include_lib("common_test/include/ct.hrl").
--define(default_timeout, ?t:minutes(1)).
-
-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.
-
-end_per_group(_GroupName, Config) ->
- Config.
+ local_trace, saved_patterns, tracer_exit_on_stop,
+ erl_tracer, distributed_erl_tracer].
-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, []}, undefined, #{}}] = 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, []}, undefined, #{}}] = flush(),
+
+ RCall = spawn_link(RNode, fun() -> ?MODULE:dummy() end),
+ [{RCall, call, RNifProxy, RCall, {?MODULE, dummy, []}, undefined, #{}}] = 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..45f14938c6
--- /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", 6, 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 == 6);
+
+ 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 6d39bc54f4..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.
@@ -20,26 +20,14 @@
-module(dyntrace_SUITE).
-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..e6c147b003
--- /dev/null
+++ b/lib/runtime_tools/test/dyntrace_lttng_SUITE.erl
@@ -0,0 +1,377 @@
+%%
+%% %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
+%%
+%% com_ericsson_dyntrace:gc_major_end
+%% com_ericsson_dyntrace:gc_major_start
+%% com_ericsson_dyntrace:gc_minor_end
+%% com_ericsson_dyntrace:gc_minor_start
+%% com_ericsson_dyntrace:message_receive
+%% com_ericsson_dyntrace:message_send
+%% -com_ericsson_dyntrace:message_queued
+%% com_ericsson_dyntrace:function_exception
+%% com_ericsson_dyntrace:function_return
+%% com_ericsson_dyntrace:function_call
+%% com_ericsson_dyntrace:port_link
+%% com_ericsson_dyntrace:port_exit
+%% com_ericsson_dyntrace:port_open
+%% com_ericsson_dyntrace:port_scheduled
+%% com_ericsson_dyntrace:process_scheduled
+%% com_ericsson_dyntrace:process_register
+%% com_ericsson_dyntrace:process_exit
+%% com_ericsson_dyntrace:process_link
+%% com_ericsson_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("com_ericsson_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("com_ericsson_dyntrace:process_spawn", Res),
+ ok = check_tracepoint("com_ericsson_dyntrace:process_link", Res),
+ ok = check_tracepoint("com_ericsson_dyntrace:process_exit", Res),
+ ok = check_tracepoint("com_ericsson_dyntrace:process_register", Res),
+ ok.
+
+t_ports(Config) when is_list(Config) ->
+ ok = lttng_start_event("com_ericsson_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("com_ericsson_dyntrace:port_open", Res),
+ ok = check_tracepoint("com_ericsson_dyntrace:port_link", Res),
+ ok = check_tracepoint("com_ericsson_dyntrace:port_exit", Res),
+ ok.
+
+t_running_process(Config) when is_list(Config) ->
+ ok = lttng_start_event("com_ericsson_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("com_ericsson_dyntrace:process_scheduled", Res),
+ ok.
+
+t_running_port(Config) when is_list(Config) ->
+ ok = lttng_start_event("com_ericsson_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("com_ericsson_dyntrace:port_scheduled", Res),
+ ok.
+
+
+t_call(Config) when is_list(Config) ->
+ ok = lttng_start_event("com_ericsson_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("com_ericsson_dyntrace:function_call", Res),
+ ok = check_tracepoint("com_ericsson_dyntrace:function_return", Res),
+ ok = check_tracepoint("com_ericsson_dyntrace:function_exception", Res),
+ ok.
+
+t_send(Config) when is_list(Config) ->
+ ok = lttng_start_event("com_ericsson_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("com_ericsson_dyntrace:message_send", Res),
+ ok.
+
+t_call_return_to(Config) when is_list(Config) ->
+ ok = lttng_start_event("com_ericsson_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("com_ericsson_dyntrace:function_call", Res),
+ ok.
+
+t_call_silent(Config) when is_list(Config) ->
+ ok = lttng_start_event("com_ericsson_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("com_ericsson_dyntrace:function_call", Res),
+ notfound = check_tracepoint("com_ericsson_dyntrace:function_return", Res),
+ notfound = check_tracepoint("com_ericsson_dyntrace:function_exception", Res),
+ ok.
+
+
+t_receive(Config) when is_list(Config) ->
+ ok = lttng_start_event("com_ericsson_dyntrace:message_receive", Config),
+ _ = erlang:trace(new, true, [{tracer, dyntrace, []},'receive']),
+
+ Pid = spawn_link(fun() -> waiter() end),
+ Pid ! {self(), ok},
+ ok = receive {Pid,ok} -> ok end,
+ timer:sleep(10),
+ _ = erlang:trace(all, false, ['receive']),
+ Res = lttng_stop_and_view(Config),
+ ok = check_tracepoint("com_ericsson_dyntrace:message_receive", Res),
+ ok.
+
+t_garbage_collection(Config) when is_list(Config) ->
+ ok = lttng_start_event("com_ericsson_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("com_ericsson_dyntrace:gc_major_start", Res),
+ ok = check_tracepoint("com_ericsson_dyntrace:gc_major_end", Res),
+ ok = check_tracepoint("com_ericsson_dyntrace:gc_minor_start", Res),
+ ok = check_tracepoint("com_ericsson_dyntrace:gc_minor_end", Res),
+ ok.
+
+t_all(Config) when is_list(Config) ->
+ ok = lttng_start_event("com_ericsson_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("com_ericsson_dyntrace:process_spawn", Res),
+ ok = check_tracepoint("com_ericsson_dyntrace:process_link", Res),
+ ok = check_tracepoint("com_ericsson_dyntrace:process_exit", Res),
+ ok = check_tracepoint("com_ericsson_dyntrace:process_register", Res),
+ ok = check_tracepoint("com_ericsson_dyntrace:port_open", Res),
+ ok = check_tracepoint("com_ericsson_dyntrace:port_link", Res),
+ ok = check_tracepoint("com_ericsson_dyntrace:port_exit", Res),
+ ok = check_tracepoint("com_ericsson_dyntrace:process_scheduled", Res),
+ ok = check_tracepoint("com_ericsson_dyntrace:port_scheduled", Res),
+ ok = check_tracepoint("com_ericsson_dyntrace:message_send", Res),
+ ok = check_tracepoint("com_ericsson_dyntrace:message_receive", Res),
+ ok = check_tracepoint("com_ericsson_dyntrace:gc_major_start", Res),
+ ok = check_tracepoint("com_ericsson_dyntrace:gc_major_end", Res),
+ ok = check_tracepoint("com_ericsson_dyntrace:gc_minor_start", Res),
+ ok = check_tracepoint("com_ericsson_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 a5c4801af9..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.
@@ -25,9 +25,7 @@
-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/runtime_tools_SUITE.erl b/lib/runtime_tools/test/runtime_tools_SUITE.erl
index 2a79f0a8f9..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.
@@ -21,54 +21,27 @@
-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 3dd7df9f2e..bfc8b84b91 100644
--- a/lib/runtime_tools/vsn.mk
+++ b/lib/runtime_tools/vsn.mk
@@ -1 +1 @@
-RUNTIME_TOOLS_VSN = 1.9.2
+RUNTIME_TOOLS_VSN = 1.9.3
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/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 537511a865..f07938220c 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,48 @@
</header>
<p>This document describes the changes made to the SASL application.</p>
+<section><title>SASL 2.7</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ During upgrade, the release_handler collects a list of
+ supervisor pids in order to list all processes in the
+ supervisor tree. If one of the supervisors (legitimately)
+ exits before release_handler can examine it, then
+ <c>sys:get_status/1</c> would earlier be called with a
+ dead pid, causing a <c>'noproc'</c> error. This has been
+ corrected.</p>
+ <p>
+ Own Id: OTP-13291</p>
+ </item>
+ </list>
+ </section>
+
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ The module <c>overload</c> is deprecated and will be
+ removed in OTP 19.</p>
+ <p>
+ Own Id: OTP-13057</p>
+ </item>
+ <item>
+ <p>
+ Improve implementation of supervisor child count, making
+ it faster and more accurate for dynamic processes of a
+ <c>simple_one_for_one</c> supervisor.</p>
+ <p>
+ Own Id: OTP-13290</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
<section><title>SASL 2.6.1</title>
<section><title>Improvements and New Features</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/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 74cd92a9b0..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>
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 044c016302..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>
diff --git a/lib/sasl/doc/src/sasl_intro.xml b/lib/sasl/doc/src/sasl_intro.xml
index 237580977c..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>
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 92d4818f2e..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.
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 39656f6e65..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.
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 16e8e44ba2..9c912fb8c3 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.
diff --git a/lib/sasl/src/sasl.appup.src b/lib/sasl/src/sasl.appup.src
index 8faa0afbd4..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-6](\\.[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-6](\\.[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 0fb85682c6..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.
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 d207dc15bb..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,44 @@ 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,
+ [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 2e9e107efd..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.
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/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..4dcaec03a7 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
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 7469ec4d46..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.
diff --git a/lib/sasl/test/systools_SUITE.erl b/lib/sasl/test/systools_SUITE.erl
index 825a7f6e86..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.
diff --git a/lib/sasl/test/systools_rc_SUITE.erl b/lib/sasl/test/systools_rc_SUITE.erl
index 2ecb6f107a..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.
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 cb454d5331..fd0fc9b8b5 100644
--- a/lib/sasl/vsn.mk
+++ b/lib/sasl/vsn.mk
@@ -1 +1 @@
-SASL_VSN = 2.6.1
+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 9e7f13e126..b9dc5e4117 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,23 @@
</header>
- <section><title>SNMP 5.2.1</title>
+ <section><title>SNMP 5.2.2</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ Snmp agent now properly handles <c>vacmViewTreeFamily</c>
+ masks.</p>
+ <p>
+ Own Id: OTP-13264</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>SNMP 5.2.1</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..94325a8ed6 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.
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 8e895bc5b1..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.
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 3010de0619..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.
diff --git a/lib/snmp/test/exp/snmp_agent_mt_test.erl b/lib/snmp/test/exp/snmp_agent_mt_test.erl
index 71ae58baca..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.
diff --git a/lib/snmp/test/exp/snmp_agent_v1_test.erl b/lib/snmp/test/exp/snmp_agent_v1_test.erl
index 55045d536e..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.
diff --git a/lib/snmp/test/exp/snmp_agent_v2_test.erl b/lib/snmp/test/exp/snmp_agent_v2_test.erl
index 6238a6c4bd..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.
diff --git a/lib/snmp/test/exp/snmp_agent_v3_test.erl b/lib/snmp/test/exp/snmp_agent_v3_test.erl
index af7cee9b96..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.
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..87539f88f7 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.
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..3b9219739b 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.
diff --git a/lib/snmp/test/snmp_agent_mibs_test.erl b/lib/snmp/test/snmp_agent_mibs_test.erl
index 2cbba14c74..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.
diff --git a/lib/snmp/test/snmp_agent_nfilter_test.erl b/lib/snmp/test/snmp_agent_nfilter_test.erl
index 8aeef81333..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.
diff --git a/lib/snmp/test/snmp_agent_test.erl b/lib/snmp/test/snmp_agent_test.erl
index 93968ede2e..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.
diff --git a/lib/snmp/test/snmp_agent_test_lib.erl b/lib/snmp/test/snmp_agent_test_lib.erl
index 6f20254fcb..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.
diff --git a/lib/snmp/test/snmp_app_test.erl b/lib/snmp/test/snmp_app_test.erl
index 6892d4aa93..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.
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 b08181191f..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.
diff --git a/lib/snmp/test/snmp_conf_test.erl b/lib/snmp/test/snmp_conf_test.erl
index 73b471b107..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.
diff --git a/lib/snmp/test/snmp_log_test.erl b/lib/snmp/test/snmp_log_test.erl
index ae2581fb69..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.
diff --git a/lib/snmp/test/snmp_manager_config_test.erl b/lib/snmp/test/snmp_manager_config_test.erl
index 8428b61e8a..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.
diff --git a/lib/snmp/test/snmp_manager_test.erl b/lib/snmp/test/snmp_manager_test.erl
index a343dfdca7..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.
diff --git a/lib/snmp/test/snmp_manager_user.erl b/lib/snmp/test/snmp_manager_user.erl
index 55b1e23b2e..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.
diff --git a/lib/snmp/test/snmp_manager_user_old.erl b/lib/snmp/test/snmp_manager_user_old.erl
index f317fa831c..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.
diff --git a/lib/snmp/test/snmp_manager_user_test.erl b/lib/snmp/test/snmp_manager_user_test.erl
index 64edfef4d5..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.
diff --git a/lib/snmp/test/snmp_manager_user_test_lib.erl b/lib/snmp/test/snmp_manager_user_test_lib.erl
index ea2c83a0da..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.
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 61a7d2207a..f58f6b6162 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.1
+SNMP_VSN = 5.2.2
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 75e1615c09..96bc50c689 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,23 @@
<file>notes.xml</file>
</header>
+<section><title>Ssh 4.2.2</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ Documentation correction of <c>ssh_sftp:position/4</c></p>
+ <p>
+ Thanks to Rabbe Fogelholm.</p>
+ <p>
+ Own Id: OTP-13305 Aux Id: ERL-87 </p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
<section><title>Ssh 4.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..ff2d6e082a 100644
--- a/lib/ssh/doc/src/ssh.xml
+++ b/lib/ssh/doc/src/ssh.xml
@@ -241,6 +241,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),
@@ -359,7 +360,8 @@
</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 +462,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 +683,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>
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..071d46ec57 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,30 +497,31 @@
<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>
@@ -537,14 +530,13 @@
<name>start_channel(ConnectionRef, Options) -></name>
<name>start_channel(Host, Options) -></name>
<name>start_channel(Host, Port, Options) -> {ok, Pid} | {ok, Pid, ConnectionRef} |
- {error, Reason}</name>
+ {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>Options = [{Option, Value}]</v>
- <v>Reason = term()</v>
</type>
<desc>
<p>If no connection reference is provided, a connection is set
@@ -592,7 +584,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 +592,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..09b07b7a2a 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.
@@ -30,12 +30,18 @@
-export([start/0, start/1, stop/0, 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()}.
@@ -81,7 +87,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}
@@ -153,6 +159,19 @@ daemon(HostAddr, Port, Options0) ->
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.
%%
@@ -223,13 +242,6 @@ default_algorithms() ->
%%--------------------------------------------------------------------
%%% Internal functions
%%--------------------------------------------------------------------
-fix_idle_time(SshOptions) ->
- case proplists:get_value(idle_time, SshOptions) of
- undefined ->
- [{idle_time, infinity}|SshOptions];
- _ ->
- SshOptions
- end.
start_daemon(Host, Port, Options, Inet) ->
case handle_options(Options) of
{error, _Reason} = Error ->
@@ -243,32 +255,52 @@ start_daemon(Host, Port, Options, Inet) ->
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(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, Opts} =
+ 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,
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},
+ {port, Port},
+ {role, server},
{socket_opts, SocketOptions},
- {ssh_opts, Options}]) of
+ {ssh_opts, SshOptions}
+ | Opts]) of
{error, {already_started, _}} ->
{error, eaddrinuse};
- Result = {Code, _} when (Code == ok) or (Code == error) ->
+ Result = {ok,_} ->
+ sync_request_control(WaitRequestControl),
+ Result;
+ Result = {error, _} ->
Result
catch
exit:{noproc, _} ->
@@ -277,18 +309,31 @@ do_start_daemon(Host0, Port0, Options, SocketOptions) ->
Sup ->
AccPid = ssh_system_sup:acceptor_supervisor(Sup),
case ssh_acceptor_sup:start_child(AccPid, [{address, Host},
- {port, Port}, {role, server},
+ {port, Port},
+ {role, server},
{socket_opts, SocketOptions},
- {ssh_opts, Options}]) of
+ {ssh_opts, SshOptions}
+ | 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!
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..90fd951dcd 100644
--- a/lib/ssh/src/ssh_acceptor.erl
+++ b/lib/ssh/src/ssh_acceptor.erl
@@ -26,7 +26,8 @@
%% Internal application API
-export([start_link/5,
- number_of_connections/1]).
+ number_of_connections/1,
+ callback_listen/3]).
%% spawn export
-export([acceptor_init/6, acceptor_loop/6]).
@@ -46,15 +47,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 +87,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..4f76dbe6f0 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.
@@ -85,10 +85,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 b71bed033a..49eec8072f 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.
@@ -135,9 +135,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.
userauth_request_msg(#ssh{userauth_preference = []} = Ssh) ->
@@ -355,10 +355,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"
+ }).
%%--------------------------------------------------------------------
@@ -420,10 +420,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 101bf76cd3..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.
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..8eaa85f795 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.
diff --git a/lib/ssh/src/ssh_cli.erl b/lib/ssh/src/ssh_cli.erl
index 71f62a960e..2d60008de6 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.
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..039a7dea9b 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.
diff --git a/lib/ssh/src/ssh_connect.hrl b/lib/ssh/src/ssh_connect.hrl
index 0c9ddad641..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,13 +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_TIMEOUT, 5000).
--define(MAX_PROTO_VERSION, 255).
+-define(MAX_PROTO_VERSION, 255). % Max length of the hello string
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%
@@ -241,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 ce1931e4f4..e952a333ff 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,953 +144,1123 @@ 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).
-
-%%--------------------------------------------------------------------
--spec renegotiate_data(pid()) -> ok.
-%%--------------------------------------------------------------------
-renegotiate_data(ConnectionHandler) ->
- send_all_state_event(ConnectionHandler, data_size).
+ cast(ConnectionHandler, {adjust_window, Channel, Bytes}).
%%--------------------------------------------------------------------
--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, ?SUPPORTED_AUTH_METHODS),
+ 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),
+ 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),
- 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}};
-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;
+%%---- 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(#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)}.
-
-
-
-userauth_keyboard_interactive(#ssh_msg_userauth_info_request{} = Msg,
- #state{ssh_params = #ssh{role = client,
- io_cb = IoCb} = Ssh0} = State) ->
- {ok, {Reply, Ssh}} = ssh_auth:handle_userauth_info_request(Msg, IoCb, Ssh0),
- send_msg(Reply, State),
- {next_state, userauth_keyboard_interactive_info_response, next_packet(State#state{ssh_params = Ssh})};
-
-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
+
+%%% ######## {userauth_keyboard_interactive, client|server}
+
+handle_event(_, #ssh_msg_userauth_info_request{} = Msg, {userauth_keyboard_interactive, client},
+ #data{ssh_params = Ssh0} = D) ->
+ {ok, {Reply, Ssh}} = ssh_auth:handle_userauth_info_request(Msg, Ssh0#ssh.io_cb, Ssh0),
+ send_bytes(Reply, D),
+ {next_state, {userauth_keyboard_interactive_info_response,client}, D#data{ssh_params = Ssh}};
+
+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}, D) ->
+ {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}} = State) ->
- 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).
+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}]};
-%%--------------------------------------------------------------------
--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).
-%%--------------------------------------------------------------------
--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().
+%%% ######## {connected, client|server} ####
-%%--------------------------------------------------------------------
-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_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} = 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};
+ {keep_state_and_data, [{reply,From,Reply}]};
-handle_sync_event({connection_info, Options}, _From, StateName, State) ->
- Info = ssh_info(Options, State, []),
- {reply, Info, StateName, State};
+handle_event({call,From}, {connection_info, Options}, _, D) ->
+ Info = ssh_info(Options, D, []),
+ {keep_state_and_data, [{reply,From,Info}]};
-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 ->
+handle_event({call,From}, {channel_info,ChannelId,Options}, _, D) ->
+ case ssh_channel:cache_lookup(cache(D), ChannelId) of
+ #channel{} = Channel ->
Info = ssh_channel_info(Options, Channel, []),
- {reply, Info, StateName, State};
+ {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}]};
+
+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;
-%%--------------------------------------------------------------------
--spec handle_info({atom(), port(), binary()} | {atom(), port()} |
- term (), state_name(), #state{}) -> gen_fsm_state_return().
-%%--------------------------------------------------------------------
-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, <<>>};
+ _ ->
+ inet:setopts(D#data.socket, [{active, once}])
+ end,
+ 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(
@@ -1103,200 +1269,181 @@ 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),
+ 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),
+timer:sleep(400), %% FIXME!!! gen_tcp:shutdown instead
+ finalize_termination(StateName, State);
+
+%% terminate({shutdown,Msg}, StateName, State0) when is_record(Msg,ssh_msg_disconnect)->
+%% State = send_msg(Msg, State0),
+%% timer:sleep(400), %% FIXME!!! gen_tcp:shutdown instead
+%% 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),
- 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.
-
-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
- }}]}].
+ 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,
- ?SUPPORTED_AUTH_METHODS),
- {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))
@@ -1311,7 +1458,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)
),
@@ -1322,10 +1469,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(_,_,_) ->
@@ -1336,419 +1489,181 @@ 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;
-
-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.
-
+ {Id, State#data{connection_state =
+ Connection#connection{channel_id_seed = Id + 1}}}.
+
+%%%----------------------------------------------------------------
+%% %%% 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),
+timer:sleep(400),
+ {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
- undefined ->
- ok;
- Fun ->
- catch Fun(User, PeerAddr, Method)
- end.
-
-retry_fun(_, _, undefined, _) ->
- ok;
-
-retry_fun(User, PeerAddr, {error, Reason}, Opts) ->
- case proplists:get_value(failfun, Opts) of
- undefined ->
- ok;
- Fun ->
- do_retry_fun(Fun, User, PeerAddr, Reason)
- end;
-
-retry_fun(User, PeerAddr, Reason, Opts) ->
- case proplists:get_value(infofun, Opts) of
- undefined ->
- ok;
- Fun ->
- do_retry_fun(Fun, User, PeerAddr, Reason)
- end.
-
-do_retry_fun(Fun, User, PeerAddr, Reason) ->
- case erlang:fun_info(Fun, arity) of
- {arity, 2} -> %% Backwards compatible
- catch Fun(User, Reason);
- {arity, 3} ->
- catch Fun(User, PeerAddr, Reason)
- end.
-
ssh_info([], _State, Acc) ->
Acc;
-ssh_info([client_version | Rest], #state{ssh_params = #ssh{c_vsn = IntVsn,
+ssh_info([client_version | Rest], #data{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,
+ssh_info([server_version | Rest], #data{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([peer | Rest], #data{ssh_params = #ssh{peer = Peer}} = State, Acc) ->
ssh_info(Rest, State, [{peer, Peer} | Acc]);
-ssh_info([sockname | Rest], #state{socket = Socket} = State, Acc) ->
+ssh_info([sockname | Rest], #data{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([user | Rest], #data{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;
@@ -1765,43 +1680,49 @@ ssh_channel_info([send_window | Rest], #channel{send_window_size = WinSize,
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}) ->
+ 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}),
- gen_fsm:reply(From, Msg);
-send_reply({flow_control, From, Msg}) ->
- gen_fsm:reply(From, Msg).
+ {[{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}, Opts) ->
- disconnect_fun(Msg, Opts);
-disconnect_fun(_, undefined) ->
- ok;
-disconnect_fun(Reason, Opts) ->
+%%%----------------------------------------------------------------
+disconnect_fun({disconnect,Msg}, D) ->
+ disconnect_fun(Msg, D);
+disconnect_fun(Reason, #data{opts=Opts}) ->
case proplists:get_value(disconnectfun, Opts) of
undefined ->
ok;
@@ -1809,50 +1730,137 @@ disconnect_fun(Reason, Opts) ->
catch Fun(Reason)
end.
-unexpected_fun(UnexpectedMessage, Opts, #ssh{peer={_,Peer}}) ->
+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)
+ catch Fun(UnexpectedMessage, Peer)
end.
-check_cache(#state{opts = Opts} = State, Cache) ->
- %% Check the number of entries in Cache
- case proplists:get_value(size, ets:info(Cache)) of
- 0 ->
- case proplists:get_value(idle_time, Opts, infinity) of
- infinity ->
- State;
- Time ->
- handle_idle_timer(Time, State)
- end;
+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 ->
+ catch Fun(self(), Display, DbgMsg, Lang)
+ end.
+
+
+connected_fun(User, Method, #data{ssh_params = #ssh{peer = {_,Peer}},
+ opts = Opts}) ->
+ case proplists:get_value(connectfun, Opts) of
+ undefined ->
+ ok;
+ Fun ->
+ catch Fun(User, Peer, Method)
+ end.
+
+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, Info);
+ {arity, 3} ->
+ catch Fun(User, Peer, Info);
_ ->
- State
+ ok
+ catch
+ _:_ ->
+ ok
+ end.
+
+%%%----------------------------------------------------------------
+%%% Cache idle timer that closes the connection if there are no
+%%% channels open for a while.
+
+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.
-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_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 ->
+ %% 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"})};
+ _ ->
+ %% 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.
+
+
+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.
@@ -1881,16 +1889,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..8c7628e909 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.
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..fbf85cfcfc
--- /dev/null
+++ b/lib/ssh/src/ssh_dbg.erl
@@ -0,0 +1,140 @@
+%%
+%% %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
+ ]).
+
+-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() -> messages(fun(String,Acc) -> [String|Acc] end)
+
+messages(Write) when is_function(Write,2) ->
+ catch dbg:start(),
+
+ Handler = fun msg_formater/2,
+ InitialData = #data{writer = Write},
+ {ok,_} = dbg:tracer(process, {Handler, InitialData}),
+
+ dbg:p(new,c),
+ dbg:tp(ssh_message,encode,1, x),
+ dbg:tp(ssh_message,decode,1, x),
+ dbg:tpl(ssh_transport,select_algorithm,3, x).
+
+%%%================================================================
+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,decode,1},Msg}, D) ->
+ fmt("~nRECV ~p ~s~n", [Pid,wr_record(shrink_bin(Msg))], D);
+
+msg_formater({trace,Pid,return_from,{ssh_transport,select_algorithm,3},{ok,Alg}}, D) ->
+ fmt("~nALGORITHMS ~p~n~s~n", [Pid, wr_record(Alg)], D);
+
+msg_formater(_, D) ->
+ D.
+
+
+fmt(Fmt, Args, D=#data{writer=Write,acc=Acc}) ->
+ D#data{acc = Write(io_lib:format(Fmt, Args), Acc)}.
+
+%%%----------------------------------------------------------------
+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..4486d36fe4 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.
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 a5e627fdb3..026d0f6151 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 a0e9a4961c..db80d4c9e3 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.
@@ -50,13 +50,7 @@
-define(Empint(X), (ssh_bits:mpint(X))/binary ).
-define(Ebinary(X), ?STRING(X) ).
-%% encode(Msg) ->
-%% try encode1(Msg)
-%% catch
-%% C:E ->
-%% io:format('***********************~n~p:~p ~p~n',[C,E,Msg]),
-%% error(E)
-%% end.
+-define(unicode_list(B), unicode:characters_to_list(B)).
encode(#ssh_msg_global_request{
name = Name,
@@ -176,7 +170,7 @@ encode(#ssh_msg_userauth_pk_ok{
encode(#ssh_msg_userauth_passwd_changereq{prompt = Prompt,
languge = Lang
})->
- <<?Ebyte(?SSH_MSG_USERAUTH_PASSWD_CHANGEREQ), ?Estring(Prompt), ?Estring(Lang)>>;
+ <<?Ebyte(?SSH_MSG_USERAUTH_PASSWD_CHANGEREQ), ?Estring_utf8(Prompt), ?Estring(Lang)>>;
encode(#ssh_msg_userauth_info_request{
name = Name,
@@ -184,14 +178,14 @@ encode(#ssh_msg_userauth_info_request{
language_tag = Lang,
num_prompts = NumPromtps,
data = Data}) ->
- <<?Ebyte(?SSH_MSG_USERAUTH_INFO_REQUEST), ?Estring(Name), ?Estring(Inst), ?Estring(Lang),
+ <<?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}) ->
lists:foldl(fun %%("", Acc) -> Acc; % commented out since it seem wrong
- (Response, Acc) -> <<Acc/binary, ?Estring(Response)>>
+ (Response, Acc) -> <<Acc/binary, ?Estring_utf8(Response)>>
end,
<<?Ebyte(?SSH_MSG_USERAUTH_INFO_RESPONSE), ?Euint32(Num)>>,
Data);
@@ -201,17 +195,17 @@ encode(#ssh_msg_disconnect{
description = Desc,
language = Lang
}) ->
- <<?Ebyte(?SSH_MSG_DISCONNECT), ?Euint32(Code), ?Estring(Desc), ?Estring(Lang)>>;
+ <<?Ebyte(?SSH_MSG_DISCONNECT), ?Euint32(Code), ?Estring_utf8(Desc), ?Estring(Lang)>>;
encode(#ssh_msg_service_request{
name = Service
}) ->
- <<?Ebyte(?SSH_MSG_SERVICE_REQUEST), ?Estring(Service)>>;
+ <<?Ebyte(?SSH_MSG_SERVICE_REQUEST), ?Estring_utf8(Service)>>;
encode(#ssh_msg_service_accept{
name = Service
}) ->
- <<?Ebyte(?SSH_MSG_SERVICE_ACCEPT), ?Estring(Service)>>;
+ <<?Ebyte(?SSH_MSG_SERVICE_ACCEPT), ?Estring_utf8(Service)>>;
encode(#ssh_msg_newkeys{}) ->
<<?Ebyte(?SSH_MSG_NEWKEYS)>>;
@@ -283,7 +277,7 @@ encode(#ssh_msg_kex_ecdh_reply{public_host_key = Key, q_s = Q_s, h_sig = Sign})
<<?Ebyte(?SSH_MSG_KEX_ECDH_REPLY), ?Ebinary(EncKey), ?Empint(Q_s), ?Ebinary(EncSign)>>;
encode(#ssh_msg_ignore{data = Data}) ->
- <<?Ebyte(?SSH_MSG_IGNORE), ?Estring(Data)>>;
+ <<?Ebyte(?SSH_MSG_IGNORE), ?Estring_utf8(Data)>>;
encode(#ssh_msg_unimplemented{sequence = Seq}) ->
<<?Ebyte(?SSH_MSG_UNIMPLEMENTED), ?Euint32(Seq)>>;
@@ -291,7 +285,7 @@ encode(#ssh_msg_unimplemented{sequence = Seq}) ->
encode(#ssh_msg_debug{always_display = Bool,
message = Msg,
language = Lang}) ->
- <<?Ebyte(?SSH_MSG_DEBUG), ?Eboolean(Bool), ?Estring(Msg), ?Estring(Lang)>>.
+ <<?Ebyte(?SSH_MSG_DEBUG), ?Eboolean(Bool), ?Estring_utf8(Msg), ?Estring(Lang)>>.
%% Connection Messages
@@ -330,7 +324,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)>>) ->
@@ -363,7 +357,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
};
@@ -381,9 +375,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
};
@@ -391,7 +385,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)
};
@@ -493,18 +487,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
};
@@ -512,7 +506,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">>
};
@@ -554,7 +548,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).
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..c1d43a486c 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.
diff --git a/lib/ssh/src/ssh_sftp.erl b/lib/ssh/src/ssh_sftp.erl
index eb99406626..b03652a136 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.
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..d31d5a297d 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.
diff --git a/lib/ssh/src/ssh_subsystem_sup.erl b/lib/ssh/src/ssh_subsystem_sup.erl
index ebe33ec7da..11e02491c4 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.
diff --git a/lib/ssh/src/ssh_sup.erl b/lib/ssh/src/ssh_sup.erl
index 649ea00a06..f827594717 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.
diff --git a/lib/ssh/src/ssh_system_sup.erl b/lib/ssh/src/ssh_system_sup.erl
index 18a5d8071a..9a9786a914 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.
@@ -192,6 +192,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 a648c7af3d..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.
@@ -265,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),
@@ -275,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,
@@ -288,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.
@@ -371,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,
@@ -396,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.
@@ -435,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},
@@ -469,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) ->
@@ -495,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.
@@ -535,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,
@@ -572,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.
%%%----------------------------------------------------------------
%%%
@@ -624,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,
@@ -650,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.
@@ -675,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
@@ -929,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([], []) ->
@@ -1042,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,
@@ -1052,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.
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 259dc71aa5..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.
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..71b5c2c46a 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.
@@ -64,7 +64,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..ac9e232b3a 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.
diff --git a/lib/ssh/test/Makefile b/lib/ssh/test/Makefile
index fb539f98fa..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
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 a03a9ee0f2..9910b8f1d7 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.
@@ -28,7 +28,7 @@
%% Note: This directive should only be used in test suites.
-compile(export_all).
--define(TIMEOUT, 50000).
+-define(TIMEOUT, 10000).
%%--------------------------------------------------------------------
%% Common Test interface functions -----------------------------------
@@ -36,7 +36,7 @@
suite() ->
[{ct_hooks,[ts_install_cth]},
- {timetrap,{minutes,5}}].
+ {timetrap,{seconds,40}}].
all() ->
%% [{group,kex},{group,cipher}... etc
@@ -191,6 +191,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,24 +220,19 @@ interpolate(Is) ->
%%--------------------------------------------------------------------
%% Use the ssh client of the OS to connect
+
sshc_simple_exec(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,
+ " -C",
+ " -o UserKnownHostsFile=",KnownHosts,
+ " -o StrictHostKeyChecking=no",
" ",Host," 1+1."]),
ct:log("~p",[Cmd]),
- SshPort = open_port({spawn, Cmd}, [binary]),
- Expect = <<"2\n">>,
- receive
- {SshPort, {data,Expect}} ->
- ct:log("Got expected ~p from ~p",[Expect,SshPort]),
- catch port_close(SshPort),
- ok
- after ?TIMEOUT ->
- ct:fail("Did not receive answer")
- end.
+ OpenSsh = ssh_test_lib:open_port({spawn, Cmd}, [eof,exit_status]),
+ ssh_test_lib:rcv_expected({data,<<"2\n">>}, OpenSsh, ?TIMEOUT).
%%--------------------------------------------------------------------
%% Connect to the ssh server of the OS
@@ -348,13 +346,15 @@ 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].
diff --git a/lib/ssh/test/ssh_basic_SUITE.erl b/lib/ssh/test/ssh_basic_SUITE.erl
index 564fb66586..0fa44ded4f 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.
@@ -79,7 +79,7 @@
suite() ->
[{ct_hooks,[ts_install_cth]},
- {timetrap,{minutes,5}}].
+ {timetrap,{seconds,40}}].
all() ->
[app_test,
diff --git a/lib/ssh/test/ssh_benchmark_SUITE.erl b/lib/ssh/test/ssh_benchmark_SUITE.erl
index fe90da3028..d9be1a32b7 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.
@@ -104,7 +104,7 @@ init_sftp_dirs(Config) ->
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].
@@ -333,52 +333,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).
@@ -444,7 +456,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 +466,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 67d870bea4..0f757a0322 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,7 +38,7 @@
%% [{ct_hooks,[ts_install_cth]}].
suite() ->
- [{timetrap,{minutes,5}}].
+ [{timetrap,{seconds,40}}].
all() ->
[
@@ -314,11 +315,7 @@ 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) ->
+interrupted_send(Config) ->
PrivDir = ?config(priv_dir, Config),
UserDir = filename:join(PrivDir, nopubkey), % to make sure we don't use public-key-auth
file:make_dir(UserDir),
@@ -659,15 +656,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 +679,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 +691,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 +710,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).
diff --git a/lib/ssh/test/ssh_echo_server.erl b/lib/ssh/test/ssh_echo_server.erl
index 96c9aad135..ed9bbe1b67 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.
@@ -31,6 +31,7 @@
-export([init/1, handle_msg/2, handle_ssh_msg/2, terminate/2]).
init([N]) ->
+ ct:pal("Echo server: ~p",[self()]),
{ok, #state{n = N}}.
handle_msg({ssh_channel_up, ChannelId, ConnectionManager}, State) ->
diff --git a/lib/ssh/test/ssh_options_SUITE.erl b/lib/ssh/test/ssh_options_SUITE.erl
index e0ef3a4b05..4ca6a473fa 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.
@@ -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,5}}].
+ {timetrap,{seconds,30}}].
all() ->
[connectfun_disconnectfun_server,
@@ -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]),
@@ -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]),
@@ -992,7 +992,7 @@ 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
+ NegTimeOut = 2000, % ms
ct:log("Parallel: ~p",[Parallel]),
{_Pid, _Host, Port} = ssh_test_lib:daemon([{system_dir, SystemDir},{user_dir, UserDir},
@@ -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..c5cc36c45e 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.
diff --git a/lib/ssh/test/ssh_protocol_SUITE.erl b/lib/ssh/test/ssh_protocol_SUITE.erl
index cabdd35615..57404f40db 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
@@ -43,7 +43,7 @@
suite() ->
[{ct_hooks,[ts_install_cth]},
- {timetrap,{minutes,5}}].
+ {timetrap,{seconds,40}}].
all() ->
[{group,tool_tests},
diff --git a/lib/ssh/test/ssh_renegotiate_SUITE.erl b/lib/ssh/test/ssh_renegotiate_SUITE.erl
index fabe9a5829..f1a909cbd0 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.
@@ -31,8 +31,7 @@
%%--------------------------------------------------------------------
suite() -> [{ct_hooks,[ts_install_cth]},
- {timetrap,{minutes,15}}].
-
+ {timetrap,{seconds,40}}].
all() -> [{group,default_algs},
{group,aes_gcm}
@@ -83,7 +82,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,6 +105,8 @@ rekey(Config) ->
%%% Test rekeying by data volume
+rekey_limit() -> [{timetrap,{seconds,400}}].
+
rekey_limit(Config) ->
UserDir = ?config(priv_dir, Config),
DataFile = filename:join(UserDir, "rekey.data"),
@@ -235,7 +237,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 6066221fc7..f6d7be41d6 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.
@@ -36,8 +36,7 @@
suite() ->
[{ct_hooks,[ts_install_cth]},
- {timetrap,{minutes,5}}].
-
+ {timetrap,{seconds,40}}].
all() ->
[{group, not_unicode},
@@ -301,9 +300,9 @@ end_per_testcase(_, Config) ->
end_per_testcase(Config) ->
{Sftp, Connection} = ?config(sftp, Config),
- ssh_sftp:stop_channel(Sftp),
+ ok = ssh_sftp:stop_channel(Sftp),
catch ssh_sftp:stop_channel(?config(channel_pid2, Config)),
- ssh:close(Connection).
+ ok = ssh:close(Connection).
%%--------------------------------------------------------------------
%% Test Cases --------------------------------------------------------
@@ -365,7 +364,7 @@ write_file(Config) when is_list(Config) ->
{Sftp, _} = ?config(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).
%%--------------------------------------------------------------------
@@ -378,7 +377,7 @@ write_file_iolist(Config) when is_list(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,
@@ -397,7 +396,7 @@ write_big_file(Config) when is_list(Config) ->
{Sftp, _} = ?config(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).
%%--------------------------------------------------------------------
@@ -409,7 +408,7 @@ sftp_read_big_file(Config) when is_list(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).
%%--------------------------------------------------------------------
@@ -425,7 +424,7 @@ remove_file(Config) when is_list(Config) ->
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"}].
@@ -500,7 +499,7 @@ set_attributes(Config) when is_list(Config) ->
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").
%%--------------------------------------------------------------------
@@ -549,7 +548,7 @@ position(Config) when is_list(Config) ->
{Sftp, _} = ?config(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}),
@@ -577,7 +576,7 @@ pos_read(Config) when is_list(Config) ->
FileName = ?config(testfile, Config),
{Sftp, _} = ?config(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),
@@ -607,7 +606,7 @@ pos_write(Config) when is_list(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),
@@ -869,7 +868,7 @@ aes_cbc256_crypto_tar(Config) ->
{"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,
@@ -914,7 +913,7 @@ aes_ctr_stream_crypto_tar(Config) ->
{"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,
diff --git a/lib/ssh/test/ssh_sftpd_SUITE.erl b/lib/ssh/test/ssh_sftpd_SUITE.erl
index 687f327206..9385bd127d 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.
@@ -45,7 +45,7 @@
%%--------------------------------------------------------------------
suite() ->
- [{timetrap,{minutes,5}}].
+ [{timetrap,{seconds,40}}].
all() ->
[open_close_file,
@@ -105,7 +105,6 @@ init_per_testcase(TestCase, Config) ->
ClientUserDir = filename:join(PrivDir, nopubkey),
SystemDir = filename:join(?config(priv_dir, Config), system),
- Port = ssh_test_lib:inet_port(node()),
Options = [{system_dir, SystemDir},
{user_dir, PrivDir},
{user_passwords,[{?USER, ?PASSWD}]},
@@ -113,11 +112,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},
diff --git a/lib/ssh/test/ssh_sftpd_erlclient_SUITE.erl b/lib/ssh/test/ssh_sftpd_erlclient_SUITE.erl
index 84410f60e6..355ce6a8f5 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.
@@ -37,8 +37,7 @@
suite() ->
[{ct_hooks,[ts_install_cth]},
- {timetrap,{minutes,5}}].
-
+ {timetrap,{seconds,40}}].
all() ->
[close_file,
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 5c77fcf1ef..f8929b30ff 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,18 +22,24 @@
-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,{seconds,100}}].
+
all() ->
[default_tree, sshc_subtree, sshd_subtree, sshd_subtree_profile].
@@ -88,8 +94,8 @@ 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"}].
@@ -97,24 +103,27 @@ sshc_subtree(Config) when is_list(Config) ->
{_Pid, Host, Port} = ?config(server, Config),
UserDir = ?config(userdir, Config),
- [] = supervisor:which_children(sshc_sup),
+ ?wait_match([], 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"}].
@@ -126,14 +135,16 @@ sshd_subtree(Config) when is_list(Config) ->
{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"}].
@@ -148,14 +159,15 @@ sshd_subtree_profile(Config) when is_list(Config) ->
{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) ->
@@ -166,28 +178,31 @@ check_sshd_system_tree(Daemon, Config) ->
{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..c6541461a1 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,23 +42,33 @@ 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),
@@ -100,7 +103,7 @@ std_simple_sftp(Host, Port, Config, Opts) ->
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
@@ -690,3 +723,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..7cb7edeaa8
--- /dev/null
+++ b/lib/ssh/test/ssh_test_lib.hrl
@@ -0,0 +1,27 @@
+%%-------------------------------------------------------------------------
+%% 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 37885dfdef..2be75fd7f3 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.
@@ -34,7 +34,7 @@
%%--------------------------------------------------------------------
suite() ->
- [{timetrap,{minutes,5}}].
+ [{timetrap,{seconds,20}}].
all() ->
case os:find_executable("ssh") of
@@ -50,13 +50,15 @@ 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) ->
@@ -74,6 +76,7 @@ init_per_group(erlang_server, Config) ->
DataDir = ?config(data_dir, Config),
UserDir = ?config(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(
@@ -86,6 +89,7 @@ init_per_group(_, Config) ->
end_per_group(erlang_server, Config) ->
UserDir = ?config(priv_dir, Config),
ssh_test_lib:clean_dsa(UserDir),
+ ssh_test_lib:clean_rsa(UserDir),
Config;
end_per_group(_, Config) ->
Config.
@@ -93,6 +97,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) ->
@@ -347,14 +353,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) ->
+ 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 = ?config(data_dir, Config),
PrivDir = ?config(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 +378,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).
%%--------------------------------------------------------------------
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 006483d3ee..06bef2455e 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.
@@ -39,7 +39,7 @@
%%% CommonTest callbacks
%%%
suite() ->
- [{timetrap,{minutes,5}}].
+ [{timetrap,{seconds,180}}].
all() ->
[
@@ -146,7 +146,8 @@ setup_server_client(#state{config=Config} = State) ->
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 41b42d454b..b165928877 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
+SSH_VSN = 4.3
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 61d1c8355a..e9b523d9e1 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,6 +28,171 @@
<p>This document describes the changes made to the SSL application.</p>
+<section><title>SSL 7.3.2</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ Correct cipher suites conversion and gaurd expression.
+ Caused problems with GCM cipher suites and client side
+ option to set signature_algorithms extention values.</p>
+ <p>
+ Own Id: OTP-13525</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>SSL 7.3.1</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ Corrections to cipher suite handling using the 3 and 4
+ tuple format in addition to commit
+ 89d7e21cf4ae988c57c8ef047bfe85127875c70c</p>
+ <p>
+ Own Id: OTP-13511</p>
+ </item>
+ </list>
+ </section>
+
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ Make values for the TLS-1.2 signature_algorithms
+ extension configurable</p>
+ <p>
+ Own Id: OTP-13261</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>SSL 7.3</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ Make sure there is only one poller validator at a time
+ for validating the session cache.</p>
+ <p>
+ Own Id: OTP-13185</p>
+ </item>
+ <item>
+ <p>
+ A timing related issue could cause ssl to hang,
+ especially happened with newer versions of OpenSSL in
+ combination with ECC ciphers.</p>
+ <p>
+ Own Id: OTP-13253</p>
+ </item>
+ <item>
+ <p>
+ Work around a race condition in the TLS distribution
+ start.</p>
+ <p>
+ Own Id: OTP-13268</p>
+ </item>
+ <item>
+ <p>
+ Big handshake messages are now correctly fragmented in
+ the TLS record layer.</p>
+ <p>
+ Own Id: OTP-13306</p>
+ </item>
+ <item>
+ <p>
+ Improve portability of ECC tests in Crypto and SSL for
+ "exotic" OpenSSL versions.</p>
+ <p>
+ Own Id: OTP-13311</p>
+ </item>
+ <item>
+ <p>
+ Certificate extensions marked as critical are ignored
+ when using verify_none</p>
+ <p>
+ Own Id: OTP-13377</p>
+ </item>
+ <item>
+ <p>
+ If a certificate doesn't contain a CRL Distribution
+ Points extension, and the relevant CRL is not in the
+ cache, and the <c>crl_check</c> option is not set to
+ <c>best_effort</c> , the revocation check should fail.</p>
+ <p>
+ Own Id: OTP-13378</p>
+ </item>
+ <item>
+ <p>
+ Enable TLS distribution over IPv6</p>
+ <p>
+ Own Id: OTP-13391</p>
+ </item>
+ </list>
+ </section>
+
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ Improve error reporting for TLS distribution</p>
+ <p>
+ Own Id: OTP-13219</p>
+ </item>
+ <item>
+ <p>
+ Include options from connect, listen and accept in
+ <c>connection_information/1,2</c></p>
+ <p>
+ Own Id: OTP-13232</p>
+ </item>
+ <item>
+ <p>
+ Allow adding extra options for outgoing TLS distribution
+ connections, as supported for plain TCP connections.</p>
+ <p>
+ Own Id: OTP-13285</p>
+ </item>
+ <item>
+ <p>
+ Use loopback as server option in TLS-distribution module</p>
+ <p>
+ Own Id: OTP-13300</p>
+ </item>
+ <item>
+ <p>
+ Verify certificate signature against original certificate
+ binary.</p>
+ <p>
+ This avoids bugs due to encoding errors when re-encoding
+ a decode certificate. As there exists several decode step
+ and using of different ASN.1 specification this is a risk
+ worth avoiding.</p>
+ <p>
+ Own Id: OTP-13334</p>
+ </item>
+ <item>
+ <p>
+ Use <c>application:ensure_all_started/2</c> instead of
+ hard-coding dependencies</p>
+ <p>
+ Own Id: OTP-13363</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
<section><title>SSL 7.2</title>
<section><title>Fixed Bugs and Malfunctions</title>
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 a76d46ee9b..154664d855 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>
@@ -421,7 +421,6 @@ fun(srp, Username :: string(), UserState :: term()) ->
<warning><p>Using <c>{padding_check, boolean()}</c> makes TLS
vulnerable to the Poodle attack.</p></warning>
-
</section>
<section>
@@ -522,9 +521,43 @@ fun(srp, Username :: string(), UserState :: term()) ->
be supported by the server for the prevention to work.
</p></warning>
</item>
- </taglist>
+ <tag><marker id="client_signature_algs"/><c>{signature_algs, [{hash(), ecdsa | rsa | dsa}]}</c></tag>
+ <item>
+ <p>In addition to the algorithms negotiated by the cipher
+ suite used for key exchange, payload encryption, message
+ authentication and pseudo random calculation, the TLS signature
+ algorithm extension <url
+ href="http://www.ietf.org/rfc/rfc5246.txt">Section 7.4.1.4.1 in RFC 5246</url> may be
+ used, from TLS 1.2, to negotiate which signature algorithm to use during the
+ 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
+
+ <code>[
+%% SHA2
+{sha512, ecdsa},
+{sha512, rsa},
+{sha384, ecdsa},
+{sha384, rsa},
+{sha256, ecdsa},
+{sha256, rsa},
+{sha224, ecdsa},
+{sha224, rsa},
+%% SHA
+{sha, ecdsa},
+{sha, rsa},
+{sha, dsa},
+]</code>
+
+ The algorithms should be in the preferred order.
+ Selected signature algorithm can restrict which hash functions
+ that may be selected. Default support for {md5, rsa} removed in ssl-8.0
+ </p>
+ </item>
+ </taglist>
</section>
-
+
<section>
<title>SSL OPTION DESCRIPTIONS - SERVER SIDE</title>
@@ -617,7 +650,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.
@@ -626,11 +659,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>
@@ -651,6 +684,14 @@ fun(srp, Username :: string(), UserState :: term()) ->
<item>If true, use the server's preference for cipher selection. If false
(the default), use the client's preference.
</item>
+
+ <tag><c>{signature_algs, [{hash(), ecdsa | rsa | dsa}]}</c></tag>
+ <item><p> The algorithms specified by
+ this option will be the ones accepted by the server in a signature algorithm
+ negotiation, introduced in TLS-1.2. The algorithms will also be offered to the client if a
+ client certificate is requested. For more details see the <seealso marker="#client_signature_algs">corresponding client option</seealso>.
+ </p> </item>
+
</taglist>
</section>
@@ -710,7 +751,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>
@@ -1023,7 +1064,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 d05ece3971..daa06a40fc 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>
diff --git a/lib/ssl/doc/src/ssl_distribution.xml b/lib/ssl/doc/src/ssl_distribution.xml
index a347ce5ae6..7c00b4eae2 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>
@@ -271,4 +271,27 @@ Eshell V5.0 (abort with ^G)
<p>The <c>init:get_arguments()</c> call verifies that the correct
arguments are supplied to the emulator.</p>
</section>
+
+ <section>
+ <title>Using SSL distribution over IPv6</title>
+ <p>It is possible to use SSL distribution over IPv6 instead of
+ IPv4. To do this, pass the option <c>-proto_dist inet6_tls</c>
+ instead of <c>-proto_dist inet_tls</c> when starting Erlang,
+ either on the command line or in the <c>ERL_FLAGS</c> environment
+ variable.</p>
+
+ <p>An example command line with this option would look like this:</p>
+ <code type="none">
+$ erl -boot /home/me/ssl/start_ssl -proto_dist inet6_tls
+ -ssl_dist_opt server_certfile "/home/me/ssl/erlserver.pem"
+ -ssl_dist_opt server_secure_renegotiate true client_secure_renegotiate true
+ -sname ssl_test
+Erlang (BEAM) emulator version 5.0 [source]
+
+Eshell V5.0 (abort with ^G)
+(ssl_test@myhost)1> </code>
+
+ <p>A node started in this way will only be able to communicate with
+ other nodes using SSL distribution over IPv6.</p>
+ </section>
</chapter>
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 790328dc45..7a7a373487 100644
--- a/lib/ssl/src/Makefile
+++ b/lib/ssl/src/Makefile
@@ -51,6 +51,7 @@ MODULES= \
ssl_dist_sup\
ssl_sup \
inet_tls_dist \
+ inet6_tls_dist \
ssl_certificate\
ssl_pkix_db\
ssl_cipher \
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 153d3fef48..82d6faee42 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,37 +36,38 @@
%% 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,
+-export([%%renegotiate/2,
send_handshake/2, send_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
]).
-%% 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
@@ -141,78 +142,74 @@ 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);
-
-hello(Hello = #client_hello{client_version = ClientVersion,
- extensions = #hello_extensions{hash_signs = HashSigns}},
- State = #state{connection_states = ConnectionStates0,
- port = Port, session = #session{own_certificate = Cert} = Session0,
- renegotiation = {Renegotiation, _},
- session_cache = Cache,
- session_cache_cb = CacheCb,
- ssl_options = SslOpts}) ->
+ 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(internal, #client_hello{client_version = ClientVersion} = Hello,
+ #state{connection_states = ConnectionStates0,
+ port = Port, session = #session{own_certificate = Cert} = Session0,
+ renegotiation = {Renegotiation, _},
+ session_cache = Cache,
+ session_cache_cb = CacheCb,
+ ssl_options = SslOpts} = State) ->
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_handshake:select_hashsign(HashSigns, Cert,
- dtls_v1:corresponding_tls_version(Version)),
- ssl_connection:hello({common_client_hello, Type, ServerHelloExt, HashSign},
+ elliptic_curves = EllipticCurves} = ServerHelloExt, HashSign} ->
+ ssl_connection:hello(internal, {common_client_hello, Type, ServerHelloExt, HashSign},
State#state{connection_states = ConnectionStates,
negotiated_version = Version,
session = Session,
@@ -220,7 +217,7 @@ hello(Hello = #client_hello{client_version = ClientVersion,
#alert{} = Alert ->
handle_own_alert(Alert, ClientVersion, hello, State)
end;
-hello(Hello,
+hello(internal, Hello,
#state{connection_states = ConnectionStates0,
negotiated_version = ReqVersion,
role = client,
@@ -233,20 +230,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,
@@ -260,40 +267,30 @@ 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);
+ 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
@@ -304,26 +301,25 @@ 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) ->
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
@@ -338,7 +334,10 @@ 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
@@ -375,96 +374,28 @@ next_record(#state{socket = Socket,
next_record(State) ->
{no_record, State}.
-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)
- 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
- 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.
send_flight(Fragments, #state{transport_cb = Transport, socket = Socket,
protocol_buffers = _PBuffers} = State) ->
@@ -517,21 +448,23 @@ 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
}.
read_application_data(_,State) ->
{#ssl_tls{fragment = <<"place holder">>}, State}.
-
+
+next_tls_record(<<>>, _State) ->
+ #alert{}; %% Place holder
next_tls_record(_, State) ->
{#ssl_tls{fragment = <<"place holder">>}, State}.
-get_timeout(_) -> %% Place holder
- infinity.
-
-next_state_connection(_, State) -> %% Place holder
- {next_state, connection, State, get_timeout(State)}.
-
sequence(_) ->
%%TODO real imp
1.
+next_record_if_active(State =
+ #state{socket_options =
+ #socket_options{active = false}}) ->
+ {no_record ,State};
+
+next_record_if_active(State) ->
+ next_record(State).
diff --git a/lib/ssl/src/dtls_connection.hrl b/lib/ssl/src/dtls_connection.hrl
index b74801b50a..69137b520b 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.
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 22c0ce7a13..4f48704cac 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.
@@ -94,7 +94,10 @@ hello(#server_hello{server_version = Version, random = Random,
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.
- {ClientVersion, {new, #session{}}, ConnectionStates, #hello_extensions{}}.
+ 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,
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..e79e1cede0 100644
--- a/lib/ssl/src/dtls_record.erl
+++ b/lib/ssl/src/dtls_record.erl
@@ -39,7 +39,7 @@
-export([encode_plain_text/4, encode_handshake/3, encode_change_cipher_spec/2]).
%% Protocol version handling
--export([protocol_version/1, lowest_protocol_version/2,
+-export([protocol_version/1, lowest_protocol_version/2, lowest_protocol_version/1,
highest_protocol_version/1, supported_protocol_versions/0,
is_acceptable_version/2]).
@@ -254,6 +254,18 @@ 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().
%%
@@ -302,6 +314,12 @@ supported_protocol_versions([]) ->
supported_protocol_versions([_|_] = Vsns) ->
Vsns.
+%% highest_protocol_version() ->
+%% highest_protocol_version(supported_protocol_versions()).
+
+lowest_protocol_version() ->
+ lowest_protocol_version(supported_protocol_versions()).
+
supported_connection_protocol_versions([]) ->
?ALL_DATAGRAM_SUPPORTED_VERSIONS.
@@ -421,3 +439,8 @@ mac_hash(Version, MacAlg, MacSecret, SeqNo, Type, Length, Fragment) ->
calc_aad(Type, {MajVer, MinVer}, Epoch, SeqNo) ->
NewSeq = (Epoch bsl 48) + SeqNo,
<<NewSeq:64/integer, ?BYTE(Type), ?BYTE(MajVer), ?BYTE(MinVer)>>.
+
+lowest_list_protocol_version(Ver, []) ->
+ Ver;
+lowest_list_protocol_version(Ver1, [Ver2 | Rest]) ->
+ lowest_list_protocol_version(lowest_protocol_version(Ver1, Ver2), Rest).
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/inet6_tls_dist.erl b/lib/ssl/src/inet6_tls_dist.erl
new file mode 100644
index 0000000000..ffd7296f93
--- /dev/null
+++ b/lib/ssl/src/inet6_tls_dist.erl
@@ -0,0 +1,46 @@
+%%
+%% %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(inet6_tls_dist).
+
+-export([childspecs/0, listen/1, accept/1, accept_connection/5,
+ setup/5, close/1, select/1]).
+
+childspecs() ->
+ inet_tls_dist:childspecs().
+
+select(Node) ->
+ inet_tls_dist:gen_select(inet6_tcp, Node).
+
+listen(Name) ->
+ inet_tls_dist:gen_listen(inet6_tcp, Name).
+
+accept(Listen) ->
+ inet_tls_dist:gen_accept(inet6_tcp, Listen).
+
+accept_connection(AcceptPid, Socket, MyNode, Allowed, SetupTime) ->
+ inet_tls_dist:gen_accept_connection(inet6_tcp, AcceptPid, Socket, MyNode, Allowed, SetupTime).
+
+setup(Node, Type, MyNode, LongOrShortNames,SetupTime) ->
+ inet_tls_dist:gen_setup(inet6_tcp, Node, Type, MyNode, LongOrShortNames,SetupTime).
+
+close(Socket) ->
+ inet_tls_dist:close(Socket).
diff --git a/lib/ssl/src/inet_tls_dist.erl b/lib/ssl/src/inet_tls_dist.erl
index 6fe99a81c5..3481e89af0 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.
@@ -24,6 +24,10 @@
-export([childspecs/0, listen/1, accept/1, accept_connection/5,
setup/5, close/1, select/1, is_node_name/1]).
+%% Generalized dist API
+-export([gen_listen/2, gen_accept/2, gen_accept_connection/6,
+ gen_setup/6, gen_select/2]).
+
-include_lib("kernel/include/net_address.hrl").
-include_lib("kernel/include/dist.hrl").
-include_lib("kernel/include/dist_util.hrl").
@@ -33,9 +37,15 @@ childspecs() ->
permanent, infinity, supervisor, [ssl_dist_sup]}]}.
select(Node) ->
+ gen_select(inet_tcp, Node).
+
+gen_select(Driver, Node) ->
case split_node(atom_to_list(Node), $@, []) of
- [_,_Host] ->
- true;
+ [_, Host] ->
+ case inet:getaddr(Host, Driver:family()) of
+ {ok, _} -> true;
+ _ -> false
+ end;
_ ->
false
end.
@@ -46,23 +56,35 @@ is_node_name(_) ->
false.
listen(Name) ->
- ssl_tls_dist_proxy:listen(Name).
+ gen_listen(inet_tcp, Name).
+
+gen_listen(Driver, Name) ->
+ ssl_tls_dist_proxy:listen(Driver, Name).
accept(Listen) ->
- ssl_tls_dist_proxy:accept(Listen).
+ gen_accept(inet_tcp, Listen).
+
+gen_accept(Driver, Listen) ->
+ ssl_tls_dist_proxy:accept(Driver, Listen).
accept_connection(AcceptPid, Socket, MyNode, Allowed, SetupTime) ->
+ gen_accept_connection(inet_tcp, AcceptPid, Socket, MyNode, Allowed, SetupTime).
+
+gen_accept_connection(Driver, AcceptPid, Socket, MyNode, Allowed, SetupTime) ->
Kernel = self(),
- spawn_link(fun() -> do_accept(Kernel, AcceptPid, Socket,
+ spawn_link(fun() -> do_accept(Driver, Kernel, AcceptPid, Socket,
MyNode, Allowed, SetupTime) end).
setup(Node, Type, MyNode, LongOrShortNames,SetupTime) ->
+ gen_setup(inet_tcp, Node, Type, MyNode, LongOrShortNames,SetupTime).
+
+gen_setup(Driver, Node, Type, MyNode, LongOrShortNames,SetupTime) ->
Kernel = self(),
- spawn_opt(fun() -> do_setup(Kernel, Node, Type, MyNode, LongOrShortNames, SetupTime) end, [link, {priority, max}]).
+ spawn_opt(fun() -> do_setup(Driver, Kernel, Node, Type, MyNode, LongOrShortNames, SetupTime) end, [link, {priority, max}]).
-do_setup(Kernel, Node, Type, MyNode, LongOrShortNames, SetupTime) ->
- [Name, Address] = splitnode(Node, LongOrShortNames),
- case inet:getaddr(Address, inet) of
+do_setup(Driver, Kernel, Node, Type, MyNode, LongOrShortNames, SetupTime) ->
+ [Name, Address] = splitnode(Driver, Node, LongOrShortNames),
+ case inet:getaddr(Address, Driver:family()) of
{ok, Ip} ->
Timer = dist_util:start_timer(SetupTime),
case erl_epmd:port_please(Name, Ip) of
@@ -70,7 +92,7 @@ do_setup(Kernel, Node, Type, MyNode, LongOrShortNames, SetupTime) ->
?trace("port_please(~p) -> version ~p~n",
[Node,Version]),
dist_util:reset_timer(Timer),
- case ssl_tls_dist_proxy:connect(Ip, TcpPort) of
+ case ssl_tls_dist_proxy:connect(Driver, Ip, TcpPort) of
{ok, Socket} ->
HSData = connect_hs_data(Kernel, Node, MyNode, Socket,
Timer, Version, Ip, TcpPort, Address,
@@ -99,12 +121,12 @@ close(Socket) ->
gen_tcp:close(Socket),
ok.
-do_accept(Kernel, AcceptPid, Socket, MyNode, Allowed, SetupTime) ->
+do_accept(Driver, Kernel, AcceptPid, Socket, MyNode, Allowed, SetupTime) ->
process_flag(priority, max),
receive
{AcceptPid, controller} ->
Timer = dist_util:start_timer(SetupTime),
- case check_ip(Socket) of
+ case check_ip(Driver, Socket) of
true ->
HSData = accept_hs_data(Kernel, MyNode, Socket, Timer, Allowed),
dist_util:handshake_other_started(HSData);
@@ -118,12 +140,12 @@ do_accept(Kernel, AcceptPid, Socket, MyNode, Allowed, SetupTime) ->
%% Do only accept new connection attempts from nodes at our
%% own LAN, if the check_ip environment parameter is true.
%% ------------------------------------------------------------
-check_ip(Socket) ->
+check_ip(Driver, Socket) ->
case application:get_env(check_ip) of
{ok, true} ->
case get_ifs(Socket) of
{ok, IFs, IP} ->
- check_ip(IFs, IP);
+ check_ip(Driver, IFs, IP);
_ ->
?shutdown(no_node)
end;
@@ -142,37 +164,21 @@ get_ifs(Socket) ->
Error
end.
-check_ip([{OwnIP, _, Netmask}|IFs], PeerIP) ->
- case {mask(Netmask, PeerIP), mask(Netmask, OwnIP)} of
+check_ip(Driver, [{OwnIP, _, Netmask}|IFs], PeerIP) ->
+ case {Driver:mask(Netmask, PeerIP), Driver:mask(Netmask, OwnIP)} of
{M, M} -> true;
_ -> check_ip(IFs, PeerIP)
end;
-check_ip([], PeerIP) ->
+check_ip(_Driver, [], PeerIP) ->
{false, PeerIP}.
-mask({M1,M2,M3,M4}, {IP1,IP2,IP3,IP4}) ->
- {M1 band IP1,
- M2 band IP2,
- M3 band IP3,
- M4 band IP4};
-
-mask({M1,M2,M3,M4, M5, M6, M7, M8}, {IP1,IP2,IP3,IP4, IP5, IP6, IP7, IP8}) ->
- {M1 band IP1,
- M2 band IP2,
- M3 band IP3,
- M4 band IP4,
- M5 band IP5,
- M6 band IP6,
- M7 band IP7,
- M8 band IP8}.
-
%% If Node is illegal terminate the connection setup!!
-splitnode(Node, LongOrShortNames) ->
+splitnode(Driver, Node, LongOrShortNames) ->
case split_node(atom_to_list(Node), $@, []) of
[Name|Tail] when Tail =/= [] ->
Host = lists:append(Tail),
- check_node(Name, Node, Host, LongOrShortNames);
+ check_node(Driver, Name, Node, Host, LongOrShortNames);
[_] ->
error_logger:error_msg("** Nodename ~p illegal, no '@' character **~n",
[Node]),
@@ -182,15 +188,20 @@ splitnode(Node, LongOrShortNames) ->
?shutdown(Node)
end.
-check_node(Name, Node, Host, LongOrShortNames) ->
+check_node(Driver, Name, Node, Host, LongOrShortNames) ->
case split_node(Host, $., []) of
[_] when LongOrShortNames == longnames ->
- error_logger:error_msg("** System running to use "
- "fully qualified "
- "hostnames **~n"
- "** Hostname ~s is illegal **~n",
- [Host]),
- ?shutdown(Node);
+ case Driver:parse_address(Host) of
+ {ok, _} ->
+ [Name, Host];
+ _ ->
+ error_logger:error_msg("** System running to use "
+ "fully qualified "
+ "hostnames **~n"
+ "** Hostname ~s is illegal **~n",
+ [Host]),
+ ?shutdown(Node)
+ end;
[_, _ | _] when LongOrShortNames == shortnames ->
error_logger:error_msg("** System NOT running to use fully qualified "
"hostnames **~n"
diff --git a/lib/ssl/src/ssl.app.src b/lib/ssl/src/ssl.app.src
index 619ab7b610..1a2bf90ccf 100644
--- a/lib/ssl/src/ssl.app.src
+++ b/lib/ssl/src/ssl.app.src
@@ -31,6 +31,7 @@
ssl_listen_tracker_sup,
%% Erlang Distribution over SSL/TLS
inet_tls_dist,
+ inet6_tls_dist,
ssl_tls_dist_proxy,
ssl_dist_sup,
%% SSL/TLS session handling
diff --git a/lib/ssl/src/ssl.appup.src b/lib/ssl/src/ssl.appup.src
index 057906bcb3..11728128c4 100644
--- a/lib/ssl/src/ssl.appup.src
+++ b/lib/ssl/src/ssl.appup.src
@@ -1,9 +1,6 @@
%% -*- erlang -*-
{"%VSN%",
[
- {<<"7\\.2">>, [{load_module, tls_connection, soft_purge, soft_purge, []},
- {load_module, ssl_tls_dist_proxy, 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\\.2">>, [{load_module, tls_connection, soft_purge, soft_purge, []},
- {load_module, ssl_tls_dist_proxy, soft_purge, soft_purge, []}
- ]},
{<<"7\\..*">>, [{restart_application, ssl}]},
{<<"6\\..*">>, [{restart_application, ssl}]},
{<<"5\\..*">>, [{restart_application, ssl}]},
diff --git a/lib/ssl/src/ssl.erl b/lib/ssl/src/ssl.erl
index 780bef5877..51732b4a59 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.
@@ -42,7 +42,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 +400,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()]) ->
@@ -581,25 +580,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},
@@ -700,6 +693,10 @@ handle_options(Opts0, Role) ->
srp_identity = handle_option(srp_identity, Opts, undefined),
ciphers = handle_cipher_option(proplists:get_value(ciphers, Opts, []),
RecordCb:highest_protocol_version(Versions)),
+ signature_algs = handle_hashsigns_option(proplists:get_value(signature_algs, Opts,
+ default_option_role(server,
+ tls_v1:default_signature_algs(Versions), Role)),
+ RecordCb:highest_protocol_version(Versions)),
%% Server side option
reuse_session = handle_option(reuse_session, Opts, ReuseSessionFun),
reuse_sessions = handle_option(reuse_sessions, Opts, true),
@@ -708,7 +705,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),
@@ -749,7 +746,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],
+ fallback, signature_algs],
SockOpts = lists:foldl(fun(Key, PropList) ->
proplists:delete(Key, PropList)
@@ -897,10 +894,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)
@@ -989,6 +989,18 @@ validate_option(crl_cache, {Cb, {_Handle, Options}} = Value) when is_atom(Cb) an
validate_option(Opt, Value) ->
throw({error, {options, {Opt, Value}}}).
+handle_hashsigns_option(Value, {Major, Minor} = Version) when is_list(Value)
+ andalso Major >= 3 andalso Minor >= 3->
+ case tls_v1:signature_algs(Version, Value) of
+ [] ->
+ throw({error, {options, no_supported_algorithms, {signature_algs, Value}}});
+ _ ->
+ Value
+ end;
+handle_hashsigns_option(_, {Major, Minor} = Version) when Major >= 3 andalso Minor >= 3->
+ handle_hashsigns_option(tls_v1:default_signature_algs(Version), Version);
+handle_hashsigns_option(_, _Version) ->
+ undefined.
validate_options([]) ->
[];
@@ -1089,10 +1101,7 @@ binary_cipher_suites(Version, []) ->
%% Defaults to all supported suites that does
%% not require explicit configuration
ssl_cipher:filter_suites(ssl_cipher:suites(Version));
-binary_cipher_suites(Version, [{_,_,_,_}| _] = Ciphers0) -> %% Backwards compatibility
- Ciphers = [{KeyExchange, Cipher, Hash} || {KeyExchange, Cipher, Hash, _} <- Ciphers0],
- binary_cipher_suites(Version, Ciphers);
-binary_cipher_suites(Version, [{_,_,_}| _] = Ciphers0) ->
+binary_cipher_suites(Version, [Tuple|_] = Ciphers0) when is_tuple(Tuple) ->
Ciphers = [ssl_cipher:suite(C) || C <- Ciphers0],
binary_cipher_suites(Version, Ciphers);
@@ -1285,6 +1294,13 @@ new_ssl_options([{server_name_indication, Value} | Rest], #ssl_options{} = Opts,
new_ssl_options(Rest, Opts#ssl_options{server_name_indication = validate_option(server_name_indication, Value)}, RecordCB);
new_ssl_options([{honor_cipher_order, Value} | Rest], #ssl_options{} = Opts, RecordCB) ->
new_ssl_options(Rest, Opts#ssl_options{honor_cipher_order = validate_option(honor_cipher_order, Value)}, RecordCB);
+new_ssl_options([{signature_algs, Value} | Rest], #ssl_options{} = Opts, RecordCB) ->
+ new_ssl_options(Rest,
+ Opts#ssl_options{signature_algs =
+ handle_hashsigns_option(Value,
+ RecordCB:highest_protocol_version())},
+ RecordCB);
+
new_ssl_options([{Key, Value} | _Rest], #ssl_options{}, _) ->
throw({error, {options, {Key, Value}}}).
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 d737f74aa3..dc0a0c2cc4 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.
@@ -39,16 +39,19 @@
suite/1, suites/1, all_suites/1,
ec_keyed_suites/0, anonymous_suites/1, psk_suites/1, srp_suites/0,
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]).
+ 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,
- key_algo/0]).
+ hash/0, key_algo/0, sign_algo/0]).
-type cipher() :: null |rc4_128 | idea_cbc | des40_cbc | des_cbc | '3des_ede_cbc'
| aes_128_cbc | aes_256_cbc | aes_128_gcm | aes_256_gcm | chacha20_poly1305.
-type hash() :: null | sha | md5 | sha224 | sha256 | sha384 | sha512.
--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 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 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}.
@@ -101,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}.
@@ -852,17 +855,17 @@ suite({rsa_psk, aes_256_cbc,sha}) ->
%%% TLS 1.2 PSK Cipher Suites RFC 5487
-suite({psk, aes_128_gcm, null}) ->
+suite({psk, aes_128_gcm, null, sha256}) ->
?TLS_PSK_WITH_AES_128_GCM_SHA256;
-suite({psk, aes_256_gcm, null}) ->
+suite({psk, aes_256_gcm, null, sha384}) ->
?TLS_PSK_WITH_AES_256_GCM_SHA384;
-suite({dhe_psk, aes_128_gcm, null}) ->
+suite({dhe_psk, aes_128_gcm, null, sha256}) ->
?TLS_DHE_PSK_WITH_AES_128_GCM_SHA256;
-suite({dhe_psk, aes_256_gcm, null}) ->
+suite({dhe_psk, aes_256_gcm, null, sha384}) ->
?TLS_DHE_PSK_WITH_AES_256_GCM_SHA384;
-suite({rsa_psk, aes_128_gcm, null}) ->
+suite({rsa_psk, aes_128_gcm, null, sha256}) ->
?TLS_RSA_PSK_WITH_AES_128_GCM_SHA256;
-suite({rsa_psk, aes_256_gcm, null}) ->
+suite({rsa_psk, aes_256_gcm, null, sha384}) ->
?TLS_RSA_PSK_WITH_AES_256_GCM_SHA384;
suite({psk, aes_128_cbc, sha256}) ->
@@ -969,74 +972,74 @@ suite({ecdh_anon, aes_256_cbc, sha}) ->
?TLS_ECDH_anon_WITH_AES_256_CBC_SHA;
%%% RFC 5289 EC TLS suites
-suite({ecdhe_ecdsa, aes_128_cbc, sha256}) ->
+suite({ecdhe_ecdsa, aes_128_cbc, sha256, sha256}) ->
?TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256;
-suite({ecdhe_ecdsa, aes_256_cbc, sha384}) ->
+suite({ecdhe_ecdsa, aes_256_cbc, sha384, sha384}) ->
?TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384;
-suite({ecdh_ecdsa, aes_128_cbc, sha256}) ->
+suite({ecdh_ecdsa, aes_128_cbc, sha256, sha256}) ->
?TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256;
-suite({ecdh_ecdsa, aes_256_cbc, sha384}) ->
+suite({ecdh_ecdsa, aes_256_cbc, sha384, sha384}) ->
?TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384;
-suite({ecdhe_rsa, aes_128_cbc, sha256}) ->
+suite({ecdhe_rsa, aes_128_cbc, sha256, sha256}) ->
?TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256;
-suite({ecdhe_rsa, aes_256_cbc, sha384}) ->
+suite({ecdhe_rsa, aes_256_cbc, sha384, sha384}) ->
?TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384;
-suite({ecdh_rsa, aes_128_cbc, sha256}) ->
+suite({ecdh_rsa, aes_128_cbc, sha256, sha256}) ->
?TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256;
-suite({ecdh_rsa, aes_256_cbc, sha384}) ->
+suite({ecdh_rsa, aes_256_cbc, sha384, sha384}) ->
?TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384;
%% RFC 5288 AES-GCM Cipher Suites
-suite({rsa, aes_128_gcm, null}) ->
+suite({rsa, aes_128_gcm, null, sha256}) ->
?TLS_RSA_WITH_AES_128_GCM_SHA256;
-suite({rsa, aes_256_gcm, null}) ->
+suite({rsa, aes_256_gcm, null, sha384}) ->
?TLS_RSA_WITH_AES_256_GCM_SHA384;
-suite({dhe_rsa, aes_128_gcm, null}) ->
+suite({dhe_rsa, aes_128_gcm, null, sha256}) ->
?TLS_DHE_RSA_WITH_AES_128_GCM_SHA256;
-suite({dhe_rsa, aes_256_gcm, null}) ->
+suite({dhe_rsa, aes_256_gcm, null, sha384}) ->
?TLS_DHE_RSA_WITH_AES_256_GCM_SHA384;
-suite({dh_rsa, aes_128_gcm, null}) ->
+suite({dh_rsa, aes_128_gcm, null, sha256}) ->
?TLS_DH_RSA_WITH_AES_128_GCM_SHA256;
-suite({dh_rsa, aes_256_gcm, null}) ->
+suite({dh_rsa, aes_256_gcm, null, sha384}) ->
?TLS_DH_RSA_WITH_AES_256_GCM_SHA384;
-suite({dhe_dss, aes_128_gcm, null}) ->
+suite({dhe_dss, aes_128_gcm, null, sha256}) ->
?TLS_DHE_DSS_WITH_AES_128_GCM_SHA256;
-suite({dhe_dss, aes_256_gcm, null}) ->
+suite({dhe_dss, aes_256_gcm, null, sha384}) ->
?TLS_DHE_DSS_WITH_AES_256_GCM_SHA384;
-suite({dh_dss, aes_128_gcm, null}) ->
+suite({dh_dss, aes_128_gcm, null, sha256}) ->
?TLS_DH_DSS_WITH_AES_128_GCM_SHA256;
-suite({dh_dss, aes_256_gcm, null}) ->
+suite({dh_dss, aes_256_gcm, null, sha384}) ->
?TLS_DH_DSS_WITH_AES_256_GCM_SHA384;
-suite({dh_anon, aes_128_gcm, null}) ->
+suite({dh_anon, aes_128_gcm, null, sha256}) ->
?TLS_DH_anon_WITH_AES_128_GCM_SHA256;
-suite({dh_anon, aes_256_gcm, null}) ->
+suite({dh_anon, aes_256_gcm, null, sha384}) ->
?TLS_DH_anon_WITH_AES_256_GCM_SHA384;
%% RFC 5289 ECC AES-GCM Cipher Suites
-suite({ecdhe_ecdsa, aes_128_gcm, null}) ->
+suite({ecdhe_ecdsa, aes_128_gcm, null, sha256}) ->
?TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256;
-suite({ecdhe_ecdsa, aes_256_gcm, null}) ->
+suite({ecdhe_ecdsa, aes_256_gcm, null, sha384}) ->
?TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384;
-suite({ecdh_ecdsa, aes_128_gcm, null}) ->
+suite({ecdh_ecdsa, aes_128_gcm, null, sha256}) ->
?TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256;
-suite({ecdh_ecdsa, aes_256_gcm, null}) ->
+suite({ecdh_ecdsa, aes_256_gcm, null, sha384}) ->
?TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384;
-suite({ecdhe_rsa, aes_128_gcm, null}) ->
+suite({ecdhe_rsa, aes_128_gcm, null, sha256}) ->
?TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256;
-suite({ecdhe_rsa, aes_256_gcm, null}) ->
+suite({ecdhe_rsa, aes_256_gcm, null, sha384}) ->
?TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384;
-suite({ecdh_rsa, aes_128_gcm, null}) ->
+suite({ecdh_rsa, aes_128_gcm, null, sha256}) ->
?TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256;
-suite({ecdh_rsa, aes_256_gcm, null}) ->
+suite({ecdh_rsa, aes_256_gcm, null, sha384}) ->
?TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384;
%% draft-agl-tls-chacha20poly1305-04 Chacha20/Poly1305 Suites
-suite({ecdhe_rsa, chacha20_poly1305, null}) ->
+suite({ecdhe_rsa, chacha20_poly1305, null, sha256}) ->
?TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256;
-suite({ecdhe_ecdsa, chacha20_poly1305, null}) ->
+suite({ecdhe_ecdsa, chacha20_poly1305, null, sha256}) ->
?TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256;
-suite({dhe_rsa, chacha20_poly1305, null}) ->
+suite({dhe_rsa, chacha20_poly1305, null, sha256}) ->
?TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256.
%%--------------------------------------------------------------------
@@ -1471,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
%%--------------------------------------------------------------------
@@ -1711,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),
diff --git a/lib/ssl/src/ssl_connection.erl b/lib/ssl/src/ssl_connection.erl
index ec7d086934..089b3615c6 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,65 +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);
-
-hello(#hello_request{}, #state{role = client} = State0, Connection) ->
- {Record, State} = Connection:next_record(State0),
- Connection:next_state(hello, hello, Record, State);
-
-hello({common_client_hello, Type, ServerHelloExt, NegotiatedHashSign},
- State, Connection) ->
- do_server_hello(Type, ServerHelloExt,
- %% Note NegotiatedHashSign is only negotiated for real if
- %% if TLS version is at least TLS-1.2
- State#state{hashsign_algorithm = NegotiatedHashSign}, Connection);
+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(timeout, State, _) ->
- {next_state, hello, State, hibernate};
+%%====================================================================
+%% 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(Msg, State, Connection) ->
- Connection:handle_unexpected_message(Msg, hello, State).
+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(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,
@@ -359,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}} =
@@ -400,15 +456,16 @@ 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(#certificate{} = Cert,
+certify(internal, #certificate{} = Cert,
#state{negotiated_version = Version,
role = Role,
cert_db = CertDbHandle,
@@ -430,7 +487,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,
@@ -442,36 +499,44 @@ 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),
- HashSign = negotiated_hashsign(Params#server_key_params.hashsign, 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{hashsign_algorithms = HashSigns},
#state{session = #session{own_certificate = Cert},
- negotiated_version = Version} = State0, Connection) ->
- HashSign = ssl_handshake:select_hashsign(HashSigns, Cert, Version),
- {Record, State} = Connection:next_record(State0#state{client_certificate_requested = true}),
- Connection:next_state(certify, certify, Record,
- State#state{cert_hashsign_algorithm = HashSign});
+ key_algorithm = KeyExAlg,
+ ssl_options = #ssl_options{signature_algs = SupportedHashSigns},
+ negotiated_version = Version} = State0, Connection) ->
+
+ case ssl_handshake:select_hashsign(HashSigns, Cert, KeyExAlg, 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_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,
@@ -489,27 +554,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,
@@ -525,7 +592,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,
@@ -542,14 +609,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),
@@ -559,47 +627,51 @@ 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(info, Msg, State, _) ->
+ handle_info(Msg, cipher, State);
-cipher(#certificate_verify{signature = Signature, hashsign_algorithm = CertHashSign},
+cipher(internal, #certificate_verify{signature = Signature,
+ hashsign_algorithm = CertHashSign},
#state{role = server,
- public_key_info = {Algo, _, _} =PublicKeyInfo,
+ key_algorithm = KexAlg,
+ public_key_info = PublicKeyInfo,
negotiated_version = Version,
session = #session{master_secret = MasterSecret},
tls_handshake_history = Handshake
} = State0, Connection) ->
-
- HashSign = ssl_handshake:select_hashsign_algs(CertHashSign, Algo, Version),
+
+ %% Use negotiated value if TLS-1.2 otherwhise return default
+ HashSign = negotiated_hashsign(CertHashSign, KexAlg, PublicKeyInfo, Version),
case ssl_handshake:certificate_verify(Signature, PublicKeyInfo,
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,
@@ -615,109 +687,154 @@ 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, {tls_record, TLSRecord}, StateName, State, Connection) ->
+ Connection:handle_common_event(internal, TLSRecord, StateName, State);
+handle_common_event(internal, #hello_request{}, StateName, #state{role = client} = State0, Connection)
+ when StateName =:= connection ->
+ {Record, State} = Connection:next_record(State0),
+ Connection:next_event(StateName, Record, 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),
@@ -727,95 +844,57 @@ 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,
#security_parameters{master_secret = MasterSecret,
client_random = ClientRandom,
- server_random = ServerRandom} = SecParams,
+ server_random = ServerRandom,
+ prf_algorithm = PRFAlgorithm} = SecParams,
Reply = try
SecretToUse = case Secret of
_ when is_binary(Secret) -> Secret;
@@ -826,32 +905,14 @@ handle_sync_event({prf, Secret, Label, Seed, WantedLength}, _, StateName,
(client_random, Acc) -> [ClientRandom|Acc];
(server_random, Acc) -> [ServerRandom|Acc]
end, [], Seed)),
- ssl_handshake:prf(Version, SecretToUse, Label, SeedToUse, WantedLength)
+ ssl_handshake:prf(Version, PRFAlgorithm, SecretToUse, Label, SeedToUse, WantedLength)
catch
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,
@@ -859,7 +920,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,
@@ -882,47 +944,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);
@@ -933,26 +994,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,
@@ -961,39 +1018,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}
+ }}]}].
+
%%--------------------------------------------------------------------
%%% 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,
@@ -1027,7 +1074,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)
@@ -1045,7 +1092,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.
@@ -1070,7 +1117,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,
@@ -1133,7 +1180,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)
@@ -1167,20 +1214,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);
@@ -1192,8 +1244,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,
@@ -1291,10 +1346,11 @@ 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}),
+ Msg = ssl_handshake:key_exchange(server, Version, {dhe_psk,
+ PskIdentityHint, DHKeys, Params,
+ HashSignAlgo, ClientRandom,
+ ServerRandom,
+ PrivateKey}),
State = Connection:send_handshake(Msg, State0),
State#state{diffie_hellman_keys = DHKeys};
@@ -1383,7 +1439,8 @@ 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}),
+ Msg = ssl_handshake:key_exchange(client, Version,
+ {psk, SslOpts#ssl_options.psk_identity}),
Connection:send_handshake(Msg, State0);
key_exchange(#state{role = client,
@@ -1392,7 +1449,8 @@ 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}),
+ {dhe_psk,
+ SslOpts#ssl_options.psk_identity, DhPubKey}),
Connection:send_handshake(Msg, State0);
key_exchange(#state{role = client,
ssl_options = SslOpts,
@@ -1432,7 +1490,8 @@ rsa_key_exchange(Version, PremasterSecret, PublicKeyInfo = {Algorithm, _, _})
rsa_key_exchange(_, _, _) ->
throw (?ALERT_REC(?FATAL,?HANDSHAKE_FAILURE)).
-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;
@@ -1448,7 +1507,8 @@ rsa_psk_key_exchange(Version, PskIdentity, PremasterSecret, PublicKeyInfo = {Alg
rsa_psk_key_exchange(_, _, _, _) ->
throw (?ALERT_REC(?FATAL,?HANDSHAKE_FAILURE)).
-request_client_cert(#state{ssl_options = #ssl_options{verify = verify_peer},
+request_client_cert(#state{ssl_options = #ssl_options{verify = verify_peer,
+ signature_algs = SupportedHashSigns},
connection_states = ConnectionStates0,
cert_db = CertDbHandle,
cert_db_ref = CertDbRef,
@@ -1456,7 +1516,9 @@ request_client_cert(#state{ssl_options = #ssl_options{verify = verify_peer},
#connection_state{security_parameters =
#security_parameters{cipher_suite = CipherSuite}} =
ssl_record:pending_connection_state(ConnectionStates0, read),
- Msg = ssl_handshake:certificate_request(CipherSuite, CertDbHandle, CertDbRef, Version),
+ 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#state{client_certificate_requested = true};
@@ -1464,10 +1526,11 @@ 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} ->
@@ -1475,7 +1538,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.
@@ -1526,31 +1589,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),
@@ -1558,10 +1626,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;
@@ -1617,21 +1687,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};
@@ -1665,8 +1737,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};
@@ -1722,38 +1794,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, _) ->
@@ -1766,11 +1842,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);
@@ -1780,10 +1858,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,
@@ -1793,7 +1873,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,
@@ -1805,29 +1886,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.
@@ -1848,13 +1931,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,
@@ -1870,26 +1954,27 @@ 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.
-negotiated_hashsign(undefined, Alg, Version) ->
+negotiated_hashsign(undefined, KexAlg, PubKeyInfo, Version) ->
%% Not negotiated choose default
- case is_anonymous(Alg) of
+ case is_anonymous(KexAlg) of
true ->
{null, anon};
false ->
- ssl_handshake:select_hashsign_algs(Alg, Version)
+ {PubAlg, _, _} = PubKeyInfo,
+ ssl_handshake:select_hashsign_algs(undefined, PubAlg, Version)
end;
-negotiated_hashsign(HashSign = {_, _}, _, _) ->
+negotiated_hashsign(HashSign = {_, _}, _, _, _) ->
HashSign.
ssl_options_list(SslOptions) ->
@@ -1916,4 +2001,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 bb41ef2b62..7682cb86ea 100644
--- a/lib/ssl/src/ssl_connection.hrl
+++ b/lib/ssl/src/ssl_connection.hrl
@@ -75,7 +75,7 @@
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(),
@@ -83,7 +83,8 @@
negotiated_protocol = undefined :: undefined | binary(),
client_ecc, % {Curves, PointFmt}
tracker :: pid() | 'undefined', %% Tracker process for listen socket
- sni_hostname = undefined
+ sni_hostname = undefined,
+ downgrade
}).
-define(DEFAULT_DIFFIE_HELLMAN_PARAMS,
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 e98073080a..598d4e4112 100644
--- a/lib/ssl/src/ssl_handshake.erl
+++ b/lib/ssl/src/ssl_handshake.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.
@@ -46,7 +46,7 @@
%% Handshake messages
-export([hello_request/0, server_hello/4, server_hello_done/0,
- certificate/4, certificate_request/4, key_exchange/3,
+ certificate/4, certificate_request/5, key_exchange/3,
finished/5, next_protocol/1]).
%% Handle handshake messages
@@ -64,8 +64,8 @@
]).
%% Cipher suites handling
--export([available_suites/2, cipher_suites/2,
- select_session/10, supported_ecc/1]).
+-export([available_suites/2, available_signature_algs/3, cipher_suites/2,
+ select_session/11, supported_ecc/1]).
%% Extensions handling
-export([client_hello_extensions/6,
@@ -74,8 +74,8 @@
]).
%% MISC
--export([select_version/3, prf/5, select_hashsign/3,
- select_hashsign_algs/2, select_hashsign_algs/3,
+-export([select_version/3, prf/6, select_hashsign/5,
+ select_hashsign_algs/3,
premaster_secret/2, premaster_secret/3, premaster_secret/4]).
%%====================================================================
@@ -120,7 +120,8 @@ server_hello(SessionId, Version, ConnectionStates, Extensions) ->
server_hello_done() ->
#server_hello_done{}.
-client_hello_extensions(Host, Version, CipherSuites, SslOpts, ConnectionStates, Renegotiation) ->
+client_hello_extensions(Host, Version, CipherSuites,
+ #ssl_options{signature_algs = SupportedHashSigns, versions = AllVersions} = SslOpts, ConnectionStates, Renegotiation) ->
{EcPointFormats, EllipticCurves} =
case advertises_ec_ciphers(lists:map(fun ssl_cipher:suite_definition/1, CipherSuites)) of
true ->
@@ -134,7 +135,7 @@ client_hello_extensions(Host, Version, CipherSuites, SslOpts, ConnectionStates,
renegotiation_info = renegotiation_info(tls_record, client,
ConnectionStates, Renegotiation),
srp = SRP,
- hash_signs = advertised_hash_signs(Version),
+ signature_algs = available_signature_algs(SupportedHashSigns, Version, AllVersions),
ec_point_formats = EcPointFormats,
elliptic_curves = EllipticCurves,
alpn = encode_alpn(SslOpts#ssl_options.alpn_advertised_protocols, Renegotiation),
@@ -203,14 +204,14 @@ client_certificate_verify(OwnCert, MasterSecret, Version,
end.
%%--------------------------------------------------------------------
--spec certificate_request(ssl_cipher:cipher_suite(), db_handle(), certdb_ref(), ssl_record:ssl_version()) ->
- #certificate_request{}.
+-spec certificate_request(ssl_cipher:cipher_suite(), db_handle(),
+ certdb_ref(), #hash_sign_algos{}, ssl_record:ssl_version()) ->
+ #certificate_request{}.
%%
%% Description: Creates a certificate_request message, called by the server.
%%--------------------------------------------------------------------
-certificate_request(CipherSuite, CertDbHandle, CertDbRef, Version) ->
+certificate_request(CipherSuite, CertDbHandle, CertDbRef, HashSigns, Version) ->
Types = certificate_types(ssl_cipher:suite_definition(CipherSuite), Version),
- HashSigns = advertised_hash_signs(Version),
Authorities = certificate_authorities(CertDbHandle, CertDbRef),
#certificate_request{
certificate_types = Types,
@@ -351,6 +352,9 @@ 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);
+
certificate_verify(Signature, PublicKeyInfo, Version,
HashSign = {HashAlgo, _}, MasterSecret, {_, Handshake}) ->
Hash = calc_certificate_verify(Version, HashAlgo, MasterSecret, Handshake),
@@ -379,10 +383,11 @@ verify_signature(_Version, Hash, _HashAlgo, Signature, {?rsaEncryption, PubKey,
end;
verify_signature(_Version, Hash, {HashAlgo, dsa}, Signature, {?'id-dsa', PublicKey, PublicKeyParams}) ->
public_key:verify({digest, Hash}, HashAlgo, Signature, {PublicKey, PublicKeyParams});
-verify_signature(_Version, Hash, {HashAlgo, ecdsa}, Signature,
+verify_signature(_, Hash, {HashAlgo, _SignAlg}, Signature,
{?'id-ecPublicKey', PublicKey, PublicKeyParams}) ->
public_key:verify({digest, Hash}, HashAlgo, Signature, {PublicKey, PublicKeyParams}).
+
%%--------------------------------------------------------------------
-spec certify(#certificate{}, db_handle(), certdb_ref(), integer() | nolimit,
verify_peer | verify_none, {fun(), term}, fun(), term(), term(),
@@ -559,57 +564,58 @@ server_key_exchange_hash(md5sha, Value) ->
server_key_exchange_hash(Hash, Value) ->
crypto:hash(Hash, Value).
%%--------------------------------------------------------------------
--spec prf(ssl_record:ssl_version(), binary(), binary(), [binary()], non_neg_integer()) ->
+-spec prf(ssl_record:ssl_version(), non_neg_integer(), binary(), binary(), [binary()], non_neg_integer()) ->
{ok, binary()} | {error, undefined}.
%%
%% Description: use the TLS PRF to generate key material
%%--------------------------------------------------------------------
-prf({3,0}, _, _, _, _) ->
+prf({3,0}, _, _, _, _, _) ->
{error, undefined};
-prf({3,1}, Secret, Label, Seed, WantedLength) ->
- {ok, tls_v1:prf(?MD5SHA, Secret, Label, Seed, WantedLength)};
-prf({3,_N}, Secret, Label, Seed, WantedLength) ->
- {ok, tls_v1:prf(?SHA256, Secret, Label, Seed, WantedLength)}.
+prf({3,_N}, PRFAlgo, Secret, Label, Seed, WantedLength) ->
+ {ok, tls_v1:prf(PRFAlgo, Secret, Label, Seed, WantedLength)}.
%%--------------------------------------------------------------------
--spec select_hashsign(#hash_sign_algos{}| undefined, undefined | binary(), ssl_record:ssl_version()) ->
- {atom(), atom()} | undefined.
+-spec select_hashsign(#hash_sign_algos{} | undefined, undefined | binary(),
+ atom(), [atom()], ssl_record:ssl_version()) ->
+ {atom(), atom()} | undefined | #alert{}.
%%
-%% Description:
+%% Description: Handles signature_algorithms extension
%%--------------------------------------------------------------------
-select_hashsign(_, undefined, _Version) ->
+select_hashsign(_, undefined, _, _, _Version) ->
{null, anon};
%% The signature_algorithms extension was introduced with TLS 1.2. Ignore it if we have
%% negotiated a lower version.
-select_hashsign(#hash_sign_algos{hash_sign_algos = HashSigns}, Cert, {Major, Minor} = Version)
- when Major >= 3 andalso Minor >= 3 ->
- #'OTPCertificate'{tbsCertificate = TBSCert} =public_key:pkix_decode_cert(Cert, otp),
+select_hashsign(HashSigns, Cert, KeyExAlgo,
+ undefined, {Major, Minor} = Version) when Major >= 3 andalso Minor >= 3->
+ select_hashsign(HashSigns, Cert, KeyExAlgo, tls_v1:default_signature_algs(Version), Version);
+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,
- DefaultHashSign = {_, Sign} = select_hashsign_algs(undefined, Algo, Version),
- case lists:filter(fun({sha, dsa}) ->
+ Sign = cert_sign(Algo),
+ case lists:filter(fun({sha, dsa = S}) when S == Sign ->
true;
({_, dsa}) ->
false;
- ({Hash, S}) when S == Sign ->
- ssl_cipher:is_acceptable_hash(Hash,
- proplists:get_value(hashs, crypto:supports()));
+ ({_, _} = Algos) ->
+ is_acceptable_hash_sign(Algos, Sign, KeyExAlgo, SupportedHashSigns);
(_) ->
false
end, HashSigns) of
[] ->
- DefaultHashSign;
- [HashSign| _] ->
+ ?ALERT_REC(?FATAL, ?INSUFFICIENT_SECURITY);
+ [HashSign | _] ->
HashSign
end;
-select_hashsign(_, Cert, Version) ->
+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_algs(#hash_sign_algos{}| undefined, oid(), ssl_record:ssl_version()) ->
+-spec select_hashsign_algs({atom(), atom()}| undefined, oid(), ssl_record:ssl_version()) ->
{atom(), atom()}.
%% Description: For TLS 1.2 hash function and signature algorithm pairs can be
@@ -642,24 +648,6 @@ select_hashsign_algs(undefined, ?rsaEncryption, _) ->
select_hashsign_algs(undefined, ?'id-dsa', _) ->
{sha, dsa}.
--spec select_hashsign_algs(atom(), ssl_record:ssl_version()) -> {atom(), atom()}.
-%% Wrap function to keep the knowledge of the default values in
-%% one place only
-select_hashsign_algs(Alg, Version) when (Alg == rsa orelse
- Alg == dhe_rsa orelse
- Alg == dh_rsa orelse
- Alg == ecdhe_rsa orelse
- Alg == ecdh_rsa orelse
- Alg == srp_rsa) ->
- select_hashsign_algs(undefined, ?rsaEncryption, Version);
-select_hashsign_algs(Alg, Version) when (Alg == dhe_dss orelse
- Alg == dh_dss orelse
- Alg == srp_dss) ->
- select_hashsign_algs(undefined, ?'id-dsa', Version);
-select_hashsign_algs(Alg, Version) when (Alg == ecdhe_ecdsa orelse
- Alg == ecdh_ecdsa) ->
- select_hashsign_algs(undefined, ?'id-ecPublicKey', Version).
-
%%--------------------------------------------------------------------
-spec master_secret(atom(), ssl_record:ssl_version(), #session{} | binary(), #connection_states{},
client | server) -> {binary(), #connection_states{}} | #alert{}.
@@ -1063,9 +1051,56 @@ available_suites(UserSuites, Version) ->
lists:member(Suite, ssl_cipher:all_suites(Version))
end, UserSuites).
-available_suites(ServerCert, UserSuites, Version, Curve) ->
+available_suites(ServerCert, UserSuites, Version, undefined, Curve) ->
ssl_cipher:filter(ServerCert, available_suites(UserSuites, Version))
- -- unavailable_ecc_suites(Curve).
+ -- unavailable_ecc_suites(Curve);
+available_suites(ServerCert, UserSuites, Version, HashSigns, Curve) ->
+ Suites = available_suites(ServerCert, UserSuites, Version, undefined, Curve),
+ filter_hashsigns(Suites, [ssl_cipher:suite_definition(Suite) || Suite <- Suites], HashSigns, []).
+filter_hashsigns([], [], _, Acc) ->
+ lists:reverse(Acc);
+filter_hashsigns([Suite | Suites], [{KeyExchange,_,_,_} | Algos], HashSigns,
+ Acc) when KeyExchange == dhe_ecdsa;
+ KeyExchange == ecdhe_ecdsa ->
+ do_filter_hashsigns(ecdsa, Suite, Suites, Algos, HashSigns, Acc);
+
+filter_hashsigns([Suite | Suites], [{KeyExchange,_,_,_} | Algos], HashSigns,
+ Acc) when KeyExchange == rsa;
+ KeyExchange == dhe_rsa;
+ KeyExchange == ecdhe_rsa;
+ KeyExchange == srp_rsa;
+ KeyExchange == rsa_psk ->
+ do_filter_hashsigns(rsa, Suite, Suites, Algos, HashSigns, Acc);
+filter_hashsigns([Suite | Suites], [{KeyExchange,_,_,_} | Algos], HashSigns, Acc) when
+ KeyExchange == dhe_dss;
+ KeyExchange == srp_dss ->
+ do_filter_hashsigns(dsa, Suite, Suites, Algos, HashSigns, Acc);
+filter_hashsigns([Suite | Suites], [{KeyExchange,_,_,_} | Algos], HashSigns, Acc) when
+ KeyExchange == dh_dss;
+ KeyExchange == dh_rsa;
+ KeyExchange == dh_ecdsa;
+ KeyExchange == ecdh_rsa;
+ KeyExchange == ecdh_ecdsa ->
+ %% Fixed DH certificates MAY be signed with any hash/signature
+ %% algorithm pair appearing in the hash_sign extension. The names
+ %% DH_DSS, DH_RSA, ECDH_ECDSA, and ECDH_RSA are historical.
+ filter_hashsigns(Suites, Algos, HashSigns, [Suite| Acc]);
+filter_hashsigns([Suite | Suites], [{KeyExchange,_,_,_} | Algos], HashSigns, Acc) when
+ KeyExchange == dh_anon;
+ KeyExchange == ecdh_anon;
+ KeyExchange == srp_anon;
+ KeyExchange == psk;
+ KeyExchange == dhe_psk ->
+ %% In this case hashsigns is not used as the kexchange is anonaymous
+ filter_hashsigns(Suites, Algos, HashSigns, [Suite| Acc]).
+
+do_filter_hashsigns(SignAlgo, Suite, Suites, Algos, HashSigns, Acc) ->
+ case lists:keymember(SignAlgo, 2, HashSigns) of
+ true ->
+ filter_hashsigns(Suites, Algos, HashSigns, [Suite| Acc]);
+ false ->
+ filter_hashsigns(Suites, Algos, HashSigns, Acc)
+ end.
unavailable_ecc_suites(no_curve) ->
ssl_cipher:ec_keyed_suites();
@@ -1077,17 +1112,17 @@ cipher_suites(Suites, false) ->
cipher_suites(Suites, true) ->
Suites.
-select_session(SuggestedSessionId, CipherSuites, Compressions, Port, #session{ecc = ECCCurve} =
+select_session(SuggestedSessionId, CipherSuites, HashSigns, Compressions, Port, #session{ecc = ECCCurve} =
Session, Version,
- #ssl_options{ciphers = UserSuites, honor_cipher_order = HCO} = SslOpts,
+ #ssl_options{ciphers = UserSuites, honor_cipher_order = HonorCipherOrder} = SslOpts,
Cache, CacheCb, Cert) ->
{SessionId, Resumed} = ssl_session:server_id(Port, SuggestedSessionId,
SslOpts, Cert,
Cache, CacheCb),
case Resumed of
undefined ->
- Suites = available_suites(Cert, UserSuites, Version, ECCCurve),
- CipherSuite = select_cipher_suite(CipherSuites, Suites, HCO),
+ Suites = available_suites(Cert, UserSuites, Version, HashSigns, ECCCurve),
+ CipherSuite = select_cipher_suite(CipherSuites, Suites, HonorCipherOrder),
Compression = select_compression(Compressions),
{new, Session#session{session_id = SessionId,
cipher_suite = CipherSuite,
@@ -1155,7 +1190,7 @@ handle_client_hello_extensions(RecordCB, Random, ClientCipherSuites,
#hello_extensions{renegotiation_info = Info,
srp = SRP,
ec_point_formats = ECCFormat,
- alpn = ALPN,
+ alpn = ALPN,
next_protocol_negotiation = NextProtocolNegotiation}, Version,
#ssl_options{secure_renegotiate = SecureRenegotation,
alpn_preferred_protocols = ALPNPreferredProtocols} = Opts,
@@ -1324,7 +1359,7 @@ handle_renegotiation_info(_RecordCB, ConnectionStates, SecureRenegotation) ->
hello_extensions_list(#hello_extensions{renegotiation_info = RenegotiationInfo,
srp = SRP,
- hash_signs = HashSigns,
+ signature_algs = HashSigns,
ec_point_formats = EcPointFormats,
elliptic_curves = EllipticCurves,
alpn = ALPN,
@@ -1799,7 +1834,7 @@ dec_hello_extensions(<<?UINT16(?SIGNATURE_ALGORITHMS_EXT), ?UINT16(Len),
<<?UINT16(SignAlgoListLen), SignAlgoList/binary>> = ExtData,
HashSignAlgos = [{ssl_cipher:hash_algorithm(Hash), ssl_cipher:sign_algorithm(Sign)} ||
<<?BYTE(Hash), ?BYTE(Sign)>> <= SignAlgoList],
- dec_hello_extensions(Rest, Acc#hello_extensions{hash_signs =
+ dec_hello_extensions(Rest, Acc#hello_extensions{signature_algs =
#hash_sign_algos{hash_sign_algos = HashSignAlgos}});
dec_hello_extensions(<<?UINT16(?ELLIPTIC_CURVES_EXT), ?UINT16(Len),
@@ -1899,7 +1934,7 @@ from_2bytes(<<?UINT16(N), Rest/binary>>, Acc) ->
key_exchange_alg(rsa) ->
?KEY_EXCHANGE_RSA;
key_exchange_alg(Alg) when Alg == dhe_rsa; Alg == dhe_dss;
- Alg == dh_dss; Alg == dh_rsa; Alg == dh_anon ->
+ Alg == dh_dss; Alg == dh_rsa; Alg == dh_anon ->
?KEY_EXCHANGE_DIFFIE_HELLMAN;
key_exchange_alg(Alg) when Alg == ecdhe_rsa; Alg == ecdh_rsa;
Alg == ecdhe_ecdsa; Alg == ecdh_ecdsa;
@@ -2008,27 +2043,16 @@ is_member(Suite, SupportedSuites) ->
select_compression(_CompressionMetodes) ->
?NULL.
--define(TLSEXT_SIGALG_RSA(MD), {MD, rsa}).
--define(TLSEXT_SIGALG_DSA(MD), {MD, dsa}).
--define(TLSEXT_SIGALG_ECDSA(MD), {MD, ecdsa}).
-
--define(TLSEXT_SIGALG(MD), ?TLSEXT_SIGALG_ECDSA(MD), ?TLSEXT_SIGALG_RSA(MD)).
-
-advertised_hash_signs({Major, Minor}) when Major >= 3 andalso Minor >= 3 ->
- HashSigns = [?TLSEXT_SIGALG(sha512),
- ?TLSEXT_SIGALG(sha384),
- ?TLSEXT_SIGALG(sha256),
- ?TLSEXT_SIGALG(sha224),
- ?TLSEXT_SIGALG(sha),
- ?TLSEXT_SIGALG_DSA(sha),
- ?TLSEXT_SIGALG_RSA(md5)],
- CryptoSupport = crypto:supports(),
- HasECC = proplists:get_bool(ecdsa, proplists:get_value(public_keys, CryptoSupport)),
- Hashs = proplists:get_value(hashs, CryptoSupport),
- #hash_sign_algos{hash_sign_algos =
- lists:filter(fun({Hash, ecdsa}) -> HasECC andalso proplists:get_bool(Hash, Hashs);
- ({Hash, _}) -> proplists:get_bool(Hash, Hashs) end, HashSigns)};
-advertised_hash_signs(_) ->
+available_signature_algs(undefined, _, _) ->
+ undefined;
+available_signature_algs(SupportedHashSigns, {Major, Minor}, AllVersions) when Major >= 3 andalso Minor >= 3 ->
+ case tls_record:lowest_protocol_version(AllVersions) of
+ {3, 3} ->
+ #hash_sign_algos{hash_sign_algos = SupportedHashSigns};
+ _ ->
+ undefined
+ end;
+available_signature_algs(_, _, _) ->
undefined.
psk_secret(PSKIdentity, PSKLookup) ->
@@ -2123,3 +2147,25 @@ distpoints_lookup([DistPoint | Rest], Callback, CRLDbHandle) ->
CRLs ->
[{DistPoint, {CRL, public_key:der_decode('CertificateList', CRL)}} || CRL <- CRLs]
end.
+
+cert_sign(?rsaEncryption) ->
+ rsa;
+cert_sign(?'id-ecPublicKey') ->
+ ecdsa;
+cert_sign(?'id-dsa') ->
+ dsa;
+cert_sign(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, SupportedHashSigns);
+is_acceptable_hash_sign(_,_,_,_) ->
+ false.
+is_acceptable_hash_sign(Algos, SupportedHashSigns) ->
+ lists:member(Algos, SupportedHashSigns).
+
diff --git a/lib/ssl/src/ssl_handshake.hrl b/lib/ssl/src/ssl_handshake.hrl
index 58b4d5a23d..e7b118de10 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.
@@ -95,7 +95,7 @@
-record(hello_extensions, {
renegotiation_info,
- hash_signs, % supported combinations of hashes/signature algos
+ signature_algs, % supported combinations of hashes/signature algos
alpn,
next_protocol_negotiation = undefined, % [binary()]
srp,
diff --git a/lib/ssl/src/ssl_internal.hrl b/lib/ssl/src/ssl_internal.hrl
index 913746598f..076e663cd4 100644
--- a/lib/ssl/src/ssl_internal.hrl
+++ b/lib/ssl/src/ssl_internal.hrl
@@ -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() | 'undefined',
+ 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 ,
@@ -135,7 +135,8 @@
padding_check = true :: boolean(),
fallback = false :: boolean(),
crl_check :: boolean() | peer | best_effort,
- crl_cache
+ crl_cache,
+ signature_algs
}).
-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 311dac4619..60b4fbe995 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.
@@ -551,7 +551,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(),
@@ -610,8 +610,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..866bfcef7e 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.
@@ -460,7 +460,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
diff --git a/lib/ssl/src/ssl_record.hrl b/lib/ssl/src/ssl_record.hrl
index af77378f44..d34d144343 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.
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..95a70a4602 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.
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 211badef56..4651687fe6 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.
@@ -20,7 +20,7 @@
-module(ssl_tls_dist_proxy).
--export([listen/1, accept/1, connect/2, get_tcp_address/1]).
+-export([listen/2, accept/2, connect/3, get_tcp_address/1]).
-export([init/1, start_link/0, handle_call/3, handle_cast/2, handle_info/2,
terminate/2, code_change/3, ssl_options/2]).
@@ -39,14 +39,14 @@
%% Internal application API
%%====================================================================
-listen(Name) ->
- gen_server:call(?MODULE, {listen, Name}, infinity).
+listen(Driver, Name) ->
+ gen_server:call(?MODULE, {listen, Driver, Name}, infinity).
-accept(Listen) ->
- gen_server:call(?MODULE, {accept, Listen}, infinity).
+accept(Driver, Listen) ->
+ gen_server:call(?MODULE, {accept, Driver, Listen}, infinity).
-connect(Ip, Port) ->
- gen_server:call(?MODULE, {connect, Ip, Port}, infinity).
+connect(Driver, Ip, Port) ->
+ gen_server:call(?MODULE, {connect, Driver, Ip, Port}, infinity).
do_listen(Options) ->
@@ -108,10 +108,11 @@ init([]) ->
process_flag(priority, max),
{ok, #state{}}.
-handle_call({listen, Name}, _From, State) ->
+handle_call({listen, Driver, Name}, _From, State) ->
case gen_tcp:listen(0, [{active, false}, {packet,?PPRE}, {ip, loopback}]) of
{ok, Socket} ->
- {ok, World} = do_listen([{active, false}, binary, {packet,?PPRE}, {reuseaddr, true}]),
+ {ok, World} = do_listen([{active, false}, binary, {packet,?PPRE}, {reuseaddr, true},
+ Driver:family()]),
{ok, TcpAddress} = get_tcp_address(Socket),
{ok, WorldTcpAddress} = get_tcp_address(World),
{_,Port} = WorldTcpAddress#net_address.address,
@@ -126,15 +127,15 @@ handle_call({listen, Name}, _From, State) ->
{reply, Error, State}
end;
-handle_call({accept, Listen}, {From, _}, State = #state{listen={_, World}}) ->
+handle_call({accept, _Driver, Listen}, {From, _}, State = #state{listen={_, World}}) ->
Self = self(),
ErtsPid = spawn_link(fun() -> accept_loop(Self, erts, Listen, From) end),
WorldPid = spawn_link(fun() -> accept_loop(Self, world, World, Listen) end),
{reply, ErtsPid, State#state{accept_loop={ErtsPid, WorldPid}}};
-handle_call({connect, Ip, Port}, {From, _}, State) ->
+handle_call({connect, Driver, Ip, Port}, {From, _}, State) ->
Me = self(),
- Pid = spawn_link(fun() -> setup_proxy(Ip, Port, Me) end),
+ Pid = spawn_link(fun() -> setup_proxy(Driver, Ip, Port, Me) end),
receive
{Pid, go_ahead, LPort} ->
Res = {ok, Socket} = try_connect(LPort),
@@ -194,6 +195,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,
@@ -263,10 +269,11 @@ try_connect(Port) ->
try_connect(Port)
end.
-setup_proxy(Ip, Port, Parent) ->
+setup_proxy(Driver, Ip, Port, Parent) ->
process_flag(trap_exit, true),
Opts = connect_options(get_ssl_options(client)),
- case ssl:connect(Ip, Port, [{active, true}, binary, {packet,?PPRE}, nodelay()] ++ Opts) of
+ case ssl:connect(Ip, Port, [{active, true}, binary, {packet,?PPRE}, nodelay(),
+ Driver:family()] ++ Opts) of
{ok, World} ->
{ok, ErtsL} = gen_tcp:listen(0, [{active, true}, {ip, loopback}, binary, {packet,?PPRE}]),
{ok, #net_address{address={_,LPort}}} = get_tcp_address(ErtsL),
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 f98ea83771..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.
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 c3f0206d25..40f3eea527 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,33 @@
%% 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, send_change_cipher/2,
+ reinit_handshake_data/1]).
%% 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
@@ -130,6 +132,16 @@ send_change_cipher(Msg, #state{connection_states = 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 +159,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,42 +200,65 @@ 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);
+ 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().
+%%--------------------------------------------------------------------
-hello(Hello = #client_hello{client_version = ClientVersion,
- extensions = #hello_extensions{hash_signs = HashSigns,
- ec_point_formats = EcPointFormats,
- elliptic_curves = EllipticCurves}},
+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 = #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 tls_handshake:hello(Hello, SslOpts, {Port, Session0, Cache, CacheCb,
- ConnectionStates0, Cert}, Renegotiation) of
+ ConnectionStates0, Cert, KeyExAlg}, Renegotiation) of
#alert{} = Alert ->
handle_own_alert(Alert, ClientVersion, hello, State);
{Version, {Type, Session},
- ConnectionStates, Protocol0, ServerHelloExt} ->
-
+ ConnectionStates, Protocol0, ServerHelloExt, HashSign} ->
Protocol = case Protocol0 of
- undefined -> CurrentProtocol;
- _ -> Protocol0
- end,
-
- HashSign = ssl_handshake:select_hashsign(HashSigns, Cert, Version),
- ssl_connection:hello({common_client_hello, Type, ServerHelloExt, HashSign},
+ 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},
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 +271,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{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 +324,49 @@ 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} = 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});
-
-connection(#client_hello{}, #state{role = server, allow_renegotiate = false} = State0) ->
+ {next_state, hello, State#state{allow_renegotiate = false}, [{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).
+ 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:send_all_state_event/2, this function is called to handle
-%% the event. Not currently used!
+-spec downgrade(gen_statem:event_type(), term(), #state{}) ->
+ gen_statem:state_function_result().
%%--------------------------------------------------------------------
-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).
-
+%% Event handling functions called by state functions to handle
+%% common or unexpected events for the state.
%%--------------------------------------------------------------------
-%% 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).
-%%--------------------------------------------------------------------
-
+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 +385,98 @@ 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} = State0) ->
+
+ Handle =
+ fun({#hello_request{} = Packet, _}, {connection, HState}) ->
+ %% This message should not be included in handshake
+ %% message hashes. Starts new handshake (renegotiation)
+ Hs0 = ssl_handshake:init_handshake_history(),
+ {HState#state{tls_handshake_history = Hs0,
+ renegotiation = {true, peer}},
+ {next_event, internal, Packet}};
+ ({#hello_request{}, _}, {next_state, _SName, HState}) ->
+ %% This message should not be included in handshake
+ %% message hashes. Already in negotiation so it will be ignored!
+ {HState, []};
+ ({#client_hello{} = Packet, Raw}, {connection, 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),
+ {HState#state{tls_handshake_history = Hs1,
+ renegotiation = {true, peer}},
+ {next_event, internal, Packet}};
+
+ ({Packet, Raw}, {_SName, HState0 = #state{tls_handshake_history=Hs0}}) ->
+ HState = handle_sni_extension(Packet, HState0),
+ Hs1 = ssl_handshake:update_handshake_history(Hs0, Raw),
+ {HState#state{tls_handshake_history=Hs1}, {next_event, internal, Packet}}
+ end,
+ try
+ {Packets, Buf} = tls_handshake:get_tls_handshake(Version,Data,Buf0),
+ State1 = State0#state{protocol_buffers =
+ Buffers#protocol_buffers{tls_packets = Packets,
+ tls_handshake_buffer = Buf}},
+ {State, Events} = tls_handshake_events(Handle, StateName, State1, []),
+ 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
@@ -396,7 +526,6 @@ 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
}.
@@ -418,80 +547,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 +559,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 +572,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 +588,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 +661,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 +767,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 +778,43 @@ 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(Handle, StateName,
+ #state{protocol_buffers =
+ #protocol_buffers{tls_packets = [Packet]} = Buffers} = State0, Acc) ->
+ {State, Event} = Handle(Packet, {StateName,
+ State0#state{protocol_buffers =
+ Buffers#protocol_buffers{tls_packets = []}}}),
+ {State, lists:reverse([Event |Acc])};
+tls_handshake_events(Handle, StateName,
+ #state{protocol_buffers =
+ #protocol_buffers{tls_packets =
+ [Packet | Packets]} = Buffers} = State0, Acc) ->
+ {State, Event} = Handle(Packet, {StateName, State0#state{protocol_buffers =
+ Buffers#protocol_buffers{tls_packets =
+ Packets}}}),
+ tls_handshake_events(Handle, StateName, State, [Event | Acc]);
+
+tls_handshake_events(_Handle, _, #state{}, _) ->
+ throw(?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE)).
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 +846,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 +922,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 +964,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 +981,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 +1001,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 +1021,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)};
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 0a6cb9f92d..f34eebb0e4 100644
--- a/lib/ssl/src/tls_handshake.erl
+++ b/lib/ssl/src/tls_handshake.erl
@@ -56,7 +56,7 @@ client_hello(Host, Port, ConnectionStates,
Version = tls_record:highest_protocol_version(Versions),
Pending = ssl_record:pending_connection_state(ConnectionStates, read),
SecParams = Pending#connection_state.security_parameters,
- AvailableCipherSuites = ssl_handshake:available_suites(UserSuites, Version),
+ AvailableCipherSuites = ssl_handshake:available_suites(UserSuites, Version),
Extensions = ssl_handshake:client_hello_extensions(Host, Version,
AvailableCipherSuites,
SslOpts, ConnectionStates, Renegotiation),
@@ -80,13 +80,13 @@ client_hello(Host, Port, ConnectionStates,
-spec hello(#server_hello{} | #client_hello{}, #ssl_options{},
#connection_states{} | {inet:port_number(), #session{}, db_handle(),
atom(), #connection_states{},
- binary() | undefined},
+ binary() | undefined, ssl_cipher:key_algo()},
boolean()) ->
{tls_record:tls_version(), session_id(),
#connection_states{}, alpn | npn, binary() | undefined}|
{tls_record:tls_version(), {resumed | new, #session{}},
#connection_states{}, binary() | undefined,
- #hello_extensions{}} |
+ #hello_extensions{}, {ssl_cipher:hash(), ssl_cipher:sign_algo()} | undefined} |
#alert{}.
%%
%% Description: Handles a recieved hello message
@@ -149,26 +149,35 @@ get_tls_handshake(Version, Data, Buffer) ->
%%% 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} = HelloExt},
- #ssl_options{versions = Versions} = SslOpts,
- {Port, Session0, Cache, CacheCb, ConnectionStates0, Cert}, Renegotiation) ->
+ 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 tls_record:is_acceptable_version(Version, Versions) of
true ->
+ AvailableHashSigns = 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, Compressions,
+ = 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);
_ ->
- handle_client_hello_extensions(Version, Type, Random, CipherSuites, HelloExt,
- SslOpts, Session1, ConnectionStates0,
- Renegotiation)
+ {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)
@@ -245,14 +254,14 @@ enc_handshake(HandshakeMsg, Version) ->
handle_client_hello_extensions(Version, Type, Random, CipherSuites,
- HelloExt, SslOpts, Session0, ConnectionStates0, Renegotiation) ->
+ HelloExt, SslOpts, Session0, ConnectionStates0, Renegotiation, HashSign) ->
try ssl_handshake:handle_client_hello_extensions(tls_record, Random, CipherSuites,
HelloExt, Version, SslOpts,
Session0, ConnectionStates0, Renegotiation) of
#alert{} = Alert ->
Alert;
{Session, ConnectionStates, Protocol, ServerHelloExt} ->
- {Version, {Type, Session}, ConnectionStates, Protocol, ServerHelloExt}
+ {Version, {Type, Session}, ConnectionStates, Protocol, ServerHelloExt, HashSign}
catch throw:Alert ->
Alert
end.
@@ -269,3 +278,14 @@ 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 09e378cfeb..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.
@@ -31,7 +31,8 @@
-export([master_secret/4, finished/5, certificate_verify/3, mac_hash/7,
setup_keys/8, suites/1, prf/5,
- ecc_curves/1, oid_to_enum/1, enum_to_oid/1]).
+ ecc_curves/1, oid_to_enum/1, enum_to_oid/1,
+ default_signature_algs/1, signature_algs/2]).
%%====================================================================
%% Internal application API
@@ -256,6 +257,52 @@ suites(3) ->
] ++ suites(2).
+
+signature_algs({3, 3}, HashSigns) ->
+ CryptoSupports = crypto:supports(),
+ Hashes = proplists:get_value(hashs, CryptoSupports),
+ PubKeys = proplists:get_value(public_keys, CryptoSupports),
+ Supported = lists:foldl(fun({Hash, dsa = Sign} = Alg, Acc) ->
+ case proplists:get_bool(dss, PubKeys)
+ andalso proplists:get_bool(Hash, Hashes)
+ andalso is_pair(Hash, Sign, Hashes)
+ of
+ true ->
+ [Alg | Acc];
+ false ->
+ Acc
+ end;
+ ({Hash, Sign} = Alg, Acc) ->
+ case proplists:get_bool(Sign, PubKeys)
+ andalso proplists:get_bool(Hash, Hashes)
+ andalso is_pair(Hash, Sign, Hashes)
+ of
+ true ->
+ [Alg | Acc];
+ false ->
+ Acc
+ end
+ end, [], HashSigns),
+ lists:reverse(Supported).
+
+default_signature_algs({3, 3} = Version) ->
+ Default = [%% SHA2
+ {sha512, ecdsa},
+ {sha512, rsa},
+ {sha384, ecdsa},
+ {sha384, rsa},
+ {sha256, ecdsa},
+ {sha256, rsa},
+ {sha224, ecdsa},
+ {sha224, rsa},
+ %% SHA
+ {sha, ecdsa},
+ {sha, rsa},
+ {sha, dsa}],
+ signature_algs(Version, Default);
+default_signature_algs(_) ->
+ undefined.
+
%%--------------------------------------------------------------------
%%% Internal functions
%%--------------------------------------------------------------------
@@ -340,6 +387,17 @@ finished_label(client) ->
finished_label(server) ->
<<"server finished">>.
+is_pair(sha, dsa, _) ->
+ true;
+is_pair(_, dsa, _) ->
+ false;
+is_pair(Hash, ecdsa, Hashs) ->
+ AtLeastSha = Hashs -- [md2,md4,md5],
+ lists:member(Hash, AtLeastSha);
+is_pair(Hash, rsa, Hashs) ->
+ AtLeastMd5 = Hashs -- [md2,md4],
+ lists:member(Hash, AtLeastMd5).
+
%% list ECC curves in prefered order
ecc_curves(_Minor) ->
TLSCurves = [sect571r1,sect571k1,secp521r1,brainpoolP512r1,
diff --git a/lib/ssl/test/Makefile b/lib/ssl/test/Makefile
index 89a62c3a4b..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.
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/ssl_ECC_SUITE.erl b/lib/ssl/test/ssl_ECC_SUITE.erl
index 75b639b23b..3a1fd00c06 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_verify_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_ecdh_rsa_verify_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_ecdh_rsa_opts, Config),
+ SOpts = proplists:get_value(server_ecdh_rsa_verify_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_verification_opts, Config),
+ SOpts = proplists:get_value(server_verification_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_verify_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_ecdsa_verify_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_ecdsa_opts, Config),
+ SOpts = proplists:get_value(server_ecdsa_verify_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_verify_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,
@@ -245,7 +245,7 @@ basic_test(ClientCert, ClientKey, ClientCA, ServerCert, ServerKey, ServerCA, Con
close(Server, Client).
start_client(openssl, Port, CA, OwnCa, Cert, Key, Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
NewCA = new_ca(filename:join(PrivDir, "new_ca.pem"), CA, OwnCa),
Version = tls_record:protocol_version(tls_record:highest_protocol_version([])),
Exe = "openssl",
@@ -268,7 +268,7 @@ start_client(erlang, Port, CA, _, Cert, Key, Config) ->
{certfile, Cert}, {keyfile, Key}]}]).
start_server(openssl, CA, OwnCa, Cert, Key, Config) ->
- PrivDir = ?config(priv_dir, Config),
+ PrivDir = proplists:get_value(priv_dir, Config),
NewCA = new_ca(filename:join(PrivDir, "new_ca.pem"), CA, OwnCa),
Port = ssl_test_lib:inet_port(node()),
@@ -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;
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 847a9f19de..d1162ab4a5 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()},
- {'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,18 +96,21 @@ basic_tests() ->
[app,
appup,
alerts,
- send_close,
version_option,
connect_twice,
connect_dist,
clear_pem_cache,
defaults,
- fallback
+ fallback,
+ cipher_format
+ ].
+
+basic_tests_tls() ->
+ [tls_send_close
].
options_tests() ->
[der_input,
- misc_ssl_options,
ssl_options_not_proplist,
raw_ssl_option,
socket_options,
@@ -112,13 +129,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,
@@ -128,23 +148,27 @@ api_tests() ->
sockname,
versions,
controlling_process,
- upgrade,
- upgrade_with_timeout,
- downgrade,
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
+ 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() ->
@@ -168,6 +192,7 @@ renegotiate_tests() ->
cipher_tests() ->
[cipher_suites,
+ cipher_suites_mix,
ciphers_rsa_signed_certs,
ciphers_rsa_signed_certs_openssl_names,
ciphers_dsa_signed_certs,
@@ -195,15 +220,18 @@ 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() ->
@@ -217,8 +245,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),
@@ -235,8 +263,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 ->
@@ -306,7 +333,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 +342,48 @@ init_per_testcase(TestCase, Config) when TestCase == psk_cipher_suites;
TestCase == ciphers_rsa_signed_certs;
TestCase == ciphers_rsa_signed_certs_openssl_names;
TestCase == versions_option,
- TestCase == tcp_connect_big ->
- ct:log("TLS/SSL version ~p~n ", [tls_record:supported_protocol_versions()]),
-
+ TestCase == tls_tcp_connect_big ->
+ ssl_test_lib:ct_log_supported_protocol_versions(Config),
ct:timetrap({seconds, 30}),
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(TestCase, Config) when TestCase == ssl_accept_timeout;
- TestCase == client_closes_socket;
- TestCase == downgrade ->
+init_per_testcase(prf, Config) ->
ct:log("TLS/SSL version ~p~n ", [tls_record:supported_protocol_versions()]),
+ ct:timetrap({seconds, 40}),
+ case proplists:get_value(tc_group_path, Config) of
+ [] -> Prop = [];
+ [Prop] -> Prop
+ end,
+ case proplists:get_value(name, Prop) of
+ undefined -> TlsVersions = [sslv3, tlsv1, 'tlsv1.1', 'tlsv1.2'];
+ TlsVersion when is_atom(TlsVersion) ->
+ TlsVersions = [TlsVersion]
+ end,
+ PRFS=[md5, sha, sha256, sha384, sha512],
+ %All are the result of running tls_v1:prf(PrfAlgo, <<>>, <<>>, <<>>, 16)
+ %with the specified PRF algorithm
+ ExpectedPrfResults=
+ [{md5, <<96,139,180,171,236,210,13,10,28,32,2,23,88,224,235,199>>},
+ {sha, <<95,3,183,114,33,169,197,187,231,243,19,242,220,228,70,151>>},
+ {sha256, <<166,249,145,171,43,95,158,232,6,60,17,90,183,180,0,155>>},
+ {sha384, <<153,182,217,96,186,130,105,85,65,103,123,247,146,91,47,106>>},
+ {sha512, <<145,8,98,38,243,96,42,94,163,33,53,49,241,4,127,28>>},
+ %TLS 1.0 and 1.1 PRF:
+ {md5sha, <<63,136,3,217,205,123,200,177,251,211,17,229,132,4,173,80>>}],
+ TestPlan = prf_create_plan(TlsVersions, PRFS, ExpectedPrfResults),
+ [{prf_test_plan, TestPlan} | Config];
+
+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()]),
+ ssl_test_lib:ct_log_supported_protocol_versions(Config),
ct:timetrap({seconds, 20}),
Config;
init_per_testcase(raw_ssl_option, Config) ->
@@ -344,8 +395,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.
@@ -399,14 +460,16 @@ alerts(Config) when is_list(Config) ->
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)}]),
@@ -415,27 +478,46 @@ 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),
ssl_test_lib:close(Server),
ssl_test_lib:close(Client).
%%--------------------------------------------------------------------
+prf() ->
+ [{doc,"Test that ssl:prf/5 uses the negotiated PRF."}].
+prf(Config) when is_list(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 = 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)
+ end.
+
+%%--------------------------------------------------------------------
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_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, connection_info_result, []}},
@@ -453,8 +535,7 @@ connection_info(Config) when is_list(Config) ->
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, aes_128_cbc, sha}}},
@@ -468,8 +549,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()},
@@ -514,8 +595,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",
@@ -564,8 +645,8 @@ controlling_process(Config) when is_list(Config) ->
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",
@@ -653,11 +734,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}],
@@ -684,9 +765,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),
@@ -718,21 +799,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).
%%--------------------------------------------------------------------
@@ -740,8 +827,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 =
@@ -763,12 +850,20 @@ fallback(Config) when is_list(Config) ->
Client, {error,{tls_alert,"inappropriate fallback"}}).
%%--------------------------------------------------------------------
+cipher_format() ->
+ [{doc, "Test that cipher conversion from tuples to binarys works"}].
+cipher_format(Config) when is_list(Config) ->
+ {ok, Socket} = ssl:listen(0, [{ciphers, ssl:cipher_suites()}]),
+ ssl:close(Socket).
+
+%%--------------------------------------------------------------------
+
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()},
@@ -799,8 +894,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},
@@ -835,8 +930,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},
@@ -870,8 +965,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()},
@@ -885,7 +980,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}},
@@ -913,12 +1017,37 @@ cipher_suites(Config) when is_list(Config) ->
[_|_] =ssl:cipher_suites(openssl).
%%--------------------------------------------------------------------
+cipher_suites_mix() ->
+ [{doc,"Test to have old and new cipher suites at the same time"}].
+
+cipher_suites_mix(Config) when is_list(Config) ->
+ CipherSuites = [{ecdh_rsa,aes_128_cbc,sha256,sha256}, {rsa,aes_128_cbc,sha}],
+ 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, {ssl_test_lib, send_recv_result_active, []}},
+ {options, 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, [{ciphers, CipherSuites} | ClientOpts]}]),
+
+ ssl_test_lib:check_result(Server, ok, Client, ok),
+ ssl_test_lib:close(Server),
+ ssl_test_lib:close(Client).
+%%--------------------------------------------------------------------
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}],
@@ -972,8 +1101,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()},
@@ -998,8 +1127,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()},
@@ -1030,8 +1159,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()},
@@ -1061,8 +1190,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()},
@@ -1093,8 +1222,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()},
@@ -1125,8 +1254,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()},
@@ -1152,12 +1281,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.
@@ -1227,8 +1356,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},
@@ -1252,11 +1381,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},
@@ -1279,7 +1408,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].
@@ -1288,7 +1417,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,
@@ -1309,8 +1438,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},
@@ -1335,8 +1464,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},
@@ -1361,9 +1490,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),
@@ -1387,12 +1516,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}],
@@ -1436,12 +1565,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}],
@@ -1471,23 +1600,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),
@@ -1498,8 +1627,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),
@@ -1518,11 +1647,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}],
@@ -1546,16 +1675,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},
@@ -1591,8 +1720,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},
@@ -1624,8 +1753,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 =
@@ -1650,8 +1779,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 =
@@ -1676,8 +1805,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 =
@@ -1727,8 +1856,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) ->
@@ -1781,15 +1910,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),
@@ -1797,7 +1926,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]}]),
@@ -1808,50 +1937,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),
@@ -1863,9 +1992,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).
@@ -1874,8 +2001,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).
@@ -1885,9 +2011,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).
@@ -1896,9 +2020,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).
@@ -1906,56 +2028,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).
%%-------------------------------------------------------------------
@@ -2006,8 +2128,8 @@ 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(),
@@ -2030,9 +2152,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).
@@ -2041,8 +2161,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).
@@ -2051,9 +2170,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).
@@ -2062,8 +2179,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).
@@ -2071,8 +2187,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 =
@@ -2179,8 +2295,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 =
@@ -2264,8 +2380,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 =
@@ -2313,8 +2429,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),
@@ -2342,8 +2458,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),
@@ -2373,8 +2489,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),
@@ -2401,8 +2517,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),
@@ -2429,8 +2545,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),
@@ -2460,8 +2576,8 @@ 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),
@@ -2475,7 +2591,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),
Client = ssl_test_lib:start_client([{node, ClientNode}, {port, Port},
{host, Hostname},
@@ -2497,8 +2613,8 @@ 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),
@@ -2527,13 +2643,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},
@@ -2557,13 +2680,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),
@@ -2585,8 +2703,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},
@@ -2616,9 +2734,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 =
@@ -2674,10 +2792,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),
@@ -2748,8 +2866,8 @@ 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},
@@ -2783,9 +2901,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},
@@ -2839,8 +2957,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),
@@ -2857,8 +2975,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}},
@@ -2868,12 +2985,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()},
@@ -2900,15 +3017,69 @@ ciphersuite_vs_version(Config) when is_list(Config) ->
_ ->
ct:fail({unexpected_server_hello, ServerHello})
end.
-
+
+%%--------------------------------------------------------------------
+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 = 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, {ssl_test_lib, send_recv_result, []}},
+ {options, [{active, false}, {signature_algs, [{sha256, rsa}]} | 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}, {signature_algs, [{sha256, rsa}]} | ClientOpts]}]),
+
+ ct:log("Testcase ~p, Client ~p Server ~p ~n",
+ [self(), Client, Server]),
+
+ ssl_test_lib:check_result(Server, ok, Client, ok),
+
+ ssl_test_lib:close(Server),
+ ssl_test_lib:close(Client).
+
+
%%--------------------------------------------------------------------
+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 = 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),
+
-dont_crash_on_handshake_garbage() ->
+ Server = ssl_test_lib:start_server_error([{node, ServerNode}, {port, 0},
+ {from, self()},
+ {options, [{signature_algs, [{sha256, rsa}]}
+ | ServerOpts]}]),
+ Port = ssl_test_lib:inet_port(Server),
+ Client = ssl_test_lib:start_client_error([{node, ClientNode}, {port, Port},
+ {host, Hostname},
+ {from, self()},
+ {options, [{signature_algs, [{sha384, rsa}]}
+ | ClientOpts]}]),
+
+ ssl_test_lib:check_result(Server, {error, {tls_alert, "insufficient security"}},
+ Client, {error, {tls_alert, "insufficient security"}}).
+
+%%--------------------------------------------------------------------
+
+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),
@@ -2952,8 +3123,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),
@@ -2971,6 +3142,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}} =
@@ -2987,8 +3159,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),
@@ -3004,15 +3176,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).
@@ -3021,7 +3207,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
@@ -3042,12 +3228,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()},
@@ -3075,8 +3261,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),
@@ -3102,8 +3288,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),
@@ -3147,8 +3333,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),
@@ -3156,7 +3342,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},
@@ -3175,8 +3361,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),
@@ -3202,8 +3388,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),
@@ -3227,11 +3413,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),
@@ -3261,8 +3447,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},
@@ -3287,7 +3473,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, []}).
@@ -3297,7 +3483,7 @@ 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, []}).
@@ -3307,10 +3493,10 @@ 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),
@@ -3371,11 +3557,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()),
@@ -3413,8 +3599,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},
@@ -3438,8 +3624,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},
@@ -3463,8 +3649,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},
@@ -3501,8 +3687,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},
@@ -3533,7 +3719,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),
@@ -3557,8 +3743,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),
@@ -3577,8 +3763,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),
@@ -3597,6 +3783,81 @@ basic_test(Config) ->
ssl_test_lib:close(Server),
ssl_test_lib:close(Client).
+prf_create_plan(TlsVersions, PRFs, Results) ->
+ lists:foldl(fun(Ver, Acc) ->
+ A = prf_ciphers_and_expected(Ver, PRFs, Results),
+ [A|Acc]
+ end, [], TlsVersions).
+prf_ciphers_and_expected(TlsVer, PRFs, Results) ->
+ case TlsVer of
+ TlsVer when TlsVer == sslv3 orelse TlsVer == tlsv1
+ orelse TlsVer == 'tlsv1.1' ->
+ Ciphers = ssl:cipher_suites(),
+ {_, Expected} = lists:keyfind(md5sha, 1, Results),
+ [[{tls_ver, TlsVer}, {ciphers, Ciphers}, {expected, Expected}, {prf, md5sha}]];
+ 'tlsv1.2' ->
+ lists:foldl(
+ fun(PRF, Acc) ->
+ Ciphers = prf_get_ciphers(TlsVer, PRF),
+ case Ciphers of
+ [] ->
+ ct:log("No ciphers for PRF algorithm ~p. Skipping.", [PRF]),
+ Acc;
+ Ciphers ->
+ {_, Expected} = lists:keyfind(PRF, 1, Results),
+ [[{tls_ver, TlsVer}, {ciphers, Ciphers}, {expected, Expected},
+ {prf, PRF}] | Acc]
+ end
+ end, [], PRFs)
+ end.
+prf_get_ciphers(TlsVer, PRF) ->
+ case TlsVer of
+ 'tlsv1.2' ->
+ lists:filter(
+ fun(C) when tuple_size(C) == 4 andalso
+ element(4, C) == PRF ->
+ true;
+ (_) -> false
+ end, ssl:cipher_suites())
+ end.
+prf_run_test(_, TlsVer, [], _, Prf) ->
+ ct:fail({error, cipher_list_empty, 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 ++ 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]}},
+ {options, ServerOpts}]),
+ Port = ssl_test_lib:inet_port(Server),
+ Client = ssl_test_lib:start_client(
+ [{node, ClientNode}, {port, Port},
+ {host, Hostname}, {from, self()},
+ {mfa, {?MODULE, prf_verify_value, [TlsVer, Expected, Prf]}},
+ {options, ClientOpts}]),
+ ssl_test_lib:check_result(Server, ok, Client, ok),
+ ssl_test_lib:close(Server),
+ ssl_test_lib:close(Client).
+prf_verify_value(Socket, TlsVer, Expected, Algo) ->
+ Ret = ssl:prf(Socket, <<>>, <<>>, [<<>>], 16),
+ case TlsVer of
+ sslv3 ->
+ case Ret of
+ {error, undefined} -> ok;
+ _ ->
+ {error, {expected, {error, undefined},
+ got, Ret, tls_ver, TlsVer, prf_algorithm, Algo}}
+ end;
+ _ ->
+ case Ret of
+ {ok, Expected} -> ok;
+ {ok, Val} -> {error, {expected, Expected, got, Val, tls_ver, TlsVer,
+ prf_algorithm, Algo}}
+ end
+ end.
+
send_recv_result_timeout_client(Socket) ->
{error, timeout} = ssl:recv(Socket, 11, 500),
ssl:send(Socket, "Hello world"),
@@ -3967,78 +4228,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_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)};
anonymous ->
%% No certs in opts!
- {?config(client_opts, Config),
- ?config(server_anon, Config)};
+ {ssl_test_lib:ssl_options(client_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_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_opts, Config),
+ ssl_test_lib:ssl_options(server_ecdh_rsa_opts, Config)};
rc4_rsa ->
- {?config(client_opts, Config),
+ {ssl_test_lib:ssl_options(client_opts, Config),
[{ciphers, Ciphers} |
- ?config(server_opts, Config)]};
+ ssl_test_lib:ssl_options(server_opts, Config)]};
rc4_ecdh_rsa ->
- {?config(client_opts, Config),
+ {ssl_test_lib:ssl_options(client_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_opts, Config),
[{ciphers, Ciphers} |
- ?config(server_ecdsa_opts, Config)]};
+ ssl_test_lib:ssl_options(server_ecdsa_opts, Config)]};
des_dhe_rsa ->
- {?config(client_opts, Config),
+ {ssl_test_lib:ssl_options(client_opts, Config),
[{ciphers, Ciphers} |
- ?config(server_rsa_opts, Config)]};
+ ssl_test_lib:ssl_options(server_opts, Config)]};
des_rsa ->
- {?config(client_opts, Config),
+ {ssl_test_lib:ssl_options(client_opts, Config),
[{ciphers, Ciphers} |
- ?config(server_opts, Config)]}
+ ssl_test_lib:ssl_options(server_opts, Config)]}
end,
Result = lists:map(fun(Cipher) ->
@@ -4061,6 +4322,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),
@@ -4096,7 +4358,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 ->
@@ -4119,7 +4381,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} ->
@@ -4158,22 +4420,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) ->
@@ -4181,18 +4443,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},
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..20165c70f0 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,
@@ -86,8 +86,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 +110,19 @@ 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_test_lib:ct_log_supported_protocol_versions(Config),
ct:timetrap({seconds, 5}),
Config.
@@ -122,13 +133,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_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},
{from, self()},
@@ -147,14 +158,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 +190,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, 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},
@@ -218,20 +229,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_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()},
- {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 +258,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, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
Server = ssl_test_lib:start_server_error([{node, ServerNode}, {port, 0},
@@ -275,8 +289,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_verification_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
{ok, ClientCAs} = file:read_file(proplists:get_value(cacertfile, ClientOpts)),
@@ -310,9 +324,11 @@ 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_verification_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),
@@ -328,16 +344,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 +366,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_verification_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
{ok, ServerCAs} = file:read_file(proplists:get_value(cacertfile, ServerOpts)),
@@ -390,8 +407,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_verification_opts, Config),
{ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
{ok, ServerCAs} = file:read_file(proplists:get_value(cacertfile, ServerOpts)),
@@ -430,8 +447,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_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()},
@@ -475,8 +492,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_verification_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.
@@ -522,39 +539,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_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),
@@ -616,73 +607,15 @@ two_digits_str(N) ->
lists:flatten(io_lib:format("~p", [N])).
%%--------------------------------------------------------------------
-
-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),
+ 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),
+ 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),
@@ -740,11 +673,11 @@ extended_key_usage_verify_none() ->
[{doc,"Test cert that has a critical extended_key_usage extension in verify_none 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),
+ 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),
+ 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),
@@ -801,11 +734,11 @@ critical_extension_verify_peer() ->
[{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),
+ 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),
+ 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",
@@ -848,11 +781,11 @@ 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_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",
@@ -917,9 +850,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 +906,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 +967,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 +1004,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 +1042,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 +1070,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 = 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 +1084,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, 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_error([{node, ServerNode}, {port, 0},
{from, self()},
@@ -1195,8 +1128,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, 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()},
@@ -1220,8 +1153,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, 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()},
@@ -1259,8 +1192,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, 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()},
diff --git a/lib/ssl/test/ssl_crl_SUITE.erl b/lib/ssl/test/ssl_crl_SUITE.erl
index 5b86027210..aa321407b7 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.
@@ -97,8 +97,8 @@ 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]
@@ -109,23 +109,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 +137,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,12 +152,12 @@ 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},
@@ -178,8 +178,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,7 +189,7 @@ 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}]}}},
@@ -207,12 +207,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},
@@ -297,7 +297,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
};
diff --git a/lib/ssl/test/ssl_dist_SUITE.erl b/lib/ssl/test/ssl_dist_SUITE.erl
index 00f9ee8e3c..d90ec428ee 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.
@@ -194,7 +194,7 @@ 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} ->
@@ -502,7 +502,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).
@@ -539,7 +539,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)
@@ -792,7 +792,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,8 +811,8 @@ 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"]),
@@ -874,7 +874,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),
diff --git a/lib/ssl/test/ssl_handshake_SUITE.erl b/lib/ssl/test/ssl_handshake_SUITE.erl
index b0bb77c598..26e83413c1 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;
@@ -162,14 +162,14 @@ 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}]},
- {sha512, rsa} = ssl_handshake:select_hashsign(HashSigns, Cert, {3,3}),
+ {sha512, rsa} = ssl_handshake:select_hashsign(HashSigns, Cert, ecdhe_rsa, tls_v1:default_signature_algs({3,3}), {3,3}),
%%% Ignore
- {md5sha, rsa} = ssl_handshake:select_hashsign(HashSigns, Cert, {3,2}),
- {md5sha, rsa} = ssl_handshake:select_hashsign(HashSigns, Cert, {3,0}).
+ {md5sha, rsa} = ssl_handshake:select_hashsign(HashSigns, Cert, ecdhe_rsa, tls_v1:default_signature_algs({3,2}), {3,2}),
+ {md5sha, rsa} = ssl_handshake:select_hashsign(HashSigns, Cert, ecdhe_rsa, tls_v1:default_signature_algs({3,0}), {3,0}).
is_supported(Hash) ->
Algos = crypto:supports(),
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..533501e788 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,33 +53,33 @@ 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), <<>>),
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), <<>>),
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), <<>>),
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), <<>>),
NextProtocolNegotiation = (DecodedHandshakeMessage#server_hello.extensions)#hello_extensions.next_protocol_negotiation,
diff --git a/lib/ssl/test/ssl_packet_SUITE.erl b/lib/ssl/test/ssl_packet_SUITE.erl
index 08a66ec07a..6a73acb704 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.
@@ -137,8 +137,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 +153,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 +167,7 @@ end_per_group(_GroupName, Config) ->
Config.
init_per_testcase(_TestCase, Config) ->
- ct:timetrap({seconds, 15}),
+ ct:timetrap({seconds, 30}),
Config.
@@ -424,8 +423,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 +451,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 +484,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 +514,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 +547,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 +582,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 +616,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 +648,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 +681,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 +716,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 +798,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 +855,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 +945,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 +1005,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 +1060,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 +1110,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 +1163,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 +1217,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 +1257,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 +1297,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 +1333,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 +1371,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 +1406,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 +1443,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 +1475,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 +1508,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 +1541,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 +1573,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 +1605,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 +1638,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 +1672,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 +1706,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 +1739,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 +1772,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 +1806,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 +1840,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 +1871,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..5e6137d2a6 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 _:_ ->
@@ -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 b0495cb5ac..543728627e 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,48 +349,48 @@ 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"]),
+ 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, []},
- {client_verification_opts, [{cacertfile, ClientCaCertFile},
+ {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}]},
@@ -426,7 +426,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},
@@ -552,11 +552,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}]),
@@ -905,8 +905,8 @@ anonymous_suites() ->
{dh_anon, '3des_ede_cbc', sha},
{dh_anon, aes_128_cbc, sha},
{dh_anon, aes_256_cbc, sha},
- {dh_anon, aes_128_gcm, null},
- {dh_anon, aes_256_gcm, null},
+ {dh_anon, aes_128_gcm, null, sha256},
+ {dh_anon, aes_256_gcm, null, sha384},
{ecdh_anon,rc4_128,sha},
{ecdh_anon,'3des_ede_cbc',sha},
{ecdh_anon,aes_128_cbc,sha},
@@ -933,12 +933,12 @@ psk_suites() ->
{rsa_psk, aes_256_cbc, sha},
{rsa_psk, aes_128_cbc, sha256},
{rsa_psk, aes_256_cbc, sha384},
- {psk, aes_128_gcm, null},
- {psk, aes_256_gcm, null},
- {dhe_psk, aes_128_gcm, null},
- {dhe_psk, aes_256_gcm, null},
- {rsa_psk, aes_128_gcm, null},
- {rsa_psk, aes_256_gcm, null}],
+ {psk, aes_128_gcm, null, sha256},
+ {psk, aes_256_gcm, null, sha384},
+ {dhe_psk, aes_128_gcm, null, sha256},
+ {dhe_psk, aes_256_gcm, null, sha384},
+ {rsa_psk, aes_128_gcm, null, sha256},
+ {rsa_psk, aes_256_gcm, null, sha384}],
ssl_cipher:filter_suites(Suites).
psk_anon_suites() ->
@@ -1041,13 +1041,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') ->
@@ -1059,13 +1066,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
@@ -1291,3 +1308,29 @@ 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) ->
+ case proplists:get_value(protocol, Config) of
+ dtls ->
+ dtls_record:protocol_version(dtls_record:highest_protocol_version([]));
+ _ ->
+ tls_record:protocol_version(tls_record:highest_protocol_version([]))
+ 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..9df31a3381 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)
@@ -136,8 +136,7 @@ init_per_group(GroupName, Config) ->
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;
@@ -257,8 +256,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,7 +295,7 @@ 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),
{_, ServerNode, _} = ssl_test_lib:run_where(Config),
@@ -326,8 +325,8 @@ 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 +335,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 +365,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 +376,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 +397,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 +408,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 +440,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 +455,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 +480,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 +492,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 +517,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 +528,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 +567,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 +578,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 +610,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 +624,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 +649,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 +659,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 +690,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 +701,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 +733,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 +752,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 +774,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 +811,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 +819,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 +828,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 +883,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 +937,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 +1215,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 +1272,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, []}},
@@ -1304,9 +1299,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, []}},
@@ -1388,8 +1383,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 +1394,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 +1429,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 +1440,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 +1465,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 +1476,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 +1494,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 +1506,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 +1534,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 +1546,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 +1561,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 +1572,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 +1599,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 +1610,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 +1628,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 +1639,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),
diff --git a/lib/ssl/test/ssl_upgrade_SUITE.erl b/lib/ssl/test/ssl_upgrade_SUITE.erl
index f5f4b25b23..113b3b4158 100644
--- a/lib/ssl/test/ssl_upgrade_SUITE.erl
+++ b/lib/ssl/test/ssl_upgrade_SUITE.erl
@@ -47,8 +47,8 @@ init_per_suite(Config0) ->
{skip, Reason};
Config ->
Result =
- {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)
end
catch _:_ ->
@@ -60,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.
@@ -139,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},
@@ -156,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 9f79a7fb34..3b51fa8c6b 100644
--- a/lib/ssl/vsn.mk
+++ b/lib/ssl/vsn.mk
@@ -1 +1 @@
-SSL_VSN = 7.2.1
+SSL_VSN = 8.0
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..bff98245bf 100644
--- a/lib/stdlib/doc/src/array.xml
+++ b/lib/stdlib/doc/src/array.xml
@@ -3,7 +3,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/stdlib/doc/src/base64.xml b/lib/stdlib/doc/src/base64.xml
index 276d28e174..7b82d7dd3d 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>
diff --git a/lib/stdlib/doc/src/binary.xml b/lib/stdlib/doc/src/binary.xml
index 2682198fe5..933157fc34 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>
@@ -366,7 +366,7 @@
<code>
1> binary:matches(&lt;&lt;"abcde"&gt;&gt;,
- [&lt;&lt;"bcde"&gt;&gt;,&lt;&lt;"bc"&gt;&gt;>,&lt;&lt;"de"&gt;&gt;],[]).
+ [&lt;&lt;"bcde"&gt;&gt;,&lt;&lt;"bc"&gt;&gt;,&lt;&lt;"de"&gt;&gt;],[]).
[{1,4}]
</code>
diff --git a/lib/stdlib/doc/src/book.xml b/lib/stdlib/doc/src/book.xml
index 043f6cc19b..84ce3f0788 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>
diff --git a/lib/stdlib/doc/src/c.xml b/lib/stdlib/doc/src/c.xml
index e5238fa7db..9b4a9489c0 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>
diff --git a/lib/stdlib/doc/src/calendar.xml b/lib/stdlib/doc/src/calendar.xml
index 853184dc0f..38bf55679e 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>
diff --git a/lib/stdlib/doc/src/dets.xml b/lib/stdlib/doc/src/dets.xml
index 48400733d1..177c2ba508 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>
diff --git a/lib/stdlib/doc/src/dict.xml b/lib/stdlib/doc/src/dict.xml
index e10531caac..20bab99a9c 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>
diff --git a/lib/stdlib/doc/src/digraph.xml b/lib/stdlib/doc/src/digraph.xml
index 291be6c08b..1bb8eef247 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>
@@ -104,14 +104,12 @@
</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>
diff --git a/lib/stdlib/doc/src/digraph_utils.xml b/lib/stdlib/doc/src/digraph_utils.xml
index 639069543c..e481711c50 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>
@@ -120,13 +120,6 @@
considering all edges undirected.</p>
</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"/>
diff --git a/lib/stdlib/doc/src/epp.xml b/lib/stdlib/doc/src/epp.xml
index 8c901f57ec..ac87f9c2b6 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>
@@ -102,6 +102,7 @@
<func>
<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 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
diff --git a/lib/stdlib/doc/src/erl_anno.xml b/lib/stdlib/doc/src/erl_anno.xml
index ddc8b8c765..9f775943c1 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>
@@ -103,7 +103,7 @@
<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>
diff --git a/lib/stdlib/doc/src/erl_eval.xml b/lib/stdlib/doc/src/erl_eval.xml
index ba988e7ca2..d60b04b510 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>
diff --git a/lib/stdlib/doc/src/erl_expand_records.xml b/lib/stdlib/doc/src/erl_expand_records.xml
index 497b371434..93e464c733 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>
diff --git a/lib/stdlib/doc/src/erl_id_trans.xml b/lib/stdlib/doc/src/erl_id_trans.xml
index 30eb213493..153bd4148e 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>
diff --git a/lib/stdlib/doc/src/erl_internal.xml b/lib/stdlib/doc/src/erl_internal.xml
index e1ee50b424..940f8c5b40 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>
diff --git a/lib/stdlib/doc/src/erl_lint.xml b/lib/stdlib/doc/src/erl_lint.xml
index 318cb5ac19..3747b0f3c3 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>
diff --git a/lib/stdlib/doc/src/erl_parse.xml b/lib/stdlib/doc/src/erl_parse.xml
index 13be488c33..32fce16d68 100644
--- a/lib/stdlib/doc/src/erl_parse.xml
+++ b/lib/stdlib/doc/src/erl_parse.xml
@@ -45,26 +45,22 @@
<datatypes>
<datatype>
<name>abstract_clause()</name>
- <desc><p><marker id="type-abstract_clause"/>
- Abstract form of an Erlang clause.</p>
+ <desc><p>Abstract form of an Erlang clause.</p>
</desc>
</datatype>
<datatype>
<name>abstract_expr()</name>
- <desc><p><marker id="type-abstract_expr"/>
- Abstract form of an Erlang expression.</p>
+ <desc><p>Abstract form of an Erlang expression.</p>
</desc>
</datatype>
<datatype>
<name>abstract_form()</name>
- <desc><p><marker id="type-abstract_form"/>
- Abstract form of an Erlang form.</p>
+ <desc><p>Abstract form of an Erlang form.</p>
</desc>
</datatype>
<datatype>
<name>abstract_type()</name>
- <desc><p><marker id="type-abstract_type"/>
- Abstract form of an Erlang type.</p>
+ <desc><p>Abstract form of an Erlang type.</p>
</desc>
</datatype>
<datatype>
diff --git a/lib/stdlib/doc/src/erl_pp.xml b/lib/stdlib/doc/src/erl_pp.xml
index 4b8a571c81..e96fd576ec 100644
--- a/lib/stdlib/doc/src/erl_pp.xml
+++ b/lib/stdlib/doc/src/erl_pp.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/stdlib/doc/src/erl_tar.xml b/lib/stdlib/doc/src/erl_tar.xml
index 898b55df72..1f4a43f622 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>
diff --git a/lib/stdlib/doc/src/ets.xml b/lib/stdlib/doc/src/ets.xml
index 447fe51130..9fb7d227a3 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>
@@ -98,10 +98,10 @@
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).
+ effect at all (atomicity).
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
+ 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,
one after the other in a strict order.</p>
@@ -123,8 +123,9 @@
<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>
+ description, see chapter
+ <seealso marker="erts:match_spec">Match Specifications in Erlang</seealso>
+ in <em>ERTS User's Guide</em>.</p>
</section>
<datatypes>
@@ -134,8 +135,7 @@
<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">
@@ -1621,6 +1621,8 @@ true</pre>
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>See also: <seealso marker="erts:erlang#match_spec_test/3">
+ erlang:match_spec_test/3</seealso>.</p>
</desc>
</func>
<func>
diff --git a/lib/stdlib/doc/src/file_sorter.xml b/lib/stdlib/doc/src/file_sorter.xml
index f033eebec7..bc24f02a99 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>
diff --git a/lib/stdlib/doc/src/filelib.xml b/lib/stdlib/doc/src/filelib.xml
index 2cf9490f4b..3ad159a66d 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>
diff --git a/lib/stdlib/doc/src/filename.xml b/lib/stdlib/doc/src/filename.xml
index 77e262dbe6..f284a7596c 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>
@@ -47,7 +47,12 @@
<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>
-
+ <datatypes>
+ <datatype>
+ <name name="basedir_type"/>
+ </datatype>
+ </datatypes>
+
<funcs>
<func>
<name name="absname" arity="1"/>
@@ -102,6 +107,155 @@
</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, i.e. <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>
<desc>
@@ -214,7 +368,7 @@
<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,
- forward slashes is converted to backward slashes. On all
+ forward slashes are converted to backward slashes. On all
platforms, the name is normalized as done by <c>join/1</c>.</p>
<pre>
19> <input>filename:nativename("/usr/local/bin/").</input> % Unix
diff --git a/lib/stdlib/doc/src/gen_event.xml b/lib/stdlib/doc/src/gen_event.xml
index c4bab45781..b2c482d3ed 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>
diff --git a/lib/stdlib/doc/src/gen_fsm.xml b/lib/stdlib/doc/src/gen_fsm.xml
index 4d594b8eb2..835e252704 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>
@@ -31,12 +31,23 @@
<module>gen_fsm</module>
<modulesummary>Generic Finite State Machine Behaviour</modulesummary>
<description>
+ <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.
+ It has the same features and add some really useful.
+ This module will not be removed for the foreseeable future
+ to keep old state machine implementations running.
+ </p>
+ </note>
<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>
+ <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
@@ -848,6 +859,7 @@ gen_fsm:sync_send_all_state_event -----> Module:handle_sync_event/4
<title>SEE ALSO</title>
<p><seealso marker="gen_event">gen_event(3)</seealso>,
<seealso marker="gen_server">gen_server(3)</seealso>,
+ <seealso marker="gen_statem">gen_statem(3)</seealso>,
<seealso marker="supervisor">supervisor(3)</seealso>,
<seealso marker="proc_lib">proc_lib(3)</seealso>,
<seealso marker="sys">sys(3)</seealso></p>
diff --git a/lib/stdlib/doc/src/gen_server.xml b/lib/stdlib/doc/src/gen_server.xml
index 6d04771cd4..10dc978afc 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>
@@ -715,6 +715,7 @@ gen_server:abcast -----> Module:handle_cast/2
<title>SEE ALSO</title>
<p><seealso marker="gen_event">gen_event(3)</seealso>,
<seealso marker="gen_fsm">gen_fsm(3)</seealso>,
+ <seealso marker="gen_statem">gen_statem(3)</seealso>,
<seealso marker="supervisor">supervisor(3)</seealso>,
<seealso marker="proc_lib">proc_lib(3)</seealso>,
<seealso marker="sys">sys(3)</seealso></p>
diff --git a/lib/stdlib/doc/src/gen_statem.xml b/lib/stdlib/doc/src/gen_statem.xml
new file mode 100644
index 0000000000..0e7d6e53e9
--- /dev/null
+++ b/lib/stdlib/doc/src/gen_statem.xml
@@ -0,0 +1,1671 @@
+<?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>kernel: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>kernel: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 = {NewCallbackMode,NewState,NewData} | Reason</v>
+ <v>
+ NewCallbackMode =
+ <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>{NewCallbackMode,NewState,NewData}</c> tuple.
+ </p>
+ <p>
+ If the function returns <c>Reason</c>, the ongoing
+ upgrade fails and rolls back to the old release.</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/io.xml b/lib/stdlib/doc/src/io.xml
index 4655c8662f..9ae50ed90c 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>
diff --git a/lib/stdlib/doc/src/io_lib.xml b/lib/stdlib/doc/src/io_lib.xml
index cd58090dcd..b22ec15a0c 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>
diff --git a/lib/stdlib/doc/src/io_protocol.xml b/lib/stdlib/doc/src/io_protocol.xml
index 170dab17ca..f2a669a49a 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>
diff --git a/lib/stdlib/doc/src/lib.xml b/lib/stdlib/doc/src/lib.xml
index f4dddf646d..ac41987eaf 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>
diff --git a/lib/stdlib/doc/src/lists.xml b/lib/stdlib/doc/src/lists.xml
index 89ba5238b5..03d0063599 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>
@@ -262,6 +262,21 @@ flatmap(Fun, List1) ->
</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>
<desc>
diff --git a/lib/stdlib/doc/src/log_mf_h.xml b/lib/stdlib/doc/src/log_mf_h.xml
index eccda516ba..65622e52f5 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>
diff --git a/lib/stdlib/doc/src/maps.xml b/lib/stdlib/doc/src/maps.xml
index 48c1abc2f8..bf45461e2b 100644
--- a/lib/stdlib/doc/src/maps.xml
+++ b/lib/stdlib/doc/src/maps.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>
@@ -301,6 +301,30 @@ false</code>
</func>
<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="size" arity="1"/>
<fsummary></fsummary>
<desc>
@@ -357,6 +381,42 @@ false</code>
</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>
diff --git a/lib/stdlib/doc/src/math.xml b/lib/stdlib/doc/src/math.xml
index aee6c3f238..38084638f6 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>
diff --git a/lib/stdlib/doc/src/ms_transform.xml b/lib/stdlib/doc/src/ms_transform.xml
index 22cb39c576..84712486ea 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>
diff --git a/lib/stdlib/doc/src/notes.xml b/lib/stdlib/doc/src/notes.xml
index 267a993a1b..87f5335723 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,93 @@
</header>
<p>This document describes the changes made to the STDLIB application.</p>
+<section><title>STDLIB 2.8</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ Fix evaluation in matching of bound map key variables in
+ the interpreter.</p>
+ <p>
+ Prior to this patch, the following code would not
+ evaluate: <c>X = key,(fun(#{X := value}) -&gt; true
+ end)(#{X => value})</c></p>
+ <p>
+ Own Id: OTP-13218</p>
+ </item>
+ <item>
+ <p> Fix <c>erl_eval</c> not using non-local function
+ handler. </p>
+ <p>
+ Own Id: OTP-13228 Aux Id: ERL-32 </p>
+ </item>
+ <item>
+ <p> The Erlang Code Linter no longer crashes if there is
+ a <c>-deprecated()</c> attribute but no <c>-module()</c>
+ declaration. </p>
+ <p>
+ Own Id: OTP-13230 Aux Id: ERL-62 </p>
+ </item>
+ <item>
+ <p>
+ The timestamp in the result returned by <c>dets:info(Tab,
+ safe_fixed)</c> was unintentionally broken as a result of
+ the time API rewrites in OTP 18.0. This has now been
+ fixed.</p>
+ <p>
+ Own Id: OTP-13239 Aux Id: OTP-11997 </p>
+ </item>
+ <item>
+ <p>A rare race condition in <c>beam_lib</c> when using
+ encrypted abstract format has been eliminated.</p>
+ <p>
+ Own Id: OTP-13278</p>
+ </item>
+ <item>
+ <p>
+ Improved maps:with/2 and maps:without/2 algorithms</p>
+ <p>
+ The new implementation speeds up the execution
+ significantly for all sizes of input.</p>
+ <p>
+ Own Id: OTP-13376</p>
+ </item>
+ </list>
+ </section>
+
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ Time warp safety improvements.</p>
+ <p>
+ Introduced the options <c>monotonic_timestamp</c>, and
+ <c>strict_monotonic_timestamp</c> to the trace,
+ sequential trace, and system profile functionality. This
+ since the already existing <c>timestamp</c> option is not
+ time warp safe.</p>
+ <p>
+ Introduced the option <c>safe_fixed_monotonic_time</c> to
+ <c>ets:info/2</c> and <c>dets:info/2</c>. This since the
+ already existing <c>safe_fixed</c> option is not time
+ warp safe.</p>
+ <p>
+ Own Id: OTP-13222 Aux Id: OTP-11997 </p>
+ </item>
+ <item>
+ <p>
+ In the shell Ctrl+W (delete word) will no longer consider
+ "." as being part of a word.</p>
+ <p>
+ Own Id: OTP-13281</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
<section><title>STDLIB 2.7</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/ordsets.xml b/lib/stdlib/doc/src/ordsets.xml
index 639e041d79..0d5d618b66 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>
diff --git a/lib/stdlib/doc/src/part.xml b/lib/stdlib/doc/src/part.xml
index f7074d3404..15b7bd4a1d 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>
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..d217d071da 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>
diff --git a/lib/stdlib/doc/src/proc_lib.xml b/lib/stdlib/doc/src/proc_lib.xml
index 85f0c0c908..f02b1f0651 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>
@@ -34,9 +34,9 @@
<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
+ <c>gen_fsm</c>, <c>gen_statem</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>
<p>Some useful information is initialized when a process starts.
The registered names, or the process identifiers, of the parent
@@ -73,6 +73,13 @@
<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>
diff --git a/lib/stdlib/doc/src/proplists.xml b/lib/stdlib/doc/src/proplists.xml
index de4fbd3a7f..832df9556a 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>
diff --git a/lib/stdlib/doc/src/qlc.xml b/lib/stdlib/doc/src/qlc.xml
index 8101b6458c..2966e94ec1 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>
diff --git a/lib/stdlib/doc/src/queue.xml b/lib/stdlib/doc/src/queue.xml
index c1665a1ed4..e1a96f5c65 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>
diff --git a/lib/stdlib/doc/src/random.xml b/lib/stdlib/doc/src/random.xml
index fc4f796863..dea4e43c95 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>
diff --git a/lib/stdlib/doc/src/re.xml b/lib/stdlib/doc/src/re.xml
index 8c19926b10..fda79d51d5 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>
diff --git a/lib/stdlib/doc/src/ref_man.xml b/lib/stdlib/doc/src/ref_man.xml
index 82ad78e675..404873ea32 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>
@@ -66,6 +66,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/shell.xml b/lib/stdlib/doc/src/shell.xml
index 22a3321298..65c441203c 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>
diff --git a/lib/stdlib/doc/src/shell_default.xml b/lib/stdlib/doc/src/shell_default.xml
index 51cd3b62d3..4a90b7d7cc 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>
diff --git a/lib/stdlib/doc/src/slave.xml b/lib/stdlib/doc/src/slave.xml
index 8c16cbf5b1..244822568b 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>
diff --git a/lib/stdlib/doc/src/sofs.xml b/lib/stdlib/doc/src/sofs.xml
index 53f6ca957a..1e5be367bd 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>
@@ -399,8 +399,7 @@ 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>
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..5508be9c5d 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>
diff --git a/lib/stdlib/doc/src/string.xml b/lib/stdlib/doc/src/string.xml
index d64db6c7ee..a9ecb60244 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>
diff --git a/lib/stdlib/doc/src/supervisor.xml b/lib/stdlib/doc/src/supervisor.xml
index 815bf4a489..29e5a732d5 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>
@@ -34,8 +34,8 @@
<p>A behaviour module for implementing a supervisor, a process which
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>
+ Worker processes are normally implemented using one of the
+ <c>gen_event</c>, <c>gen_fsm</c>, <c>gen_statem</c> or <c>gen_server</c>
behaviours. A supervisor implemented using this module will have
a standard set of interface functions and include functionality
for tracing and error reporting. Supervisors are used to build a
@@ -221,7 +221,8 @@
<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>,
+ <c>supervisor</c>, <c>gen_server</c>,
+ <c>gen_fsm</c> or <c>gen_statem</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
@@ -636,6 +637,7 @@
<title>SEE ALSO</title>
<p><seealso marker="gen_event">gen_event(3)</seealso>,
<seealso marker="gen_fsm">gen_fsm(3)</seealso>,
+ <seealso marker="gen_statem">gen_statem(3)</seealso>,
<seealso marker="gen_server">gen_server(3)</seealso>,
<seealso marker="sys">sys(3)</seealso></p>
</section>
diff --git a/lib/stdlib/doc/src/supervisor_bridge.xml b/lib/stdlib/doc/src/supervisor_bridge.xml
index d356b4b57e..e40c8bbd6f 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>
diff --git a/lib/stdlib/doc/src/sys.xml b/lib/stdlib/doc/src/sys.xml
index d400f72e1d..2255395f46 100644
--- a/lib/stdlib/doc/src/sys.xml
+++ b/lib/stdlib/doc/src/sys.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>
@@ -217,14 +217,18 @@
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
+ a <c>gen_statem</c> process returns information about
+ its current state and 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
+ <c>gen_fsm</c>, <c>gen_statem</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>
+ 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>,
+ <seealso marker="gen_statem#Module:format_status/2">gen_statem format_status/2</seealso>, and
+ <seealso marker="gen_event#Module:format_status/2">gen_event format_status/2</seealso>
for more details.</p>
</desc>
</func>
@@ -245,6 +249,8 @@
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_statem</c> process <c><anno>State</anno></c> is
+ the tuple <c>{CurrentState,CurrentData}.</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,
@@ -263,8 +269,9 @@
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
+ processes</seealso>. The <c>gen_server</c>, <c>gen_fsm</c>,
+ <c>gen_statem</c> and <c>gen_event</c> OTP
+ behaviour modules export this function, 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
@@ -290,6 +297,8 @@
<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.
+ The same applies for a <c>gen_statem</c> process but
+ it names the tuple fields <c>{CurrentState,CurrentData}</c>.
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
@@ -304,7 +313,8 @@
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
+ for <c>gen_server</c>, <c>gen_fsm</c> or <c>gen_statem</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
@@ -329,7 +339,8 @@
<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,
+ <c>gen_server</c>, <c>gen_fsm</c>, <c>gen_statem</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>
</desc>
</func>
diff --git a/lib/stdlib/doc/src/timer.xml b/lib/stdlib/doc/src/timer.xml
index 7609487300..4f259d57a8 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>
diff --git a/lib/stdlib/doc/src/unicode.xml b/lib/stdlib/doc/src/unicode.xml
index 966eec49f5..edc6830cb5 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>
diff --git a/lib/stdlib/doc/src/unicode_usage.xml b/lib/stdlib/doc/src/unicode_usage.xml
index c4cb193b07..b4c9385e33 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>
diff --git a/lib/stdlib/doc/src/win32reg.xml b/lib/stdlib/doc/src/win32reg.xml
index 2a5a4a462d..52a8942c59 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>
diff --git a/lib/stdlib/doc/src/zip.xml b/lib/stdlib/doc/src/zip.xml
index 186c8ac724..09a6587583 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>
diff --git a/lib/stdlib/examples/erl_id_trans.erl b/lib/stdlib/examples/erl_id_trans.erl
index c2e345763a..eab2ec4164 100644
--- a/lib/stdlib/examples/erl_id_trans.erl
+++ b/lib/stdlib/examples/erl_id_trans.erl
@@ -671,6 +671,10 @@ 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]) ->
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_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/binary.erl b/lib/stdlib/src/binary.erl
index fb0c395d70..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.
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.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 936c095aef..73934e0e3c 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.
@@ -43,13 +43,18 @@
-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.
@@ -63,7 +68,7 @@
sstk=[] :: [#epp{}], %State stack
path=[] :: [file:name()], %Include-path
macs = #{} %Macros (don't care locations)
- :: #{name() => {argspec(), tokens()}},
+ :: #{name() => predef() | [userdef()]},
uses = #{} %Macro use structure
:: #{name() => [{argspec(), [used()]}]},
default_encoding = ?DEFAULT_ENCODING :: source_encoding(),
@@ -155,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
@@ -216,6 +223,10 @@ 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) ->
@@ -260,9 +271,11 @@ 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
@@ -270,6 +283,8 @@ parse_file(Epp) ->
[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.
@@ -749,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) ->
@@ -804,6 +823,24 @@ scan_extends([{atom,Ln,A}=ModAtom,{')',_Lr}|_Ts], Ms0) ->
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,_}=Mac|Toks], Def, From, St)
@@ -930,9 +967,15 @@ 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([{'(',_Llp},{string,_Lf,_NewName0},{')',_Lrp},{dot,_Ld}],
Inc, From, St)
@@ -947,12 +990,11 @@ scan_include_lib([{'(',_Llp},{string,_Lf,NewName0},{')',_Lrp},{dot,_Ld}],
{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,
@@ -960,7 +1002,7 @@ 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)
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..ef54076ee3 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.
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 4ca9a609a8..2508f96b91 100644
--- a/lib/stdlib/src/erl_lint.erl
+++ b/lib/stdlib/src/erl_lint.erl
@@ -1502,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) ->
@@ -1517,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),
@@ -1582,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].
@@ -2284,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) ->
@@ -2381,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;
@@ -2653,6 +2674,8 @@ find_field(_F, []) -> error.
%% Attr :: 'type' | 'opaque'
%% Checks that a type definition is valid.
+-dialyzer({no_match, type_def/6}).
+
type_def(Attr, Line, TypeName, ProtoType, Args, St0) ->
TypeDefs = St0#lint.types,
Arity = length(Args),
@@ -2714,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),
@@ -2755,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)
@@ -2866,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) ->
@@ -3416,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
diff --git a/lib/stdlib/src/erl_parse.yrl b/lib/stdlib/src/erl_parse.yrl
index b1c574ea60..a896de4f1c 100644
--- a/lib/stdlib/src/erl_parse.yrl
+++ b/lib/stdlib/src/erl_parse.yrl
@@ -170,9 +170,16 @@ fun_type -> '(' top_types ')' '->' top_type
: {type, ?anno('$1'), 'fun',
[{type, ?anno('$1'), product, '$2'},'$5']}.
+map_pair_types -> '...' : [{type, ?anno('$1'), map_field_assoc,
+ [{type, ?anno('$1'), any, []},
+ {type, ?anno('$1'), any, []}]}].
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'].
@@ -311,7 +318,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'].
@@ -810,7 +817,8 @@ Erlang code.
| {'type', anno(), 'map', [af_map_pair_type()]}.
-type af_map_pair_type() ::
- {'type', anno(), 'map_field_assoc', [abstract_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()]}.
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..ca764675fc 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.
@@ -344,11 +344,31 @@ binary_type(I1, I2) ->
map_type(Fs) ->
{first,[$#],map_pair_types(Fs)}.
-map_pair_types(Fs) ->
+map_pair_types(Fs0) ->
+ Fs = replace_any_map(Fs0),
tuple_type(Fs, fun map_pair_type/2).
+replace_any_map([{type,Line,map_field_assoc,[KType,VType]}]=Fs) ->
+ IsAny = fun({type,_,any,[]}) -> true;
+ %% ({var,_,'_'}) -> true;
+ (_) -> false
+ end,
+ case IsAny(KType) andalso IsAny(VType) of
+ true ->
+ [{type,Line,map_field_assoc,any}];
+ false ->
+ Fs
+ end;
+replace_any_map([F|Fs]) ->
+ [F|replace_any_map(Fs)];
+replace_any_map([]) -> [].
+
+map_pair_type({type,_Line,map_field_assoc,any}, _Prec) ->
+ leaf("...");
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_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/ets.erl b/lib/stdlib/src/ets.erl
index 1fca3624dc..3f74e01692 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.
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/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..23bddafeed
--- /dev/null
+++ b/lib/stdlib/src/gen_statem.erl
@@ -0,0 +1,1308 @@
+%%
+%% %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()) ->
+ {NewCallbackMode :: callback_mode(),
+ NewState :: state(),
+ NewData :: data()}.
+
+%% 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
+ {NewCallbackMode,NewState,NewData} ->
+ callback_mode(NewCallbackMode) orelse
+ error({callback_mode,NewCallbackMode}),
+ {ok,
+ S#{callback_mode := NewCallbackMode,
+ 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_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..6fba63a895 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.
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/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 6f546da7b8..c3ad261daa 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"};
@@ -649,8 +542,12 @@ obsolete_1(random, _, _) ->
obsolete_1(code, rehash, 0) ->
{deprecated, "deprecated because the code path cache feature has been removed"};
+%% Removed in OTP 19.
+
obsolete_1(overload, _, _) ->
{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.
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..4a19603ec2 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,13 +479,15 @@ 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,_,_]) ->
+trans_init(gen,init_it,[GenMod,_,_,Module,_,_])
+ when GenMod =:= gen_server;
+ GenMod =:= gen_statem;
+ GenMod =:= gen_fsm ->
{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|_]) ->
+trans_init(gen,init_it,[GenMod,_,_,_,Module|_])
+ when GenMod =:= gen_server;
+ GenMod =:= gen_statem;
+ GenMod =:= gen_fsm ->
{Module,init,1};
trans_init(gen,init_it,[gen_event|_]) ->
{gen_event,init_it,6};
diff --git a/lib/stdlib/src/proplists.erl b/lib/stdlib/src/proplists.erl
index 1840fa5cc0..8e99ec0ed9 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.
diff --git a/lib/stdlib/src/queue.erl b/lib/stdlib/src/queue.erl
index 2e65759d2a..d4d1904886 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.
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 8b639dd0a7..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.
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_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 4e629a5e56..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.
diff --git a/lib/stdlib/src/sofs.erl b/lib/stdlib/src/sofs.erl
index bcd1fc11e2..b18df2ad09 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.
diff --git a/lib/stdlib/src/stdlib.app.src b/lib/stdlib/src/stdlib.app.src
index b8a7973cf2..32bcdc4f2a 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,
diff --git a/lib/stdlib/src/stdlib.appup.src b/lib/stdlib/src/stdlib.appup.src
index 04cdf31ada..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-7](\\.[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-7](\\.[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 9d783af82a..a594c66fa7 100644
--- a/lib/stdlib/src/supervisor.erl
+++ b/lib/stdlib/src/supervisor.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.
@@ -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
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 287f63b2be..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 \
diff --git a/lib/stdlib/test/array_SUITE.erl b/lib/stdlib/test/array_SUITE.erl
index 6fec03a2f7..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.
@@ -22,11 +22,6 @@
-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:seconds(60)).
-
%% 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]).
@@ -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 f750145ef0..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">>),
diff --git a/lib/stdlib/test/beam_lib_SUITE.erl b/lib/stdlib/test/beam_lib_SUITE.erl
index 5de7b661e5..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)).
@@ -30,7 +30,7 @@
-else.
-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 8bb29b6a26..55fdcdd054 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.
@@ -20,6 +20,7 @@
-module(binary_module_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,
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,
@@ -27,45 +28,17 @@
-export([random_number/1, make_unaligned/1]).
-
-
-%%-define(STANDALONE,1).
-
--ifdef(STANDALONE).
-
--define(line,erlang:display({?MODULE,?LINE}),).
-
--else.
-
-include_lib("common_test/include/ct.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].
+ Config.
-end_per_testcase(_Case, Config) ->
- ?line Dog = ?config(watchdog, Config),
- ?line test_server:timetrap_cancel(Dog),
+end_per_testcase(_Case, _Config) ->
ok.
--endif.
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,30}}].
all() ->
[scope_return,interesting, random_ref_fla_comp, random_ref_sr_comp,
@@ -92,300 +65,297 @@ end_per_group(_GroupName, 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,364 +364,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]),
+ [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]),
- ?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>>]),
+ 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) ->
rand:seed(exsplus, {1271,769940,559934}),
- ?line ok = encode_decode_loop({1,200},1000), % Need to be long enough
- % to create offheap binaries
+ 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);
_ ->
@@ -760,90 +728,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),
+ <<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}),
- ?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),
+ 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 ->
@@ -876,34 +840,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),
+ 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}),
- ?line ok = random_bin_to_list(5000),
+ ok = random_bin_to_list(5000),
ok.
random_bin_to_list(0) ->
@@ -914,10 +877,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",
@@ -927,10 +890,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",
@@ -940,37 +903,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}),
+ 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}),
- ?line random_parts(5000),
+ random_parts(5000),
ok.
@@ -997,8 +959,7 @@ random_parts(X,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) ->
put(success_counter,0),
rand:seed(exsplus, {1271,769940,559934}),
@@ -1027,8 +988,8 @@ 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) ->
put(success_counter,0),
rand:seed(exsplus, {1271,769940,559934}),
@@ -1045,14 +1006,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),
+ put(success_counter,0),
rand:seed(exsplus, {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}),
+ 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.
@@ -1332,7 +1293,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;
@@ -1346,7 +1307,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) ->
@@ -1382,7 +1343,7 @@ 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
+ % decimal positions
X = rand:uniform(Max - Min + 1) + Min - 1,
list_to_integer([one_random_number(rand:uniform(10)) || _ <- lists:seq(1,X)]).
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 47dd95f86b..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.
@@ -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 bddc3a4821..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.
@@ -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 ee3a812e24..8948f496c4 100644
--- a/lib/stdlib/test/dets_SUITE.erl
+++ b/lib/stdlib/test/dets_SUITE.erl
@@ -19,7 +19,7 @@
%%
-module(dets_SUITE).
-%-define(debug, true).
+%%-define(debug, true).
-ifdef(debug).
-define(format(S, A), io:format(S, A)).
@@ -30,8 +30,8 @@
-else.
-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,
@@ -83,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() ->
[
@@ -130,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, []),
@@ -141,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).
@@ -184,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).
@@ -283,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).
@@ -325,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).
@@ -365,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).
@@ -405,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).
@@ -448,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,
@@ -500,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,
@@ -571,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),
@@ -634,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).
@@ -662,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),
@@ -693,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).
@@ -729,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),
@@ -797,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,
@@ -1270,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,
@@ -1617,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"),
@@ -1696,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"),
@@ -1757,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).
@@ -1836,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).
@@ -1936,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).
@@ -2118,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).
@@ -2232,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),
@@ -2269,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),
@@ -2281,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.
@@ -2404,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).
@@ -2548,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
@@ -2559,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).
@@ -2712,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
@@ -2741,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).
@@ -2870,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
@@ -2936,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),
@@ -2958,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),
@@ -2989,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),
@@ -3012,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),
@@ -3040,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),
@@ -3229,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,
@@ -3276,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"]),
@@ -3306,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),
@@ -3528,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),
@@ -3559,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),
@@ -3585,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),
@@ -3611,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),
@@ -3633,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),
@@ -3649,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.)
@@ -3804,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),
@@ -3830,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),
@@ -3846,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),
@@ -3871,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),
@@ -3894,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),
@@ -3927,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),
@@ -3950,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),
@@ -3972,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">>,
@@ -4014,8 +3806,7 @@ otp_11709(Config) when is_list(Config) ->
_ = file:delete(File),
ok.
-otp_13229(doc) ->
- ["OTP-13229. open_file() exits with badarg when given binary file name."];
+%% 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
@@ -4026,8 +3817,7 @@ otp_13229(_Config) ->
ok
end.
-otp_13260(doc) ->
- ["OTP-13260. Race when opening a table."];
+%% OTP-13260. Race when opening a table.
otp_13260(Config) ->
[ok] = lists:usort([otp_13260_1(Config) || _ <- lists:seq(1, 3)]),
ok.
@@ -4490,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 92d31bb748..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.
@@ -32,7 +32,9 @@
-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) ->
diff --git a/lib/stdlib/test/digraph_SUITE.erl b/lib/stdlib/test/digraph_SUITE.erl
index 97561196d8..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,7 +19,7 @@
%%
-module(digraph_SUITE).
-%-define(STANDALONE,1).
+%%-define(STANDALONE,1).
-ifdef(STANDALONE).
-define(line, put(line, ?LINE), ).
@@ -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 e155857bd4..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,7 +19,7 @@
%%
-module(digraph_utils_SUITE).
-%-define(debug, true).
+%%-define(debug, true).
-ifdef(debug).
-define(line, put(line, ?LINE), ).
-else.
@@ -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 b0a07a95a3..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("common_test/include/ct.hrl").
-%% Default timetrap timeout (set in init_per_testcase).
--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),
- 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 0c00e104b7..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.
@@ -27,14 +27,15 @@
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_8562/1, otp_8665/1, otp_8911/1, otp_10302/1, otp_10820/1,
- otp_11728/1, encoding/1, extends/1, function_macro/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).
@@ -50,19 +51,16 @@ config(data_dir, _) ->
-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,
@@ -70,7 +68,7 @@ all() ->
not_circular, skip_header, otp_6277, otp_7702, otp_8130,
overload_mac, otp_8388, otp_8470, otp_8562,
otp_8665, otp_8911, otp_10302, otp_10820, otp_11728,
- encoding, extends, function_macro].
+ 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,
@@ -689,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"
@@ -823,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">>,
@@ -833,25 +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, []),
+ {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,
- ?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),
+ {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,
- ?line epp:close(Epp),
+ epp:close(Epp),
%% escript
ModuleStr = "any_name",
@@ -860,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),
@@ -1020,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"
@@ -1101,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.
-overload_mac(doc) ->
- ["Advanced test on overloading macros."];
-overload_mac(suite) ->
- [];
+%% 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}}],[]}}
+ ],
+
+ [] = compile(Config, Cs),
+ ok.
+
+%% Advanced test on overloading macros.
overload_mac(Config) when is_list(Config) ->
Cs = [
%% '-undef' removes all definitions of a macro
@@ -1139,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,
@@ -1163,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(),
@@ -1213,28 +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_8562(doc) ->
- ["OTP-8562. 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"
@@ -1242,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 ->
@@ -1257,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).
@@ -1268,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,
@@ -1310,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),
@@ -1372,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"),
@@ -1397,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),
@@ -1424,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.
@@ -1592,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
@@ -1602,7 +1586,7 @@ eval_tests(Config, Fun, Tests) ->
check_test(Config, Test) ->
Filename = "epp_test.erl",
- PrivDir = ?config(priv_dir, Config),
+ 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
@@ -1617,9 +1601,9 @@ check_test(Config, Test) ->
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);
@@ -1671,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;
@@ -1718,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 79b27c6217..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,7 +19,7 @@
%%
-module(erl_anno_SUITE).
-%-define(debug, true).
+%%-define(debug, true).
-ifdef(debug).
-include_lib("common_test/include/ct.hrl").
@@ -46,7 +46,9 @@ groups() ->
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,9 +218,8 @@ bad(_Config) ->
(catch erl_anno:record(bad)), % 1st arg not opaque
ok.
-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}]),
@@ -242,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 1874ee1a1d..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,
@@ -65,19 +66,17 @@ config(priv_dir,_) ->
".".
-else.
-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)).
+-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 2cc4757c04..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), ).
@@ -29,7 +29,7 @@
-define(t, test_server).
-else.
-include_lib("common_test/include/ct.hrl").
--define(privdir, ?config(priv_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,
@@ -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 ad0b37aae3..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.
@@ -28,7 +28,9 @@
-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 d946469625..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), ).
@@ -29,59 +29,46 @@
-define(t, test_server).
-else.
-include_lib("common_test/include/ct.hrl").
--define(datadir, ?config(data_dir, Conf)).
--define(privdir, ?config(priv_dir, Conf)).
+-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_11879/1,otp_13230/1,
- record_errors/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,
@@ -95,7 +82,8 @@ 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_11879, otp_13230,
+ maps, maps_type, maps_parallel_match,
+ otp_11851, otp_11879, otp_13230,
record_errors].
groups() ->
@@ -105,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};
@@ -172,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]) ->
@@ -404,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,
@@ -436,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,
@@ -461,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,
@@ -522,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,
@@ -580,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.
@@ -707,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>>) ->
@@ -731,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) ->
@@ -776,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() ->
@@ -868,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) ->
@@ -899,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]).
@@ -913,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]).
@@ -961,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() ->
@@ -1042,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 ->
@@ -1064,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) ->
@@ -1098,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() ->
@@ -1288,12 +1234,10 @@ 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}) ->
@@ -1326,9 +1270,7 @@ unsized_binary_in_bin_gen_pattern(Config) when is_list(Config) ->
[] = 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,
@@ -1543,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}) ->
@@ -1614,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() ->
@@ -1638,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}]}).
@@ -1665,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() ->
@@ -1883,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}]).
@@ -1915,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).
@@ -1932,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).
@@ -1955,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,
@@ -1972,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\").
@@ -2077,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).
@@ -2137,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\").
@@ -2167,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).">>,
@@ -2178,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>>) ->
@@ -2237,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>>]) ->
@@ -2307,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]).
@@ -2321,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
@@ -2342,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{}}).
@@ -2463,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]).
">>,
@@ -2480,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'}}]} =
@@ -2521,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}},
@@ -2540,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).
@@ -2560,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]),
@@ -2575,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
@@ -2589,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]),
@@ -2605,7 +2523,7 @@ 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.
@@ -2626,9 +2544,8 @@ otp_5878(Config) when is_list(Config) ->
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]).
@@ -2655,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},
@@ -2665,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]).
@@ -2687,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]).
@@ -2701,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).
@@ -2728,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).
@@ -2757,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).
@@ -2775,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) ->
@@ -3063,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).
@@ -3102,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).
@@ -3205,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],
@@ -3391,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) ->
@@ -3432,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().
@@ -3445,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,
@@ -3460,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.
@@ -3507,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) ->
@@ -3555,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.">>,
@@ -3569,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.
@@ -3652,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,
@@ -3672,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,
@@ -3715,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,
@@ -3777,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,
@@ -3868,9 +3820,8 @@ otp_11851(Config) when is_list(Config) ->
[] = run(Config, Ts),
ok.
-otp_11879(doc) ->
- "OTP-11879: The -spec f/a :: (As) -> B; syntax removed, "
- "and is_subtype/2 deprecated";
+%% 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},
@@ -3891,8 +3842,7 @@ otp_11879(_Config) ->
[]} = 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},
@@ -3917,7 +3867,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
@@ -3927,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"),
@@ -3992,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 f7418b1f5f..a48ba7b5b7 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), ).
@@ -32,8 +32,8 @@
-define(t, test_server).
-else.
-include_lib("common_test/include/ct.hrl").
--define(datadir, ?config(data_dir, Config)).
--define(privdir, ?config(priv_dir, Config)).
+-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,20 @@
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]).
%% 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 +79,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]}].
init_per_suite(Config) ->
Config.
@@ -99,8 +95,6 @@ end_per_group(_GroupName, Config) ->
-func(suite) ->
- [];
func(Config) when is_list(Config) ->
Ts = [{func_1,
<<"-record(r1, {a,b}).
@@ -154,11 +148,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 +159,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 +318,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 +369,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 +380,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 +388,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 +411,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 +434,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 +461,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 +494,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 +505,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 +513,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 +538,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 +558,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 +565,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 +578,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 +608,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 +636,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 +652,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 +675,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 +717,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 +728,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 +768,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() ->
@@ -880,13 +823,13 @@ type_examples() ->
%% 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()} |"
@@ -906,19 +849,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"
@@ -927,13 +866,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]),
+ {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.
- ?line 4 = count_atom(A, undefined),
+ 4 = count_atom(A, undefined),
ok.
count_atom(A, A) ->
@@ -945,8 +884,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"
@@ -965,6 +902,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"
@@ -977,9 +915,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"
@@ -988,8 +924,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"
@@ -1010,13 +946,11 @@ otp_8567(Config) when is_list(Config) ->
"-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"
@@ -1033,42 +967,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 =
+ 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>>.">>}
@@ -1105,9 +1035,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"),
@@ -1133,9 +1061,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).
@@ -1170,9 +1096,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}]}),
@@ -1183,6 +1107,24 @@ 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() :: #{...}. ">>),
+ ok = pp_forms(<<"-type t() :: #{atom() := integer(), ...}. ">>),
+
+ 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.
+
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
compile(Config, Tests) ->
@@ -1193,11 +1135,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
@@ -1363,10 +1305,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 941703b5dd..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).
@@ -43,22 +44,17 @@
%% ".".
-else.
-include_lib("common_test/include/ct.hrl").
--export([init_per_testcase/2, end_per_testcase/2]).
+-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,70 +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 = anno_info(),
+ 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.
@@ -202,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.
@@ -214,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 = ["<<", "<-", "<=", "<", ">>", ">=", ">", "->", "--",
@@ -231,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,
@@ -247,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",
@@ -267,9 +253,9 @@ punctuations() ->
ok.
comments() ->
- ?line test("a %%\n b"),
- ?line {ok,[],1} = erl_scan_string("%"),
- ?line test("a %%\n b"),
+ test("a %%\n b"),
+ {ok,[],1} = erl_scan_string("%"),
+ 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}} =
@@ -289,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.
@@ -321,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}, []),
@@ -333,11 +319,11 @@ 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"}] ],
- ?line {ok,[{integer,1,239},{'@',1}],1} = erl_scan_string("16#ef@"),
+ {ok,[{integer,1,239},{'@',1}],1} = erl_scan_string("16#ef@"),
{ok,[{integer,{1,1},239},{'@',{1,6}}],{1,7}} =
erl_scan_string("16#ef@", {1,1}, []),
{ok,[{integer,{1,1},14},{atom,{1,5},g@}],{1,7}} =
@@ -349,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}, []),
@@ -375,11 +361,11 @@ 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),
@@ -425,27 +411,27 @@ 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}]],
@@ -458,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"}]),
@@ -476,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.
@@ -499,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.
@@ -533,9 +519,9 @@ eof() ->
erl_scan_tokens(C6,eof,1),
%% A dot followed by eof is special:
- ?line {more, C} = erl_scan:tokens([], "a.", 1),
- ?line {done,{ok,[{atom,1,a},{dot,1}],1},eof} = erl_scan_tokens(C,eof,1),
- ?line {ok,[{atom,1,foo},{dot,1}],1} = erl_scan_string("foo."),
+ {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."),
%% With column.
{more, CCol} = erl_scan:tokens([], "a.", {1,1}),
@@ -548,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,
@@ -716,40 +702,40 @@ anno_info() ->
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,_," "},
@@ -764,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),
@@ -798,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}),
@@ -832,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]),
@@ -855,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} =
@@ -1088,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}]),
@@ -1111,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}]),
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 b2f1618ff5..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.
@@ -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 a8d646c044..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,
@@ -43,7 +43,9 @@
-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 6f9be9b179..15e3142408 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]).
@@ -85,7 +83,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,26 +107,25 @@
-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) ->
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,20}}].
all() ->
[{group, new}, {group, insert}, {group, lookup},
@@ -158,7 +155,7 @@ all() ->
otp_9423,
ets_all,
take,
-
+
memory_check_summary]. % MUST BE LAST
groups() ->
@@ -199,10 +196,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.
@@ -212,7 +209,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,
@@ -228,45 +225,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),
@@ -343,7 +334,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) ->
@@ -371,14 +362,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.
@@ -387,32 +376,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.
@@ -427,189 +411,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')).
@@ -618,202 +594,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.
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,
{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) ->
@@ -821,14 +775,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
@@ -839,80 +790,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->
@@ -934,21 +882,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) ->
@@ -959,132 +904,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',
@@ -1112,52 +1045,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),
@@ -1169,162 +1099,152 @@ 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).
@@ -1361,11 +1281,11 @@ 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)),
+ 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);
@@ -1374,152 +1294,152 @@ random_test() ->
end,
Seed = rand:export_seed(),
{ok,F} = file:open(filename:join([WriteDir,"last_random_seed.txt"]),
- [write]),
+ [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() ->
+ io:format("~nData inserted~n"),
+ do_n_times(fun() ->
I = rand:uniform(25),
- ?line Key = create_random_string(I) ++ '_',
- ?line L1 = ets_match_object(OrdSet,{Key,'_'}),
- ?line L2 = lists:sort(ets_match_object(Set,{Key,'_'})),
+ 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
@@ -1530,15 +1450,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,'_'}),
@@ -1563,16 +1483,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},
@@ -1582,12 +1499,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) ->
@@ -1606,16 +1523,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,
@@ -1625,14 +1541,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,
@@ -1641,10 +1557,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 ->
@@ -1664,11 +1580,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) ->
@@ -1686,14 +1602,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.
@@ -1701,13 +1617,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
@@ -1723,22 +1639,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),
@@ -1758,26 +1671,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)
@@ -1795,78 +1708,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
@@ -1874,19 +1787,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;
@@ -1899,34 +1812,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
@@ -1944,12 +1857,12 @@ 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.
@@ -1961,11 +1874,11 @@ evil_update_counter(Config) when is_list(Config) ->
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) ->
@@ -1975,21 +1888,21 @@ 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,
+ 0 -> 16#12345678;
+ 1 -> 16#12345678FFFFFFFF;
+ 2 -> 16#7777777777FFFFFFFF863648726743
+ end,
Start = Start0 + rand:uniform(100000),
ets:insert(T, {dracula,Start}),
Iter = 40000,
@@ -2005,7 +1918,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]),
@@ -2042,20 +1955,17 @@ update_counter_with_default_do(Opts) ->
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,
@@ -2064,74 +1974,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}]),
@@ -2151,50 +2057,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
@@ -2203,33 +2108,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() ->
@@ -2237,238 +2142,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) ->
@@ -2552,26 +2454,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),
@@ -2579,42 +2478,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.
@@ -2645,7 +2541,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() ->
@@ -2657,19 +2554,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,
@@ -2678,38 +2572,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]))),
@@ -2717,8 +2611,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, '_'}
@@ -2727,30 +2619,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
@@ -2766,166 +2655,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,
@@ -2946,21 +2822,21 @@ privacy_do(Opts) ->
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).
privacy_owner(Boss, Opts) ->
ets_new(pub, [public,named_table | Opts]),
@@ -2973,7 +2849,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}),
@@ -2993,82 +2869,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})),
+
+ Tab = ets_new(foo,Opts),
+ {'EXIT',{badarg,_}} = (catch ets:insert(Tab,{})),
- ?line Tab3 = ets_new(foo,[{keypos,3}| Opts]),
- ?line {'EXIT',{badarg,_}} = (catch ets:insert(Tab3,{a,b})),
+ Tab3 = ets_new(foo,[{keypos,3}| Opts]),
+ {'EXIT',{badarg,_}} = (catch ets:insert(Tab3,{a,b})),
- ?line {'EXIT',{badarg,_}} = (catch ets:insert(Tab,[key,val2])),
- ?line true = ets:delete(Tab),
- ?line true = ets:delete(Tab3),
- ?line verify_etsmem(EtsMem).
+ {'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) ->
@@ -3105,7 +2980,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]),
@@ -3120,7 +2995,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
@@ -3139,40 +3014,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() ->
[
@@ -3199,69 +3073,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) ->
@@ -3281,59 +3150,59 @@ 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),
@@ -3341,139 +3210,128 @@ 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(),
+ %%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
@@ -3515,11 +3373,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 () ->
@@ -3537,7 +3395,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,
@@ -3545,89 +3403,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},
@@ -3642,41 +3493,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) ->
@@ -3707,98 +3557,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).
@@ -3823,25 +3669,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}] =
@@ -3860,13 +3706,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
@@ -3876,98 +3722,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(),
@@ -4000,90 +3841,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}]),
@@ -4093,62 +3930,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,
@@ -4163,33 +3998,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(),
@@ -4220,16 +4052,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(),
@@ -4260,13 +4090,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]),
@@ -4294,12 +4121,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(),
@@ -4336,12 +4160,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, []),
@@ -4397,32 +4218,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).
@@ -4430,22 +4250,22 @@ 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.
@@ -4453,28 +4273,28 @@ heavy_concurrent(Config) when is_list(Config) ->
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;
@@ -4488,96 +4308,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) ->
@@ -4664,10 +4466,10 @@ create_random_string(0) ->
create_random_string(OfLength) ->
C = case rand:uniform(2) of
- 1 ->
- (rand:uniform($Z - $A + 1) - 1) + $A;
- _ ->
- (rand:uniform($z - $a + 1) - 1) + $a
+ 1 ->
+ (rand:uniform($Z - $A + 1) - 1) + $A;
+ _ ->
+ (rand:uniform($z - $a + 1) - 1) + $a
end,
[C | create_random_string(OfLength - 1)].
@@ -4680,9 +4482,9 @@ create_random_tuple(OfLength) ->
create_partly_bound_tuple(OfLength) ->
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) ->
@@ -4757,7 +4559,7 @@ xfilltabint(Tab,N) ->
_ ->
filltabint(Tab,N)
end.
-
+
filltabstr(Tab,N) ->
filltabstr(Tab,0,N).
@@ -4928,7 +4730,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);
@@ -4947,19 +4749,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],
@@ -4969,9 +4771,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',[]) ->
@@ -5005,7 +4807,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) ->
@@ -5016,7 +4818,7 @@ verify(T, Ids) ->
ok;
_ ->
io:format("Failed:\n~p\n", [Errors]),
- ?t:fail()
+ ct:fail(failed)
end.
verify2([{_N,Id}|RL], [Id|R]) ->
@@ -5025,8 +4827,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).
@@ -5036,30 +4837,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) ->
@@ -5072,7 +4873,7 @@ 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;
@@ -5085,41 +4886,41 @@ meta_wb_do(Opts) ->
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}).
@@ -5127,17 +4928,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;
@@ -5150,21 +4947,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).
@@ -5175,17 +4969,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() ->
@@ -5201,7 +4995,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)
@@ -5210,15 +5004,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).
@@ -5229,16 +5022,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,
@@ -5249,10 +5042,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)
@@ -5261,20 +5054,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
@@ -5283,10 +5075,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}
@@ -5295,7 +5086,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]),
@@ -5309,11 +5099,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}
@@ -5322,7 +5111,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,[]),
@@ -5331,7 +5119,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,
@@ -5342,8 +5129,7 @@ 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,
@@ -5354,8 +5140,7 @@ smp_insert(Config) when is_list(Config) ->
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).
@@ -5375,21 +5160,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).
@@ -5403,15 +5187,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()->
@@ -5438,9 +5222,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)
@@ -5451,14 +5235,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)
@@ -5489,8 +5272,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).
@@ -5531,9 +5314,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]} ->
@@ -5551,47 +5334,45 @@ 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,
@@ -5612,65 +5393,65 @@ smp_select_delete(Config) when is_list(Config) ->
_ ->
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.
@@ -5687,9 +5468,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}) ->
@@ -5716,10 +5498,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) ->
@@ -5747,7 +5529,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.
@@ -5786,9 +5568,9 @@ take(Config) when is_list(Config) ->
ok.
-%
-% Utility functions:
-%
+%%
+%% Utility functions:
+%%
add_lists(L1,L2) ->
add_lists(L1,L2,[]).
@@ -5810,9 +5592,9 @@ 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,rand:uniform(9999)} || ProcN <- lists:seq(1,NumOfProcs)],
Parent = self(),
@@ -5822,7 +5604,7 @@ 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]),
rand:seed(exsplus, {Seed,Seed,Seed}),
@@ -5840,7 +5622,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) ->
@@ -5848,7 +5630,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])
@@ -5874,7 +5656,7 @@ wait_for_memory_deallocations() ->
erts_debug:set_internal_state(available_internal_state, true),
wait_for_memory_deallocations()
end.
-
+
etsmem() ->
wait_for_memory_deallocations(),
@@ -5887,35 +5669,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(),
@@ -5972,10 +5754,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
@@ -6101,7 +5884,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) ->
@@ -6136,130 +5919,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.
@@ -6271,18 +6054,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),
@@ -6340,11 +6123,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, _}} ->
@@ -6434,7 +6217,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) ->
@@ -6446,7 +6229,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 5c2ab4747c..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.
@@ -25,7 +25,9 @@
-compile([export_all]).
-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 ->
@@ -94,7 +93,7 @@ ex1_sub(Config) ->
prep(Config) ->
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).
@@ -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 947dc2ad8d..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)).
@@ -30,7 +30,7 @@
-else.
-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 5d5434c7b2..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.
@@ -33,15 +33,14 @@
-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)],
@@ -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 8ecbc7eadf..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("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,58 +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;
- {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"),
- ?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.
@@ -120,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"),
@@ -258,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.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -282,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'),
@@ -291,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"),
@@ -324,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) ->
@@ -355,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.
@@ -452,50 +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;
- {unix, _} ->
- ?line ok = file:set_cwd(<<"/usr">>),
- ?line <<"/usr/foo">> = filename:absname(<<"foo">>),
- ?line <<"/usr/../ebin">> = filename:absname(<<"../ebin">>),
- ?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.
@@ -503,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">>),
@@ -612,7 +604,6 @@ dirname_bin(Config) when is_list(Config) ->
<<"/">> = filename:dirname(<<"/">>),
<<"/">> = filename:dirname(<<"/usr">>),
ok.
-
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -624,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.
@@ -635,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.
@@ -699,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(<<"..">>),
@@ -730,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) ->
@@ -756,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 66150e60c1..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,
@@ -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 da28e085bb..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.
@@ -27,18 +27,15 @@
-include_lib("common_test/include/ct.hrl").
-% 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),
+ 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 e14f057720..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.
@@ -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 c238232ef0..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.
@@ -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 634d868ad4..3242511f4a 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.
@@ -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),
+ ct:sleep(1),
+ {'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),
+ ct:sleep(1),
+ {'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 a0c3c9317a..54f452825f 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("common_test/include/ct.hrl").
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]}].
all() ->
[id_transform].
@@ -54,7 +55,7 @@ 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"]),
@@ -62,10 +63,8 @@ id_transform(Config) when is_list(Config) ->
{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;
+ ct:timetrap({hours,1}),
+ run_in_test_suite();
true ->
{skip,"Valgrind (too slow)"}
end.
@@ -139,9 +138,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 +191,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 821673559b..be6b470ca7 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.
@@ -26,7 +26,7 @@
-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 +37,7 @@
-export([pretty/2]).
-%-define(debug, true).
+%%-define(debug, true).
-ifdef(debug).
-define(format(S, A), io:format(S, A)).
@@ -48,22 +48,18 @@
-else.
-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].
+ 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,
@@ -92,855 +88,588 @@ 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 +678,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 +715,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 +783,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 +812,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 +822,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 +891,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 +899,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 +926,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 +937,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 +950,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,3}}].
+
+%% 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 +971,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 +1002,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 +1010,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 +1029,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 +1504,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 +1566,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 +1645,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,
@@ -2125,27 +1828,37 @@ rpc_call_max(Node, M, F, Args) ->
%% Make sure that a bad specification for a printable range is rejected.
bad_printable_range(Config) when is_list(Config) ->
Cmd = lists:concat([lib:progname()," +pcunnnnnicode -run erlang halt"]),
- case os:cmd(Cmd) of
- "bad range of printable characters" ++ _ ->
- ok;
- String ->
- io:format("~s\n", [String]),
- ?t:fail()
+ 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,
+ catch port_close(P),
+ flush_from_port(P),
+ ok.
+
+flush_from_port(P) ->
+ receive {P, _} ->
+ flush_from_port(P)
+ after 0 ->
+ 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,
@@ -2201,15 +1914,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]),
@@ -2253,12 +1964,14 @@ io_lib_width_too_small(_Config) ->
%% Test that the time for a huge message queue is not
%% significantly slower than with an empty message queue.
io_with_huge_message_queue(Config) when is_list(Config) ->
- case test_server:is_native(gen) of
- true ->
+ case {test_server:is_native(gen),test_server:is_cover()} of
+ {true,_} ->
{skip,
"gen is native - huge message queue optimization "
"is not implemented"};
- false ->
+ {_,true} ->
+ {skip,"Running under cover"};
+ {false,false} ->
do_io_with_huge_message_queue(Config)
end.
@@ -2266,26 +1979,42 @@ do_io_with_huge_message_queue(Config) ->
PrivDir = ?privdir(Config),
File = filename:join(PrivDir, "slask"),
{ok, F1} = file:open(File, [write]),
-
- {Time,ok} = timer:tc(fun() -> writes(1000, F1) end),
+ Test = fun(Times) ->
+ {Time,ok} = timer:tc(fun() -> writes(Times, F1) end),
+ Time
+ end,
+ {Times,EmptyTime} = calibrate(100, Test),
[self() ! {msg,N} || N <- lists:seq(1, 500000)],
erlang:garbage_collect(),
- {NewTime,ok} = timer:tc(fun() -> writes(1000, F1) end),
+ FullTime = Test(Times),
file:close(F1),
- io:format("Time for empty message queue: ~p", [Time]),
- io:format("Time for huge message queue: ~p", [NewTime]),
+ file:delete(File),
+ io:format("Number of writes: ~p", [Times]),
+ io:format("Time for empty message queue: ~p", [EmptyTime]),
+ io:format("Time for huge message queue: ~p", [FullTime]),
- IsCover = test_server:is_cover(),
- case (NewTime+1) / (Time+1) of
- Q when Q < 10; IsCover ->
+ case (FullTime+1) / (EmptyTime+1) of
+ Q when Q < 10 ->
ok;
Q ->
io:format("Q = ~p", [Q]),
- ?t:fail()
+ ct:fail(failed)
end,
ok.
+%% Make sure that the time is not too short. That could cause the
+%% test case to fail.
+calibrate(N, Test) when N =< 100000 ->
+ case Test(N) of
+ Time when Time < 50000 ->
+ calibrate(10*N, Test);
+ Time ->
+ {N,Time}
+ end;
+calibrate(N, _) ->
+ N.
+
writes(0, _) -> ok;
writes(N, F1) ->
file:write(F1, "hello\n"),
@@ -2343,7 +2072,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 97e6a90b76..4e39f011f6 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), ).
@@ -48,7 +48,7 @@
-define(privdir(_), "./io_SUITE_priv").
-else.
-include_lib("common_test/include/ct.hrl").
--define(privdir(Conf), ?config(priv_dir, Conf)).
+-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,20}}].
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,56 @@ 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) ->
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 +604,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 +629,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 +639,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 +655,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 +671,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 +751,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 +887,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 +903,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 +920,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 +932,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 +1074,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 +1152,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 +1173,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 +1252,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 +1274,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 +1294,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 +1305,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 +1317,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 +1392,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 +1466,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 +1480,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 +1497,8 @@ wait_for_runerl_server(SPid) ->
after Timeout ->
{error, timeout}
end.
-
-
+
+
stop_runerl_node(CPid) ->
Ref = erlang:monitor(process, CPid),
@@ -1592,11 +1549,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 +1591,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 +1603,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 +1663,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 +1712,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 +1834,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 +1867,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 +1898,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 257607f734..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.
@@ -24,24 +24,18 @@
-module(lists_SUITE).
-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).
@@ -1701,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),
@@ -1733,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(),
@@ -1744,7 +1677,7 @@ 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}.
@@ -1854,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]),
@@ -2123,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,
@@ -2210,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 ->
@@ -2240,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.
@@ -2270,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),
@@ -2300,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),
@@ -2363,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) ->
@@ -2385,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]),
@@ -2404,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.
@@ -2465,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) ->
@@ -2528,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,
@@ -2538,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 70d03dd46f..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.
@@ -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 f1f476433b..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.
@@ -25,49 +25,67 @@
-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 6a9478d0d2..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-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.
@@ -23,6 +23,7 @@
-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 = [] :: list(),"
- "t2 = foo :: atom(),"
- "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 a39a82b0df..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.
@@ -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 6f94e740eb..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
@@ -44,9 +44,9 @@
-define(t, test_server).
-else.
-include_lib("common_test/include/ct.hrl").
--define(datadir, ?config(data_dir, Config)).
--define(privdir, ?config(priv_dir, Config)).
--define(testcase, ?config(?TESTCASE, Config)).
+-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 77fe6adb7c..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("common_test/include/ct.hrl").
-% 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),
+ 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 = rand:seed(exsplus, {1,2,4}),
- ?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},
diff --git a/lib/stdlib/test/rand_SUITE.erl b/lib/stdlib/test/rand_SUITE.erl
index ab260da950..1bcdc3ccd0 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.
@@ -35,19 +35,17 @@
-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),
+ Config.
+
+end_per_testcase(_Case, _Config) ->
ok.
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,3}}].
all() ->
[seed, interval_int, interval_float,
@@ -85,16 +83,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 +134,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 +180,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 +214,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 +238,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 +252,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.
@@ -330,9 +314,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 +333,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 +347,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 +377,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),
diff --git a/lib/stdlib/test/random_SUITE.erl b/lib/stdlib/test/random_SUITE.erl
index 701a3e3f33..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("common_test/include/ct.hrl").
-% 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),
+ 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 6da7da04de..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.
diff --git a/lib/stdlib/test/random_unicode_list.erl b/lib/stdlib/test/random_unicode_list.erl
index 3bc86a8430..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.
diff --git a/lib/stdlib/test/re_SUITE.erl b/lib/stdlib/test/re_SUITE.erl
index bd495ce587..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.
@@ -33,7 +33,9 @@
-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 b7d1df39b8..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",[]),
@@ -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",[]),
diff --git a/lib/stdlib/test/select_SUITE.erl b/lib/stdlib/test/select_SUITE.erl
index f92971583a..e999d040c9 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("common_test/include/ct.hrl").
--define(fmt(A,B),test_server:format(A,B)).
-endif.
-
+
+-define(fmt(A,B), io:format(A, B)).
+
-ifdef(debug).
-ifdef(STANDALONE).
-define(line, erlang:display({?MODULE,?LINE}), ).
@@ -53,7 +53,7 @@
-endif.
-define(dbgformat(A,B),noop).
-endif.
-
+
-ifdef(STANDALONE).
config(priv_dir,_) ->
".".
@@ -64,16 +64,15 @@ config(priv_dir,_) ->
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].
+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.
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,20}}].
all() ->
[return_values, select_test].
@@ -94,17 +93,11 @@ 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) ->
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 +110,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 +121,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 +182,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,10 +195,10 @@ 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
@@ -229,7 +222,7 @@ create_pb_key(N,list) ->
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};
@@ -309,7 +302,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)),
@@ -351,18 +344,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
@@ -373,18 +366,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 ->
@@ -394,27 +387,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,'_','_','_','_'},[],['$_']}],
@@ -448,51 +441,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','_'},[],
@@ -519,7 +512,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 ->
@@ -562,40 +555,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','_'},[],
@@ -664,34 +657,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) ->
@@ -702,121 +695,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 06da696700..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.
@@ -36,15 +36,14 @@
-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,
diff --git a/lib/stdlib/test/shell_SUITE.erl b/lib/stdlib/test/shell_SUITE.erl
index 747b76abb6..dc82e92876 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.
@@ -54,26 +54,23 @@ config(priv_dir,_) ->
-else.
-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,
@@ -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,115 +272,109 @@ 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 :: binary(),
reply = no,
@@ -404,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),
@@ -415,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\">>,
@@ -581,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:
@@ -642,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
- 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\">>)
+ 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,
- 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,
@@ -1213,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,
@@ -1229,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,
@@ -1242,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 =
@@ -1290,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
- 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
+ Fun(L, B, Pos-1, Fun);
+ (L, B, _, _Fun) -> ok
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);
@@ -1549,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),
@@ -1615,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,
@@ -1655,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.
@@ -1726,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.
- 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,
+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.
+">>,
+ 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 ++ "\"),
@@ -2317,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 ->
@@ -2406,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) "
@@ -2476,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]).
@@ -2516,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
@@ -2552,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,
@@ -2569,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,
@@ -2581,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,
@@ -2596,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})).">>,
@@ -2618,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.">>),
%%
@@ -2644,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.
@@ -2663,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) ->
@@ -2747,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
@@ -3097,9 +3017,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.
@@ -3107,10 +3027,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 f01bf77550..25b706e81f 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.
@@ -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,27 @@ 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, []),
+ 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 +84,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 +122,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 +197,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 +225,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 9eed2893d4..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)).
@@ -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 687e2fb6e8..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.
@@ -31,10 +31,7 @@
suite() -> [{ct_hooks,[ts_install_cth]}].
all() ->
- [app_test, appup_test, assert_test, {group,upgrade}].
-
-groups() ->
- [{upgrade,[minor_upgrade,major_upgrade]}].
+ [app_test, appup_test, assert_test].
init_per_suite(Config) ->
Config.
@@ -42,13 +39,9 @@ init_per_suite(Config) ->
end_per_suite(_Config) ->
ok.
-init_per_group(upgrade, Config) ->
- ct_release_test:init(Config);
init_per_group(_GroupName, Config) ->
Config.
-end_per_group(upgrade, Config) ->
- ct_release_test:cleanup(Config);
end_per_group(_GroupName, Config) ->
Config.
@@ -58,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
@@ -165,35 +155,10 @@ check_appup([],_,_) ->
ok.
-minor_upgrade(Config) ->
- ct_release_test:upgrade(stdlib,minor,{?MODULE,[]},Config).
-
-major_upgrade(Config) ->
- ct_release_test:upgrade(stdlib,major,{?MODULE,[]},Config).
-
-%% Version numbers are checked by ct_release_test, so there is nothing
-%% more to check here...
-upgrade_init(CtData,State) ->
- {ok,{FromVsn,ToVsn}} = ct_release_test:get_app_vsns(CtData,stdlib),
- case ct_release_test:get_appup(CtData,stdlib) of
- {ok,{FromVsn,ToVsn,[restart_new_emulator],[restart_new_emulator]}} ->
- io:format("Upgrade/downgrade ~p <--> ~p",[FromVsn,ToVsn]);
- {error,{vsn_not_found,_}} when FromVsn==ToVsn ->
- io:format("No upgrade test for stdlib, same version")
- end,
- State.
-upgrade_upgraded(_CtData,State) ->
- State.
-upgrade_downgraded(_CtData,State) ->
- State.
-
-
-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 6ac3950f44..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.
@@ -23,26 +23,22 @@
-module(string_SUITE).
-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..3f1aa0e7a3 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,
@@ -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,
@@ -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),
@@ -1689,7 +1687,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 +2116,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 +2144,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 +2152,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 94e719bea1..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.
@@ -30,7 +30,9 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-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 102a147fcd..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.
@@ -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 a22eaa1d3a..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.
@@ -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 e4d656c9bf..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.
@@ -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,15 +67,13 @@ 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).
%% ------------------------------------------------------- %%
@@ -98,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;
@@ -109,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) ->
@@ -119,14 +119,14 @@ 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, rand:uniform(4)),
-
+
%% start 1-4 "after" tests
Pids2 = start_after_test(Pids1, C, rand:uniform(4)),
%%Pids2=Pids1,
@@ -136,7 +136,7 @@ big_loop(C, N, Pids) ->
%% spawn zero, one or two nrev to get some load ;-/
Pids3 = start_nrev(Pids2, rand:uniform(100)),
-
+
big_loop(C, N-1, Pids3)
end.
@@ -149,7 +149,7 @@ start_nrev(Pids, _N) ->
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 = rand:uniform(100)*47,
@@ -177,8 +177,8 @@ 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.
@@ -208,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) ->
@@ -221,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.
@@ -289,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,
@@ -379,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 42b96c4b1c..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.
@@ -56,7 +56,9 @@
-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 f45e00928e..81a591f433 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.
@@ -37,16 +37,16 @@
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).
+init_per_testcase(_Case, Config) ->
+ Config.
+
+end_per_testcase(_Case, _Config) ->
+ ok.
-suite() -> [{ct_hooks,[ts_install_cth]}].
+suite() ->
+ [{ct_hooks,[ts_install_cth]},
+ {timetrap,{minutes,20}}].
all() ->
[utf8_illegal_sequences_bif,
@@ -80,7 +80,7 @@ binaries_errors_limit(Config) when is_list(Config) ->
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 +151,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 +180,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 +199,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 +316,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 +449,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 +527,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 +546,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 +606,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 +621,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 +637,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 +657,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 +677,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 +693,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 ->
@@ -770,20 +767,20 @@ utf8_illegal_sequences_bif(Config) when is_list(Config) ->
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 +794,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 +914,8 @@ only_fail_bif_1(Bin,Coding) ->
Other ->
exit({faulty_encoding_accepted,[Bin],Coding,Other})
end.
-
-
+
+
fail_bif(Bin,Coding) ->
@@ -1021,9 +1017,9 @@ unicode_mixed_to_utf8_2(L) ->
int_to_utf8(E)
end || E <- Flist ],
iolist_to_binary([ExpList]).
-
-
-
+
+
+
utf8_to_list_bsyntax(<<>>) ->
[];
@@ -1042,8 +1038,8 @@ list_to_utf8_bsyntax(List,latin1) ->
FList = flatb(List),
list_to_binary([ <<E/utf8>> || E <- FList ]).
-
-
+
+
%%
@@ -1066,7 +1062,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 +1089,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 +1127,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 +1158,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 +1207,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 +1291,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 +1305,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 982cc86979..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.
@@ -24,7 +24,9 @@
-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,54 +51,52 @@ 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) ->
- ?line Dog = test_server:timetrap(test_server:seconds(10)),
-
- ?line LongKey = "software\\" ++
+ LongKey = "software\\" ++
lists:flatten(lists:duplicate(10, "..\\software\\")) ++
"Ericsson\\Erlang",
- ?line {ok,Reg} = win32reg:open([read,write]),
- ?line ok = win32reg:change_key(Reg, "\\hklm"),
- ?line ok = win32reg:change_key(Reg, LongKey),
- ?line {ok,ErlangKey} = win32reg:current_key(Reg),
- io:format("Erlang key: ~s", [ErlangKey]),
+ {ok,Read} = win32reg:open([read]),
+ ok = win32reg:change_key(Read, "\\hklm"),
+ ok = win32reg:change_key(Read, LongKey),
+ {ok,ErlangKey} = win32reg:current_key(Read),
+ io:format("Erlang key: ~s~n", [ErlangKey]),
+ ok = win32reg:close(Read),
+
+ {ok,Reg} = win32reg:open([read, write]),
%% Write a long value and read it back.
- ?line TestKey = "test_key",
- ?line LongValue = lists:concat(["This is a long value generated by the test case ",?MODULE,":long/1. "|lists:duplicate(128, "a")]),
- ?line ok = win32reg:set_value(Reg, TestKey, LongValue),
- ?line {ok,LongValue} = win32reg:value(Reg, TestKey),
+ TestKey = "test_key",
+ LongValue = lists:concat(["This is a long value generated by the test case ",?MODULE,":long/1. "|lists:duplicate(128, "a")]),
+ ok = win32reg:set_value(Reg, TestKey, LongValue),
+ {ok,LongValue} = win32reg:value(Reg, TestKey),
+ io:format("Where ~p Key ~s Value ~s ~n", [win32reg:current_key(Reg), TestKey, LongValue]),
%% Done.
- ?line ok = win32reg:close(Reg),
- ?line test_server:timetrap_cancel(Dog),
+ ok = win32reg:close(Reg),
ok.
evil_write(Config) when is_list(Config) ->
- ?line Dog = test_server:timetrap(test_server:seconds(10)),
-
- ?line Key = "Software\\Ericsson\\Erlang",
- ?line {ok,Reg} = win32reg:open([read,write]),
- ?line ok = win32reg:change_key(Reg, "\\hklm"),
- ?line ok = win32reg:change_key(Reg, Key),
- ?line {ok,ErlangKey} = win32reg:current_key(Reg),
+ Key = "Software\\Ericsson\\Erlang",
+ {ok,Reg} = win32reg:open([read,write]),
+ ok = win32reg:change_key(Reg, "\\hkcu"),
+ ok = win32reg:change_key_create(Reg, Key),
+ {ok,ErlangKey} = win32reg:current_key(Reg),
io:format("Erlang key: ~s", [ErlangKey]),
%% Write keys with different length and read it back.
- ?line TestKey = "test_key " ++ lists:duplicate(128, $a),
+ TestKey = "test_key " ++ lists:duplicate(128, $a),
evil_write_1(Reg, TestKey),
%% Done.
- ?line ok = win32reg:close(Reg),
- ?line test_server:timetrap_cancel(Dog),
+ ok = win32reg:close(Reg),
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 d80dd10631..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.
@@ -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 135bfd5867..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.
@@ -56,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),
@@ -178,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.
@@ -215,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]),
@@ -243,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]),
@@ -282,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]),
@@ -318,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",
@@ -358,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
@@ -374,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
@@ -408,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}} =
@@ -459,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.
@@ -514,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),
@@ -537,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),
@@ -547,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),
@@ -573,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),
@@ -606,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,
@@ -628,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"),
@@ -698,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},
@@ -833,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 39b44c9104..46e3ceac03 100644
--- a/lib/stdlib/vsn.mk
+++ b/lib/stdlib/vsn.mk
@@ -1 +1 @@
-STDLIB_VSN = 2.7
+STDLIB_VSN = 3.0
diff --git a/lib/syntax_tools/doc/src/Makefile b/lib/syntax_tools/doc/src/Makefile
index 6aca06424d..ff4f3f78ff 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.
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..78b2c7c7a4 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>
@@ -76,11 +76,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/src/erl_prettypr.erl b/lib/syntax_tools/src/erl_prettypr.erl
index 81272e62de..119d375746 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(),
@@ -535,9 +536,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 +649,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 +664,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 +975,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 +1022,236 @@ 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 ->
+ {Prec, _PrecR} = type_preop_prec('#'),
+ Es = lay_map_fields(Fs,
+ floating(text(",")),
+ reset_prec(Ctxt)),
+ D = beside(floating(text("#{")),
+ beside(par(Es),
+ floating(text("}")))),
+ 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 +1304,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 +1315,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 +1400,53 @@ lay_error_info(T, Ctxt) ->
lay_concrete(T, Ctxt) ->
lay(erl_syntax:abstract(T), Ctxt).
+lay_map_fields([H | T], Separator, Ctxt) ->
+ case T of
+ [] ->
+ [case erl_syntax:type(H) of
+ map_type_assoc ->
+ lay_last_type_assoc(H, Ctxt);
+ _ ->
+ lay(H, Ctxt)
+ end];
+ _ ->
+ [maybe_append(Separator, lay(H, Ctxt))
+ | lay_map_fields(T, Separator, Ctxt)]
+ end;
+lay_map_fields([], _, _) ->
+ [empty()].
+
+lay_last_type_assoc(Node, Ctxt) ->
+ Name = erl_syntax:map_type_assoc_name(Node),
+ Value = erl_syntax:map_type_assoc_value(Node),
+ IsAny = fun({type,_,any,[]}) -> true;
+ %% ({var,_,'_'}) -> true;
+ (_) -> false
+ end,
+ case IsAny(Name) andalso IsAny(Value) of
+ true ->
+ text("...");
+ false ->
+ lay_type_assoc(Name, Value, Ctxt)
+ end.
+
+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_syntax.erl b/lib/syntax_tools/src/erl_syntax.erl
index 97b5797b06..f4cda814fc 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,
@@ -412,23 +462,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 +492,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 +557,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 +574,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 +614,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 +692,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 +730,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 +743,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 +769,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 +778,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 +3233,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 +3277,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 +3467,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 +4336,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 +4722,7 @@ application(Module, Name, Arguments) ->
%%
%% `erl_parse' representation:
%%
-%% {call, Pos, Fun, Args}
+%% {call, Pos, Operator, Args}
%%
%% Operator = erl_parse()
%% Arguments = [erl_parse()]
@@ -4623,6 +4777,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 +7411,8 @@ revert(Node) ->
revert_root(Node) ->
case type(Node) of
+ annotated_type ->
+ revert_annotated_type(Node);
application ->
revert_application(Node);
atom ->
@@ -6182,6 +7427,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 +7441,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 +7453,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 +7469,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 +7481,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 +7507,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 +7654,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 +7685,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 +7710,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 +7744,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 +7776,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 +7831,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 +7846,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 +7903,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 +7913,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 +7922,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 +7945,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 +7963,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 +8299,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 +8314,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 +8336,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 +8367,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 58c4cc5244..9815559779 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,
@@ -1029,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>
@@ -1055,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
@@ -1102,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).
@@ -1114,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{}.
@@ -1326,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).
@@ -1523,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
@@ -1547,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};
@@ -1568,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
@@ -1587,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()}.
@@ -1625,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',
@@ -1645,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.
@@ -1659,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().
@@ -1670,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)
@@ -1713,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
@@ -1731,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
@@ -1741,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.
@@ -1887,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/igor.erl b/lib/syntax_tools/src/igor.erl
index 4557678f9d..1d14bd7c3a 100644
--- a/lib/syntax_tools/src/igor.erl
+++ b/lib/syntax_tools/src/igor.erl
@@ -2612,6 +2612,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/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/syntax_tools_SUITE.erl b/lib/syntax_tools/test/syntax_tools_SUITE.erl
index eb52cce6af..b935d42bb7 100644
--- a/lib/syntax_tools/test/syntax_tools_SUITE.erl
+++ b/lib/syntax_tools/test/syntax_tools_SUITE.erl
@@ -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,12 @@ 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.
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/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..5621d3a293
--- /dev/null
+++ b/lib/syntax_tools/test/syntax_tools_SUITE_data/type_specs.erl
@@ -0,0 +1,84 @@
+-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(), ...}. % Currently printed as `#{..., ...}'.
+-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/tools/Makefile b/lib/tools/Makefile
index fef33743c0..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.
diff --git a/lib/tools/c_src/Makefile.in b/lib/tools/c_src/Makefile.in
index e8bce149b1..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.
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 c3f1570477..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>
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 985207a39b..3a6ac37eef 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,32 @@
</header>
<p>This document describes the changes made to the Tools application.</p>
+<section><title>Tools 2.8.3</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ <c>cover:compile_beam/1</c> and
+ <c>cover:compile_beam_directory/1,2</c> crashed when
+ trying to compile a beam file without a <c>'file'</c>
+ attribute. This has been corrected and an error is
+ returned instead.</p>
+ <p>
+ Thanks to Louis-Philippe Gauthier for reporting this bug.</p>
+ <p>
+ Own Id: OTP-13200</p>
+ </item>
+ <item>
+ <p>Fix a bit string comprehension bug in Cover. </p>
+ <p>
+ Own Id: OTP-13277 Aux Id: PR 856 </p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
<section><title>Tools 2.8.2</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 d0b2bfd97f..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.
diff --git a/lib/tools/emacs/erlang-skels.el b/lib/tools/emacs/erlang-skels.el
index ac37ff2ee5..ce26c83295 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,122 @@ 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>
+ "{ok, NewState :: term(), NewData :: term()}." n
+ "code_change(_OldVsn, State, Data, _Extra) ->" n>
+ "{ok, 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
diff --git a/lib/tools/emacs/erlang-test.el b/lib/tools/emacs/erlang-test.el
new file mode 100644
index 0000000000..a5aab04953
--- /dev/null
+++ b/lib/tools/emacs/erlang-test.el
@@ -0,0 +1,107 @@
+;;; 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)
+
+(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))
+ ;; PENDING - setting global tags-file-name is a workaround
+ ;; for GNU Emacs bug23164.
+ (setq tags-file-name tags-file)
+ (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-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 2ff14dea02..3d20d86f43 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))
@@ -1068,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)
@@ -1338,14 +1344,18 @@ 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))))
;;;###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
@@ -1404,12 +1414,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)
@@ -1418,13 +1425,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"
@@ -1543,7 +1550,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)
@@ -2251,6 +2260,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
@@ -2977,8 +2987,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)))
@@ -3749,6 +3760,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)))
@@ -3819,20 +3836,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 ()
@@ -3909,7 +3925,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 " ->"))
@@ -3921,7 +3937,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)
@@ -3951,7 +3967,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."
@@ -4037,7 +4053,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
@@ -4077,7 +4093,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)
@@ -4553,6 +4569,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
@@ -4646,9 +4667,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 ()
@@ -4725,37 +4762,6 @@ 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-
@@ -4793,10 +4799,10 @@ 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.
+ ;; This depends on the advice called
+ ;; erlang-replace-tags-table above. It is not enough to
+ ;; let-bind tags-completion-table-function since that may be
+ ;; overwritten in etags-recognize-tags-table.
(let ((find-tag-default-function 'erlang-find-tag-for-completion))
(complete-tag)))
((and erlang-tags-installed
@@ -4918,6 +4924,132 @@ about Erlang modules."
(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))
+
+ ;; PENDING - This remains to be properly implemented.
+ (cl-defmethod xref-backend-identifier-completion-table
+ ((_backend (eql erlang-etags)))
+ (tags-lazy-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.
;;;
@@ -5316,8 +5448,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))
@@ -5337,8 +5468,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
@@ -5404,7 +5534,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")
@@ -5423,7 +5553,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)
@@ -5450,23 +5580,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)))
@@ -5506,7 +5634,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))
@@ -5636,12 +5765,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.
@@ -5658,16 +5789,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))))
@@ -5770,7 +5899,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)
@@ -5788,11 +5917,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/tools/src/Makefile b/lib/tools/src/Makefile
index 7301ff856a..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.
diff --git a/lib/tools/src/cover.erl b/lib/tools/src/cover.erl
index 3732b0fc85..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.
@@ -573,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},
@@ -589,7 +589,9 @@ call(Request) ->
end.
reply(From, Reply) ->
- From ! {?SERVER,Reply}.
+ From ! {?SERVER,Reply},
+ ok.
+
is_from(From) ->
is_pid(From).
@@ -615,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
@@ -627,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{}).
@@ -672,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}}),
@@ -870,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}).
@@ -907,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} ->
@@ -952,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).
@@ -994,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.
@@ -1219,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),
@@ -1260,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
@@ -2002,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) ->
@@ -2423,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,
@@ -2437,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"
"**************************************"
@@ -2449,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};
@@ -2474,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.
@@ -2541,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}})
@@ -2583,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/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 d552d5b46e..23d66b084e 100644
--- a/lib/tools/src/lcnt.erl
+++ b/lib/tools/src/lcnt.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.
@@ -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").
@@ -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),
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.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..4322943c59 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.
@@ -696,7 +696,7 @@ 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),
+ _ = filter(fun({Tag,B}) -> warnings(Warnings, Tag, [[File,B]]) end, Bad),
{ok, M, NewState}.
do_add_module1(Dir, File, AppName, Builtins, Verbose, Warnings, State) ->
@@ -1727,7 +1727,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.
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/test/Makefile b/lib/tools/test/Makefile
index 8768413dc1..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.
diff --git a/lib/tools/test/cover_SUITE.erl b/lib/tools/test/cover_SUITE.erl
index b9a9cd5be4..b4c9264b30 100644
--- a/lib/tools/test/cover_SUITE.erl
+++ b/lib/tools/test/cover_SUITE.erl
@@ -23,51 +23,43 @@
-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/cprof_SUITE.erl b/lib/tools/test/cprof_SUITE.erl
index 8beaf4f399..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.
@@ -44,7 +44,7 @@
-else.
-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 93d21623ce..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,11 +38,8 @@
'sparc_sunos5.8_64b_emt1.0'/1]).
-include_lib("kernel/include/file.hrl").
-
-include_lib("common_test/include/ct.hrl").
--define(DEFAULT_TIMEOUT, ?t:minutes(5)).
-
-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 6274eabc37..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.
@@ -21,40 +21,23 @@
-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([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 d1a673d6b7..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.
@@ -22,25 +22,20 @@
-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 e40b91392c..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.
@@ -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 773d805cd0..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("common_test/include/ct.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.
-
-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 47b8031bee..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.
@@ -22,56 +22,36 @@
-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 fdcc310df1..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,10 +20,10 @@
-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("common_test/include/ct.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 ae2a69305b..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.
@@ -21,58 +21,29 @@
-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 53aa80d2a3..ce30fb711a 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.
@@ -32,46 +32,41 @@
-else.
-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]).
-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},
@@ -89,48 +84,24 @@ groups() ->
[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.
-
-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,172 +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,{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}}}],
+ {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 ->
+ 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}}},
+ {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}}}];
+ [{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}}},
@@ -1227,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.
@@ -1248,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.
@@ -1291,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"),
@@ -1334,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"),
@@ -1442,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).
@@ -1542,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}}]),
@@ -1554,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).
@@ -1591,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"),
@@ -1643,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]},
@@ -1656,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"),
@@ -1692,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),
@@ -1775,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),
@@ -1794,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"),
@@ -1820,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"),
@@ -1858,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
@@ -1942,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},
@@ -1956,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},
@@ -1969,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"),
@@ -2157,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},
@@ -2232,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],
@@ -2244,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,
@@ -2324,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"),
@@ -2341,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),
@@ -2481,59 +2407,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) ->
@@ -2543,159 +2469,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.
@@ -2707,7 +2633,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'),
@@ -2742,7 +2668,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),
@@ -2782,40 +2708,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 3efe89d9f9..70564f05c6 100644
--- a/lib/tools/vsn.mk
+++ b/lib/tools/vsn.mk
@@ -1 +1 @@
-TOOLS_VSN = 2.8.2
+TOOLS_VSN = 2.8.3
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..d6d545d0e4 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>
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/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 8b24e38cc0..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 ->
- _ = http_util:hexlist_to_integer(Val1),
- 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..c96df4f8f2 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.
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/added_func.h b/lib/wx/api_gen/wx_extra/added_func.h
index 0698621c5f..417188cc8a 100644
--- a/lib/wx/api_gen/wx_extra/added_func.h
+++ b/lib/wx/api_gen/wx_extra/added_func.h
@@ -32,3 +32,10 @@ class wxToolBar {
wxToolBarToolBase * AddStretchableSpace();
wxToolBarToolBase * InsertStretchableSpace(size_t pos);
};
+
+
+class wxWindow {
+ public:
+ bool IsDoubleBuffered();
+ void SetDoubleBuffered(bool on);
+};
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/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 5cf09e5eee..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.
@@ -705,6 +705,8 @@ parse_type2(["unsigned"|R],Info,Opts,T=#type{mod=Mod}) ->
parse_type2(R,Info,Opts,T#type{mod=[unsigned|Mod]});
parse_type2(["int"|R],Info,Opts, T) ->
parse_type2(R,Info,Opts,T#type{name=int,base=int});
+parse_type2(["wxByte"|R],Info,Opts, T) ->
+ parse_type2(R,Info,Opts,T#type{name=int,base=int});
parse_type2(["char"|R],Info,Opts, T) ->
parse_type2(R,Info,Opts,T#type{name="char",base=int});
parse_type2([N="size_t"|R], Info, Opts, T) ->
@@ -1373,7 +1375,7 @@ extract_enum3([#xmlElement{name=initializer,content=Cs}|_],_Id,[{Name,_}|Acc]) -
try
case Val0 of
["0x" ++ Val1] ->
- Val = http_util:hexlist_to_integer(Val1),
+ Val = list_to_integer(Val1, 16),
{[{Name, Val}|Acc], Val+1};
["1", "<<", Shift] ->
Val = 1 bsl list_to_integer(Shift),
@@ -1429,7 +1431,7 @@ extract_def([#xmlElement{name=param}|_],Name,_) ->
extract_def([#xmlElement{name=initializer,content=Cs}|_R],N,Skip) ->
Val0 = extract_def2(Cs),
case Val0 of
- "0x" ++ Val1 -> {N, http_util:hexlist_to_integer(Val1)};
+ "0x" ++ Val1 -> {N, list_to_integer(Val1, 16)};
_ ->
try
Val = list_to_integer(Val0),
@@ -1451,7 +1453,7 @@ extract_def(_,N,_) ->
throw(N).
extract_def2([#xmlText{value=Val}|R]) ->
- strip_comment(string:strip(Val)) ++ extract_def2(R);
+ string:strip(strip_comment(Val)) ++ extract_def2(R);
extract_def2([#xmlElement{content=Cs}|R]) ->
extract_def2(Cs) ++ extract_def2(R);
extract_def2([]) -> [].
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 ed7b27f3bf..55c179142d 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.
@@ -116,8 +116,13 @@ taylormade_class(#class{name=CName, methods=Ms}) ->
gen_constructors(#class{name=Class, methods=Ms0}) ->
Ms = lists:append(Ms0),
Cs = lists:filter(fun(#method{method_type=MT}) -> MT =:= constructor end, Ms),
- [gen_constructor(Class, Const) || Const <- Cs].
-
+ [gen_constructor(Class, Const) || Const <- Cs],
+ case need_copy_constr(Class) of
+ true ->
+ w(" E~s(~s copy) : ~s(copy) {};~n", [Class, Class, Class]);
+ false ->
+ ignore
+ end.
gen_constructor(_Class, #method{where=merged_c}) -> ok;
gen_constructor(_Class, #method{where=erl_no_opt}) -> ok;
gen_constructor(Class, _M=#method{params=Ps, opts=FOpts}) ->
@@ -145,6 +150,14 @@ gen_constructor(Class, _M=#method{params=Ps, opts=FOpts}) ->
Endif andalso w("#endif~n", []),
ok.
+
+need_copy_constr("wxFont") -> true;
+need_copy_constr("wxIcon") -> true;
+need_copy_constr("wxImage") -> true;
+need_copy_constr("wxBitmap") -> true;
+%%need_copy_constr("wxGraphics" ++ _) -> true;
+need_copy_constr(_) -> false.
+
gen_type(#type{name=Type, ref={pointer,1}, mod=Mod},_) ->
mods(Mod) ++ to_string(Type) ++ " * ";
gen_type(#type{name=Type, ref={pointer,2}, mod=Mod},_) ->
@@ -182,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", []),
@@ -196,7 +211,7 @@ gen_funcs(Defs) ->
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(" delayed_delete->Append(Ecmd.Save(op));~n"),
w(" } else {~n"),
w(" delete_object(This, refd);~n"),
w(" ((WxeApp *) wxTheApp)->clearPtr(This);}~n"),
@@ -215,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"),
@@ -226,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"),
@@ -805,18 +820,21 @@ 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 Type of
- "wxImage" -> ok;
- "wxFont" -> ok;
- "wxBitmap" -> ok;
- "wxIcon" -> ok;
- "wxGraphics" ++ _ -> ok;
+ 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,
- {Type ++ " * Result = new " ++ Type ++ "(", "); newPtr((void *) Result,"
- ++ "3, memenv);"};
+ case need_copy_constr(Type) of
+ true ->
+ {Type ++ " * Result = new E" ++ Type ++ "(", "); newPtr((void *) Result,"
+ ++ "3, memenv);"};
+ false ->
+ {Type ++ " * Result = new " ++ Type ++ "(", "); newPtr((void *) Result,"
+ ++ "3, memenv);"}
+ end;
return_res1(#type{base={enum,_Type},single=true,by_val=true}) ->
{"int Result = " , ""};
return_res1(#type{name="wxCharBuffer", base={binary,_},single=true,by_val=true}) ->
diff --git a/lib/wx/api_gen/wx_gen_erl.erl b/lib/wx/api_gen/wx_gen_erl.erl
index 9df5cb853e..2e14fd272d 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.
@@ -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", []),
@@ -1169,7 +1169,7 @@ build_enum_ints(#enum{from=From, vals=Vals},Done) ->
const_value(V,_,_) when is_integer(V) -> integer_to_list(V);
const_value(V = "16#" ++ IntList,_,_) ->
- _ = http_util:hexlist_to_integer(IntList), %% ASSERT
+ _ = list_to_integer(IntList, 16), %% ASSERT
V;
const_value(V0, EnumClass, Ignore) ->
try
diff --git a/lib/wx/api_gen/wxapi.conf b/lib/wx/api_gen/wxapi.conf
index f5a6751696..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.
@@ -150,7 +150,12 @@
'ShouldInheritColours','Show','Thaw','TransferDataFromWindow',
'TransferDataToWindow',%'UnregisterHotKey',
'Update','UpdateWindowUI','Validate',
- 'WarpPointer']}.
+ 'WarpPointer',
+ {'SetTransparent', [{test_if, "wxCHECK_VERSION(2,8,12)"}]},
+ {'CanSetTransparent', [{test_if, "wxCHECK_VERSION(2,8,12)"}]},
+ {'IsDoubleBuffered', [{test_if, "wxCHECK_VERSION(3,0,0)"}]},
+ {'SetDoubleBuffered', [{test_if, "wxCHECK_VERSION(3,0,0) && !defined(__WXMAC__)"}]}
+]}.
{class, wxTopLevelWindowGTK, wxWindow,
[{alias, [{wxTopLevelWindowGTK, wxTopLevelWindow}]}],
@@ -797,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',
@@ -839,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_derived_dest.h b/lib/wx/c_src/gen/wxe_derived_dest.h
index 1dcf029244..fc0ae0d9fc 100644
--- a/lib/wx/c_src/gen/wxe_derived_dest.h
+++ b/lib/wx/c_src/gen/wxe_derived_dest.h
@@ -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.
@@ -180,6 +180,7 @@ class EwxBitmap : public wxBitmap {
EwxBitmap(const wxString& filename,wxBitmapType type) : wxBitmap(filename,type) {};
EwxBitmap(const wxImage& image,int depth) : wxBitmap(image,depth) {};
EwxBitmap() : wxBitmap() {};
+ EwxBitmap(wxBitmap copy) : wxBitmap(copy) {};
};
class EwxIcon : public wxIcon {
@@ -187,6 +188,7 @@ class EwxIcon : public wxIcon {
EwxIcon(const wxString& filename,wxBitmapType type,int desiredWidth,int desiredHeight) : wxIcon(filename,type,desiredWidth,desiredHeight) {};
EwxIcon(const wxIconLocation& loc) : wxIcon(loc) {};
EwxIcon() : wxIcon() {};
+ EwxIcon(wxIcon copy) : wxIcon(copy) {};
};
class EwxCursor : public wxCursor {
@@ -215,6 +217,7 @@ class EwxImage : public wxImage {
EwxImage(const wxString& name,const wxString& mimetype,int index) : wxImage(name,mimetype,index) {};
EwxImage(const wxString& name,long type,int index) : wxImage(name,type,index) {};
EwxImage() : wxImage() {};
+ EwxImage(wxImage copy) : wxImage(copy) {};
};
class EwxBrush : public wxBrush {
@@ -300,6 +303,7 @@ class EwxFont : public wxFont {
EwxFont(int size,wxFontFamily family,wxFontStyle style,int weight,bool underlined,const wxString& face,wxFontEncoding encoding) : wxFont(size,family,style,weight,underlined,face,encoding) {};
EwxFont(const wxString& fontname) : wxFont(fontname) {};
EwxFont() : wxFont() {};
+ EwxFont(wxFont copy) : wxFont(copy) {};
};
class EwxToolTip : public wxToolTip {
diff --git a/lib/wx/c_src/gen/wxe_funcs.cpp b/lib/wx/c_src/gen/wxe_funcs.cpp
index b2830dbc63..942baf7c7f 100644
--- a/lib/wx/c_src/gen/wxe_funcs.cpp
+++ b/lib/wx/c_src/gen/wxe_funcs.cpp
@@ -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.
@@ -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());
+ 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)
@@ -519,7 +521,7 @@ case wxWindow_GetExtraStyle: { // wxWindow::GetExtraStyle
case wxWindow_GetFont: { // wxWindow::GetFont
wxWindow *This = (wxWindow *) getPtr(bp,memenv); bp += 4;
if(!This) throw wxe_badarg(0);
- wxFont * Result = new wxFont(This->GetFont()); newPtr((void *) Result,3, memenv);;
+ wxFont * Result = new EwxFont(This->GetFont()); newPtr((void *) Result,3, memenv);;
rt.addRef(getRef((void *)Result,memenv), "wxFont");
break;
}
@@ -1668,10 +1670,47 @@ case wxWindow_WarpPointer: { // wxWindow::WarpPointer
This->WarpPointer(*x,*y);
break;
}
+#if wxCHECK_VERSION(2,8,12)
+case wxWindow_SetTransparent: { // wxWindow::SetTransparent
+ wxWindow *This = (wxWindow *) getPtr(bp,memenv); bp += 4;
+ int * alpha = (int *) bp; bp += 4;
+ if(!This) throw wxe_badarg(0);
+ bool Result = This->SetTransparent(*alpha);
+ rt.addBool(Result);
+ break;
+}
+#endif
+#if wxCHECK_VERSION(2,8,12)
+case wxWindow_CanSetTransparent: { // wxWindow::CanSetTransparent
+ wxWindow *This = (wxWindow *) getPtr(bp,memenv); bp += 4;
+ if(!This) throw wxe_badarg(0);
+ bool Result = This->CanSetTransparent();
+ rt.addBool(Result);
+ break;
+}
+#endif
+#if wxCHECK_VERSION(3,0,0)
+case wxWindow_IsDoubleBuffered: { // wxWindow::IsDoubleBuffered
+ wxWindow *This = (wxWindow *) getPtr(bp,memenv); bp += 4;
+ if(!This) throw wxe_badarg(0);
+ bool Result = This->IsDoubleBuffered();
+ rt.addBool(Result);
+ break;
+}
+#endif
+#if wxCHECK_VERSION(3,0,0) && !defined(__WXMAC__)
+case wxWindow_SetDoubleBuffered: { // wxWindow::SetDoubleBuffered
+ wxWindow *This = (wxWindow *) getPtr(bp,memenv); bp += 4;
+ bool * on = (bool *) bp; bp += 4;
+ if(!This) throw wxe_badarg(0);
+ This->SetDoubleBuffered(*on);
+ break;
+}
+#endif
case wxTopLevelWindow_GetIcon: { // wxTopLevelWindow::GetIcon
wxTopLevelWindow *This = (wxTopLevelWindow *) getPtr(bp,memenv); bp += 4;
if(!This) throw wxe_badarg(0);
- const wxIcon * Result = new wxIcon(This->GetIcon()); newPtr((void *) Result,3, memenv);;
+ const wxIcon * Result = new EwxIcon(This->GetIcon()); newPtr((void *) Result,3, memenv);;
rt.addRef(getRef((void *)Result,memenv), "wxIcon");
break;
}
@@ -3065,7 +3104,7 @@ case wxGrid_GetCellFont: { // wxGrid::GetCellFont
int * row = (int *) bp; bp += 4;
int * col = (int *) bp; bp += 4;
if(!This) throw wxe_badarg(0);
- wxFont * Result = new wxFont(This->GetCellFont(*row,*col)); newPtr((void *) Result,3, memenv);;
+ wxFont * Result = new EwxFont(This->GetCellFont(*row,*col)); newPtr((void *) Result,3, memenv);;
rt.addRef(getRef((void *)Result,memenv), "wxFont");
break;
}
@@ -3160,7 +3199,7 @@ case wxGrid_GetDefaultCellBackgroundColour: { // wxGrid::GetDefaultCellBackgroun
case wxGrid_GetDefaultCellFont: { // wxGrid::GetDefaultCellFont
wxGrid *This = (wxGrid *) getPtr(bp,memenv); bp += 4;
if(!This) throw wxe_badarg(0);
- wxFont * Result = new wxFont(This->GetDefaultCellFont()); newPtr((void *) Result,3, memenv);;
+ wxFont * Result = new EwxFont(This->GetDefaultCellFont()); newPtr((void *) Result,3, memenv);;
rt.addRef(getRef((void *)Result,memenv), "wxFont");
break;
}
@@ -3299,7 +3338,7 @@ case wxGrid_GetLabelBackgroundColour: { // wxGrid::GetLabelBackgroundColour
case wxGrid_GetLabelFont: { // wxGrid::GetLabelFont
wxGrid *This = (wxGrid *) getPtr(bp,memenv); bp += 4;
if(!This) throw wxe_badarg(0);
- wxFont * Result = new wxFont(This->GetLabelFont()); newPtr((void *) Result,3, memenv);;
+ wxFont * Result = new EwxFont(This->GetLabelFont()); newPtr((void *) Result,3, memenv);;
rt.addRef(getRef((void *)Result,memenv), "wxFont");
break;
}
@@ -9061,7 +9100,7 @@ case wxBitmap_new_2_1: { // wxBitmap::wxBitmap
case wxBitmap_ConvertToImage: { // wxBitmap::ConvertToImage
wxBitmap *This = (wxBitmap *) getPtr(bp,memenv); bp += 4;
if(!This) throw wxe_badarg(0);
- wxImage * Result = new wxImage(This->ConvertToImage()); newPtr((void *) Result,3, memenv);;
+ wxImage * Result = new EwxImage(This->ConvertToImage()); newPtr((void *) Result,3, memenv);;
rt.addRef(getRef((void *)Result,memenv), "wxImage");
break;
}
@@ -9132,7 +9171,7 @@ case wxBitmap_GetSubBitmap: { // wxBitmap::GetSubBitmap
int * rectH = (int *) bp; bp += 4;
wxRect rect = wxRect(*rectX,*rectY,*rectW,*rectH);
if(!This) throw wxe_badarg(0);
- wxBitmap * Result = new wxBitmap(This->GetSubBitmap(rect)); newPtr((void *) Result,3, memenv);;
+ wxBitmap * Result = new EwxBitmap(This->GetSubBitmap(rect)); newPtr((void *) Result,3, memenv);;
rt.addRef(getRef((void *)Result,memenv), "wxBitmap");
break;
}
@@ -9314,7 +9353,7 @@ case wxIconBundle_GetIcon_1_1: { // wxIconBundle::GetIcon
int * sizeH = (int *) bp; bp += 4;
wxSize size = wxSize(*sizeW,*sizeH);
if(!This) throw wxe_badarg(0);
- const wxIcon * Result = new wxIcon(This->GetIcon(size)); newPtr((void *) Result,3, memenv);;
+ const wxIcon * Result = new EwxIcon(This->GetIcon(size)); newPtr((void *) Result,3, memenv);;
rt.addRef(getRef((void *)Result,memenv), "wxIcon");
break;
}
@@ -9328,7 +9367,7 @@ case wxIconBundle_GetIcon_1_0: { // wxIconBundle::GetIcon
} break;
}};
if(!This) throw wxe_badarg(0);
- const wxIcon * Result = new wxIcon(This->GetIcon(size)); newPtr((void *) Result,3, memenv);;
+ const wxIcon * Result = new EwxIcon(This->GetIcon(size)); newPtr((void *) Result,3, memenv);;
rt.addRef(getRef((void *)Result,memenv), "wxIcon");
break;
}
@@ -9537,7 +9576,7 @@ case wxImage_Blur: { // wxImage::Blur
wxImage *This = (wxImage *) getPtr(bp,memenv); bp += 4;
int * radius = (int *) bp; bp += 4;
if(!This) throw wxe_badarg(0);
- wxImage * Result = new wxImage(This->Blur(*radius)); newPtr((void *) Result,3, memenv);;
+ wxImage * Result = new EwxImage(This->Blur(*radius)); newPtr((void *) Result,3, memenv);;
rt.addRef(getRef((void *)Result,memenv), "wxImage");
break;
}
@@ -9545,7 +9584,7 @@ case wxImage_BlurHorizontal: { // wxImage::BlurHorizontal
wxImage *This = (wxImage *) getPtr(bp,memenv); bp += 4;
int * radius = (int *) bp; bp += 4;
if(!This) throw wxe_badarg(0);
- wxImage * Result = new wxImage(This->BlurHorizontal(*radius)); newPtr((void *) Result,3, memenv);;
+ wxImage * Result = new EwxImage(This->BlurHorizontal(*radius)); newPtr((void *) Result,3, memenv);;
rt.addRef(getRef((void *)Result,memenv), "wxImage");
break;
}
@@ -9553,7 +9592,7 @@ case wxImage_BlurVertical: { // wxImage::BlurVertical
wxImage *This = (wxImage *) getPtr(bp,memenv); bp += 4;
int * radius = (int *) bp; bp += 4;
if(!This) throw wxe_badarg(0);
- wxImage * Result = new wxImage(This->BlurVertical(*radius)); newPtr((void *) Result,3, memenv);;
+ wxImage * Result = new EwxImage(This->BlurVertical(*radius)); newPtr((void *) Result,3, memenv);;
rt.addRef(getRef((void *)Result,memenv), "wxImage");
break;
}
@@ -9592,7 +9631,7 @@ case wxImage_ConvertToGreyscale: { // wxImage::ConvertToGreyscale
} break;
}};
if(!This) throw wxe_badarg(0);
- wxImage * Result = new wxImage(This->ConvertToGreyscale(lr,lg,lb)); newPtr((void *) Result,3, memenv);;
+ wxImage * Result = new EwxImage(This->ConvertToGreyscale(lr,lg,lb)); newPtr((void *) Result,3, memenv);;
rt.addRef(getRef((void *)Result,memenv), "wxImage");
break;
}
@@ -9602,14 +9641,14 @@ case wxImage_ConvertToMono: { // wxImage::ConvertToMono
unsigned int * g = (unsigned int *) bp; bp += 4;
unsigned int * b = (unsigned int *) bp; bp += 4;
if(!This) throw wxe_badarg(0);
- wxImage * Result = new wxImage(This->ConvertToMono(*r,*g,*b)); newPtr((void *) Result,3, memenv);;
+ wxImage * Result = new EwxImage(This->ConvertToMono(*r,*g,*b)); newPtr((void *) Result,3, memenv);;
rt.addRef(getRef((void *)Result,memenv), "wxImage");
break;
}
case wxImage_Copy: { // wxImage::Copy
wxImage *This = (wxImage *) getPtr(bp,memenv); bp += 4;
if(!This) throw wxe_badarg(0);
- wxImage * Result = new wxImage(This->Copy()); newPtr((void *) Result,3, memenv);;
+ wxImage * Result = new EwxImage(This->Copy()); newPtr((void *) Result,3, memenv);;
rt.addRef(getRef((void *)Result,memenv), "wxImage");
break;
}
@@ -9831,7 +9870,7 @@ case wxImage_GetSubImage: { // wxImage::GetSubImage
int * rectH = (int *) bp; bp += 4;
wxRect rect = wxRect(*rectX,*rectY,*rectW,*rectH);
if(!This) throw wxe_badarg(0);
- wxImage * Result = new wxImage(This->GetSubImage(rect)); newPtr((void *) Result,3, memenv);;
+ wxImage * Result = new EwxImage(This->GetSubImage(rect)); newPtr((void *) Result,3, memenv);;
rt.addRef(getRef((void *)Result,memenv), "wxImage");
break;
}
@@ -9976,7 +10015,7 @@ case wxImage_Mirror: { // wxImage::Mirror
} break;
}};
if(!This) throw wxe_badarg(0);
- wxImage * Result = new wxImage(This->Mirror(horizontally)); newPtr((void *) Result,3, memenv);;
+ wxImage * Result = new EwxImage(This->Mirror(horizontally)); newPtr((void *) Result,3, memenv);;
rt.addRef(getRef((void *)Result,memenv), "wxImage");
break;
}
@@ -10057,7 +10096,7 @@ case wxImage_Rotate: { // wxImage::Rotate
} break;
}};
if(!This) throw wxe_badarg(0);
- wxImage * Result = new wxImage(This->Rotate(*angle,centre_of_rotation,interpolating,offset_after_rotation)); newPtr((void *) Result,3, memenv);;
+ wxImage * Result = new EwxImage(This->Rotate(*angle,centre_of_rotation,interpolating,offset_after_rotation)); newPtr((void *) Result,3, memenv);;
rt.addRef(getRef((void *)Result,memenv), "wxImage");
break;
}
@@ -10079,7 +10118,7 @@ case wxImage_Rotate90: { // wxImage::Rotate90
} break;
}};
if(!This) throw wxe_badarg(0);
- wxImage * Result = new wxImage(This->Rotate90(clockwise)); newPtr((void *) Result,3, memenv);;
+ wxImage * Result = new EwxImage(This->Rotate90(clockwise)); newPtr((void *) Result,3, memenv);;
rt.addRef(getRef((void *)Result,memenv), "wxImage");
break;
}
@@ -10129,7 +10168,7 @@ quality = *(wxImageResizeQuality *) bp; bp += 4;;
} break;
}};
if(!This) throw wxe_badarg(0);
- wxImage * Result = new wxImage(This->Scale(*width,*height,quality)); newPtr((void *) Result,3, memenv);;
+ wxImage * Result = new EwxImage(This->Scale(*width,*height,quality)); newPtr((void *) Result,3, memenv);;
rt.addRef(getRef((void *)Result,memenv), "wxImage");
break;
}
@@ -10157,7 +10196,7 @@ case wxImage_Size: { // wxImage::Size
} break;
}};
if(!This) throw wxe_badarg(0);
- wxImage * Result = new wxImage(This->Size(size,pos,r,g,b)); newPtr((void *) Result,3, memenv);;
+ wxImage * Result = new EwxImage(This->Size(size,pos,r,g,b)); newPtr((void *) Result,3, memenv);;
rt.addRef(getRef((void *)Result,memenv), "wxImage");
break;
}
@@ -10617,7 +10656,7 @@ case wxRegion_Contains_1_1: { // wxRegion::Contains
case wxRegion_ConvertToBitmap: { // wxRegion::ConvertToBitmap
wxRegion *This = (wxRegion *) getPtr(bp,memenv); bp += 4;
if(!This) throw wxe_badarg(0);
- wxBitmap * Result = new wxBitmap(This->ConvertToBitmap()); newPtr((void *) Result,3, memenv);;
+ wxBitmap * Result = new EwxBitmap(This->ConvertToBitmap()); newPtr((void *) Result,3, memenv);;
rt.addRef(getRef((void *)Result,memenv), "wxBitmap");
break;
}
@@ -13344,28 +13383,28 @@ validator = (wxValidator *) getPtr(bp,memenv); bp += 4;
case wxBitmapButton_GetBitmapDisabled: { // wxBitmapButton::GetBitmapDisabled
wxBitmapButton *This = (wxBitmapButton *) getPtr(bp,memenv); bp += 4;
if(!This) throw wxe_badarg(0);
- const wxBitmap * Result = new wxBitmap(This->GetBitmapDisabled()); newPtr((void *) Result,3, memenv);;
+ const wxBitmap * Result = new EwxBitmap(This->GetBitmapDisabled()); newPtr((void *) Result,3, memenv);;
rt.addRef(getRef((void *)Result,memenv), "wxBitmap");
break;
}
case wxBitmapButton_GetBitmapFocus: { // wxBitmapButton::GetBitmapFocus
wxBitmapButton *This = (wxBitmapButton *) getPtr(bp,memenv); bp += 4;
if(!This) throw wxe_badarg(0);
- const wxBitmap * Result = new wxBitmap(This->GetBitmapFocus()); newPtr((void *) Result,3, memenv);;
+ const wxBitmap * Result = new EwxBitmap(This->GetBitmapFocus()); newPtr((void *) Result,3, memenv);;
rt.addRef(getRef((void *)Result,memenv), "wxBitmap");
break;
}
case wxBitmapButton_GetBitmapLabel: { // wxBitmapButton::GetBitmapLabel
wxBitmapButton *This = (wxBitmapButton *) getPtr(bp,memenv); bp += 4;
if(!This) throw wxe_badarg(0);
- const wxBitmap * Result = new wxBitmap(This->GetBitmapLabel()); newPtr((void *) Result,3, memenv);;
+ const wxBitmap * Result = new EwxBitmap(This->GetBitmapLabel()); newPtr((void *) Result,3, memenv);;
rt.addRef(getRef((void *)Result,memenv), "wxBitmap");
break;
}
case wxBitmapButton_GetBitmapSelected: { // wxBitmapButton::GetBitmapSelected
wxBitmapButton *This = (wxBitmapButton *) getPtr(bp,memenv); bp += 4;
if(!This) throw wxe_badarg(0);
- const wxBitmap * Result = new wxBitmap(This->GetBitmapSelected()); newPtr((void *) Result,3, memenv);;
+ const wxBitmap * Result = new EwxBitmap(This->GetBitmapSelected()); newPtr((void *) Result,3, memenv);;
rt.addRef(getRef((void *)Result,memenv), "wxBitmap");
break;
}
@@ -14591,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);
@@ -14605,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);
@@ -14626,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;
@@ -14640,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;
@@ -15483,7 +15494,7 @@ case wxListCtrl_GetItemFont: { // wxListCtrl::GetItemFont
wxListCtrl *This = (wxListCtrl *) getPtr(bp,memenv); bp += 4;
int * item = (int *) bp; bp += 4;
if(!This) throw wxe_badarg(0);
- wxFont * Result = new wxFont(This->GetItemFont(*item)); newPtr((void *) Result,3, memenv);;
+ wxFont * Result = new EwxFont(This->GetItemFont(*item)); newPtr((void *) Result,3, memenv);;
rt.addRef(getRef((void *)Result,memenv), "wxFont");
break;
}
@@ -15594,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
@@ -16029,7 +16044,7 @@ case wxListItem_GetColumn: { // wxListItem::GetColumn
case wxListItem_GetFont: { // wxListItem::GetFont
wxListItem *This = (wxListItem *) getPtr(bp,memenv); bp += 4;
if(!This) throw wxe_badarg(0);
- wxFont * Result = new wxFont(This->GetFont()); newPtr((void *) Result,3, memenv);;
+ wxFont * Result = new EwxFont(This->GetFont()); newPtr((void *) Result,3, memenv);;
rt.addRef(getRef((void *)Result,memenv), "wxFont");
break;
}
@@ -16376,7 +16391,7 @@ case wxImageList_GetBitmap: { // wxImageList::GetBitmap
wxImageList *This = (wxImageList *) getPtr(bp,memenv); bp += 4;
int * index = (int *) bp; bp += 4;
if(!This) throw wxe_badarg(0);
- wxBitmap * Result = new wxBitmap(This->GetBitmap(*index)); newPtr((void *) Result,3, memenv);;
+ wxBitmap * Result = new EwxBitmap(This->GetBitmap(*index)); newPtr((void *) Result,3, memenv);;
rt.addRef(getRef((void *)Result,memenv), "wxBitmap");
break;
}
@@ -16384,7 +16399,7 @@ case wxImageList_GetIcon: { // wxImageList::GetIcon
wxImageList *This = (wxImageList *) getPtr(bp,memenv); bp += 4;
int * index = (int *) bp; bp += 4;
if(!This) throw wxe_badarg(0);
- wxIcon * Result = new wxIcon(This->GetIcon(*index)); newPtr((void *) Result,3, memenv);;
+ wxIcon * Result = new EwxIcon(This->GetIcon(*index)); newPtr((void *) Result,3, memenv);;
rt.addRef(getRef((void *)Result,memenv), "wxIcon");
break;
}
@@ -16495,7 +16510,7 @@ case wxTextAttr_GetBackgroundColour: { // wxTextAttr::GetBackgroundColour
case wxTextAttr_GetFont: { // wxTextAttr::GetFont
wxTextAttr *This = (wxTextAttr *) getPtr(bp,memenv); bp += 4;
if(!This) throw wxe_badarg(0);
- const wxFont * Result = new wxFont(This->GetFont()); newPtr((void *) Result,3, memenv);;
+ const wxFont * Result = new EwxFont(This->GetFont()); newPtr((void *) Result,3, memenv);;
rt.addRef(getRef((void *)Result,memenv), "wxFont");
break;
}
@@ -18841,7 +18856,7 @@ case wxTreeCtrl_GetItemFont: { // wxTreeCtrl::GetItemFont
bp += 4; /* Align */
wxTreeItemId item = wxTreeItemId((void *) *(wxUint64 *) bp); bp += 8;
if(!This) throw wxe_badarg(0);
- wxFont * Result = new wxFont(This->GetItemFont(item)); newPtr((void *) Result,3, memenv);;
+ wxFont * Result = new EwxFont(This->GetItemFont(item)); newPtr((void *) Result,3, memenv);;
rt.addRef(getRef((void *)Result,memenv), "wxFont");
break;
}
@@ -19868,7 +19883,7 @@ case wxStaticBitmap_Create: { // wxStaticBitmap::Create
case wxStaticBitmap_GetBitmap: { // wxStaticBitmap::GetBitmap
wxStaticBitmap *This = (wxStaticBitmap *) getPtr(bp,memenv); bp += 4;
if(!This) throw wxe_badarg(0);
- wxBitmap * Result = new wxBitmap(This->GetBitmap()); newPtr((void *) Result,3, memenv);;
+ wxBitmap * Result = new EwxBitmap(This->GetBitmap()); newPtr((void *) Result,3, memenv);;
rt.addRef(getRef((void *)Result,memenv), "wxBitmap");
break;
}
@@ -21558,7 +21573,7 @@ validator = (wxValidator *) getPtr(bp,memenv); bp += 4;
case wxFontPickerCtrl_GetSelectedFont: { // wxFontPickerCtrl::GetSelectedFont
wxFontPickerCtrl *This = (wxFontPickerCtrl *) getPtr(bp,memenv); bp += 4;
if(!This) throw wxe_badarg(0);
- wxFont * Result = new wxFont(This->GetSelectedFont()); newPtr((void *) Result,3, memenv);;
+ wxFont * Result = new EwxFont(This->GetSelectedFont()); newPtr((void *) Result,3, memenv);;
rt.addRef(getRef((void *)Result,memenv), "wxFont");
break;
}
@@ -21936,7 +21951,7 @@ case wxFontData_GetColour: { // wxFontData::GetColour
case wxFontData_GetChosenFont: { // wxFontData::GetChosenFont
wxFontData *This = (wxFontData *) getPtr(bp,memenv); bp += 4;
if(!This) throw wxe_badarg(0);
- wxFont * Result = new wxFont(This->GetChosenFont()); newPtr((void *) Result,3, memenv);;
+ wxFont * Result = new EwxFont(This->GetChosenFont()); newPtr((void *) Result,3, memenv);;
rt.addRef(getRef((void *)Result,memenv), "wxFont");
break;
}
@@ -21950,7 +21965,7 @@ case wxFontData_GetEnableEffects: { // wxFontData::GetEnableEffects
case wxFontData_GetInitialFont: { // wxFontData::GetInitialFont
wxFontData *This = (wxFontData *) getPtr(bp,memenv); bp += 4;
if(!This) throw wxe_badarg(0);
- wxFont * Result = new wxFont(This->GetInitialFont()); newPtr((void *) Result,3, memenv);;
+ wxFont * Result = new EwxFont(This->GetInitialFont()); newPtr((void *) Result,3, memenv);;
rt.addRef(getRef((void *)Result,memenv), "wxFont");
break;
}
@@ -23233,7 +23248,7 @@ case wxXmlResource_LoadBitmap: { // wxXmlResource::LoadBitmap
wxString name = wxString(bp, wxConvUTF8);
bp += *nameLen+((8-((0+ *nameLen) & 7)) & 7);
if(!This) throw wxe_badarg(0);
- wxBitmap * Result = new wxBitmap(This->LoadBitmap(name)); newPtr((void *) Result,3, memenv);;
+ wxBitmap * Result = new EwxBitmap(This->LoadBitmap(name)); newPtr((void *) Result,3, memenv);;
rt.addRef(getRef((void *)Result,memenv), "wxBitmap");
break;
}
@@ -23289,7 +23304,7 @@ case wxXmlResource_LoadIcon: { // wxXmlResource::LoadIcon
wxString name = wxString(bp, wxConvUTF8);
bp += *nameLen+((8-((0+ *nameLen) & 7)) & 7);
if(!This) throw wxe_badarg(0);
- wxIcon * Result = new wxIcon(This->LoadIcon(name)); newPtr((void *) Result,3, memenv);;
+ wxIcon * Result = new EwxIcon(This->LoadIcon(name)); newPtr((void *) Result,3, memenv);;
rt.addRef(getRef((void *)Result,memenv), "wxIcon");
break;
}
@@ -24839,7 +24854,7 @@ case wxAuiNotebook_GetPageBitmap: { // wxAuiNotebook::GetPageBitmap
wxAuiNotebook *This = (wxAuiNotebook *) getPtr(bp,memenv); bp += 4;
int * page_idx = (int *) bp; bp += 4;
if(!This) throw wxe_badarg(0);
- wxBitmap * Result = new wxBitmap(This->GetPageBitmap(*page_idx)); newPtr((void *) Result,3, memenv);;
+ wxBitmap * Result = new EwxBitmap(This->GetPageBitmap(*page_idx)); newPtr((void *) Result,3, memenv);;
rt.addRef(getRef((void *)Result,memenv), "wxBitmap");
break;
}
@@ -25032,7 +25047,7 @@ case wxAuiDockArt_GetFont: { // wxAuiDockArt::GetFont
wxAuiDockArt *This = (wxAuiDockArt *) getPtr(bp,memenv); bp += 4;
int * id = (int *) bp; bp += 4;
if(!This) throw wxe_badarg(0);
- wxFont * Result = new wxFont(This->GetFont(*id)); newPtr((void *) Result,3, memenv);;
+ wxFont * Result = new EwxFont(This->GetFont(*id)); newPtr((void *) Result,3, memenv);;
rt.addRef(getRef((void *)Result,memenv), "wxFont");
break;
}
@@ -26671,7 +26686,7 @@ case wxColourPickerEvent_GetColour: { // wxColourPickerEvent::GetColour
case wxFontPickerEvent_GetFont: { // wxFontPickerEvent::GetFont
wxFontPickerEvent *This = (wxFontPickerEvent *) getPtr(bp,memenv); bp += 4;
if(!This) throw wxe_badarg(0);
- wxFont * Result = new wxFont(This->GetFont()); newPtr((void *) Result,3, memenv);;
+ wxFont * Result = new EwxFont(This->GetFont()); newPtr((void *) Result,3, memenv);;
rt.addRef(getRef((void *)Result,memenv), "wxFont");
break;
}
@@ -30602,7 +30617,7 @@ case wxArtProvider_GetBitmap: { // wxArtProvider::GetBitmap
bp += 4; /* Align */
} break;
}};
- wxBitmap * Result = new wxBitmap(wxArtProvider::GetBitmap(id,client,size)); newPtr((void *) Result,3, memenv);;
+ wxBitmap * Result = new EwxBitmap(wxArtProvider::GetBitmap(id,client,size)); newPtr((void *) Result,3, memenv);;
rt.addRef(getRef((void *)Result,memenv), "wxBitmap");
break;
}
@@ -30625,7 +30640,7 @@ case wxArtProvider_GetIcon: { // wxArtProvider::GetIcon
bp += 4; /* Align */
} break;
}};
- wxIcon * Result = new wxIcon(wxArtProvider::GetIcon(id,client,size)); newPtr((void *) Result,3, memenv);;
+ wxIcon * Result = new EwxIcon(wxArtProvider::GetIcon(id,client,size)); newPtr((void *) Result,3, memenv);;
rt.addRef(getRef((void *)Result,memenv), "wxIcon");
break;
}
@@ -30808,7 +30823,7 @@ bitmap = (wxBitmap *) getPtr(bp,memenv); bp += 4;
case wxBitmapDataObject_GetBitmap: { // wxBitmapDataObject::GetBitmap
wxBitmapDataObject *This = (wxBitmapDataObject *) getPtr(bp,memenv); bp += 4;
if(!This) throw wxe_badarg(0);
- wxBitmap * Result = new wxBitmap(This->GetBitmap()); newPtr((void *) Result,3, memenv);;
+ wxBitmap * Result = new EwxBitmap(This->GetBitmap()); newPtr((void *) Result,3, memenv);;
rt.addRef(getRef((void *)Result,memenv), "wxBitmap");
break;
}
@@ -31428,7 +31443,7 @@ case wxSystemSettings_GetColour: { // wxSystemSettings::GetColour
}
case wxSystemSettings_GetFont: { // wxSystemSettings::GetFont
wxSystemFont index = *(wxSystemFont *) bp; bp += 4;;
- wxFont * Result = new wxFont(wxSystemSettings::GetFont(index)); newPtr((void *) Result,3, memenv);;
+ wxFont * Result = new EwxFont(wxSystemSettings::GetFont(index)); newPtr((void *) Result,3, memenv);;
rt.addRef(getRef((void *)Result,memenv), "wxFont");
break;
}
@@ -32036,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();
@@ -32046,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);
diff --git a/lib/wx/c_src/gen/wxe_macros.h b/lib/wx/c_src/gen/wxe_macros.h
index 1d50278360..82b39b49cd 100644
--- a/lib/wx/c_src/gen/wxe_macros.h
+++ b/lib/wx/c_src/gen/wxe_macros.h
@@ -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.
@@ -241,1275 +241,1275 @@
#define wxWindow_UpdateWindowUI 281
#define wxWindow_Validate 282
#define wxWindow_WarpPointer 283
-#define wxTopLevelWindow_GetIcon 284
-#define wxTopLevelWindow_GetIcons 285
-#define wxTopLevelWindow_GetTitle 286
-#define wxTopLevelWindow_IsActive 287
-#define wxTopLevelWindow_Iconize 288
-#define wxTopLevelWindow_IsFullScreen 289
-#define wxTopLevelWindow_IsIconized 290
-#define wxTopLevelWindow_IsMaximized 291
-#define wxTopLevelWindow_Maximize 292
-#define wxTopLevelWindow_RequestUserAttention 293
-#define wxTopLevelWindow_SetIcon 294
-#define wxTopLevelWindow_SetIcons 295
-#define wxTopLevelWindow_CenterOnScreen 296
-#define wxTopLevelWindow_CentreOnScreen 297
-#define wxTopLevelWindow_SetShape 299
-#define wxTopLevelWindow_SetTitle 300
-#define wxTopLevelWindow_ShowFullScreen 301
-#define wxFrame_new_4 303
-#define wxFrame_new_0 304
-#define wxFrame_destruct 306
-#define wxFrame_Create 307
-#define wxFrame_CreateStatusBar 308
-#define wxFrame_CreateToolBar 309
-#define wxFrame_GetClientAreaOrigin 310
-#define wxFrame_GetMenuBar 311
-#define wxFrame_GetStatusBar 312
-#define wxFrame_GetStatusBarPane 313
-#define wxFrame_GetToolBar 314
-#define wxFrame_ProcessCommand 315
-#define wxFrame_SendSizeEvent 316
-#define wxFrame_SetMenuBar 317
-#define wxFrame_SetStatusBar 318
-#define wxFrame_SetStatusBarPane 319
-#define wxFrame_SetStatusText 320
-#define wxFrame_SetStatusWidths 321
-#define wxFrame_SetToolBar 322
-#define wxMiniFrame_new_0 323
-#define wxMiniFrame_new_4 324
-#define wxMiniFrame_Create 325
-#define wxMiniFrame_destroy 326
-#define wxSplashScreen_new_0 327
-#define wxSplashScreen_new_6 328
-#define wxSplashScreen_destruct 329
-#define wxSplashScreen_GetSplashStyle 330
-#define wxSplashScreen_GetTimeout 331
-#define wxPanel_new_0 332
-#define wxPanel_new_6 333
-#define wxPanel_new_2 334
-#define wxPanel_destruct 335
-#define wxPanel_InitDialog 336
-#define wxPanel_SetFocusIgnoringChildren 337
-#define wxScrolledWindow_new_0 338
-#define wxScrolledWindow_new_2 339
-#define wxScrolledWindow_destruct 340
-#define wxScrolledWindow_CalcScrolledPosition_4 341
-#define wxScrolledWindow_CalcScrolledPosition_1 342
-#define wxScrolledWindow_CalcUnscrolledPosition_4 343
-#define wxScrolledWindow_CalcUnscrolledPosition_1 344
-#define wxScrolledWindow_EnableScrolling 345
-#define wxScrolledWindow_GetScrollPixelsPerUnit 346
-#define wxScrolledWindow_GetViewStart 347
-#define wxScrolledWindow_DoPrepareDC 348
-#define wxScrolledWindow_PrepareDC 349
-#define wxScrolledWindow_Scroll 350
-#define wxScrolledWindow_SetScrollbars 351
-#define wxScrolledWindow_SetScrollRate 352
-#define wxScrolledWindow_SetTargetWindow 353
-#define wxSashWindow_new_0 354
-#define wxSashWindow_new_2 355
-#define wxSashWindow_destruct 356
-#define wxSashWindow_GetSashVisible 357
-#define wxSashWindow_GetMaximumSizeX 358
-#define wxSashWindow_GetMaximumSizeY 359
-#define wxSashWindow_GetMinimumSizeX 360
-#define wxSashWindow_GetMinimumSizeY 361
-#define wxSashWindow_SetMaximumSizeX 362
-#define wxSashWindow_SetMaximumSizeY 363
-#define wxSashWindow_SetMinimumSizeX 364
-#define wxSashWindow_SetMinimumSizeY 365
-#define wxSashWindow_SetSashVisible 366
-#define wxSashLayoutWindow_new_0 367
-#define wxSashLayoutWindow_new_2 368
-#define wxSashLayoutWindow_Create 369
-#define wxSashLayoutWindow_GetAlignment 370
-#define wxSashLayoutWindow_GetOrientation 371
-#define wxSashLayoutWindow_SetAlignment 372
-#define wxSashLayoutWindow_SetDefaultSize 373
-#define wxSashLayoutWindow_SetOrientation 374
-#define wxSashLayoutWindow_destroy 375
-#define wxGrid_new_0 376
-#define wxGrid_new_3 377
-#define wxGrid_new_4 378
-#define wxGrid_destruct 379
-#define wxGrid_AppendCols 380
-#define wxGrid_AppendRows 381
-#define wxGrid_AutoSize 382
-#define wxGrid_AutoSizeColumn 383
-#define wxGrid_AutoSizeColumns 384
-#define wxGrid_AutoSizeRow 385
-#define wxGrid_AutoSizeRows 386
-#define wxGrid_BeginBatch 387
-#define wxGrid_BlockToDeviceRect 388
-#define wxGrid_CanDragColSize 389
-#define wxGrid_CanDragRowSize 390
-#define wxGrid_CanDragGridSize 391
-#define wxGrid_CanEnableCellControl 392
-#define wxGrid_CellToRect_2 393
-#define wxGrid_CellToRect_1 394
-#define wxGrid_ClearGrid 395
-#define wxGrid_ClearSelection 396
-#define wxGrid_CreateGrid 397
-#define wxGrid_DeleteCols 398
-#define wxGrid_DeleteRows 399
-#define wxGrid_DisableCellEditControl 400
-#define wxGrid_DisableDragColSize 401
-#define wxGrid_DisableDragGridSize 402
-#define wxGrid_DisableDragRowSize 403
-#define wxGrid_EnableCellEditControl 404
-#define wxGrid_EnableDragColSize 405
-#define wxGrid_EnableDragGridSize 406
-#define wxGrid_EnableDragRowSize 407
-#define wxGrid_EnableEditing 408
-#define wxGrid_EnableGridLines 409
-#define wxGrid_EndBatch 410
-#define wxGrid_Fit 411
-#define wxGrid_ForceRefresh 412
-#define wxGrid_GetBatchCount 413
-#define wxGrid_GetCellAlignment 414
-#define wxGrid_GetCellBackgroundColour 415
-#define wxGrid_GetCellEditor 416
-#define wxGrid_GetCellFont 417
-#define wxGrid_GetCellRenderer 418
-#define wxGrid_GetCellTextColour 419
-#define wxGrid_GetCellValue_2 420
-#define wxGrid_GetCellValue_1 421
-#define wxGrid_GetColLabelAlignment 422
-#define wxGrid_GetColLabelSize 423
-#define wxGrid_GetColLabelValue 424
-#define wxGrid_GetColMinimalAcceptableWidth 425
-#define wxGrid_GetDefaultCellAlignment 426
-#define wxGrid_GetDefaultCellBackgroundColour 427
-#define wxGrid_GetDefaultCellFont 428
-#define wxGrid_GetDefaultCellTextColour 429
-#define wxGrid_GetDefaultColLabelSize 430
-#define wxGrid_GetDefaultColSize 431
-#define wxGrid_GetDefaultEditor 432
-#define wxGrid_GetDefaultEditorForCell_2 433
-#define wxGrid_GetDefaultEditorForCell_1 434
-#define wxGrid_GetDefaultEditorForType 435
-#define wxGrid_GetDefaultRenderer 436
-#define wxGrid_GetDefaultRendererForCell 437
-#define wxGrid_GetDefaultRendererForType 438
-#define wxGrid_GetDefaultRowLabelSize 439
-#define wxGrid_GetDefaultRowSize 440
-#define wxGrid_GetGridCursorCol 441
-#define wxGrid_GetGridCursorRow 442
-#define wxGrid_GetGridLineColour 443
-#define wxGrid_GridLinesEnabled 444
-#define wxGrid_GetLabelBackgroundColour 445
-#define wxGrid_GetLabelFont 446
-#define wxGrid_GetLabelTextColour 447
-#define wxGrid_GetNumberCols 448
-#define wxGrid_GetNumberRows 449
-#define wxGrid_GetOrCreateCellAttr 450
-#define wxGrid_GetRowMinimalAcceptableHeight 451
-#define wxGrid_GetRowLabelAlignment 452
-#define wxGrid_GetRowLabelSize 453
-#define wxGrid_GetRowLabelValue 454
-#define wxGrid_GetRowSize 455
-#define wxGrid_GetScrollLineX 456
-#define wxGrid_GetScrollLineY 457
-#define wxGrid_GetSelectedCells 458
-#define wxGrid_GetSelectedCols 459
-#define wxGrid_GetSelectedRows 460
-#define wxGrid_GetSelectionBackground 461
-#define wxGrid_GetSelectionBlockTopLeft 462
-#define wxGrid_GetSelectionBlockBottomRight 463
-#define wxGrid_GetSelectionForeground 464
-#define wxGrid_GetViewWidth 465
-#define wxGrid_GetGridWindow 466
-#define wxGrid_GetGridRowLabelWindow 467
-#define wxGrid_GetGridColLabelWindow 468
-#define wxGrid_GetGridCornerLabelWindow 469
-#define wxGrid_HideCellEditControl 470
-#define wxGrid_InsertCols 471
-#define wxGrid_InsertRows 472
-#define wxGrid_IsCellEditControlEnabled 473
-#define wxGrid_IsCurrentCellReadOnly 474
-#define wxGrid_IsEditable 475
-#define wxGrid_IsInSelection_2 476
-#define wxGrid_IsInSelection_1 477
-#define wxGrid_IsReadOnly 478
-#define wxGrid_IsSelection 479
-#define wxGrid_IsVisible_3 480
-#define wxGrid_IsVisible_2 481
-#define wxGrid_MakeCellVisible_2 482
-#define wxGrid_MakeCellVisible_1 483
-#define wxGrid_MoveCursorDown 484
-#define wxGrid_MoveCursorLeft 485
-#define wxGrid_MoveCursorRight 486
-#define wxGrid_MoveCursorUp 487
-#define wxGrid_MoveCursorDownBlock 488
-#define wxGrid_MoveCursorLeftBlock 489
-#define wxGrid_MoveCursorRightBlock 490
-#define wxGrid_MoveCursorUpBlock 491
-#define wxGrid_MovePageDown 492
-#define wxGrid_MovePageUp 493
-#define wxGrid_RegisterDataType 494
-#define wxGrid_SaveEditControlValue 495
-#define wxGrid_SelectAll 496
-#define wxGrid_SelectBlock_5 497
-#define wxGrid_SelectBlock_3 498
-#define wxGrid_SelectCol 499
-#define wxGrid_SelectRow 500
-#define wxGrid_SetCellAlignment_4 501
-#define wxGrid_SetCellAlignment_3 502
-#define wxGrid_SetCellAlignment_1 503
-#define wxGrid_SetCellBackgroundColour_3_0 504
-#define wxGrid_SetCellBackgroundColour_1 505
-#define wxGrid_SetCellBackgroundColour_3_1 506
-#define wxGrid_SetCellEditor 507
-#define wxGrid_SetCellFont 508
-#define wxGrid_SetCellRenderer 509
-#define wxGrid_SetCellTextColour_3_0 510
-#define wxGrid_SetCellTextColour_3_1 511
-#define wxGrid_SetCellTextColour_1 512
-#define wxGrid_SetCellValue_3_0 513
-#define wxGrid_SetCellValue_2 514
-#define wxGrid_SetCellValue_3_1 515
-#define wxGrid_SetColAttr 516
-#define wxGrid_SetColFormatBool 517
-#define wxGrid_SetColFormatNumber 518
-#define wxGrid_SetColFormatFloat 519
-#define wxGrid_SetColFormatCustom 520
-#define wxGrid_SetColLabelAlignment 521
-#define wxGrid_SetColLabelSize 522
-#define wxGrid_SetColLabelValue 523
-#define wxGrid_SetColMinimalWidth 524
-#define wxGrid_SetColMinimalAcceptableWidth 525
-#define wxGrid_SetColSize 526
-#define wxGrid_SetDefaultCellAlignment 527
-#define wxGrid_SetDefaultCellBackgroundColour 528
-#define wxGrid_SetDefaultCellFont 529
-#define wxGrid_SetDefaultCellTextColour 530
-#define wxGrid_SetDefaultEditor 531
-#define wxGrid_SetDefaultRenderer 532
-#define wxGrid_SetDefaultColSize 533
-#define wxGrid_SetDefaultRowSize 534
-#define wxGrid_SetGridCursor 535
-#define wxGrid_SetGridLineColour 536
-#define wxGrid_SetLabelBackgroundColour 537
-#define wxGrid_SetLabelFont 538
-#define wxGrid_SetLabelTextColour 539
-#define wxGrid_SetMargins 540
-#define wxGrid_SetReadOnly 541
-#define wxGrid_SetRowAttr 542
-#define wxGrid_SetRowLabelAlignment 543
-#define wxGrid_SetRowLabelSize 544
-#define wxGrid_SetRowLabelValue 545
-#define wxGrid_SetRowMinimalHeight 546
-#define wxGrid_SetRowMinimalAcceptableHeight 547
-#define wxGrid_SetRowSize 548
-#define wxGrid_SetScrollLineX 549
-#define wxGrid_SetScrollLineY 550
-#define wxGrid_SetSelectionBackground 551
-#define wxGrid_SetSelectionForeground 552
-#define wxGrid_SetSelectionMode 553
-#define wxGrid_ShowCellEditControl 554
-#define wxGrid_XToCol 555
-#define wxGrid_XToEdgeOfCol 556
-#define wxGrid_YToEdgeOfRow 557
-#define wxGrid_YToRow 558
-#define wxGridCellRenderer_Draw 559
-#define wxGridCellRenderer_GetBestSize 560
-#define wxGridCellEditor_Create 561
-#define wxGridCellEditor_IsCreated 562
-#define wxGridCellEditor_SetSize 563
-#define wxGridCellEditor_Show 564
-#define wxGridCellEditor_PaintBackground 565
-#define wxGridCellEditor_BeginEdit 566
-#define wxGridCellEditor_EndEdit 567
-#define wxGridCellEditor_Reset 568
-#define wxGridCellEditor_StartingKey 569
-#define wxGridCellEditor_StartingClick 570
-#define wxGridCellEditor_HandleReturn 571
-#define wxGridCellBoolRenderer_new 572
-#define wxGridCellBoolRenderer_destroy 573
-#define wxGridCellBoolEditor_new 574
-#define wxGridCellBoolEditor_IsTrueValue 575
-#define wxGridCellBoolEditor_UseStringValues 576
-#define wxGridCellBoolEditor_destroy 577
-#define wxGridCellFloatRenderer_new 578
-#define wxGridCellFloatRenderer_GetPrecision 579
-#define wxGridCellFloatRenderer_GetWidth 580
-#define wxGridCellFloatRenderer_SetParameters 581
-#define wxGridCellFloatRenderer_SetPrecision 582
-#define wxGridCellFloatRenderer_SetWidth 583
-#define wxGridCellFloatRenderer_destroy 584
-#define wxGridCellFloatEditor_new 585
-#define wxGridCellFloatEditor_SetParameters 586
-#define wxGridCellFloatEditor_destroy 587
-#define wxGridCellStringRenderer_new 588
-#define wxGridCellStringRenderer_destroy 589
-#define wxGridCellTextEditor_new 590
-#define wxGridCellTextEditor_SetParameters 591
-#define wxGridCellTextEditor_destroy 592
-#define wxGridCellChoiceEditor_new 594
-#define wxGridCellChoiceEditor_SetParameters 595
-#define wxGridCellChoiceEditor_destroy 596
-#define wxGridCellNumberRenderer_new 597
-#define wxGridCellNumberRenderer_destroy 598
-#define wxGridCellNumberEditor_new 599
-#define wxGridCellNumberEditor_GetValue 600
-#define wxGridCellNumberEditor_SetParameters 601
-#define wxGridCellNumberEditor_destroy 602
-#define wxGridCellAttr_SetTextColour 603
-#define wxGridCellAttr_SetBackgroundColour 604
-#define wxGridCellAttr_SetFont 605
-#define wxGridCellAttr_SetAlignment 606
-#define wxGridCellAttr_SetReadOnly 607
-#define wxGridCellAttr_SetRenderer 608
-#define wxGridCellAttr_SetEditor 609
-#define wxGridCellAttr_HasTextColour 610
-#define wxGridCellAttr_HasBackgroundColour 611
-#define wxGridCellAttr_HasFont 612
-#define wxGridCellAttr_HasAlignment 613
-#define wxGridCellAttr_HasRenderer 614
-#define wxGridCellAttr_HasEditor 615
-#define wxGridCellAttr_GetTextColour 616
-#define wxGridCellAttr_GetBackgroundColour 617
-#define wxGridCellAttr_GetFont 618
-#define wxGridCellAttr_GetAlignment 619
-#define wxGridCellAttr_GetRenderer 620
-#define wxGridCellAttr_GetEditor 621
-#define wxGridCellAttr_IsReadOnly 622
-#define wxGridCellAttr_SetDefAttr 623
-#define wxDC_Blit 624
-#define wxDC_CalcBoundingBox 625
-#define wxDC_Clear 626
-#define wxDC_ComputeScaleAndOrigin 627
-#define wxDC_CrossHair 628
-#define wxDC_DestroyClippingRegion 629
-#define wxDC_DeviceToLogicalX 630
-#define wxDC_DeviceToLogicalXRel 631
-#define wxDC_DeviceToLogicalY 632
-#define wxDC_DeviceToLogicalYRel 633
-#define wxDC_DrawArc 634
-#define wxDC_DrawBitmap 635
-#define wxDC_DrawCheckMark 636
-#define wxDC_DrawCircle 637
-#define wxDC_DrawEllipse_2 639
-#define wxDC_DrawEllipse_1 640
-#define wxDC_DrawEllipticArc 641
-#define wxDC_DrawIcon 642
-#define wxDC_DrawLabel 643
-#define wxDC_DrawLine 644
-#define wxDC_DrawLines 645
-#define wxDC_DrawPolygon 647
-#define wxDC_DrawPoint 649
-#define wxDC_DrawRectangle_2 651
-#define wxDC_DrawRectangle_1 652
-#define wxDC_DrawRotatedText 653
-#define wxDC_DrawRoundedRectangle_3 655
-#define wxDC_DrawRoundedRectangle_2 656
-#define wxDC_DrawText 657
-#define wxDC_EndDoc 658
-#define wxDC_EndPage 659
-#define wxDC_FloodFill 660
-#define wxDC_GetBackground 661
-#define wxDC_GetBackgroundMode 662
-#define wxDC_GetBrush 663
-#define wxDC_GetCharHeight 664
-#define wxDC_GetCharWidth 665
-#define wxDC_GetClippingBox 666
-#define wxDC_GetFont 668
-#define wxDC_GetLayoutDirection 669
-#define wxDC_GetLogicalFunction 670
-#define wxDC_GetMapMode 671
-#define wxDC_GetMultiLineTextExtent_4 672
-#define wxDC_GetMultiLineTextExtent_1 673
-#define wxDC_GetPartialTextExtents 674
-#define wxDC_GetPen 675
-#define wxDC_GetPixel 676
-#define wxDC_GetPPI 677
-#define wxDC_GetSize 679
-#define wxDC_GetSizeMM 681
-#define wxDC_GetTextBackground 682
-#define wxDC_GetTextExtent_4 683
-#define wxDC_GetTextExtent_1 684
-#define wxDC_GetTextForeground 686
-#define wxDC_GetUserScale 687
-#define wxDC_GradientFillConcentric_3 688
-#define wxDC_GradientFillConcentric_4 689
-#define wxDC_GradientFillLinear 690
-#define wxDC_LogicalToDeviceX 691
-#define wxDC_LogicalToDeviceXRel 692
-#define wxDC_LogicalToDeviceY 693
-#define wxDC_LogicalToDeviceYRel 694
-#define wxDC_MaxX 695
-#define wxDC_MaxY 696
-#define wxDC_MinX 697
-#define wxDC_MinY 698
-#define wxDC_IsOk 699
-#define wxDC_ResetBoundingBox 700
-#define wxDC_SetAxisOrientation 701
-#define wxDC_SetBackground 702
-#define wxDC_SetBackgroundMode 703
-#define wxDC_SetBrush 704
-#define wxDC_SetClippingRegion_2 706
-#define wxDC_SetClippingRegion_1_1 707
-#define wxDC_SetClippingRegion_1_0 708
-#define wxDC_SetDeviceOrigin 709
-#define wxDC_SetFont 710
-#define wxDC_SetLayoutDirection 711
-#define wxDC_SetLogicalFunction 712
-#define wxDC_SetMapMode 713
-#define wxDC_SetPalette 714
-#define wxDC_SetPen 715
-#define wxDC_SetTextBackground 716
-#define wxDC_SetTextForeground 717
-#define wxDC_SetUserScale 718
-#define wxDC_StartDoc 719
-#define wxDC_StartPage 720
-#define wxMirrorDC_new 721
-#define wxMirrorDC_destroy 722
-#define wxScreenDC_new 723
-#define wxScreenDC_destruct 724
-#define wxPostScriptDC_new_0 725
-#define wxPostScriptDC_new_1 726
-#define wxPostScriptDC_destruct 727
-#define wxPostScriptDC_SetResolution 728
-#define wxPostScriptDC_GetResolution 729
-#define wxWindowDC_new_0 730
-#define wxWindowDC_new_1 731
-#define wxWindowDC_destruct 732
-#define wxClientDC_new_0 733
-#define wxClientDC_new_1 734
-#define wxClientDC_destroy 735
-#define wxPaintDC_new_0 736
-#define wxPaintDC_new_1 737
-#define wxPaintDC_destroy 738
-#define wxMemoryDC_new_1_0 740
-#define wxMemoryDC_new_1_1 741
-#define wxMemoryDC_new_0 742
-#define wxMemoryDC_destruct 744
-#define wxMemoryDC_SelectObject 745
-#define wxMemoryDC_SelectObjectAsSource 746
-#define wxBufferedDC_new_0 747
-#define wxBufferedDC_new_2 748
-#define wxBufferedDC_new_3 749
-#define wxBufferedDC_destruct 750
-#define wxBufferedDC_Init_2 751
-#define wxBufferedDC_Init_3 752
-#define wxBufferedPaintDC_new_3 753
-#define wxBufferedPaintDC_new_2 754
-#define wxBufferedPaintDC_destruct 755
-#define wxGraphicsObject_destruct 756
-#define wxGraphicsObject_GetRenderer 757
-#define wxGraphicsObject_IsNull 758
-#define wxGraphicsContext_destruct 759
-#define wxGraphicsContext_Create_1_1 760
-#define wxGraphicsContext_Create_1_0 761
-#define wxGraphicsContext_Create_0 762
-#define wxGraphicsContext_CreatePen 763
-#define wxGraphicsContext_CreateBrush 764
-#define wxGraphicsContext_CreateRadialGradientBrush 765
-#define wxGraphicsContext_CreateLinearGradientBrush 766
-#define wxGraphicsContext_CreateFont 767
-#define wxGraphicsContext_CreateMatrix 768
-#define wxGraphicsContext_CreatePath 769
-#define wxGraphicsContext_Clip_1 770
-#define wxGraphicsContext_Clip_4 771
-#define wxGraphicsContext_ResetClip 772
-#define wxGraphicsContext_DrawBitmap 773
-#define wxGraphicsContext_DrawEllipse 774
-#define wxGraphicsContext_DrawIcon 775
-#define wxGraphicsContext_DrawLines 776
-#define wxGraphicsContext_DrawPath 777
-#define wxGraphicsContext_DrawRectangle 778
-#define wxGraphicsContext_DrawRoundedRectangle 779
-#define wxGraphicsContext_DrawText_3 780
-#define wxGraphicsContext_DrawText_4_0 781
-#define wxGraphicsContext_DrawText_4_1 782
-#define wxGraphicsContext_DrawText_5 783
-#define wxGraphicsContext_FillPath 784
-#define wxGraphicsContext_StrokePath 785
-#define wxGraphicsContext_GetPartialTextExtents 786
-#define wxGraphicsContext_GetTextExtent 787
-#define wxGraphicsContext_Rotate 788
-#define wxGraphicsContext_Scale 789
-#define wxGraphicsContext_Translate 790
-#define wxGraphicsContext_GetTransform 791
-#define wxGraphicsContext_SetTransform 792
-#define wxGraphicsContext_ConcatTransform 793
-#define wxGraphicsContext_SetBrush_1_1 794
-#define wxGraphicsContext_SetBrush_1_0 795
-#define wxGraphicsContext_SetFont_1 796
-#define wxGraphicsContext_SetFont_2 797
-#define wxGraphicsContext_SetPen_1_0 798
-#define wxGraphicsContext_SetPen_1_1 799
-#define wxGraphicsContext_StrokeLine 800
-#define wxGraphicsContext_StrokeLines 801
-#define wxGraphicsMatrix_Concat 803
-#define wxGraphicsMatrix_Get 805
-#define wxGraphicsMatrix_Invert 806
-#define wxGraphicsMatrix_IsEqual 807
-#define wxGraphicsMatrix_IsIdentity 809
-#define wxGraphicsMatrix_Rotate 810
-#define wxGraphicsMatrix_Scale 811
-#define wxGraphicsMatrix_Translate 812
-#define wxGraphicsMatrix_Set 813
-#define wxGraphicsMatrix_TransformPoint 814
-#define wxGraphicsMatrix_TransformDistance 815
-#define wxGraphicsPath_MoveToPoint_2 816
-#define wxGraphicsPath_MoveToPoint_1 817
-#define wxGraphicsPath_AddArc_6 818
-#define wxGraphicsPath_AddArc_5 819
-#define wxGraphicsPath_AddArcToPoint 820
-#define wxGraphicsPath_AddCircle 821
-#define wxGraphicsPath_AddCurveToPoint_6 822
-#define wxGraphicsPath_AddCurveToPoint_3 823
-#define wxGraphicsPath_AddEllipse 824
-#define wxGraphicsPath_AddLineToPoint_2 825
-#define wxGraphicsPath_AddLineToPoint_1 826
-#define wxGraphicsPath_AddPath 827
-#define wxGraphicsPath_AddQuadCurveToPoint 828
-#define wxGraphicsPath_AddRectangle 829
-#define wxGraphicsPath_AddRoundedRectangle 830
-#define wxGraphicsPath_CloseSubpath 831
-#define wxGraphicsPath_Contains_3 832
-#define wxGraphicsPath_Contains_2 833
-#define wxGraphicsPath_GetBox 835
-#define wxGraphicsPath_GetCurrentPoint 837
-#define wxGraphicsPath_Transform 838
-#define wxGraphicsRenderer_GetDefaultRenderer 839
-#define wxGraphicsRenderer_CreateContext_1_1 840
-#define wxGraphicsRenderer_CreateContext_1_0 841
-#define wxGraphicsRenderer_CreatePen 842
-#define wxGraphicsRenderer_CreateBrush 843
-#define wxGraphicsRenderer_CreateLinearGradientBrush 844
-#define wxGraphicsRenderer_CreateRadialGradientBrush 845
-#define wxGraphicsRenderer_CreateFont 846
-#define wxGraphicsRenderer_CreateMatrix 847
-#define wxGraphicsRenderer_CreatePath 848
-#define wxMenuBar_new_1 850
-#define wxMenuBar_new_0 852
-#define wxMenuBar_destruct 854
-#define wxMenuBar_Append 855
-#define wxMenuBar_Check 856
-#define wxMenuBar_Enable_2 857
-#define wxMenuBar_Enable_1 858
-#define wxMenuBar_EnableTop 859
-#define wxMenuBar_FindMenu 860
-#define wxMenuBar_FindMenuItem 861
-#define wxMenuBar_FindItem 862
-#define wxMenuBar_GetHelpString 863
-#define wxMenuBar_GetLabel_1 864
-#define wxMenuBar_GetLabel_0 865
-#define wxMenuBar_GetLabelTop 866
-#define wxMenuBar_GetMenu 867
-#define wxMenuBar_GetMenuCount 868
-#define wxMenuBar_Insert 869
-#define wxMenuBar_IsChecked 870
-#define wxMenuBar_IsEnabled_1 871
-#define wxMenuBar_IsEnabled_0 872
-#define wxMenuBar_Remove 873
-#define wxMenuBar_Replace 874
-#define wxMenuBar_SetHelpString 875
-#define wxMenuBar_SetLabel_2 876
-#define wxMenuBar_SetLabel_1 877
-#define wxMenuBar_SetLabelTop 878
-#define wxControl_GetLabel 879
-#define wxControl_SetLabel 880
-#define wxControlWithItems_Append_1 881
-#define wxControlWithItems_Append_2 882
-#define wxControlWithItems_appendStrings_1 883
-#define wxControlWithItems_Clear 884
-#define wxControlWithItems_Delete 885
-#define wxControlWithItems_FindString 886
-#define wxControlWithItems_getClientData 887
-#define wxControlWithItems_setClientData 888
-#define wxControlWithItems_GetCount 889
-#define wxControlWithItems_GetSelection 890
-#define wxControlWithItems_GetString 891
-#define wxControlWithItems_GetStringSelection 892
-#define wxControlWithItems_Insert_2 893
-#define wxControlWithItems_Insert_3 894
-#define wxControlWithItems_IsEmpty 895
-#define wxControlWithItems_Select 896
-#define wxControlWithItems_SetSelection 897
-#define wxControlWithItems_SetString 898
-#define wxControlWithItems_SetStringSelection 899
-#define wxMenu_new_2 902
-#define wxMenu_new_1 903
-#define wxMenu_destruct 905
-#define wxMenu_Append_3 906
-#define wxMenu_Append_1 907
-#define wxMenu_Append_4_0 908
-#define wxMenu_Append_4_1 909
-#define wxMenu_AppendCheckItem 910
-#define wxMenu_AppendRadioItem 911
-#define wxMenu_AppendSeparator 912
-#define wxMenu_Break 913
-#define wxMenu_Check 914
-#define wxMenu_Delete_1_0 915
-#define wxMenu_Delete_1_1 916
-#define wxMenu_Destroy_1_0 917
-#define wxMenu_Destroy_1_1 918
-#define wxMenu_Enable 919
-#define wxMenu_FindItem_1 920
-#define wxMenu_FindItem_2 921
-#define wxMenu_FindItemByPosition 922
-#define wxMenu_GetHelpString 923
-#define wxMenu_GetLabel 924
-#define wxMenu_GetMenuItemCount 925
-#define wxMenu_GetMenuItems 926
-#define wxMenu_GetTitle 928
-#define wxMenu_Insert_2 929
-#define wxMenu_Insert_3 930
-#define wxMenu_Insert_5_1 931
-#define wxMenu_Insert_5_0 932
-#define wxMenu_InsertCheckItem 933
-#define wxMenu_InsertRadioItem 934
-#define wxMenu_InsertSeparator 935
-#define wxMenu_IsChecked 936
-#define wxMenu_IsEnabled 937
-#define wxMenu_Prepend_1 938
-#define wxMenu_Prepend_2 939
-#define wxMenu_Prepend_4_1 940
-#define wxMenu_Prepend_4_0 941
-#define wxMenu_PrependCheckItem 942
-#define wxMenu_PrependRadioItem 943
-#define wxMenu_PrependSeparator 944
-#define wxMenu_Remove_1_0 945
-#define wxMenu_Remove_1_1 946
-#define wxMenu_SetHelpString 947
-#define wxMenu_SetLabel 948
-#define wxMenu_SetTitle 949
-#define wxMenuItem_new 950
-#define wxMenuItem_destruct 952
-#define wxMenuItem_Check 953
-#define wxMenuItem_Enable 954
-#define wxMenuItem_GetBitmap 955
-#define wxMenuItem_GetHelp 956
-#define wxMenuItem_GetId 957
-#define wxMenuItem_GetKind 958
-#define wxMenuItem_GetLabel 959
-#define wxMenuItem_GetLabelFromText 960
-#define wxMenuItem_GetMenu 961
-#define wxMenuItem_GetText 962
-#define wxMenuItem_GetSubMenu 963
-#define wxMenuItem_IsCheckable 964
-#define wxMenuItem_IsChecked 965
-#define wxMenuItem_IsEnabled 966
-#define wxMenuItem_IsSeparator 967
-#define wxMenuItem_IsSubMenu 968
-#define wxMenuItem_SetBitmap 969
-#define wxMenuItem_SetHelp 970
-#define wxMenuItem_SetMenu 971
-#define wxMenuItem_SetSubMenu 972
-#define wxMenuItem_SetText 973
-#define wxToolBar_AddControl 974
-#define wxToolBar_AddSeparator 975
-#define wxToolBar_AddTool_5 976
-#define wxToolBar_AddTool_4_0 977
-#define wxToolBar_AddTool_1 978
-#define wxToolBar_AddTool_4_1 979
-#define wxToolBar_AddTool_3 980
-#define wxToolBar_AddTool_6 981
-#define wxToolBar_AddCheckTool 982
-#define wxToolBar_AddRadioTool 983
-#define wxToolBar_AddStretchableSpace 984
-#define wxToolBar_InsertStretchableSpace 985
-#define wxToolBar_DeleteTool 986
-#define wxToolBar_DeleteToolByPos 987
-#define wxToolBar_EnableTool 988
-#define wxToolBar_FindById 989
-#define wxToolBar_FindControl 990
-#define wxToolBar_FindToolForPosition 991
-#define wxToolBar_GetToolSize 992
-#define wxToolBar_GetToolBitmapSize 993
-#define wxToolBar_GetMargins 994
-#define wxToolBar_GetToolEnabled 995
-#define wxToolBar_GetToolLongHelp 996
-#define wxToolBar_GetToolPacking 997
-#define wxToolBar_GetToolPos 998
-#define wxToolBar_GetToolSeparation 999
-#define wxToolBar_GetToolShortHelp 1000
-#define wxToolBar_GetToolState 1001
-#define wxToolBar_InsertControl 1002
-#define wxToolBar_InsertSeparator 1003
-#define wxToolBar_InsertTool_5 1004
-#define wxToolBar_InsertTool_2 1005
-#define wxToolBar_InsertTool_4 1006
-#define wxToolBar_Realize 1007
-#define wxToolBar_RemoveTool 1008
-#define wxToolBar_SetMargins 1009
-#define wxToolBar_SetToolBitmapSize 1010
-#define wxToolBar_SetToolLongHelp 1011
-#define wxToolBar_SetToolPacking 1012
-#define wxToolBar_SetToolShortHelp 1013
-#define wxToolBar_SetToolSeparation 1014
-#define wxToolBar_ToggleTool 1015
-#define wxStatusBar_new_0 1017
-#define wxStatusBar_new_2 1018
-#define wxStatusBar_destruct 1020
-#define wxStatusBar_Create 1021
-#define wxStatusBar_GetFieldRect 1022
-#define wxStatusBar_GetFieldsCount 1023
-#define wxStatusBar_GetStatusText 1024
-#define wxStatusBar_PopStatusText 1025
-#define wxStatusBar_PushStatusText 1026
-#define wxStatusBar_SetFieldsCount 1027
-#define wxStatusBar_SetMinHeight 1028
-#define wxStatusBar_SetStatusText 1029
-#define wxStatusBar_SetStatusWidths 1030
-#define wxStatusBar_SetStatusStyles 1031
-#define wxBitmap_new_0 1032
-#define wxBitmap_new_3 1033
-#define wxBitmap_new_4 1034
-#define wxBitmap_new_2_0 1035
-#define wxBitmap_new_2_1 1036
-#define wxBitmap_destruct 1037
-#define wxBitmap_ConvertToImage 1038
-#define wxBitmap_CopyFromIcon 1039
-#define wxBitmap_Create 1040
-#define wxBitmap_GetDepth 1041
-#define wxBitmap_GetHeight 1042
-#define wxBitmap_GetPalette 1043
-#define wxBitmap_GetMask 1044
-#define wxBitmap_GetWidth 1045
-#define wxBitmap_GetSubBitmap 1046
-#define wxBitmap_LoadFile 1047
-#define wxBitmap_Ok 1048
-#define wxBitmap_SaveFile 1049
-#define wxBitmap_SetDepth 1050
-#define wxBitmap_SetHeight 1051
-#define wxBitmap_SetMask 1052
-#define wxBitmap_SetPalette 1053
-#define wxBitmap_SetWidth 1054
-#define wxIcon_new_0 1055
-#define wxIcon_new_2 1056
-#define wxIcon_new_1 1057
-#define wxIcon_CopyFromBitmap 1058
-#define wxIcon_destroy 1059
-#define wxIconBundle_new_0 1060
-#define wxIconBundle_new_2 1061
-#define wxIconBundle_new_1_0 1062
-#define wxIconBundle_new_1_1 1063
-#define wxIconBundle_destruct 1064
-#define wxIconBundle_AddIcon_2 1065
-#define wxIconBundle_AddIcon_1 1066
-#define wxIconBundle_GetIcon_1_1 1067
-#define wxIconBundle_GetIcon_1_0 1068
-#define wxCursor_new_0 1069
-#define wxCursor_new_1_0 1070
-#define wxCursor_new_1_1 1071
-#define wxCursor_new_4 1072
-#define wxCursor_destruct 1073
-#define wxCursor_Ok 1074
-#define wxMask_new_0 1075
-#define wxMask_new_2_1 1076
-#define wxMask_new_2_0 1077
-#define wxMask_new_1 1078
-#define wxMask_destruct 1079
-#define wxMask_Create_2_1 1080
-#define wxMask_Create_2_0 1081
-#define wxMask_Create_1 1082
-#define wxImage_new_0 1083
-#define wxImage_new_3_0 1084
-#define wxImage_new_4 1085
-#define wxImage_new_5 1086
-#define wxImage_new_2 1087
-#define wxImage_new_3_1 1088
-#define wxImage_Blur 1089
-#define wxImage_BlurHorizontal 1090
-#define wxImage_BlurVertical 1091
-#define wxImage_ConvertAlphaToMask 1092
-#define wxImage_ConvertToGreyscale 1093
-#define wxImage_ConvertToMono 1094
-#define wxImage_Copy 1095
-#define wxImage_Create_3 1096
-#define wxImage_Create_4 1097
-#define wxImage_Create_5 1098
-#define wxImage_Destroy 1099
-#define wxImage_FindFirstUnusedColour 1100
-#define wxImage_GetImageExtWildcard 1101
-#define wxImage_GetAlpha_2 1102
-#define wxImage_GetAlpha_0 1103
-#define wxImage_GetBlue 1104
-#define wxImage_GetData 1105
-#define wxImage_GetGreen 1106
-#define wxImage_GetImageCount 1107
-#define wxImage_GetHeight 1108
-#define wxImage_GetMaskBlue 1109
-#define wxImage_GetMaskGreen 1110
-#define wxImage_GetMaskRed 1111
-#define wxImage_GetOrFindMaskColour 1112
-#define wxImage_GetPalette 1113
-#define wxImage_GetRed 1114
-#define wxImage_GetSubImage 1115
-#define wxImage_GetWidth 1116
-#define wxImage_HasAlpha 1117
-#define wxImage_HasMask 1118
-#define wxImage_GetOption 1119
-#define wxImage_GetOptionInt 1120
-#define wxImage_HasOption 1121
-#define wxImage_InitAlpha 1122
-#define wxImage_InitStandardHandlers 1123
-#define wxImage_IsTransparent 1124
-#define wxImage_LoadFile_2 1125
-#define wxImage_LoadFile_3 1126
-#define wxImage_Ok 1127
-#define wxImage_RemoveHandler 1128
-#define wxImage_Mirror 1129
-#define wxImage_Replace 1130
-#define wxImage_Rescale 1131
-#define wxImage_Resize 1132
-#define wxImage_Rotate 1133
-#define wxImage_RotateHue 1134
-#define wxImage_Rotate90 1135
-#define wxImage_SaveFile_1 1136
-#define wxImage_SaveFile_2_0 1137
-#define wxImage_SaveFile_2_1 1138
-#define wxImage_Scale 1139
-#define wxImage_Size 1140
-#define wxImage_SetAlpha_3 1141
-#define wxImage_SetAlpha_2 1142
-#define wxImage_SetData_2 1143
-#define wxImage_SetData_4 1144
-#define wxImage_SetMask 1145
-#define wxImage_SetMaskColour 1146
-#define wxImage_SetMaskFromImage 1147
-#define wxImage_SetOption_2_1 1148
-#define wxImage_SetOption_2_0 1149
-#define wxImage_SetPalette 1150
-#define wxImage_SetRGB_5 1151
-#define wxImage_SetRGB_4 1152
-#define wxImage_destroy 1153
-#define wxBrush_new_0 1154
-#define wxBrush_new_2 1155
-#define wxBrush_new_1 1156
-#define wxBrush_destruct 1158
-#define wxBrush_GetColour 1159
-#define wxBrush_GetStipple 1160
-#define wxBrush_GetStyle 1161
-#define wxBrush_IsHatch 1162
-#define wxBrush_IsOk 1163
-#define wxBrush_SetColour_1 1164
-#define wxBrush_SetColour_3 1165
-#define wxBrush_SetStipple 1166
-#define wxBrush_SetStyle 1167
-#define wxPen_new_0 1168
-#define wxPen_new_2 1169
-#define wxPen_destruct 1170
-#define wxPen_GetCap 1171
-#define wxPen_GetColour 1172
-#define wxPen_GetJoin 1173
-#define wxPen_GetStyle 1174
-#define wxPen_GetWidth 1175
-#define wxPen_IsOk 1176
-#define wxPen_SetCap 1177
-#define wxPen_SetColour_1 1178
-#define wxPen_SetColour_3 1179
-#define wxPen_SetJoin 1180
-#define wxPen_SetStyle 1181
-#define wxPen_SetWidth 1182
-#define wxRegion_new_0 1183
-#define wxRegion_new_4 1184
-#define wxRegion_new_2 1185
-#define wxRegion_new_1_1 1186
-#define wxRegion_new_1_0 1188
-#define wxRegion_destruct 1190
-#define wxRegion_Clear 1191
-#define wxRegion_Contains_2 1192
-#define wxRegion_Contains_1_0 1193
-#define wxRegion_Contains_4 1194
-#define wxRegion_Contains_1_1 1195
-#define wxRegion_ConvertToBitmap 1196
-#define wxRegion_GetBox 1197
-#define wxRegion_Intersect_4 1198
-#define wxRegion_Intersect_1_1 1199
-#define wxRegion_Intersect_1_0 1200
-#define wxRegion_IsEmpty 1201
-#define wxRegion_Subtract_4 1202
-#define wxRegion_Subtract_1_1 1203
-#define wxRegion_Subtract_1_0 1204
-#define wxRegion_Offset_2 1205
-#define wxRegion_Offset_1 1206
-#define wxRegion_Union_4 1207
-#define wxRegion_Union_1_2 1208
-#define wxRegion_Union_1_1 1209
-#define wxRegion_Union_1_0 1210
-#define wxRegion_Union_3 1211
-#define wxRegion_Xor_4 1212
-#define wxRegion_Xor_1_1 1213
-#define wxRegion_Xor_1_0 1214
-#define wxAcceleratorTable_new_0 1215
-#define wxAcceleratorTable_new_2 1216
-#define wxAcceleratorTable_destruct 1217
-#define wxAcceleratorTable_Ok 1218
-#define wxAcceleratorEntry_new_1_0 1219
-#define wxAcceleratorEntry_new_1_1 1220
-#define wxAcceleratorEntry_GetCommand 1221
-#define wxAcceleratorEntry_GetFlags 1222
-#define wxAcceleratorEntry_GetKeyCode 1223
-#define wxAcceleratorEntry_Set 1224
-#define wxAcceleratorEntry_destroy 1225
-#define wxCaret_new_3 1230
-#define wxCaret_new_2 1231
-#define wxCaret_destruct 1233
-#define wxCaret_Create_3 1234
-#define wxCaret_Create_2 1235
-#define wxCaret_GetBlinkTime 1236
-#define wxCaret_GetPosition 1238
-#define wxCaret_GetSize 1240
-#define wxCaret_GetWindow 1241
-#define wxCaret_Hide 1242
-#define wxCaret_IsOk 1243
-#define wxCaret_IsVisible 1244
-#define wxCaret_Move_2 1245
-#define wxCaret_Move_1 1246
-#define wxCaret_SetBlinkTime 1247
-#define wxCaret_SetSize_2 1248
-#define wxCaret_SetSize_1 1249
-#define wxCaret_Show 1250
-#define wxSizer_Add_2_1 1251
-#define wxSizer_Add_2_0 1252
-#define wxSizer_Add_3 1253
-#define wxSizer_Add_2_3 1254
-#define wxSizer_Add_2_2 1255
-#define wxSizer_AddSpacer 1256
-#define wxSizer_AddStretchSpacer 1257
-#define wxSizer_CalcMin 1258
-#define wxSizer_Clear 1259
-#define wxSizer_Detach_1_2 1260
-#define wxSizer_Detach_1_1 1261
-#define wxSizer_Detach_1_0 1262
-#define wxSizer_Fit 1263
-#define wxSizer_FitInside 1264
-#define wxSizer_GetChildren 1265
-#define wxSizer_GetItem_2_1 1266
-#define wxSizer_GetItem_2_0 1267
-#define wxSizer_GetItem_1 1268
-#define wxSizer_GetSize 1269
-#define wxSizer_GetPosition 1270
-#define wxSizer_GetMinSize 1271
-#define wxSizer_Hide_2_0 1272
-#define wxSizer_Hide_2_1 1273
-#define wxSizer_Hide_1 1274
-#define wxSizer_Insert_3_1 1275
-#define wxSizer_Insert_3_0 1276
-#define wxSizer_Insert_4 1277
-#define wxSizer_Insert_3_3 1278
-#define wxSizer_Insert_3_2 1279
-#define wxSizer_Insert_2 1280
-#define wxSizer_InsertSpacer 1281
-#define wxSizer_InsertStretchSpacer 1282
-#define wxSizer_IsShown_1_2 1283
-#define wxSizer_IsShown_1_1 1284
-#define wxSizer_IsShown_1_0 1285
-#define wxSizer_Layout 1286
-#define wxSizer_Prepend_2_1 1287
-#define wxSizer_Prepend_2_0 1288
-#define wxSizer_Prepend_3 1289
-#define wxSizer_Prepend_2_3 1290
-#define wxSizer_Prepend_2_2 1291
-#define wxSizer_Prepend_1 1292
-#define wxSizer_PrependSpacer 1293
-#define wxSizer_PrependStretchSpacer 1294
-#define wxSizer_RecalcSizes 1295
-#define wxSizer_Remove_1_1 1296
-#define wxSizer_Remove_1_0 1297
-#define wxSizer_Replace_3_1 1298
-#define wxSizer_Replace_3_0 1299
-#define wxSizer_Replace_2 1300
-#define wxSizer_SetDimension 1301
-#define wxSizer_SetMinSize_2 1302
-#define wxSizer_SetMinSize_1 1303
-#define wxSizer_SetItemMinSize_3_2 1304
-#define wxSizer_SetItemMinSize_2_2 1305
-#define wxSizer_SetItemMinSize_3_1 1306
-#define wxSizer_SetItemMinSize_2_1 1307
-#define wxSizer_SetItemMinSize_3_0 1308
-#define wxSizer_SetItemMinSize_2_0 1309
-#define wxSizer_SetSizeHints 1310
-#define wxSizer_SetVirtualSizeHints 1311
-#define wxSizer_Show_2_2 1312
-#define wxSizer_Show_2_1 1313
-#define wxSizer_Show_2_0 1314
-#define wxSizer_Show_1 1315
-#define wxSizerFlags_new 1316
-#define wxSizerFlags_Align 1317
-#define wxSizerFlags_Border_2 1318
-#define wxSizerFlags_Border_1 1319
-#define wxSizerFlags_Center 1320
-#define wxSizerFlags_Centre 1321
-#define wxSizerFlags_Expand 1322
-#define wxSizerFlags_Left 1323
-#define wxSizerFlags_Proportion 1324
-#define wxSizerFlags_Right 1325
-#define wxSizerFlags_destroy 1326
-#define wxSizerItem_new_5_1 1327
-#define wxSizerItem_new_2_1 1328
-#define wxSizerItem_new_5_0 1329
-#define wxSizerItem_new_2_0 1330
-#define wxSizerItem_new_6 1331
-#define wxSizerItem_new_3 1332
-#define wxSizerItem_new_0 1333
-#define wxSizerItem_destruct 1334
-#define wxSizerItem_CalcMin 1335
-#define wxSizerItem_DeleteWindows 1336
-#define wxSizerItem_DetachSizer 1337
-#define wxSizerItem_GetBorder 1338
-#define wxSizerItem_GetFlag 1339
-#define wxSizerItem_GetMinSize 1340
-#define wxSizerItem_GetPosition 1341
-#define wxSizerItem_GetProportion 1342
-#define wxSizerItem_GetRatio 1343
-#define wxSizerItem_GetRect 1344
-#define wxSizerItem_GetSize 1345
-#define wxSizerItem_GetSizer 1346
-#define wxSizerItem_GetSpacer 1347
-#define wxSizerItem_GetUserData 1348
-#define wxSizerItem_GetWindow 1349
-#define wxSizerItem_IsSizer 1350
-#define wxSizerItem_IsShown 1351
-#define wxSizerItem_IsSpacer 1352
-#define wxSizerItem_IsWindow 1353
-#define wxSizerItem_SetBorder 1354
-#define wxSizerItem_SetDimension 1355
-#define wxSizerItem_SetFlag 1356
-#define wxSizerItem_SetInitSize 1357
-#define wxSizerItem_SetMinSize_1 1358
-#define wxSizerItem_SetMinSize_2 1359
-#define wxSizerItem_SetProportion 1360
-#define wxSizerItem_SetRatio_2 1361
-#define wxSizerItem_SetRatio_1_1 1362
-#define wxSizerItem_SetRatio_1_0 1363
-#define wxSizerItem_SetSizer 1364
-#define wxSizerItem_SetSpacer_1 1365
-#define wxSizerItem_SetSpacer_2 1366
-#define wxSizerItem_SetWindow 1367
-#define wxSizerItem_Show 1368
-#define wxBoxSizer_new 1369
-#define wxBoxSizer_GetOrientation 1370
-#define wxBoxSizer_destroy 1371
-#define wxStaticBoxSizer_new_2 1372
-#define wxStaticBoxSizer_new_3 1373
-#define wxStaticBoxSizer_GetStaticBox 1374
-#define wxStaticBoxSizer_destroy 1375
-#define wxGridSizer_new_4 1376
-#define wxGridSizer_new_2 1377
-#define wxGridSizer_GetCols 1378
-#define wxGridSizer_GetHGap 1379
-#define wxGridSizer_GetRows 1380
-#define wxGridSizer_GetVGap 1381
-#define wxGridSizer_SetCols 1382
-#define wxGridSizer_SetHGap 1383
-#define wxGridSizer_SetRows 1384
-#define wxGridSizer_SetVGap 1385
-#define wxGridSizer_destroy 1386
-#define wxFlexGridSizer_new_4 1387
-#define wxFlexGridSizer_new_2 1388
-#define wxFlexGridSizer_AddGrowableCol 1389
-#define wxFlexGridSizer_AddGrowableRow 1390
-#define wxFlexGridSizer_GetFlexibleDirection 1391
-#define wxFlexGridSizer_GetNonFlexibleGrowMode 1392
-#define wxFlexGridSizer_RemoveGrowableCol 1393
-#define wxFlexGridSizer_RemoveGrowableRow 1394
-#define wxFlexGridSizer_SetFlexibleDirection 1395
-#define wxFlexGridSizer_SetNonFlexibleGrowMode 1396
-#define wxFlexGridSizer_destroy 1397
-#define wxGridBagSizer_new 1398
-#define wxGridBagSizer_Add_3_2 1399
-#define wxGridBagSizer_Add_3_1 1400
-#define wxGridBagSizer_Add_4 1401
-#define wxGridBagSizer_Add_1_0 1402
-#define wxGridBagSizer_Add_2_1 1403
-#define wxGridBagSizer_Add_2_0 1404
-#define wxGridBagSizer_Add_3_0 1405
-#define wxGridBagSizer_Add_1_1 1406
-#define wxGridBagSizer_CalcMin 1407
-#define wxGridBagSizer_CheckForIntersection_2 1408
-#define wxGridBagSizer_CheckForIntersection_3 1409
-#define wxGridBagSizer_FindItem_1_1 1410
-#define wxGridBagSizer_FindItem_1_0 1411
-#define wxGridBagSizer_FindItemAtPoint 1412
-#define wxGridBagSizer_FindItemAtPosition 1413
-#define wxGridBagSizer_FindItemWithData 1414
-#define wxGridBagSizer_GetCellSize 1415
-#define wxGridBagSizer_GetEmptyCellSize 1416
-#define wxGridBagSizer_GetItemPosition_1_2 1417
-#define wxGridBagSizer_GetItemPosition_1_1 1418
-#define wxGridBagSizer_GetItemPosition_1_0 1419
-#define wxGridBagSizer_GetItemSpan_1_2 1420
-#define wxGridBagSizer_GetItemSpan_1_1 1421
-#define wxGridBagSizer_GetItemSpan_1_0 1422
-#define wxGridBagSizer_SetEmptyCellSize 1423
-#define wxGridBagSizer_SetItemPosition_2_2 1424
-#define wxGridBagSizer_SetItemPosition_2_1 1425
-#define wxGridBagSizer_SetItemPosition_2_0 1426
-#define wxGridBagSizer_SetItemSpan_2_2 1427
-#define wxGridBagSizer_SetItemSpan_2_1 1428
-#define wxGridBagSizer_SetItemSpan_2_0 1429
-#define wxGridBagSizer_destroy 1430
-#define wxStdDialogButtonSizer_new 1431
-#define wxStdDialogButtonSizer_AddButton 1432
-#define wxStdDialogButtonSizer_Realize 1433
-#define wxStdDialogButtonSizer_SetAffirmativeButton 1434
-#define wxStdDialogButtonSizer_SetCancelButton 1435
-#define wxStdDialogButtonSizer_SetNegativeButton 1436
-#define wxStdDialogButtonSizer_destroy 1437
-#define wxFont_new_0 1438
-#define wxFont_new_1 1439
-#define wxFont_new_5 1440
-#define wxFont_destruct 1442
-#define wxFont_IsFixedWidth 1443
-#define wxFont_GetDefaultEncoding 1444
-#define wxFont_GetFaceName 1445
-#define wxFont_GetFamily 1446
-#define wxFont_GetNativeFontInfoDesc 1447
-#define wxFont_GetNativeFontInfoUserDesc 1448
-#define wxFont_GetPointSize 1449
-#define wxFont_GetStyle 1450
-#define wxFont_GetUnderlined 1451
-#define wxFont_GetWeight 1452
-#define wxFont_Ok 1453
-#define wxFont_SetDefaultEncoding 1454
-#define wxFont_SetFaceName 1455
-#define wxFont_SetFamily 1456
-#define wxFont_SetPointSize 1457
-#define wxFont_SetStyle 1458
-#define wxFont_SetUnderlined 1459
-#define wxFont_SetWeight 1460
-#define wxToolTip_Enable 1461
-#define wxToolTip_SetDelay 1462
-#define wxToolTip_new 1463
-#define wxToolTip_SetTip 1464
-#define wxToolTip_GetTip 1465
-#define wxToolTip_GetWindow 1466
-#define wxToolTip_destroy 1467
-#define wxButton_new_3 1469
-#define wxButton_new_0 1470
-#define wxButton_destruct 1471
-#define wxButton_Create 1472
-#define wxButton_GetDefaultSize 1473
-#define wxButton_SetDefault 1474
-#define wxButton_SetLabel 1475
-#define wxBitmapButton_new_4 1477
-#define wxBitmapButton_new_0 1478
-#define wxBitmapButton_Create 1479
-#define wxBitmapButton_GetBitmapDisabled 1480
-#define wxBitmapButton_GetBitmapFocus 1482
-#define wxBitmapButton_GetBitmapLabel 1484
-#define wxBitmapButton_GetBitmapSelected 1486
-#define wxBitmapButton_SetBitmapDisabled 1488
-#define wxBitmapButton_SetBitmapFocus 1489
-#define wxBitmapButton_SetBitmapLabel 1490
-#define wxBitmapButton_SetBitmapSelected 1491
-#define wxBitmapButton_destroy 1492
-#define wxToggleButton_new_0 1493
-#define wxToggleButton_new_4 1494
-#define wxToggleButton_Create 1495
-#define wxToggleButton_GetValue 1496
-#define wxToggleButton_SetValue 1497
-#define wxToggleButton_destroy 1498
-#define wxCalendarCtrl_new_0 1499
-#define wxCalendarCtrl_new_3 1500
-#define wxCalendarCtrl_Create 1501
-#define wxCalendarCtrl_destruct 1502
-#define wxCalendarCtrl_SetDate 1503
-#define wxCalendarCtrl_GetDate 1504
-#define wxCalendarCtrl_EnableYearChange 1505
-#define wxCalendarCtrl_EnableMonthChange 1506
-#define wxCalendarCtrl_EnableHolidayDisplay 1507
-#define wxCalendarCtrl_SetHeaderColours 1508
-#define wxCalendarCtrl_GetHeaderColourFg 1509
-#define wxCalendarCtrl_GetHeaderColourBg 1510
-#define wxCalendarCtrl_SetHighlightColours 1511
-#define wxCalendarCtrl_GetHighlightColourFg 1512
-#define wxCalendarCtrl_GetHighlightColourBg 1513
-#define wxCalendarCtrl_SetHolidayColours 1514
-#define wxCalendarCtrl_GetHolidayColourFg 1515
-#define wxCalendarCtrl_GetHolidayColourBg 1516
-#define wxCalendarCtrl_GetAttr 1517
-#define wxCalendarCtrl_SetAttr 1518
-#define wxCalendarCtrl_SetHoliday 1519
-#define wxCalendarCtrl_ResetAttr 1520
-#define wxCalendarCtrl_HitTest 1521
-#define wxCalendarDateAttr_new_0 1522
-#define wxCalendarDateAttr_new_2_1 1523
-#define wxCalendarDateAttr_new_2_0 1524
-#define wxCalendarDateAttr_SetTextColour 1525
-#define wxCalendarDateAttr_SetBackgroundColour 1526
-#define wxCalendarDateAttr_SetBorderColour 1527
-#define wxCalendarDateAttr_SetFont 1528
-#define wxCalendarDateAttr_SetBorder 1529
-#define wxCalendarDateAttr_SetHoliday 1530
-#define wxCalendarDateAttr_HasTextColour 1531
-#define wxCalendarDateAttr_HasBackgroundColour 1532
-#define wxCalendarDateAttr_HasBorderColour 1533
-#define wxCalendarDateAttr_HasFont 1534
-#define wxCalendarDateAttr_HasBorder 1535
-#define wxCalendarDateAttr_IsHoliday 1536
-#define wxCalendarDateAttr_GetTextColour 1537
-#define wxCalendarDateAttr_GetBackgroundColour 1538
-#define wxCalendarDateAttr_GetBorderColour 1539
-#define wxCalendarDateAttr_GetFont 1540
-#define wxCalendarDateAttr_GetBorder 1541
-#define wxCalendarDateAttr_destroy 1542
-#define wxCheckBox_new_4 1544
-#define wxCheckBox_new_0 1545
-#define wxCheckBox_Create 1546
-#define wxCheckBox_GetValue 1547
-#define wxCheckBox_Get3StateValue 1548
-#define wxCheckBox_Is3rdStateAllowedForUser 1549
-#define wxCheckBox_Is3State 1550
-#define wxCheckBox_IsChecked 1551
-#define wxCheckBox_SetValue 1552
-#define wxCheckBox_Set3StateValue 1553
-#define wxCheckBox_destroy 1554
-#define wxCheckListBox_new_0 1555
-#define wxCheckListBox_new_3 1557
-#define wxCheckListBox_Check 1558
-#define wxCheckListBox_IsChecked 1559
-#define wxCheckListBox_destroy 1560
-#define wxChoice_new_3 1563
-#define wxChoice_new_0 1564
-#define wxChoice_destruct 1566
-#define wxChoice_Create 1568
-#define wxChoice_Delete 1569
-#define wxChoice_GetColumns 1570
-#define wxChoice_SetColumns 1571
-#define wxComboBox_new_0 1572
-#define wxComboBox_new_3 1574
-#define wxComboBox_destruct 1575
-#define wxComboBox_Create 1577
-#define wxComboBox_CanCopy 1578
-#define wxComboBox_CanCut 1579
-#define wxComboBox_CanPaste 1580
-#define wxComboBox_CanRedo 1581
-#define wxComboBox_CanUndo 1582
-#define wxComboBox_Copy 1583
-#define wxComboBox_Cut 1584
-#define wxComboBox_GetInsertionPoint 1585
-#define wxComboBox_GetLastPosition 1586
-#define wxComboBox_GetValue 1587
-#define wxComboBox_Paste 1588
-#define wxComboBox_Redo 1589
-#define wxComboBox_Replace 1590
-#define wxComboBox_Remove 1591
-#define wxComboBox_SetInsertionPoint 1592
-#define wxComboBox_SetInsertionPointEnd 1593
-#define wxComboBox_SetSelection_1 1594
-#define wxComboBox_SetSelection_2 1595
-#define wxComboBox_SetValue 1596
-#define wxComboBox_Undo 1597
-#define wxGauge_new_0 1598
-#define wxGauge_new_4 1599
-#define wxGauge_Create 1600
-#define wxGauge_GetBezelFace 1601
-#define wxGauge_GetRange 1602
-#define wxGauge_GetShadowWidth 1603
-#define wxGauge_GetValue 1604
-#define wxGauge_IsVertical 1605
-#define wxGauge_SetBezelFace 1606
-#define wxGauge_SetRange 1607
-#define wxGauge_SetShadowWidth 1608
+#define wxWindow_SetTransparent 284
+#define wxWindow_CanSetTransparent 285
+#define wxWindow_IsDoubleBuffered 286
+#define wxWindow_SetDoubleBuffered 287
+#define wxTopLevelWindow_GetIcon 288
+#define wxTopLevelWindow_GetIcons 289
+#define wxTopLevelWindow_GetTitle 290
+#define wxTopLevelWindow_IsActive 291
+#define wxTopLevelWindow_Iconize 292
+#define wxTopLevelWindow_IsFullScreen 293
+#define wxTopLevelWindow_IsIconized 294
+#define wxTopLevelWindow_IsMaximized 295
+#define wxTopLevelWindow_Maximize 296
+#define wxTopLevelWindow_RequestUserAttention 297
+#define wxTopLevelWindow_SetIcon 298
+#define wxTopLevelWindow_SetIcons 299
+#define wxTopLevelWindow_CenterOnScreen 300
+#define wxTopLevelWindow_CentreOnScreen 301
+#define wxTopLevelWindow_SetShape 303
+#define wxTopLevelWindow_SetTitle 304
+#define wxTopLevelWindow_ShowFullScreen 305
+#define wxFrame_new_4 307
+#define wxFrame_new_0 308
+#define wxFrame_destruct 310
+#define wxFrame_Create 311
+#define wxFrame_CreateStatusBar 312
+#define wxFrame_CreateToolBar 313
+#define wxFrame_GetClientAreaOrigin 314
+#define wxFrame_GetMenuBar 315
+#define wxFrame_GetStatusBar 316
+#define wxFrame_GetStatusBarPane 317
+#define wxFrame_GetToolBar 318
+#define wxFrame_ProcessCommand 319
+#define wxFrame_SendSizeEvent 320
+#define wxFrame_SetMenuBar 321
+#define wxFrame_SetStatusBar 322
+#define wxFrame_SetStatusBarPane 323
+#define wxFrame_SetStatusText 324
+#define wxFrame_SetStatusWidths 325
+#define wxFrame_SetToolBar 326
+#define wxMiniFrame_new_0 327
+#define wxMiniFrame_new_4 328
+#define wxMiniFrame_Create 329
+#define wxMiniFrame_destroy 330
+#define wxSplashScreen_new_0 331
+#define wxSplashScreen_new_6 332
+#define wxSplashScreen_destruct 333
+#define wxSplashScreen_GetSplashStyle 334
+#define wxSplashScreen_GetTimeout 335
+#define wxPanel_new_0 336
+#define wxPanel_new_6 337
+#define wxPanel_new_2 338
+#define wxPanel_destruct 339
+#define wxPanel_InitDialog 340
+#define wxPanel_SetFocusIgnoringChildren 341
+#define wxScrolledWindow_new_0 342
+#define wxScrolledWindow_new_2 343
+#define wxScrolledWindow_destruct 344
+#define wxScrolledWindow_CalcScrolledPosition_4 345
+#define wxScrolledWindow_CalcScrolledPosition_1 346
+#define wxScrolledWindow_CalcUnscrolledPosition_4 347
+#define wxScrolledWindow_CalcUnscrolledPosition_1 348
+#define wxScrolledWindow_EnableScrolling 349
+#define wxScrolledWindow_GetScrollPixelsPerUnit 350
+#define wxScrolledWindow_GetViewStart 351
+#define wxScrolledWindow_DoPrepareDC 352
+#define wxScrolledWindow_PrepareDC 353
+#define wxScrolledWindow_Scroll 354
+#define wxScrolledWindow_SetScrollbars 355
+#define wxScrolledWindow_SetScrollRate 356
+#define wxScrolledWindow_SetTargetWindow 357
+#define wxSashWindow_new_0 358
+#define wxSashWindow_new_2 359
+#define wxSashWindow_destruct 360
+#define wxSashWindow_GetSashVisible 361
+#define wxSashWindow_GetMaximumSizeX 362
+#define wxSashWindow_GetMaximumSizeY 363
+#define wxSashWindow_GetMinimumSizeX 364
+#define wxSashWindow_GetMinimumSizeY 365
+#define wxSashWindow_SetMaximumSizeX 366
+#define wxSashWindow_SetMaximumSizeY 367
+#define wxSashWindow_SetMinimumSizeX 368
+#define wxSashWindow_SetMinimumSizeY 369
+#define wxSashWindow_SetSashVisible 370
+#define wxSashLayoutWindow_new_0 371
+#define wxSashLayoutWindow_new_2 372
+#define wxSashLayoutWindow_Create 373
+#define wxSashLayoutWindow_GetAlignment 374
+#define wxSashLayoutWindow_GetOrientation 375
+#define wxSashLayoutWindow_SetAlignment 376
+#define wxSashLayoutWindow_SetDefaultSize 377
+#define wxSashLayoutWindow_SetOrientation 378
+#define wxSashLayoutWindow_destroy 379
+#define wxGrid_new_0 380
+#define wxGrid_new_3 381
+#define wxGrid_new_4 382
+#define wxGrid_destruct 383
+#define wxGrid_AppendCols 384
+#define wxGrid_AppendRows 385
+#define wxGrid_AutoSize 386
+#define wxGrid_AutoSizeColumn 387
+#define wxGrid_AutoSizeColumns 388
+#define wxGrid_AutoSizeRow 389
+#define wxGrid_AutoSizeRows 390
+#define wxGrid_BeginBatch 391
+#define wxGrid_BlockToDeviceRect 392
+#define wxGrid_CanDragColSize 393
+#define wxGrid_CanDragRowSize 394
+#define wxGrid_CanDragGridSize 395
+#define wxGrid_CanEnableCellControl 396
+#define wxGrid_CellToRect_2 397
+#define wxGrid_CellToRect_1 398
+#define wxGrid_ClearGrid 399
+#define wxGrid_ClearSelection 400
+#define wxGrid_CreateGrid 401
+#define wxGrid_DeleteCols 402
+#define wxGrid_DeleteRows 403
+#define wxGrid_DisableCellEditControl 404
+#define wxGrid_DisableDragColSize 405
+#define wxGrid_DisableDragGridSize 406
+#define wxGrid_DisableDragRowSize 407
+#define wxGrid_EnableCellEditControl 408
+#define wxGrid_EnableDragColSize 409
+#define wxGrid_EnableDragGridSize 410
+#define wxGrid_EnableDragRowSize 411
+#define wxGrid_EnableEditing 412
+#define wxGrid_EnableGridLines 413
+#define wxGrid_EndBatch 414
+#define wxGrid_Fit 415
+#define wxGrid_ForceRefresh 416
+#define wxGrid_GetBatchCount 417
+#define wxGrid_GetCellAlignment 418
+#define wxGrid_GetCellBackgroundColour 419
+#define wxGrid_GetCellEditor 420
+#define wxGrid_GetCellFont 421
+#define wxGrid_GetCellRenderer 422
+#define wxGrid_GetCellTextColour 423
+#define wxGrid_GetCellValue_2 424
+#define wxGrid_GetCellValue_1 425
+#define wxGrid_GetColLabelAlignment 426
+#define wxGrid_GetColLabelSize 427
+#define wxGrid_GetColLabelValue 428
+#define wxGrid_GetColMinimalAcceptableWidth 429
+#define wxGrid_GetDefaultCellAlignment 430
+#define wxGrid_GetDefaultCellBackgroundColour 431
+#define wxGrid_GetDefaultCellFont 432
+#define wxGrid_GetDefaultCellTextColour 433
+#define wxGrid_GetDefaultColLabelSize 434
+#define wxGrid_GetDefaultColSize 435
+#define wxGrid_GetDefaultEditor 436
+#define wxGrid_GetDefaultEditorForCell_2 437
+#define wxGrid_GetDefaultEditorForCell_1 438
+#define wxGrid_GetDefaultEditorForType 439
+#define wxGrid_GetDefaultRenderer 440
+#define wxGrid_GetDefaultRendererForCell 441
+#define wxGrid_GetDefaultRendererForType 442
+#define wxGrid_GetDefaultRowLabelSize 443
+#define wxGrid_GetDefaultRowSize 444
+#define wxGrid_GetGridCursorCol 445
+#define wxGrid_GetGridCursorRow 446
+#define wxGrid_GetGridLineColour 447
+#define wxGrid_GridLinesEnabled 448
+#define wxGrid_GetLabelBackgroundColour 449
+#define wxGrid_GetLabelFont 450
+#define wxGrid_GetLabelTextColour 451
+#define wxGrid_GetNumberCols 452
+#define wxGrid_GetNumberRows 453
+#define wxGrid_GetOrCreateCellAttr 454
+#define wxGrid_GetRowMinimalAcceptableHeight 455
+#define wxGrid_GetRowLabelAlignment 456
+#define wxGrid_GetRowLabelSize 457
+#define wxGrid_GetRowLabelValue 458
+#define wxGrid_GetRowSize 459
+#define wxGrid_GetScrollLineX 460
+#define wxGrid_GetScrollLineY 461
+#define wxGrid_GetSelectedCells 462
+#define wxGrid_GetSelectedCols 463
+#define wxGrid_GetSelectedRows 464
+#define wxGrid_GetSelectionBackground 465
+#define wxGrid_GetSelectionBlockTopLeft 466
+#define wxGrid_GetSelectionBlockBottomRight 467
+#define wxGrid_GetSelectionForeground 468
+#define wxGrid_GetViewWidth 469
+#define wxGrid_GetGridWindow 470
+#define wxGrid_GetGridRowLabelWindow 471
+#define wxGrid_GetGridColLabelWindow 472
+#define wxGrid_GetGridCornerLabelWindow 473
+#define wxGrid_HideCellEditControl 474
+#define wxGrid_InsertCols 475
+#define wxGrid_InsertRows 476
+#define wxGrid_IsCellEditControlEnabled 477
+#define wxGrid_IsCurrentCellReadOnly 478
+#define wxGrid_IsEditable 479
+#define wxGrid_IsInSelection_2 480
+#define wxGrid_IsInSelection_1 481
+#define wxGrid_IsReadOnly 482
+#define wxGrid_IsSelection 483
+#define wxGrid_IsVisible_3 484
+#define wxGrid_IsVisible_2 485
+#define wxGrid_MakeCellVisible_2 486
+#define wxGrid_MakeCellVisible_1 487
+#define wxGrid_MoveCursorDown 488
+#define wxGrid_MoveCursorLeft 489
+#define wxGrid_MoveCursorRight 490
+#define wxGrid_MoveCursorUp 491
+#define wxGrid_MoveCursorDownBlock 492
+#define wxGrid_MoveCursorLeftBlock 493
+#define wxGrid_MoveCursorRightBlock 494
+#define wxGrid_MoveCursorUpBlock 495
+#define wxGrid_MovePageDown 496
+#define wxGrid_MovePageUp 497
+#define wxGrid_RegisterDataType 498
+#define wxGrid_SaveEditControlValue 499
+#define wxGrid_SelectAll 500
+#define wxGrid_SelectBlock_5 501
+#define wxGrid_SelectBlock_3 502
+#define wxGrid_SelectCol 503
+#define wxGrid_SelectRow 504
+#define wxGrid_SetCellAlignment_4 505
+#define wxGrid_SetCellAlignment_3 506
+#define wxGrid_SetCellAlignment_1 507
+#define wxGrid_SetCellBackgroundColour_3_0 508
+#define wxGrid_SetCellBackgroundColour_1 509
+#define wxGrid_SetCellBackgroundColour_3_1 510
+#define wxGrid_SetCellEditor 511
+#define wxGrid_SetCellFont 512
+#define wxGrid_SetCellRenderer 513
+#define wxGrid_SetCellTextColour_3_0 514
+#define wxGrid_SetCellTextColour_3_1 515
+#define wxGrid_SetCellTextColour_1 516
+#define wxGrid_SetCellValue_3_0 517
+#define wxGrid_SetCellValue_2 518
+#define wxGrid_SetCellValue_3_1 519
+#define wxGrid_SetColAttr 520
+#define wxGrid_SetColFormatBool 521
+#define wxGrid_SetColFormatNumber 522
+#define wxGrid_SetColFormatFloat 523
+#define wxGrid_SetColFormatCustom 524
+#define wxGrid_SetColLabelAlignment 525
+#define wxGrid_SetColLabelSize 526
+#define wxGrid_SetColLabelValue 527
+#define wxGrid_SetColMinimalWidth 528
+#define wxGrid_SetColMinimalAcceptableWidth 529
+#define wxGrid_SetColSize 530
+#define wxGrid_SetDefaultCellAlignment 531
+#define wxGrid_SetDefaultCellBackgroundColour 532
+#define wxGrid_SetDefaultCellFont 533
+#define wxGrid_SetDefaultCellTextColour 534
+#define wxGrid_SetDefaultEditor 535
+#define wxGrid_SetDefaultRenderer 536
+#define wxGrid_SetDefaultColSize 537
+#define wxGrid_SetDefaultRowSize 538
+#define wxGrid_SetGridCursor 539
+#define wxGrid_SetGridLineColour 540
+#define wxGrid_SetLabelBackgroundColour 541
+#define wxGrid_SetLabelFont 542
+#define wxGrid_SetLabelTextColour 543
+#define wxGrid_SetMargins 544
+#define wxGrid_SetReadOnly 545
+#define wxGrid_SetRowAttr 546
+#define wxGrid_SetRowLabelAlignment 547
+#define wxGrid_SetRowLabelSize 548
+#define wxGrid_SetRowLabelValue 549
+#define wxGrid_SetRowMinimalHeight 550
+#define wxGrid_SetRowMinimalAcceptableHeight 551
+#define wxGrid_SetRowSize 552
+#define wxGrid_SetScrollLineX 553
+#define wxGrid_SetScrollLineY 554
+#define wxGrid_SetSelectionBackground 555
+#define wxGrid_SetSelectionForeground 556
+#define wxGrid_SetSelectionMode 557
+#define wxGrid_ShowCellEditControl 558
+#define wxGrid_XToCol 559
+#define wxGrid_XToEdgeOfCol 560
+#define wxGrid_YToEdgeOfRow 561
+#define wxGrid_YToRow 562
+#define wxGridCellRenderer_Draw 563
+#define wxGridCellRenderer_GetBestSize 564
+#define wxGridCellEditor_Create 565
+#define wxGridCellEditor_IsCreated 566
+#define wxGridCellEditor_SetSize 567
+#define wxGridCellEditor_Show 568
+#define wxGridCellEditor_PaintBackground 569
+#define wxGridCellEditor_BeginEdit 570
+#define wxGridCellEditor_EndEdit 571
+#define wxGridCellEditor_Reset 572
+#define wxGridCellEditor_StartingKey 573
+#define wxGridCellEditor_StartingClick 574
+#define wxGridCellEditor_HandleReturn 575
+#define wxGridCellBoolRenderer_new 576
+#define wxGridCellBoolRenderer_destroy 577
+#define wxGridCellBoolEditor_new 578
+#define wxGridCellBoolEditor_IsTrueValue 579
+#define wxGridCellBoolEditor_UseStringValues 580
+#define wxGridCellBoolEditor_destroy 581
+#define wxGridCellFloatRenderer_new 582
+#define wxGridCellFloatRenderer_GetPrecision 583
+#define wxGridCellFloatRenderer_GetWidth 584
+#define wxGridCellFloatRenderer_SetParameters 585
+#define wxGridCellFloatRenderer_SetPrecision 586
+#define wxGridCellFloatRenderer_SetWidth 587
+#define wxGridCellFloatRenderer_destroy 588
+#define wxGridCellFloatEditor_new 589
+#define wxGridCellFloatEditor_SetParameters 590
+#define wxGridCellFloatEditor_destroy 591
+#define wxGridCellStringRenderer_new 592
+#define wxGridCellStringRenderer_destroy 593
+#define wxGridCellTextEditor_new 594
+#define wxGridCellTextEditor_SetParameters 595
+#define wxGridCellTextEditor_destroy 596
+#define wxGridCellChoiceEditor_new 598
+#define wxGridCellChoiceEditor_SetParameters 599
+#define wxGridCellChoiceEditor_destroy 600
+#define wxGridCellNumberRenderer_new 601
+#define wxGridCellNumberRenderer_destroy 602
+#define wxGridCellNumberEditor_new 603
+#define wxGridCellNumberEditor_GetValue 604
+#define wxGridCellNumberEditor_SetParameters 605
+#define wxGridCellNumberEditor_destroy 606
+#define wxGridCellAttr_SetTextColour 607
+#define wxGridCellAttr_SetBackgroundColour 608
+#define wxGridCellAttr_SetFont 609
+#define wxGridCellAttr_SetAlignment 610
+#define wxGridCellAttr_SetReadOnly 611
+#define wxGridCellAttr_SetRenderer 612
+#define wxGridCellAttr_SetEditor 613
+#define wxGridCellAttr_HasTextColour 614
+#define wxGridCellAttr_HasBackgroundColour 615
+#define wxGridCellAttr_HasFont 616
+#define wxGridCellAttr_HasAlignment 617
+#define wxGridCellAttr_HasRenderer 618
+#define wxGridCellAttr_HasEditor 619
+#define wxGridCellAttr_GetTextColour 620
+#define wxGridCellAttr_GetBackgroundColour 621
+#define wxGridCellAttr_GetFont 622
+#define wxGridCellAttr_GetAlignment 623
+#define wxGridCellAttr_GetRenderer 624
+#define wxGridCellAttr_GetEditor 625
+#define wxGridCellAttr_IsReadOnly 626
+#define wxGridCellAttr_SetDefAttr 627
+#define wxDC_Blit 628
+#define wxDC_CalcBoundingBox 629
+#define wxDC_Clear 630
+#define wxDC_ComputeScaleAndOrigin 631
+#define wxDC_CrossHair 632
+#define wxDC_DestroyClippingRegion 633
+#define wxDC_DeviceToLogicalX 634
+#define wxDC_DeviceToLogicalXRel 635
+#define wxDC_DeviceToLogicalY 636
+#define wxDC_DeviceToLogicalYRel 637
+#define wxDC_DrawArc 638
+#define wxDC_DrawBitmap 639
+#define wxDC_DrawCheckMark 640
+#define wxDC_DrawCircle 641
+#define wxDC_DrawEllipse_2 643
+#define wxDC_DrawEllipse_1 644
+#define wxDC_DrawEllipticArc 645
+#define wxDC_DrawIcon 646
+#define wxDC_DrawLabel 647
+#define wxDC_DrawLine 648
+#define wxDC_DrawLines 649
+#define wxDC_DrawPolygon 651
+#define wxDC_DrawPoint 653
+#define wxDC_DrawRectangle_2 655
+#define wxDC_DrawRectangle_1 656
+#define wxDC_DrawRotatedText 657
+#define wxDC_DrawRoundedRectangle_3 659
+#define wxDC_DrawRoundedRectangle_2 660
+#define wxDC_DrawText 661
+#define wxDC_EndDoc 662
+#define wxDC_EndPage 663
+#define wxDC_FloodFill 664
+#define wxDC_GetBackground 665
+#define wxDC_GetBackgroundMode 666
+#define wxDC_GetBrush 667
+#define wxDC_GetCharHeight 668
+#define wxDC_GetCharWidth 669
+#define wxDC_GetClippingBox 670
+#define wxDC_GetFont 672
+#define wxDC_GetLayoutDirection 673
+#define wxDC_GetLogicalFunction 674
+#define wxDC_GetMapMode 675
+#define wxDC_GetMultiLineTextExtent_4 676
+#define wxDC_GetMultiLineTextExtent_1 677
+#define wxDC_GetPartialTextExtents 678
+#define wxDC_GetPen 679
+#define wxDC_GetPixel 680
+#define wxDC_GetPPI 681
+#define wxDC_GetSize 683
+#define wxDC_GetSizeMM 685
+#define wxDC_GetTextBackground 686
+#define wxDC_GetTextExtent_4 687
+#define wxDC_GetTextExtent_1 688
+#define wxDC_GetTextForeground 690
+#define wxDC_GetUserScale 691
+#define wxDC_GradientFillConcentric_3 692
+#define wxDC_GradientFillConcentric_4 693
+#define wxDC_GradientFillLinear 694
+#define wxDC_LogicalToDeviceX 695
+#define wxDC_LogicalToDeviceXRel 696
+#define wxDC_LogicalToDeviceY 697
+#define wxDC_LogicalToDeviceYRel 698
+#define wxDC_MaxX 699
+#define wxDC_MaxY 700
+#define wxDC_MinX 701
+#define wxDC_MinY 702
+#define wxDC_IsOk 703
+#define wxDC_ResetBoundingBox 704
+#define wxDC_SetAxisOrientation 705
+#define wxDC_SetBackground 706
+#define wxDC_SetBackgroundMode 707
+#define wxDC_SetBrush 708
+#define wxDC_SetClippingRegion_2 710
+#define wxDC_SetClippingRegion_1_1 711
+#define wxDC_SetClippingRegion_1_0 712
+#define wxDC_SetDeviceOrigin 713
+#define wxDC_SetFont 714
+#define wxDC_SetLayoutDirection 715
+#define wxDC_SetLogicalFunction 716
+#define wxDC_SetMapMode 717
+#define wxDC_SetPalette 718
+#define wxDC_SetPen 719
+#define wxDC_SetTextBackground 720
+#define wxDC_SetTextForeground 721
+#define wxDC_SetUserScale 722
+#define wxDC_StartDoc 723
+#define wxDC_StartPage 724
+#define wxMirrorDC_new 725
+#define wxMirrorDC_destroy 726
+#define wxScreenDC_new 727
+#define wxScreenDC_destruct 728
+#define wxPostScriptDC_new_0 729
+#define wxPostScriptDC_new_1 730
+#define wxPostScriptDC_destruct 731
+#define wxPostScriptDC_SetResolution 732
+#define wxPostScriptDC_GetResolution 733
+#define wxWindowDC_new_0 734
+#define wxWindowDC_new_1 735
+#define wxWindowDC_destruct 736
+#define wxClientDC_new_0 737
+#define wxClientDC_new_1 738
+#define wxClientDC_destroy 739
+#define wxPaintDC_new_0 740
+#define wxPaintDC_new_1 741
+#define wxPaintDC_destroy 742
+#define wxMemoryDC_new_1_0 744
+#define wxMemoryDC_new_1_1 745
+#define wxMemoryDC_new_0 746
+#define wxMemoryDC_destruct 748
+#define wxMemoryDC_SelectObject 749
+#define wxMemoryDC_SelectObjectAsSource 750
+#define wxBufferedDC_new_0 751
+#define wxBufferedDC_new_2 752
+#define wxBufferedDC_new_3 753
+#define wxBufferedDC_destruct 754
+#define wxBufferedDC_Init_2 755
+#define wxBufferedDC_Init_3 756
+#define wxBufferedPaintDC_new_3 757
+#define wxBufferedPaintDC_new_2 758
+#define wxBufferedPaintDC_destruct 759
+#define wxGraphicsObject_destruct 760
+#define wxGraphicsObject_GetRenderer 761
+#define wxGraphicsObject_IsNull 762
+#define wxGraphicsContext_destruct 763
+#define wxGraphicsContext_Create_1_1 764
+#define wxGraphicsContext_Create_1_0 765
+#define wxGraphicsContext_Create_0 766
+#define wxGraphicsContext_CreatePen 767
+#define wxGraphicsContext_CreateBrush 768
+#define wxGraphicsContext_CreateRadialGradientBrush 769
+#define wxGraphicsContext_CreateLinearGradientBrush 770
+#define wxGraphicsContext_CreateFont 771
+#define wxGraphicsContext_CreateMatrix 772
+#define wxGraphicsContext_CreatePath 773
+#define wxGraphicsContext_Clip_1 774
+#define wxGraphicsContext_Clip_4 775
+#define wxGraphicsContext_ResetClip 776
+#define wxGraphicsContext_DrawBitmap 777
+#define wxGraphicsContext_DrawEllipse 778
+#define wxGraphicsContext_DrawIcon 779
+#define wxGraphicsContext_DrawLines 780
+#define wxGraphicsContext_DrawPath 781
+#define wxGraphicsContext_DrawRectangle 782
+#define wxGraphicsContext_DrawRoundedRectangle 783
+#define wxGraphicsContext_DrawText_3 784
+#define wxGraphicsContext_DrawText_4_0 785
+#define wxGraphicsContext_DrawText_4_1 786
+#define wxGraphicsContext_DrawText_5 787
+#define wxGraphicsContext_FillPath 788
+#define wxGraphicsContext_StrokePath 789
+#define wxGraphicsContext_GetPartialTextExtents 790
+#define wxGraphicsContext_GetTextExtent 791
+#define wxGraphicsContext_Rotate 792
+#define wxGraphicsContext_Scale 793
+#define wxGraphicsContext_Translate 794
+#define wxGraphicsContext_GetTransform 795
+#define wxGraphicsContext_SetTransform 796
+#define wxGraphicsContext_ConcatTransform 797
+#define wxGraphicsContext_SetBrush_1_1 798
+#define wxGraphicsContext_SetBrush_1_0 799
+#define wxGraphicsContext_SetFont_1 800
+#define wxGraphicsContext_SetFont_2 801
+#define wxGraphicsContext_SetPen_1_0 802
+#define wxGraphicsContext_SetPen_1_1 803
+#define wxGraphicsContext_StrokeLine 804
+#define wxGraphicsContext_StrokeLines 805
+#define wxGraphicsMatrix_Concat 807
+#define wxGraphicsMatrix_Get 809
+#define wxGraphicsMatrix_Invert 810
+#define wxGraphicsMatrix_IsEqual 811
+#define wxGraphicsMatrix_IsIdentity 813
+#define wxGraphicsMatrix_Rotate 814
+#define wxGraphicsMatrix_Scale 815
+#define wxGraphicsMatrix_Translate 816
+#define wxGraphicsMatrix_Set 817
+#define wxGraphicsMatrix_TransformPoint 818
+#define wxGraphicsMatrix_TransformDistance 819
+#define wxGraphicsPath_MoveToPoint_2 820
+#define wxGraphicsPath_MoveToPoint_1 821
+#define wxGraphicsPath_AddArc_6 822
+#define wxGraphicsPath_AddArc_5 823
+#define wxGraphicsPath_AddArcToPoint 824
+#define wxGraphicsPath_AddCircle 825
+#define wxGraphicsPath_AddCurveToPoint_6 826
+#define wxGraphicsPath_AddCurveToPoint_3 827
+#define wxGraphicsPath_AddEllipse 828
+#define wxGraphicsPath_AddLineToPoint_2 829
+#define wxGraphicsPath_AddLineToPoint_1 830
+#define wxGraphicsPath_AddPath 831
+#define wxGraphicsPath_AddQuadCurveToPoint 832
+#define wxGraphicsPath_AddRectangle 833
+#define wxGraphicsPath_AddRoundedRectangle 834
+#define wxGraphicsPath_CloseSubpath 835
+#define wxGraphicsPath_Contains_3 836
+#define wxGraphicsPath_Contains_2 837
+#define wxGraphicsPath_GetBox 839
+#define wxGraphicsPath_GetCurrentPoint 841
+#define wxGraphicsPath_Transform 842
+#define wxGraphicsRenderer_GetDefaultRenderer 843
+#define wxGraphicsRenderer_CreateContext_1_1 844
+#define wxGraphicsRenderer_CreateContext_1_0 845
+#define wxGraphicsRenderer_CreatePen 846
+#define wxGraphicsRenderer_CreateBrush 847
+#define wxGraphicsRenderer_CreateLinearGradientBrush 848
+#define wxGraphicsRenderer_CreateRadialGradientBrush 849
+#define wxGraphicsRenderer_CreateFont 850
+#define wxGraphicsRenderer_CreateMatrix 851
+#define wxGraphicsRenderer_CreatePath 852
+#define wxMenuBar_new_1 854
+#define wxMenuBar_new_0 856
+#define wxMenuBar_destruct 858
+#define wxMenuBar_Append 859
+#define wxMenuBar_Check 860
+#define wxMenuBar_Enable_2 861
+#define wxMenuBar_Enable_1 862
+#define wxMenuBar_EnableTop 863
+#define wxMenuBar_FindMenu 864
+#define wxMenuBar_FindMenuItem 865
+#define wxMenuBar_FindItem 866
+#define wxMenuBar_GetHelpString 867
+#define wxMenuBar_GetLabel_1 868
+#define wxMenuBar_GetLabel_0 869
+#define wxMenuBar_GetLabelTop 870
+#define wxMenuBar_GetMenu 871
+#define wxMenuBar_GetMenuCount 872
+#define wxMenuBar_Insert 873
+#define wxMenuBar_IsChecked 874
+#define wxMenuBar_IsEnabled_1 875
+#define wxMenuBar_IsEnabled_0 876
+#define wxMenuBar_Remove 877
+#define wxMenuBar_Replace 878
+#define wxMenuBar_SetHelpString 879
+#define wxMenuBar_SetLabel_2 880
+#define wxMenuBar_SetLabel_1 881
+#define wxMenuBar_SetLabelTop 882
+#define wxControl_GetLabel 883
+#define wxControl_SetLabel 884
+#define wxControlWithItems_Append_1 885
+#define wxControlWithItems_Append_2 886
+#define wxControlWithItems_appendStrings_1 887
+#define wxControlWithItems_Clear 888
+#define wxControlWithItems_Delete 889
+#define wxControlWithItems_FindString 890
+#define wxControlWithItems_getClientData 891
+#define wxControlWithItems_setClientData 892
+#define wxControlWithItems_GetCount 893
+#define wxControlWithItems_GetSelection 894
+#define wxControlWithItems_GetString 895
+#define wxControlWithItems_GetStringSelection 896
+#define wxControlWithItems_Insert_2 897
+#define wxControlWithItems_Insert_3 898
+#define wxControlWithItems_IsEmpty 899
+#define wxControlWithItems_Select 900
+#define wxControlWithItems_SetSelection 901
+#define wxControlWithItems_SetString 902
+#define wxControlWithItems_SetStringSelection 903
+#define wxMenu_new_2 906
+#define wxMenu_new_1 907
+#define wxMenu_destruct 909
+#define wxMenu_Append_3 910
+#define wxMenu_Append_1 911
+#define wxMenu_Append_4_0 912
+#define wxMenu_Append_4_1 913
+#define wxMenu_AppendCheckItem 914
+#define wxMenu_AppendRadioItem 915
+#define wxMenu_AppendSeparator 916
+#define wxMenu_Break 917
+#define wxMenu_Check 918
+#define wxMenu_Delete_1_0 919
+#define wxMenu_Delete_1_1 920
+#define wxMenu_Destroy_1_0 921
+#define wxMenu_Destroy_1_1 922
+#define wxMenu_Enable 923
+#define wxMenu_FindItem_1 924
+#define wxMenu_FindItem_2 925
+#define wxMenu_FindItemByPosition 926
+#define wxMenu_GetHelpString 927
+#define wxMenu_GetLabel 928
+#define wxMenu_GetMenuItemCount 929
+#define wxMenu_GetMenuItems 930
+#define wxMenu_GetTitle 932
+#define wxMenu_Insert_2 933
+#define wxMenu_Insert_3 934
+#define wxMenu_Insert_5_1 935
+#define wxMenu_Insert_5_0 936
+#define wxMenu_InsertCheckItem 937
+#define wxMenu_InsertRadioItem 938
+#define wxMenu_InsertSeparator 939
+#define wxMenu_IsChecked 940
+#define wxMenu_IsEnabled 941
+#define wxMenu_Prepend_1 942
+#define wxMenu_Prepend_2 943
+#define wxMenu_Prepend_4_1 944
+#define wxMenu_Prepend_4_0 945
+#define wxMenu_PrependCheckItem 946
+#define wxMenu_PrependRadioItem 947
+#define wxMenu_PrependSeparator 948
+#define wxMenu_Remove_1_0 949
+#define wxMenu_Remove_1_1 950
+#define wxMenu_SetHelpString 951
+#define wxMenu_SetLabel 952
+#define wxMenu_SetTitle 953
+#define wxMenuItem_new 954
+#define wxMenuItem_destruct 956
+#define wxMenuItem_Check 957
+#define wxMenuItem_Enable 958
+#define wxMenuItem_GetBitmap 959
+#define wxMenuItem_GetHelp 960
+#define wxMenuItem_GetId 961
+#define wxMenuItem_GetKind 962
+#define wxMenuItem_GetLabel 963
+#define wxMenuItem_GetLabelFromText 964
+#define wxMenuItem_GetMenu 965
+#define wxMenuItem_GetText 966
+#define wxMenuItem_GetSubMenu 967
+#define wxMenuItem_IsCheckable 968
+#define wxMenuItem_IsChecked 969
+#define wxMenuItem_IsEnabled 970
+#define wxMenuItem_IsSeparator 971
+#define wxMenuItem_IsSubMenu 972
+#define wxMenuItem_SetBitmap 973
+#define wxMenuItem_SetHelp 974
+#define wxMenuItem_SetMenu 975
+#define wxMenuItem_SetSubMenu 976
+#define wxMenuItem_SetText 977
+#define wxToolBar_AddControl 978
+#define wxToolBar_AddSeparator 979
+#define wxToolBar_AddTool_5 980
+#define wxToolBar_AddTool_4_0 981
+#define wxToolBar_AddTool_1 982
+#define wxToolBar_AddTool_4_1 983
+#define wxToolBar_AddTool_3 984
+#define wxToolBar_AddTool_6 985
+#define wxToolBar_AddCheckTool 986
+#define wxToolBar_AddRadioTool 987
+#define wxToolBar_AddStretchableSpace 988
+#define wxToolBar_InsertStretchableSpace 989
+#define wxToolBar_DeleteTool 990
+#define wxToolBar_DeleteToolByPos 991
+#define wxToolBar_EnableTool 992
+#define wxToolBar_FindById 993
+#define wxToolBar_FindControl 994
+#define wxToolBar_FindToolForPosition 995
+#define wxToolBar_GetToolSize 996
+#define wxToolBar_GetToolBitmapSize 997
+#define wxToolBar_GetMargins 998
+#define wxToolBar_GetToolEnabled 999
+#define wxToolBar_GetToolLongHelp 1000
+#define wxToolBar_GetToolPacking 1001
+#define wxToolBar_GetToolPos 1002
+#define wxToolBar_GetToolSeparation 1003
+#define wxToolBar_GetToolShortHelp 1004
+#define wxToolBar_GetToolState 1005
+#define wxToolBar_InsertControl 1006
+#define wxToolBar_InsertSeparator 1007
+#define wxToolBar_InsertTool_5 1008
+#define wxToolBar_InsertTool_2 1009
+#define wxToolBar_InsertTool_4 1010
+#define wxToolBar_Realize 1011
+#define wxToolBar_RemoveTool 1012
+#define wxToolBar_SetMargins 1013
+#define wxToolBar_SetToolBitmapSize 1014
+#define wxToolBar_SetToolLongHelp 1015
+#define wxToolBar_SetToolPacking 1016
+#define wxToolBar_SetToolShortHelp 1017
+#define wxToolBar_SetToolSeparation 1018
+#define wxToolBar_ToggleTool 1019
+#define wxStatusBar_new_0 1021
+#define wxStatusBar_new_2 1022
+#define wxStatusBar_destruct 1024
+#define wxStatusBar_Create 1025
+#define wxStatusBar_GetFieldRect 1026
+#define wxStatusBar_GetFieldsCount 1027
+#define wxStatusBar_GetStatusText 1028
+#define wxStatusBar_PopStatusText 1029
+#define wxStatusBar_PushStatusText 1030
+#define wxStatusBar_SetFieldsCount 1031
+#define wxStatusBar_SetMinHeight 1032
+#define wxStatusBar_SetStatusText 1033
+#define wxStatusBar_SetStatusWidths 1034
+#define wxStatusBar_SetStatusStyles 1035
+#define wxBitmap_new_0 1036
+#define wxBitmap_new_3 1037
+#define wxBitmap_new_4 1038
+#define wxBitmap_new_2_0 1039
+#define wxBitmap_new_2_1 1040
+#define wxBitmap_destruct 1041
+#define wxBitmap_ConvertToImage 1042
+#define wxBitmap_CopyFromIcon 1043
+#define wxBitmap_Create 1044
+#define wxBitmap_GetDepth 1045
+#define wxBitmap_GetHeight 1046
+#define wxBitmap_GetPalette 1047
+#define wxBitmap_GetMask 1048
+#define wxBitmap_GetWidth 1049
+#define wxBitmap_GetSubBitmap 1050
+#define wxBitmap_LoadFile 1051
+#define wxBitmap_Ok 1052
+#define wxBitmap_SaveFile 1053
+#define wxBitmap_SetDepth 1054
+#define wxBitmap_SetHeight 1055
+#define wxBitmap_SetMask 1056
+#define wxBitmap_SetPalette 1057
+#define wxBitmap_SetWidth 1058
+#define wxIcon_new_0 1059
+#define wxIcon_new_2 1060
+#define wxIcon_new_1 1061
+#define wxIcon_CopyFromBitmap 1062
+#define wxIcon_destroy 1063
+#define wxIconBundle_new_0 1064
+#define wxIconBundle_new_2 1065
+#define wxIconBundle_new_1_0 1066
+#define wxIconBundle_new_1_1 1067
+#define wxIconBundle_destruct 1068
+#define wxIconBundle_AddIcon_2 1069
+#define wxIconBundle_AddIcon_1 1070
+#define wxIconBundle_GetIcon_1_1 1071
+#define wxIconBundle_GetIcon_1_0 1072
+#define wxCursor_new_0 1073
+#define wxCursor_new_1_0 1074
+#define wxCursor_new_1_1 1075
+#define wxCursor_new_4 1076
+#define wxCursor_destruct 1077
+#define wxCursor_Ok 1078
+#define wxMask_new_0 1079
+#define wxMask_new_2_1 1080
+#define wxMask_new_2_0 1081
+#define wxMask_new_1 1082
+#define wxMask_destruct 1083
+#define wxMask_Create_2_1 1084
+#define wxMask_Create_2_0 1085
+#define wxMask_Create_1 1086
+#define wxImage_new_0 1087
+#define wxImage_new_3_0 1088
+#define wxImage_new_4 1089
+#define wxImage_new_5 1090
+#define wxImage_new_2 1091
+#define wxImage_new_3_1 1092
+#define wxImage_Blur 1093
+#define wxImage_BlurHorizontal 1094
+#define wxImage_BlurVertical 1095
+#define wxImage_ConvertAlphaToMask 1096
+#define wxImage_ConvertToGreyscale 1097
+#define wxImage_ConvertToMono 1098
+#define wxImage_Copy 1099
+#define wxImage_Create_3 1100
+#define wxImage_Create_4 1101
+#define wxImage_Create_5 1102
+#define wxImage_Destroy 1103
+#define wxImage_FindFirstUnusedColour 1104
+#define wxImage_GetImageExtWildcard 1105
+#define wxImage_GetAlpha_2 1106
+#define wxImage_GetAlpha_0 1107
+#define wxImage_GetBlue 1108
+#define wxImage_GetData 1109
+#define wxImage_GetGreen 1110
+#define wxImage_GetImageCount 1111
+#define wxImage_GetHeight 1112
+#define wxImage_GetMaskBlue 1113
+#define wxImage_GetMaskGreen 1114
+#define wxImage_GetMaskRed 1115
+#define wxImage_GetOrFindMaskColour 1116
+#define wxImage_GetPalette 1117
+#define wxImage_GetRed 1118
+#define wxImage_GetSubImage 1119
+#define wxImage_GetWidth 1120
+#define wxImage_HasAlpha 1121
+#define wxImage_HasMask 1122
+#define wxImage_GetOption 1123
+#define wxImage_GetOptionInt 1124
+#define wxImage_HasOption 1125
+#define wxImage_InitAlpha 1126
+#define wxImage_InitStandardHandlers 1127
+#define wxImage_IsTransparent 1128
+#define wxImage_LoadFile_2 1129
+#define wxImage_LoadFile_3 1130
+#define wxImage_Ok 1131
+#define wxImage_RemoveHandler 1132
+#define wxImage_Mirror 1133
+#define wxImage_Replace 1134
+#define wxImage_Rescale 1135
+#define wxImage_Resize 1136
+#define wxImage_Rotate 1137
+#define wxImage_RotateHue 1138
+#define wxImage_Rotate90 1139
+#define wxImage_SaveFile_1 1140
+#define wxImage_SaveFile_2_0 1141
+#define wxImage_SaveFile_2_1 1142
+#define wxImage_Scale 1143
+#define wxImage_Size 1144
+#define wxImage_SetAlpha_3 1145
+#define wxImage_SetAlpha_2 1146
+#define wxImage_SetData_2 1147
+#define wxImage_SetData_4 1148
+#define wxImage_SetMask 1149
+#define wxImage_SetMaskColour 1150
+#define wxImage_SetMaskFromImage 1151
+#define wxImage_SetOption_2_1 1152
+#define wxImage_SetOption_2_0 1153
+#define wxImage_SetPalette 1154
+#define wxImage_SetRGB_5 1155
+#define wxImage_SetRGB_4 1156
+#define wxImage_destroy 1157
+#define wxBrush_new_0 1158
+#define wxBrush_new_2 1159
+#define wxBrush_new_1 1160
+#define wxBrush_destruct 1162
+#define wxBrush_GetColour 1163
+#define wxBrush_GetStipple 1164
+#define wxBrush_GetStyle 1165
+#define wxBrush_IsHatch 1166
+#define wxBrush_IsOk 1167
+#define wxBrush_SetColour_1 1168
+#define wxBrush_SetColour_3 1169
+#define wxBrush_SetStipple 1170
+#define wxBrush_SetStyle 1171
+#define wxPen_new_0 1172
+#define wxPen_new_2 1173
+#define wxPen_destruct 1174
+#define wxPen_GetCap 1175
+#define wxPen_GetColour 1176
+#define wxPen_GetJoin 1177
+#define wxPen_GetStyle 1178
+#define wxPen_GetWidth 1179
+#define wxPen_IsOk 1180
+#define wxPen_SetCap 1181
+#define wxPen_SetColour_1 1182
+#define wxPen_SetColour_3 1183
+#define wxPen_SetJoin 1184
+#define wxPen_SetStyle 1185
+#define wxPen_SetWidth 1186
+#define wxRegion_new_0 1187
+#define wxRegion_new_4 1188
+#define wxRegion_new_2 1189
+#define wxRegion_new_1_1 1190
+#define wxRegion_new_1_0 1192
+#define wxRegion_destruct 1194
+#define wxRegion_Clear 1195
+#define wxRegion_Contains_2 1196
+#define wxRegion_Contains_1_0 1197
+#define wxRegion_Contains_4 1198
+#define wxRegion_Contains_1_1 1199
+#define wxRegion_ConvertToBitmap 1200
+#define wxRegion_GetBox 1201
+#define wxRegion_Intersect_4 1202
+#define wxRegion_Intersect_1_1 1203
+#define wxRegion_Intersect_1_0 1204
+#define wxRegion_IsEmpty 1205
+#define wxRegion_Subtract_4 1206
+#define wxRegion_Subtract_1_1 1207
+#define wxRegion_Subtract_1_0 1208
+#define wxRegion_Offset_2 1209
+#define wxRegion_Offset_1 1210
+#define wxRegion_Union_4 1211
+#define wxRegion_Union_1_2 1212
+#define wxRegion_Union_1_1 1213
+#define wxRegion_Union_1_0 1214
+#define wxRegion_Union_3 1215
+#define wxRegion_Xor_4 1216
+#define wxRegion_Xor_1_1 1217
+#define wxRegion_Xor_1_0 1218
+#define wxAcceleratorTable_new_0 1219
+#define wxAcceleratorTable_new_2 1220
+#define wxAcceleratorTable_destruct 1221
+#define wxAcceleratorTable_Ok 1222
+#define wxAcceleratorEntry_new_1_0 1223
+#define wxAcceleratorEntry_new_1_1 1224
+#define wxAcceleratorEntry_GetCommand 1225
+#define wxAcceleratorEntry_GetFlags 1226
+#define wxAcceleratorEntry_GetKeyCode 1227
+#define wxAcceleratorEntry_Set 1228
+#define wxAcceleratorEntry_destroy 1229
+#define wxCaret_new_3 1234
+#define wxCaret_new_2 1235
+#define wxCaret_destruct 1237
+#define wxCaret_Create_3 1238
+#define wxCaret_Create_2 1239
+#define wxCaret_GetBlinkTime 1240
+#define wxCaret_GetPosition 1242
+#define wxCaret_GetSize 1244
+#define wxCaret_GetWindow 1245
+#define wxCaret_Hide 1246
+#define wxCaret_IsOk 1247
+#define wxCaret_IsVisible 1248
+#define wxCaret_Move_2 1249
+#define wxCaret_Move_1 1250
+#define wxCaret_SetBlinkTime 1251
+#define wxCaret_SetSize_2 1252
+#define wxCaret_SetSize_1 1253
+#define wxCaret_Show 1254
+#define wxSizer_Add_2_1 1255
+#define wxSizer_Add_2_0 1256
+#define wxSizer_Add_3 1257
+#define wxSizer_Add_2_3 1258
+#define wxSizer_Add_2_2 1259
+#define wxSizer_AddSpacer 1260
+#define wxSizer_AddStretchSpacer 1261
+#define wxSizer_CalcMin 1262
+#define wxSizer_Clear 1263
+#define wxSizer_Detach_1_2 1264
+#define wxSizer_Detach_1_1 1265
+#define wxSizer_Detach_1_0 1266
+#define wxSizer_Fit 1267
+#define wxSizer_FitInside 1268
+#define wxSizer_GetChildren 1269
+#define wxSizer_GetItem_2_1 1270
+#define wxSizer_GetItem_2_0 1271
+#define wxSizer_GetItem_1 1272
+#define wxSizer_GetSize 1273
+#define wxSizer_GetPosition 1274
+#define wxSizer_GetMinSize 1275
+#define wxSizer_Hide_2_0 1276
+#define wxSizer_Hide_2_1 1277
+#define wxSizer_Hide_1 1278
+#define wxSizer_Insert_3_1 1279
+#define wxSizer_Insert_3_0 1280
+#define wxSizer_Insert_4 1281
+#define wxSizer_Insert_3_3 1282
+#define wxSizer_Insert_3_2 1283
+#define wxSizer_Insert_2 1284
+#define wxSizer_InsertSpacer 1285
+#define wxSizer_InsertStretchSpacer 1286
+#define wxSizer_IsShown_1_2 1287
+#define wxSizer_IsShown_1_1 1288
+#define wxSizer_IsShown_1_0 1289
+#define wxSizer_Layout 1290
+#define wxSizer_Prepend_2_1 1291
+#define wxSizer_Prepend_2_0 1292
+#define wxSizer_Prepend_3 1293
+#define wxSizer_Prepend_2_3 1294
+#define wxSizer_Prepend_2_2 1295
+#define wxSizer_Prepend_1 1296
+#define wxSizer_PrependSpacer 1297
+#define wxSizer_PrependStretchSpacer 1298
+#define wxSizer_RecalcSizes 1299
+#define wxSizer_Remove_1_1 1300
+#define wxSizer_Remove_1_0 1301
+#define wxSizer_Replace_3_1 1302
+#define wxSizer_Replace_3_0 1303
+#define wxSizer_Replace_2 1304
+#define wxSizer_SetDimension 1305
+#define wxSizer_SetMinSize_2 1306
+#define wxSizer_SetMinSize_1 1307
+#define wxSizer_SetItemMinSize_3_2 1308
+#define wxSizer_SetItemMinSize_2_2 1309
+#define wxSizer_SetItemMinSize_3_1 1310
+#define wxSizer_SetItemMinSize_2_1 1311
+#define wxSizer_SetItemMinSize_3_0 1312
+#define wxSizer_SetItemMinSize_2_0 1313
+#define wxSizer_SetSizeHints 1314
+#define wxSizer_SetVirtualSizeHints 1315
+#define wxSizer_Show_2_2 1316
+#define wxSizer_Show_2_1 1317
+#define wxSizer_Show_2_0 1318
+#define wxSizer_Show_1 1319
+#define wxSizerFlags_new 1320
+#define wxSizerFlags_Align 1321
+#define wxSizerFlags_Border_2 1322
+#define wxSizerFlags_Border_1 1323
+#define wxSizerFlags_Center 1324
+#define wxSizerFlags_Centre 1325
+#define wxSizerFlags_Expand 1326
+#define wxSizerFlags_Left 1327
+#define wxSizerFlags_Proportion 1328
+#define wxSizerFlags_Right 1329
+#define wxSizerFlags_destroy 1330
+#define wxSizerItem_new_5_1 1331
+#define wxSizerItem_new_2_1 1332
+#define wxSizerItem_new_5_0 1333
+#define wxSizerItem_new_2_0 1334
+#define wxSizerItem_new_6 1335
+#define wxSizerItem_new_3 1336
+#define wxSizerItem_new_0 1337
+#define wxSizerItem_destruct 1338
+#define wxSizerItem_CalcMin 1339
+#define wxSizerItem_DeleteWindows 1340
+#define wxSizerItem_DetachSizer 1341
+#define wxSizerItem_GetBorder 1342
+#define wxSizerItem_GetFlag 1343
+#define wxSizerItem_GetMinSize 1344
+#define wxSizerItem_GetPosition 1345
+#define wxSizerItem_GetProportion 1346
+#define wxSizerItem_GetRatio 1347
+#define wxSizerItem_GetRect 1348
+#define wxSizerItem_GetSize 1349
+#define wxSizerItem_GetSizer 1350
+#define wxSizerItem_GetSpacer 1351
+#define wxSizerItem_GetUserData 1352
+#define wxSizerItem_GetWindow 1353
+#define wxSizerItem_IsSizer 1354
+#define wxSizerItem_IsShown 1355
+#define wxSizerItem_IsSpacer 1356
+#define wxSizerItem_IsWindow 1357
+#define wxSizerItem_SetBorder 1358
+#define wxSizerItem_SetDimension 1359
+#define wxSizerItem_SetFlag 1360
+#define wxSizerItem_SetInitSize 1361
+#define wxSizerItem_SetMinSize_1 1362
+#define wxSizerItem_SetMinSize_2 1363
+#define wxSizerItem_SetProportion 1364
+#define wxSizerItem_SetRatio_2 1365
+#define wxSizerItem_SetRatio_1_1 1366
+#define wxSizerItem_SetRatio_1_0 1367
+#define wxSizerItem_SetSizer 1368
+#define wxSizerItem_SetSpacer_1 1369
+#define wxSizerItem_SetSpacer_2 1370
+#define wxSizerItem_SetWindow 1371
+#define wxSizerItem_Show 1372
+#define wxBoxSizer_new 1373
+#define wxBoxSizer_GetOrientation 1374
+#define wxBoxSizer_destroy 1375
+#define wxStaticBoxSizer_new_2 1376
+#define wxStaticBoxSizer_new_3 1377
+#define wxStaticBoxSizer_GetStaticBox 1378
+#define wxStaticBoxSizer_destroy 1379
+#define wxGridSizer_new_4 1380
+#define wxGridSizer_new_2 1381
+#define wxGridSizer_GetCols 1382
+#define wxGridSizer_GetHGap 1383
+#define wxGridSizer_GetRows 1384
+#define wxGridSizer_GetVGap 1385
+#define wxGridSizer_SetCols 1386
+#define wxGridSizer_SetHGap 1387
+#define wxGridSizer_SetRows 1388
+#define wxGridSizer_SetVGap 1389
+#define wxGridSizer_destroy 1390
+#define wxFlexGridSizer_new_4 1391
+#define wxFlexGridSizer_new_2 1392
+#define wxFlexGridSizer_AddGrowableCol 1393
+#define wxFlexGridSizer_AddGrowableRow 1394
+#define wxFlexGridSizer_GetFlexibleDirection 1395
+#define wxFlexGridSizer_GetNonFlexibleGrowMode 1396
+#define wxFlexGridSizer_RemoveGrowableCol 1397
+#define wxFlexGridSizer_RemoveGrowableRow 1398
+#define wxFlexGridSizer_SetFlexibleDirection 1399
+#define wxFlexGridSizer_SetNonFlexibleGrowMode 1400
+#define wxFlexGridSizer_destroy 1401
+#define wxGridBagSizer_new 1402
+#define wxGridBagSizer_Add_3_2 1403
+#define wxGridBagSizer_Add_3_1 1404
+#define wxGridBagSizer_Add_4 1405
+#define wxGridBagSizer_Add_1_0 1406
+#define wxGridBagSizer_Add_2_1 1407
+#define wxGridBagSizer_Add_2_0 1408
+#define wxGridBagSizer_Add_3_0 1409
+#define wxGridBagSizer_Add_1_1 1410
+#define wxGridBagSizer_CalcMin 1411
+#define wxGridBagSizer_CheckForIntersection_2 1412
+#define wxGridBagSizer_CheckForIntersection_3 1413
+#define wxGridBagSizer_FindItem_1_1 1414
+#define wxGridBagSizer_FindItem_1_0 1415
+#define wxGridBagSizer_FindItemAtPoint 1416
+#define wxGridBagSizer_FindItemAtPosition 1417
+#define wxGridBagSizer_FindItemWithData 1418
+#define wxGridBagSizer_GetCellSize 1419
+#define wxGridBagSizer_GetEmptyCellSize 1420
+#define wxGridBagSizer_GetItemPosition_1_2 1421
+#define wxGridBagSizer_GetItemPosition_1_1 1422
+#define wxGridBagSizer_GetItemPosition_1_0 1423
+#define wxGridBagSizer_GetItemSpan_1_2 1424
+#define wxGridBagSizer_GetItemSpan_1_1 1425
+#define wxGridBagSizer_GetItemSpan_1_0 1426
+#define wxGridBagSizer_SetEmptyCellSize 1427
+#define wxGridBagSizer_SetItemPosition_2_2 1428
+#define wxGridBagSizer_SetItemPosition_2_1 1429
+#define wxGridBagSizer_SetItemPosition_2_0 1430
+#define wxGridBagSizer_SetItemSpan_2_2 1431
+#define wxGridBagSizer_SetItemSpan_2_1 1432
+#define wxGridBagSizer_SetItemSpan_2_0 1433
+#define wxGridBagSizer_destroy 1434
+#define wxStdDialogButtonSizer_new 1435
+#define wxStdDialogButtonSizer_AddButton 1436
+#define wxStdDialogButtonSizer_Realize 1437
+#define wxStdDialogButtonSizer_SetAffirmativeButton 1438
+#define wxStdDialogButtonSizer_SetCancelButton 1439
+#define wxStdDialogButtonSizer_SetNegativeButton 1440
+#define wxStdDialogButtonSizer_destroy 1441
+#define wxFont_new_0 1442
+#define wxFont_new_1 1443
+#define wxFont_new_5 1444
+#define wxFont_destruct 1446
+#define wxFont_IsFixedWidth 1447
+#define wxFont_GetDefaultEncoding 1448
+#define wxFont_GetFaceName 1449
+#define wxFont_GetFamily 1450
+#define wxFont_GetNativeFontInfoDesc 1451
+#define wxFont_GetNativeFontInfoUserDesc 1452
+#define wxFont_GetPointSize 1453
+#define wxFont_GetStyle 1454
+#define wxFont_GetUnderlined 1455
+#define wxFont_GetWeight 1456
+#define wxFont_Ok 1457
+#define wxFont_SetDefaultEncoding 1458
+#define wxFont_SetFaceName 1459
+#define wxFont_SetFamily 1460
+#define wxFont_SetPointSize 1461
+#define wxFont_SetStyle 1462
+#define wxFont_SetUnderlined 1463
+#define wxFont_SetWeight 1464
+#define wxToolTip_Enable 1465
+#define wxToolTip_SetDelay 1466
+#define wxToolTip_new 1467
+#define wxToolTip_SetTip 1468
+#define wxToolTip_GetTip 1469
+#define wxToolTip_GetWindow 1470
+#define wxToolTip_destroy 1471
+#define wxButton_new_3 1473
+#define wxButton_new_0 1474
+#define wxButton_destruct 1475
+#define wxButton_Create 1476
+#define wxButton_GetDefaultSize 1477
+#define wxButton_SetDefault 1478
+#define wxButton_SetLabel 1479
+#define wxBitmapButton_new_4 1481
+#define wxBitmapButton_new_0 1482
+#define wxBitmapButton_Create 1483
+#define wxBitmapButton_GetBitmapDisabled 1484
+#define wxBitmapButton_GetBitmapFocus 1486
+#define wxBitmapButton_GetBitmapLabel 1488
+#define wxBitmapButton_GetBitmapSelected 1490
+#define wxBitmapButton_SetBitmapDisabled 1492
+#define wxBitmapButton_SetBitmapFocus 1493
+#define wxBitmapButton_SetBitmapLabel 1494
+#define wxBitmapButton_SetBitmapSelected 1495
+#define wxBitmapButton_destroy 1496
+#define wxToggleButton_new_0 1497
+#define wxToggleButton_new_4 1498
+#define wxToggleButton_Create 1499
+#define wxToggleButton_GetValue 1500
+#define wxToggleButton_SetValue 1501
+#define wxToggleButton_destroy 1502
+#define wxCalendarCtrl_new_0 1503
+#define wxCalendarCtrl_new_3 1504
+#define wxCalendarCtrl_Create 1505
+#define wxCalendarCtrl_destruct 1506
+#define wxCalendarCtrl_SetDate 1507
+#define wxCalendarCtrl_GetDate 1508
+#define wxCalendarCtrl_EnableYearChange 1509
+#define wxCalendarCtrl_EnableMonthChange 1510
+#define wxCalendarCtrl_EnableHolidayDisplay 1511
+#define wxCalendarCtrl_SetHeaderColours 1512
+#define wxCalendarCtrl_GetHeaderColourFg 1513
+#define wxCalendarCtrl_GetHeaderColourBg 1514
+#define wxCalendarCtrl_SetHighlightColours 1515
+#define wxCalendarCtrl_GetHighlightColourFg 1516
+#define wxCalendarCtrl_GetHighlightColourBg 1517
+#define wxCalendarCtrl_SetHolidayColours 1518
+#define wxCalendarCtrl_GetHolidayColourFg 1519
+#define wxCalendarCtrl_GetHolidayColourBg 1520
+#define wxCalendarCtrl_GetAttr 1521
+#define wxCalendarCtrl_SetAttr 1522
+#define wxCalendarCtrl_SetHoliday 1523
+#define wxCalendarCtrl_ResetAttr 1524
+#define wxCalendarCtrl_HitTest 1525
+#define wxCalendarDateAttr_new_0 1526
+#define wxCalendarDateAttr_new_2_1 1527
+#define wxCalendarDateAttr_new_2_0 1528
+#define wxCalendarDateAttr_SetTextColour 1529
+#define wxCalendarDateAttr_SetBackgroundColour 1530
+#define wxCalendarDateAttr_SetBorderColour 1531
+#define wxCalendarDateAttr_SetFont 1532
+#define wxCalendarDateAttr_SetBorder 1533
+#define wxCalendarDateAttr_SetHoliday 1534
+#define wxCalendarDateAttr_HasTextColour 1535
+#define wxCalendarDateAttr_HasBackgroundColour 1536
+#define wxCalendarDateAttr_HasBorderColour 1537
+#define wxCalendarDateAttr_HasFont 1538
+#define wxCalendarDateAttr_HasBorder 1539
+#define wxCalendarDateAttr_IsHoliday 1540
+#define wxCalendarDateAttr_GetTextColour 1541
+#define wxCalendarDateAttr_GetBackgroundColour 1542
+#define wxCalendarDateAttr_GetBorderColour 1543
+#define wxCalendarDateAttr_GetFont 1544
+#define wxCalendarDateAttr_GetBorder 1545
+#define wxCalendarDateAttr_destroy 1546
+#define wxCheckBox_new_4 1548
+#define wxCheckBox_new_0 1549
+#define wxCheckBox_Create 1550
+#define wxCheckBox_GetValue 1551
+#define wxCheckBox_Get3StateValue 1552
+#define wxCheckBox_Is3rdStateAllowedForUser 1553
+#define wxCheckBox_Is3State 1554
+#define wxCheckBox_IsChecked 1555
+#define wxCheckBox_SetValue 1556
+#define wxCheckBox_Set3StateValue 1557
+#define wxCheckBox_destroy 1558
+#define wxCheckListBox_new_0 1559
+#define wxCheckListBox_new_3 1561
+#define wxCheckListBox_Check 1562
+#define wxCheckListBox_IsChecked 1563
+#define wxCheckListBox_destroy 1564
+#define wxChoice_new_3 1567
+#define wxChoice_new_0 1568
+#define wxChoice_destruct 1570
+#define wxChoice_Create 1572
+#define wxChoice_Delete 1573
+#define wxChoice_GetColumns 1574
+#define wxChoice_SetColumns 1575
+#define wxComboBox_new_0 1576
+#define wxComboBox_new_3 1578
+#define wxComboBox_destruct 1579
+#define wxComboBox_Create 1581
+#define wxComboBox_CanCopy 1582
+#define wxComboBox_CanCut 1583
+#define wxComboBox_CanPaste 1584
+#define wxComboBox_CanRedo 1585
+#define wxComboBox_CanUndo 1586
+#define wxComboBox_Copy 1587
+#define wxComboBox_Cut 1588
+#define wxComboBox_GetInsertionPoint 1589
+#define wxComboBox_GetLastPosition 1590
+#define wxComboBox_GetValue 1591
+#define wxComboBox_Paste 1592
+#define wxComboBox_Redo 1593
+#define wxComboBox_Replace 1594
+#define wxComboBox_Remove 1595
+#define wxComboBox_SetInsertionPoint 1596
+#define wxComboBox_SetInsertionPointEnd 1597
+#define wxComboBox_SetSelection_1 1598
+#define wxComboBox_SetSelection_2 1599
+#define wxComboBox_SetValue 1600
+#define wxComboBox_Undo 1601
+#define wxGauge_new_0 1602
+#define wxGauge_new_4 1603
+#define wxGauge_Create 1604
+#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
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 eb7d7dcaeb..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.
@@ -241,12 +241,10 @@ standard_outputv(ErlDrvData drv_data, ErlIOVec* ev)
bin = ev->binv[1];
driver_binary_inc_refc(bin); /* Otherwise it could get deallocated */
binref->bin = bin;
- sd->bin = binref;
} else { /* Empty binary (becomes NULL) */
binref->base = NULL;
binref->size = 0;
binref->from = driver_caller(sd->port_handle);
binref->bin = NULL;
- sd->bin = binref;
}
}
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 5126804b9f..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.
@@ -138,9 +138,9 @@ void gl_dispatch(int op, char *bp,ErlDrvTermData caller,WXEBinRef *bins){
wxGLCanvas * current = glc[caller];
if(current) {
if(current != glc[gl_active]) {
- gl_active = caller;
current->SetCurrent();
}
+ gl_active = caller;
} else {
ErlDrvTermData rt[] = // Error msg
{ERL_DRV_ATOM, driver_mk_atom((char *) "_egl_error_"),
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..175bcfce54 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
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..455e9696d3 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.
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 48fcca640c..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.
@@ -164,14 +164,14 @@ case $host_os in
CPPFLAGS="$CPPFLAGS -D_MACOSX $PTHR_CFLAGS"
;;
mingw32)
- CFLAGS="$CFLAGS -DWIN32 -DWINVER=0x0500 -D_WINDOWS -D_UNICODE -DUNICODE"
- CPPFLAGS="$CPPFLAGS -D_WIN32_WINNT=0x0500"
+ CFLAGS="$CFLAGS -DWIN32 -DWINVER=0x0600 -D_WINDOWS -D_UNICODE -DUNICODE"
+ CPPFLAGS="$CPPFLAGS -D_WIN32_WINNT=0x0600"
AC_MSG_WARN([Reverting to 32-bit time_t])
CPPFLAGS="$CPPFLAGS -D_USE_32BIT_TIME_T"
;;
win32)
- CFLAGS="$CFLAGS -DWIN32 -DWINVER=0x0500 -D_WINDOWS -D_UNICODE -DUNICODE"
- CPPFLAGS="$CPPFLAGS -D_WIN32_WINNT=0x0500"
+ CFLAGS="$CFLAGS -DWIN32 -DWINVER=0x0600 -D_WINDOWS -D_UNICODE -DUNICODE"
+ CPPFLAGS="$CPPFLAGS -D_WIN32_WINNT=0x0600"
;;
*)
CFLAGS="$CFLAGS -Wno-deprecated-declarations"
diff --git a/lib/wx/doc/src/Makefile b/lib/wx/doc/src/Makefile
index a0684d112d..cae2f9fe4e 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.
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 0bbeeaafab..c7400206ab 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,26 @@
<p>This document describes the changes made to the wxErlang
application.</p>
+<section><title>Wx 1.6.1</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ Fixed commands with multiple binaries, such as
+ <c>wxImage:new/4</c>. Added
+ <c>wxWindow:SetDoubleBuffered/1</c>,
+ <c>wxWindow:isDoubleBuffered/1</c>,
+ <c>wxWindow:setTransparent/2</c> and
+ <c>wxWindow:canSetTransparent/1</c>. Fixed timing issues.</p>
+ <p>
+ Own Id: OTP-13404</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
<section><title>Wx 1.6</title>
<section><title>Improvements and New Features</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/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 acc94743d6..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}},
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..d883ddfc5c 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.
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 8bb5fe4d38..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.
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 1bc00ca235..44df57898a 100644
--- a/lib/wx/include/wx.hrl
+++ b/lib/wx/include/wx.hrl
@@ -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.
@@ -353,7 +353,7 @@
%% 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()
}).
@@ -4085,7 +4085,3 @@
-define(wxWINDOW_VARIANT_MINI, 2).
-define(wxWINDOW_VARIANT_LARGE, 3).
-define(wxWINDOW_VARIANT_MAX, 4).
-% From "xmlres.h": wxXmlResourceFlags
--define(wxXRC_USE_LOCALE, 1).
--define(wxXRC_NO_SUBCLASSING, 2).
--define(wxXRC_NO_RELOADING, 4).
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/wxAcceleratorEntry.erl b/lib/wx/src/gen/wxAcceleratorEntry.erl
index b4ad3adcca..0885c25371 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.
diff --git a/lib/wx/src/gen/wxAcceleratorTable.erl b/lib/wx/src/gen/wxAcceleratorTable.erl
index 3edfee7709..3ed419b057 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.
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..c85c0b5457 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.
diff --git a/lib/wx/src/gen/wxAuiNotebook.erl b/lib/wx/src/gen/wxAuiNotebook.erl
index f66048f0d3..7ec1acb26d 100644
--- a/lib/wx/src/gen/wxAuiNotebook.erl
+++ b/lib/wx/src/gen/wxAuiNotebook.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.
@@ -37,10 +37,10 @@
setTabCtrlHeight/2,setUniformBitmapSize/2]).
%% inherited exports
--export([cacheBestSize/2,captureMouse/1,center/1,center/2,centerOnParent/1,
- centerOnParent/2,centre/1,centre/2,centreOnParent/1,centreOnParent/2,
- clearBackground/1,clientToScreen/2,clientToScreen/3,close/1,close/2,
- connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
+-export([cacheBestSize/2,canSetTransparent/1,captureMouse/1,center/1,center/2,
+ centerOnParent/1,centerOnParent/2,centre/1,centre/2,centreOnParent/1,
+ centreOnParent/2,clearBackground/1,clientToScreen/2,clientToScreen/3,
+ close/1,close/2,connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
destroyChildren/1,disable/1,disconnect/1,disconnect/2,disconnect/3,
enable/1,enable/2,findWindow/2,fit/1,fitInside/1,freeze/1,getAcceleratorTable/1,
getBackgroundColour/1,getBackgroundStyle/1,getBestSize/1,getCaret/1,
@@ -52,23 +52,24 @@
getScrollRange/2,getScrollThumb/2,getSize/1,getSizer/1,getTextExtent/2,
getTextExtent/3,getToolTip/1,getUpdateRegion/1,getVirtualSize/1,getWindowStyleFlag/1,
getWindowVariant/1,hasCapture/1,hasScrollbar/2,hasTransparentBackground/1,
- hide/1,inheritAttributes/1,initDialog/1,invalidateBestSize/1,isEnabled/1,
- isExposed/2,isExposed/3,isExposed/5,isRetained/1,isShown/1,isTopLevel/1,
- layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,move/2,
- move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,navigate/1,
- navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,popEventHandler/2,
- popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,refresh/2,refreshRect/2,
- refreshRect/3,releaseMouse/1,removeChild/2,reparent/2,screenToClient/1,
- screenToClient/2,scrollLines/2,scrollPages/2,scrollWindow/3,scrollWindow/4,
- setAcceleratorTable/2,setAutoLayout/2,setBackgroundColour/2,setBackgroundStyle/2,
- setCaret/2,setClientSize/2,setClientSize/3,setContainingSizer/2,setCursor/2,
+ hide/1,inheritAttributes/1,initDialog/1,invalidateBestSize/1,isDoubleBuffered/1,
+ isEnabled/1,isExposed/2,isExposed/3,isExposed/5,isRetained/1,isShown/1,
+ isTopLevel/1,layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,
+ move/2,move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,
+ navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,
+ popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,
+ refresh/2,refreshRect/2,refreshRect/3,releaseMouse/1,removeChild/2,
+ reparent/2,screenToClient/1,screenToClient/2,scrollLines/2,scrollPages/2,
+ scrollWindow/3,scrollWindow/4,setAcceleratorTable/2,setAutoLayout/2,
+ setBackgroundColour/2,setBackgroundStyle/2,setCaret/2,setClientSize/2,
+ setClientSize/3,setContainingSizer/2,setCursor/2,setDoubleBuffered/2,
setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,setForegroundColour/2,
setHelpText/2,setId/2,setLabel/2,setMaxSize/2,setMinSize/2,setName/2,
setOwnBackgroundColour/2,setOwnFont/2,setOwnForegroundColour/2,setPalette/2,
setScrollPos/3,setScrollPos/4,setScrollbar/5,setScrollbar/6,setSize/2,
setSize/3,setSize/5,setSize/6,setSizeHints/2,setSizeHints/3,setSizeHints/4,
setSizer/2,setSizer/3,setSizerAndFit/2,setSizerAndFit/3,setThemeEnabled/2,
- setToolTip/2,setVirtualSize/2,setVirtualSize/3,setVirtualSizeHints/2,
+ setToolTip/2,setTransparent/2,setVirtualSize/2,setVirtualSize/3,setVirtualSizeHints/2,
setVirtualSizeHints/3,setVirtualSizeHints/4,setWindowStyle/2,setWindowStyleFlag/2,
setWindowVariant/2,shouldInheritColours/1,show/1,show/2,thaw/1,transferDataFromWindow/1,
transferDataToWindow/1,update/1,updateWindowUI/1,updateWindowUI/2,
@@ -349,6 +350,14 @@ setLabel(This,Label) -> wxControl:setLabel(This,Label).
getLabel(This) -> wxControl:getLabel(This).
%% From wxWindow
%% @hidden
+setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On).
+%% @hidden
+isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This).
+%% @hidden
+canSetTransparent(This) -> wxWindow:canSetTransparent(This).
+%% @hidden
+setTransparent(This,Alpha) -> wxWindow:setTransparent(This,Alpha).
+%% @hidden
warpPointer(This,X,Y) -> wxWindow:warpPointer(This,X,Y).
%% @hidden
validate(This) -> wxWindow:validate(This).
diff --git a/lib/wx/src/gen/wxAuiNotebookEvent.erl b/lib/wx/src/gen/wxAuiNotebookEvent.erl
index 33509e3269..4ebe408cef 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.
diff --git a/lib/wx/src/gen/wxBitmap.erl b/lib/wx/src/gen/wxBitmap.erl
index 988dc5b1af..9bf2f8eee0 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.
diff --git a/lib/wx/src/gen/wxBitmapButton.erl b/lib/wx/src/gen/wxBitmapButton.erl
index e0fb4bc78a..642828b0b0 100644
--- a/lib/wx/src/gen/wxBitmapButton.erl
+++ b/lib/wx/src/gen/wxBitmapButton.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,10 +36,10 @@
setBitmapLabel/2,setBitmapSelected/2]).
%% inherited exports
--export([cacheBestSize/2,captureMouse/1,center/1,center/2,centerOnParent/1,
- centerOnParent/2,centre/1,centre/2,centreOnParent/1,centreOnParent/2,
- clearBackground/1,clientToScreen/2,clientToScreen/3,close/1,close/2,
- connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
+-export([cacheBestSize/2,canSetTransparent/1,captureMouse/1,center/1,center/2,
+ centerOnParent/1,centerOnParent/2,centre/1,centre/2,centreOnParent/1,
+ centreOnParent/2,clearBackground/1,clientToScreen/2,clientToScreen/3,
+ close/1,close/2,connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
destroyChildren/1,disable/1,disconnect/1,disconnect/2,disconnect/3,
enable/1,enable/2,findWindow/2,fit/1,fitInside/1,freeze/1,getAcceleratorTable/1,
getBackgroundColour/1,getBackgroundStyle/1,getBestSize/1,getCaret/1,
@@ -51,24 +51,25 @@
getScrollRange/2,getScrollThumb/2,getSize/1,getSizer/1,getTextExtent/2,
getTextExtent/3,getToolTip/1,getUpdateRegion/1,getVirtualSize/1,getWindowStyleFlag/1,
getWindowVariant/1,hasCapture/1,hasScrollbar/2,hasTransparentBackground/1,
- hide/1,inheritAttributes/1,initDialog/1,invalidateBestSize/1,isEnabled/1,
- isExposed/2,isExposed/3,isExposed/5,isRetained/1,isShown/1,isTopLevel/1,
- layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,move/2,
- move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,navigate/1,
- navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,popEventHandler/2,
- popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,refresh/2,refreshRect/2,
- refreshRect/3,releaseMouse/1,removeChild/2,reparent/2,screenToClient/1,
- screenToClient/2,scrollLines/2,scrollPages/2,scrollWindow/3,scrollWindow/4,
- setAcceleratorTable/2,setAutoLayout/2,setBackgroundColour/2,setBackgroundStyle/2,
- setCaret/2,setClientSize/2,setClientSize/3,setContainingSizer/2,setCursor/2,
- setDefault/1,setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,
- setFont/2,setForegroundColour/2,setHelpText/2,setId/2,setLabel/2,setMaxSize/2,
+ hide/1,inheritAttributes/1,initDialog/1,invalidateBestSize/1,isDoubleBuffered/1,
+ isEnabled/1,isExposed/2,isExposed/3,isExposed/5,isRetained/1,isShown/1,
+ isTopLevel/1,layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,
+ move/2,move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,
+ navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,
+ popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,
+ refresh/2,refreshRect/2,refreshRect/3,releaseMouse/1,removeChild/2,
+ reparent/2,screenToClient/1,screenToClient/2,scrollLines/2,scrollPages/2,
+ scrollWindow/3,scrollWindow/4,setAcceleratorTable/2,setAutoLayout/2,
+ setBackgroundColour/2,setBackgroundStyle/2,setCaret/2,setClientSize/2,
+ setClientSize/3,setContainingSizer/2,setCursor/2,setDefault/1,setDoubleBuffered/2,
+ setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,setFont/2,
+ setForegroundColour/2,setHelpText/2,setId/2,setLabel/2,setMaxSize/2,
setMinSize/2,setName/2,setOwnBackgroundColour/2,setOwnFont/2,setOwnForegroundColour/2,
setPalette/2,setScrollPos/3,setScrollPos/4,setScrollbar/5,setScrollbar/6,
setSize/2,setSize/3,setSize/5,setSize/6,setSizeHints/2,setSizeHints/3,
setSizeHints/4,setSizer/2,setSizer/3,setSizerAndFit/2,setSizerAndFit/3,
- setThemeEnabled/2,setToolTip/2,setVirtualSize/2,setVirtualSize/3,
- setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
+ setThemeEnabled/2,setToolTip/2,setTransparent/2,setVirtualSize/2,
+ setVirtualSize/3,setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
setWindowStyle/2,setWindowStyleFlag/2,setWindowVariant/2,shouldInheritColours/1,
show/1,show/2,thaw/1,transferDataFromWindow/1,transferDataToWindow/1,
update/1,updateWindowUI/1,updateWindowUI/2,validate/1,warpPointer/3]).
@@ -229,6 +230,14 @@ setDefault(This) -> wxButton:setDefault(This).
getLabel(This) -> wxControl:getLabel(This).
%% From wxWindow
%% @hidden
+setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On).
+%% @hidden
+isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This).
+%% @hidden
+canSetTransparent(This) -> wxWindow:canSetTransparent(This).
+%% @hidden
+setTransparent(This,Alpha) -> wxWindow:setTransparent(This,Alpha).
+%% @hidden
warpPointer(This,X,Y) -> wxWindow:warpPointer(This,X,Y).
%% @hidden
validate(This) -> wxWindow:validate(This).
diff --git a/lib/wx/src/gen/wxBitmapDataObject.erl b/lib/wx/src/gen/wxBitmapDataObject.erl
index 9fcbb4df41..2c90498880 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.
diff --git a/lib/wx/src/gen/wxBoxSizer.erl b/lib/wx/src/gen/wxBoxSizer.erl
index 04f26f95d9..1a19b264d9 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.
diff --git a/lib/wx/src/gen/wxBrush.erl b/lib/wx/src/gen/wxBrush.erl
index 3d6112a351..bc1956c1f7 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.
diff --git a/lib/wx/src/gen/wxBufferedDC.erl b/lib/wx/src/gen/wxBufferedDC.erl
index 5959a3c3ab..67b851a84e 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.
diff --git a/lib/wx/src/gen/wxBufferedPaintDC.erl b/lib/wx/src/gen/wxBufferedPaintDC.erl
index a45ec6540b..0601caf300 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.
diff --git a/lib/wx/src/gen/wxButton.erl b/lib/wx/src/gen/wxButton.erl
index 06e6e53976..c94303bbea 100644
--- a/lib/wx/src/gen/wxButton.erl
+++ b/lib/wx/src/gen/wxButton.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.
@@ -34,10 +34,10 @@
setLabel/2]).
%% inherited exports
--export([cacheBestSize/2,captureMouse/1,center/1,center/2,centerOnParent/1,
- centerOnParent/2,centre/1,centre/2,centreOnParent/1,centreOnParent/2,
- clearBackground/1,clientToScreen/2,clientToScreen/3,close/1,close/2,
- connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
+-export([cacheBestSize/2,canSetTransparent/1,captureMouse/1,center/1,center/2,
+ centerOnParent/1,centerOnParent/2,centre/1,centre/2,centreOnParent/1,
+ centreOnParent/2,clearBackground/1,clientToScreen/2,clientToScreen/3,
+ close/1,close/2,connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
destroyChildren/1,disable/1,disconnect/1,disconnect/2,disconnect/3,
enable/1,enable/2,findWindow/2,fit/1,fitInside/1,freeze/1,getAcceleratorTable/1,
getBackgroundColour/1,getBackgroundStyle/1,getBestSize/1,getCaret/1,
@@ -49,24 +49,25 @@
getScrollRange/2,getScrollThumb/2,getSize/1,getSizer/1,getTextExtent/2,
getTextExtent/3,getToolTip/1,getUpdateRegion/1,getVirtualSize/1,getWindowStyleFlag/1,
getWindowVariant/1,hasCapture/1,hasScrollbar/2,hasTransparentBackground/1,
- hide/1,inheritAttributes/1,initDialog/1,invalidateBestSize/1,isEnabled/1,
- isExposed/2,isExposed/3,isExposed/5,isRetained/1,isShown/1,isTopLevel/1,
- layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,move/2,
- move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,navigate/1,
- navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,popEventHandler/2,
- popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,refresh/2,refreshRect/2,
- refreshRect/3,releaseMouse/1,removeChild/2,reparent/2,screenToClient/1,
- screenToClient/2,scrollLines/2,scrollPages/2,scrollWindow/3,scrollWindow/4,
- setAcceleratorTable/2,setAutoLayout/2,setBackgroundColour/2,setBackgroundStyle/2,
- setCaret/2,setClientSize/2,setClientSize/3,setContainingSizer/2,setCursor/2,
+ hide/1,inheritAttributes/1,initDialog/1,invalidateBestSize/1,isDoubleBuffered/1,
+ isEnabled/1,isExposed/2,isExposed/3,isExposed/5,isRetained/1,isShown/1,
+ isTopLevel/1,layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,
+ move/2,move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,
+ navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,
+ popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,
+ refresh/2,refreshRect/2,refreshRect/3,releaseMouse/1,removeChild/2,
+ reparent/2,screenToClient/1,screenToClient/2,scrollLines/2,scrollPages/2,
+ scrollWindow/3,scrollWindow/4,setAcceleratorTable/2,setAutoLayout/2,
+ setBackgroundColour/2,setBackgroundStyle/2,setCaret/2,setClientSize/2,
+ setClientSize/3,setContainingSizer/2,setCursor/2,setDoubleBuffered/2,
setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,setFont/2,
setForegroundColour/2,setHelpText/2,setId/2,setMaxSize/2,setMinSize/2,
setName/2,setOwnBackgroundColour/2,setOwnFont/2,setOwnForegroundColour/2,
setPalette/2,setScrollPos/3,setScrollPos/4,setScrollbar/5,setScrollbar/6,
setSize/2,setSize/3,setSize/5,setSize/6,setSizeHints/2,setSizeHints/3,
setSizeHints/4,setSizer/2,setSizer/3,setSizerAndFit/2,setSizerAndFit/3,
- setThemeEnabled/2,setToolTip/2,setVirtualSize/2,setVirtualSize/3,
- setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
+ setThemeEnabled/2,setToolTip/2,setTransparent/2,setVirtualSize/2,
+ setVirtualSize/3,setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
setWindowStyle/2,setWindowStyleFlag/2,setWindowVariant/2,shouldInheritColours/1,
show/1,show/2,thaw/1,transferDataFromWindow/1,transferDataToWindow/1,
update/1,updateWindowUI/1,updateWindowUI/2,validate/1,warpPointer/3]).
@@ -179,6 +180,14 @@ destroy(Obj=#wx_ref{type=Type}) ->
getLabel(This) -> wxControl:getLabel(This).
%% From wxWindow
%% @hidden
+setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On).
+%% @hidden
+isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This).
+%% @hidden
+canSetTransparent(This) -> wxWindow:canSetTransparent(This).
+%% @hidden
+setTransparent(This,Alpha) -> wxWindow:setTransparent(This,Alpha).
+%% @hidden
warpPointer(This,X,Y) -> wxWindow:warpPointer(This,X,Y).
%% @hidden
validate(This) -> wxWindow:validate(This).
diff --git a/lib/wx/src/gen/wxCalendarCtrl.erl b/lib/wx/src/gen/wxCalendarCtrl.erl
index 2c24063372..1d4baeed08 100644
--- a/lib/wx/src/gen/wxCalendarCtrl.erl
+++ b/lib/wx/src/gen/wxCalendarCtrl.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.
@@ -38,10 +38,10 @@
setHighlightColours/3,setHoliday/2,setHolidayColours/3]).
%% inherited exports
--export([cacheBestSize/2,captureMouse/1,center/1,center/2,centerOnParent/1,
- centerOnParent/2,centre/1,centre/2,centreOnParent/1,centreOnParent/2,
- clearBackground/1,clientToScreen/2,clientToScreen/3,close/1,close/2,
- connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
+-export([cacheBestSize/2,canSetTransparent/1,captureMouse/1,center/1,center/2,
+ centerOnParent/1,centerOnParent/2,centre/1,centre/2,centreOnParent/1,
+ centreOnParent/2,clearBackground/1,clientToScreen/2,clientToScreen/3,
+ close/1,close/2,connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
destroyChildren/1,disable/1,disconnect/1,disconnect/2,disconnect/3,
enable/1,enable/2,findWindow/2,fit/1,fitInside/1,freeze/1,getAcceleratorTable/1,
getBackgroundColour/1,getBackgroundStyle/1,getBestSize/1,getCaret/1,
@@ -53,24 +53,25 @@
getScrollRange/2,getScrollThumb/2,getSize/1,getSizer/1,getTextExtent/2,
getTextExtent/3,getToolTip/1,getUpdateRegion/1,getVirtualSize/1,getWindowStyleFlag/1,
getWindowVariant/1,hasCapture/1,hasScrollbar/2,hasTransparentBackground/1,
- hide/1,inheritAttributes/1,initDialog/1,invalidateBestSize/1,isEnabled/1,
- isExposed/2,isExposed/3,isExposed/5,isRetained/1,isShown/1,isTopLevel/1,
- layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,move/2,
- move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,navigate/1,
- navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,popEventHandler/2,
- popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,refresh/2,refreshRect/2,
- refreshRect/3,releaseMouse/1,removeChild/2,reparent/2,screenToClient/1,
- screenToClient/2,scrollLines/2,scrollPages/2,scrollWindow/3,scrollWindow/4,
- setAcceleratorTable/2,setAutoLayout/2,setBackgroundColour/2,setBackgroundStyle/2,
- setCaret/2,setClientSize/2,setClientSize/3,setContainingSizer/2,setCursor/2,
+ hide/1,inheritAttributes/1,initDialog/1,invalidateBestSize/1,isDoubleBuffered/1,
+ isEnabled/1,isExposed/2,isExposed/3,isExposed/5,isRetained/1,isShown/1,
+ isTopLevel/1,layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,
+ move/2,move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,
+ navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,
+ popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,
+ refresh/2,refreshRect/2,refreshRect/3,releaseMouse/1,removeChild/2,
+ reparent/2,screenToClient/1,screenToClient/2,scrollLines/2,scrollPages/2,
+ scrollWindow/3,scrollWindow/4,setAcceleratorTable/2,setAutoLayout/2,
+ setBackgroundColour/2,setBackgroundStyle/2,setCaret/2,setClientSize/2,
+ setClientSize/3,setContainingSizer/2,setCursor/2,setDoubleBuffered/2,
setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,setFont/2,
setForegroundColour/2,setHelpText/2,setId/2,setLabel/2,setMaxSize/2,
setMinSize/2,setName/2,setOwnBackgroundColour/2,setOwnFont/2,setOwnForegroundColour/2,
setPalette/2,setScrollPos/3,setScrollPos/4,setScrollbar/5,setScrollbar/6,
setSize/2,setSize/3,setSize/5,setSize/6,setSizeHints/2,setSizeHints/3,
setSizeHints/4,setSizer/2,setSizer/3,setSizerAndFit/2,setSizerAndFit/3,
- setThemeEnabled/2,setToolTip/2,setVirtualSize/2,setVirtualSize/3,
- setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
+ setThemeEnabled/2,setToolTip/2,setTransparent/2,setVirtualSize/2,
+ setVirtualSize/3,setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
setWindowStyle/2,setWindowStyleFlag/2,setWindowVariant/2,shouldInheritColours/1,
show/1,show/2,thaw/1,transferDataFromWindow/1,transferDataToWindow/1,
update/1,updateWindowUI/1,updateWindowUI/2,validate/1,warpPointer/3]).
@@ -363,6 +364,14 @@ setLabel(This,Label) -> wxControl:setLabel(This,Label).
getLabel(This) -> wxControl:getLabel(This).
%% From wxWindow
%% @hidden
+setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On).
+%% @hidden
+isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This).
+%% @hidden
+canSetTransparent(This) -> wxWindow:canSetTransparent(This).
+%% @hidden
+setTransparent(This,Alpha) -> wxWindow:setTransparent(This,Alpha).
+%% @hidden
warpPointer(This,X,Y) -> wxWindow:warpPointer(This,X,Y).
%% @hidden
validate(This) -> wxWindow:validate(This).
diff --git a/lib/wx/src/gen/wxCalendarDateAttr.erl b/lib/wx/src/gen/wxCalendarDateAttr.erl
index 4fde4ddbda..175b03cfdd 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.
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..9da832aa67 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.
diff --git a/lib/wx/src/gen/wxCheckBox.erl b/lib/wx/src/gen/wxCheckBox.erl
index c190ebcf27..2cea4d04b4 100644
--- a/lib/wx/src/gen/wxCheckBox.erl
+++ b/lib/wx/src/gen/wxCheckBox.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.
@@ -35,10 +35,10 @@
setValue/2]).
%% inherited exports
--export([cacheBestSize/2,captureMouse/1,center/1,center/2,centerOnParent/1,
- centerOnParent/2,centre/1,centre/2,centreOnParent/1,centreOnParent/2,
- clearBackground/1,clientToScreen/2,clientToScreen/3,close/1,close/2,
- connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
+-export([cacheBestSize/2,canSetTransparent/1,captureMouse/1,center/1,center/2,
+ centerOnParent/1,centerOnParent/2,centre/1,centre/2,centreOnParent/1,
+ centreOnParent/2,clearBackground/1,clientToScreen/2,clientToScreen/3,
+ close/1,close/2,connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
destroyChildren/1,disable/1,disconnect/1,disconnect/2,disconnect/3,
enable/1,enable/2,findWindow/2,fit/1,fitInside/1,freeze/1,getAcceleratorTable/1,
getBackgroundColour/1,getBackgroundStyle/1,getBestSize/1,getCaret/1,
@@ -50,24 +50,25 @@
getScrollRange/2,getScrollThumb/2,getSize/1,getSizer/1,getTextExtent/2,
getTextExtent/3,getToolTip/1,getUpdateRegion/1,getVirtualSize/1,getWindowStyleFlag/1,
getWindowVariant/1,hasCapture/1,hasScrollbar/2,hasTransparentBackground/1,
- hide/1,inheritAttributes/1,initDialog/1,invalidateBestSize/1,isEnabled/1,
- isExposed/2,isExposed/3,isExposed/5,isRetained/1,isShown/1,isTopLevel/1,
- layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,move/2,
- move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,navigate/1,
- navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,popEventHandler/2,
- popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,refresh/2,refreshRect/2,
- refreshRect/3,releaseMouse/1,removeChild/2,reparent/2,screenToClient/1,
- screenToClient/2,scrollLines/2,scrollPages/2,scrollWindow/3,scrollWindow/4,
- setAcceleratorTable/2,setAutoLayout/2,setBackgroundColour/2,setBackgroundStyle/2,
- setCaret/2,setClientSize/2,setClientSize/3,setContainingSizer/2,setCursor/2,
+ hide/1,inheritAttributes/1,initDialog/1,invalidateBestSize/1,isDoubleBuffered/1,
+ isEnabled/1,isExposed/2,isExposed/3,isExposed/5,isRetained/1,isShown/1,
+ isTopLevel/1,layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,
+ move/2,move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,
+ navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,
+ popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,
+ refresh/2,refreshRect/2,refreshRect/3,releaseMouse/1,removeChild/2,
+ reparent/2,screenToClient/1,screenToClient/2,scrollLines/2,scrollPages/2,
+ scrollWindow/3,scrollWindow/4,setAcceleratorTable/2,setAutoLayout/2,
+ setBackgroundColour/2,setBackgroundStyle/2,setCaret/2,setClientSize/2,
+ setClientSize/3,setContainingSizer/2,setCursor/2,setDoubleBuffered/2,
setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,setFont/2,
setForegroundColour/2,setHelpText/2,setId/2,setLabel/2,setMaxSize/2,
setMinSize/2,setName/2,setOwnBackgroundColour/2,setOwnFont/2,setOwnForegroundColour/2,
setPalette/2,setScrollPos/3,setScrollPos/4,setScrollbar/5,setScrollbar/6,
setSize/2,setSize/3,setSize/5,setSize/6,setSizeHints/2,setSizeHints/3,
setSizeHints/4,setSizer/2,setSizer/3,setSizerAndFit/2,setSizerAndFit/3,
- setThemeEnabled/2,setToolTip/2,setVirtualSize/2,setVirtualSize/3,
- setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
+ setThemeEnabled/2,setToolTip/2,setTransparent/2,setVirtualSize/2,
+ setVirtualSize/3,setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
setWindowStyle/2,setWindowStyleFlag/2,setWindowVariant/2,shouldInheritColours/1,
show/1,show/2,thaw/1,transferDataFromWindow/1,transferDataToWindow/1,
update/1,updateWindowUI/1,updateWindowUI/2,validate/1,warpPointer/3]).
@@ -216,6 +217,14 @@ setLabel(This,Label) -> wxControl:setLabel(This,Label).
getLabel(This) -> wxControl:getLabel(This).
%% From wxWindow
%% @hidden
+setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On).
+%% @hidden
+isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This).
+%% @hidden
+canSetTransparent(This) -> wxWindow:canSetTransparent(This).
+%% @hidden
+setTransparent(This,Alpha) -> wxWindow:setTransparent(This,Alpha).
+%% @hidden
warpPointer(This,X,Y) -> wxWindow:warpPointer(This,X,Y).
%% @hidden
validate(This) -> wxWindow:validate(This).
diff --git a/lib/wx/src/gen/wxCheckListBox.erl b/lib/wx/src/gen/wxCheckListBox.erl
index 94656daac8..f6013e4863 100644
--- a/lib/wx/src/gen/wxCheckListBox.erl
+++ b/lib/wx/src/gen/wxCheckListBox.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.
@@ -35,46 +35,48 @@
-export([check/2,check/3,destroy/1,isChecked/2,new/0,new/2,new/3]).
%% inherited exports
--export([append/2,append/3,appendStrings/2,cacheBestSize/2,captureMouse/1,center/1,
- center/2,centerOnParent/1,centerOnParent/2,centre/1,centre/2,centreOnParent/1,
- centreOnParent/2,clear/1,clearBackground/1,clientToScreen/2,clientToScreen/3,
- close/1,close/2,connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
- delete/2,deselect/2,destroyChildren/1,disable/1,disconnect/1,disconnect/2,
- disconnect/3,enable/1,enable/2,findString/2,findString/3,findWindow/2,
- fit/1,fitInside/1,freeze/1,getAcceleratorTable/1,getBackgroundColour/1,
- getBackgroundStyle/1,getBestSize/1,getCaret/1,getCharHeight/1,getCharWidth/1,
- getChildren/1,getClientData/2,getClientSize/1,getContainingSizer/1,
- getCount/1,getCursor/1,getDropTarget/1,getEventHandler/1,getExtraStyle/1,
- getFont/1,getForegroundColour/1,getGrandParent/1,getHandle/1,getHelpText/1,
- getId/1,getLabel/1,getMaxSize/1,getMinSize/1,getName/1,getParent/1,
- getPosition/1,getRect/1,getScreenPosition/1,getScreenRect/1,getScrollPos/2,
- getScrollRange/2,getScrollThumb/2,getSelection/1,getSelections/1,
- getSize/1,getSizer/1,getString/2,getStringSelection/1,getTextExtent/2,
- getTextExtent/3,getToolTip/1,getUpdateRegion/1,getVirtualSize/1,getWindowStyleFlag/1,
- getWindowVariant/1,hasCapture/1,hasScrollbar/2,hasTransparentBackground/1,
- hide/1,hitTest/2,inheritAttributes/1,initDialog/1,insert/3,insert/4,
- insertItems/3,invalidateBestSize/1,isEmpty/1,isEnabled/1,isExposed/2,
- isExposed/3,isExposed/5,isRetained/1,isSelected/2,isShown/1,isTopLevel/1,
- layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,move/2,
- move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,navigate/1,
- navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,popEventHandler/2,
- popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,refresh/2,refreshRect/2,
- refreshRect/3,releaseMouse/1,removeChild/2,reparent/2,screenToClient/1,
- screenToClient/2,scrollLines/2,scrollPages/2,scrollWindow/3,scrollWindow/4,
- select/2,set/2,setAcceleratorTable/2,setAutoLayout/2,setBackgroundColour/2,
- setBackgroundStyle/2,setCaret/2,setClientData/3,setClientSize/2,setClientSize/3,
- setContainingSizer/2,setCursor/2,setDropTarget/2,setExtraStyle/2,
- setFirstItem/2,setFocus/1,setFocusFromKbd/1,setFont/2,setForegroundColour/2,
- setHelpText/2,setId/2,setLabel/2,setMaxSize/2,setMinSize/2,setName/2,
- setOwnBackgroundColour/2,setOwnFont/2,setOwnForegroundColour/2,setPalette/2,
- setScrollPos/3,setScrollPos/4,setScrollbar/5,setScrollbar/6,setSelection/2,
- setSize/2,setSize/3,setSize/5,setSize/6,setSizeHints/2,setSizeHints/3,
- setSizeHints/4,setSizer/2,setSizer/3,setSizerAndFit/2,setSizerAndFit/3,
- setString/3,setStringSelection/2,setThemeEnabled/2,setToolTip/2,setVirtualSize/2,
- setVirtualSize/3,setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
- setWindowStyle/2,setWindowStyleFlag/2,setWindowVariant/2,shouldInheritColours/1,
- show/1,show/2,thaw/1,transferDataFromWindow/1,transferDataToWindow/1,
- update/1,updateWindowUI/1,updateWindowUI/2,validate/1,warpPointer/3]).
+-export([append/2,append/3,appendStrings/2,cacheBestSize/2,canSetTransparent/1,
+ captureMouse/1,center/1,center/2,centerOnParent/1,centerOnParent/2,
+ centre/1,centre/2,centreOnParent/1,centreOnParent/2,clear/1,clearBackground/1,
+ clientToScreen/2,clientToScreen/3,close/1,close/2,connect/2,connect/3,
+ convertDialogToPixels/2,convertPixelsToDialog/2,delete/2,deselect/2,
+ destroyChildren/1,disable/1,disconnect/1,disconnect/2,disconnect/3,
+ enable/1,enable/2,findString/2,findString/3,findWindow/2,fit/1,fitInside/1,
+ freeze/1,getAcceleratorTable/1,getBackgroundColour/1,getBackgroundStyle/1,
+ getBestSize/1,getCaret/1,getCharHeight/1,getCharWidth/1,getChildren/1,
+ getClientData/2,getClientSize/1,getContainingSizer/1,getCount/1,getCursor/1,
+ getDropTarget/1,getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1,
+ getGrandParent/1,getHandle/1,getHelpText/1,getId/1,getLabel/1,getMaxSize/1,
+ getMinSize/1,getName/1,getParent/1,getPosition/1,getRect/1,getScreenPosition/1,
+ getScreenRect/1,getScrollPos/2,getScrollRange/2,getScrollThumb/2,
+ getSelection/1,getSelections/1,getSize/1,getSizer/1,getString/2,getStringSelection/1,
+ getTextExtent/2,getTextExtent/3,getToolTip/1,getUpdateRegion/1,getVirtualSize/1,
+ getWindowStyleFlag/1,getWindowVariant/1,hasCapture/1,hasScrollbar/2,
+ hasTransparentBackground/1,hide/1,hitTest/2,inheritAttributes/1,initDialog/1,
+ insert/3,insert/4,insertItems/3,invalidateBestSize/1,isDoubleBuffered/1,
+ isEmpty/1,isEnabled/1,isExposed/2,isExposed/3,isExposed/5,isRetained/1,
+ isSelected/2,isShown/1,isTopLevel/1,layout/1,lineDown/1,lineUp/1,lower/1,
+ makeModal/1,makeModal/2,move/2,move/3,move/4,moveAfterInTabOrder/2,
+ moveBeforeInTabOrder/2,navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1,
+ popEventHandler/1,popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4,
+ raise/1,refresh/1,refresh/2,refreshRect/2,refreshRect/3,releaseMouse/1,
+ removeChild/2,reparent/2,screenToClient/1,screenToClient/2,scrollLines/2,
+ scrollPages/2,scrollWindow/3,scrollWindow/4,select/2,set/2,setAcceleratorTable/2,
+ setAutoLayout/2,setBackgroundColour/2,setBackgroundStyle/2,setCaret/2,
+ setClientData/3,setClientSize/2,setClientSize/3,setContainingSizer/2,
+ setCursor/2,setDoubleBuffered/2,setDropTarget/2,setExtraStyle/2,setFirstItem/2,
+ setFocus/1,setFocusFromKbd/1,setFont/2,setForegroundColour/2,setHelpText/2,
+ setId/2,setLabel/2,setMaxSize/2,setMinSize/2,setName/2,setOwnBackgroundColour/2,
+ setOwnFont/2,setOwnForegroundColour/2,setPalette/2,setScrollPos/3,
+ setScrollPos/4,setScrollbar/5,setScrollbar/6,setSelection/2,setSize/2,
+ setSize/3,setSize/5,setSize/6,setSizeHints/2,setSizeHints/3,setSizeHints/4,
+ setSizer/2,setSizer/3,setSizerAndFit/2,setSizerAndFit/3,setString/3,
+ setStringSelection/2,setThemeEnabled/2,setToolTip/2,setTransparent/2,
+ setVirtualSize/2,setVirtualSize/3,setVirtualSizeHints/2,setVirtualSizeHints/3,
+ setVirtualSizeHints/4,setWindowStyle/2,setWindowStyleFlag/2,setWindowVariant/2,
+ shouldInheritColours/1,show/1,show/2,thaw/1,transferDataFromWindow/1,
+ transferDataToWindow/1,update/1,updateWindowUI/1,updateWindowUI/2,
+ validate/1,warpPointer/3]).
-export_type([wxCheckListBox/0]).
%% @hidden
@@ -220,6 +222,14 @@ setLabel(This,Label) -> wxControl:setLabel(This,Label).
getLabel(This) -> wxControl:getLabel(This).
%% From wxWindow
%% @hidden
+setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On).
+%% @hidden
+isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This).
+%% @hidden
+canSetTransparent(This) -> wxWindow:canSetTransparent(This).
+%% @hidden
+setTransparent(This,Alpha) -> wxWindow:setTransparent(This,Alpha).
+%% @hidden
warpPointer(This,X,Y) -> wxWindow:warpPointer(This,X,Y).
%% @hidden
validate(This) -> wxWindow:validate(This).
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 ddeb00beca..73867d6597 100644
--- a/lib/wx/src/gen/wxChoice.erl
+++ b/lib/wx/src/gen/wxChoice.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.
@@ -35,45 +35,47 @@
setColumns/2]).
%% inherited exports
--export([append/2,append/3,appendStrings/2,cacheBestSize/2,captureMouse/1,center/1,
- center/2,centerOnParent/1,centerOnParent/2,centre/1,centre/2,centreOnParent/1,
- centreOnParent/2,clear/1,clearBackground/1,clientToScreen/2,clientToScreen/3,
- close/1,close/2,connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
- destroyChildren/1,disable/1,disconnect/1,disconnect/2,disconnect/3,
- enable/1,enable/2,findString/2,findString/3,findWindow/2,fit/1,fitInside/1,
- freeze/1,getAcceleratorTable/1,getBackgroundColour/1,getBackgroundStyle/1,
- getBestSize/1,getCaret/1,getCharHeight/1,getCharWidth/1,getChildren/1,
- getClientData/2,getClientSize/1,getContainingSizer/1,getCount/1,getCursor/1,
- getDropTarget/1,getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1,
- getGrandParent/1,getHandle/1,getHelpText/1,getId/1,getLabel/1,getMaxSize/1,
- getMinSize/1,getName/1,getParent/1,getPosition/1,getRect/1,getScreenPosition/1,
+-export([append/2,append/3,appendStrings/2,cacheBestSize/2,canSetTransparent/1,
+ captureMouse/1,center/1,center/2,centerOnParent/1,centerOnParent/2,
+ centre/1,centre/2,centreOnParent/1,centreOnParent/2,clear/1,clearBackground/1,
+ clientToScreen/2,clientToScreen/3,close/1,close/2,connect/2,connect/3,
+ convertDialogToPixels/2,convertPixelsToDialog/2,destroyChildren/1,
+ disable/1,disconnect/1,disconnect/2,disconnect/3,enable/1,enable/2,
+ findString/2,findString/3,findWindow/2,fit/1,fitInside/1,freeze/1,getAcceleratorTable/1,
+ getBackgroundColour/1,getBackgroundStyle/1,getBestSize/1,getCaret/1,
+ getCharHeight/1,getCharWidth/1,getChildren/1,getClientData/2,getClientSize/1,
+ getContainingSizer/1,getCount/1,getCursor/1,getDropTarget/1,getEventHandler/1,
+ getExtraStyle/1,getFont/1,getForegroundColour/1,getGrandParent/1,
+ getHandle/1,getHelpText/1,getId/1,getLabel/1,getMaxSize/1,getMinSize/1,
+ getName/1,getParent/1,getPosition/1,getRect/1,getScreenPosition/1,
getScreenRect/1,getScrollPos/2,getScrollRange/2,getScrollThumb/2,
getSelection/1,getSize/1,getSizer/1,getString/2,getStringSelection/1,
getTextExtent/2,getTextExtent/3,getToolTip/1,getUpdateRegion/1,getVirtualSize/1,
getWindowStyleFlag/1,getWindowVariant/1,hasCapture/1,hasScrollbar/2,
hasTransparentBackground/1,hide/1,inheritAttributes/1,initDialog/1,
- insert/3,insert/4,invalidateBestSize/1,isEmpty/1,isEnabled/1,isExposed/2,
- isExposed/3,isExposed/5,isRetained/1,isShown/1,isTopLevel/1,layout/1,
- lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,move/2,move/3,move/4,
- moveAfterInTabOrder/2,moveBeforeInTabOrder/2,navigate/1,navigate/2,
- pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,popEventHandler/2,
- popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,refresh/2,refreshRect/2,
- refreshRect/3,releaseMouse/1,removeChild/2,reparent/2,screenToClient/1,
- screenToClient/2,scrollLines/2,scrollPages/2,scrollWindow/3,scrollWindow/4,
- select/2,setAcceleratorTable/2,setAutoLayout/2,setBackgroundColour/2,
- setBackgroundStyle/2,setCaret/2,setClientData/3,setClientSize/2,setClientSize/3,
- setContainingSizer/2,setCursor/2,setDropTarget/2,setExtraStyle/2,
- setFocus/1,setFocusFromKbd/1,setFont/2,setForegroundColour/2,setHelpText/2,
- setId/2,setLabel/2,setMaxSize/2,setMinSize/2,setName/2,setOwnBackgroundColour/2,
- setOwnFont/2,setOwnForegroundColour/2,setPalette/2,setScrollPos/3,
- setScrollPos/4,setScrollbar/5,setScrollbar/6,setSelection/2,setSize/2,
- setSize/3,setSize/5,setSize/6,setSizeHints/2,setSizeHints/3,setSizeHints/4,
- setSizer/2,setSizer/3,setSizerAndFit/2,setSizerAndFit/3,setString/3,
- setStringSelection/2,setThemeEnabled/2,setToolTip/2,setVirtualSize/2,
- setVirtualSize/3,setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
- setWindowStyle/2,setWindowStyleFlag/2,setWindowVariant/2,shouldInheritColours/1,
- show/1,show/2,thaw/1,transferDataFromWindow/1,transferDataToWindow/1,
- update/1,updateWindowUI/1,updateWindowUI/2,validate/1,warpPointer/3]).
+ insert/3,insert/4,invalidateBestSize/1,isDoubleBuffered/1,isEmpty/1,
+ isEnabled/1,isExposed/2,isExposed/3,isExposed/5,isRetained/1,isShown/1,
+ isTopLevel/1,layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,
+ move/2,move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,
+ navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,
+ popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,
+ refresh/2,refreshRect/2,refreshRect/3,releaseMouse/1,removeChild/2,
+ reparent/2,screenToClient/1,screenToClient/2,scrollLines/2,scrollPages/2,
+ scrollWindow/3,scrollWindow/4,select/2,setAcceleratorTable/2,setAutoLayout/2,
+ setBackgroundColour/2,setBackgroundStyle/2,setCaret/2,setClientData/3,
+ setClientSize/2,setClientSize/3,setContainingSizer/2,setCursor/2,
+ setDoubleBuffered/2,setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,
+ setFont/2,setForegroundColour/2,setHelpText/2,setId/2,setLabel/2,setMaxSize/2,
+ setMinSize/2,setName/2,setOwnBackgroundColour/2,setOwnFont/2,setOwnForegroundColour/2,
+ setPalette/2,setScrollPos/3,setScrollPos/4,setScrollbar/5,setScrollbar/6,
+ setSelection/2,setSize/2,setSize/3,setSize/5,setSize/6,setSizeHints/2,
+ setSizeHints/3,setSizeHints/4,setSizer/2,setSizer/3,setSizerAndFit/2,
+ setSizerAndFit/3,setString/3,setStringSelection/2,setThemeEnabled/2,
+ setToolTip/2,setTransparent/2,setVirtualSize/2,setVirtualSize/3,setVirtualSizeHints/2,
+ setVirtualSizeHints/3,setVirtualSizeHints/4,setWindowStyle/2,setWindowStyleFlag/2,
+ setWindowVariant/2,shouldInheritColours/1,show/1,show/2,thaw/1,transferDataFromWindow/1,
+ transferDataToWindow/1,update/1,updateWindowUI/1,updateWindowUI/2,
+ validate/1,warpPointer/3]).
-export_type([wxChoice/0]).
%% @hidden
@@ -235,6 +237,14 @@ setLabel(This,Label) -> wxControl:setLabel(This,Label).
getLabel(This) -> wxControl:getLabel(This).
%% From wxWindow
%% @hidden
+setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On).
+%% @hidden
+isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This).
+%% @hidden
+canSetTransparent(This) -> wxWindow:canSetTransparent(This).
+%% @hidden
+setTransparent(This,Alpha) -> wxWindow:setTransparent(This,Alpha).
+%% @hidden
warpPointer(This,X,Y) -> wxWindow:warpPointer(This,X,Y).
%% @hidden
validate(This) -> wxWindow:validate(This).
diff --git a/lib/wx/src/gen/wxChoicebook.erl b/lib/wx/src/gen/wxChoicebook.erl
index 7627662437..37a44a813a 100644
--- a/lib/wx/src/gen/wxChoicebook.erl
+++ b/lib/wx/src/gen/wxChoicebook.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.
@@ -38,10 +38,10 @@
setPageSize/2,setPageText/3,setSelection/2]).
%% inherited exports
--export([cacheBestSize/2,captureMouse/1,center/1,center/2,centerOnParent/1,
- centerOnParent/2,centre/1,centre/2,centreOnParent/1,centreOnParent/2,
- clearBackground/1,clientToScreen/2,clientToScreen/3,close/1,close/2,
- connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
+-export([cacheBestSize/2,canSetTransparent/1,captureMouse/1,center/1,center/2,
+ centerOnParent/1,centerOnParent/2,centre/1,centre/2,centreOnParent/1,
+ centreOnParent/2,clearBackground/1,clientToScreen/2,clientToScreen/3,
+ close/1,close/2,connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
destroyChildren/1,disable/1,disconnect/1,disconnect/2,disconnect/3,
enable/1,enable/2,findWindow/2,fit/1,fitInside/1,freeze/1,getAcceleratorTable/1,
getBackgroundColour/1,getBackgroundStyle/1,getBestSize/1,getCaret/1,
@@ -53,24 +53,25 @@
getScrollRange/2,getScrollThumb/2,getSize/1,getSizer/1,getTextExtent/2,
getTextExtent/3,getToolTip/1,getUpdateRegion/1,getVirtualSize/1,getWindowStyleFlag/1,
getWindowVariant/1,hasCapture/1,hasScrollbar/2,hasTransparentBackground/1,
- hide/1,inheritAttributes/1,initDialog/1,invalidateBestSize/1,isEnabled/1,
- isExposed/2,isExposed/3,isExposed/5,isRetained/1,isShown/1,isTopLevel/1,
- layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,move/2,
- move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,navigate/1,
- navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,popEventHandler/2,
- popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,refresh/2,refreshRect/2,
- refreshRect/3,releaseMouse/1,removeChild/2,reparent/2,screenToClient/1,
- screenToClient/2,scrollLines/2,scrollPages/2,scrollWindow/3,scrollWindow/4,
- setAcceleratorTable/2,setAutoLayout/2,setBackgroundColour/2,setBackgroundStyle/2,
- setCaret/2,setClientSize/2,setClientSize/3,setContainingSizer/2,setCursor/2,
+ hide/1,inheritAttributes/1,initDialog/1,invalidateBestSize/1,isDoubleBuffered/1,
+ isEnabled/1,isExposed/2,isExposed/3,isExposed/5,isRetained/1,isShown/1,
+ isTopLevel/1,layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,
+ move/2,move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,
+ navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,
+ popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,
+ refresh/2,refreshRect/2,refreshRect/3,releaseMouse/1,removeChild/2,
+ reparent/2,screenToClient/1,screenToClient/2,scrollLines/2,scrollPages/2,
+ scrollWindow/3,scrollWindow/4,setAcceleratorTable/2,setAutoLayout/2,
+ setBackgroundColour/2,setBackgroundStyle/2,setCaret/2,setClientSize/2,
+ setClientSize/3,setContainingSizer/2,setCursor/2,setDoubleBuffered/2,
setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,setFont/2,
setForegroundColour/2,setHelpText/2,setId/2,setLabel/2,setMaxSize/2,
setMinSize/2,setName/2,setOwnBackgroundColour/2,setOwnFont/2,setOwnForegroundColour/2,
setPalette/2,setScrollPos/3,setScrollPos/4,setScrollbar/5,setScrollbar/6,
setSize/2,setSize/3,setSize/5,setSize/6,setSizeHints/2,setSizeHints/3,
setSizeHints/4,setSizer/2,setSizer/3,setSizerAndFit/2,setSizerAndFit/3,
- setThemeEnabled/2,setToolTip/2,setVirtualSize/2,setVirtualSize/3,
- setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
+ setThemeEnabled/2,setToolTip/2,setTransparent/2,setVirtualSize/2,
+ setVirtualSize/3,setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
setWindowStyle/2,setWindowStyleFlag/2,setWindowVariant/2,shouldInheritColours/1,
show/1,show/2,thaw/1,transferDataFromWindow/1,transferDataToWindow/1,
update/1,updateWindowUI/1,updateWindowUI/2,validate/1,warpPointer/3]).
@@ -383,6 +384,14 @@ setLabel(This,Label) -> wxControl:setLabel(This,Label).
getLabel(This) -> wxControl:getLabel(This).
%% From wxWindow
%% @hidden
+setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On).
+%% @hidden
+isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This).
+%% @hidden
+canSetTransparent(This) -> wxWindow:canSetTransparent(This).
+%% @hidden
+setTransparent(This,Alpha) -> wxWindow:setTransparent(This,Alpha).
+%% @hidden
warpPointer(This,X,Y) -> wxWindow:warpPointer(This,X,Y).
%% @hidden
validate(This) -> wxWindow:validate(This).
diff --git a/lib/wx/src/gen/wxClientDC.erl b/lib/wx/src/gen/wxClientDC.erl
index 35ad2cc16b..3e9bcd33dd 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.
diff --git a/lib/wx/src/gen/wxClipboard.erl b/lib/wx/src/gen/wxClipboard.erl
index 71bc43a791..cbf9e63067 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.
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..b02a578b9e 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.
diff --git a/lib/wx/src/gen/wxColourData.erl b/lib/wx/src/gen/wxColourData.erl
index 16569cd490..7379592298 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.
diff --git a/lib/wx/src/gen/wxColourDialog.erl b/lib/wx/src/gen/wxColourDialog.erl
index 66cde944c5..15eee30727 100644
--- a/lib/wx/src/gen/wxColourDialog.erl
+++ b/lib/wx/src/gen/wxColourDialog.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.
@@ -34,11 +34,11 @@
-export([create/2,create/3,destroy/1,getColourData/1,new/0,new/1,new/2]).
%% inherited exports
--export([cacheBestSize/2,captureMouse/1,center/1,center/2,centerOnParent/1,
- centerOnParent/2,centerOnScreen/1,centerOnScreen/2,centre/1,centre/2,
- centreOnParent/1,centreOnParent/2,centreOnScreen/1,centreOnScreen/2,
- clearBackground/1,clientToScreen/2,clientToScreen/3,close/1,close/2,
- connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
+-export([cacheBestSize/2,canSetTransparent/1,captureMouse/1,center/1,center/2,
+ centerOnParent/1,centerOnParent/2,centerOnScreen/1,centerOnScreen/2,
+ centre/1,centre/2,centreOnParent/1,centreOnParent/2,centreOnScreen/1,
+ centreOnScreen/2,clearBackground/1,clientToScreen/2,clientToScreen/3,
+ close/1,close/2,connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
createButtonSizer/2,createStdDialogButtonSizer/2,destroyChildren/1,
disable/1,disconnect/1,disconnect/2,disconnect/3,enable/1,enable/2,
endModal/2,findWindow/2,fit/1,fitInside/1,freeze/1,getAcceleratorTable/1,
@@ -53,25 +53,26 @@
getTitle/1,getToolTip/1,getUpdateRegion/1,getVirtualSize/1,getWindowStyleFlag/1,
getWindowVariant/1,hasCapture/1,hasScrollbar/2,hasTransparentBackground/1,
hide/1,iconize/1,iconize/2,inheritAttributes/1,initDialog/1,invalidateBestSize/1,
- isActive/1,isEnabled/1,isExposed/2,isExposed/3,isExposed/5,isFullScreen/1,
- isIconized/1,isMaximized/1,isModal/1,isRetained/1,isShown/1,isTopLevel/1,
- layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,maximize/1,
- maximize/2,move/2,move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,
- navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,
- popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,
- refresh/2,refreshRect/2,refreshRect/3,releaseMouse/1,removeChild/2,
- reparent/2,requestUserAttention/1,requestUserAttention/2,screenToClient/1,
- screenToClient/2,scrollLines/2,scrollPages/2,scrollWindow/3,scrollWindow/4,
- setAcceleratorTable/2,setAffirmativeId/2,setAutoLayout/2,setBackgroundColour/2,
- setBackgroundStyle/2,setCaret/2,setClientSize/2,setClientSize/3,setContainingSizer/2,
- setCursor/2,setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,
- setFont/2,setForegroundColour/2,setHelpText/2,setIcon/2,setIcons/2,
- setId/2,setLabel/2,setMaxSize/2,setMinSize/2,setName/2,setOwnBackgroundColour/2,
- setOwnFont/2,setOwnForegroundColour/2,setPalette/2,setReturnCode/2,
- setScrollPos/3,setScrollPos/4,setScrollbar/5,setScrollbar/6,setShape/2,
- setSize/2,setSize/3,setSize/5,setSize/6,setSizeHints/2,setSizeHints/3,
- setSizeHints/4,setSizer/2,setSizer/3,setSizerAndFit/2,setSizerAndFit/3,
- setThemeEnabled/2,setTitle/2,setToolTip/2,setVirtualSize/2,setVirtualSize/3,
+ isActive/1,isDoubleBuffered/1,isEnabled/1,isExposed/2,isExposed/3,
+ isExposed/5,isFullScreen/1,isIconized/1,isMaximized/1,isModal/1,isRetained/1,
+ isShown/1,isTopLevel/1,layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,
+ makeModal/2,maximize/1,maximize/2,move/2,move/3,move/4,moveAfterInTabOrder/2,
+ moveBeforeInTabOrder/2,navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1,
+ popEventHandler/1,popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4,
+ raise/1,refresh/1,refresh/2,refreshRect/2,refreshRect/3,releaseMouse/1,
+ removeChild/2,reparent/2,requestUserAttention/1,requestUserAttention/2,
+ screenToClient/1,screenToClient/2,scrollLines/2,scrollPages/2,scrollWindow/3,
+ scrollWindow/4,setAcceleratorTable/2,setAffirmativeId/2,setAutoLayout/2,
+ setBackgroundColour/2,setBackgroundStyle/2,setCaret/2,setClientSize/2,
+ setClientSize/3,setContainingSizer/2,setCursor/2,setDoubleBuffered/2,
+ setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,setFont/2,
+ setForegroundColour/2,setHelpText/2,setIcon/2,setIcons/2,setId/2,setLabel/2,
+ setMaxSize/2,setMinSize/2,setName/2,setOwnBackgroundColour/2,setOwnFont/2,
+ setOwnForegroundColour/2,setPalette/2,setReturnCode/2,setScrollPos/3,
+ setScrollPos/4,setScrollbar/5,setScrollbar/6,setShape/2,setSize/2,
+ setSize/3,setSize/5,setSize/6,setSizeHints/2,setSizeHints/3,setSizeHints/4,
+ setSizer/2,setSizer/3,setSizerAndFit/2,setSizerAndFit/3,setThemeEnabled/2,
+ setTitle/2,setToolTip/2,setTransparent/2,setVirtualSize/2,setVirtualSize/3,
setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
setWindowStyle/2,setWindowStyleFlag/2,setWindowVariant/2,shouldInheritColours/1,
show/1,show/2,showFullScreen/2,showFullScreen/3,showModal/1,thaw/1,
@@ -222,6 +223,14 @@ getIcons(This) -> wxTopLevelWindow:getIcons(This).
getIcon(This) -> wxTopLevelWindow:getIcon(This).
%% From wxWindow
%% @hidden
+setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On).
+%% @hidden
+isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This).
+%% @hidden
+canSetTransparent(This) -> wxWindow:canSetTransparent(This).
+%% @hidden
+setTransparent(This,Alpha) -> wxWindow:setTransparent(This,Alpha).
+%% @hidden
warpPointer(This,X,Y) -> wxWindow:warpPointer(This,X,Y).
%% @hidden
validate(This) -> wxWindow:validate(This).
diff --git a/lib/wx/src/gen/wxColourPickerCtrl.erl b/lib/wx/src/gen/wxColourPickerCtrl.erl
index a6ca31c06d..486441c005 100644
--- a/lib/wx/src/gen/wxColourPickerCtrl.erl
+++ b/lib/wx/src/gen/wxColourPickerCtrl.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.
@@ -34,10 +34,10 @@
-export([create/3,create/4,destroy/1,getColour/1,new/0,new/2,new/3,setColour/2]).
%% inherited exports
--export([cacheBestSize/2,captureMouse/1,center/1,center/2,centerOnParent/1,
- centerOnParent/2,centre/1,centre/2,centreOnParent/1,centreOnParent/2,
- clearBackground/1,clientToScreen/2,clientToScreen/3,close/1,close/2,
- connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
+-export([cacheBestSize/2,canSetTransparent/1,captureMouse/1,center/1,center/2,
+ centerOnParent/1,centerOnParent/2,centre/1,centre/2,centreOnParent/1,
+ centreOnParent/2,clearBackground/1,clientToScreen/2,clientToScreen/3,
+ close/1,close/2,connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
destroyChildren/1,disable/1,disconnect/1,disconnect/2,disconnect/3,
enable/1,enable/2,findWindow/2,fit/1,fitInside/1,freeze/1,getAcceleratorTable/1,
getBackgroundColour/1,getBackgroundStyle/1,getBestSize/1,getCaret/1,
@@ -50,30 +50,31 @@
getSize/1,getSizer/1,getTextCtrl/1,getTextCtrlProportion/1,getTextExtent/2,
getTextExtent/3,getToolTip/1,getUpdateRegion/1,getVirtualSize/1,getWindowStyleFlag/1,
getWindowVariant/1,hasCapture/1,hasScrollbar/2,hasTextCtrl/1,hasTransparentBackground/1,
- hide/1,inheritAttributes/1,initDialog/1,invalidateBestSize/1,isEnabled/1,
- isExposed/2,isExposed/3,isExposed/5,isPickerCtrlGrowable/1,isRetained/1,
- isShown/1,isTextCtrlGrowable/1,isTopLevel/1,layout/1,lineDown/1,lineUp/1,
- lower/1,makeModal/1,makeModal/2,move/2,move/3,move/4,moveAfterInTabOrder/2,
- moveBeforeInTabOrder/2,navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1,
- popEventHandler/1,popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4,
- raise/1,refresh/1,refresh/2,refreshRect/2,refreshRect/3,releaseMouse/1,
- removeChild/2,reparent/2,screenToClient/1,screenToClient/2,scrollLines/2,
- scrollPages/2,scrollWindow/3,scrollWindow/4,setAcceleratorTable/2,
- setAutoLayout/2,setBackgroundColour/2,setBackgroundStyle/2,setCaret/2,
- setClientSize/2,setClientSize/3,setContainingSizer/2,setCursor/2,
- setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,setFont/2,
- setForegroundColour/2,setHelpText/2,setId/2,setInternalMargin/2,setLabel/2,
- setMaxSize/2,setMinSize/2,setName/2,setOwnBackgroundColour/2,setOwnFont/2,
- setOwnForegroundColour/2,setPalette/2,setPickerCtrlGrowable/1,setPickerCtrlGrowable/2,
- setPickerCtrlProportion/2,setScrollPos/3,setScrollPos/4,setScrollbar/5,
- setScrollbar/6,setSize/2,setSize/3,setSize/5,setSize/6,setSizeHints/2,
- setSizeHints/3,setSizeHints/4,setSizer/2,setSizer/3,setSizerAndFit/2,
- setSizerAndFit/3,setTextCtrlGrowable/1,setTextCtrlGrowable/2,setTextCtrlProportion/2,
- setThemeEnabled/2,setToolTip/2,setVirtualSize/2,setVirtualSize/3,
- setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
- setWindowStyle/2,setWindowStyleFlag/2,setWindowVariant/2,shouldInheritColours/1,
- show/1,show/2,thaw/1,transferDataFromWindow/1,transferDataToWindow/1,
- update/1,updateWindowUI/1,updateWindowUI/2,validate/1,warpPointer/3]).
+ hide/1,inheritAttributes/1,initDialog/1,invalidateBestSize/1,isDoubleBuffered/1,
+ isEnabled/1,isExposed/2,isExposed/3,isExposed/5,isPickerCtrlGrowable/1,
+ isRetained/1,isShown/1,isTextCtrlGrowable/1,isTopLevel/1,layout/1,
+ lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,move/2,move/3,move/4,
+ moveAfterInTabOrder/2,moveBeforeInTabOrder/2,navigate/1,navigate/2,
+ pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,popEventHandler/2,
+ popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,refresh/2,refreshRect/2,
+ refreshRect/3,releaseMouse/1,removeChild/2,reparent/2,screenToClient/1,
+ screenToClient/2,scrollLines/2,scrollPages/2,scrollWindow/3,scrollWindow/4,
+ setAcceleratorTable/2,setAutoLayout/2,setBackgroundColour/2,setBackgroundStyle/2,
+ setCaret/2,setClientSize/2,setClientSize/3,setContainingSizer/2,setCursor/2,
+ setDoubleBuffered/2,setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,
+ setFont/2,setForegroundColour/2,setHelpText/2,setId/2,setInternalMargin/2,
+ setLabel/2,setMaxSize/2,setMinSize/2,setName/2,setOwnBackgroundColour/2,
+ setOwnFont/2,setOwnForegroundColour/2,setPalette/2,setPickerCtrlGrowable/1,
+ setPickerCtrlGrowable/2,setPickerCtrlProportion/2,setScrollPos/3,
+ setScrollPos/4,setScrollbar/5,setScrollbar/6,setSize/2,setSize/3,setSize/5,
+ setSize/6,setSizeHints/2,setSizeHints/3,setSizeHints/4,setSizer/2,
+ setSizer/3,setSizerAndFit/2,setSizerAndFit/3,setTextCtrlGrowable/1,
+ setTextCtrlGrowable/2,setTextCtrlProportion/2,setThemeEnabled/2,
+ setToolTip/2,setTransparent/2,setVirtualSize/2,setVirtualSize/3,setVirtualSizeHints/2,
+ setVirtualSizeHints/3,setVirtualSizeHints/4,setWindowStyle/2,setWindowStyleFlag/2,
+ setWindowVariant/2,shouldInheritColours/1,show/1,show/2,thaw/1,transferDataFromWindow/1,
+ transferDataToWindow/1,update/1,updateWindowUI/1,updateWindowUI/2,
+ validate/1,warpPointer/3]).
-export_type([wxColourPickerCtrl/0]).
%% @hidden
@@ -220,6 +221,14 @@ setLabel(This,Label) -> wxControl:setLabel(This,Label).
getLabel(This) -> wxControl:getLabel(This).
%% From wxWindow
%% @hidden
+setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On).
+%% @hidden
+isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This).
+%% @hidden
+canSetTransparent(This) -> wxWindow:canSetTransparent(This).
+%% @hidden
+setTransparent(This,Alpha) -> wxWindow:setTransparent(This,Alpha).
+%% @hidden
warpPointer(This,X,Y) -> wxWindow:warpPointer(This,X,Y).
%% @hidden
validate(This) -> wxWindow:validate(This).
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 0e34c72934..37d6e71605 100644
--- a/lib/wx/src/gen/wxComboBox.erl
+++ b/lib/wx/src/gen/wxComboBox.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.
@@ -37,45 +37,47 @@
setSelection/2,setSelection/3,setValue/2,undo/1]).
%% inherited exports
--export([append/2,append/3,appendStrings/2,cacheBestSize/2,captureMouse/1,center/1,
- center/2,centerOnParent/1,centerOnParent/2,centre/1,centre/2,centreOnParent/1,
- centreOnParent/2,clear/1,clearBackground/1,clientToScreen/2,clientToScreen/3,
- close/1,close/2,connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
- delete/2,destroyChildren/1,disable/1,disconnect/1,disconnect/2,disconnect/3,
- enable/1,enable/2,findString/2,findString/3,findWindow/2,fit/1,fitInside/1,
- freeze/1,getAcceleratorTable/1,getBackgroundColour/1,getBackgroundStyle/1,
- getBestSize/1,getCaret/1,getCharHeight/1,getCharWidth/1,getChildren/1,
- getClientData/2,getClientSize/1,getContainingSizer/1,getCount/1,getCursor/1,
- getDropTarget/1,getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1,
- getGrandParent/1,getHandle/1,getHelpText/1,getId/1,getLabel/1,getMaxSize/1,
- getMinSize/1,getName/1,getParent/1,getPosition/1,getRect/1,getScreenPosition/1,
+-export([append/2,append/3,appendStrings/2,cacheBestSize/2,canSetTransparent/1,
+ captureMouse/1,center/1,center/2,centerOnParent/1,centerOnParent/2,
+ centre/1,centre/2,centreOnParent/1,centreOnParent/2,clear/1,clearBackground/1,
+ clientToScreen/2,clientToScreen/3,close/1,close/2,connect/2,connect/3,
+ convertDialogToPixels/2,convertPixelsToDialog/2,delete/2,destroyChildren/1,
+ disable/1,disconnect/1,disconnect/2,disconnect/3,enable/1,enable/2,
+ findString/2,findString/3,findWindow/2,fit/1,fitInside/1,freeze/1,getAcceleratorTable/1,
+ getBackgroundColour/1,getBackgroundStyle/1,getBestSize/1,getCaret/1,
+ getCharHeight/1,getCharWidth/1,getChildren/1,getClientData/2,getClientSize/1,
+ getContainingSizer/1,getCount/1,getCursor/1,getDropTarget/1,getEventHandler/1,
+ getExtraStyle/1,getFont/1,getForegroundColour/1,getGrandParent/1,
+ getHandle/1,getHelpText/1,getId/1,getLabel/1,getMaxSize/1,getMinSize/1,
+ getName/1,getParent/1,getPosition/1,getRect/1,getScreenPosition/1,
getScreenRect/1,getScrollPos/2,getScrollRange/2,getScrollThumb/2,
getSelection/1,getSize/1,getSizer/1,getString/2,getStringSelection/1,
getTextExtent/2,getTextExtent/3,getToolTip/1,getUpdateRegion/1,getVirtualSize/1,
getWindowStyleFlag/1,getWindowVariant/1,hasCapture/1,hasScrollbar/2,
hasTransparentBackground/1,hide/1,inheritAttributes/1,initDialog/1,
- insert/3,insert/4,invalidateBestSize/1,isEmpty/1,isEnabled/1,isExposed/2,
- isExposed/3,isExposed/5,isRetained/1,isShown/1,isTopLevel/1,layout/1,
- lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,move/2,move/3,move/4,
- moveAfterInTabOrder/2,moveBeforeInTabOrder/2,navigate/1,navigate/2,
- pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,popEventHandler/2,
- popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,refresh/2,refreshRect/2,
- refreshRect/3,releaseMouse/1,removeChild/2,reparent/2,screenToClient/1,
- screenToClient/2,scrollLines/2,scrollPages/2,scrollWindow/3,scrollWindow/4,
- select/2,setAcceleratorTable/2,setAutoLayout/2,setBackgroundColour/2,
- setBackgroundStyle/2,setCaret/2,setClientData/3,setClientSize/2,setClientSize/3,
- setContainingSizer/2,setCursor/2,setDropTarget/2,setExtraStyle/2,
- setFocus/1,setFocusFromKbd/1,setFont/2,setForegroundColour/2,setHelpText/2,
- setId/2,setLabel/2,setMaxSize/2,setMinSize/2,setName/2,setOwnBackgroundColour/2,
- setOwnFont/2,setOwnForegroundColour/2,setPalette/2,setScrollPos/3,
- setScrollPos/4,setScrollbar/5,setScrollbar/6,setSize/2,setSize/3,setSize/5,
- setSize/6,setSizeHints/2,setSizeHints/3,setSizeHints/4,setSizer/2,
- setSizer/3,setSizerAndFit/2,setSizerAndFit/3,setString/3,setStringSelection/2,
- setThemeEnabled/2,setToolTip/2,setVirtualSize/2,setVirtualSize/3,
- setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
- setWindowStyle/2,setWindowStyleFlag/2,setWindowVariant/2,shouldInheritColours/1,
- show/1,show/2,thaw/1,transferDataFromWindow/1,transferDataToWindow/1,
- update/1,updateWindowUI/1,updateWindowUI/2,validate/1,warpPointer/3]).
+ insert/3,insert/4,invalidateBestSize/1,isDoubleBuffered/1,isEmpty/1,
+ isEnabled/1,isExposed/2,isExposed/3,isExposed/5,isRetained/1,isShown/1,
+ isTopLevel/1,layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,
+ move/2,move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,
+ navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,
+ popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,
+ refresh/2,refreshRect/2,refreshRect/3,releaseMouse/1,removeChild/2,
+ reparent/2,screenToClient/1,screenToClient/2,scrollLines/2,scrollPages/2,
+ scrollWindow/3,scrollWindow/4,select/2,setAcceleratorTable/2,setAutoLayout/2,
+ setBackgroundColour/2,setBackgroundStyle/2,setCaret/2,setClientData/3,
+ setClientSize/2,setClientSize/3,setContainingSizer/2,setCursor/2,
+ setDoubleBuffered/2,setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,
+ setFont/2,setForegroundColour/2,setHelpText/2,setId/2,setLabel/2,setMaxSize/2,
+ setMinSize/2,setName/2,setOwnBackgroundColour/2,setOwnFont/2,setOwnForegroundColour/2,
+ setPalette/2,setScrollPos/3,setScrollPos/4,setScrollbar/5,setScrollbar/6,
+ setSize/2,setSize/3,setSize/5,setSize/6,setSizeHints/2,setSizeHints/3,
+ setSizeHints/4,setSizer/2,setSizer/3,setSizerAndFit/2,setSizerAndFit/3,
+ setString/3,setStringSelection/2,setThemeEnabled/2,setToolTip/2,setTransparent/2,
+ setVirtualSize/2,setVirtualSize/3,setVirtualSizeHints/2,setVirtualSizeHints/3,
+ setVirtualSizeHints/4,setWindowStyle/2,setWindowStyleFlag/2,setWindowVariant/2,
+ shouldInheritColours/1,show/1,show/2,thaw/1,transferDataFromWindow/1,
+ transferDataToWindow/1,update/1,updateWindowUI/1,updateWindowUI/2,
+ validate/1,warpPointer/3]).
-export_type([wxComboBox/0]).
%% @hidden
@@ -370,6 +372,14 @@ setLabel(This,Label) -> wxControl:setLabel(This,Label).
getLabel(This) -> wxControl:getLabel(This).
%% From wxWindow
%% @hidden
+setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On).
+%% @hidden
+isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This).
+%% @hidden
+canSetTransparent(This) -> wxWindow:canSetTransparent(This).
+%% @hidden
+setTransparent(This,Alpha) -> wxWindow:setTransparent(This,Alpha).
+%% @hidden
warpPointer(This,X,Y) -> wxWindow:warpPointer(This,X,Y).
%% @hidden
validate(This) -> wxWindow:validate(This).
diff --git a/lib/wx/src/gen/wxCommandEvent.erl b/lib/wx/src/gen/wxCommandEvent.erl
index acd0d9e2d9..a36aa3aa95 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.
diff --git a/lib/wx/src/gen/wxContextMenuEvent.erl b/lib/wx/src/gen/wxContextMenuEvent.erl
index 4e0729922b..94a7a2948d 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.
diff --git a/lib/wx/src/gen/wxControl.erl b/lib/wx/src/gen/wxControl.erl
index f0fb88e3eb..f84ec34b02 100644
--- a/lib/wx/src/gen/wxControl.erl
+++ b/lib/wx/src/gen/wxControl.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.
@@ -32,10 +32,10 @@
-export([getLabel/1,setLabel/2]).
%% inherited exports
--export([cacheBestSize/2,captureMouse/1,center/1,center/2,centerOnParent/1,
- centerOnParent/2,centre/1,centre/2,centreOnParent/1,centreOnParent/2,
- clearBackground/1,clientToScreen/2,clientToScreen/3,close/1,close/2,
- connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
+-export([cacheBestSize/2,canSetTransparent/1,captureMouse/1,center/1,center/2,
+ centerOnParent/1,centerOnParent/2,centre/1,centre/2,centreOnParent/1,
+ centreOnParent/2,clearBackground/1,clientToScreen/2,clientToScreen/3,
+ close/1,close/2,connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
destroyChildren/1,disable/1,disconnect/1,disconnect/2,disconnect/3,
enable/1,enable/2,findWindow/2,fit/1,fitInside/1,freeze/1,getAcceleratorTable/1,
getBackgroundColour/1,getBackgroundStyle/1,getBestSize/1,getCaret/1,
@@ -47,24 +47,25 @@
getScrollThumb/2,getSize/1,getSizer/1,getTextExtent/2,getTextExtent/3,
getToolTip/1,getUpdateRegion/1,getVirtualSize/1,getWindowStyleFlag/1,
getWindowVariant/1,hasCapture/1,hasScrollbar/2,hasTransparentBackground/1,
- hide/1,inheritAttributes/1,initDialog/1,invalidateBestSize/1,isEnabled/1,
- isExposed/2,isExposed/3,isExposed/5,isRetained/1,isShown/1,isTopLevel/1,
- layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,move/2,
- move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,navigate/1,
- navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,popEventHandler/2,
- popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,refresh/2,refreshRect/2,
- refreshRect/3,releaseMouse/1,removeChild/2,reparent/2,screenToClient/1,
- screenToClient/2,scrollLines/2,scrollPages/2,scrollWindow/3,scrollWindow/4,
- setAcceleratorTable/2,setAutoLayout/2,setBackgroundColour/2,setBackgroundStyle/2,
- setCaret/2,setClientSize/2,setClientSize/3,setContainingSizer/2,setCursor/2,
+ hide/1,inheritAttributes/1,initDialog/1,invalidateBestSize/1,isDoubleBuffered/1,
+ isEnabled/1,isExposed/2,isExposed/3,isExposed/5,isRetained/1,isShown/1,
+ isTopLevel/1,layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,
+ move/2,move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,
+ navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,
+ popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,
+ refresh/2,refreshRect/2,refreshRect/3,releaseMouse/1,removeChild/2,
+ reparent/2,screenToClient/1,screenToClient/2,scrollLines/2,scrollPages/2,
+ scrollWindow/3,scrollWindow/4,setAcceleratorTable/2,setAutoLayout/2,
+ setBackgroundColour/2,setBackgroundStyle/2,setCaret/2,setClientSize/2,
+ setClientSize/3,setContainingSizer/2,setCursor/2,setDoubleBuffered/2,
setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,setFont/2,
setForegroundColour/2,setHelpText/2,setId/2,setMaxSize/2,setMinSize/2,
setName/2,setOwnBackgroundColour/2,setOwnFont/2,setOwnForegroundColour/2,
setPalette/2,setScrollPos/3,setScrollPos/4,setScrollbar/5,setScrollbar/6,
setSize/2,setSize/3,setSize/5,setSize/6,setSizeHints/2,setSizeHints/3,
setSizeHints/4,setSizer/2,setSizer/3,setSizerAndFit/2,setSizerAndFit/3,
- setThemeEnabled/2,setToolTip/2,setVirtualSize/2,setVirtualSize/3,
- setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
+ setThemeEnabled/2,setToolTip/2,setTransparent/2,setVirtualSize/2,
+ setVirtualSize/3,setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
setWindowStyle/2,setWindowStyleFlag/2,setWindowVariant/2,shouldInheritColours/1,
show/1,show/2,thaw/1,transferDataFromWindow/1,transferDataToWindow/1,
update/1,updateWindowUI/1,updateWindowUI/2,validate/1,warpPointer/3]).
@@ -96,6 +97,14 @@ setLabel(#wx_ref{type=ThisT,ref=ThisRef},Label)
%% From wxWindow
%% @hidden
+setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On).
+%% @hidden
+isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This).
+%% @hidden
+canSetTransparent(This) -> wxWindow:canSetTransparent(This).
+%% @hidden
+setTransparent(This,Alpha) -> wxWindow:setTransparent(This,Alpha).
+%% @hidden
warpPointer(This,X,Y) -> wxWindow:warpPointer(This,X,Y).
%% @hidden
validate(This) -> wxWindow:validate(This).
diff --git a/lib/wx/src/gen/wxControlWithItems.erl b/lib/wx/src/gen/wxControlWithItems.erl
index 5f4ed9701b..d52c7917a2 100644
--- a/lib/wx/src/gen/wxControlWithItems.erl
+++ b/lib/wx/src/gen/wxControlWithItems.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,10 +36,10 @@
setString/3,setStringSelection/2]).
%% inherited exports
--export([cacheBestSize/2,captureMouse/1,center/1,center/2,centerOnParent/1,
- centerOnParent/2,centre/1,centre/2,centreOnParent/1,centreOnParent/2,
- clearBackground/1,clientToScreen/2,clientToScreen/3,close/1,close/2,
- connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
+-export([cacheBestSize/2,canSetTransparent/1,captureMouse/1,center/1,center/2,
+ centerOnParent/1,centerOnParent/2,centre/1,centre/2,centreOnParent/1,
+ centreOnParent/2,clearBackground/1,clientToScreen/2,clientToScreen/3,
+ close/1,close/2,connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
destroyChildren/1,disable/1,disconnect/1,disconnect/2,disconnect/3,
enable/1,enable/2,findWindow/2,fit/1,fitInside/1,freeze/1,getAcceleratorTable/1,
getBackgroundColour/1,getBackgroundStyle/1,getBestSize/1,getCaret/1,
@@ -51,24 +51,25 @@
getScrollRange/2,getScrollThumb/2,getSize/1,getSizer/1,getTextExtent/2,
getTextExtent/3,getToolTip/1,getUpdateRegion/1,getVirtualSize/1,getWindowStyleFlag/1,
getWindowVariant/1,hasCapture/1,hasScrollbar/2,hasTransparentBackground/1,
- hide/1,inheritAttributes/1,initDialog/1,invalidateBestSize/1,isEnabled/1,
- isExposed/2,isExposed/3,isExposed/5,isRetained/1,isShown/1,isTopLevel/1,
- layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,move/2,
- move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,navigate/1,
- navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,popEventHandler/2,
- popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,refresh/2,refreshRect/2,
- refreshRect/3,releaseMouse/1,removeChild/2,reparent/2,screenToClient/1,
- screenToClient/2,scrollLines/2,scrollPages/2,scrollWindow/3,scrollWindow/4,
- setAcceleratorTable/2,setAutoLayout/2,setBackgroundColour/2,setBackgroundStyle/2,
- setCaret/2,setClientSize/2,setClientSize/3,setContainingSizer/2,setCursor/2,
+ hide/1,inheritAttributes/1,initDialog/1,invalidateBestSize/1,isDoubleBuffered/1,
+ isEnabled/1,isExposed/2,isExposed/3,isExposed/5,isRetained/1,isShown/1,
+ isTopLevel/1,layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,
+ move/2,move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,
+ navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,
+ popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,
+ refresh/2,refreshRect/2,refreshRect/3,releaseMouse/1,removeChild/2,
+ reparent/2,screenToClient/1,screenToClient/2,scrollLines/2,scrollPages/2,
+ scrollWindow/3,scrollWindow/4,setAcceleratorTable/2,setAutoLayout/2,
+ setBackgroundColour/2,setBackgroundStyle/2,setCaret/2,setClientSize/2,
+ setClientSize/3,setContainingSizer/2,setCursor/2,setDoubleBuffered/2,
setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,setFont/2,
setForegroundColour/2,setHelpText/2,setId/2,setLabel/2,setMaxSize/2,
setMinSize/2,setName/2,setOwnBackgroundColour/2,setOwnFont/2,setOwnForegroundColour/2,
setPalette/2,setScrollPos/3,setScrollPos/4,setScrollbar/5,setScrollbar/6,
setSize/2,setSize/3,setSize/5,setSize/6,setSizeHints/2,setSizeHints/3,
setSizeHints/4,setSizer/2,setSizer/3,setSizerAndFit/2,setSizerAndFit/3,
- setThemeEnabled/2,setToolTip/2,setVirtualSize/2,setVirtualSize/3,
- setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
+ setThemeEnabled/2,setToolTip/2,setTransparent/2,setVirtualSize/2,
+ setVirtualSize/3,setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
setWindowStyle/2,setWindowStyleFlag/2,setWindowVariant/2,shouldInheritColours/1,
show/1,show/2,thaw/1,transferDataFromWindow/1,transferDataToWindow/1,
update/1,updateWindowUI/1,updateWindowUI/2,validate/1,warpPointer/3]).
@@ -278,6 +279,14 @@ setLabel(This,Label) -> wxControl:setLabel(This,Label).
getLabel(This) -> wxControl:getLabel(This).
%% From wxWindow
%% @hidden
+setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On).
+%% @hidden
+isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This).
+%% @hidden
+canSetTransparent(This) -> wxWindow:canSetTransparent(This).
+%% @hidden
+setTransparent(This,Alpha) -> wxWindow:setTransparent(This,Alpha).
+%% @hidden
warpPointer(This,X,Y) -> wxWindow:warpPointer(This,X,Y).
%% @hidden
validate(This) -> wxWindow:validate(This).
diff --git a/lib/wx/src/gen/wxCursor.erl b/lib/wx/src/gen/wxCursor.erl
index ee5fec7d4a..7f32b140e6 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.
diff --git a/lib/wx/src/gen/wxDC.erl b/lib/wx/src/gen/wxDC.erl
index dad4126493..263ad76526 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.
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 73df9c1395..057f91d4e8 100644
--- a/lib/wx/src/gen/wxDatePickerCtrl.erl
+++ b/lib/wx/src/gen/wxDatePickerCtrl.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.
@@ -34,10 +34,10 @@
-export([destroy/1,getRange/3,getValue/1,new/0,new/2,new/3,setRange/3,setValue/2]).
%% inherited exports
--export([cacheBestSize/2,captureMouse/1,center/1,center/2,centerOnParent/1,
- centerOnParent/2,centre/1,centre/2,centreOnParent/1,centreOnParent/2,
- clearBackground/1,clientToScreen/2,clientToScreen/3,close/1,close/2,
- connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
+-export([cacheBestSize/2,canSetTransparent/1,captureMouse/1,center/1,center/2,
+ centerOnParent/1,centerOnParent/2,centre/1,centre/2,centreOnParent/1,
+ centreOnParent/2,clearBackground/1,clientToScreen/2,clientToScreen/3,
+ close/1,close/2,connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
destroyChildren/1,disable/1,disconnect/1,disconnect/2,disconnect/3,
enable/1,enable/2,findWindow/2,fit/1,fitInside/1,freeze/1,getAcceleratorTable/1,
getBackgroundColour/1,getBackgroundStyle/1,getBestSize/1,getCaret/1,
@@ -50,30 +50,31 @@
getSize/1,getSizer/1,getTextCtrl/1,getTextCtrlProportion/1,getTextExtent/2,
getTextExtent/3,getToolTip/1,getUpdateRegion/1,getVirtualSize/1,getWindowStyleFlag/1,
getWindowVariant/1,hasCapture/1,hasScrollbar/2,hasTextCtrl/1,hasTransparentBackground/1,
- hide/1,inheritAttributes/1,initDialog/1,invalidateBestSize/1,isEnabled/1,
- isExposed/2,isExposed/3,isExposed/5,isPickerCtrlGrowable/1,isRetained/1,
- isShown/1,isTextCtrlGrowable/1,isTopLevel/1,layout/1,lineDown/1,lineUp/1,
- lower/1,makeModal/1,makeModal/2,move/2,move/3,move/4,moveAfterInTabOrder/2,
- moveBeforeInTabOrder/2,navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1,
- popEventHandler/1,popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4,
- raise/1,refresh/1,refresh/2,refreshRect/2,refreshRect/3,releaseMouse/1,
- removeChild/2,reparent/2,screenToClient/1,screenToClient/2,scrollLines/2,
- scrollPages/2,scrollWindow/3,scrollWindow/4,setAcceleratorTable/2,
- setAutoLayout/2,setBackgroundColour/2,setBackgroundStyle/2,setCaret/2,
- setClientSize/2,setClientSize/3,setContainingSizer/2,setCursor/2,
- setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,setFont/2,
- setForegroundColour/2,setHelpText/2,setId/2,setInternalMargin/2,setLabel/2,
- setMaxSize/2,setMinSize/2,setName/2,setOwnBackgroundColour/2,setOwnFont/2,
- setOwnForegroundColour/2,setPalette/2,setPickerCtrlGrowable/1,setPickerCtrlGrowable/2,
- setPickerCtrlProportion/2,setScrollPos/3,setScrollPos/4,setScrollbar/5,
- setScrollbar/6,setSize/2,setSize/3,setSize/5,setSize/6,setSizeHints/2,
- setSizeHints/3,setSizeHints/4,setSizer/2,setSizer/3,setSizerAndFit/2,
- setSizerAndFit/3,setTextCtrlGrowable/1,setTextCtrlGrowable/2,setTextCtrlProportion/2,
- setThemeEnabled/2,setToolTip/2,setVirtualSize/2,setVirtualSize/3,
- setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
- setWindowStyle/2,setWindowStyleFlag/2,setWindowVariant/2,shouldInheritColours/1,
- show/1,show/2,thaw/1,transferDataFromWindow/1,transferDataToWindow/1,
- update/1,updateWindowUI/1,updateWindowUI/2,validate/1,warpPointer/3]).
+ hide/1,inheritAttributes/1,initDialog/1,invalidateBestSize/1,isDoubleBuffered/1,
+ isEnabled/1,isExposed/2,isExposed/3,isExposed/5,isPickerCtrlGrowable/1,
+ isRetained/1,isShown/1,isTextCtrlGrowable/1,isTopLevel/1,layout/1,
+ lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,move/2,move/3,move/4,
+ moveAfterInTabOrder/2,moveBeforeInTabOrder/2,navigate/1,navigate/2,
+ pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,popEventHandler/2,
+ popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,refresh/2,refreshRect/2,
+ refreshRect/3,releaseMouse/1,removeChild/2,reparent/2,screenToClient/1,
+ screenToClient/2,scrollLines/2,scrollPages/2,scrollWindow/3,scrollWindow/4,
+ setAcceleratorTable/2,setAutoLayout/2,setBackgroundColour/2,setBackgroundStyle/2,
+ setCaret/2,setClientSize/2,setClientSize/3,setContainingSizer/2,setCursor/2,
+ setDoubleBuffered/2,setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,
+ setFont/2,setForegroundColour/2,setHelpText/2,setId/2,setInternalMargin/2,
+ setLabel/2,setMaxSize/2,setMinSize/2,setName/2,setOwnBackgroundColour/2,
+ setOwnFont/2,setOwnForegroundColour/2,setPalette/2,setPickerCtrlGrowable/1,
+ setPickerCtrlGrowable/2,setPickerCtrlProportion/2,setScrollPos/3,
+ setScrollPos/4,setScrollbar/5,setScrollbar/6,setSize/2,setSize/3,setSize/5,
+ setSize/6,setSizeHints/2,setSizeHints/3,setSizeHints/4,setSizer/2,
+ setSizer/3,setSizerAndFit/2,setSizerAndFit/3,setTextCtrlGrowable/1,
+ setTextCtrlGrowable/2,setTextCtrlProportion/2,setThemeEnabled/2,
+ setToolTip/2,setTransparent/2,setVirtualSize/2,setVirtualSize/3,setVirtualSizeHints/2,
+ setVirtualSizeHints/3,setVirtualSizeHints/4,setWindowStyle/2,setWindowStyleFlag/2,
+ setWindowVariant/2,shouldInheritColours/1,show/1,show/2,thaw/1,transferDataFromWindow/1,
+ transferDataToWindow/1,update/1,updateWindowUI/1,updateWindowUI/2,
+ validate/1,warpPointer/3]).
-export_type([wxDatePickerCtrl/0]).
%% @hidden
@@ -196,6 +197,14 @@ setLabel(This,Label) -> wxControl:setLabel(This,Label).
getLabel(This) -> wxControl:getLabel(This).
%% From wxWindow
%% @hidden
+setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On).
+%% @hidden
+isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This).
+%% @hidden
+canSetTransparent(This) -> wxWindow:canSetTransparent(This).
+%% @hidden
+setTransparent(This,Alpha) -> wxWindow:setTransparent(This,Alpha).
+%% @hidden
warpPointer(This,X,Y) -> wxWindow:warpPointer(This,X,Y).
%% @hidden
validate(This) -> wxWindow:validate(This).
diff --git a/lib/wx/src/gen/wxDialog.erl b/lib/wx/src/gen/wxDialog.erl
index aa4df5888c..c3f4828c68 100644
--- a/lib/wx/src/gen/wxDialog.erl
+++ b/lib/wx/src/gen/wxDialog.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.
@@ -35,11 +35,11 @@
new/0,new/3,new/4,setAffirmativeId/2,setReturnCode/2,show/1,show/2,showModal/1]).
%% inherited exports
--export([cacheBestSize/2,captureMouse/1,center/1,center/2,centerOnParent/1,
- centerOnParent/2,centerOnScreen/1,centerOnScreen/2,centre/1,centre/2,
- centreOnParent/1,centreOnParent/2,centreOnScreen/1,centreOnScreen/2,
- clearBackground/1,clientToScreen/2,clientToScreen/3,close/1,close/2,
- connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
+-export([cacheBestSize/2,canSetTransparent/1,captureMouse/1,center/1,center/2,
+ centerOnParent/1,centerOnParent/2,centerOnScreen/1,centerOnScreen/2,
+ centre/1,centre/2,centreOnParent/1,centreOnParent/2,centreOnScreen/1,
+ centreOnScreen/2,clearBackground/1,clientToScreen/2,clientToScreen/3,
+ close/1,close/2,connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
destroyChildren/1,disable/1,disconnect/1,disconnect/2,disconnect/3,
enable/1,enable/2,findWindow/2,fit/1,fitInside/1,freeze/1,getAcceleratorTable/1,
getBackgroundColour/1,getBackgroundStyle/1,getBestSize/1,getCaret/1,
@@ -53,29 +53,30 @@
getVirtualSize/1,getWindowStyleFlag/1,getWindowVariant/1,hasCapture/1,
hasScrollbar/2,hasTransparentBackground/1,hide/1,iconize/1,iconize/2,
inheritAttributes/1,initDialog/1,invalidateBestSize/1,isActive/1,
- isEnabled/1,isExposed/2,isExposed/3,isExposed/5,isFullScreen/1,isIconized/1,
- isMaximized/1,isRetained/1,isShown/1,isTopLevel/1,layout/1,lineDown/1,
- lineUp/1,lower/1,makeModal/1,makeModal/2,maximize/1,maximize/2,move/2,
- move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,navigate/1,
- navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,popEventHandler/2,
- popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,refresh/2,refreshRect/2,
- refreshRect/3,releaseMouse/1,removeChild/2,reparent/2,requestUserAttention/1,
- requestUserAttention/2,screenToClient/1,screenToClient/2,scrollLines/2,
- scrollPages/2,scrollWindow/3,scrollWindow/4,setAcceleratorTable/2,
- setAutoLayout/2,setBackgroundColour/2,setBackgroundStyle/2,setCaret/2,
- setClientSize/2,setClientSize/3,setContainingSizer/2,setCursor/2,
- setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,setFont/2,
- setForegroundColour/2,setHelpText/2,setIcon/2,setIcons/2,setId/2,setLabel/2,
- setMaxSize/2,setMinSize/2,setName/2,setOwnBackgroundColour/2,setOwnFont/2,
- setOwnForegroundColour/2,setPalette/2,setScrollPos/3,setScrollPos/4,
- setScrollbar/5,setScrollbar/6,setShape/2,setSize/2,setSize/3,setSize/5,
- setSize/6,setSizeHints/2,setSizeHints/3,setSizeHints/4,setSizer/2,
- setSizer/3,setSizerAndFit/2,setSizerAndFit/3,setThemeEnabled/2,setTitle/2,
- setToolTip/2,setVirtualSize/2,setVirtualSize/3,setVirtualSizeHints/2,
- setVirtualSizeHints/3,setVirtualSizeHints/4,setWindowStyle/2,setWindowStyleFlag/2,
- setWindowVariant/2,shouldInheritColours/1,showFullScreen/2,showFullScreen/3,
- thaw/1,transferDataFromWindow/1,transferDataToWindow/1,update/1,updateWindowUI/1,
- updateWindowUI/2,validate/1,warpPointer/3]).
+ isDoubleBuffered/1,isEnabled/1,isExposed/2,isExposed/3,isExposed/5,
+ isFullScreen/1,isIconized/1,isMaximized/1,isRetained/1,isShown/1,isTopLevel/1,
+ layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,maximize/1,
+ maximize/2,move/2,move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,
+ navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,
+ popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,
+ refresh/2,refreshRect/2,refreshRect/3,releaseMouse/1,removeChild/2,
+ reparent/2,requestUserAttention/1,requestUserAttention/2,screenToClient/1,
+ screenToClient/2,scrollLines/2,scrollPages/2,scrollWindow/3,scrollWindow/4,
+ setAcceleratorTable/2,setAutoLayout/2,setBackgroundColour/2,setBackgroundStyle/2,
+ setCaret/2,setClientSize/2,setClientSize/3,setContainingSizer/2,setCursor/2,
+ setDoubleBuffered/2,setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,
+ setFont/2,setForegroundColour/2,setHelpText/2,setIcon/2,setIcons/2,
+ setId/2,setLabel/2,setMaxSize/2,setMinSize/2,setName/2,setOwnBackgroundColour/2,
+ setOwnFont/2,setOwnForegroundColour/2,setPalette/2,setScrollPos/3,
+ setScrollPos/4,setScrollbar/5,setScrollbar/6,setShape/2,setSize/2,
+ setSize/3,setSize/5,setSize/6,setSizeHints/2,setSizeHints/3,setSizeHints/4,
+ setSizer/2,setSizer/3,setSizerAndFit/2,setSizerAndFit/3,setThemeEnabled/2,
+ setTitle/2,setToolTip/2,setTransparent/2,setVirtualSize/2,setVirtualSize/3,
+ setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
+ setWindowStyle/2,setWindowStyleFlag/2,setWindowVariant/2,shouldInheritColours/1,
+ showFullScreen/2,showFullScreen/3,thaw/1,transferDataFromWindow/1,
+ transferDataToWindow/1,update/1,updateWindowUI/1,updateWindowUI/2,
+ validate/1,warpPointer/3]).
-export_type([wxDialog/0]).
%% @hidden
@@ -297,6 +298,14 @@ getIcons(This) -> wxTopLevelWindow:getIcons(This).
getIcon(This) -> wxTopLevelWindow:getIcon(This).
%% From wxWindow
%% @hidden
+setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On).
+%% @hidden
+isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This).
+%% @hidden
+canSetTransparent(This) -> wxWindow:canSetTransparent(This).
+%% @hidden
+setTransparent(This,Alpha) -> wxWindow:setTransparent(This,Alpha).
+%% @hidden
warpPointer(This,X,Y) -> wxWindow:warpPointer(This,X,Y).
%% @hidden
validate(This) -> wxWindow:validate(This).
diff --git a/lib/wx/src/gen/wxDirDialog.erl b/lib/wx/src/gen/wxDirDialog.erl
index cf1d558b00..aa7a419bcd 100644
--- a/lib/wx/src/gen/wxDirDialog.erl
+++ b/lib/wx/src/gen/wxDirDialog.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.
@@ -34,11 +34,11 @@
-export([destroy/1,getMessage/1,getPath/1,new/1,new/2,setMessage/2,setPath/2]).
%% inherited exports
--export([cacheBestSize/2,captureMouse/1,center/1,center/2,centerOnParent/1,
- centerOnParent/2,centerOnScreen/1,centerOnScreen/2,centre/1,centre/2,
- centreOnParent/1,centreOnParent/2,centreOnScreen/1,centreOnScreen/2,
- clearBackground/1,clientToScreen/2,clientToScreen/3,close/1,close/2,
- connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
+-export([cacheBestSize/2,canSetTransparent/1,captureMouse/1,center/1,center/2,
+ centerOnParent/1,centerOnParent/2,centerOnScreen/1,centerOnScreen/2,
+ centre/1,centre/2,centreOnParent/1,centreOnParent/2,centreOnScreen/1,
+ centreOnScreen/2,clearBackground/1,clientToScreen/2,clientToScreen/3,
+ close/1,close/2,connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
createButtonSizer/2,createStdDialogButtonSizer/2,destroyChildren/1,
disable/1,disconnect/1,disconnect/2,disconnect/3,enable/1,enable/2,
endModal/2,findWindow/2,fit/1,fitInside/1,freeze/1,getAcceleratorTable/1,
@@ -53,25 +53,26 @@
getTitle/1,getToolTip/1,getUpdateRegion/1,getVirtualSize/1,getWindowStyleFlag/1,
getWindowVariant/1,hasCapture/1,hasScrollbar/2,hasTransparentBackground/1,
hide/1,iconize/1,iconize/2,inheritAttributes/1,initDialog/1,invalidateBestSize/1,
- isActive/1,isEnabled/1,isExposed/2,isExposed/3,isExposed/5,isFullScreen/1,
- isIconized/1,isMaximized/1,isModal/1,isRetained/1,isShown/1,isTopLevel/1,
- layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,maximize/1,
- maximize/2,move/2,move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,
- navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,
- popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,
- refresh/2,refreshRect/2,refreshRect/3,releaseMouse/1,removeChild/2,
- reparent/2,requestUserAttention/1,requestUserAttention/2,screenToClient/1,
- screenToClient/2,scrollLines/2,scrollPages/2,scrollWindow/3,scrollWindow/4,
- setAcceleratorTable/2,setAffirmativeId/2,setAutoLayout/2,setBackgroundColour/2,
- setBackgroundStyle/2,setCaret/2,setClientSize/2,setClientSize/3,setContainingSizer/2,
- setCursor/2,setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,
- setFont/2,setForegroundColour/2,setHelpText/2,setIcon/2,setIcons/2,
- setId/2,setLabel/2,setMaxSize/2,setMinSize/2,setName/2,setOwnBackgroundColour/2,
- setOwnFont/2,setOwnForegroundColour/2,setPalette/2,setReturnCode/2,
- setScrollPos/3,setScrollPos/4,setScrollbar/5,setScrollbar/6,setShape/2,
- setSize/2,setSize/3,setSize/5,setSize/6,setSizeHints/2,setSizeHints/3,
- setSizeHints/4,setSizer/2,setSizer/3,setSizerAndFit/2,setSizerAndFit/3,
- setThemeEnabled/2,setTitle/2,setToolTip/2,setVirtualSize/2,setVirtualSize/3,
+ isActive/1,isDoubleBuffered/1,isEnabled/1,isExposed/2,isExposed/3,
+ isExposed/5,isFullScreen/1,isIconized/1,isMaximized/1,isModal/1,isRetained/1,
+ isShown/1,isTopLevel/1,layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,
+ makeModal/2,maximize/1,maximize/2,move/2,move/3,move/4,moveAfterInTabOrder/2,
+ moveBeforeInTabOrder/2,navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1,
+ popEventHandler/1,popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4,
+ raise/1,refresh/1,refresh/2,refreshRect/2,refreshRect/3,releaseMouse/1,
+ removeChild/2,reparent/2,requestUserAttention/1,requestUserAttention/2,
+ screenToClient/1,screenToClient/2,scrollLines/2,scrollPages/2,scrollWindow/3,
+ scrollWindow/4,setAcceleratorTable/2,setAffirmativeId/2,setAutoLayout/2,
+ setBackgroundColour/2,setBackgroundStyle/2,setCaret/2,setClientSize/2,
+ setClientSize/3,setContainingSizer/2,setCursor/2,setDoubleBuffered/2,
+ setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,setFont/2,
+ setForegroundColour/2,setHelpText/2,setIcon/2,setIcons/2,setId/2,setLabel/2,
+ setMaxSize/2,setMinSize/2,setName/2,setOwnBackgroundColour/2,setOwnFont/2,
+ setOwnForegroundColour/2,setPalette/2,setReturnCode/2,setScrollPos/3,
+ setScrollPos/4,setScrollbar/5,setScrollbar/6,setShape/2,setSize/2,
+ setSize/3,setSize/5,setSize/6,setSizeHints/2,setSizeHints/3,setSizeHints/4,
+ setSizer/2,setSizer/3,setSizerAndFit/2,setSizerAndFit/3,setThemeEnabled/2,
+ setTitle/2,setToolTip/2,setTransparent/2,setVirtualSize/2,setVirtualSize/3,
setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
setWindowStyle/2,setWindowStyleFlag/2,setWindowVariant/2,shouldInheritColours/1,
show/1,show/2,showFullScreen/2,showFullScreen/3,showModal/1,thaw/1,
@@ -230,6 +231,14 @@ getIcons(This) -> wxTopLevelWindow:getIcons(This).
getIcon(This) -> wxTopLevelWindow:getIcon(This).
%% From wxWindow
%% @hidden
+setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On).
+%% @hidden
+isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This).
+%% @hidden
+canSetTransparent(This) -> wxWindow:canSetTransparent(This).
+%% @hidden
+setTransparent(This,Alpha) -> wxWindow:setTransparent(This,Alpha).
+%% @hidden
warpPointer(This,X,Y) -> wxWindow:warpPointer(This,X,Y).
%% @hidden
validate(This) -> wxWindow:validate(This).
diff --git a/lib/wx/src/gen/wxDirPickerCtrl.erl b/lib/wx/src/gen/wxDirPickerCtrl.erl
index 1db48b467c..fea7ee71a1 100644
--- a/lib/wx/src/gen/wxDirPickerCtrl.erl
+++ b/lib/wx/src/gen/wxDirPickerCtrl.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.
@@ -34,10 +34,10 @@
-export([create/3,create/4,destroy/1,getPath/1,new/0,new/2,new/3,setPath/2]).
%% inherited exports
--export([cacheBestSize/2,captureMouse/1,center/1,center/2,centerOnParent/1,
- centerOnParent/2,centre/1,centre/2,centreOnParent/1,centreOnParent/2,
- clearBackground/1,clientToScreen/2,clientToScreen/3,close/1,close/2,
- connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
+-export([cacheBestSize/2,canSetTransparent/1,captureMouse/1,center/1,center/2,
+ centerOnParent/1,centerOnParent/2,centre/1,centre/2,centreOnParent/1,
+ centreOnParent/2,clearBackground/1,clientToScreen/2,clientToScreen/3,
+ close/1,close/2,connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
destroyChildren/1,disable/1,disconnect/1,disconnect/2,disconnect/3,
enable/1,enable/2,findWindow/2,fit/1,fitInside/1,freeze/1,getAcceleratorTable/1,
getBackgroundColour/1,getBackgroundStyle/1,getBestSize/1,getCaret/1,
@@ -50,30 +50,31 @@
getSize/1,getSizer/1,getTextCtrl/1,getTextCtrlProportion/1,getTextExtent/2,
getTextExtent/3,getToolTip/1,getUpdateRegion/1,getVirtualSize/1,getWindowStyleFlag/1,
getWindowVariant/1,hasCapture/1,hasScrollbar/2,hasTextCtrl/1,hasTransparentBackground/1,
- hide/1,inheritAttributes/1,initDialog/1,invalidateBestSize/1,isEnabled/1,
- isExposed/2,isExposed/3,isExposed/5,isPickerCtrlGrowable/1,isRetained/1,
- isShown/1,isTextCtrlGrowable/1,isTopLevel/1,layout/1,lineDown/1,lineUp/1,
- lower/1,makeModal/1,makeModal/2,move/2,move/3,move/4,moveAfterInTabOrder/2,
- moveBeforeInTabOrder/2,navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1,
- popEventHandler/1,popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4,
- raise/1,refresh/1,refresh/2,refreshRect/2,refreshRect/3,releaseMouse/1,
- removeChild/2,reparent/2,screenToClient/1,screenToClient/2,scrollLines/2,
- scrollPages/2,scrollWindow/3,scrollWindow/4,setAcceleratorTable/2,
- setAutoLayout/2,setBackgroundColour/2,setBackgroundStyle/2,setCaret/2,
- setClientSize/2,setClientSize/3,setContainingSizer/2,setCursor/2,
- setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,setFont/2,
- setForegroundColour/2,setHelpText/2,setId/2,setInternalMargin/2,setLabel/2,
- setMaxSize/2,setMinSize/2,setName/2,setOwnBackgroundColour/2,setOwnFont/2,
- setOwnForegroundColour/2,setPalette/2,setPickerCtrlGrowable/1,setPickerCtrlGrowable/2,
- setPickerCtrlProportion/2,setScrollPos/3,setScrollPos/4,setScrollbar/5,
- setScrollbar/6,setSize/2,setSize/3,setSize/5,setSize/6,setSizeHints/2,
- setSizeHints/3,setSizeHints/4,setSizer/2,setSizer/3,setSizerAndFit/2,
- setSizerAndFit/3,setTextCtrlGrowable/1,setTextCtrlGrowable/2,setTextCtrlProportion/2,
- setThemeEnabled/2,setToolTip/2,setVirtualSize/2,setVirtualSize/3,
- setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
- setWindowStyle/2,setWindowStyleFlag/2,setWindowVariant/2,shouldInheritColours/1,
- show/1,show/2,thaw/1,transferDataFromWindow/1,transferDataToWindow/1,
- update/1,updateWindowUI/1,updateWindowUI/2,validate/1,warpPointer/3]).
+ hide/1,inheritAttributes/1,initDialog/1,invalidateBestSize/1,isDoubleBuffered/1,
+ isEnabled/1,isExposed/2,isExposed/3,isExposed/5,isPickerCtrlGrowable/1,
+ isRetained/1,isShown/1,isTextCtrlGrowable/1,isTopLevel/1,layout/1,
+ lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,move/2,move/3,move/4,
+ moveAfterInTabOrder/2,moveBeforeInTabOrder/2,navigate/1,navigate/2,
+ pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,popEventHandler/2,
+ popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,refresh/2,refreshRect/2,
+ refreshRect/3,releaseMouse/1,removeChild/2,reparent/2,screenToClient/1,
+ screenToClient/2,scrollLines/2,scrollPages/2,scrollWindow/3,scrollWindow/4,
+ setAcceleratorTable/2,setAutoLayout/2,setBackgroundColour/2,setBackgroundStyle/2,
+ setCaret/2,setClientSize/2,setClientSize/3,setContainingSizer/2,setCursor/2,
+ setDoubleBuffered/2,setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,
+ setFont/2,setForegroundColour/2,setHelpText/2,setId/2,setInternalMargin/2,
+ setLabel/2,setMaxSize/2,setMinSize/2,setName/2,setOwnBackgroundColour/2,
+ setOwnFont/2,setOwnForegroundColour/2,setPalette/2,setPickerCtrlGrowable/1,
+ setPickerCtrlGrowable/2,setPickerCtrlProportion/2,setScrollPos/3,
+ setScrollPos/4,setScrollbar/5,setScrollbar/6,setSize/2,setSize/3,setSize/5,
+ setSize/6,setSizeHints/2,setSizeHints/3,setSizeHints/4,setSizer/2,
+ setSizer/3,setSizerAndFit/2,setSizerAndFit/3,setTextCtrlGrowable/1,
+ setTextCtrlGrowable/2,setTextCtrlProportion/2,setThemeEnabled/2,
+ setToolTip/2,setTransparent/2,setVirtualSize/2,setVirtualSize/3,setVirtualSizeHints/2,
+ setVirtualSizeHints/3,setVirtualSizeHints/4,setWindowStyle/2,setWindowStyleFlag/2,
+ setWindowVariant/2,shouldInheritColours/1,show/1,show/2,thaw/1,transferDataFromWindow/1,
+ transferDataToWindow/1,update/1,updateWindowUI/1,updateWindowUI/2,
+ validate/1,warpPointer/3]).
-export_type([wxDirPickerCtrl/0]).
%% @hidden
@@ -213,6 +214,14 @@ setLabel(This,Label) -> wxControl:setLabel(This,Label).
getLabel(This) -> wxControl:getLabel(This).
%% From wxWindow
%% @hidden
+setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On).
+%% @hidden
+isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This).
+%% @hidden
+canSetTransparent(This) -> wxWindow:canSetTransparent(This).
+%% @hidden
+setTransparent(This,Alpha) -> wxWindow:setTransparent(This,Alpha).
+%% @hidden
warpPointer(This,X,Y) -> wxWindow:warpPointer(This,X,Y).
%% @hidden
validate(This) -> wxWindow:validate(This).
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..b896c938c2 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.
diff --git a/lib/wx/src/gen/wxEvtHandler.erl b/lib/wx/src/gen/wxEvtHandler.erl
index 2d0a87f4dd..d330075101 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.
diff --git a/lib/wx/src/gen/wxFileDataObject.erl b/lib/wx/src/gen/wxFileDataObject.erl
index b132e2291b..15f7d149e1 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.
diff --git a/lib/wx/src/gen/wxFileDialog.erl b/lib/wx/src/gen/wxFileDialog.erl
index d3dac3ba2d..36ee6463ae 100644
--- a/lib/wx/src/gen/wxFileDialog.erl
+++ b/lib/wx/src/gen/wxFileDialog.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,11 +36,11 @@
setFilename/2,setFilterIndex/2,setMessage/2,setPath/2,setWildcard/2]).
%% inherited exports
--export([cacheBestSize/2,captureMouse/1,center/1,center/2,centerOnParent/1,
- centerOnParent/2,centerOnScreen/1,centerOnScreen/2,centre/1,centre/2,
- centreOnParent/1,centreOnParent/2,centreOnScreen/1,centreOnScreen/2,
- clearBackground/1,clientToScreen/2,clientToScreen/3,close/1,close/2,
- connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
+-export([cacheBestSize/2,canSetTransparent/1,captureMouse/1,center/1,center/2,
+ centerOnParent/1,centerOnParent/2,centerOnScreen/1,centerOnScreen/2,
+ centre/1,centre/2,centreOnParent/1,centreOnParent/2,centreOnScreen/1,
+ centreOnScreen/2,clearBackground/1,clientToScreen/2,clientToScreen/3,
+ close/1,close/2,connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
createButtonSizer/2,createStdDialogButtonSizer/2,destroyChildren/1,
disable/1,disconnect/1,disconnect/2,disconnect/3,enable/1,enable/2,
endModal/2,findWindow/2,fit/1,fitInside/1,freeze/1,getAcceleratorTable/1,
@@ -55,25 +55,26 @@
getTitle/1,getToolTip/1,getUpdateRegion/1,getVirtualSize/1,getWindowStyleFlag/1,
getWindowVariant/1,hasCapture/1,hasScrollbar/2,hasTransparentBackground/1,
hide/1,iconize/1,iconize/2,inheritAttributes/1,initDialog/1,invalidateBestSize/1,
- isActive/1,isEnabled/1,isExposed/2,isExposed/3,isExposed/5,isFullScreen/1,
- isIconized/1,isMaximized/1,isModal/1,isRetained/1,isShown/1,isTopLevel/1,
- layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,maximize/1,
- maximize/2,move/2,move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,
- navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,
- popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,
- refresh/2,refreshRect/2,refreshRect/3,releaseMouse/1,removeChild/2,
- reparent/2,requestUserAttention/1,requestUserAttention/2,screenToClient/1,
- screenToClient/2,scrollLines/2,scrollPages/2,scrollWindow/3,scrollWindow/4,
- setAcceleratorTable/2,setAffirmativeId/2,setAutoLayout/2,setBackgroundColour/2,
- setBackgroundStyle/2,setCaret/2,setClientSize/2,setClientSize/3,setContainingSizer/2,
- setCursor/2,setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,
- setFont/2,setForegroundColour/2,setHelpText/2,setIcon/2,setIcons/2,
- setId/2,setLabel/2,setMaxSize/2,setMinSize/2,setName/2,setOwnBackgroundColour/2,
- setOwnFont/2,setOwnForegroundColour/2,setPalette/2,setReturnCode/2,
- setScrollPos/3,setScrollPos/4,setScrollbar/5,setScrollbar/6,setShape/2,
- setSize/2,setSize/3,setSize/5,setSize/6,setSizeHints/2,setSizeHints/3,
- setSizeHints/4,setSizer/2,setSizer/3,setSizerAndFit/2,setSizerAndFit/3,
- setThemeEnabled/2,setTitle/2,setToolTip/2,setVirtualSize/2,setVirtualSize/3,
+ isActive/1,isDoubleBuffered/1,isEnabled/1,isExposed/2,isExposed/3,
+ isExposed/5,isFullScreen/1,isIconized/1,isMaximized/1,isModal/1,isRetained/1,
+ isShown/1,isTopLevel/1,layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,
+ makeModal/2,maximize/1,maximize/2,move/2,move/3,move/4,moveAfterInTabOrder/2,
+ moveBeforeInTabOrder/2,navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1,
+ popEventHandler/1,popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4,
+ raise/1,refresh/1,refresh/2,refreshRect/2,refreshRect/3,releaseMouse/1,
+ removeChild/2,reparent/2,requestUserAttention/1,requestUserAttention/2,
+ screenToClient/1,screenToClient/2,scrollLines/2,scrollPages/2,scrollWindow/3,
+ scrollWindow/4,setAcceleratorTable/2,setAffirmativeId/2,setAutoLayout/2,
+ setBackgroundColour/2,setBackgroundStyle/2,setCaret/2,setClientSize/2,
+ setClientSize/3,setContainingSizer/2,setCursor/2,setDoubleBuffered/2,
+ setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,setFont/2,
+ setForegroundColour/2,setHelpText/2,setIcon/2,setIcons/2,setId/2,setLabel/2,
+ setMaxSize/2,setMinSize/2,setName/2,setOwnBackgroundColour/2,setOwnFont/2,
+ setOwnForegroundColour/2,setPalette/2,setReturnCode/2,setScrollPos/3,
+ setScrollPos/4,setScrollbar/5,setScrollbar/6,setShape/2,setSize/2,
+ setSize/3,setSize/5,setSize/6,setSizeHints/2,setSizeHints/3,setSizeHints/4,
+ setSizer/2,setSizer/3,setSizerAndFit/2,setSizerAndFit/3,setThemeEnabled/2,
+ setTitle/2,setToolTip/2,setTransparent/2,setVirtualSize/2,setVirtualSize/3,
setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
setWindowStyle/2,setWindowStyleFlag/2,setWindowVariant/2,shouldInheritColours/1,
show/1,show/2,showFullScreen/2,showFullScreen/3,showModal/1,thaw/1,
@@ -323,6 +324,14 @@ getIcons(This) -> wxTopLevelWindow:getIcons(This).
getIcon(This) -> wxTopLevelWindow:getIcon(This).
%% From wxWindow
%% @hidden
+setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On).
+%% @hidden
+isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This).
+%% @hidden
+canSetTransparent(This) -> wxWindow:canSetTransparent(This).
+%% @hidden
+setTransparent(This,Alpha) -> wxWindow:setTransparent(This,Alpha).
+%% @hidden
warpPointer(This,X,Y) -> wxWindow:warpPointer(This,X,Y).
%% @hidden
validate(This) -> wxWindow:validate(This).
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 d781bdf000..2b57a5927b 100644
--- a/lib/wx/src/gen/wxFilePickerCtrl.erl
+++ b/lib/wx/src/gen/wxFilePickerCtrl.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.
@@ -34,10 +34,10 @@
-export([create/3,create/4,destroy/1,getPath/1,new/0,new/2,new/3,setPath/2]).
%% inherited exports
--export([cacheBestSize/2,captureMouse/1,center/1,center/2,centerOnParent/1,
- centerOnParent/2,centre/1,centre/2,centreOnParent/1,centreOnParent/2,
- clearBackground/1,clientToScreen/2,clientToScreen/3,close/1,close/2,
- connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
+-export([cacheBestSize/2,canSetTransparent/1,captureMouse/1,center/1,center/2,
+ centerOnParent/1,centerOnParent/2,centre/1,centre/2,centreOnParent/1,
+ centreOnParent/2,clearBackground/1,clientToScreen/2,clientToScreen/3,
+ close/1,close/2,connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
destroyChildren/1,disable/1,disconnect/1,disconnect/2,disconnect/3,
enable/1,enable/2,findWindow/2,fit/1,fitInside/1,freeze/1,getAcceleratorTable/1,
getBackgroundColour/1,getBackgroundStyle/1,getBestSize/1,getCaret/1,
@@ -50,30 +50,31 @@
getSize/1,getSizer/1,getTextCtrl/1,getTextCtrlProportion/1,getTextExtent/2,
getTextExtent/3,getToolTip/1,getUpdateRegion/1,getVirtualSize/1,getWindowStyleFlag/1,
getWindowVariant/1,hasCapture/1,hasScrollbar/2,hasTextCtrl/1,hasTransparentBackground/1,
- hide/1,inheritAttributes/1,initDialog/1,invalidateBestSize/1,isEnabled/1,
- isExposed/2,isExposed/3,isExposed/5,isPickerCtrlGrowable/1,isRetained/1,
- isShown/1,isTextCtrlGrowable/1,isTopLevel/1,layout/1,lineDown/1,lineUp/1,
- lower/1,makeModal/1,makeModal/2,move/2,move/3,move/4,moveAfterInTabOrder/2,
- moveBeforeInTabOrder/2,navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1,
- popEventHandler/1,popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4,
- raise/1,refresh/1,refresh/2,refreshRect/2,refreshRect/3,releaseMouse/1,
- removeChild/2,reparent/2,screenToClient/1,screenToClient/2,scrollLines/2,
- scrollPages/2,scrollWindow/3,scrollWindow/4,setAcceleratorTable/2,
- setAutoLayout/2,setBackgroundColour/2,setBackgroundStyle/2,setCaret/2,
- setClientSize/2,setClientSize/3,setContainingSizer/2,setCursor/2,
- setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,setFont/2,
- setForegroundColour/2,setHelpText/2,setId/2,setInternalMargin/2,setLabel/2,
- setMaxSize/2,setMinSize/2,setName/2,setOwnBackgroundColour/2,setOwnFont/2,
- setOwnForegroundColour/2,setPalette/2,setPickerCtrlGrowable/1,setPickerCtrlGrowable/2,
- setPickerCtrlProportion/2,setScrollPos/3,setScrollPos/4,setScrollbar/5,
- setScrollbar/6,setSize/2,setSize/3,setSize/5,setSize/6,setSizeHints/2,
- setSizeHints/3,setSizeHints/4,setSizer/2,setSizer/3,setSizerAndFit/2,
- setSizerAndFit/3,setTextCtrlGrowable/1,setTextCtrlGrowable/2,setTextCtrlProportion/2,
- setThemeEnabled/2,setToolTip/2,setVirtualSize/2,setVirtualSize/3,
- setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
- setWindowStyle/2,setWindowStyleFlag/2,setWindowVariant/2,shouldInheritColours/1,
- show/1,show/2,thaw/1,transferDataFromWindow/1,transferDataToWindow/1,
- update/1,updateWindowUI/1,updateWindowUI/2,validate/1,warpPointer/3]).
+ hide/1,inheritAttributes/1,initDialog/1,invalidateBestSize/1,isDoubleBuffered/1,
+ isEnabled/1,isExposed/2,isExposed/3,isExposed/5,isPickerCtrlGrowable/1,
+ isRetained/1,isShown/1,isTextCtrlGrowable/1,isTopLevel/1,layout/1,
+ lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,move/2,move/3,move/4,
+ moveAfterInTabOrder/2,moveBeforeInTabOrder/2,navigate/1,navigate/2,
+ pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,popEventHandler/2,
+ popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,refresh/2,refreshRect/2,
+ refreshRect/3,releaseMouse/1,removeChild/2,reparent/2,screenToClient/1,
+ screenToClient/2,scrollLines/2,scrollPages/2,scrollWindow/3,scrollWindow/4,
+ setAcceleratorTable/2,setAutoLayout/2,setBackgroundColour/2,setBackgroundStyle/2,
+ setCaret/2,setClientSize/2,setClientSize/3,setContainingSizer/2,setCursor/2,
+ setDoubleBuffered/2,setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,
+ setFont/2,setForegroundColour/2,setHelpText/2,setId/2,setInternalMargin/2,
+ setLabel/2,setMaxSize/2,setMinSize/2,setName/2,setOwnBackgroundColour/2,
+ setOwnFont/2,setOwnForegroundColour/2,setPalette/2,setPickerCtrlGrowable/1,
+ setPickerCtrlGrowable/2,setPickerCtrlProportion/2,setScrollPos/3,
+ setScrollPos/4,setScrollbar/5,setScrollbar/6,setSize/2,setSize/3,setSize/5,
+ setSize/6,setSizeHints/2,setSizeHints/3,setSizeHints/4,setSizer/2,
+ setSizer/3,setSizerAndFit/2,setSizerAndFit/3,setTextCtrlGrowable/1,
+ setTextCtrlGrowable/2,setTextCtrlProportion/2,setThemeEnabled/2,
+ setToolTip/2,setTransparent/2,setVirtualSize/2,setVirtualSize/3,setVirtualSizeHints/2,
+ setVirtualSizeHints/3,setVirtualSizeHints/4,setWindowStyle/2,setWindowStyleFlag/2,
+ setWindowVariant/2,shouldInheritColours/1,show/1,show/2,thaw/1,transferDataFromWindow/1,
+ transferDataToWindow/1,update/1,updateWindowUI/1,updateWindowUI/2,
+ validate/1,warpPointer/3]).
-export_type([wxFilePickerCtrl/0]).
%% @hidden
@@ -217,6 +218,14 @@ setLabel(This,Label) -> wxControl:setLabel(This,Label).
getLabel(This) -> wxControl:getLabel(This).
%% From wxWindow
%% @hidden
+setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On).
+%% @hidden
+isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This).
+%% @hidden
+canSetTransparent(This) -> wxWindow:canSetTransparent(This).
+%% @hidden
+setTransparent(This,Alpha) -> wxWindow:setTransparent(This,Alpha).
+%% @hidden
warpPointer(This,X,Y) -> wxWindow:warpPointer(This,X,Y).
%% @hidden
validate(This) -> wxWindow:validate(This).
diff --git a/lib/wx/src/gen/wxFindReplaceData.erl b/lib/wx/src/gen/wxFindReplaceData.erl
index c31f945d73..851ad2d76f 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.
diff --git a/lib/wx/src/gen/wxFindReplaceDialog.erl b/lib/wx/src/gen/wxFindReplaceDialog.erl
index a14a05fb8e..d265e232b3 100644
--- a/lib/wx/src/gen/wxFindReplaceDialog.erl
+++ b/lib/wx/src/gen/wxFindReplaceDialog.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.
@@ -34,11 +34,11 @@
-export([create/4,create/5,destroy/1,getData/1,new/0,new/3,new/4]).
%% inherited exports
--export([cacheBestSize/2,captureMouse/1,center/1,center/2,centerOnParent/1,
- centerOnParent/2,centerOnScreen/1,centerOnScreen/2,centre/1,centre/2,
- centreOnParent/1,centreOnParent/2,centreOnScreen/1,centreOnScreen/2,
- clearBackground/1,clientToScreen/2,clientToScreen/3,close/1,close/2,
- connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
+-export([cacheBestSize/2,canSetTransparent/1,captureMouse/1,center/1,center/2,
+ centerOnParent/1,centerOnParent/2,centerOnScreen/1,centerOnScreen/2,
+ centre/1,centre/2,centreOnParent/1,centreOnParent/2,centreOnScreen/1,
+ centreOnScreen/2,clearBackground/1,clientToScreen/2,clientToScreen/3,
+ close/1,close/2,connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
createButtonSizer/2,createStdDialogButtonSizer/2,destroyChildren/1,
disable/1,disconnect/1,disconnect/2,disconnect/3,enable/1,enable/2,
endModal/2,findWindow/2,fit/1,fitInside/1,freeze/1,getAcceleratorTable/1,
@@ -53,25 +53,26 @@
getTitle/1,getToolTip/1,getUpdateRegion/1,getVirtualSize/1,getWindowStyleFlag/1,
getWindowVariant/1,hasCapture/1,hasScrollbar/2,hasTransparentBackground/1,
hide/1,iconize/1,iconize/2,inheritAttributes/1,initDialog/1,invalidateBestSize/1,
- isActive/1,isEnabled/1,isExposed/2,isExposed/3,isExposed/5,isFullScreen/1,
- isIconized/1,isMaximized/1,isModal/1,isRetained/1,isShown/1,isTopLevel/1,
- layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,maximize/1,
- maximize/2,move/2,move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,
- navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,
- popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,
- refresh/2,refreshRect/2,refreshRect/3,releaseMouse/1,removeChild/2,
- reparent/2,requestUserAttention/1,requestUserAttention/2,screenToClient/1,
- screenToClient/2,scrollLines/2,scrollPages/2,scrollWindow/3,scrollWindow/4,
- setAcceleratorTable/2,setAffirmativeId/2,setAutoLayout/2,setBackgroundColour/2,
- setBackgroundStyle/2,setCaret/2,setClientSize/2,setClientSize/3,setContainingSizer/2,
- setCursor/2,setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,
- setFont/2,setForegroundColour/2,setHelpText/2,setIcon/2,setIcons/2,
- setId/2,setLabel/2,setMaxSize/2,setMinSize/2,setName/2,setOwnBackgroundColour/2,
- setOwnFont/2,setOwnForegroundColour/2,setPalette/2,setReturnCode/2,
- setScrollPos/3,setScrollPos/4,setScrollbar/5,setScrollbar/6,setShape/2,
- setSize/2,setSize/3,setSize/5,setSize/6,setSizeHints/2,setSizeHints/3,
- setSizeHints/4,setSizer/2,setSizer/3,setSizerAndFit/2,setSizerAndFit/3,
- setThemeEnabled/2,setTitle/2,setToolTip/2,setVirtualSize/2,setVirtualSize/3,
+ isActive/1,isDoubleBuffered/1,isEnabled/1,isExposed/2,isExposed/3,
+ isExposed/5,isFullScreen/1,isIconized/1,isMaximized/1,isModal/1,isRetained/1,
+ isShown/1,isTopLevel/1,layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,
+ makeModal/2,maximize/1,maximize/2,move/2,move/3,move/4,moveAfterInTabOrder/2,
+ moveBeforeInTabOrder/2,navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1,
+ popEventHandler/1,popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4,
+ raise/1,refresh/1,refresh/2,refreshRect/2,refreshRect/3,releaseMouse/1,
+ removeChild/2,reparent/2,requestUserAttention/1,requestUserAttention/2,
+ screenToClient/1,screenToClient/2,scrollLines/2,scrollPages/2,scrollWindow/3,
+ scrollWindow/4,setAcceleratorTable/2,setAffirmativeId/2,setAutoLayout/2,
+ setBackgroundColour/2,setBackgroundStyle/2,setCaret/2,setClientSize/2,
+ setClientSize/3,setContainingSizer/2,setCursor/2,setDoubleBuffered/2,
+ setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,setFont/2,
+ setForegroundColour/2,setHelpText/2,setIcon/2,setIcons/2,setId/2,setLabel/2,
+ setMaxSize/2,setMinSize/2,setName/2,setOwnBackgroundColour/2,setOwnFont/2,
+ setOwnForegroundColour/2,setPalette/2,setReturnCode/2,setScrollPos/3,
+ setScrollPos/4,setScrollbar/5,setScrollbar/6,setShape/2,setSize/2,
+ setSize/3,setSize/5,setSize/6,setSizeHints/2,setSizeHints/3,setSizeHints/4,
+ setSizer/2,setSizer/3,setSizerAndFit/2,setSizerAndFit/3,setThemeEnabled/2,
+ setTitle/2,setToolTip/2,setTransparent/2,setVirtualSize/2,setVirtualSize/3,
setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
setWindowStyle/2,setWindowStyleFlag/2,setWindowVariant/2,shouldInheritColours/1,
show/1,show/2,showFullScreen/2,showFullScreen/3,showModal/1,thaw/1,
@@ -226,6 +227,14 @@ getIcons(This) -> wxTopLevelWindow:getIcons(This).
getIcon(This) -> wxTopLevelWindow:getIcon(This).
%% From wxWindow
%% @hidden
+setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On).
+%% @hidden
+isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This).
+%% @hidden
+canSetTransparent(This) -> wxWindow:canSetTransparent(This).
+%% @hidden
+setTransparent(This,Alpha) -> wxWindow:setTransparent(This,Alpha).
+%% @hidden
warpPointer(This,X,Y) -> wxWindow:warpPointer(This,X,Y).
%% @hidden
validate(This) -> wxWindow:validate(This).
diff --git a/lib/wx/src/gen/wxFlexGridSizer.erl b/lib/wx/src/gen/wxFlexGridSizer.erl
index 3e191c8f7b..84a9b619ac 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.
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..9b98f8b06e 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.
diff --git a/lib/wx/src/gen/wxFontData.erl b/lib/wx/src/gen/wxFontData.erl
index a3c1f729ab..066367862f 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.
diff --git a/lib/wx/src/gen/wxFontDialog.erl b/lib/wx/src/gen/wxFontDialog.erl
index cf0938a57d..de199cfcce 100644
--- a/lib/wx/src/gen/wxFontDialog.erl
+++ b/lib/wx/src/gen/wxFontDialog.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.
@@ -34,11 +34,11 @@
-export([create/3,destroy/1,getFontData/1,new/0,new/2]).
%% inherited exports
--export([cacheBestSize/2,captureMouse/1,center/1,center/2,centerOnParent/1,
- centerOnParent/2,centerOnScreen/1,centerOnScreen/2,centre/1,centre/2,
- centreOnParent/1,centreOnParent/2,centreOnScreen/1,centreOnScreen/2,
- clearBackground/1,clientToScreen/2,clientToScreen/3,close/1,close/2,
- connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
+-export([cacheBestSize/2,canSetTransparent/1,captureMouse/1,center/1,center/2,
+ centerOnParent/1,centerOnParent/2,centerOnScreen/1,centerOnScreen/2,
+ centre/1,centre/2,centreOnParent/1,centreOnParent/2,centreOnScreen/1,
+ centreOnScreen/2,clearBackground/1,clientToScreen/2,clientToScreen/3,
+ close/1,close/2,connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
createButtonSizer/2,createStdDialogButtonSizer/2,destroyChildren/1,
disable/1,disconnect/1,disconnect/2,disconnect/3,enable/1,enable/2,
endModal/2,findWindow/2,fit/1,fitInside/1,freeze/1,getAcceleratorTable/1,
@@ -53,25 +53,26 @@
getTitle/1,getToolTip/1,getUpdateRegion/1,getVirtualSize/1,getWindowStyleFlag/1,
getWindowVariant/1,hasCapture/1,hasScrollbar/2,hasTransparentBackground/1,
hide/1,iconize/1,iconize/2,inheritAttributes/1,initDialog/1,invalidateBestSize/1,
- isActive/1,isEnabled/1,isExposed/2,isExposed/3,isExposed/5,isFullScreen/1,
- isIconized/1,isMaximized/1,isModal/1,isRetained/1,isShown/1,isTopLevel/1,
- layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,maximize/1,
- maximize/2,move/2,move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,
- navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,
- popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,
- refresh/2,refreshRect/2,refreshRect/3,releaseMouse/1,removeChild/2,
- reparent/2,requestUserAttention/1,requestUserAttention/2,screenToClient/1,
- screenToClient/2,scrollLines/2,scrollPages/2,scrollWindow/3,scrollWindow/4,
- setAcceleratorTable/2,setAffirmativeId/2,setAutoLayout/2,setBackgroundColour/2,
- setBackgroundStyle/2,setCaret/2,setClientSize/2,setClientSize/3,setContainingSizer/2,
- setCursor/2,setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,
- setFont/2,setForegroundColour/2,setHelpText/2,setIcon/2,setIcons/2,
- setId/2,setLabel/2,setMaxSize/2,setMinSize/2,setName/2,setOwnBackgroundColour/2,
- setOwnFont/2,setOwnForegroundColour/2,setPalette/2,setReturnCode/2,
- setScrollPos/3,setScrollPos/4,setScrollbar/5,setScrollbar/6,setShape/2,
- setSize/2,setSize/3,setSize/5,setSize/6,setSizeHints/2,setSizeHints/3,
- setSizeHints/4,setSizer/2,setSizer/3,setSizerAndFit/2,setSizerAndFit/3,
- setThemeEnabled/2,setTitle/2,setToolTip/2,setVirtualSize/2,setVirtualSize/3,
+ isActive/1,isDoubleBuffered/1,isEnabled/1,isExposed/2,isExposed/3,
+ isExposed/5,isFullScreen/1,isIconized/1,isMaximized/1,isModal/1,isRetained/1,
+ isShown/1,isTopLevel/1,layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,
+ makeModal/2,maximize/1,maximize/2,move/2,move/3,move/4,moveAfterInTabOrder/2,
+ moveBeforeInTabOrder/2,navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1,
+ popEventHandler/1,popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4,
+ raise/1,refresh/1,refresh/2,refreshRect/2,refreshRect/3,releaseMouse/1,
+ removeChild/2,reparent/2,requestUserAttention/1,requestUserAttention/2,
+ screenToClient/1,screenToClient/2,scrollLines/2,scrollPages/2,scrollWindow/3,
+ scrollWindow/4,setAcceleratorTable/2,setAffirmativeId/2,setAutoLayout/2,
+ setBackgroundColour/2,setBackgroundStyle/2,setCaret/2,setClientSize/2,
+ setClientSize/3,setContainingSizer/2,setCursor/2,setDoubleBuffered/2,
+ setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,setFont/2,
+ setForegroundColour/2,setHelpText/2,setIcon/2,setIcons/2,setId/2,setLabel/2,
+ setMaxSize/2,setMinSize/2,setName/2,setOwnBackgroundColour/2,setOwnFont/2,
+ setOwnForegroundColour/2,setPalette/2,setReturnCode/2,setScrollPos/3,
+ setScrollPos/4,setScrollbar/5,setScrollbar/6,setShape/2,setSize/2,
+ setSize/3,setSize/5,setSize/6,setSizeHints/2,setSizeHints/3,setSizeHints/4,
+ setSizer/2,setSizer/3,setSizerAndFit/2,setSizerAndFit/3,setThemeEnabled/2,
+ setTitle/2,setToolTip/2,setTransparent/2,setVirtualSize/2,setVirtualSize/3,
setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
setWindowStyle/2,setWindowStyleFlag/2,setWindowVariant/2,shouldInheritColours/1,
show/1,show/2,showFullScreen/2,showFullScreen/3,showModal/1,thaw/1,
@@ -198,6 +199,14 @@ getIcons(This) -> wxTopLevelWindow:getIcons(This).
getIcon(This) -> wxTopLevelWindow:getIcon(This).
%% From wxWindow
%% @hidden
+setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On).
+%% @hidden
+isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This).
+%% @hidden
+canSetTransparent(This) -> wxWindow:canSetTransparent(This).
+%% @hidden
+setTransparent(This,Alpha) -> wxWindow:setTransparent(This,Alpha).
+%% @hidden
warpPointer(This,X,Y) -> wxWindow:warpPointer(This,X,Y).
%% @hidden
validate(This) -> wxWindow:validate(This).
diff --git a/lib/wx/src/gen/wxFontPickerCtrl.erl b/lib/wx/src/gen/wxFontPickerCtrl.erl
index b5c3b641ee..c21061e0fe 100644
--- a/lib/wx/src/gen/wxFontPickerCtrl.erl
+++ b/lib/wx/src/gen/wxFontPickerCtrl.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.
@@ -35,10 +35,10 @@
new/2,new/3,setMaxPointSize/2,setSelectedFont/2]).
%% inherited exports
--export([cacheBestSize/2,captureMouse/1,center/1,center/2,centerOnParent/1,
- centerOnParent/2,centre/1,centre/2,centreOnParent/1,centreOnParent/2,
- clearBackground/1,clientToScreen/2,clientToScreen/3,close/1,close/2,
- connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
+-export([cacheBestSize/2,canSetTransparent/1,captureMouse/1,center/1,center/2,
+ centerOnParent/1,centerOnParent/2,centre/1,centre/2,centreOnParent/1,
+ centreOnParent/2,clearBackground/1,clientToScreen/2,clientToScreen/3,
+ close/1,close/2,connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
destroyChildren/1,disable/1,disconnect/1,disconnect/2,disconnect/3,
enable/1,enable/2,findWindow/2,fit/1,fitInside/1,freeze/1,getAcceleratorTable/1,
getBackgroundColour/1,getBackgroundStyle/1,getBestSize/1,getCaret/1,
@@ -51,30 +51,31 @@
getSize/1,getSizer/1,getTextCtrl/1,getTextCtrlProportion/1,getTextExtent/2,
getTextExtent/3,getToolTip/1,getUpdateRegion/1,getVirtualSize/1,getWindowStyleFlag/1,
getWindowVariant/1,hasCapture/1,hasScrollbar/2,hasTextCtrl/1,hasTransparentBackground/1,
- hide/1,inheritAttributes/1,initDialog/1,invalidateBestSize/1,isEnabled/1,
- isExposed/2,isExposed/3,isExposed/5,isPickerCtrlGrowable/1,isRetained/1,
- isShown/1,isTextCtrlGrowable/1,isTopLevel/1,layout/1,lineDown/1,lineUp/1,
- lower/1,makeModal/1,makeModal/2,move/2,move/3,move/4,moveAfterInTabOrder/2,
- moveBeforeInTabOrder/2,navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1,
- popEventHandler/1,popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4,
- raise/1,refresh/1,refresh/2,refreshRect/2,refreshRect/3,releaseMouse/1,
- removeChild/2,reparent/2,screenToClient/1,screenToClient/2,scrollLines/2,
- scrollPages/2,scrollWindow/3,scrollWindow/4,setAcceleratorTable/2,
- setAutoLayout/2,setBackgroundColour/2,setBackgroundStyle/2,setCaret/2,
- setClientSize/2,setClientSize/3,setContainingSizer/2,setCursor/2,
- setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,setFont/2,
- setForegroundColour/2,setHelpText/2,setId/2,setInternalMargin/2,setLabel/2,
- setMaxSize/2,setMinSize/2,setName/2,setOwnBackgroundColour/2,setOwnFont/2,
- setOwnForegroundColour/2,setPalette/2,setPickerCtrlGrowable/1,setPickerCtrlGrowable/2,
- setPickerCtrlProportion/2,setScrollPos/3,setScrollPos/4,setScrollbar/5,
- setScrollbar/6,setSize/2,setSize/3,setSize/5,setSize/6,setSizeHints/2,
- setSizeHints/3,setSizeHints/4,setSizer/2,setSizer/3,setSizerAndFit/2,
- setSizerAndFit/3,setTextCtrlGrowable/1,setTextCtrlGrowable/2,setTextCtrlProportion/2,
- setThemeEnabled/2,setToolTip/2,setVirtualSize/2,setVirtualSize/3,
- setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
- setWindowStyle/2,setWindowStyleFlag/2,setWindowVariant/2,shouldInheritColours/1,
- show/1,show/2,thaw/1,transferDataFromWindow/1,transferDataToWindow/1,
- update/1,updateWindowUI/1,updateWindowUI/2,validate/1,warpPointer/3]).
+ hide/1,inheritAttributes/1,initDialog/1,invalidateBestSize/1,isDoubleBuffered/1,
+ isEnabled/1,isExposed/2,isExposed/3,isExposed/5,isPickerCtrlGrowable/1,
+ isRetained/1,isShown/1,isTextCtrlGrowable/1,isTopLevel/1,layout/1,
+ lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,move/2,move/3,move/4,
+ moveAfterInTabOrder/2,moveBeforeInTabOrder/2,navigate/1,navigate/2,
+ pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,popEventHandler/2,
+ popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,refresh/2,refreshRect/2,
+ refreshRect/3,releaseMouse/1,removeChild/2,reparent/2,screenToClient/1,
+ screenToClient/2,scrollLines/2,scrollPages/2,scrollWindow/3,scrollWindow/4,
+ setAcceleratorTable/2,setAutoLayout/2,setBackgroundColour/2,setBackgroundStyle/2,
+ setCaret/2,setClientSize/2,setClientSize/3,setContainingSizer/2,setCursor/2,
+ setDoubleBuffered/2,setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,
+ setFont/2,setForegroundColour/2,setHelpText/2,setId/2,setInternalMargin/2,
+ setLabel/2,setMaxSize/2,setMinSize/2,setName/2,setOwnBackgroundColour/2,
+ setOwnFont/2,setOwnForegroundColour/2,setPalette/2,setPickerCtrlGrowable/1,
+ setPickerCtrlGrowable/2,setPickerCtrlProportion/2,setScrollPos/3,
+ setScrollPos/4,setScrollbar/5,setScrollbar/6,setSize/2,setSize/3,setSize/5,
+ setSize/6,setSizeHints/2,setSizeHints/3,setSizeHints/4,setSizer/2,
+ setSizer/3,setSizerAndFit/2,setSizerAndFit/3,setTextCtrlGrowable/1,
+ setTextCtrlGrowable/2,setTextCtrlProportion/2,setThemeEnabled/2,
+ setToolTip/2,setTransparent/2,setVirtualSize/2,setVirtualSize/3,setVirtualSizeHints/2,
+ setVirtualSizeHints/3,setVirtualSizeHints/4,setWindowStyle/2,setWindowStyleFlag/2,
+ setWindowVariant/2,shouldInheritColours/1,show/1,show/2,thaw/1,transferDataFromWindow/1,
+ transferDataToWindow/1,update/1,updateWindowUI/1,updateWindowUI/2,
+ validate/1,warpPointer/3]).
-export_type([wxFontPickerCtrl/0]).
%% @hidden
@@ -226,6 +227,14 @@ setLabel(This,Label) -> wxControl:setLabel(This,Label).
getLabel(This) -> wxControl:getLabel(This).
%% From wxWindow
%% @hidden
+setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On).
+%% @hidden
+isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This).
+%% @hidden
+canSetTransparent(This) -> wxWindow:canSetTransparent(This).
+%% @hidden
+setTransparent(This,Alpha) -> wxWindow:setTransparent(This,Alpha).
+%% @hidden
warpPointer(This,X,Y) -> wxWindow:warpPointer(This,X,Y).
%% @hidden
validate(This) -> wxWindow:validate(This).
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 6fa1a2b958..75860cd9b7 100644
--- a/lib/wx/src/gen/wxFrame.erl
+++ b/lib/wx/src/gen/wxFrame.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.
@@ -37,11 +37,11 @@
setStatusText/3,setStatusWidths/2,setToolBar/2]).
%% inherited exports
--export([cacheBestSize/2,captureMouse/1,center/1,center/2,centerOnParent/1,
- centerOnParent/2,centerOnScreen/1,centerOnScreen/2,centre/1,centre/2,
- centreOnParent/1,centreOnParent/2,centreOnScreen/1,centreOnScreen/2,
- clearBackground/1,clientToScreen/2,clientToScreen/3,close/1,close/2,
- connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
+-export([cacheBestSize/2,canSetTransparent/1,captureMouse/1,center/1,center/2,
+ centerOnParent/1,centerOnParent/2,centerOnScreen/1,centerOnScreen/2,
+ centre/1,centre/2,centreOnParent/1,centreOnParent/2,centreOnScreen/1,
+ centreOnScreen/2,clearBackground/1,clientToScreen/2,clientToScreen/3,
+ close/1,close/2,connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
destroyChildren/1,disable/1,disconnect/1,disconnect/2,disconnect/3,
enable/1,enable/2,findWindow/2,fit/1,fitInside/1,freeze/1,getAcceleratorTable/1,
getBackgroundColour/1,getBackgroundStyle/1,getBestSize/1,getCaret/1,
@@ -55,29 +55,30 @@
getVirtualSize/1,getWindowStyleFlag/1,getWindowVariant/1,hasCapture/1,
hasScrollbar/2,hasTransparentBackground/1,hide/1,iconize/1,iconize/2,
inheritAttributes/1,initDialog/1,invalidateBestSize/1,isActive/1,
- isEnabled/1,isExposed/2,isExposed/3,isExposed/5,isFullScreen/1,isIconized/1,
- isMaximized/1,isRetained/1,isShown/1,isTopLevel/1,layout/1,lineDown/1,
- lineUp/1,lower/1,makeModal/1,makeModal/2,maximize/1,maximize/2,move/2,
- move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,navigate/1,
- navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,popEventHandler/2,
- popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,refresh/2,refreshRect/2,
- refreshRect/3,releaseMouse/1,removeChild/2,reparent/2,requestUserAttention/1,
- requestUserAttention/2,screenToClient/1,screenToClient/2,scrollLines/2,
- scrollPages/2,scrollWindow/3,scrollWindow/4,setAcceleratorTable/2,
- setAutoLayout/2,setBackgroundColour/2,setBackgroundStyle/2,setCaret/2,
- setClientSize/2,setClientSize/3,setContainingSizer/2,setCursor/2,
- setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,setFont/2,
- setForegroundColour/2,setHelpText/2,setIcon/2,setIcons/2,setId/2,setLabel/2,
- setMaxSize/2,setMinSize/2,setName/2,setOwnBackgroundColour/2,setOwnFont/2,
- setOwnForegroundColour/2,setPalette/2,setScrollPos/3,setScrollPos/4,
- setScrollbar/5,setScrollbar/6,setShape/2,setSize/2,setSize/3,setSize/5,
- setSize/6,setSizeHints/2,setSizeHints/3,setSizeHints/4,setSizer/2,
- setSizer/3,setSizerAndFit/2,setSizerAndFit/3,setThemeEnabled/2,setTitle/2,
- setToolTip/2,setVirtualSize/2,setVirtualSize/3,setVirtualSizeHints/2,
- setVirtualSizeHints/3,setVirtualSizeHints/4,setWindowStyle/2,setWindowStyleFlag/2,
- setWindowVariant/2,shouldInheritColours/1,show/1,show/2,showFullScreen/2,
- showFullScreen/3,thaw/1,transferDataFromWindow/1,transferDataToWindow/1,
- update/1,updateWindowUI/1,updateWindowUI/2,validate/1,warpPointer/3]).
+ isDoubleBuffered/1,isEnabled/1,isExposed/2,isExposed/3,isExposed/5,
+ isFullScreen/1,isIconized/1,isMaximized/1,isRetained/1,isShown/1,isTopLevel/1,
+ layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,maximize/1,
+ maximize/2,move/2,move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,
+ navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,
+ popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,
+ refresh/2,refreshRect/2,refreshRect/3,releaseMouse/1,removeChild/2,
+ reparent/2,requestUserAttention/1,requestUserAttention/2,screenToClient/1,
+ screenToClient/2,scrollLines/2,scrollPages/2,scrollWindow/3,scrollWindow/4,
+ setAcceleratorTable/2,setAutoLayout/2,setBackgroundColour/2,setBackgroundStyle/2,
+ setCaret/2,setClientSize/2,setClientSize/3,setContainingSizer/2,setCursor/2,
+ setDoubleBuffered/2,setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,
+ setFont/2,setForegroundColour/2,setHelpText/2,setIcon/2,setIcons/2,
+ setId/2,setLabel/2,setMaxSize/2,setMinSize/2,setName/2,setOwnBackgroundColour/2,
+ setOwnFont/2,setOwnForegroundColour/2,setPalette/2,setScrollPos/3,
+ setScrollPos/4,setScrollbar/5,setScrollbar/6,setShape/2,setSize/2,
+ setSize/3,setSize/5,setSize/6,setSizeHints/2,setSizeHints/3,setSizeHints/4,
+ setSizer/2,setSizer/3,setSizerAndFit/2,setSizerAndFit/3,setThemeEnabled/2,
+ setTitle/2,setToolTip/2,setTransparent/2,setVirtualSize/2,setVirtualSize/3,
+ setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
+ setWindowStyle/2,setWindowStyleFlag/2,setWindowVariant/2,shouldInheritColours/1,
+ show/1,show/2,showFullScreen/2,showFullScreen/3,thaw/1,transferDataFromWindow/1,
+ transferDataToWindow/1,update/1,updateWindowUI/1,updateWindowUI/2,
+ validate/1,warpPointer/3]).
-export_type([wxFrame/0]).
%% @hidden
@@ -374,6 +375,14 @@ getIcons(This) -> wxTopLevelWindow:getIcons(This).
getIcon(This) -> wxTopLevelWindow:getIcon(This).
%% From wxWindow
%% @hidden
+setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On).
+%% @hidden
+isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This).
+%% @hidden
+canSetTransparent(This) -> wxWindow:canSetTransparent(This).
+%% @hidden
+setTransparent(This,Alpha) -> wxWindow:setTransparent(This,Alpha).
+%% @hidden
warpPointer(This,X,Y) -> wxWindow:warpPointer(This,X,Y).
%% @hidden
validate(This) -> wxWindow:validate(This).
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 b00b45ad24..9d3d13740d 100644
--- a/lib/wx/src/gen/wxGLCanvas.erl
+++ b/lib/wx/src/gen/wxGLCanvas.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.
@@ -32,10 +32,10 @@
-export([destroy/1,getContext/1,new/1,new/2,new/3,setCurrent/1,swapBuffers/1]).
%% inherited exports
--export([cacheBestSize/2,captureMouse/1,center/1,center/2,centerOnParent/1,
- centerOnParent/2,centre/1,centre/2,centreOnParent/1,centreOnParent/2,
- clearBackground/1,clientToScreen/2,clientToScreen/3,close/1,close/2,
- connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
+-export([cacheBestSize/2,canSetTransparent/1,captureMouse/1,center/1,center/2,
+ centerOnParent/1,centerOnParent/2,centre/1,centre/2,centreOnParent/1,
+ centreOnParent/2,clearBackground/1,clientToScreen/2,clientToScreen/3,
+ close/1,close/2,connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
destroyChildren/1,disable/1,disconnect/1,disconnect/2,disconnect/3,
enable/1,enable/2,findWindow/2,fit/1,fitInside/1,freeze/1,getAcceleratorTable/1,
getBackgroundColour/1,getBackgroundStyle/1,getBestSize/1,getCaret/1,
@@ -47,24 +47,25 @@
getScrollRange/2,getScrollThumb/2,getSize/1,getSizer/1,getTextExtent/2,
getTextExtent/3,getToolTip/1,getUpdateRegion/1,getVirtualSize/1,getWindowStyleFlag/1,
getWindowVariant/1,hasCapture/1,hasScrollbar/2,hasTransparentBackground/1,
- hide/1,inheritAttributes/1,initDialog/1,invalidateBestSize/1,isEnabled/1,
- isExposed/2,isExposed/3,isExposed/5,isRetained/1,isShown/1,isTopLevel/1,
- layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,move/2,
- move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,navigate/1,
- navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,popEventHandler/2,
- popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,refresh/2,refreshRect/2,
- refreshRect/3,releaseMouse/1,removeChild/2,reparent/2,screenToClient/1,
- screenToClient/2,scrollLines/2,scrollPages/2,scrollWindow/3,scrollWindow/4,
- setAcceleratorTable/2,setAutoLayout/2,setBackgroundColour/2,setBackgroundStyle/2,
- setCaret/2,setClientSize/2,setClientSize/3,setContainingSizer/2,setCursor/2,
+ hide/1,inheritAttributes/1,initDialog/1,invalidateBestSize/1,isDoubleBuffered/1,
+ isEnabled/1,isExposed/2,isExposed/3,isExposed/5,isRetained/1,isShown/1,
+ isTopLevel/1,layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,
+ move/2,move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,
+ navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,
+ popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,
+ refresh/2,refreshRect/2,refreshRect/3,releaseMouse/1,removeChild/2,
+ reparent/2,screenToClient/1,screenToClient/2,scrollLines/2,scrollPages/2,
+ scrollWindow/3,scrollWindow/4,setAcceleratorTable/2,setAutoLayout/2,
+ setBackgroundColour/2,setBackgroundStyle/2,setCaret/2,setClientSize/2,
+ setClientSize/3,setContainingSizer/2,setCursor/2,setDoubleBuffered/2,
setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,setFont/2,
setForegroundColour/2,setHelpText/2,setId/2,setLabel/2,setMaxSize/2,
setMinSize/2,setName/2,setOwnBackgroundColour/2,setOwnFont/2,setOwnForegroundColour/2,
setPalette/2,setScrollPos/3,setScrollPos/4,setScrollbar/5,setScrollbar/6,
setSize/2,setSize/3,setSize/5,setSize/6,setSizeHints/2,setSizeHints/3,
setSizeHints/4,setSizer/2,setSizer/3,setSizerAndFit/2,setSizerAndFit/3,
- setThemeEnabled/2,setToolTip/2,setVirtualSize/2,setVirtualSize/3,
- setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
+ setThemeEnabled/2,setToolTip/2,setTransparent/2,setVirtualSize/2,
+ setVirtualSize/3,setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
setWindowStyle/2,setWindowStyleFlag/2,setWindowVariant/2,shouldInheritColours/1,
show/1,show/2,thaw/1,transferDataFromWindow/1,transferDataToWindow/1,
update/1,updateWindowUI/1,updateWindowUI/2,validate/1,warpPointer/3]).
@@ -193,6 +194,14 @@ destroy(Obj=#wx_ref{type=Type}) ->
ok.
%% From wxWindow
%% @hidden
+setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On).
+%% @hidden
+isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This).
+%% @hidden
+canSetTransparent(This) -> wxWindow:canSetTransparent(This).
+%% @hidden
+setTransparent(This,Alpha) -> wxWindow:setTransparent(This,Alpha).
+%% @hidden
warpPointer(This,X,Y) -> wxWindow:warpPointer(This,X,Y).
%% @hidden
validate(This) -> wxWindow:validate(This).
diff --git a/lib/wx/src/gen/wxGauge.erl b/lib/wx/src/gen/wxGauge.erl
index 0b64f097ad..2745e251b4 100644
--- a/lib/wx/src/gen/wxGauge.erl
+++ b/lib/wx/src/gen/wxGauge.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,15 +30,14 @@
-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,captureMouse/1,center/1,center/2,centerOnParent/1,
- centerOnParent/2,centre/1,centre/2,centreOnParent/1,centreOnParent/2,
- clearBackground/1,clientToScreen/2,clientToScreen/3,close/1,close/2,
- connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
+-export([cacheBestSize/2,canSetTransparent/1,captureMouse/1,center/1,center/2,
+ centerOnParent/1,centerOnParent/2,centre/1,centre/2,centreOnParent/1,
+ centreOnParent/2,clearBackground/1,clientToScreen/2,clientToScreen/3,
+ close/1,close/2,connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
destroyChildren/1,disable/1,disconnect/1,disconnect/2,disconnect/3,
enable/1,enable/2,findWindow/2,fit/1,fitInside/1,freeze/1,getAcceleratorTable/1,
getBackgroundColour/1,getBackgroundStyle/1,getBestSize/1,getCaret/1,
@@ -50,24 +49,25 @@
getScrollRange/2,getScrollThumb/2,getSize/1,getSizer/1,getTextExtent/2,
getTextExtent/3,getToolTip/1,getUpdateRegion/1,getVirtualSize/1,getWindowStyleFlag/1,
getWindowVariant/1,hasCapture/1,hasScrollbar/2,hasTransparentBackground/1,
- hide/1,inheritAttributes/1,initDialog/1,invalidateBestSize/1,isEnabled/1,
- isExposed/2,isExposed/3,isExposed/5,isRetained/1,isShown/1,isTopLevel/1,
- layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,move/2,
- move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,navigate/1,
- navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,popEventHandler/2,
- popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,refresh/2,refreshRect/2,
- refreshRect/3,releaseMouse/1,removeChild/2,reparent/2,screenToClient/1,
- screenToClient/2,scrollLines/2,scrollPages/2,scrollWindow/3,scrollWindow/4,
- setAcceleratorTable/2,setAutoLayout/2,setBackgroundColour/2,setBackgroundStyle/2,
- setCaret/2,setClientSize/2,setClientSize/3,setContainingSizer/2,setCursor/2,
+ hide/1,inheritAttributes/1,initDialog/1,invalidateBestSize/1,isDoubleBuffered/1,
+ isEnabled/1,isExposed/2,isExposed/3,isExposed/5,isRetained/1,isShown/1,
+ isTopLevel/1,layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,
+ move/2,move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,
+ navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,
+ popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,
+ refresh/2,refreshRect/2,refreshRect/3,releaseMouse/1,removeChild/2,
+ reparent/2,screenToClient/1,screenToClient/2,scrollLines/2,scrollPages/2,
+ scrollWindow/3,scrollWindow/4,setAcceleratorTable/2,setAutoLayout/2,
+ setBackgroundColour/2,setBackgroundStyle/2,setCaret/2,setClientSize/2,
+ setClientSize/3,setContainingSizer/2,setCursor/2,setDoubleBuffered/2,
setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,setFont/2,
setForegroundColour/2,setHelpText/2,setId/2,setLabel/2,setMaxSize/2,
setMinSize/2,setName/2,setOwnBackgroundColour/2,setOwnFont/2,setOwnForegroundColour/2,
setPalette/2,setScrollPos/3,setScrollPos/4,setScrollbar/5,setScrollbar/6,
setSize/2,setSize/3,setSize/5,setSize/6,setSizeHints/2,setSizeHints/3,
setSizeHints/4,setSizer/2,setSizer/3,setSizerAndFit/2,setSizerAndFit/3,
- setThemeEnabled/2,setToolTip/2,setVirtualSize/2,setVirtualSize/3,
- setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
+ setThemeEnabled/2,setToolTip/2,setTransparent/2,setVirtualSize/2,
+ setVirtualSize/3,setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
setWindowStyle/2,setWindowStyleFlag/2,setWindowVariant/2,shouldInheritColours/1,
show/1,show/2,thaw/1,transferDataFromWindow/1,transferDataToWindow/1,
update/1,updateWindowUI/1,updateWindowUI/2,validate/1,warpPointer/3]).
@@ -141,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().
@@ -157,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().
@@ -181,15 +165,6 @@ 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
This::wxGauge(), R::integer().
@@ -199,15 +174,6 @@ 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
This::wxGauge(), Pos::integer().
@@ -238,6 +204,14 @@ setLabel(This,Label) -> wxControl:setLabel(This,Label).
getLabel(This) -> wxControl:getLabel(This).
%% From wxWindow
%% @hidden
+setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On).
+%% @hidden
+isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This).
+%% @hidden
+canSetTransparent(This) -> wxWindow:canSetTransparent(This).
+%% @hidden
+setTransparent(This,Alpha) -> wxWindow:setTransparent(This,Alpha).
+%% @hidden
warpPointer(This,X,Y) -> wxWindow:warpPointer(This,X,Y).
%% @hidden
validate(This) -> wxWindow:validate(This).
diff --git a/lib/wx/src/gen/wxGenericDirCtrl.erl b/lib/wx/src/gen/wxGenericDirCtrl.erl
index 014111144f..bc26a1645e 100644
--- a/lib/wx/src/gen/wxGenericDirCtrl.erl
+++ b/lib/wx/src/gen/wxGenericDirCtrl.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,10 +36,10 @@
setFilterIndex/2,setPath/2]).
%% inherited exports
--export([cacheBestSize/2,captureMouse/1,center/1,center/2,centerOnParent/1,
- centerOnParent/2,centre/1,centre/2,centreOnParent/1,centreOnParent/2,
- clearBackground/1,clientToScreen/2,clientToScreen/3,close/1,close/2,
- connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
+-export([cacheBestSize/2,canSetTransparent/1,captureMouse/1,center/1,center/2,
+ centerOnParent/1,centerOnParent/2,centre/1,centre/2,centreOnParent/1,
+ centreOnParent/2,clearBackground/1,clientToScreen/2,clientToScreen/3,
+ close/1,close/2,connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
destroyChildren/1,disable/1,disconnect/1,disconnect/2,disconnect/3,
enable/1,enable/2,findWindow/2,fit/1,fitInside/1,freeze/1,getAcceleratorTable/1,
getBackgroundColour/1,getBackgroundStyle/1,getBestSize/1,getCaret/1,
@@ -51,24 +51,25 @@
getScrollRange/2,getScrollThumb/2,getSize/1,getSizer/1,getTextExtent/2,
getTextExtent/3,getToolTip/1,getUpdateRegion/1,getVirtualSize/1,getWindowStyleFlag/1,
getWindowVariant/1,hasCapture/1,hasScrollbar/2,hasTransparentBackground/1,
- hide/1,inheritAttributes/1,initDialog/1,invalidateBestSize/1,isEnabled/1,
- isExposed/2,isExposed/3,isExposed/5,isRetained/1,isShown/1,isTopLevel/1,
- layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,move/2,
- move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,navigate/1,
- navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,popEventHandler/2,
- popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,refresh/2,refreshRect/2,
- refreshRect/3,releaseMouse/1,removeChild/2,reparent/2,screenToClient/1,
- screenToClient/2,scrollLines/2,scrollPages/2,scrollWindow/3,scrollWindow/4,
- setAcceleratorTable/2,setAutoLayout/2,setBackgroundColour/2,setBackgroundStyle/2,
- setCaret/2,setClientSize/2,setClientSize/3,setContainingSizer/2,setCursor/2,
+ hide/1,inheritAttributes/1,initDialog/1,invalidateBestSize/1,isDoubleBuffered/1,
+ isEnabled/1,isExposed/2,isExposed/3,isExposed/5,isRetained/1,isShown/1,
+ isTopLevel/1,layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,
+ move/2,move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,
+ navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,
+ popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,
+ refresh/2,refreshRect/2,refreshRect/3,releaseMouse/1,removeChild/2,
+ reparent/2,screenToClient/1,screenToClient/2,scrollLines/2,scrollPages/2,
+ scrollWindow/3,scrollWindow/4,setAcceleratorTable/2,setAutoLayout/2,
+ setBackgroundColour/2,setBackgroundStyle/2,setCaret/2,setClientSize/2,
+ setClientSize/3,setContainingSizer/2,setCursor/2,setDoubleBuffered/2,
setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,setFont/2,
setForegroundColour/2,setHelpText/2,setId/2,setLabel/2,setMaxSize/2,
setMinSize/2,setName/2,setOwnBackgroundColour/2,setOwnFont/2,setOwnForegroundColour/2,
setPalette/2,setScrollPos/3,setScrollPos/4,setScrollbar/5,setScrollbar/6,
setSize/2,setSize/3,setSize/5,setSize/6,setSizeHints/2,setSizeHints/3,
setSizeHints/4,setSizer/2,setSizer/3,setSizerAndFit/2,setSizerAndFit/3,
- setThemeEnabled/2,setToolTip/2,setVirtualSize/2,setVirtualSize/3,
- setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
+ setThemeEnabled/2,setToolTip/2,setTransparent/2,setVirtualSize/2,
+ setVirtualSize/3,setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
setWindowStyle/2,setWindowStyleFlag/2,setWindowVariant/2,shouldInheritColours/1,
show/1,show/2,thaw/1,transferDataFromWindow/1,transferDataToWindow/1,
update/1,updateWindowUI/1,updateWindowUI/2,validate/1,warpPointer/3]).
@@ -296,6 +297,14 @@ setLabel(This,Label) -> wxControl:setLabel(This,Label).
getLabel(This) -> wxControl:getLabel(This).
%% From wxWindow
%% @hidden
+setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On).
+%% @hidden
+isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This).
+%% @hidden
+canSetTransparent(This) -> wxWindow:canSetTransparent(This).
+%% @hidden
+setTransparent(This,Alpha) -> wxWindow:setTransparent(This,Alpha).
+%% @hidden
warpPointer(This,X,Y) -> wxWindow:warpPointer(This,X,Y).
%% @hidden
validate(This) -> wxWindow:validate(This).
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..bbb2cfc0ca 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.
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..b22e667fed 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.
diff --git a/lib/wx/src/gen/wxGraphicsObject.erl b/lib/wx/src/gen/wxGraphicsObject.erl
index abb4d6dc2d..f0e4d94785 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.
diff --git a/lib/wx/src/gen/wxGraphicsPath.erl b/lib/wx/src/gen/wxGraphicsPath.erl
index 6d65093775..b2f7cd1785 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.
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..c28222fe24 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.
diff --git a/lib/wx/src/gen/wxGrid.erl b/lib/wx/src/gen/wxGrid.erl
index 0d35804529..49bd89f188 100644
--- a/lib/wx/src/gen/wxGrid.erl
+++ b/lib/wx/src/gen/wxGrid.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.
@@ -86,10 +86,10 @@
%% inherited exports
-export([cacheBestSize/2,calcScrolledPosition/2,calcScrolledPosition/3,calcUnscrolledPosition/2,
- calcUnscrolledPosition/3,captureMouse/1,center/1,center/2,centerOnParent/1,
- centerOnParent/2,centre/1,centre/2,centreOnParent/1,centreOnParent/2,
- clearBackground/1,clientToScreen/2,clientToScreen/3,close/1,close/2,
- connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
+ calcUnscrolledPosition/3,canSetTransparent/1,captureMouse/1,center/1,
+ center/2,centerOnParent/1,centerOnParent/2,centre/1,centre/2,centreOnParent/1,
+ centreOnParent/2,clearBackground/1,clientToScreen/2,clientToScreen/3,
+ close/1,close/2,connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
destroyChildren/1,disable/1,disconnect/1,disconnect/2,disconnect/3,
doPrepareDC/2,enable/1,enable/2,enableScrolling/3,findWindow/2,fitInside/1,
freeze/1,getAcceleratorTable/1,getBackgroundColour/1,getBackgroundStyle/1,
@@ -102,25 +102,26 @@
getScrollThumb/2,getSize/1,getSizer/1,getTextExtent/2,getTextExtent/3,
getToolTip/1,getUpdateRegion/1,getViewStart/1,getVirtualSize/1,getWindowStyleFlag/1,
getWindowVariant/1,hasCapture/1,hasScrollbar/2,hasTransparentBackground/1,
- hide/1,inheritAttributes/1,initDialog/1,invalidateBestSize/1,isEnabled/1,
- isExposed/2,isExposed/3,isExposed/5,isRetained/1,isShown/1,isTopLevel/1,
- layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,move/2,
- move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,navigate/1,
- navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,popEventHandler/2,
- popupMenu/2,popupMenu/3,popupMenu/4,prepareDC/2,raise/1,refresh/1,refresh/2,
- refreshRect/2,refreshRect/3,releaseMouse/1,removeChild/2,reparent/2,
- screenToClient/1,screenToClient/2,scroll/3,scrollLines/2,scrollPages/2,
- scrollWindow/3,scrollWindow/4,setAcceleratorTable/2,setAutoLayout/2,
- setBackgroundColour/2,setBackgroundStyle/2,setCaret/2,setClientSize/2,
- setClientSize/3,setContainingSizer/2,setCursor/2,setDropTarget/2,
- setExtraStyle/2,setFocus/1,setFocusFromKbd/1,setFocusIgnoringChildren/1,
- setFont/2,setForegroundColour/2,setHelpText/2,setId/2,setLabel/2,setMaxSize/2,
- setMinSize/2,setName/2,setOwnBackgroundColour/2,setOwnFont/2,setOwnForegroundColour/2,
- setPalette/2,setScrollPos/3,setScrollPos/4,setScrollRate/3,setScrollbar/5,
- setScrollbar/6,setScrollbars/5,setScrollbars/6,setSize/2,setSize/3,
- setSize/5,setSize/6,setSizeHints/2,setSizeHints/3,setSizeHints/4,setSizer/2,
- setSizer/3,setSizerAndFit/2,setSizerAndFit/3,setTargetWindow/2,setThemeEnabled/2,
- setToolTip/2,setVirtualSize/2,setVirtualSize/3,setVirtualSizeHints/2,
+ hide/1,inheritAttributes/1,initDialog/1,invalidateBestSize/1,isDoubleBuffered/1,
+ isEnabled/1,isExposed/2,isExposed/3,isExposed/5,isRetained/1,isShown/1,
+ isTopLevel/1,layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,
+ move/2,move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,
+ navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,
+ popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4,prepareDC/2,
+ raise/1,refresh/1,refresh/2,refreshRect/2,refreshRect/3,releaseMouse/1,
+ removeChild/2,reparent/2,screenToClient/1,screenToClient/2,scroll/3,
+ scrollLines/2,scrollPages/2,scrollWindow/3,scrollWindow/4,setAcceleratorTable/2,
+ setAutoLayout/2,setBackgroundColour/2,setBackgroundStyle/2,setCaret/2,
+ setClientSize/2,setClientSize/3,setContainingSizer/2,setCursor/2,
+ setDoubleBuffered/2,setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,
+ setFocusIgnoringChildren/1,setFont/2,setForegroundColour/2,setHelpText/2,
+ setId/2,setLabel/2,setMaxSize/2,setMinSize/2,setName/2,setOwnBackgroundColour/2,
+ setOwnFont/2,setOwnForegroundColour/2,setPalette/2,setScrollPos/3,
+ setScrollPos/4,setScrollRate/3,setScrollbar/5,setScrollbar/6,setScrollbars/5,
+ setScrollbars/6,setSize/2,setSize/3,setSize/5,setSize/6,setSizeHints/2,
+ setSizeHints/3,setSizeHints/4,setSizer/2,setSizer/3,setSizerAndFit/2,
+ setSizerAndFit/3,setTargetWindow/2,setThemeEnabled/2,setToolTip/2,
+ setTransparent/2,setVirtualSize/2,setVirtualSize/3,setVirtualSizeHints/2,
setVirtualSizeHints/3,setVirtualSizeHints/4,setWindowStyle/2,setWindowStyleFlag/2,
setWindowVariant/2,shouldInheritColours/1,show/1,show/2,thaw/1,transferDataFromWindow/1,
transferDataToWindow/1,update/1,updateWindowUI/1,updateWindowUI/2,
@@ -2157,6 +2158,14 @@ setFocusIgnoringChildren(This) -> wxPanel:setFocusIgnoringChildren(This).
initDialog(This) -> wxPanel:initDialog(This).
%% From wxWindow
%% @hidden
+setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On).
+%% @hidden
+isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This).
+%% @hidden
+canSetTransparent(This) -> wxWindow:canSetTransparent(This).
+%% @hidden
+setTransparent(This,Alpha) -> wxWindow:setTransparent(This,Alpha).
+%% @hidden
warpPointer(This,X,Y) -> wxWindow:warpPointer(This,X,Y).
%% @hidden
validate(This) -> wxWindow:validate(This).
diff --git a/lib/wx/src/gen/wxGridBagSizer.erl b/lib/wx/src/gen/wxGridBagSizer.erl
index adbc66adca..521bf7d5de 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.
diff --git a/lib/wx/src/gen/wxGridCellAttr.erl b/lib/wx/src/gen/wxGridCellAttr.erl
index 4880c1fab2..8d55155c5c 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.
diff --git a/lib/wx/src/gen/wxGridCellBoolEditor.erl b/lib/wx/src/gen/wxGridCellBoolEditor.erl
index 1308ab84ae..93a05e2959 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.
diff --git a/lib/wx/src/gen/wxGridCellBoolRenderer.erl b/lib/wx/src/gen/wxGridCellBoolRenderer.erl
index 55f54100f3..ce576a3c1d 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.
diff --git a/lib/wx/src/gen/wxGridCellChoiceEditor.erl b/lib/wx/src/gen/wxGridCellChoiceEditor.erl
index 8aa4420ffb..3e24ea21a0 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.
diff --git a/lib/wx/src/gen/wxGridCellEditor.erl b/lib/wx/src/gen/wxGridCellEditor.erl
index 253868300e..03b196e5a2 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.
diff --git a/lib/wx/src/gen/wxGridCellFloatEditor.erl b/lib/wx/src/gen/wxGridCellFloatEditor.erl
index 6dd8ec7647..e4f8b81fef 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.
diff --git a/lib/wx/src/gen/wxGridCellFloatRenderer.erl b/lib/wx/src/gen/wxGridCellFloatRenderer.erl
index c0f4157970..c5ddf78c44 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.
diff --git a/lib/wx/src/gen/wxGridCellNumberEditor.erl b/lib/wx/src/gen/wxGridCellNumberEditor.erl
index e08cade3e0..fb42faaf24 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.
diff --git a/lib/wx/src/gen/wxGridCellNumberRenderer.erl b/lib/wx/src/gen/wxGridCellNumberRenderer.erl
index 437654f2bb..815640f6da 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.
diff --git a/lib/wx/src/gen/wxGridCellRenderer.erl b/lib/wx/src/gen/wxGridCellRenderer.erl
index 0821f3b632..00f553b71a 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.
diff --git a/lib/wx/src/gen/wxGridCellStringRenderer.erl b/lib/wx/src/gen/wxGridCellStringRenderer.erl
index c9d7474988..fce72cf02b 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.
diff --git a/lib/wx/src/gen/wxGridCellTextEditor.erl b/lib/wx/src/gen/wxGridCellTextEditor.erl
index 303f1e90b6..e6d3f508b7 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.
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..5cfede3e9c 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.
diff --git a/lib/wx/src/gen/wxHelpEvent.erl b/lib/wx/src/gen/wxHelpEvent.erl
index 20affab33d..ec5107a3dc 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.
diff --git a/lib/wx/src/gen/wxHtmlEasyPrinting.erl b/lib/wx/src/gen/wxHtmlEasyPrinting.erl
index 0a3d79caee..b445fc01ab 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.
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 6b0b172b24..759b8ba0fd 100644
--- a/lib/wx/src/gen/wxHtmlWindow.erl
+++ b/lib/wx/src/gen/wxHtmlWindow.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.
@@ -40,10 +40,10 @@
%% inherited exports
-export([cacheBestSize/2,calcScrolledPosition/2,calcScrolledPosition/3,calcUnscrolledPosition/2,
- calcUnscrolledPosition/3,captureMouse/1,center/1,center/2,centerOnParent/1,
- centerOnParent/2,centre/1,centre/2,centreOnParent/1,centreOnParent/2,
- clearBackground/1,clientToScreen/2,clientToScreen/3,close/1,close/2,
- connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
+ calcUnscrolledPosition/3,canSetTransparent/1,captureMouse/1,center/1,
+ center/2,centerOnParent/1,centerOnParent/2,centre/1,centre/2,centreOnParent/1,
+ centreOnParent/2,clearBackground/1,clientToScreen/2,clientToScreen/3,
+ close/1,close/2,connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
destroyChildren/1,disable/1,disconnect/1,disconnect/2,disconnect/3,
doPrepareDC/2,enable/1,enable/2,enableScrolling/3,findWindow/2,fit/1,
fitInside/1,freeze/1,getAcceleratorTable/1,getBackgroundColour/1,
@@ -56,25 +56,26 @@
getScrollThumb/2,getSize/1,getSizer/1,getTextExtent/2,getTextExtent/3,
getToolTip/1,getUpdateRegion/1,getViewStart/1,getVirtualSize/1,getWindowStyleFlag/1,
getWindowVariant/1,hasCapture/1,hasScrollbar/2,hasTransparentBackground/1,
- hide/1,inheritAttributes/1,initDialog/1,invalidateBestSize/1,isEnabled/1,
- isExposed/2,isExposed/3,isExposed/5,isRetained/1,isShown/1,isTopLevel/1,
- layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,move/2,
- move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,navigate/1,
- navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,popEventHandler/2,
- popupMenu/2,popupMenu/3,popupMenu/4,prepareDC/2,raise/1,refresh/1,refresh/2,
- refreshRect/2,refreshRect/3,releaseMouse/1,removeChild/2,reparent/2,
- screenToClient/1,screenToClient/2,scroll/3,scrollLines/2,scrollPages/2,
- scrollWindow/3,scrollWindow/4,setAcceleratorTable/2,setAutoLayout/2,
- setBackgroundColour/2,setBackgroundStyle/2,setCaret/2,setClientSize/2,
- setClientSize/3,setContainingSizer/2,setCursor/2,setDropTarget/2,
- setExtraStyle/2,setFocus/1,setFocusFromKbd/1,setFocusIgnoringChildren/1,
- setFont/2,setForegroundColour/2,setHelpText/2,setId/2,setLabel/2,setMaxSize/2,
- setMinSize/2,setName/2,setOwnBackgroundColour/2,setOwnFont/2,setOwnForegroundColour/2,
- setPalette/2,setScrollPos/3,setScrollPos/4,setScrollRate/3,setScrollbar/5,
- setScrollbar/6,setScrollbars/5,setScrollbars/6,setSize/2,setSize/3,
- setSize/5,setSize/6,setSizeHints/2,setSizeHints/3,setSizeHints/4,setSizer/2,
- setSizer/3,setSizerAndFit/2,setSizerAndFit/3,setTargetWindow/2,setThemeEnabled/2,
- setToolTip/2,setVirtualSize/2,setVirtualSize/3,setVirtualSizeHints/2,
+ hide/1,inheritAttributes/1,initDialog/1,invalidateBestSize/1,isDoubleBuffered/1,
+ isEnabled/1,isExposed/2,isExposed/3,isExposed/5,isRetained/1,isShown/1,
+ isTopLevel/1,layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,
+ move/2,move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,
+ navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,
+ popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4,prepareDC/2,
+ raise/1,refresh/1,refresh/2,refreshRect/2,refreshRect/3,releaseMouse/1,
+ removeChild/2,reparent/2,screenToClient/1,screenToClient/2,scroll/3,
+ scrollLines/2,scrollPages/2,scrollWindow/3,scrollWindow/4,setAcceleratorTable/2,
+ setAutoLayout/2,setBackgroundColour/2,setBackgroundStyle/2,setCaret/2,
+ setClientSize/2,setClientSize/3,setContainingSizer/2,setCursor/2,
+ setDoubleBuffered/2,setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,
+ setFocusIgnoringChildren/1,setFont/2,setForegroundColour/2,setHelpText/2,
+ setId/2,setLabel/2,setMaxSize/2,setMinSize/2,setName/2,setOwnBackgroundColour/2,
+ setOwnFont/2,setOwnForegroundColour/2,setPalette/2,setScrollPos/3,
+ setScrollPos/4,setScrollRate/3,setScrollbar/5,setScrollbar/6,setScrollbars/5,
+ setScrollbars/6,setSize/2,setSize/3,setSize/5,setSize/6,setSizeHints/2,
+ setSizeHints/3,setSizeHints/4,setSizer/2,setSizer/3,setSizerAndFit/2,
+ setSizerAndFit/3,setTargetWindow/2,setThemeEnabled/2,setToolTip/2,
+ setTransparent/2,setVirtualSize/2,setVirtualSize/3,setVirtualSizeHints/2,
setVirtualSizeHints/3,setVirtualSizeHints/4,setWindowStyle/2,setWindowStyleFlag/2,
setWindowVariant/2,shouldInheritColours/1,show/1,show/2,thaw/1,transferDataFromWindow/1,
transferDataToWindow/1,update/1,updateWindowUI/1,updateWindowUI/2,
@@ -370,6 +371,14 @@ setFocusIgnoringChildren(This) -> wxPanel:setFocusIgnoringChildren(This).
initDialog(This) -> wxPanel:initDialog(This).
%% From wxWindow
%% @hidden
+setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On).
+%% @hidden
+isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This).
+%% @hidden
+canSetTransparent(This) -> wxWindow:canSetTransparent(This).
+%% @hidden
+setTransparent(This,Alpha) -> wxWindow:setTransparent(This,Alpha).
+%% @hidden
warpPointer(This,X,Y) -> wxWindow:warpPointer(This,X,Y).
%% @hidden
validate(This) -> wxWindow:validate(This).
diff --git a/lib/wx/src/gen/wxIcon.erl b/lib/wx/src/gen/wxIcon.erl
index 82042b0ba2..a14d76e270 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.
diff --git a/lib/wx/src/gen/wxIconBundle.erl b/lib/wx/src/gen/wxIconBundle.erl
index acf98d0a12..8edfdc48b8 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.
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..bcccf713f3 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.
diff --git a/lib/wx/src/gen/wxImage.erl b/lib/wx/src/gen/wxImage.erl
index 05d1038eee..884e49eabf 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.
diff --git a/lib/wx/src/gen/wxImageList.erl b/lib/wx/src/gen/wxImageList.erl
index 89e0b2cd41..dcd508d05b 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.
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..d26eb42fe8 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.
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..344af3dc0d 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.
diff --git a/lib/wx/src/gen/wxListBox.erl b/lib/wx/src/gen/wxListBox.erl
index 14cc553935..eaa026839e 100644
--- a/lib/wx/src/gen/wxListBox.erl
+++ b/lib/wx/src/gen/wxListBox.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.
@@ -35,45 +35,47 @@
isSelected/2,new/0,new/2,new/3,set/2,setFirstItem/2]).
%% inherited exports
--export([append/2,append/3,appendStrings/2,cacheBestSize/2,captureMouse/1,center/1,
- center/2,centerOnParent/1,centerOnParent/2,centre/1,centre/2,centreOnParent/1,
- centreOnParent/2,clear/1,clearBackground/1,clientToScreen/2,clientToScreen/3,
- close/1,close/2,connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
- delete/2,destroyChildren/1,disable/1,disconnect/1,disconnect/2,disconnect/3,
- enable/1,enable/2,findString/2,findString/3,findWindow/2,fit/1,fitInside/1,
- freeze/1,getAcceleratorTable/1,getBackgroundColour/1,getBackgroundStyle/1,
- getBestSize/1,getCaret/1,getCharHeight/1,getCharWidth/1,getChildren/1,
- getClientData/2,getClientSize/1,getContainingSizer/1,getCount/1,getCursor/1,
- getDropTarget/1,getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1,
- getGrandParent/1,getHandle/1,getHelpText/1,getId/1,getLabel/1,getMaxSize/1,
- getMinSize/1,getName/1,getParent/1,getPosition/1,getRect/1,getScreenPosition/1,
+-export([append/2,append/3,appendStrings/2,cacheBestSize/2,canSetTransparent/1,
+ captureMouse/1,center/1,center/2,centerOnParent/1,centerOnParent/2,
+ centre/1,centre/2,centreOnParent/1,centreOnParent/2,clear/1,clearBackground/1,
+ clientToScreen/2,clientToScreen/3,close/1,close/2,connect/2,connect/3,
+ convertDialogToPixels/2,convertPixelsToDialog/2,delete/2,destroyChildren/1,
+ disable/1,disconnect/1,disconnect/2,disconnect/3,enable/1,enable/2,
+ findString/2,findString/3,findWindow/2,fit/1,fitInside/1,freeze/1,getAcceleratorTable/1,
+ getBackgroundColour/1,getBackgroundStyle/1,getBestSize/1,getCaret/1,
+ getCharHeight/1,getCharWidth/1,getChildren/1,getClientData/2,getClientSize/1,
+ getContainingSizer/1,getCount/1,getCursor/1,getDropTarget/1,getEventHandler/1,
+ getExtraStyle/1,getFont/1,getForegroundColour/1,getGrandParent/1,
+ getHandle/1,getHelpText/1,getId/1,getLabel/1,getMaxSize/1,getMinSize/1,
+ getName/1,getParent/1,getPosition/1,getRect/1,getScreenPosition/1,
getScreenRect/1,getScrollPos/2,getScrollRange/2,getScrollThumb/2,
getSelection/1,getSize/1,getSizer/1,getString/2,getStringSelection/1,
getTextExtent/2,getTextExtent/3,getToolTip/1,getUpdateRegion/1,getVirtualSize/1,
getWindowStyleFlag/1,getWindowVariant/1,hasCapture/1,hasScrollbar/2,
hasTransparentBackground/1,hide/1,inheritAttributes/1,initDialog/1,
- insert/3,insert/4,invalidateBestSize/1,isEmpty/1,isEnabled/1,isExposed/2,
- isExposed/3,isExposed/5,isRetained/1,isShown/1,isTopLevel/1,layout/1,
- lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,move/2,move/3,move/4,
- moveAfterInTabOrder/2,moveBeforeInTabOrder/2,navigate/1,navigate/2,
- pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,popEventHandler/2,
- popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,refresh/2,refreshRect/2,
- refreshRect/3,releaseMouse/1,removeChild/2,reparent/2,screenToClient/1,
- screenToClient/2,scrollLines/2,scrollPages/2,scrollWindow/3,scrollWindow/4,
- select/2,setAcceleratorTable/2,setAutoLayout/2,setBackgroundColour/2,
- setBackgroundStyle/2,setCaret/2,setClientData/3,setClientSize/2,setClientSize/3,
- setContainingSizer/2,setCursor/2,setDropTarget/2,setExtraStyle/2,
- setFocus/1,setFocusFromKbd/1,setFont/2,setForegroundColour/2,setHelpText/2,
- setId/2,setLabel/2,setMaxSize/2,setMinSize/2,setName/2,setOwnBackgroundColour/2,
- setOwnFont/2,setOwnForegroundColour/2,setPalette/2,setScrollPos/3,
- setScrollPos/4,setScrollbar/5,setScrollbar/6,setSelection/2,setSize/2,
- setSize/3,setSize/5,setSize/6,setSizeHints/2,setSizeHints/3,setSizeHints/4,
- setSizer/2,setSizer/3,setSizerAndFit/2,setSizerAndFit/3,setString/3,
- setStringSelection/2,setThemeEnabled/2,setToolTip/2,setVirtualSize/2,
- setVirtualSize/3,setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
- setWindowStyle/2,setWindowStyleFlag/2,setWindowVariant/2,shouldInheritColours/1,
- show/1,show/2,thaw/1,transferDataFromWindow/1,transferDataToWindow/1,
- update/1,updateWindowUI/1,updateWindowUI/2,validate/1,warpPointer/3]).
+ insert/3,insert/4,invalidateBestSize/1,isDoubleBuffered/1,isEmpty/1,
+ isEnabled/1,isExposed/2,isExposed/3,isExposed/5,isRetained/1,isShown/1,
+ isTopLevel/1,layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,
+ move/2,move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,
+ navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,
+ popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,
+ refresh/2,refreshRect/2,refreshRect/3,releaseMouse/1,removeChild/2,
+ reparent/2,screenToClient/1,screenToClient/2,scrollLines/2,scrollPages/2,
+ scrollWindow/3,scrollWindow/4,select/2,setAcceleratorTable/2,setAutoLayout/2,
+ setBackgroundColour/2,setBackgroundStyle/2,setCaret/2,setClientData/3,
+ setClientSize/2,setClientSize/3,setContainingSizer/2,setCursor/2,
+ setDoubleBuffered/2,setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,
+ setFont/2,setForegroundColour/2,setHelpText/2,setId/2,setLabel/2,setMaxSize/2,
+ setMinSize/2,setName/2,setOwnBackgroundColour/2,setOwnFont/2,setOwnForegroundColour/2,
+ setPalette/2,setScrollPos/3,setScrollPos/4,setScrollbar/5,setScrollbar/6,
+ setSelection/2,setSize/2,setSize/3,setSize/5,setSize/6,setSizeHints/2,
+ setSizeHints/3,setSizeHints/4,setSizer/2,setSizer/3,setSizerAndFit/2,
+ setSizerAndFit/3,setString/3,setStringSelection/2,setThemeEnabled/2,
+ setToolTip/2,setTransparent/2,setVirtualSize/2,setVirtualSize/3,setVirtualSizeHints/2,
+ setVirtualSizeHints/3,setVirtualSizeHints/4,setWindowStyle/2,setWindowStyleFlag/2,
+ setWindowVariant/2,shouldInheritColours/1,show/1,show/2,thaw/1,transferDataFromWindow/1,
+ transferDataToWindow/1,update/1,updateWindowUI/1,updateWindowUI/2,
+ validate/1,warpPointer/3]).
-export_type([wxListBox/0]).
%% @hidden
@@ -278,6 +280,14 @@ setLabel(This,Label) -> wxControl:setLabel(This,Label).
getLabel(This) -> wxControl:getLabel(This).
%% From wxWindow
%% @hidden
+setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On).
+%% @hidden
+isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This).
+%% @hidden
+canSetTransparent(This) -> wxWindow:canSetTransparent(This).
+%% @hidden
+setTransparent(This,Alpha) -> wxWindow:setTransparent(This,Alpha).
+%% @hidden
warpPointer(This,X,Y) -> wxWindow:warpPointer(This,X,Y).
%% @hidden
validate(This) -> wxWindow:validate(This).
diff --git a/lib/wx/src/gen/wxListCtrl.erl b/lib/wx/src/gen/wxListCtrl.erl
index 491511b729..ed997710c8 100644
--- a/lib/wx/src/gen/wxListCtrl.erl
+++ b/lib/wx/src/gen/wxListCtrl.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.
@@ -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,
@@ -47,10 +47,10 @@
setSingleStyle/2,setSingleStyle/3,setTextColour/2,setWindowStyleFlag/2]).
%% inherited exports
--export([cacheBestSize/2,captureMouse/1,center/1,center/2,centerOnParent/1,
- centerOnParent/2,centre/1,centre/2,centreOnParent/1,centreOnParent/2,
- clearBackground/1,clientToScreen/2,clientToScreen/3,close/1,close/2,
- connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
+-export([cacheBestSize/2,canSetTransparent/1,captureMouse/1,center/1,center/2,
+ centerOnParent/1,centerOnParent/2,centre/1,centre/2,centreOnParent/1,
+ centreOnParent/2,clearBackground/1,clientToScreen/2,clientToScreen/3,
+ close/1,close/2,connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
destroyChildren/1,disable/1,disconnect/1,disconnect/2,disconnect/3,
enable/1,enable/2,findWindow/2,fit/1,fitInside/1,freeze/1,getAcceleratorTable/1,
getBackgroundColour/1,getBackgroundStyle/1,getBestSize/1,getCaret/1,
@@ -62,27 +62,28 @@
getScrollRange/2,getScrollThumb/2,getSize/1,getSizer/1,getTextExtent/2,
getTextExtent/3,getToolTip/1,getUpdateRegion/1,getVirtualSize/1,getWindowStyleFlag/1,
getWindowVariant/1,hasCapture/1,hasScrollbar/2,hasTransparentBackground/1,
- hide/1,inheritAttributes/1,initDialog/1,invalidateBestSize/1,isEnabled/1,
- isExposed/2,isExposed/3,isExposed/5,isRetained/1,isShown/1,isTopLevel/1,
- layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,move/2,
- move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,navigate/1,
- navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,popEventHandler/2,
- popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,refresh/2,refreshRect/2,
- refreshRect/3,releaseMouse/1,removeChild/2,reparent/2,screenToClient/1,
- screenToClient/2,scrollLines/2,scrollPages/2,scrollWindow/3,scrollWindow/4,
- setAcceleratorTable/2,setAutoLayout/2,setBackgroundStyle/2,setCaret/2,
- setClientSize/2,setClientSize/3,setContainingSizer/2,setCursor/2,
- setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,setFont/2,
- setForegroundColour/2,setHelpText/2,setId/2,setLabel/2,setMaxSize/2,
- setMinSize/2,setName/2,setOwnBackgroundColour/2,setOwnFont/2,setOwnForegroundColour/2,
- setPalette/2,setScrollPos/3,setScrollPos/4,setScrollbar/5,setScrollbar/6,
- setSize/2,setSize/3,setSize/5,setSize/6,setSizeHints/2,setSizeHints/3,
- setSizeHints/4,setSizer/2,setSizer/3,setSizerAndFit/2,setSizerAndFit/3,
- setThemeEnabled/2,setToolTip/2,setVirtualSize/2,setVirtualSize/3,
- setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
- setWindowStyle/2,setWindowVariant/2,shouldInheritColours/1,show/1,
- show/2,thaw/1,transferDataFromWindow/1,transferDataToWindow/1,update/1,
- updateWindowUI/1,updateWindowUI/2,validate/1,warpPointer/3]).
+ hide/1,inheritAttributes/1,initDialog/1,invalidateBestSize/1,isDoubleBuffered/1,
+ isEnabled/1,isExposed/2,isExposed/3,isExposed/5,isRetained/1,isShown/1,
+ isTopLevel/1,layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,
+ move/2,move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,
+ navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,
+ popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,
+ refresh/2,refreshRect/2,refreshRect/3,releaseMouse/1,removeChild/2,
+ reparent/2,screenToClient/1,screenToClient/2,scrollLines/2,scrollPages/2,
+ scrollWindow/3,scrollWindow/4,setAcceleratorTable/2,setAutoLayout/2,
+ setBackgroundStyle/2,setCaret/2,setClientSize/2,setClientSize/3,setContainingSizer/2,
+ setCursor/2,setDoubleBuffered/2,setDropTarget/2,setExtraStyle/2,setFocus/1,
+ setFocusFromKbd/1,setFont/2,setForegroundColour/2,setHelpText/2,setId/2,
+ setLabel/2,setMaxSize/2,setMinSize/2,setName/2,setOwnBackgroundColour/2,
+ setOwnFont/2,setOwnForegroundColour/2,setPalette/2,setScrollPos/3,
+ setScrollPos/4,setScrollbar/5,setScrollbar/6,setSize/2,setSize/3,setSize/5,
+ setSize/6,setSizeHints/2,setSizeHints/3,setSizeHints/4,setSizer/2,
+ setSizer/3,setSizerAndFit/2,setSizerAndFit/3,setThemeEnabled/2,setToolTip/2,
+ setTransparent/2,setVirtualSize/2,setVirtualSize/3,setVirtualSizeHints/2,
+ setVirtualSizeHints/3,setVirtualSizeHints/4,setWindowStyle/2,setWindowVariant/2,
+ shouldInheritColours/1,show/1,show/2,thaw/1,transferDataFromWindow/1,
+ transferDataToWindow/1,update/1,updateWindowUI/1,updateWindowUI/2,
+ validate/1,warpPointer/3]).
-export_type([wxListCtrl/0]).
%% @hidden
@@ -515,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 />
@@ -869,6 +871,14 @@ setLabel(This,Label) -> wxControl:setLabel(This,Label).
getLabel(This) -> wxControl:getLabel(This).
%% From wxWindow
%% @hidden
+setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On).
+%% @hidden
+isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This).
+%% @hidden
+canSetTransparent(This) -> wxWindow:canSetTransparent(This).
+%% @hidden
+setTransparent(This,Alpha) -> wxWindow:setTransparent(This,Alpha).
+%% @hidden
warpPointer(This,X,Y) -> wxWindow:warpPointer(This,X,Y).
%% @hidden
validate(This) -> wxWindow:validate(This).
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..0dcad246d0 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.
diff --git a/lib/wx/src/gen/wxListItemAttr.erl b/lib/wx/src/gen/wxListItemAttr.erl
index 0c594ede8f..c581292358 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.
diff --git a/lib/wx/src/gen/wxListView.erl b/lib/wx/src/gen/wxListView.erl
index 3720fe86c1..288afcee82 100644
--- a/lib/wx/src/gen/wxListView.erl
+++ b/lib/wx/src/gen/wxListView.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.
@@ -34,10 +34,10 @@
isSelected/2,select/2,select/3,setColumnImage/3]).
%% inherited exports
--export([cacheBestSize/2,captureMouse/1,center/1,center/2,centerOnParent/1,
- centerOnParent/2,centre/1,centre/2,centreOnParent/1,centreOnParent/2,
- clearBackground/1,clientToScreen/2,clientToScreen/3,close/1,close/2,
- connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
+-export([cacheBestSize/2,canSetTransparent/1,captureMouse/1,center/1,center/2,
+ centerOnParent/1,centerOnParent/2,centre/1,centre/2,centreOnParent/1,
+ centreOnParent/2,clearBackground/1,clientToScreen/2,clientToScreen/3,
+ close/1,close/2,connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
destroyChildren/1,disable/1,disconnect/1,disconnect/2,disconnect/3,
enable/1,enable/2,findWindow/2,fit/1,fitInside/1,freeze/1,getAcceleratorTable/1,
getBackgroundColour/1,getBackgroundStyle/1,getBestSize/1,getCaret/1,
@@ -49,24 +49,25 @@
getScrollRange/2,getScrollThumb/2,getSize/1,getSizer/1,getTextExtent/2,
getTextExtent/3,getToolTip/1,getUpdateRegion/1,getVirtualSize/1,getWindowStyleFlag/1,
getWindowVariant/1,hasCapture/1,hasScrollbar/2,hasTransparentBackground/1,
- hide/1,inheritAttributes/1,initDialog/1,invalidateBestSize/1,isEnabled/1,
- isExposed/2,isExposed/3,isExposed/5,isRetained/1,isShown/1,isTopLevel/1,
- layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,move/2,
- move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,navigate/1,
- navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,popEventHandler/2,
- popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,refresh/2,refreshRect/2,
- refreshRect/3,releaseMouse/1,removeChild/2,reparent/2,screenToClient/1,
- screenToClient/2,scrollLines/2,scrollPages/2,scrollWindow/3,scrollWindow/4,
- setAcceleratorTable/2,setAutoLayout/2,setBackgroundColour/2,setBackgroundStyle/2,
- setCaret/2,setClientSize/2,setClientSize/3,setContainingSizer/2,setCursor/2,
+ hide/1,inheritAttributes/1,initDialog/1,invalidateBestSize/1,isDoubleBuffered/1,
+ isEnabled/1,isExposed/2,isExposed/3,isExposed/5,isRetained/1,isShown/1,
+ isTopLevel/1,layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,
+ move/2,move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,
+ navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,
+ popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,
+ refresh/2,refreshRect/2,refreshRect/3,releaseMouse/1,removeChild/2,
+ reparent/2,screenToClient/1,screenToClient/2,scrollLines/2,scrollPages/2,
+ scrollWindow/3,scrollWindow/4,setAcceleratorTable/2,setAutoLayout/2,
+ setBackgroundColour/2,setBackgroundStyle/2,setCaret/2,setClientSize/2,
+ setClientSize/3,setContainingSizer/2,setCursor/2,setDoubleBuffered/2,
setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,setFont/2,
setForegroundColour/2,setHelpText/2,setId/2,setLabel/2,setMaxSize/2,
setMinSize/2,setName/2,setOwnBackgroundColour/2,setOwnFont/2,setOwnForegroundColour/2,
setPalette/2,setScrollPos/3,setScrollPos/4,setScrollbar/5,setScrollbar/6,
setSize/2,setSize/3,setSize/5,setSize/6,setSizeHints/2,setSizeHints/3,
setSizeHints/4,setSizer/2,setSizer/3,setSizerAndFit/2,setSizerAndFit/3,
- setThemeEnabled/2,setToolTip/2,setVirtualSize/2,setVirtualSize/3,
- setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
+ setThemeEnabled/2,setToolTip/2,setTransparent/2,setVirtualSize/2,
+ setVirtualSize/3,setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
setWindowStyle/2,setWindowStyleFlag/2,setWindowVariant/2,shouldInheritColours/1,
show/1,show/2,thaw/1,transferDataFromWindow/1,transferDataToWindow/1,
update/1,updateWindowUI/1,updateWindowUI/2,validate/1,warpPointer/3]).
@@ -168,6 +169,14 @@ setLabel(This,Label) -> wxControl:setLabel(This,Label).
getLabel(This) -> wxControl:getLabel(This).
%% From wxWindow
%% @hidden
+setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On).
+%% @hidden
+isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This).
+%% @hidden
+canSetTransparent(This) -> wxWindow:canSetTransparent(This).
+%% @hidden
+setTransparent(This,Alpha) -> wxWindow:setTransparent(This,Alpha).
+%% @hidden
warpPointer(This,X,Y) -> wxWindow:warpPointer(This,X,Y).
%% @hidden
validate(This) -> wxWindow:validate(This).
diff --git a/lib/wx/src/gen/wxListbook.erl b/lib/wx/src/gen/wxListbook.erl
index b5083c5746..6ea34e8eb1 100644
--- a/lib/wx/src/gen/wxListbook.erl
+++ b/lib/wx/src/gen/wxListbook.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.
@@ -38,10 +38,10 @@
setPageSize/2,setPageText/3,setSelection/2]).
%% inherited exports
--export([cacheBestSize/2,captureMouse/1,center/1,center/2,centerOnParent/1,
- centerOnParent/2,centre/1,centre/2,centreOnParent/1,centreOnParent/2,
- clearBackground/1,clientToScreen/2,clientToScreen/3,close/1,close/2,
- connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
+-export([cacheBestSize/2,canSetTransparent/1,captureMouse/1,center/1,center/2,
+ centerOnParent/1,centerOnParent/2,centre/1,centre/2,centreOnParent/1,
+ centreOnParent/2,clearBackground/1,clientToScreen/2,clientToScreen/3,
+ close/1,close/2,connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
destroyChildren/1,disable/1,disconnect/1,disconnect/2,disconnect/3,
enable/1,enable/2,findWindow/2,fit/1,fitInside/1,freeze/1,getAcceleratorTable/1,
getBackgroundColour/1,getBackgroundStyle/1,getBestSize/1,getCaret/1,
@@ -53,24 +53,25 @@
getScrollRange/2,getScrollThumb/2,getSize/1,getSizer/1,getTextExtent/2,
getTextExtent/3,getToolTip/1,getUpdateRegion/1,getVirtualSize/1,getWindowStyleFlag/1,
getWindowVariant/1,hasCapture/1,hasScrollbar/2,hasTransparentBackground/1,
- hide/1,inheritAttributes/1,initDialog/1,invalidateBestSize/1,isEnabled/1,
- isExposed/2,isExposed/3,isExposed/5,isRetained/1,isShown/1,isTopLevel/1,
- layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,move/2,
- move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,navigate/1,
- navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,popEventHandler/2,
- popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,refresh/2,refreshRect/2,
- refreshRect/3,releaseMouse/1,removeChild/2,reparent/2,screenToClient/1,
- screenToClient/2,scrollLines/2,scrollPages/2,scrollWindow/3,scrollWindow/4,
- setAcceleratorTable/2,setAutoLayout/2,setBackgroundColour/2,setBackgroundStyle/2,
- setCaret/2,setClientSize/2,setClientSize/3,setContainingSizer/2,setCursor/2,
+ hide/1,inheritAttributes/1,initDialog/1,invalidateBestSize/1,isDoubleBuffered/1,
+ isEnabled/1,isExposed/2,isExposed/3,isExposed/5,isRetained/1,isShown/1,
+ isTopLevel/1,layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,
+ move/2,move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,
+ navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,
+ popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,
+ refresh/2,refreshRect/2,refreshRect/3,releaseMouse/1,removeChild/2,
+ reparent/2,screenToClient/1,screenToClient/2,scrollLines/2,scrollPages/2,
+ scrollWindow/3,scrollWindow/4,setAcceleratorTable/2,setAutoLayout/2,
+ setBackgroundColour/2,setBackgroundStyle/2,setCaret/2,setClientSize/2,
+ setClientSize/3,setContainingSizer/2,setCursor/2,setDoubleBuffered/2,
setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,setFont/2,
setForegroundColour/2,setHelpText/2,setId/2,setLabel/2,setMaxSize/2,
setMinSize/2,setName/2,setOwnBackgroundColour/2,setOwnFont/2,setOwnForegroundColour/2,
setPalette/2,setScrollPos/3,setScrollPos/4,setScrollbar/5,setScrollbar/6,
setSize/2,setSize/3,setSize/5,setSize/6,setSizeHints/2,setSizeHints/3,
setSizeHints/4,setSizer/2,setSizer/3,setSizerAndFit/2,setSizerAndFit/3,
- setThemeEnabled/2,setToolTip/2,setVirtualSize/2,setVirtualSize/3,
- setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
+ setThemeEnabled/2,setToolTip/2,setTransparent/2,setVirtualSize/2,
+ setVirtualSize/3,setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
setWindowStyle/2,setWindowStyleFlag/2,setWindowVariant/2,shouldInheritColours/1,
show/1,show/2,thaw/1,transferDataFromWindow/1,transferDataToWindow/1,
update/1,updateWindowUI/1,updateWindowUI/2,validate/1,warpPointer/3]).
@@ -383,6 +384,14 @@ setLabel(This,Label) -> wxControl:setLabel(This,Label).
getLabel(This) -> wxControl:getLabel(This).
%% From wxWindow
%% @hidden
+setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On).
+%% @hidden
+isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This).
+%% @hidden
+canSetTransparent(This) -> wxWindow:canSetTransparent(This).
+%% @hidden
+setTransparent(This,Alpha) -> wxWindow:setTransparent(This,Alpha).
+%% @hidden
warpPointer(This,X,Y) -> wxWindow:warpPointer(This,X,Y).
%% @hidden
validate(This) -> wxWindow:validate(This).
diff --git a/lib/wx/src/gen/wxLocale.erl b/lib/wx/src/gen/wxLocale.erl
index c0488022e0..7d208b9823 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.
diff --git a/lib/wx/src/gen/wxLogNull.erl b/lib/wx/src/gen/wxLogNull.erl
index aa45245cd0..a071dffb95 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.
diff --git a/lib/wx/src/gen/wxMDIChildFrame.erl b/lib/wx/src/gen/wxMDIChildFrame.erl
index 05f07f1066..ed29e5431f 100644
--- a/lib/wx/src/gen/wxMDIChildFrame.erl
+++ b/lib/wx/src/gen/wxMDIChildFrame.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.
@@ -35,11 +35,11 @@
new/4,restore/1]).
%% inherited exports
--export([cacheBestSize/2,captureMouse/1,center/1,center/2,centerOnParent/1,
- centerOnParent/2,centerOnScreen/1,centerOnScreen/2,centre/1,centre/2,
- centreOnParent/1,centreOnParent/2,centreOnScreen/1,centreOnScreen/2,
- clearBackground/1,clientToScreen/2,clientToScreen/3,close/1,close/2,
- connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
+-export([cacheBestSize/2,canSetTransparent/1,captureMouse/1,center/1,center/2,
+ centerOnParent/1,centerOnParent/2,centerOnScreen/1,centerOnScreen/2,
+ centre/1,centre/2,centreOnParent/1,centreOnParent/2,centreOnScreen/1,
+ centreOnScreen/2,clearBackground/1,clientToScreen/2,clientToScreen/3,
+ close/1,close/2,connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
createStatusBar/1,createStatusBar/2,createToolBar/1,createToolBar/2,
destroyChildren/1,disable/1,disconnect/1,disconnect/2,disconnect/3,
enable/1,enable/2,findWindow/2,fit/1,fitInside/1,freeze/1,getAcceleratorTable/1,
@@ -55,26 +55,27 @@
getToolTip/1,getUpdateRegion/1,getVirtualSize/1,getWindowStyleFlag/1,
getWindowVariant/1,hasCapture/1,hasScrollbar/2,hasTransparentBackground/1,
hide/1,iconize/1,iconize/2,inheritAttributes/1,initDialog/1,invalidateBestSize/1,
- isActive/1,isEnabled/1,isExposed/2,isExposed/3,isExposed/5,isFullScreen/1,
- isIconized/1,isMaximized/1,isRetained/1,isShown/1,isTopLevel/1,layout/1,
- lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,move/2,move/3,move/4,
- moveAfterInTabOrder/2,moveBeforeInTabOrder/2,navigate/1,navigate/2,
- pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,popEventHandler/2,
- popupMenu/2,popupMenu/3,popupMenu/4,processCommand/2,raise/1,refresh/1,
- refresh/2,refreshRect/2,refreshRect/3,releaseMouse/1,removeChild/2,
- reparent/2,requestUserAttention/1,requestUserAttention/2,screenToClient/1,
- screenToClient/2,scrollLines/2,scrollPages/2,scrollWindow/3,scrollWindow/4,
- sendSizeEvent/1,setAcceleratorTable/2,setAutoLayout/2,setBackgroundColour/2,
- setBackgroundStyle/2,setCaret/2,setClientSize/2,setClientSize/3,setContainingSizer/2,
- setCursor/2,setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,
- setFont/2,setForegroundColour/2,setHelpText/2,setIcon/2,setIcons/2,
- setId/2,setLabel/2,setMaxSize/2,setMenuBar/2,setMinSize/2,setName/2,
- setOwnBackgroundColour/2,setOwnFont/2,setOwnForegroundColour/2,setPalette/2,
- setScrollPos/3,setScrollPos/4,setScrollbar/5,setScrollbar/6,setShape/2,
- setSize/2,setSize/3,setSize/5,setSize/6,setSizeHints/2,setSizeHints/3,
- setSizeHints/4,setSizer/2,setSizer/3,setSizerAndFit/2,setSizerAndFit/3,
- setStatusBar/2,setStatusBarPane/2,setStatusText/2,setStatusText/3,
- setStatusWidths/2,setThemeEnabled/2,setTitle/2,setToolBar/2,setToolTip/2,
+ isActive/1,isDoubleBuffered/1,isEnabled/1,isExposed/2,isExposed/3,
+ isExposed/5,isFullScreen/1,isIconized/1,isMaximized/1,isRetained/1,
+ isShown/1,isTopLevel/1,layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,
+ makeModal/2,move/2,move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,
+ navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,
+ popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4,processCommand/2,
+ raise/1,refresh/1,refresh/2,refreshRect/2,refreshRect/3,releaseMouse/1,
+ removeChild/2,reparent/2,requestUserAttention/1,requestUserAttention/2,
+ screenToClient/1,screenToClient/2,scrollLines/2,scrollPages/2,scrollWindow/3,
+ scrollWindow/4,sendSizeEvent/1,setAcceleratorTable/2,setAutoLayout/2,
+ setBackgroundColour/2,setBackgroundStyle/2,setCaret/2,setClientSize/2,
+ setClientSize/3,setContainingSizer/2,setCursor/2,setDoubleBuffered/2,
+ setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,setFont/2,
+ setForegroundColour/2,setHelpText/2,setIcon/2,setIcons/2,setId/2,setLabel/2,
+ setMaxSize/2,setMenuBar/2,setMinSize/2,setName/2,setOwnBackgroundColour/2,
+ setOwnFont/2,setOwnForegroundColour/2,setPalette/2,setScrollPos/3,
+ setScrollPos/4,setScrollbar/5,setScrollbar/6,setShape/2,setSize/2,
+ setSize/3,setSize/5,setSize/6,setSizeHints/2,setSizeHints/3,setSizeHints/4,
+ setSizer/2,setSizer/3,setSizerAndFit/2,setSizerAndFit/3,setStatusBar/2,
+ setStatusBarPane/2,setStatusText/2,setStatusText/3,setStatusWidths/2,
+ setThemeEnabled/2,setTitle/2,setToolBar/2,setToolTip/2,setTransparent/2,
setVirtualSize/2,setVirtualSize/3,setVirtualSizeHints/2,setVirtualSizeHints/3,
setVirtualSizeHints/4,setWindowStyle/2,setWindowStyleFlag/2,setWindowVariant/2,
shouldInheritColours/1,show/1,show/2,showFullScreen/2,showFullScreen/3,
@@ -274,6 +275,14 @@ getIcons(This) -> wxTopLevelWindow:getIcons(This).
getIcon(This) -> wxTopLevelWindow:getIcon(This).
%% From wxWindow
%% @hidden
+setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On).
+%% @hidden
+isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This).
+%% @hidden
+canSetTransparent(This) -> wxWindow:canSetTransparent(This).
+%% @hidden
+setTransparent(This,Alpha) -> wxWindow:setTransparent(This,Alpha).
+%% @hidden
warpPointer(This,X,Y) -> wxWindow:warpPointer(This,X,Y).
%% @hidden
validate(This) -> wxWindow:validate(This).
diff --git a/lib/wx/src/gen/wxMDIClientWindow.erl b/lib/wx/src/gen/wxMDIClientWindow.erl
index 20569718f7..6f10627086 100644
--- a/lib/wx/src/gen/wxMDIClientWindow.erl
+++ b/lib/wx/src/gen/wxMDIClientWindow.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.
@@ -32,10 +32,10 @@
-export([createClient/2,createClient/3,destroy/1,new/0,new/1,new/2]).
%% inherited exports
--export([cacheBestSize/2,captureMouse/1,center/1,center/2,centerOnParent/1,
- centerOnParent/2,centre/1,centre/2,centreOnParent/1,centreOnParent/2,
- clearBackground/1,clientToScreen/2,clientToScreen/3,close/1,close/2,
- connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
+-export([cacheBestSize/2,canSetTransparent/1,captureMouse/1,center/1,center/2,
+ centerOnParent/1,centerOnParent/2,centre/1,centre/2,centreOnParent/1,
+ centreOnParent/2,clearBackground/1,clientToScreen/2,clientToScreen/3,
+ close/1,close/2,connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
destroyChildren/1,disable/1,disconnect/1,disconnect/2,disconnect/3,
enable/1,enable/2,findWindow/2,fit/1,fitInside/1,freeze/1,getAcceleratorTable/1,
getBackgroundColour/1,getBackgroundStyle/1,getBestSize/1,getCaret/1,
@@ -47,24 +47,25 @@
getScrollRange/2,getScrollThumb/2,getSize/1,getSizer/1,getTextExtent/2,
getTextExtent/3,getToolTip/1,getUpdateRegion/1,getVirtualSize/1,getWindowStyleFlag/1,
getWindowVariant/1,hasCapture/1,hasScrollbar/2,hasTransparentBackground/1,
- hide/1,inheritAttributes/1,initDialog/1,invalidateBestSize/1,isEnabled/1,
- isExposed/2,isExposed/3,isExposed/5,isRetained/1,isShown/1,isTopLevel/1,
- layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,move/2,
- move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,navigate/1,
- navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,popEventHandler/2,
- popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,refresh/2,refreshRect/2,
- refreshRect/3,releaseMouse/1,removeChild/2,reparent/2,screenToClient/1,
- screenToClient/2,scrollLines/2,scrollPages/2,scrollWindow/3,scrollWindow/4,
- setAcceleratorTable/2,setAutoLayout/2,setBackgroundColour/2,setBackgroundStyle/2,
- setCaret/2,setClientSize/2,setClientSize/3,setContainingSizer/2,setCursor/2,
+ hide/1,inheritAttributes/1,initDialog/1,invalidateBestSize/1,isDoubleBuffered/1,
+ isEnabled/1,isExposed/2,isExposed/3,isExposed/5,isRetained/1,isShown/1,
+ isTopLevel/1,layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,
+ move/2,move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,
+ navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,
+ popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,
+ refresh/2,refreshRect/2,refreshRect/3,releaseMouse/1,removeChild/2,
+ reparent/2,screenToClient/1,screenToClient/2,scrollLines/2,scrollPages/2,
+ scrollWindow/3,scrollWindow/4,setAcceleratorTable/2,setAutoLayout/2,
+ setBackgroundColour/2,setBackgroundStyle/2,setCaret/2,setClientSize/2,
+ setClientSize/3,setContainingSizer/2,setCursor/2,setDoubleBuffered/2,
setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,setFont/2,
setForegroundColour/2,setHelpText/2,setId/2,setLabel/2,setMaxSize/2,
setMinSize/2,setName/2,setOwnBackgroundColour/2,setOwnFont/2,setOwnForegroundColour/2,
setPalette/2,setScrollPos/3,setScrollPos/4,setScrollbar/5,setScrollbar/6,
setSize/2,setSize/3,setSize/5,setSize/6,setSizeHints/2,setSizeHints/3,
setSizeHints/4,setSizer/2,setSizer/3,setSizerAndFit/2,setSizerAndFit/3,
- setThemeEnabled/2,setToolTip/2,setVirtualSize/2,setVirtualSize/3,
- setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
+ setThemeEnabled/2,setToolTip/2,setTransparent/2,setVirtualSize/2,
+ setVirtualSize/3,setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
setWindowStyle/2,setWindowStyleFlag/2,setWindowVariant/2,shouldInheritColours/1,
show/1,show/2,thaw/1,transferDataFromWindow/1,transferDataToWindow/1,
update/1,updateWindowUI/1,updateWindowUI/2,validate/1,warpPointer/3]).
@@ -135,6 +136,14 @@ destroy(Obj=#wx_ref{type=Type}) ->
ok.
%% From wxWindow
%% @hidden
+setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On).
+%% @hidden
+isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This).
+%% @hidden
+canSetTransparent(This) -> wxWindow:canSetTransparent(This).
+%% @hidden
+setTransparent(This,Alpha) -> wxWindow:setTransparent(This,Alpha).
+%% @hidden
warpPointer(This,X,Y) -> wxWindow:warpPointer(This,X,Y).
%% @hidden
validate(This) -> wxWindow:validate(This).
diff --git a/lib/wx/src/gen/wxMDIParentFrame.erl b/lib/wx/src/gen/wxMDIParentFrame.erl
index 9aeba68ea3..47d9182d60 100644
--- a/lib/wx/src/gen/wxMDIParentFrame.erl
+++ b/lib/wx/src/gen/wxMDIParentFrame.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,11 +36,11 @@
tile/1,tile/2]).
%% inherited exports
--export([cacheBestSize/2,captureMouse/1,center/1,center/2,centerOnParent/1,
- centerOnParent/2,centerOnScreen/1,centerOnScreen/2,centre/1,centre/2,
- centreOnParent/1,centreOnParent/2,centreOnScreen/1,centreOnScreen/2,
- clearBackground/1,clientToScreen/2,clientToScreen/3,close/1,close/2,
- connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
+-export([cacheBestSize/2,canSetTransparent/1,captureMouse/1,center/1,center/2,
+ centerOnParent/1,centerOnParent/2,centerOnScreen/1,centerOnScreen/2,
+ centre/1,centre/2,centreOnParent/1,centreOnParent/2,centreOnScreen/1,
+ centreOnScreen/2,clearBackground/1,clientToScreen/2,clientToScreen/3,
+ close/1,close/2,connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
createStatusBar/1,createStatusBar/2,createToolBar/1,createToolBar/2,
destroyChildren/1,disable/1,disconnect/1,disconnect/2,disconnect/3,
enable/1,enable/2,findWindow/2,fit/1,fitInside/1,freeze/1,getAcceleratorTable/1,
@@ -56,32 +56,32 @@
getToolTip/1,getUpdateRegion/1,getVirtualSize/1,getWindowStyleFlag/1,
getWindowVariant/1,hasCapture/1,hasScrollbar/2,hasTransparentBackground/1,
hide/1,iconize/1,iconize/2,inheritAttributes/1,initDialog/1,invalidateBestSize/1,
- isActive/1,isEnabled/1,isExposed/2,isExposed/3,isExposed/5,isFullScreen/1,
- isIconized/1,isMaximized/1,isRetained/1,isShown/1,isTopLevel/1,layout/1,
- lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,maximize/1,maximize/2,
- move/2,move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,
- navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,
- popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4,processCommand/2,
- raise/1,refresh/1,refresh/2,refreshRect/2,refreshRect/3,releaseMouse/1,
- removeChild/2,reparent/2,requestUserAttention/1,requestUserAttention/2,
+ isActive/1,isDoubleBuffered/1,isEnabled/1,isExposed/2,isExposed/3,
+ isExposed/5,isFullScreen/1,isIconized/1,isMaximized/1,isRetained/1,
+ isShown/1,isTopLevel/1,layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,
+ makeModal/2,maximize/1,maximize/2,move/2,move/3,move/4,moveAfterInTabOrder/2,
+ moveBeforeInTabOrder/2,navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1,
+ popEventHandler/1,popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4,
+ processCommand/2,raise/1,refresh/1,refresh/2,refreshRect/2,refreshRect/3,
+ releaseMouse/1,removeChild/2,reparent/2,requestUserAttention/1,requestUserAttention/2,
screenToClient/1,screenToClient/2,scrollLines/2,scrollPages/2,scrollWindow/3,
scrollWindow/4,sendSizeEvent/1,setAcceleratorTable/2,setAutoLayout/2,
setBackgroundColour/2,setBackgroundStyle/2,setCaret/2,setClientSize/2,
- setClientSize/3,setContainingSizer/2,setCursor/2,setDropTarget/2,
- setExtraStyle/2,setFocus/1,setFocusFromKbd/1,setFont/2,setForegroundColour/2,
- setHelpText/2,setIcon/2,setIcons/2,setId/2,setLabel/2,setMaxSize/2,
- setMenuBar/2,setMinSize/2,setName/2,setOwnBackgroundColour/2,setOwnFont/2,
- setOwnForegroundColour/2,setPalette/2,setScrollPos/3,setScrollPos/4,
- setScrollbar/5,setScrollbar/6,setShape/2,setSize/2,setSize/3,setSize/5,
- setSize/6,setSizeHints/2,setSizeHints/3,setSizeHints/4,setSizer/2,
- setSizer/3,setSizerAndFit/2,setSizerAndFit/3,setStatusBar/2,setStatusBarPane/2,
- setStatusText/2,setStatusText/3,setStatusWidths/2,setThemeEnabled/2,
- setTitle/2,setToolBar/2,setToolTip/2,setVirtualSize/2,setVirtualSize/3,
- setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
- setWindowStyle/2,setWindowStyleFlag/2,setWindowVariant/2,shouldInheritColours/1,
- show/1,show/2,showFullScreen/2,showFullScreen/3,thaw/1,transferDataFromWindow/1,
- transferDataToWindow/1,update/1,updateWindowUI/1,updateWindowUI/2,
- validate/1,warpPointer/3]).
+ setClientSize/3,setContainingSizer/2,setCursor/2,setDoubleBuffered/2,
+ setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,setFont/2,
+ setForegroundColour/2,setHelpText/2,setIcon/2,setIcons/2,setId/2,setLabel/2,
+ setMaxSize/2,setMenuBar/2,setMinSize/2,setName/2,setOwnBackgroundColour/2,
+ setOwnFont/2,setOwnForegroundColour/2,setPalette/2,setScrollPos/3,
+ setScrollPos/4,setScrollbar/5,setScrollbar/6,setShape/2,setSize/2,
+ setSize/3,setSize/5,setSize/6,setSizeHints/2,setSizeHints/3,setSizeHints/4,
+ setSizer/2,setSizer/3,setSizerAndFit/2,setSizerAndFit/3,setStatusBar/2,
+ setStatusBarPane/2,setStatusText/2,setStatusText/3,setStatusWidths/2,
+ setThemeEnabled/2,setTitle/2,setToolBar/2,setToolTip/2,setTransparent/2,
+ setVirtualSize/2,setVirtualSize/3,setVirtualSizeHints/2,setVirtualSizeHints/3,
+ setVirtualSizeHints/4,setWindowStyle/2,setWindowStyleFlag/2,setWindowVariant/2,
+ shouldInheritColours/1,show/1,show/2,showFullScreen/2,showFullScreen/3,
+ thaw/1,transferDataFromWindow/1,transferDataToWindow/1,update/1,updateWindowUI/1,
+ updateWindowUI/2,validate/1,warpPointer/3]).
-export_type([wxMDIParentFrame/0]).
%% @hidden
@@ -313,6 +313,14 @@ getIcons(This) -> wxTopLevelWindow:getIcons(This).
getIcon(This) -> wxTopLevelWindow:getIcon(This).
%% From wxWindow
%% @hidden
+setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On).
+%% @hidden
+isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This).
+%% @hidden
+canSetTransparent(This) -> wxWindow:canSetTransparent(This).
+%% @hidden
+setTransparent(This,Alpha) -> wxWindow:setTransparent(This,Alpha).
+%% @hidden
warpPointer(This,X,Y) -> wxWindow:warpPointer(This,X,Y).
%% @hidden
validate(This) -> wxWindow:validate(This).
diff --git a/lib/wx/src/gen/wxMask.erl b/lib/wx/src/gen/wxMask.erl
index 343f8e4938..98c96277dd 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.
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..8a59be7ad2 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.
diff --git a/lib/wx/src/gen/wxMenu.erl b/lib/wx/src/gen/wxMenu.erl
index a9911e7ded..59feef7b19 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.
diff --git a/lib/wx/src/gen/wxMenuBar.erl b/lib/wx/src/gen/wxMenuBar.erl
index cb35015c08..5e879da5ed 100644
--- a/lib/wx/src/gen/wxMenuBar.erl
+++ b/lib/wx/src/gen/wxMenuBar.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,10 +36,10 @@
setLabelTop/3]).
%% inherited exports
--export([cacheBestSize/2,captureMouse/1,center/1,center/2,centerOnParent/1,
- centerOnParent/2,centre/1,centre/2,centreOnParent/1,centreOnParent/2,
- clearBackground/1,clientToScreen/2,clientToScreen/3,close/1,close/2,
- connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
+-export([cacheBestSize/2,canSetTransparent/1,captureMouse/1,center/1,center/2,
+ centerOnParent/1,centerOnParent/2,centre/1,centre/2,centreOnParent/1,
+ centreOnParent/2,clearBackground/1,clientToScreen/2,clientToScreen/3,
+ close/1,close/2,connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
destroyChildren/1,disable/1,disconnect/1,disconnect/2,disconnect/3,
findWindow/2,fit/1,fitInside/1,freeze/1,getAcceleratorTable/1,getBackgroundColour/1,
getBackgroundStyle/1,getBestSize/1,getCaret/1,getCharHeight/1,getCharWidth/1,
@@ -51,24 +51,24 @@
getSize/1,getSizer/1,getTextExtent/2,getTextExtent/3,getToolTip/1,
getUpdateRegion/1,getVirtualSize/1,getWindowStyleFlag/1,getWindowVariant/1,
hasCapture/1,hasScrollbar/2,hasTransparentBackground/1,hide/1,inheritAttributes/1,
- initDialog/1,invalidateBestSize/1,isExposed/2,isExposed/3,isExposed/5,
- isRetained/1,isShown/1,isTopLevel/1,layout/1,lineDown/1,lineUp/1,lower/1,
- makeModal/1,makeModal/2,move/2,move/3,move/4,moveAfterInTabOrder/2,
- moveBeforeInTabOrder/2,navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1,
- popEventHandler/1,popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4,
- raise/1,refresh/1,refresh/2,refreshRect/2,refreshRect/3,releaseMouse/1,
- removeChild/2,reparent/2,screenToClient/1,screenToClient/2,scrollLines/2,
- scrollPages/2,scrollWindow/3,scrollWindow/4,setAcceleratorTable/2,
- setAutoLayout/2,setBackgroundColour/2,setBackgroundStyle/2,setCaret/2,
- setClientSize/2,setClientSize/3,setContainingSizer/2,setCursor/2,
- setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,setFont/2,
- setForegroundColour/2,setHelpText/2,setId/2,setMaxSize/2,setMinSize/2,
- setName/2,setOwnBackgroundColour/2,setOwnFont/2,setOwnForegroundColour/2,
+ initDialog/1,invalidateBestSize/1,isDoubleBuffered/1,isExposed/2,
+ isExposed/3,isExposed/5,isRetained/1,isShown/1,isTopLevel/1,layout/1,
+ lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,move/2,move/3,move/4,
+ moveAfterInTabOrder/2,moveBeforeInTabOrder/2,navigate/1,navigate/2,
+ pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,popEventHandler/2,
+ popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,refresh/2,refreshRect/2,
+ refreshRect/3,releaseMouse/1,removeChild/2,reparent/2,screenToClient/1,
+ screenToClient/2,scrollLines/2,scrollPages/2,scrollWindow/3,scrollWindow/4,
+ setAcceleratorTable/2,setAutoLayout/2,setBackgroundColour/2,setBackgroundStyle/2,
+ setCaret/2,setClientSize/2,setClientSize/3,setContainingSizer/2,setCursor/2,
+ setDoubleBuffered/2,setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,
+ setFont/2,setForegroundColour/2,setHelpText/2,setId/2,setMaxSize/2,
+ setMinSize/2,setName/2,setOwnBackgroundColour/2,setOwnFont/2,setOwnForegroundColour/2,
setPalette/2,setScrollPos/3,setScrollPos/4,setScrollbar/5,setScrollbar/6,
setSize/2,setSize/3,setSize/5,setSize/6,setSizeHints/2,setSizeHints/3,
setSizeHints/4,setSizer/2,setSizer/3,setSizerAndFit/2,setSizerAndFit/3,
- setThemeEnabled/2,setToolTip/2,setVirtualSize/2,setVirtualSize/3,
- setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
+ setThemeEnabled/2,setToolTip/2,setTransparent/2,setVirtualSize/2,
+ setVirtualSize/3,setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
setWindowStyle/2,setWindowStyleFlag/2,setWindowVariant/2,shouldInheritColours/1,
show/1,show/2,thaw/1,transferDataFromWindow/1,transferDataToWindow/1,
update/1,updateWindowUI/1,updateWindowUI/2,validate/1,warpPointer/3]).
@@ -340,6 +340,14 @@ destroy(Obj=#wx_ref{type=Type}) ->
ok.
%% From wxWindow
%% @hidden
+setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On).
+%% @hidden
+isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This).
+%% @hidden
+canSetTransparent(This) -> wxWindow:canSetTransparent(This).
+%% @hidden
+setTransparent(This,Alpha) -> wxWindow:setTransparent(This,Alpha).
+%% @hidden
warpPointer(This,X,Y) -> wxWindow:warpPointer(This,X,Y).
%% @hidden
validate(This) -> wxWindow:validate(This).
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..9325f47d90 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.
diff --git a/lib/wx/src/gen/wxMessageDialog.erl b/lib/wx/src/gen/wxMessageDialog.erl
index f024145ed6..1fe99b2b88 100644
--- a/lib/wx/src/gen/wxMessageDialog.erl
+++ b/lib/wx/src/gen/wxMessageDialog.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.
@@ -34,11 +34,11 @@
-export([destroy/1,new/2,new/3]).
%% inherited exports
--export([cacheBestSize/2,captureMouse/1,center/1,center/2,centerOnParent/1,
- centerOnParent/2,centerOnScreen/1,centerOnScreen/2,centre/1,centre/2,
- centreOnParent/1,centreOnParent/2,centreOnScreen/1,centreOnScreen/2,
- clearBackground/1,clientToScreen/2,clientToScreen/3,close/1,close/2,
- connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
+-export([cacheBestSize/2,canSetTransparent/1,captureMouse/1,center/1,center/2,
+ centerOnParent/1,centerOnParent/2,centerOnScreen/1,centerOnScreen/2,
+ centre/1,centre/2,centreOnParent/1,centreOnParent/2,centreOnScreen/1,
+ centreOnScreen/2,clearBackground/1,clientToScreen/2,clientToScreen/3,
+ close/1,close/2,connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
createButtonSizer/2,createStdDialogButtonSizer/2,destroyChildren/1,
disable/1,disconnect/1,disconnect/2,disconnect/3,enable/1,enable/2,
endModal/2,findWindow/2,fit/1,fitInside/1,freeze/1,getAcceleratorTable/1,
@@ -53,25 +53,26 @@
getTitle/1,getToolTip/1,getUpdateRegion/1,getVirtualSize/1,getWindowStyleFlag/1,
getWindowVariant/1,hasCapture/1,hasScrollbar/2,hasTransparentBackground/1,
hide/1,iconize/1,iconize/2,inheritAttributes/1,initDialog/1,invalidateBestSize/1,
- isActive/1,isEnabled/1,isExposed/2,isExposed/3,isExposed/5,isFullScreen/1,
- isIconized/1,isMaximized/1,isModal/1,isRetained/1,isShown/1,isTopLevel/1,
- layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,maximize/1,
- maximize/2,move/2,move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,
- navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,
- popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,
- refresh/2,refreshRect/2,refreshRect/3,releaseMouse/1,removeChild/2,
- reparent/2,requestUserAttention/1,requestUserAttention/2,screenToClient/1,
- screenToClient/2,scrollLines/2,scrollPages/2,scrollWindow/3,scrollWindow/4,
- setAcceleratorTable/2,setAffirmativeId/2,setAutoLayout/2,setBackgroundColour/2,
- setBackgroundStyle/2,setCaret/2,setClientSize/2,setClientSize/3,setContainingSizer/2,
- setCursor/2,setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,
- setFont/2,setForegroundColour/2,setHelpText/2,setIcon/2,setIcons/2,
- setId/2,setLabel/2,setMaxSize/2,setMinSize/2,setName/2,setOwnBackgroundColour/2,
- setOwnFont/2,setOwnForegroundColour/2,setPalette/2,setReturnCode/2,
- setScrollPos/3,setScrollPos/4,setScrollbar/5,setScrollbar/6,setShape/2,
- setSize/2,setSize/3,setSize/5,setSize/6,setSizeHints/2,setSizeHints/3,
- setSizeHints/4,setSizer/2,setSizer/3,setSizerAndFit/2,setSizerAndFit/3,
- setThemeEnabled/2,setTitle/2,setToolTip/2,setVirtualSize/2,setVirtualSize/3,
+ isActive/1,isDoubleBuffered/1,isEnabled/1,isExposed/2,isExposed/3,
+ isExposed/5,isFullScreen/1,isIconized/1,isMaximized/1,isModal/1,isRetained/1,
+ isShown/1,isTopLevel/1,layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,
+ makeModal/2,maximize/1,maximize/2,move/2,move/3,move/4,moveAfterInTabOrder/2,
+ moveBeforeInTabOrder/2,navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1,
+ popEventHandler/1,popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4,
+ raise/1,refresh/1,refresh/2,refreshRect/2,refreshRect/3,releaseMouse/1,
+ removeChild/2,reparent/2,requestUserAttention/1,requestUserAttention/2,
+ screenToClient/1,screenToClient/2,scrollLines/2,scrollPages/2,scrollWindow/3,
+ scrollWindow/4,setAcceleratorTable/2,setAffirmativeId/2,setAutoLayout/2,
+ setBackgroundColour/2,setBackgroundStyle/2,setCaret/2,setClientSize/2,
+ setClientSize/3,setContainingSizer/2,setCursor/2,setDoubleBuffered/2,
+ setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,setFont/2,
+ setForegroundColour/2,setHelpText/2,setIcon/2,setIcons/2,setId/2,setLabel/2,
+ setMaxSize/2,setMinSize/2,setName/2,setOwnBackgroundColour/2,setOwnFont/2,
+ setOwnForegroundColour/2,setPalette/2,setReturnCode/2,setScrollPos/3,
+ setScrollPos/4,setScrollbar/5,setScrollbar/6,setShape/2,setSize/2,
+ setSize/3,setSize/5,setSize/6,setSizeHints/2,setSizeHints/3,setSizeHints/4,
+ setSizer/2,setSizer/3,setSizerAndFit/2,setSizerAndFit/3,setThemeEnabled/2,
+ setTitle/2,setToolTip/2,setTransparent/2,setVirtualSize/2,setVirtualSize/3,
setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
setWindowStyle/2,setWindowStyleFlag/2,setWindowVariant/2,shouldInheritColours/1,
show/1,show/2,showFullScreen/2,showFullScreen/3,showModal/1,thaw/1,
@@ -191,6 +192,14 @@ getIcons(This) -> wxTopLevelWindow:getIcons(This).
getIcon(This) -> wxTopLevelWindow:getIcon(This).
%% From wxWindow
%% @hidden
+setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On).
+%% @hidden
+isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This).
+%% @hidden
+canSetTransparent(This) -> wxWindow:canSetTransparent(This).
+%% @hidden
+setTransparent(This,Alpha) -> wxWindow:setTransparent(This,Alpha).
+%% @hidden
warpPointer(This,X,Y) -> wxWindow:warpPointer(This,X,Y).
%% @hidden
validate(This) -> wxWindow:validate(This).
diff --git a/lib/wx/src/gen/wxMiniFrame.erl b/lib/wx/src/gen/wxMiniFrame.erl
index 7622ddf0d2..f731cc5416 100644
--- a/lib/wx/src/gen/wxMiniFrame.erl
+++ b/lib/wx/src/gen/wxMiniFrame.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.
@@ -34,11 +34,11 @@
-export([create/4,create/5,destroy/1,new/0,new/3,new/4]).
%% inherited exports
--export([cacheBestSize/2,captureMouse/1,center/1,center/2,centerOnParent/1,
- centerOnParent/2,centerOnScreen/1,centerOnScreen/2,centre/1,centre/2,
- centreOnParent/1,centreOnParent/2,centreOnScreen/1,centreOnScreen/2,
- clearBackground/1,clientToScreen/2,clientToScreen/3,close/1,close/2,
- connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
+-export([cacheBestSize/2,canSetTransparent/1,captureMouse/1,center/1,center/2,
+ centerOnParent/1,centerOnParent/2,centerOnScreen/1,centerOnScreen/2,
+ centre/1,centre/2,centreOnParent/1,centreOnParent/2,centreOnScreen/1,
+ centreOnScreen/2,clearBackground/1,clientToScreen/2,clientToScreen/3,
+ close/1,close/2,connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
createStatusBar/1,createStatusBar/2,createToolBar/1,createToolBar/2,
destroyChildren/1,disable/1,disconnect/1,disconnect/2,disconnect/3,
enable/1,enable/2,findWindow/2,fit/1,fitInside/1,freeze/1,getAcceleratorTable/1,
@@ -54,32 +54,32 @@
getToolTip/1,getUpdateRegion/1,getVirtualSize/1,getWindowStyleFlag/1,
getWindowVariant/1,hasCapture/1,hasScrollbar/2,hasTransparentBackground/1,
hide/1,iconize/1,iconize/2,inheritAttributes/1,initDialog/1,invalidateBestSize/1,
- isActive/1,isEnabled/1,isExposed/2,isExposed/3,isExposed/5,isFullScreen/1,
- isIconized/1,isMaximized/1,isRetained/1,isShown/1,isTopLevel/1,layout/1,
- lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,maximize/1,maximize/2,
- move/2,move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,
- navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,
- popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4,processCommand/2,
- raise/1,refresh/1,refresh/2,refreshRect/2,refreshRect/3,releaseMouse/1,
- removeChild/2,reparent/2,requestUserAttention/1,requestUserAttention/2,
+ isActive/1,isDoubleBuffered/1,isEnabled/1,isExposed/2,isExposed/3,
+ isExposed/5,isFullScreen/1,isIconized/1,isMaximized/1,isRetained/1,
+ isShown/1,isTopLevel/1,layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,
+ makeModal/2,maximize/1,maximize/2,move/2,move/3,move/4,moveAfterInTabOrder/2,
+ moveBeforeInTabOrder/2,navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1,
+ popEventHandler/1,popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4,
+ processCommand/2,raise/1,refresh/1,refresh/2,refreshRect/2,refreshRect/3,
+ releaseMouse/1,removeChild/2,reparent/2,requestUserAttention/1,requestUserAttention/2,
screenToClient/1,screenToClient/2,scrollLines/2,scrollPages/2,scrollWindow/3,
scrollWindow/4,sendSizeEvent/1,setAcceleratorTable/2,setAutoLayout/2,
setBackgroundColour/2,setBackgroundStyle/2,setCaret/2,setClientSize/2,
- setClientSize/3,setContainingSizer/2,setCursor/2,setDropTarget/2,
- setExtraStyle/2,setFocus/1,setFocusFromKbd/1,setFont/2,setForegroundColour/2,
- setHelpText/2,setIcon/2,setIcons/2,setId/2,setLabel/2,setMaxSize/2,
- setMenuBar/2,setMinSize/2,setName/2,setOwnBackgroundColour/2,setOwnFont/2,
- setOwnForegroundColour/2,setPalette/2,setScrollPos/3,setScrollPos/4,
- setScrollbar/5,setScrollbar/6,setShape/2,setSize/2,setSize/3,setSize/5,
- setSize/6,setSizeHints/2,setSizeHints/3,setSizeHints/4,setSizer/2,
- setSizer/3,setSizerAndFit/2,setSizerAndFit/3,setStatusBar/2,setStatusBarPane/2,
- setStatusText/2,setStatusText/3,setStatusWidths/2,setThemeEnabled/2,
- setTitle/2,setToolBar/2,setToolTip/2,setVirtualSize/2,setVirtualSize/3,
- setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
- setWindowStyle/2,setWindowStyleFlag/2,setWindowVariant/2,shouldInheritColours/1,
- show/1,show/2,showFullScreen/2,showFullScreen/3,thaw/1,transferDataFromWindow/1,
- transferDataToWindow/1,update/1,updateWindowUI/1,updateWindowUI/2,
- validate/1,warpPointer/3]).
+ setClientSize/3,setContainingSizer/2,setCursor/2,setDoubleBuffered/2,
+ setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,setFont/2,
+ setForegroundColour/2,setHelpText/2,setIcon/2,setIcons/2,setId/2,setLabel/2,
+ setMaxSize/2,setMenuBar/2,setMinSize/2,setName/2,setOwnBackgroundColour/2,
+ setOwnFont/2,setOwnForegroundColour/2,setPalette/2,setScrollPos/3,
+ setScrollPos/4,setScrollbar/5,setScrollbar/6,setShape/2,setSize/2,
+ setSize/3,setSize/5,setSize/6,setSizeHints/2,setSizeHints/3,setSizeHints/4,
+ setSizer/2,setSizer/3,setSizerAndFit/2,setSizerAndFit/3,setStatusBar/2,
+ setStatusBarPane/2,setStatusText/2,setStatusText/3,setStatusWidths/2,
+ setThemeEnabled/2,setTitle/2,setToolBar/2,setToolTip/2,setTransparent/2,
+ setVirtualSize/2,setVirtualSize/3,setVirtualSizeHints/2,setVirtualSizeHints/3,
+ setVirtualSizeHints/4,setWindowStyle/2,setWindowStyleFlag/2,setWindowVariant/2,
+ shouldInheritColours/1,show/1,show/2,showFullScreen/2,showFullScreen/3,
+ thaw/1,transferDataFromWindow/1,transferDataToWindow/1,update/1,updateWindowUI/1,
+ updateWindowUI/2,validate/1,warpPointer/3]).
-export_type([wxMiniFrame/0]).
%% @hidden
@@ -241,6 +241,14 @@ getIcons(This) -> wxTopLevelWindow:getIcons(This).
getIcon(This) -> wxTopLevelWindow:getIcon(This).
%% From wxWindow
%% @hidden
+setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On).
+%% @hidden
+isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This).
+%% @hidden
+canSetTransparent(This) -> wxWindow:canSetTransparent(This).
+%% @hidden
+setTransparent(This,Alpha) -> wxWindow:setTransparent(This,Alpha).
+%% @hidden
warpPointer(This,X,Y) -> wxWindow:warpPointer(This,X,Y).
%% @hidden
validate(This) -> wxWindow:validate(This).
diff --git a/lib/wx/src/gen/wxMirrorDC.erl b/lib/wx/src/gen/wxMirrorDC.erl
index 459205e18b..20d51a2374 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.
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..8728770693 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.
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 e79f11ef7d..96e9c070a3 100644
--- a/lib/wx/src/gen/wxMultiChoiceDialog.erl
+++ b/lib/wx/src/gen/wxMultiChoiceDialog.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.
@@ -34,11 +34,11 @@
-export([destroy/1,getSelections/1,new/0,new/4,new/5,setSelections/2]).
%% inherited exports
--export([cacheBestSize/2,captureMouse/1,center/1,center/2,centerOnParent/1,
- centerOnParent/2,centerOnScreen/1,centerOnScreen/2,centre/1,centre/2,
- centreOnParent/1,centreOnParent/2,centreOnScreen/1,centreOnScreen/2,
- clearBackground/1,clientToScreen/2,clientToScreen/3,close/1,close/2,
- connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
+-export([cacheBestSize/2,canSetTransparent/1,captureMouse/1,center/1,center/2,
+ centerOnParent/1,centerOnParent/2,centerOnScreen/1,centerOnScreen/2,
+ centre/1,centre/2,centreOnParent/1,centreOnParent/2,centreOnScreen/1,
+ centreOnScreen/2,clearBackground/1,clientToScreen/2,clientToScreen/3,
+ close/1,close/2,connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
createButtonSizer/2,createStdDialogButtonSizer/2,destroyChildren/1,
disable/1,disconnect/1,disconnect/2,disconnect/3,enable/1,enable/2,
endModal/2,findWindow/2,fit/1,fitInside/1,freeze/1,getAcceleratorTable/1,
@@ -53,25 +53,26 @@
getTitle/1,getToolTip/1,getUpdateRegion/1,getVirtualSize/1,getWindowStyleFlag/1,
getWindowVariant/1,hasCapture/1,hasScrollbar/2,hasTransparentBackground/1,
hide/1,iconize/1,iconize/2,inheritAttributes/1,initDialog/1,invalidateBestSize/1,
- isActive/1,isEnabled/1,isExposed/2,isExposed/3,isExposed/5,isFullScreen/1,
- isIconized/1,isMaximized/1,isModal/1,isRetained/1,isShown/1,isTopLevel/1,
- layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,maximize/1,
- maximize/2,move/2,move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,
- navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,
- popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,
- refresh/2,refreshRect/2,refreshRect/3,releaseMouse/1,removeChild/2,
- reparent/2,requestUserAttention/1,requestUserAttention/2,screenToClient/1,
- screenToClient/2,scrollLines/2,scrollPages/2,scrollWindow/3,scrollWindow/4,
- setAcceleratorTable/2,setAffirmativeId/2,setAutoLayout/2,setBackgroundColour/2,
- setBackgroundStyle/2,setCaret/2,setClientSize/2,setClientSize/3,setContainingSizer/2,
- setCursor/2,setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,
- setFont/2,setForegroundColour/2,setHelpText/2,setIcon/2,setIcons/2,
- setId/2,setLabel/2,setMaxSize/2,setMinSize/2,setName/2,setOwnBackgroundColour/2,
- setOwnFont/2,setOwnForegroundColour/2,setPalette/2,setReturnCode/2,
- setScrollPos/3,setScrollPos/4,setScrollbar/5,setScrollbar/6,setShape/2,
- setSize/2,setSize/3,setSize/5,setSize/6,setSizeHints/2,setSizeHints/3,
- setSizeHints/4,setSizer/2,setSizer/3,setSizerAndFit/2,setSizerAndFit/3,
- setThemeEnabled/2,setTitle/2,setToolTip/2,setVirtualSize/2,setVirtualSize/3,
+ isActive/1,isDoubleBuffered/1,isEnabled/1,isExposed/2,isExposed/3,
+ isExposed/5,isFullScreen/1,isIconized/1,isMaximized/1,isModal/1,isRetained/1,
+ isShown/1,isTopLevel/1,layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,
+ makeModal/2,maximize/1,maximize/2,move/2,move/3,move/4,moveAfterInTabOrder/2,
+ moveBeforeInTabOrder/2,navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1,
+ popEventHandler/1,popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4,
+ raise/1,refresh/1,refresh/2,refreshRect/2,refreshRect/3,releaseMouse/1,
+ removeChild/2,reparent/2,requestUserAttention/1,requestUserAttention/2,
+ screenToClient/1,screenToClient/2,scrollLines/2,scrollPages/2,scrollWindow/3,
+ scrollWindow/4,setAcceleratorTable/2,setAffirmativeId/2,setAutoLayout/2,
+ setBackgroundColour/2,setBackgroundStyle/2,setCaret/2,setClientSize/2,
+ setClientSize/3,setContainingSizer/2,setCursor/2,setDoubleBuffered/2,
+ setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,setFont/2,
+ setForegroundColour/2,setHelpText/2,setIcon/2,setIcons/2,setId/2,setLabel/2,
+ setMaxSize/2,setMinSize/2,setName/2,setOwnBackgroundColour/2,setOwnFont/2,
+ setOwnForegroundColour/2,setPalette/2,setReturnCode/2,setScrollPos/3,
+ setScrollPos/4,setScrollbar/5,setScrollbar/6,setShape/2,setSize/2,
+ setSize/3,setSize/5,setSize/6,setSizeHints/2,setSizeHints/3,setSizeHints/4,
+ setSizer/2,setSizer/3,setSizerAndFit/2,setSizerAndFit/3,setThemeEnabled/2,
+ setTitle/2,setToolTip/2,setTransparent/2,setVirtualSize/2,setVirtualSize/3,
setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
setWindowStyle/2,setWindowStyleFlag/2,setWindowVariant/2,shouldInheritColours/1,
show/1,show/2,showFullScreen/2,showFullScreen/3,showModal/1,thaw/1,
@@ -216,6 +217,14 @@ getIcons(This) -> wxTopLevelWindow:getIcons(This).
getIcon(This) -> wxTopLevelWindow:getIcon(This).
%% From wxWindow
%% @hidden
+setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On).
+%% @hidden
+isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This).
+%% @hidden
+canSetTransparent(This) -> wxWindow:canSetTransparent(This).
+%% @hidden
+setTransparent(This,Alpha) -> wxWindow:setTransparent(This,Alpha).
+%% @hidden
warpPointer(This,X,Y) -> wxWindow:warpPointer(This,X,Y).
%% @hidden
validate(This) -> wxWindow:validate(This).
diff --git a/lib/wx/src/gen/wxNavigationKeyEvent.erl b/lib/wx/src/gen/wxNavigationKeyEvent.erl
index 58b465fdd5..8a483f2ccf 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.
diff --git a/lib/wx/src/gen/wxNotebook.erl b/lib/wx/src/gen/wxNotebook.erl
index 16c2d4fc6f..5011375aad 100644
--- a/lib/wx/src/gen/wxNotebook.erl
+++ b/lib/wx/src/gen/wxNotebook.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.
@@ -38,10 +38,10 @@
setPadding/2,setPageImage/3,setPageSize/2,setPageText/3,setSelection/2]).
%% inherited exports
--export([cacheBestSize/2,captureMouse/1,center/1,center/2,centerOnParent/1,
- centerOnParent/2,centre/1,centre/2,centreOnParent/1,centreOnParent/2,
- clearBackground/1,clientToScreen/2,clientToScreen/3,close/1,close/2,
- connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
+-export([cacheBestSize/2,canSetTransparent/1,captureMouse/1,center/1,center/2,
+ centerOnParent/1,centerOnParent/2,centre/1,centre/2,centreOnParent/1,
+ centreOnParent/2,clearBackground/1,clientToScreen/2,clientToScreen/3,
+ close/1,close/2,connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
destroyChildren/1,disable/1,disconnect/1,disconnect/2,disconnect/3,
enable/1,enable/2,findWindow/2,fit/1,fitInside/1,freeze/1,getAcceleratorTable/1,
getBackgroundColour/1,getBackgroundStyle/1,getBestSize/1,getCaret/1,
@@ -53,24 +53,25 @@
getScrollRange/2,getScrollThumb/2,getSize/1,getSizer/1,getTextExtent/2,
getTextExtent/3,getToolTip/1,getUpdateRegion/1,getVirtualSize/1,getWindowStyleFlag/1,
getWindowVariant/1,hasCapture/1,hasScrollbar/2,hasTransparentBackground/1,
- hide/1,inheritAttributes/1,initDialog/1,invalidateBestSize/1,isEnabled/1,
- isExposed/2,isExposed/3,isExposed/5,isRetained/1,isShown/1,isTopLevel/1,
- layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,move/2,
- move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,navigate/1,
- navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,popEventHandler/2,
- popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,refresh/2,refreshRect/2,
- refreshRect/3,releaseMouse/1,removeChild/2,reparent/2,screenToClient/1,
- screenToClient/2,scrollLines/2,scrollPages/2,scrollWindow/3,scrollWindow/4,
- setAcceleratorTable/2,setAutoLayout/2,setBackgroundColour/2,setBackgroundStyle/2,
- setCaret/2,setClientSize/2,setClientSize/3,setContainingSizer/2,setCursor/2,
+ hide/1,inheritAttributes/1,initDialog/1,invalidateBestSize/1,isDoubleBuffered/1,
+ isEnabled/1,isExposed/2,isExposed/3,isExposed/5,isRetained/1,isShown/1,
+ isTopLevel/1,layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,
+ move/2,move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,
+ navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,
+ popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,
+ refresh/2,refreshRect/2,refreshRect/3,releaseMouse/1,removeChild/2,
+ reparent/2,screenToClient/1,screenToClient/2,scrollLines/2,scrollPages/2,
+ scrollWindow/3,scrollWindow/4,setAcceleratorTable/2,setAutoLayout/2,
+ setBackgroundColour/2,setBackgroundStyle/2,setCaret/2,setClientSize/2,
+ setClientSize/3,setContainingSizer/2,setCursor/2,setDoubleBuffered/2,
setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,setFont/2,
setForegroundColour/2,setHelpText/2,setId/2,setLabel/2,setMaxSize/2,
setMinSize/2,setName/2,setOwnBackgroundColour/2,setOwnFont/2,setOwnForegroundColour/2,
setPalette/2,setScrollPos/3,setScrollPos/4,setScrollbar/5,setScrollbar/6,
setSize/2,setSize/3,setSize/5,setSize/6,setSizeHints/2,setSizeHints/3,
setSizeHints/4,setSizer/2,setSizer/3,setSizerAndFit/2,setSizerAndFit/3,
- setThemeEnabled/2,setToolTip/2,setVirtualSize/2,setVirtualSize/3,
- setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
+ setThemeEnabled/2,setToolTip/2,setTransparent/2,setVirtualSize/2,
+ setVirtualSize/3,setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
setWindowStyle/2,setWindowStyleFlag/2,setWindowVariant/2,shouldInheritColours/1,
show/1,show/2,thaw/1,transferDataFromWindow/1,transferDataToWindow/1,
update/1,updateWindowUI/1,updateWindowUI/2,validate/1,warpPointer/3]).
@@ -408,6 +409,14 @@ setLabel(This,Label) -> wxControl:setLabel(This,Label).
getLabel(This) -> wxControl:getLabel(This).
%% From wxWindow
%% @hidden
+setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On).
+%% @hidden
+isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This).
+%% @hidden
+canSetTransparent(This) -> wxWindow:canSetTransparent(This).
+%% @hidden
+setTransparent(This,Alpha) -> wxWindow:setTransparent(This,Alpha).
+%% @hidden
warpPointer(This,X,Y) -> wxWindow:warpPointer(This,X,Y).
%% @hidden
validate(This) -> wxWindow:validate(This).
diff --git a/lib/wx/src/gen/wxNotebookEvent.erl b/lib/wx/src/gen/wxNotebookEvent.erl
index 931313008d..063cab68ea 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.
diff --git a/lib/wx/src/gen/wxNotifyEvent.erl b/lib/wx/src/gen/wxNotifyEvent.erl
index f43d72db3c..0befce0e77 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.
diff --git a/lib/wx/src/gen/wxPageSetupDialog.erl b/lib/wx/src/gen/wxPageSetupDialog.erl
index e6e6412d2c..41897064b5 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.
diff --git a/lib/wx/src/gen/wxPageSetupDialogData.erl b/lib/wx/src/gen/wxPageSetupDialogData.erl
index bcfd55d8bc..6aa8865e32 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.
diff --git a/lib/wx/src/gen/wxPaintDC.erl b/lib/wx/src/gen/wxPaintDC.erl
index b2f2d6a977..77efd2c4ba 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.
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..8ac0833e01 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.
diff --git a/lib/wx/src/gen/wxPaletteChangedEvent.erl b/lib/wx/src/gen/wxPaletteChangedEvent.erl
index 80e15af0ec..ab49719f6e 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.
diff --git a/lib/wx/src/gen/wxPanel.erl b/lib/wx/src/gen/wxPanel.erl
index 5b6d4a2974..ceb894fe31 100644
--- a/lib/wx/src/gen/wxPanel.erl
+++ b/lib/wx/src/gen/wxPanel.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.
@@ -32,10 +32,10 @@
-export([destroy/1,initDialog/1,new/0,new/1,new/2,new/5,new/6,setFocusIgnoringChildren/1]).
%% inherited exports
--export([cacheBestSize/2,captureMouse/1,center/1,center/2,centerOnParent/1,
- centerOnParent/2,centre/1,centre/2,centreOnParent/1,centreOnParent/2,
- clearBackground/1,clientToScreen/2,clientToScreen/3,close/1,close/2,
- connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
+-export([cacheBestSize/2,canSetTransparent/1,captureMouse/1,center/1,center/2,
+ centerOnParent/1,centerOnParent/2,centre/1,centre/2,centreOnParent/1,
+ centreOnParent/2,clearBackground/1,clientToScreen/2,clientToScreen/3,
+ close/1,close/2,connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
destroyChildren/1,disable/1,disconnect/1,disconnect/2,disconnect/3,
enable/1,enable/2,findWindow/2,fit/1,fitInside/1,freeze/1,getAcceleratorTable/1,
getBackgroundColour/1,getBackgroundStyle/1,getBestSize/1,getCaret/1,
@@ -47,24 +47,25 @@
getScrollRange/2,getScrollThumb/2,getSize/1,getSizer/1,getTextExtent/2,
getTextExtent/3,getToolTip/1,getUpdateRegion/1,getVirtualSize/1,getWindowStyleFlag/1,
getWindowVariant/1,hasCapture/1,hasScrollbar/2,hasTransparentBackground/1,
- hide/1,inheritAttributes/1,invalidateBestSize/1,isEnabled/1,isExposed/2,
- isExposed/3,isExposed/5,isRetained/1,isShown/1,isTopLevel/1,layout/1,
- lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,move/2,move/3,move/4,
- moveAfterInTabOrder/2,moveBeforeInTabOrder/2,navigate/1,navigate/2,
- pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,popEventHandler/2,
- popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,refresh/2,refreshRect/2,
- refreshRect/3,releaseMouse/1,removeChild/2,reparent/2,screenToClient/1,
- screenToClient/2,scrollLines/2,scrollPages/2,scrollWindow/3,scrollWindow/4,
- setAcceleratorTable/2,setAutoLayout/2,setBackgroundColour/2,setBackgroundStyle/2,
- setCaret/2,setClientSize/2,setClientSize/3,setContainingSizer/2,setCursor/2,
+ hide/1,inheritAttributes/1,invalidateBestSize/1,isDoubleBuffered/1,
+ isEnabled/1,isExposed/2,isExposed/3,isExposed/5,isRetained/1,isShown/1,
+ isTopLevel/1,layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,
+ move/2,move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,
+ navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,
+ popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,
+ refresh/2,refreshRect/2,refreshRect/3,releaseMouse/1,removeChild/2,
+ reparent/2,screenToClient/1,screenToClient/2,scrollLines/2,scrollPages/2,
+ scrollWindow/3,scrollWindow/4,setAcceleratorTable/2,setAutoLayout/2,
+ setBackgroundColour/2,setBackgroundStyle/2,setCaret/2,setClientSize/2,
+ setClientSize/3,setContainingSizer/2,setCursor/2,setDoubleBuffered/2,
setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,setFont/2,
setForegroundColour/2,setHelpText/2,setId/2,setLabel/2,setMaxSize/2,
setMinSize/2,setName/2,setOwnBackgroundColour/2,setOwnFont/2,setOwnForegroundColour/2,
setPalette/2,setScrollPos/3,setScrollPos/4,setScrollbar/5,setScrollbar/6,
setSize/2,setSize/3,setSize/5,setSize/6,setSizeHints/2,setSizeHints/3,
setSizeHints/4,setSizer/2,setSizer/3,setSizerAndFit/2,setSizerAndFit/3,
- setThemeEnabled/2,setToolTip/2,setVirtualSize/2,setVirtualSize/3,
- setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
+ setThemeEnabled/2,setToolTip/2,setTransparent/2,setVirtualSize/2,
+ setVirtualSize/3,setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
setWindowStyle/2,setWindowStyleFlag/2,setWindowVariant/2,shouldInheritColours/1,
show/1,show/2,thaw/1,transferDataFromWindow/1,transferDataToWindow/1,
update/1,updateWindowUI/1,updateWindowUI/2,validate/1,warpPointer/3]).
@@ -154,6 +155,14 @@ destroy(Obj=#wx_ref{type=Type}) ->
ok.
%% From wxWindow
%% @hidden
+setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On).
+%% @hidden
+isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This).
+%% @hidden
+canSetTransparent(This) -> wxWindow:canSetTransparent(This).
+%% @hidden
+setTransparent(This,Alpha) -> wxWindow:setTransparent(This,Alpha).
+%% @hidden
warpPointer(This,X,Y) -> wxWindow:warpPointer(This,X,Y).
%% @hidden
validate(This) -> wxWindow:validate(This).
diff --git a/lib/wx/src/gen/wxPasswordEntryDialog.erl b/lib/wx/src/gen/wxPasswordEntryDialog.erl
index da9a711405..ac3f1c9d8c 100644
--- a/lib/wx/src/gen/wxPasswordEntryDialog.erl
+++ b/lib/wx/src/gen/wxPasswordEntryDialog.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.
@@ -35,11 +35,11 @@
-export([destroy/1,new/2,new/3]).
%% inherited exports
--export([cacheBestSize/2,captureMouse/1,center/1,center/2,centerOnParent/1,
- centerOnParent/2,centerOnScreen/1,centerOnScreen/2,centre/1,centre/2,
- centreOnParent/1,centreOnParent/2,centreOnScreen/1,centreOnScreen/2,
- clearBackground/1,clientToScreen/2,clientToScreen/3,close/1,close/2,
- connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
+-export([cacheBestSize/2,canSetTransparent/1,captureMouse/1,center/1,center/2,
+ centerOnParent/1,centerOnParent/2,centerOnScreen/1,centerOnScreen/2,
+ centre/1,centre/2,centreOnParent/1,centreOnParent/2,centreOnScreen/1,
+ centreOnScreen/2,clearBackground/1,clientToScreen/2,clientToScreen/3,
+ close/1,close/2,connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
createButtonSizer/2,createStdDialogButtonSizer/2,destroyChildren/1,
disable/1,disconnect/1,disconnect/2,disconnect/3,enable/1,enable/2,
endModal/2,findWindow/2,fit/1,fitInside/1,freeze/1,getAcceleratorTable/1,
@@ -54,8 +54,8 @@
getTitle/1,getToolTip/1,getUpdateRegion/1,getValue/1,getVirtualSize/1,
getWindowStyleFlag/1,getWindowVariant/1,hasCapture/1,hasScrollbar/2,
hasTransparentBackground/1,hide/1,iconize/1,iconize/2,inheritAttributes/1,
- initDialog/1,invalidateBestSize/1,isActive/1,isEnabled/1,isExposed/2,
- isExposed/3,isExposed/5,isFullScreen/1,isIconized/1,isMaximized/1,
+ initDialog/1,invalidateBestSize/1,isActive/1,isDoubleBuffered/1,isEnabled/1,
+ isExposed/2,isExposed/3,isExposed/5,isFullScreen/1,isIconized/1,isMaximized/1,
isModal/1,isRetained/1,isShown/1,isTopLevel/1,layout/1,lineDown/1,lineUp/1,
lower/1,makeModal/1,makeModal/2,maximize/1,maximize/2,move/2,move/3,
move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,navigate/1,navigate/2,
@@ -66,19 +66,19 @@
scrollPages/2,scrollWindow/3,scrollWindow/4,setAcceleratorTable/2,
setAffirmativeId/2,setAutoLayout/2,setBackgroundColour/2,setBackgroundStyle/2,
setCaret/2,setClientSize/2,setClientSize/3,setContainingSizer/2,setCursor/2,
- setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,setFont/2,
- setForegroundColour/2,setHelpText/2,setIcon/2,setIcons/2,setId/2,setLabel/2,
- setMaxSize/2,setMinSize/2,setName/2,setOwnBackgroundColour/2,setOwnFont/2,
- setOwnForegroundColour/2,setPalette/2,setReturnCode/2,setScrollPos/3,
- setScrollPos/4,setScrollbar/5,setScrollbar/6,setShape/2,setSize/2,
- setSize/3,setSize/5,setSize/6,setSizeHints/2,setSizeHints/3,setSizeHints/4,
- setSizer/2,setSizer/3,setSizerAndFit/2,setSizerAndFit/3,setThemeEnabled/2,
- setTitle/2,setToolTip/2,setValue/2,setVirtualSize/2,setVirtualSize/3,
- setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
- setWindowStyle/2,setWindowStyleFlag/2,setWindowVariant/2,shouldInheritColours/1,
- show/1,show/2,showFullScreen/2,showFullScreen/3,showModal/1,thaw/1,
- transferDataFromWindow/1,transferDataToWindow/1,update/1,updateWindowUI/1,
- updateWindowUI/2,validate/1,warpPointer/3]).
+ setDoubleBuffered/2,setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,
+ setFont/2,setForegroundColour/2,setHelpText/2,setIcon/2,setIcons/2,
+ setId/2,setLabel/2,setMaxSize/2,setMinSize/2,setName/2,setOwnBackgroundColour/2,
+ setOwnFont/2,setOwnForegroundColour/2,setPalette/2,setReturnCode/2,
+ setScrollPos/3,setScrollPos/4,setScrollbar/5,setScrollbar/6,setShape/2,
+ setSize/2,setSize/3,setSize/5,setSize/6,setSizeHints/2,setSizeHints/3,
+ setSizeHints/4,setSizer/2,setSizer/3,setSizerAndFit/2,setSizerAndFit/3,
+ setThemeEnabled/2,setTitle/2,setToolTip/2,setTransparent/2,setValue/2,
+ setVirtualSize/2,setVirtualSize/3,setVirtualSizeHints/2,setVirtualSizeHints/3,
+ setVirtualSizeHints/4,setWindowStyle/2,setWindowStyleFlag/2,setWindowVariant/2,
+ shouldInheritColours/1,show/1,show/2,showFullScreen/2,showFullScreen/3,
+ showModal/1,thaw/1,transferDataFromWindow/1,transferDataToWindow/1,
+ update/1,updateWindowUI/1,updateWindowUI/2,validate/1,warpPointer/3]).
-export_type([wxPasswordEntryDialog/0]).
%% @hidden
@@ -201,6 +201,14 @@ getIcons(This) -> wxTopLevelWindow:getIcons(This).
getIcon(This) -> wxTopLevelWindow:getIcon(This).
%% From wxWindow
%% @hidden
+setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On).
+%% @hidden
+isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This).
+%% @hidden
+canSetTransparent(This) -> wxWindow:canSetTransparent(This).
+%% @hidden
+setTransparent(This,Alpha) -> wxWindow:setTransparent(This,Alpha).
+%% @hidden
warpPointer(This,X,Y) -> wxWindow:warpPointer(This,X,Y).
%% @hidden
validate(This) -> wxWindow:validate(This).
diff --git a/lib/wx/src/gen/wxPen.erl b/lib/wx/src/gen/wxPen.erl
index cd6fa9884c..761b885006 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.
diff --git a/lib/wx/src/gen/wxPickerBase.erl b/lib/wx/src/gen/wxPickerBase.erl
index 74de8bf7f1..bbdeaf6af8 100644
--- a/lib/wx/src/gen/wxPickerBase.erl
+++ b/lib/wx/src/gen/wxPickerBase.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,10 +36,10 @@
setTextCtrlGrowable/1,setTextCtrlGrowable/2,setTextCtrlProportion/2]).
%% inherited exports
--export([cacheBestSize/2,captureMouse/1,center/1,center/2,centerOnParent/1,
- centerOnParent/2,centre/1,centre/2,centreOnParent/1,centreOnParent/2,
- clearBackground/1,clientToScreen/2,clientToScreen/3,close/1,close/2,
- connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
+-export([cacheBestSize/2,canSetTransparent/1,captureMouse/1,center/1,center/2,
+ centerOnParent/1,centerOnParent/2,centre/1,centre/2,centreOnParent/1,
+ centreOnParent/2,clearBackground/1,clientToScreen/2,clientToScreen/3,
+ close/1,close/2,connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
destroyChildren/1,disable/1,disconnect/1,disconnect/2,disconnect/3,
enable/1,enable/2,findWindow/2,fit/1,fitInside/1,freeze/1,getAcceleratorTable/1,
getBackgroundColour/1,getBackgroundStyle/1,getBestSize/1,getCaret/1,
@@ -51,24 +51,25 @@
getScrollRange/2,getScrollThumb/2,getSize/1,getSizer/1,getTextExtent/2,
getTextExtent/3,getToolTip/1,getUpdateRegion/1,getVirtualSize/1,getWindowStyleFlag/1,
getWindowVariant/1,hasCapture/1,hasScrollbar/2,hasTransparentBackground/1,
- hide/1,inheritAttributes/1,initDialog/1,invalidateBestSize/1,isEnabled/1,
- isExposed/2,isExposed/3,isExposed/5,isRetained/1,isShown/1,isTopLevel/1,
- layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,move/2,
- move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,navigate/1,
- navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,popEventHandler/2,
- popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,refresh/2,refreshRect/2,
- refreshRect/3,releaseMouse/1,removeChild/2,reparent/2,screenToClient/1,
- screenToClient/2,scrollLines/2,scrollPages/2,scrollWindow/3,scrollWindow/4,
- setAcceleratorTable/2,setAutoLayout/2,setBackgroundColour/2,setBackgroundStyle/2,
- setCaret/2,setClientSize/2,setClientSize/3,setContainingSizer/2,setCursor/2,
+ hide/1,inheritAttributes/1,initDialog/1,invalidateBestSize/1,isDoubleBuffered/1,
+ isEnabled/1,isExposed/2,isExposed/3,isExposed/5,isRetained/1,isShown/1,
+ isTopLevel/1,layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,
+ move/2,move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,
+ navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,
+ popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,
+ refresh/2,refreshRect/2,refreshRect/3,releaseMouse/1,removeChild/2,
+ reparent/2,screenToClient/1,screenToClient/2,scrollLines/2,scrollPages/2,
+ scrollWindow/3,scrollWindow/4,setAcceleratorTable/2,setAutoLayout/2,
+ setBackgroundColour/2,setBackgroundStyle/2,setCaret/2,setClientSize/2,
+ setClientSize/3,setContainingSizer/2,setCursor/2,setDoubleBuffered/2,
setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,setFont/2,
setForegroundColour/2,setHelpText/2,setId/2,setLabel/2,setMaxSize/2,
setMinSize/2,setName/2,setOwnBackgroundColour/2,setOwnFont/2,setOwnForegroundColour/2,
setPalette/2,setScrollPos/3,setScrollPos/4,setScrollbar/5,setScrollbar/6,
setSize/2,setSize/3,setSize/5,setSize/6,setSizeHints/2,setSizeHints/3,
setSizeHints/4,setSizer/2,setSizer/3,setSizerAndFit/2,setSizerAndFit/3,
- setThemeEnabled/2,setToolTip/2,setVirtualSize/2,setVirtualSize/3,
- setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
+ setThemeEnabled/2,setToolTip/2,setTransparent/2,setVirtualSize/2,
+ setVirtualSize/3,setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
setWindowStyle/2,setWindowStyleFlag/2,setWindowVariant/2,shouldInheritColours/1,
show/1,show/2,thaw/1,transferDataFromWindow/1,transferDataToWindow/1,
update/1,updateWindowUI/1,updateWindowUI/2,validate/1,warpPointer/3]).
@@ -213,6 +214,14 @@ setLabel(This,Label) -> wxControl:setLabel(This,Label).
getLabel(This) -> wxControl:getLabel(This).
%% From wxWindow
%% @hidden
+setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On).
+%% @hidden
+isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This).
+%% @hidden
+canSetTransparent(This) -> wxWindow:canSetTransparent(This).
+%% @hidden
+setTransparent(This,Alpha) -> wxWindow:setTransparent(This,Alpha).
+%% @hidden
warpPointer(This,X,Y) -> wxWindow:warpPointer(This,X,Y).
%% @hidden
validate(This) -> wxWindow:validate(This).
diff --git a/lib/wx/src/gen/wxPopupTransientWindow.erl b/lib/wx/src/gen/wxPopupTransientWindow.erl
index 40a63b09ec..c07c6e239e 100644
--- a/lib/wx/src/gen/wxPopupTransientWindow.erl
+++ b/lib/wx/src/gen/wxPopupTransientWindow.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.
@@ -33,10 +33,10 @@
-export([destroy/1,dismiss/1,new/0,new/1,new/2,popup/1,popup/2]).
%% inherited exports
--export([cacheBestSize/2,captureMouse/1,center/1,center/2,centerOnParent/1,
- centerOnParent/2,centre/1,centre/2,centreOnParent/1,centreOnParent/2,
- clearBackground/1,clientToScreen/2,clientToScreen/3,close/1,close/2,
- connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
+-export([cacheBestSize/2,canSetTransparent/1,captureMouse/1,center/1,center/2,
+ centerOnParent/1,centerOnParent/2,centre/1,centre/2,centreOnParent/1,
+ centreOnParent/2,clearBackground/1,clientToScreen/2,clientToScreen/3,
+ close/1,close/2,connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
destroyChildren/1,disable/1,disconnect/1,disconnect/2,disconnect/3,
enable/1,enable/2,findWindow/2,fit/1,fitInside/1,freeze/1,getAcceleratorTable/1,
getBackgroundColour/1,getBackgroundStyle/1,getBestSize/1,getCaret/1,
@@ -48,24 +48,25 @@
getScrollRange/2,getScrollThumb/2,getSize/1,getSizer/1,getTextExtent/2,
getTextExtent/3,getToolTip/1,getUpdateRegion/1,getVirtualSize/1,getWindowStyleFlag/1,
getWindowVariant/1,hasCapture/1,hasScrollbar/2,hasTransparentBackground/1,
- hide/1,inheritAttributes/1,initDialog/1,invalidateBestSize/1,isEnabled/1,
- isExposed/2,isExposed/3,isExposed/5,isRetained/1,isShown/1,isTopLevel/1,
- layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,move/2,
- move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,navigate/1,
- navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,popEventHandler/2,
- popupMenu/2,popupMenu/3,popupMenu/4,position/3,raise/1,refresh/1,refresh/2,
- refreshRect/2,refreshRect/3,releaseMouse/1,removeChild/2,reparent/2,
- screenToClient/1,screenToClient/2,scrollLines/2,scrollPages/2,scrollWindow/3,
- scrollWindow/4,setAcceleratorTable/2,setAutoLayout/2,setBackgroundColour/2,
- setBackgroundStyle/2,setCaret/2,setClientSize/2,setClientSize/3,setContainingSizer/2,
- setCursor/2,setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,
- setFont/2,setForegroundColour/2,setHelpText/2,setId/2,setLabel/2,setMaxSize/2,
+ hide/1,inheritAttributes/1,initDialog/1,invalidateBestSize/1,isDoubleBuffered/1,
+ isEnabled/1,isExposed/2,isExposed/3,isExposed/5,isRetained/1,isShown/1,
+ isTopLevel/1,layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,
+ move/2,move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,
+ navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,
+ popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4,position/3,raise/1,
+ refresh/1,refresh/2,refreshRect/2,refreshRect/3,releaseMouse/1,removeChild/2,
+ reparent/2,screenToClient/1,screenToClient/2,scrollLines/2,scrollPages/2,
+ scrollWindow/3,scrollWindow/4,setAcceleratorTable/2,setAutoLayout/2,
+ setBackgroundColour/2,setBackgroundStyle/2,setCaret/2,setClientSize/2,
+ setClientSize/3,setContainingSizer/2,setCursor/2,setDoubleBuffered/2,
+ setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,setFont/2,
+ setForegroundColour/2,setHelpText/2,setId/2,setLabel/2,setMaxSize/2,
setMinSize/2,setName/2,setOwnBackgroundColour/2,setOwnFont/2,setOwnForegroundColour/2,
setPalette/2,setScrollPos/3,setScrollPos/4,setScrollbar/5,setScrollbar/6,
setSize/2,setSize/3,setSize/5,setSize/6,setSizeHints/2,setSizeHints/3,
setSizeHints/4,setSizer/2,setSizer/3,setSizerAndFit/2,setSizerAndFit/3,
- setThemeEnabled/2,setToolTip/2,setVirtualSize/2,setVirtualSize/3,
- setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
+ setThemeEnabled/2,setToolTip/2,setTransparent/2,setVirtualSize/2,
+ setVirtualSize/3,setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
setWindowStyle/2,setWindowStyleFlag/2,setWindowVariant/2,shouldInheritColours/1,
show/1,show/2,thaw/1,transferDataFromWindow/1,transferDataToWindow/1,
update/1,updateWindowUI/1,updateWindowUI/2,validate/1,warpPointer/3]).
@@ -145,6 +146,14 @@ destroy(Obj=#wx_ref{type=Type}) ->
position(This,PtOrigin,Size) -> wxPopupWindow:position(This,PtOrigin,Size).
%% From wxWindow
%% @hidden
+setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On).
+%% @hidden
+isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This).
+%% @hidden
+canSetTransparent(This) -> wxWindow:canSetTransparent(This).
+%% @hidden
+setTransparent(This,Alpha) -> wxWindow:setTransparent(This,Alpha).
+%% @hidden
warpPointer(This,X,Y) -> wxWindow:warpPointer(This,X,Y).
%% @hidden
validate(This) -> wxWindow:validate(This).
diff --git a/lib/wx/src/gen/wxPopupWindow.erl b/lib/wx/src/gen/wxPopupWindow.erl
index 41390e08e7..439f5fac54 100644
--- a/lib/wx/src/gen/wxPopupWindow.erl
+++ b/lib/wx/src/gen/wxPopupWindow.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.
@@ -32,10 +32,10 @@
-export([create/2,create/3,destroy/1,new/0,new/1,new/2,position/3]).
%% inherited exports
--export([cacheBestSize/2,captureMouse/1,center/1,center/2,centerOnParent/1,
- centerOnParent/2,centre/1,centre/2,centreOnParent/1,centreOnParent/2,
- clearBackground/1,clientToScreen/2,clientToScreen/3,close/1,close/2,
- connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
+-export([cacheBestSize/2,canSetTransparent/1,captureMouse/1,center/1,center/2,
+ centerOnParent/1,centerOnParent/2,centre/1,centre/2,centreOnParent/1,
+ centreOnParent/2,clearBackground/1,clientToScreen/2,clientToScreen/3,
+ close/1,close/2,connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
destroyChildren/1,disable/1,disconnect/1,disconnect/2,disconnect/3,
enable/1,enable/2,findWindow/2,fit/1,fitInside/1,freeze/1,getAcceleratorTable/1,
getBackgroundColour/1,getBackgroundStyle/1,getBestSize/1,getCaret/1,
@@ -47,24 +47,25 @@
getScrollRange/2,getScrollThumb/2,getSize/1,getSizer/1,getTextExtent/2,
getTextExtent/3,getToolTip/1,getUpdateRegion/1,getVirtualSize/1,getWindowStyleFlag/1,
getWindowVariant/1,hasCapture/1,hasScrollbar/2,hasTransparentBackground/1,
- hide/1,inheritAttributes/1,initDialog/1,invalidateBestSize/1,isEnabled/1,
- isExposed/2,isExposed/3,isExposed/5,isRetained/1,isShown/1,isTopLevel/1,
- layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,move/2,
- move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,navigate/1,
- navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,popEventHandler/2,
- popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,refresh/2,refreshRect/2,
- refreshRect/3,releaseMouse/1,removeChild/2,reparent/2,screenToClient/1,
- screenToClient/2,scrollLines/2,scrollPages/2,scrollWindow/3,scrollWindow/4,
- setAcceleratorTable/2,setAutoLayout/2,setBackgroundColour/2,setBackgroundStyle/2,
- setCaret/2,setClientSize/2,setClientSize/3,setContainingSizer/2,setCursor/2,
+ hide/1,inheritAttributes/1,initDialog/1,invalidateBestSize/1,isDoubleBuffered/1,
+ isEnabled/1,isExposed/2,isExposed/3,isExposed/5,isRetained/1,isShown/1,
+ isTopLevel/1,layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,
+ move/2,move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,
+ navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,
+ popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,
+ refresh/2,refreshRect/2,refreshRect/3,releaseMouse/1,removeChild/2,
+ reparent/2,screenToClient/1,screenToClient/2,scrollLines/2,scrollPages/2,
+ scrollWindow/3,scrollWindow/4,setAcceleratorTable/2,setAutoLayout/2,
+ setBackgroundColour/2,setBackgroundStyle/2,setCaret/2,setClientSize/2,
+ setClientSize/3,setContainingSizer/2,setCursor/2,setDoubleBuffered/2,
setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,setFont/2,
setForegroundColour/2,setHelpText/2,setId/2,setLabel/2,setMaxSize/2,
setMinSize/2,setName/2,setOwnBackgroundColour/2,setOwnFont/2,setOwnForegroundColour/2,
setPalette/2,setScrollPos/3,setScrollPos/4,setScrollbar/5,setScrollbar/6,
setSize/2,setSize/3,setSize/5,setSize/6,setSizeHints/2,setSizeHints/3,
setSizeHints/4,setSizer/2,setSizer/3,setSizerAndFit/2,setSizerAndFit/3,
- setThemeEnabled/2,setToolTip/2,setVirtualSize/2,setVirtualSize/3,
- setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
+ setThemeEnabled/2,setToolTip/2,setTransparent/2,setVirtualSize/2,
+ setVirtualSize/3,setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
setWindowStyle/2,setWindowStyleFlag/2,setWindowVariant/2,shouldInheritColours/1,
show/1,show/2,thaw/1,transferDataFromWindow/1,transferDataToWindow/1,
update/1,updateWindowUI/1,updateWindowUI/2,validate/1,warpPointer/3]).
@@ -142,6 +143,14 @@ destroy(Obj=#wx_ref{type=Type}) ->
ok.
%% From wxWindow
%% @hidden
+setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On).
+%% @hidden
+isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This).
+%% @hidden
+canSetTransparent(This) -> wxWindow:canSetTransparent(This).
+%% @hidden
+setTransparent(This,Alpha) -> wxWindow:setTransparent(This,Alpha).
+%% @hidden
warpPointer(This,X,Y) -> wxWindow:warpPointer(This,X,Y).
%% @hidden
validate(This) -> wxWindow:validate(This).
diff --git a/lib/wx/src/gen/wxPostScriptDC.erl b/lib/wx/src/gen/wxPostScriptDC.erl
index 2af3b53cf0..28f8a757ed 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.
diff --git a/lib/wx/src/gen/wxPreviewCanvas.erl b/lib/wx/src/gen/wxPreviewCanvas.erl
index 91d0672def..67357dbd65 100644
--- a/lib/wx/src/gen/wxPreviewCanvas.erl
+++ b/lib/wx/src/gen/wxPreviewCanvas.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.
@@ -35,10 +35,10 @@
%% inherited exports
-export([cacheBestSize/2,calcScrolledPosition/2,calcScrolledPosition/3,calcUnscrolledPosition/2,
- calcUnscrolledPosition/3,captureMouse/1,center/1,center/2,centerOnParent/1,
- centerOnParent/2,centre/1,centre/2,centreOnParent/1,centreOnParent/2,
- clearBackground/1,clientToScreen/2,clientToScreen/3,close/1,close/2,
- connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
+ calcUnscrolledPosition/3,canSetTransparent/1,captureMouse/1,center/1,
+ center/2,centerOnParent/1,centerOnParent/2,centre/1,centre/2,centreOnParent/1,
+ centreOnParent/2,clearBackground/1,clientToScreen/2,clientToScreen/3,
+ close/1,close/2,connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
destroyChildren/1,disable/1,disconnect/1,disconnect/2,disconnect/3,
doPrepareDC/2,enable/1,enable/2,enableScrolling/3,findWindow/2,fit/1,
fitInside/1,freeze/1,getAcceleratorTable/1,getBackgroundColour/1,
@@ -51,25 +51,26 @@
getScrollThumb/2,getSize/1,getSizer/1,getTextExtent/2,getTextExtent/3,
getToolTip/1,getUpdateRegion/1,getViewStart/1,getVirtualSize/1,getWindowStyleFlag/1,
getWindowVariant/1,hasCapture/1,hasScrollbar/2,hasTransparentBackground/1,
- hide/1,inheritAttributes/1,initDialog/1,invalidateBestSize/1,isEnabled/1,
- isExposed/2,isExposed/3,isExposed/5,isRetained/1,isShown/1,isTopLevel/1,
- layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,move/2,
- move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,navigate/1,
- navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,popEventHandler/2,
- popupMenu/2,popupMenu/3,popupMenu/4,prepareDC/2,raise/1,refresh/1,refresh/2,
- refreshRect/2,refreshRect/3,releaseMouse/1,removeChild/2,reparent/2,
- screenToClient/1,screenToClient/2,scroll/3,scrollLines/2,scrollPages/2,
- scrollWindow/3,scrollWindow/4,setAcceleratorTable/2,setAutoLayout/2,
- setBackgroundColour/2,setBackgroundStyle/2,setCaret/2,setClientSize/2,
- setClientSize/3,setContainingSizer/2,setCursor/2,setDropTarget/2,
- setExtraStyle/2,setFocus/1,setFocusFromKbd/1,setFocusIgnoringChildren/1,
- setFont/2,setForegroundColour/2,setHelpText/2,setId/2,setLabel/2,setMaxSize/2,
- setMinSize/2,setName/2,setOwnBackgroundColour/2,setOwnFont/2,setOwnForegroundColour/2,
- setPalette/2,setScrollPos/3,setScrollPos/4,setScrollRate/3,setScrollbar/5,
- setScrollbar/6,setScrollbars/5,setScrollbars/6,setSize/2,setSize/3,
- setSize/5,setSize/6,setSizeHints/2,setSizeHints/3,setSizeHints/4,setSizer/2,
- setSizer/3,setSizerAndFit/2,setSizerAndFit/3,setTargetWindow/2,setThemeEnabled/2,
- setToolTip/2,setVirtualSize/2,setVirtualSize/3,setVirtualSizeHints/2,
+ hide/1,inheritAttributes/1,initDialog/1,invalidateBestSize/1,isDoubleBuffered/1,
+ isEnabled/1,isExposed/2,isExposed/3,isExposed/5,isRetained/1,isShown/1,
+ isTopLevel/1,layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,
+ move/2,move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,
+ navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,
+ popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4,prepareDC/2,
+ raise/1,refresh/1,refresh/2,refreshRect/2,refreshRect/3,releaseMouse/1,
+ removeChild/2,reparent/2,screenToClient/1,screenToClient/2,scroll/3,
+ scrollLines/2,scrollPages/2,scrollWindow/3,scrollWindow/4,setAcceleratorTable/2,
+ setAutoLayout/2,setBackgroundColour/2,setBackgroundStyle/2,setCaret/2,
+ setClientSize/2,setClientSize/3,setContainingSizer/2,setCursor/2,
+ setDoubleBuffered/2,setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,
+ setFocusIgnoringChildren/1,setFont/2,setForegroundColour/2,setHelpText/2,
+ setId/2,setLabel/2,setMaxSize/2,setMinSize/2,setName/2,setOwnBackgroundColour/2,
+ setOwnFont/2,setOwnForegroundColour/2,setPalette/2,setScrollPos/3,
+ setScrollPos/4,setScrollRate/3,setScrollbar/5,setScrollbar/6,setScrollbars/5,
+ setScrollbars/6,setSize/2,setSize/3,setSize/5,setSize/6,setSizeHints/2,
+ setSizeHints/3,setSizeHints/4,setSizer/2,setSizer/3,setSizerAndFit/2,
+ setSizerAndFit/3,setTargetWindow/2,setThemeEnabled/2,setToolTip/2,
+ setTransparent/2,setVirtualSize/2,setVirtualSize/3,setVirtualSizeHints/2,
setVirtualSizeHints/3,setVirtualSizeHints/4,setWindowStyle/2,setWindowStyleFlag/2,
setWindowVariant/2,shouldInheritColours/1,show/1,show/2,thaw/1,transferDataFromWindow/1,
transferDataToWindow/1,update/1,updateWindowUI/1,updateWindowUI/2,
@@ -120,6 +121,14 @@ setFocusIgnoringChildren(This) -> wxPanel:setFocusIgnoringChildren(This).
initDialog(This) -> wxPanel:initDialog(This).
%% From wxWindow
%% @hidden
+setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On).
+%% @hidden
+isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This).
+%% @hidden
+canSetTransparent(This) -> wxWindow:canSetTransparent(This).
+%% @hidden
+setTransparent(This,Alpha) -> wxWindow:setTransparent(This,Alpha).
+%% @hidden
warpPointer(This,X,Y) -> wxWindow:warpPointer(This,X,Y).
%% @hidden
validate(This) -> wxWindow:validate(This).
diff --git a/lib/wx/src/gen/wxPreviewControlBar.erl b/lib/wx/src/gen/wxPreviewControlBar.erl
index 9bc290aef8..0e1828e87b 100644
--- a/lib/wx/src/gen/wxPreviewControlBar.erl
+++ b/lib/wx/src/gen/wxPreviewControlBar.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.
@@ -34,10 +34,10 @@
new/4,setZoomControl/2]).
%% inherited exports
--export([cacheBestSize/2,captureMouse/1,center/1,center/2,centerOnParent/1,
- centerOnParent/2,centre/1,centre/2,centreOnParent/1,centreOnParent/2,
- clearBackground/1,clientToScreen/2,clientToScreen/3,close/1,close/2,
- connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
+-export([cacheBestSize/2,canSetTransparent/1,captureMouse/1,center/1,center/2,
+ centerOnParent/1,centerOnParent/2,centre/1,centre/2,centreOnParent/1,
+ centreOnParent/2,clearBackground/1,clientToScreen/2,clientToScreen/3,
+ close/1,close/2,connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
destroyChildren/1,disable/1,disconnect/1,disconnect/2,disconnect/3,
enable/1,enable/2,findWindow/2,fit/1,fitInside/1,freeze/1,getAcceleratorTable/1,
getBackgroundColour/1,getBackgroundStyle/1,getBestSize/1,getCaret/1,
@@ -49,24 +49,25 @@
getScrollRange/2,getScrollThumb/2,getSize/1,getSizer/1,getTextExtent/2,
getTextExtent/3,getToolTip/1,getUpdateRegion/1,getVirtualSize/1,getWindowStyleFlag/1,
getWindowVariant/1,hasCapture/1,hasScrollbar/2,hasTransparentBackground/1,
- hide/1,inheritAttributes/1,initDialog/1,invalidateBestSize/1,isEnabled/1,
- isExposed/2,isExposed/3,isExposed/5,isRetained/1,isShown/1,isTopLevel/1,
- layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,move/2,
- move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,navigate/1,
- navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,popEventHandler/2,
- popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,refresh/2,refreshRect/2,
- refreshRect/3,releaseMouse/1,removeChild/2,reparent/2,screenToClient/1,
- screenToClient/2,scrollLines/2,scrollPages/2,scrollWindow/3,scrollWindow/4,
- setAcceleratorTable/2,setAutoLayout/2,setBackgroundColour/2,setBackgroundStyle/2,
- setCaret/2,setClientSize/2,setClientSize/3,setContainingSizer/2,setCursor/2,
+ hide/1,inheritAttributes/1,initDialog/1,invalidateBestSize/1,isDoubleBuffered/1,
+ isEnabled/1,isExposed/2,isExposed/3,isExposed/5,isRetained/1,isShown/1,
+ isTopLevel/1,layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,
+ move/2,move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,
+ navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,
+ popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,
+ refresh/2,refreshRect/2,refreshRect/3,releaseMouse/1,removeChild/2,
+ reparent/2,screenToClient/1,screenToClient/2,scrollLines/2,scrollPages/2,
+ scrollWindow/3,scrollWindow/4,setAcceleratorTable/2,setAutoLayout/2,
+ setBackgroundColour/2,setBackgroundStyle/2,setCaret/2,setClientSize/2,
+ setClientSize/3,setContainingSizer/2,setCursor/2,setDoubleBuffered/2,
setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,setFocusIgnoringChildren/1,
setFont/2,setForegroundColour/2,setHelpText/2,setId/2,setLabel/2,setMaxSize/2,
setMinSize/2,setName/2,setOwnBackgroundColour/2,setOwnFont/2,setOwnForegroundColour/2,
setPalette/2,setScrollPos/3,setScrollPos/4,setScrollbar/5,setScrollbar/6,
setSize/2,setSize/3,setSize/5,setSize/6,setSizeHints/2,setSizeHints/3,
setSizeHints/4,setSizer/2,setSizer/3,setSizerAndFit/2,setSizerAndFit/3,
- setThemeEnabled/2,setToolTip/2,setVirtualSize/2,setVirtualSize/3,
- setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
+ setThemeEnabled/2,setToolTip/2,setTransparent/2,setVirtualSize/2,
+ setVirtualSize/3,setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
setWindowStyle/2,setWindowStyleFlag/2,setWindowVariant/2,shouldInheritColours/1,
show/1,show/2,thaw/1,transferDataFromWindow/1,transferDataToWindow/1,
update/1,updateWindowUI/1,updateWindowUI/2,validate/1,warpPointer/3]).
@@ -151,6 +152,14 @@ setFocusIgnoringChildren(This) -> wxPanel:setFocusIgnoringChildren(This).
initDialog(This) -> wxPanel:initDialog(This).
%% From wxWindow
%% @hidden
+setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On).
+%% @hidden
+isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This).
+%% @hidden
+canSetTransparent(This) -> wxWindow:canSetTransparent(This).
+%% @hidden
+setTransparent(This,Alpha) -> wxWindow:setTransparent(This,Alpha).
+%% @hidden
warpPointer(This,X,Y) -> wxWindow:warpPointer(This,X,Y).
%% @hidden
validate(This) -> wxWindow:validate(This).
diff --git a/lib/wx/src/gen/wxPreviewFrame.erl b/lib/wx/src/gen/wxPreviewFrame.erl
index 9423fc2333..fe684478a5 100644
--- a/lib/wx/src/gen/wxPreviewFrame.erl
+++ b/lib/wx/src/gen/wxPreviewFrame.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.
@@ -35,11 +35,11 @@
onCloseWindow/2]).
%% inherited exports
--export([cacheBestSize/2,captureMouse/1,center/1,center/2,centerOnParent/1,
- centerOnParent/2,centerOnScreen/1,centerOnScreen/2,centre/1,centre/2,
- centreOnParent/1,centreOnParent/2,centreOnScreen/1,centreOnScreen/2,
- clearBackground/1,clientToScreen/2,clientToScreen/3,close/1,close/2,
- connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
+-export([cacheBestSize/2,canSetTransparent/1,captureMouse/1,center/1,center/2,
+ centerOnParent/1,centerOnParent/2,centerOnScreen/1,centerOnScreen/2,
+ centre/1,centre/2,centreOnParent/1,centreOnParent/2,centreOnScreen/1,
+ centreOnScreen/2,clearBackground/1,clientToScreen/2,clientToScreen/3,
+ close/1,close/2,connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
createStatusBar/1,createStatusBar/2,createToolBar/1,createToolBar/2,
destroyChildren/1,disable/1,disconnect/1,disconnect/2,disconnect/3,
enable/1,enable/2,findWindow/2,fit/1,fitInside/1,freeze/1,getAcceleratorTable/1,
@@ -55,32 +55,32 @@
getToolTip/1,getUpdateRegion/1,getVirtualSize/1,getWindowStyleFlag/1,
getWindowVariant/1,hasCapture/1,hasScrollbar/2,hasTransparentBackground/1,
hide/1,iconize/1,iconize/2,inheritAttributes/1,initDialog/1,invalidateBestSize/1,
- isActive/1,isEnabled/1,isExposed/2,isExposed/3,isExposed/5,isFullScreen/1,
- isIconized/1,isMaximized/1,isRetained/1,isShown/1,isTopLevel/1,layout/1,
- lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,maximize/1,maximize/2,
- move/2,move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,
- navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,
- popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4,processCommand/2,
- raise/1,refresh/1,refresh/2,refreshRect/2,refreshRect/3,releaseMouse/1,
- removeChild/2,reparent/2,requestUserAttention/1,requestUserAttention/2,
+ isActive/1,isDoubleBuffered/1,isEnabled/1,isExposed/2,isExposed/3,
+ isExposed/5,isFullScreen/1,isIconized/1,isMaximized/1,isRetained/1,
+ isShown/1,isTopLevel/1,layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,
+ makeModal/2,maximize/1,maximize/2,move/2,move/3,move/4,moveAfterInTabOrder/2,
+ moveBeforeInTabOrder/2,navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1,
+ popEventHandler/1,popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4,
+ processCommand/2,raise/1,refresh/1,refresh/2,refreshRect/2,refreshRect/3,
+ releaseMouse/1,removeChild/2,reparent/2,requestUserAttention/1,requestUserAttention/2,
screenToClient/1,screenToClient/2,scrollLines/2,scrollPages/2,scrollWindow/3,
scrollWindow/4,sendSizeEvent/1,setAcceleratorTable/2,setAutoLayout/2,
setBackgroundColour/2,setBackgroundStyle/2,setCaret/2,setClientSize/2,
- setClientSize/3,setContainingSizer/2,setCursor/2,setDropTarget/2,
- setExtraStyle/2,setFocus/1,setFocusFromKbd/1,setFont/2,setForegroundColour/2,
- setHelpText/2,setIcon/2,setIcons/2,setId/2,setLabel/2,setMaxSize/2,
- setMenuBar/2,setMinSize/2,setName/2,setOwnBackgroundColour/2,setOwnFont/2,
- setOwnForegroundColour/2,setPalette/2,setScrollPos/3,setScrollPos/4,
- setScrollbar/5,setScrollbar/6,setShape/2,setSize/2,setSize/3,setSize/5,
- setSize/6,setSizeHints/2,setSizeHints/3,setSizeHints/4,setSizer/2,
- setSizer/3,setSizerAndFit/2,setSizerAndFit/3,setStatusBar/2,setStatusBarPane/2,
- setStatusText/2,setStatusText/3,setStatusWidths/2,setThemeEnabled/2,
- setTitle/2,setToolBar/2,setToolTip/2,setVirtualSize/2,setVirtualSize/3,
- setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
- setWindowStyle/2,setWindowStyleFlag/2,setWindowVariant/2,shouldInheritColours/1,
- show/1,show/2,showFullScreen/2,showFullScreen/3,thaw/1,transferDataFromWindow/1,
- transferDataToWindow/1,update/1,updateWindowUI/1,updateWindowUI/2,
- validate/1,warpPointer/3]).
+ setClientSize/3,setContainingSizer/2,setCursor/2,setDoubleBuffered/2,
+ setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,setFont/2,
+ setForegroundColour/2,setHelpText/2,setIcon/2,setIcons/2,setId/2,setLabel/2,
+ setMaxSize/2,setMenuBar/2,setMinSize/2,setName/2,setOwnBackgroundColour/2,
+ setOwnFont/2,setOwnForegroundColour/2,setPalette/2,setScrollPos/3,
+ setScrollPos/4,setScrollbar/5,setScrollbar/6,setShape/2,setSize/2,
+ setSize/3,setSize/5,setSize/6,setSizeHints/2,setSizeHints/3,setSizeHints/4,
+ setSizer/2,setSizer/3,setSizerAndFit/2,setSizerAndFit/3,setStatusBar/2,
+ setStatusBarPane/2,setStatusText/2,setStatusText/3,setStatusWidths/2,
+ setThemeEnabled/2,setTitle/2,setToolBar/2,setToolTip/2,setTransparent/2,
+ setVirtualSize/2,setVirtualSize/3,setVirtualSizeHints/2,setVirtualSizeHints/3,
+ setVirtualSizeHints/4,setWindowStyle/2,setWindowStyleFlag/2,setWindowVariant/2,
+ shouldInheritColours/1,show/1,show/2,showFullScreen/2,showFullScreen/3,
+ thaw/1,transferDataFromWindow/1,transferDataToWindow/1,update/1,updateWindowUI/1,
+ updateWindowUI/2,validate/1,warpPointer/3]).
-export_type([wxPreviewFrame/0]).
%% @hidden
@@ -244,6 +244,14 @@ getIcons(This) -> wxTopLevelWindow:getIcons(This).
getIcon(This) -> wxTopLevelWindow:getIcon(This).
%% From wxWindow
%% @hidden
+setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On).
+%% @hidden
+isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This).
+%% @hidden
+canSetTransparent(This) -> wxWindow:canSetTransparent(This).
+%% @hidden
+setTransparent(This,Alpha) -> wxWindow:setTransparent(This,Alpha).
+%% @hidden
warpPointer(This,X,Y) -> wxWindow:warpPointer(This,X,Y).
%% @hidden
validate(This) -> wxWindow:validate(This).
diff --git a/lib/wx/src/gen/wxPrintData.erl b/lib/wx/src/gen/wxPrintData.erl
index 757685c36b..a8a72c52f4 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.
diff --git a/lib/wx/src/gen/wxPrintDialog.erl b/lib/wx/src/gen/wxPrintDialog.erl
index 4f253b4988..a337089d5a 100644
--- a/lib/wx/src/gen/wxPrintDialog.erl
+++ b/lib/wx/src/gen/wxPrintDialog.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.
@@ -34,11 +34,11 @@
-export([destroy/1,getPrintDC/1,getPrintDialogData/1,new/1,new/2]).
%% inherited exports
--export([cacheBestSize/2,captureMouse/1,center/1,center/2,centerOnParent/1,
- centerOnParent/2,centerOnScreen/1,centerOnScreen/2,centre/1,centre/2,
- centreOnParent/1,centreOnParent/2,centreOnScreen/1,centreOnScreen/2,
- clearBackground/1,clientToScreen/2,clientToScreen/3,close/1,close/2,
- connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
+-export([cacheBestSize/2,canSetTransparent/1,captureMouse/1,center/1,center/2,
+ centerOnParent/1,centerOnParent/2,centerOnScreen/1,centerOnScreen/2,
+ centre/1,centre/2,centreOnParent/1,centreOnParent/2,centreOnScreen/1,
+ centreOnScreen/2,clearBackground/1,clientToScreen/2,clientToScreen/3,
+ close/1,close/2,connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
createButtonSizer/2,createStdDialogButtonSizer/2,destroyChildren/1,
disable/1,disconnect/1,disconnect/2,disconnect/3,enable/1,enable/2,
endModal/2,findWindow/2,fit/1,fitInside/1,freeze/1,getAcceleratorTable/1,
@@ -53,25 +53,26 @@
getTitle/1,getToolTip/1,getUpdateRegion/1,getVirtualSize/1,getWindowStyleFlag/1,
getWindowVariant/1,hasCapture/1,hasScrollbar/2,hasTransparentBackground/1,
hide/1,iconize/1,iconize/2,inheritAttributes/1,initDialog/1,invalidateBestSize/1,
- isActive/1,isEnabled/1,isExposed/2,isExposed/3,isExposed/5,isFullScreen/1,
- isIconized/1,isMaximized/1,isModal/1,isRetained/1,isShown/1,isTopLevel/1,
- layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,maximize/1,
- maximize/2,move/2,move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,
- navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,
- popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,
- refresh/2,refreshRect/2,refreshRect/3,releaseMouse/1,removeChild/2,
- reparent/2,requestUserAttention/1,requestUserAttention/2,screenToClient/1,
- screenToClient/2,scrollLines/2,scrollPages/2,scrollWindow/3,scrollWindow/4,
- setAcceleratorTable/2,setAffirmativeId/2,setAutoLayout/2,setBackgroundColour/2,
- setBackgroundStyle/2,setCaret/2,setClientSize/2,setClientSize/3,setContainingSizer/2,
- setCursor/2,setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,
- setFont/2,setForegroundColour/2,setHelpText/2,setIcon/2,setIcons/2,
- setId/2,setLabel/2,setMaxSize/2,setMinSize/2,setName/2,setOwnBackgroundColour/2,
- setOwnFont/2,setOwnForegroundColour/2,setPalette/2,setReturnCode/2,
- setScrollPos/3,setScrollPos/4,setScrollbar/5,setScrollbar/6,setShape/2,
- setSize/2,setSize/3,setSize/5,setSize/6,setSizeHints/2,setSizeHints/3,
- setSizeHints/4,setSizer/2,setSizer/3,setSizerAndFit/2,setSizerAndFit/3,
- setThemeEnabled/2,setTitle/2,setToolTip/2,setVirtualSize/2,setVirtualSize/3,
+ isActive/1,isDoubleBuffered/1,isEnabled/1,isExposed/2,isExposed/3,
+ isExposed/5,isFullScreen/1,isIconized/1,isMaximized/1,isModal/1,isRetained/1,
+ isShown/1,isTopLevel/1,layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,
+ makeModal/2,maximize/1,maximize/2,move/2,move/3,move/4,moveAfterInTabOrder/2,
+ moveBeforeInTabOrder/2,navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1,
+ popEventHandler/1,popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4,
+ raise/1,refresh/1,refresh/2,refreshRect/2,refreshRect/3,releaseMouse/1,
+ removeChild/2,reparent/2,requestUserAttention/1,requestUserAttention/2,
+ screenToClient/1,screenToClient/2,scrollLines/2,scrollPages/2,scrollWindow/3,
+ scrollWindow/4,setAcceleratorTable/2,setAffirmativeId/2,setAutoLayout/2,
+ setBackgroundColour/2,setBackgroundStyle/2,setCaret/2,setClientSize/2,
+ setClientSize/3,setContainingSizer/2,setCursor/2,setDoubleBuffered/2,
+ setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,setFont/2,
+ setForegroundColour/2,setHelpText/2,setIcon/2,setIcons/2,setId/2,setLabel/2,
+ setMaxSize/2,setMinSize/2,setName/2,setOwnBackgroundColour/2,setOwnFont/2,
+ setOwnForegroundColour/2,setPalette/2,setReturnCode/2,setScrollPos/3,
+ setScrollPos/4,setScrollbar/5,setScrollbar/6,setShape/2,setSize/2,
+ setSize/3,setSize/5,setSize/6,setSizeHints/2,setSizeHints/3,setSizeHints/4,
+ setSizer/2,setSizer/3,setSizerAndFit/2,setSizerAndFit/3,setThemeEnabled/2,
+ setTitle/2,setToolTip/2,setTransparent/2,setVirtualSize/2,setVirtualSize/3,
setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
setWindowStyle/2,setWindowStyleFlag/2,setWindowVariant/2,shouldInheritColours/1,
show/1,show/2,showFullScreen/2,showFullScreen/3,showModal/1,thaw/1,
@@ -213,6 +214,14 @@ getIcons(This) -> wxTopLevelWindow:getIcons(This).
getIcon(This) -> wxTopLevelWindow:getIcon(This).
%% From wxWindow
%% @hidden
+setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On).
+%% @hidden
+isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This).
+%% @hidden
+canSetTransparent(This) -> wxWindow:canSetTransparent(This).
+%% @hidden
+setTransparent(This,Alpha) -> wxWindow:setTransparent(This,Alpha).
+%% @hidden
warpPointer(This,X,Y) -> wxWindow:warpPointer(This,X,Y).
%% @hidden
validate(This) -> wxWindow:validate(This).
diff --git a/lib/wx/src/gen/wxPrintDialogData.erl b/lib/wx/src/gen/wxPrintDialogData.erl
index 3ed49808e6..b93af1151b 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.
diff --git a/lib/wx/src/gen/wxPrintPreview.erl b/lib/wx/src/gen/wxPrintPreview.erl
index cb3ccccbbe..162d259530 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.
diff --git a/lib/wx/src/gen/wxPrinter.erl b/lib/wx/src/gen/wxPrinter.erl
index ec27b3cab9..5f3122d32c 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.
diff --git a/lib/wx/src/gen/wxPrintout.erl b/lib/wx/src/gen/wxPrintout.erl
index 45ca116251..7f2b59bbe7 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.
diff --git a/lib/wx/src/gen/wxProgressDialog.erl b/lib/wx/src/gen/wxProgressDialog.erl
index 544d67a7d8..665b900729 100644
--- a/lib/wx/src/gen/wxProgressDialog.erl
+++ b/lib/wx/src/gen/wxProgressDialog.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.
@@ -34,11 +34,11 @@
-export([destroy/1,new/2,new/3,resume/1,update/1,update/2,update/3]).
%% inherited exports
--export([cacheBestSize/2,captureMouse/1,center/1,center/2,centerOnParent/1,
- centerOnParent/2,centerOnScreen/1,centerOnScreen/2,centre/1,centre/2,
- centreOnParent/1,centreOnParent/2,centreOnScreen/1,centreOnScreen/2,
- clearBackground/1,clientToScreen/2,clientToScreen/3,close/1,close/2,
- connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
+-export([cacheBestSize/2,canSetTransparent/1,captureMouse/1,center/1,center/2,
+ centerOnParent/1,centerOnParent/2,centerOnScreen/1,centerOnScreen/2,
+ centre/1,centre/2,centreOnParent/1,centreOnParent/2,centreOnScreen/1,
+ centreOnScreen/2,clearBackground/1,clientToScreen/2,clientToScreen/3,
+ close/1,close/2,connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
createButtonSizer/2,createStdDialogButtonSizer/2,destroyChildren/1,
disable/1,disconnect/1,disconnect/2,disconnect/3,enable/1,enable/2,
endModal/2,findWindow/2,fit/1,fitInside/1,freeze/1,getAcceleratorTable/1,
@@ -53,25 +53,26 @@
getTitle/1,getToolTip/1,getUpdateRegion/1,getVirtualSize/1,getWindowStyleFlag/1,
getWindowVariant/1,hasCapture/1,hasScrollbar/2,hasTransparentBackground/1,
hide/1,iconize/1,iconize/2,inheritAttributes/1,initDialog/1,invalidateBestSize/1,
- isActive/1,isEnabled/1,isExposed/2,isExposed/3,isExposed/5,isFullScreen/1,
- isIconized/1,isMaximized/1,isModal/1,isRetained/1,isShown/1,isTopLevel/1,
- layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,maximize/1,
- maximize/2,move/2,move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,
- navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,
- popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,
- refresh/2,refreshRect/2,refreshRect/3,releaseMouse/1,removeChild/2,
- reparent/2,requestUserAttention/1,requestUserAttention/2,screenToClient/1,
- screenToClient/2,scrollLines/2,scrollPages/2,scrollWindow/3,scrollWindow/4,
- setAcceleratorTable/2,setAffirmativeId/2,setAutoLayout/2,setBackgroundColour/2,
- setBackgroundStyle/2,setCaret/2,setClientSize/2,setClientSize/3,setContainingSizer/2,
- setCursor/2,setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,
- setFont/2,setForegroundColour/2,setHelpText/2,setIcon/2,setIcons/2,
- setId/2,setLabel/2,setMaxSize/2,setMinSize/2,setName/2,setOwnBackgroundColour/2,
- setOwnFont/2,setOwnForegroundColour/2,setPalette/2,setReturnCode/2,
- setScrollPos/3,setScrollPos/4,setScrollbar/5,setScrollbar/6,setShape/2,
- setSize/2,setSize/3,setSize/5,setSize/6,setSizeHints/2,setSizeHints/3,
- setSizeHints/4,setSizer/2,setSizer/3,setSizerAndFit/2,setSizerAndFit/3,
- setThemeEnabled/2,setTitle/2,setToolTip/2,setVirtualSize/2,setVirtualSize/3,
+ isActive/1,isDoubleBuffered/1,isEnabled/1,isExposed/2,isExposed/3,
+ isExposed/5,isFullScreen/1,isIconized/1,isMaximized/1,isModal/1,isRetained/1,
+ isShown/1,isTopLevel/1,layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,
+ makeModal/2,maximize/1,maximize/2,move/2,move/3,move/4,moveAfterInTabOrder/2,
+ moveBeforeInTabOrder/2,navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1,
+ popEventHandler/1,popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4,
+ raise/1,refresh/1,refresh/2,refreshRect/2,refreshRect/3,releaseMouse/1,
+ removeChild/2,reparent/2,requestUserAttention/1,requestUserAttention/2,
+ screenToClient/1,screenToClient/2,scrollLines/2,scrollPages/2,scrollWindow/3,
+ scrollWindow/4,setAcceleratorTable/2,setAffirmativeId/2,setAutoLayout/2,
+ setBackgroundColour/2,setBackgroundStyle/2,setCaret/2,setClientSize/2,
+ setClientSize/3,setContainingSizer/2,setCursor/2,setDoubleBuffered/2,
+ setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,setFont/2,
+ setForegroundColour/2,setHelpText/2,setIcon/2,setIcons/2,setId/2,setLabel/2,
+ setMaxSize/2,setMinSize/2,setName/2,setOwnBackgroundColour/2,setOwnFont/2,
+ setOwnForegroundColour/2,setPalette/2,setReturnCode/2,setScrollPos/3,
+ setScrollPos/4,setScrollbar/5,setScrollbar/6,setShape/2,setSize/2,
+ setSize/3,setSize/5,setSize/6,setSizeHints/2,setSizeHints/3,setSizeHints/4,
+ setSizer/2,setSizer/3,setSizerAndFit/2,setSizerAndFit/3,setThemeEnabled/2,
+ setTitle/2,setToolTip/2,setTransparent/2,setVirtualSize/2,setVirtualSize/3,
setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
setWindowStyle/2,setWindowStyleFlag/2,setWindowVariant/2,shouldInheritColours/1,
show/1,show/2,showFullScreen/2,showFullScreen/3,showModal/1,thaw/1,
@@ -228,6 +229,14 @@ getIcons(This) -> wxTopLevelWindow:getIcons(This).
getIcon(This) -> wxTopLevelWindow:getIcon(This).
%% From wxWindow
%% @hidden
+setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On).
+%% @hidden
+isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This).
+%% @hidden
+canSetTransparent(This) -> wxWindow:canSetTransparent(This).
+%% @hidden
+setTransparent(This,Alpha) -> wxWindow:setTransparent(This,Alpha).
+%% @hidden
warpPointer(This,X,Y) -> wxWindow:warpPointer(This,X,Y).
%% @hidden
validate(This) -> wxWindow:validate(This).
diff --git a/lib/wx/src/gen/wxQueryNewPaletteEvent.erl b/lib/wx/src/gen/wxQueryNewPaletteEvent.erl
index 11ca65923d..2473fe5f61 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.
diff --git a/lib/wx/src/gen/wxRadioBox.erl b/lib/wx/src/gen/wxRadioBox.erl
index 331c83d695..5ef1deff66 100644
--- a/lib/wx/src/gen/wxRadioBox.erl
+++ b/lib/wx/src/gen/wxRadioBox.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,10 +36,10 @@
setItemHelpText/3,setItemToolTip/3,setSelection/2,show/1,show/2,show/3]).
%% inherited exports
--export([cacheBestSize/2,captureMouse/1,center/1,center/2,centerOnParent/1,
- centerOnParent/2,centre/1,centre/2,centreOnParent/1,centreOnParent/2,
- clearBackground/1,clientToScreen/2,clientToScreen/3,close/1,close/2,
- connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
+-export([cacheBestSize/2,canSetTransparent/1,captureMouse/1,center/1,center/2,
+ centerOnParent/1,centerOnParent/2,centre/1,centre/2,centreOnParent/1,
+ centreOnParent/2,clearBackground/1,clientToScreen/2,clientToScreen/3,
+ close/1,close/2,connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
destroyChildren/1,disable/1,disconnect/1,disconnect/2,disconnect/3,
findWindow/2,fit/1,fitInside/1,freeze/1,getAcceleratorTable/1,getBackgroundColour/1,
getBackgroundStyle/1,getBestSize/1,getCaret/1,getCharHeight/1,getCharWidth/1,
@@ -51,24 +51,24 @@
getSize/1,getSizer/1,getTextExtent/2,getTextExtent/3,getToolTip/1,
getUpdateRegion/1,getVirtualSize/1,getWindowStyleFlag/1,getWindowVariant/1,
hasCapture/1,hasScrollbar/2,hasTransparentBackground/1,hide/1,inheritAttributes/1,
- initDialog/1,invalidateBestSize/1,isEnabled/1,isExposed/2,isExposed/3,
- isExposed/5,isRetained/1,isShown/1,isTopLevel/1,layout/1,lineDown/1,
- lineUp/1,lower/1,makeModal/1,makeModal/2,move/2,move/3,move/4,moveAfterInTabOrder/2,
- moveBeforeInTabOrder/2,navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1,
- popEventHandler/1,popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4,
- raise/1,refresh/1,refresh/2,refreshRect/2,refreshRect/3,releaseMouse/1,
- removeChild/2,reparent/2,screenToClient/1,screenToClient/2,scrollLines/2,
- scrollPages/2,scrollWindow/3,scrollWindow/4,setAcceleratorTable/2,
- setAutoLayout/2,setBackgroundColour/2,setBackgroundStyle/2,setCaret/2,
- setClientSize/2,setClientSize/3,setContainingSizer/2,setCursor/2,
- setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,setFont/2,
- setForegroundColour/2,setHelpText/2,setId/2,setLabel/2,setMaxSize/2,
+ initDialog/1,invalidateBestSize/1,isDoubleBuffered/1,isEnabled/1,
+ isExposed/2,isExposed/3,isExposed/5,isRetained/1,isShown/1,isTopLevel/1,
+ layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,move/2,
+ move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,navigate/1,
+ navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,popEventHandler/2,
+ popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,refresh/2,refreshRect/2,
+ refreshRect/3,releaseMouse/1,removeChild/2,reparent/2,screenToClient/1,
+ screenToClient/2,scrollLines/2,scrollPages/2,scrollWindow/3,scrollWindow/4,
+ setAcceleratorTable/2,setAutoLayout/2,setBackgroundColour/2,setBackgroundStyle/2,
+ setCaret/2,setClientSize/2,setClientSize/3,setContainingSizer/2,setCursor/2,
+ setDoubleBuffered/2,setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,
+ setFont/2,setForegroundColour/2,setHelpText/2,setId/2,setLabel/2,setMaxSize/2,
setMinSize/2,setName/2,setOwnBackgroundColour/2,setOwnFont/2,setOwnForegroundColour/2,
setPalette/2,setScrollPos/3,setScrollPos/4,setScrollbar/5,setScrollbar/6,
setSize/2,setSize/3,setSize/5,setSize/6,setSizeHints/2,setSizeHints/3,
setSizeHints/4,setSizer/2,setSizer/3,setSizerAndFit/2,setSizerAndFit/3,
- setThemeEnabled/2,setToolTip/2,setVirtualSize/2,setVirtualSize/3,
- setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
+ setThemeEnabled/2,setToolTip/2,setTransparent/2,setVirtualSize/2,
+ setVirtualSize/3,setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
setWindowStyle/2,setWindowStyleFlag/2,setWindowVariant/2,shouldInheritColours/1,
thaw/1,transferDataFromWindow/1,transferDataToWindow/1,update/1,updateWindowUI/1,
updateWindowUI/2,validate/1,warpPointer/3]).
@@ -348,6 +348,14 @@ setLabel(This,Label) -> wxControl:setLabel(This,Label).
getLabel(This) -> wxControl:getLabel(This).
%% From wxWindow
%% @hidden
+setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On).
+%% @hidden
+isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This).
+%% @hidden
+canSetTransparent(This) -> wxWindow:canSetTransparent(This).
+%% @hidden
+setTransparent(This,Alpha) -> wxWindow:setTransparent(This,Alpha).
+%% @hidden
warpPointer(This,X,Y) -> wxWindow:warpPointer(This,X,Y).
%% @hidden
validate(This) -> wxWindow:validate(This).
diff --git a/lib/wx/src/gen/wxRadioButton.erl b/lib/wx/src/gen/wxRadioButton.erl
index ab08c5807e..3b4689a27b 100644
--- a/lib/wx/src/gen/wxRadioButton.erl
+++ b/lib/wx/src/gen/wxRadioButton.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.
@@ -33,10 +33,10 @@
-export([create/4,create/5,destroy/1,getValue/1,new/0,new/3,new/4,setValue/2]).
%% inherited exports
--export([cacheBestSize/2,captureMouse/1,center/1,center/2,centerOnParent/1,
- centerOnParent/2,centre/1,centre/2,centreOnParent/1,centreOnParent/2,
- clearBackground/1,clientToScreen/2,clientToScreen/3,close/1,close/2,
- connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
+-export([cacheBestSize/2,canSetTransparent/1,captureMouse/1,center/1,center/2,
+ centerOnParent/1,centerOnParent/2,centre/1,centre/2,centreOnParent/1,
+ centreOnParent/2,clearBackground/1,clientToScreen/2,clientToScreen/3,
+ close/1,close/2,connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
destroyChildren/1,disable/1,disconnect/1,disconnect/2,disconnect/3,
enable/1,enable/2,findWindow/2,fit/1,fitInside/1,freeze/1,getAcceleratorTable/1,
getBackgroundColour/1,getBackgroundStyle/1,getBestSize/1,getCaret/1,
@@ -48,24 +48,25 @@
getScrollRange/2,getScrollThumb/2,getSize/1,getSizer/1,getTextExtent/2,
getTextExtent/3,getToolTip/1,getUpdateRegion/1,getVirtualSize/1,getWindowStyleFlag/1,
getWindowVariant/1,hasCapture/1,hasScrollbar/2,hasTransparentBackground/1,
- hide/1,inheritAttributes/1,initDialog/1,invalidateBestSize/1,isEnabled/1,
- isExposed/2,isExposed/3,isExposed/5,isRetained/1,isShown/1,isTopLevel/1,
- layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,move/2,
- move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,navigate/1,
- navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,popEventHandler/2,
- popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,refresh/2,refreshRect/2,
- refreshRect/3,releaseMouse/1,removeChild/2,reparent/2,screenToClient/1,
- screenToClient/2,scrollLines/2,scrollPages/2,scrollWindow/3,scrollWindow/4,
- setAcceleratorTable/2,setAutoLayout/2,setBackgroundColour/2,setBackgroundStyle/2,
- setCaret/2,setClientSize/2,setClientSize/3,setContainingSizer/2,setCursor/2,
+ hide/1,inheritAttributes/1,initDialog/1,invalidateBestSize/1,isDoubleBuffered/1,
+ isEnabled/1,isExposed/2,isExposed/3,isExposed/5,isRetained/1,isShown/1,
+ isTopLevel/1,layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,
+ move/2,move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,
+ navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,
+ popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,
+ refresh/2,refreshRect/2,refreshRect/3,releaseMouse/1,removeChild/2,
+ reparent/2,screenToClient/1,screenToClient/2,scrollLines/2,scrollPages/2,
+ scrollWindow/3,scrollWindow/4,setAcceleratorTable/2,setAutoLayout/2,
+ setBackgroundColour/2,setBackgroundStyle/2,setCaret/2,setClientSize/2,
+ setClientSize/3,setContainingSizer/2,setCursor/2,setDoubleBuffered/2,
setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,setFont/2,
setForegroundColour/2,setHelpText/2,setId/2,setLabel/2,setMaxSize/2,
setMinSize/2,setName/2,setOwnBackgroundColour/2,setOwnFont/2,setOwnForegroundColour/2,
setPalette/2,setScrollPos/3,setScrollPos/4,setScrollbar/5,setScrollbar/6,
setSize/2,setSize/3,setSize/5,setSize/6,setSizeHints/2,setSizeHints/3,
setSizeHints/4,setSizer/2,setSizer/3,setSizerAndFit/2,setSizerAndFit/3,
- setThemeEnabled/2,setToolTip/2,setVirtualSize/2,setVirtualSize/3,
- setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
+ setThemeEnabled/2,setToolTip/2,setTransparent/2,setVirtualSize/2,
+ setVirtualSize/3,setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
setWindowStyle/2,setWindowStyleFlag/2,setWindowVariant/2,shouldInheritColours/1,
show/1,show/2,thaw/1,transferDataFromWindow/1,transferDataToWindow/1,
update/1,updateWindowUI/1,updateWindowUI/2,validate/1,warpPointer/3]).
@@ -171,6 +172,14 @@ setLabel(This,Label) -> wxControl:setLabel(This,Label).
getLabel(This) -> wxControl:getLabel(This).
%% From wxWindow
%% @hidden
+setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On).
+%% @hidden
+isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This).
+%% @hidden
+canSetTransparent(This) -> wxWindow:canSetTransparent(This).
+%% @hidden
+setTransparent(This,Alpha) -> wxWindow:setTransparent(This,Alpha).
+%% @hidden
warpPointer(This,X,Y) -> wxWindow:warpPointer(This,X,Y).
%% @hidden
validate(This) -> wxWindow:validate(This).
diff --git a/lib/wx/src/gen/wxRegion.erl b/lib/wx/src/gen/wxRegion.erl
index 63662eb163..7a21baee92 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.
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 c64ed77f31..223c07419d 100644
--- a/lib/wx/src/gen/wxSashLayoutWindow.erl
+++ b/lib/wx/src/gen/wxSashLayoutWindow.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.
@@ -34,10 +34,10 @@
new/2,setAlignment/2,setDefaultSize/2,setOrientation/2]).
%% inherited exports
--export([cacheBestSize/2,captureMouse/1,center/1,center/2,centerOnParent/1,
- centerOnParent/2,centre/1,centre/2,centreOnParent/1,centreOnParent/2,
- clearBackground/1,clientToScreen/2,clientToScreen/3,close/1,close/2,
- connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
+-export([cacheBestSize/2,canSetTransparent/1,captureMouse/1,center/1,center/2,
+ centerOnParent/1,centerOnParent/2,centre/1,centre/2,centreOnParent/1,
+ centreOnParent/2,clearBackground/1,clientToScreen/2,clientToScreen/3,
+ close/1,close/2,connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
destroyChildren/1,disable/1,disconnect/1,disconnect/2,disconnect/3,
enable/1,enable/2,findWindow/2,fit/1,fitInside/1,freeze/1,getAcceleratorTable/1,
getBackgroundColour/1,getBackgroundStyle/1,getBestSize/1,getCaret/1,
@@ -51,9 +51,9 @@
getTextExtent/2,getTextExtent/3,getToolTip/1,getUpdateRegion/1,getVirtualSize/1,
getWindowStyleFlag/1,getWindowVariant/1,hasCapture/1,hasScrollbar/2,
hasTransparentBackground/1,hide/1,inheritAttributes/1,initDialog/1,
- invalidateBestSize/1,isEnabled/1,isExposed/2,isExposed/3,isExposed/5,
- isRetained/1,isShown/1,isTopLevel/1,layout/1,lineDown/1,lineUp/1,lower/1,
- makeModal/1,makeModal/2,move/2,move/3,move/4,moveAfterInTabOrder/2,
+ invalidateBestSize/1,isDoubleBuffered/1,isEnabled/1,isExposed/2,isExposed/3,
+ isExposed/5,isRetained/1,isShown/1,isTopLevel/1,layout/1,lineDown/1,
+ lineUp/1,lower/1,makeModal/1,makeModal/2,move/2,move/3,move/4,moveAfterInTabOrder/2,
moveBeforeInTabOrder/2,navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1,
popEventHandler/1,popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4,
raise/1,refresh/1,refresh/2,refreshRect/2,refreshRect/3,releaseMouse/1,
@@ -61,17 +61,17 @@
scrollPages/2,scrollWindow/3,scrollWindow/4,setAcceleratorTable/2,
setAutoLayout/2,setBackgroundColour/2,setBackgroundStyle/2,setCaret/2,
setClientSize/2,setClientSize/3,setContainingSizer/2,setCursor/2,
- setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,setFont/2,
- setForegroundColour/2,setHelpText/2,setId/2,setLabel/2,setMaxSize/2,
+ setDoubleBuffered/2,setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,
+ setFont/2,setForegroundColour/2,setHelpText/2,setId/2,setLabel/2,setMaxSize/2,
setMaximumSizeX/2,setMaximumSizeY/2,setMinSize/2,setMinimumSizeX/2,
setMinimumSizeY/2,setName/2,setOwnBackgroundColour/2,setOwnFont/2,
setOwnForegroundColour/2,setPalette/2,setSashVisible/3,setScrollPos/3,
setScrollPos/4,setScrollbar/5,setScrollbar/6,setSize/2,setSize/3,setSize/5,
setSize/6,setSizeHints/2,setSizeHints/3,setSizeHints/4,setSizer/2,
setSizer/3,setSizerAndFit/2,setSizerAndFit/3,setThemeEnabled/2,setToolTip/2,
- setVirtualSize/2,setVirtualSize/3,setVirtualSizeHints/2,setVirtualSizeHints/3,
- setVirtualSizeHints/4,setWindowStyle/2,setWindowStyleFlag/2,setWindowVariant/2,
- shouldInheritColours/1,show/1,show/2,thaw/1,transferDataFromWindow/1,
+ setTransparent/2,setVirtualSize/2,setVirtualSize/3,setVirtualSizeHints/2,
+ setVirtualSizeHints/3,setVirtualSizeHints/4,setWindowStyle/2,setWindowStyleFlag/2,
+ setWindowVariant/2,shouldInheritColours/1,show/1,show/2,thaw/1,transferDataFromWindow/1,
transferDataToWindow/1,update/1,updateWindowUI/1,updateWindowUI/2,
validate/1,warpPointer/3]).
@@ -220,6 +220,14 @@ getMaximumSizeX(This) -> wxSashWindow:getMaximumSizeX(This).
getSashVisible(This,Edge) -> wxSashWindow:getSashVisible(This,Edge).
%% From wxWindow
%% @hidden
+setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On).
+%% @hidden
+isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This).
+%% @hidden
+canSetTransparent(This) -> wxWindow:canSetTransparent(This).
+%% @hidden
+setTransparent(This,Alpha) -> wxWindow:setTransparent(This,Alpha).
+%% @hidden
warpPointer(This,X,Y) -> wxWindow:warpPointer(This,X,Y).
%% @hidden
validate(This) -> wxWindow:validate(This).
diff --git a/lib/wx/src/gen/wxSashWindow.erl b/lib/wx/src/gen/wxSashWindow.erl
index 7f9f15aa58..4a39726ffd 100644
--- a/lib/wx/src/gen/wxSashWindow.erl
+++ b/lib/wx/src/gen/wxSashWindow.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.
@@ -34,10 +34,10 @@
setMinimumSizeX/2,setMinimumSizeY/2,setSashVisible/3]).
%% inherited exports
--export([cacheBestSize/2,captureMouse/1,center/1,center/2,centerOnParent/1,
- centerOnParent/2,centre/1,centre/2,centreOnParent/1,centreOnParent/2,
- clearBackground/1,clientToScreen/2,clientToScreen/3,close/1,close/2,
- connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
+-export([cacheBestSize/2,canSetTransparent/1,captureMouse/1,center/1,center/2,
+ centerOnParent/1,centerOnParent/2,centre/1,centre/2,centreOnParent/1,
+ centreOnParent/2,clearBackground/1,clientToScreen/2,clientToScreen/3,
+ close/1,close/2,connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
destroyChildren/1,disable/1,disconnect/1,disconnect/2,disconnect/3,
enable/1,enable/2,findWindow/2,fit/1,fitInside/1,freeze/1,getAcceleratorTable/1,
getBackgroundColour/1,getBackgroundStyle/1,getBestSize/1,getCaret/1,
@@ -49,24 +49,25 @@
getScrollRange/2,getScrollThumb/2,getSize/1,getSizer/1,getTextExtent/2,
getTextExtent/3,getToolTip/1,getUpdateRegion/1,getVirtualSize/1,getWindowStyleFlag/1,
getWindowVariant/1,hasCapture/1,hasScrollbar/2,hasTransparentBackground/1,
- hide/1,inheritAttributes/1,initDialog/1,invalidateBestSize/1,isEnabled/1,
- isExposed/2,isExposed/3,isExposed/5,isRetained/1,isShown/1,isTopLevel/1,
- layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,move/2,
- move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,navigate/1,
- navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,popEventHandler/2,
- popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,refresh/2,refreshRect/2,
- refreshRect/3,releaseMouse/1,removeChild/2,reparent/2,screenToClient/1,
- screenToClient/2,scrollLines/2,scrollPages/2,scrollWindow/3,scrollWindow/4,
- setAcceleratorTable/2,setAutoLayout/2,setBackgroundColour/2,setBackgroundStyle/2,
- setCaret/2,setClientSize/2,setClientSize/3,setContainingSizer/2,setCursor/2,
+ hide/1,inheritAttributes/1,initDialog/1,invalidateBestSize/1,isDoubleBuffered/1,
+ isEnabled/1,isExposed/2,isExposed/3,isExposed/5,isRetained/1,isShown/1,
+ isTopLevel/1,layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,
+ move/2,move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,
+ navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,
+ popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,
+ refresh/2,refreshRect/2,refreshRect/3,releaseMouse/1,removeChild/2,
+ reparent/2,screenToClient/1,screenToClient/2,scrollLines/2,scrollPages/2,
+ scrollWindow/3,scrollWindow/4,setAcceleratorTable/2,setAutoLayout/2,
+ setBackgroundColour/2,setBackgroundStyle/2,setCaret/2,setClientSize/2,
+ setClientSize/3,setContainingSizer/2,setCursor/2,setDoubleBuffered/2,
setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,setFont/2,
setForegroundColour/2,setHelpText/2,setId/2,setLabel/2,setMaxSize/2,
setMinSize/2,setName/2,setOwnBackgroundColour/2,setOwnFont/2,setOwnForegroundColour/2,
setPalette/2,setScrollPos/3,setScrollPos/4,setScrollbar/5,setScrollbar/6,
setSize/2,setSize/3,setSize/5,setSize/6,setSizeHints/2,setSizeHints/3,
setSizeHints/4,setSizer/2,setSizer/3,setSizerAndFit/2,setSizerAndFit/3,
- setThemeEnabled/2,setToolTip/2,setVirtualSize/2,setVirtualSize/3,
- setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
+ setThemeEnabled/2,setToolTip/2,setTransparent/2,setVirtualSize/2,
+ setVirtualSize/3,setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
setWindowStyle/2,setWindowStyleFlag/2,setWindowVariant/2,shouldInheritColours/1,
show/1,show/2,thaw/1,transferDataFromWindow/1,transferDataToWindow/1,
update/1,updateWindowUI/1,updateWindowUI/2,validate/1,warpPointer/3]).
@@ -207,6 +208,14 @@ destroy(Obj=#wx_ref{type=Type}) ->
ok.
%% From wxWindow
%% @hidden
+setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On).
+%% @hidden
+isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This).
+%% @hidden
+canSetTransparent(This) -> wxWindow:canSetTransparent(This).
+%% @hidden
+setTransparent(This,Alpha) -> wxWindow:setTransparent(This,Alpha).
+%% @hidden
warpPointer(This,X,Y) -> wxWindow:warpPointer(This,X,Y).
%% @hidden
validate(This) -> wxWindow:validate(This).
diff --git a/lib/wx/src/gen/wxScreenDC.erl b/lib/wx/src/gen/wxScreenDC.erl
index 2766d8d397..24028a000f 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.
diff --git a/lib/wx/src/gen/wxScrollBar.erl b/lib/wx/src/gen/wxScrollBar.erl
index 97c30f2972..ccddf84835 100644
--- a/lib/wx/src/gen/wxScrollBar.erl
+++ b/lib/wx/src/gen/wxScrollBar.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.
@@ -34,10 +34,10 @@
getThumbSize/1,new/0,new/2,new/3,setScrollbar/5,setScrollbar/6,setThumbPosition/2]).
%% inherited exports
--export([cacheBestSize/2,captureMouse/1,center/1,center/2,centerOnParent/1,
- centerOnParent/2,centre/1,centre/2,centreOnParent/1,centreOnParent/2,
- clearBackground/1,clientToScreen/2,clientToScreen/3,close/1,close/2,
- connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
+-export([cacheBestSize/2,canSetTransparent/1,captureMouse/1,center/1,center/2,
+ centerOnParent/1,centerOnParent/2,centre/1,centre/2,centreOnParent/1,
+ centreOnParent/2,clearBackground/1,clientToScreen/2,clientToScreen/3,
+ close/1,close/2,connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
destroyChildren/1,disable/1,disconnect/1,disconnect/2,disconnect/3,
enable/1,enable/2,findWindow/2,fit/1,fitInside/1,freeze/1,getAcceleratorTable/1,
getBackgroundColour/1,getBackgroundStyle/1,getBestSize/1,getCaret/1,
@@ -49,25 +49,26 @@
getScrollRange/2,getScrollThumb/2,getSize/1,getSizer/1,getTextExtent/2,
getTextExtent/3,getToolTip/1,getUpdateRegion/1,getVirtualSize/1,getWindowStyleFlag/1,
getWindowVariant/1,hasCapture/1,hasScrollbar/2,hasTransparentBackground/1,
- hide/1,inheritAttributes/1,initDialog/1,invalidateBestSize/1,isEnabled/1,
- isExposed/2,isExposed/3,isExposed/5,isRetained/1,isShown/1,isTopLevel/1,
- layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,move/2,
- move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,navigate/1,
- navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,popEventHandler/2,
- popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,refresh/2,refreshRect/2,
- refreshRect/3,releaseMouse/1,removeChild/2,reparent/2,screenToClient/1,
- screenToClient/2,scrollLines/2,scrollPages/2,scrollWindow/3,scrollWindow/4,
- setAcceleratorTable/2,setAutoLayout/2,setBackgroundColour/2,setBackgroundStyle/2,
- setCaret/2,setClientSize/2,setClientSize/3,setContainingSizer/2,setCursor/2,
+ hide/1,inheritAttributes/1,initDialog/1,invalidateBestSize/1,isDoubleBuffered/1,
+ isEnabled/1,isExposed/2,isExposed/3,isExposed/5,isRetained/1,isShown/1,
+ isTopLevel/1,layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,
+ move/2,move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,
+ navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,
+ popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,
+ refresh/2,refreshRect/2,refreshRect/3,releaseMouse/1,removeChild/2,
+ reparent/2,screenToClient/1,screenToClient/2,scrollLines/2,scrollPages/2,
+ scrollWindow/3,scrollWindow/4,setAcceleratorTable/2,setAutoLayout/2,
+ setBackgroundColour/2,setBackgroundStyle/2,setCaret/2,setClientSize/2,
+ setClientSize/3,setContainingSizer/2,setCursor/2,setDoubleBuffered/2,
setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,setFont/2,
setForegroundColour/2,setHelpText/2,setId/2,setLabel/2,setMaxSize/2,
setMinSize/2,setName/2,setOwnBackgroundColour/2,setOwnFont/2,setOwnForegroundColour/2,
setPalette/2,setScrollPos/3,setScrollPos/4,setSize/2,setSize/3,setSize/5,
setSize/6,setSizeHints/2,setSizeHints/3,setSizeHints/4,setSizer/2,
setSizer/3,setSizerAndFit/2,setSizerAndFit/3,setThemeEnabled/2,setToolTip/2,
- setVirtualSize/2,setVirtualSize/3,setVirtualSizeHints/2,setVirtualSizeHints/3,
- setVirtualSizeHints/4,setWindowStyle/2,setWindowStyleFlag/2,setWindowVariant/2,
- shouldInheritColours/1,show/1,show/2,thaw/1,transferDataFromWindow/1,
+ setTransparent/2,setVirtualSize/2,setVirtualSize/3,setVirtualSizeHints/2,
+ setVirtualSizeHints/3,setVirtualSizeHints/4,setWindowStyle/2,setWindowStyleFlag/2,
+ setWindowVariant/2,shouldInheritColours/1,show/1,show/2,thaw/1,transferDataFromWindow/1,
transferDataToWindow/1,update/1,updateWindowUI/1,updateWindowUI/2,
validate/1,warpPointer/3]).
@@ -215,6 +216,14 @@ setLabel(This,Label) -> wxControl:setLabel(This,Label).
getLabel(This) -> wxControl:getLabel(This).
%% From wxWindow
%% @hidden
+setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On).
+%% @hidden
+isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This).
+%% @hidden
+canSetTransparent(This) -> wxWindow:canSetTransparent(This).
+%% @hidden
+setTransparent(This,Alpha) -> wxWindow:setTransparent(This,Alpha).
+%% @hidden
warpPointer(This,X,Y) -> wxWindow:warpPointer(This,X,Y).
%% @hidden
validate(This) -> wxWindow:validate(This).
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 5513014c31..7c807980b4 100644
--- a/lib/wx/src/gen/wxScrolledWindow.erl
+++ b/lib/wx/src/gen/wxScrolledWindow.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,10 +36,10 @@
scroll/3,setScrollRate/3,setScrollbars/5,setScrollbars/6,setTargetWindow/2]).
%% inherited exports
--export([cacheBestSize/2,captureMouse/1,center/1,center/2,centerOnParent/1,
- centerOnParent/2,centre/1,centre/2,centreOnParent/1,centreOnParent/2,
- clearBackground/1,clientToScreen/2,clientToScreen/3,close/1,close/2,
- connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
+-export([cacheBestSize/2,canSetTransparent/1,captureMouse/1,center/1,center/2,
+ centerOnParent/1,centerOnParent/2,centre/1,centre/2,centreOnParent/1,
+ centreOnParent/2,clearBackground/1,clientToScreen/2,clientToScreen/3,
+ close/1,close/2,connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
destroyChildren/1,disable/1,disconnect/1,disconnect/2,disconnect/3,
enable/1,enable/2,findWindow/2,fit/1,fitInside/1,freeze/1,getAcceleratorTable/1,
getBackgroundColour/1,getBackgroundStyle/1,getBestSize/1,getCaret/1,
@@ -51,24 +51,25 @@
getScrollRange/2,getScrollThumb/2,getSize/1,getSizer/1,getTextExtent/2,
getTextExtent/3,getToolTip/1,getUpdateRegion/1,getVirtualSize/1,getWindowStyleFlag/1,
getWindowVariant/1,hasCapture/1,hasScrollbar/2,hasTransparentBackground/1,
- hide/1,inheritAttributes/1,initDialog/1,invalidateBestSize/1,isEnabled/1,
- isExposed/2,isExposed/3,isExposed/5,isRetained/1,isShown/1,isTopLevel/1,
- layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,move/2,
- move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,navigate/1,
- navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,popEventHandler/2,
- popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,refresh/2,refreshRect/2,
- refreshRect/3,releaseMouse/1,removeChild/2,reparent/2,screenToClient/1,
- screenToClient/2,scrollLines/2,scrollPages/2,scrollWindow/3,scrollWindow/4,
- setAcceleratorTable/2,setAutoLayout/2,setBackgroundColour/2,setBackgroundStyle/2,
- setCaret/2,setClientSize/2,setClientSize/3,setContainingSizer/2,setCursor/2,
+ hide/1,inheritAttributes/1,initDialog/1,invalidateBestSize/1,isDoubleBuffered/1,
+ isEnabled/1,isExposed/2,isExposed/3,isExposed/5,isRetained/1,isShown/1,
+ isTopLevel/1,layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,
+ move/2,move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,
+ navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,
+ popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,
+ refresh/2,refreshRect/2,refreshRect/3,releaseMouse/1,removeChild/2,
+ reparent/2,screenToClient/1,screenToClient/2,scrollLines/2,scrollPages/2,
+ scrollWindow/3,scrollWindow/4,setAcceleratorTable/2,setAutoLayout/2,
+ setBackgroundColour/2,setBackgroundStyle/2,setCaret/2,setClientSize/2,
+ setClientSize/3,setContainingSizer/2,setCursor/2,setDoubleBuffered/2,
setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,setFocusIgnoringChildren/1,
setFont/2,setForegroundColour/2,setHelpText/2,setId/2,setLabel/2,setMaxSize/2,
setMinSize/2,setName/2,setOwnBackgroundColour/2,setOwnFont/2,setOwnForegroundColour/2,
setPalette/2,setScrollPos/3,setScrollPos/4,setScrollbar/5,setScrollbar/6,
setSize/2,setSize/3,setSize/5,setSize/6,setSizeHints/2,setSizeHints/3,
setSizeHints/4,setSizer/2,setSizer/3,setSizerAndFit/2,setSizerAndFit/3,
- setThemeEnabled/2,setToolTip/2,setVirtualSize/2,setVirtualSize/3,
- setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
+ setThemeEnabled/2,setToolTip/2,setTransparent/2,setVirtualSize/2,
+ setVirtualSize/3,setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
setWindowStyle/2,setWindowStyleFlag/2,setWindowVariant/2,shouldInheritColours/1,
show/1,show/2,thaw/1,transferDataFromWindow/1,transferDataToWindow/1,
update/1,updateWindowUI/1,updateWindowUI/2,validate/1,warpPointer/3]).
@@ -258,6 +259,14 @@ setFocusIgnoringChildren(This) -> wxPanel:setFocusIgnoringChildren(This).
initDialog(This) -> wxPanel:initDialog(This).
%% From wxWindow
%% @hidden
+setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On).
+%% @hidden
+isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This).
+%% @hidden
+canSetTransparent(This) -> wxWindow:canSetTransparent(This).
+%% @hidden
+setTransparent(This,Alpha) -> wxWindow:setTransparent(This,Alpha).
+%% @hidden
warpPointer(This,X,Y) -> wxWindow:warpPointer(This,X,Y).
%% @hidden
validate(This) -> wxWindow:validate(This).
diff --git a/lib/wx/src/gen/wxSetCursorEvent.erl b/lib/wx/src/gen/wxSetCursorEvent.erl
index 0e2fbc5cba..b7473d4d17 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.
diff --git a/lib/wx/src/gen/wxShowEvent.erl b/lib/wx/src/gen/wxShowEvent.erl
index 3723213ebd..962a880f61 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.
diff --git a/lib/wx/src/gen/wxSingleChoiceDialog.erl b/lib/wx/src/gen/wxSingleChoiceDialog.erl
index c5743c4ea1..641cb2836f 100644
--- a/lib/wx/src/gen/wxSingleChoiceDialog.erl
+++ b/lib/wx/src/gen/wxSingleChoiceDialog.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.
@@ -34,11 +34,11 @@
-export([destroy/1,getSelection/1,getStringSelection/1,new/0,new/4,new/5,setSelection/2]).
%% inherited exports
--export([cacheBestSize/2,captureMouse/1,center/1,center/2,centerOnParent/1,
- centerOnParent/2,centerOnScreen/1,centerOnScreen/2,centre/1,centre/2,
- centreOnParent/1,centreOnParent/2,centreOnScreen/1,centreOnScreen/2,
- clearBackground/1,clientToScreen/2,clientToScreen/3,close/1,close/2,
- connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
+-export([cacheBestSize/2,canSetTransparent/1,captureMouse/1,center/1,center/2,
+ centerOnParent/1,centerOnParent/2,centerOnScreen/1,centerOnScreen/2,
+ centre/1,centre/2,centreOnParent/1,centreOnParent/2,centreOnScreen/1,
+ centreOnScreen/2,clearBackground/1,clientToScreen/2,clientToScreen/3,
+ close/1,close/2,connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
createButtonSizer/2,createStdDialogButtonSizer/2,destroyChildren/1,
disable/1,disconnect/1,disconnect/2,disconnect/3,enable/1,enable/2,
endModal/2,findWindow/2,fit/1,fitInside/1,freeze/1,getAcceleratorTable/1,
@@ -53,25 +53,26 @@
getTitle/1,getToolTip/1,getUpdateRegion/1,getVirtualSize/1,getWindowStyleFlag/1,
getWindowVariant/1,hasCapture/1,hasScrollbar/2,hasTransparentBackground/1,
hide/1,iconize/1,iconize/2,inheritAttributes/1,initDialog/1,invalidateBestSize/1,
- isActive/1,isEnabled/1,isExposed/2,isExposed/3,isExposed/5,isFullScreen/1,
- isIconized/1,isMaximized/1,isModal/1,isRetained/1,isShown/1,isTopLevel/1,
- layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,maximize/1,
- maximize/2,move/2,move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,
- navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,
- popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,
- refresh/2,refreshRect/2,refreshRect/3,releaseMouse/1,removeChild/2,
- reparent/2,requestUserAttention/1,requestUserAttention/2,screenToClient/1,
- screenToClient/2,scrollLines/2,scrollPages/2,scrollWindow/3,scrollWindow/4,
- setAcceleratorTable/2,setAffirmativeId/2,setAutoLayout/2,setBackgroundColour/2,
- setBackgroundStyle/2,setCaret/2,setClientSize/2,setClientSize/3,setContainingSizer/2,
- setCursor/2,setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,
- setFont/2,setForegroundColour/2,setHelpText/2,setIcon/2,setIcons/2,
- setId/2,setLabel/2,setMaxSize/2,setMinSize/2,setName/2,setOwnBackgroundColour/2,
- setOwnFont/2,setOwnForegroundColour/2,setPalette/2,setReturnCode/2,
- setScrollPos/3,setScrollPos/4,setScrollbar/5,setScrollbar/6,setShape/2,
- setSize/2,setSize/3,setSize/5,setSize/6,setSizeHints/2,setSizeHints/3,
- setSizeHints/4,setSizer/2,setSizer/3,setSizerAndFit/2,setSizerAndFit/3,
- setThemeEnabled/2,setTitle/2,setToolTip/2,setVirtualSize/2,setVirtualSize/3,
+ isActive/1,isDoubleBuffered/1,isEnabled/1,isExposed/2,isExposed/3,
+ isExposed/5,isFullScreen/1,isIconized/1,isMaximized/1,isModal/1,isRetained/1,
+ isShown/1,isTopLevel/1,layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,
+ makeModal/2,maximize/1,maximize/2,move/2,move/3,move/4,moveAfterInTabOrder/2,
+ moveBeforeInTabOrder/2,navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1,
+ popEventHandler/1,popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4,
+ raise/1,refresh/1,refresh/2,refreshRect/2,refreshRect/3,releaseMouse/1,
+ removeChild/2,reparent/2,requestUserAttention/1,requestUserAttention/2,
+ screenToClient/1,screenToClient/2,scrollLines/2,scrollPages/2,scrollWindow/3,
+ scrollWindow/4,setAcceleratorTable/2,setAffirmativeId/2,setAutoLayout/2,
+ setBackgroundColour/2,setBackgroundStyle/2,setCaret/2,setClientSize/2,
+ setClientSize/3,setContainingSizer/2,setCursor/2,setDoubleBuffered/2,
+ setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,setFont/2,
+ setForegroundColour/2,setHelpText/2,setIcon/2,setIcons/2,setId/2,setLabel/2,
+ setMaxSize/2,setMinSize/2,setName/2,setOwnBackgroundColour/2,setOwnFont/2,
+ setOwnForegroundColour/2,setPalette/2,setReturnCode/2,setScrollPos/3,
+ setScrollPos/4,setScrollbar/5,setScrollbar/6,setShape/2,setSize/2,
+ setSize/3,setSize/5,setSize/6,setSizeHints/2,setSizeHints/3,setSizeHints/4,
+ setSizer/2,setSizer/3,setSizerAndFit/2,setSizerAndFit/3,setThemeEnabled/2,
+ setTitle/2,setToolTip/2,setTransparent/2,setVirtualSize/2,setVirtualSize/3,
setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
setWindowStyle/2,setWindowStyleFlag/2,setWindowVariant/2,shouldInheritColours/1,
show/1,show/2,showFullScreen/2,showFullScreen/3,showModal/1,thaw/1,
@@ -223,6 +224,14 @@ getIcons(This) -> wxTopLevelWindow:getIcons(This).
getIcon(This) -> wxTopLevelWindow:getIcon(This).
%% From wxWindow
%% @hidden
+setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On).
+%% @hidden
+isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This).
+%% @hidden
+canSetTransparent(This) -> wxWindow:canSetTransparent(This).
+%% @hidden
+setTransparent(This,Alpha) -> wxWindow:setTransparent(This,Alpha).
+%% @hidden
warpPointer(This,X,Y) -> wxWindow:warpPointer(This,X,Y).
%% @hidden
validate(This) -> wxWindow:validate(This).
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..723625f85e 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.
diff --git a/lib/wx/src/gen/wxSizerFlags.erl b/lib/wx/src/gen/wxSizerFlags.erl
index 1cbe38426f..08fbaca3af 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.
diff --git a/lib/wx/src/gen/wxSizerItem.erl b/lib/wx/src/gen/wxSizerItem.erl
index 807941df5a..9eebe15cd0 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.
diff --git a/lib/wx/src/gen/wxSlider.erl b/lib/wx/src/gen/wxSlider.erl
index 93ec783e48..02103aed01 100644
--- a/lib/wx/src/gen/wxSlider.erl
+++ b/lib/wx/src/gen/wxSlider.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.
@@ -35,10 +35,10 @@
setRange/3,setThumbLength/2,setValue/2]).
%% inherited exports
--export([cacheBestSize/2,captureMouse/1,center/1,center/2,centerOnParent/1,
- centerOnParent/2,centre/1,centre/2,centreOnParent/1,centreOnParent/2,
- clearBackground/1,clientToScreen/2,clientToScreen/3,close/1,close/2,
- connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
+-export([cacheBestSize/2,canSetTransparent/1,captureMouse/1,center/1,center/2,
+ centerOnParent/1,centerOnParent/2,centre/1,centre/2,centreOnParent/1,
+ centreOnParent/2,clearBackground/1,clientToScreen/2,clientToScreen/3,
+ close/1,close/2,connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
destroyChildren/1,disable/1,disconnect/1,disconnect/2,disconnect/3,
enable/1,enable/2,findWindow/2,fit/1,fitInside/1,freeze/1,getAcceleratorTable/1,
getBackgroundColour/1,getBackgroundStyle/1,getBestSize/1,getCaret/1,
@@ -50,24 +50,25 @@
getScrollRange/2,getScrollThumb/2,getSize/1,getSizer/1,getTextExtent/2,
getTextExtent/3,getToolTip/1,getUpdateRegion/1,getVirtualSize/1,getWindowStyleFlag/1,
getWindowVariant/1,hasCapture/1,hasScrollbar/2,hasTransparentBackground/1,
- hide/1,inheritAttributes/1,initDialog/1,invalidateBestSize/1,isEnabled/1,
- isExposed/2,isExposed/3,isExposed/5,isRetained/1,isShown/1,isTopLevel/1,
- layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,move/2,
- move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,navigate/1,
- navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,popEventHandler/2,
- popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,refresh/2,refreshRect/2,
- refreshRect/3,releaseMouse/1,removeChild/2,reparent/2,screenToClient/1,
- screenToClient/2,scrollLines/2,scrollPages/2,scrollWindow/3,scrollWindow/4,
- setAcceleratorTable/2,setAutoLayout/2,setBackgroundColour/2,setBackgroundStyle/2,
- setCaret/2,setClientSize/2,setClientSize/3,setContainingSizer/2,setCursor/2,
+ hide/1,inheritAttributes/1,initDialog/1,invalidateBestSize/1,isDoubleBuffered/1,
+ isEnabled/1,isExposed/2,isExposed/3,isExposed/5,isRetained/1,isShown/1,
+ isTopLevel/1,layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,
+ move/2,move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,
+ navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,
+ popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,
+ refresh/2,refreshRect/2,refreshRect/3,releaseMouse/1,removeChild/2,
+ reparent/2,screenToClient/1,screenToClient/2,scrollLines/2,scrollPages/2,
+ scrollWindow/3,scrollWindow/4,setAcceleratorTable/2,setAutoLayout/2,
+ setBackgroundColour/2,setBackgroundStyle/2,setCaret/2,setClientSize/2,
+ setClientSize/3,setContainingSizer/2,setCursor/2,setDoubleBuffered/2,
setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,setFont/2,
setForegroundColour/2,setHelpText/2,setId/2,setLabel/2,setMaxSize/2,
setMinSize/2,setName/2,setOwnBackgroundColour/2,setOwnFont/2,setOwnForegroundColour/2,
setPalette/2,setScrollPos/3,setScrollPos/4,setScrollbar/5,setScrollbar/6,
setSize/2,setSize/3,setSize/5,setSize/6,setSizeHints/2,setSizeHints/3,
setSizeHints/4,setSizer/2,setSizer/3,setSizerAndFit/2,setSizerAndFit/3,
- setThemeEnabled/2,setToolTip/2,setVirtualSize/2,setVirtualSize/3,
- setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
+ setThemeEnabled/2,setToolTip/2,setTransparent/2,setVirtualSize/2,
+ setVirtualSize/3,setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
setWindowStyle/2,setWindowStyleFlag/2,setWindowVariant/2,shouldInheritColours/1,
show/1,show/2,thaw/1,transferDataFromWindow/1,transferDataToWindow/1,
update/1,updateWindowUI/1,updateWindowUI/2,validate/1,warpPointer/3]).
@@ -247,6 +248,14 @@ setLabel(This,Label) -> wxControl:setLabel(This,Label).
getLabel(This) -> wxControl:getLabel(This).
%% From wxWindow
%% @hidden
+setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On).
+%% @hidden
+isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This).
+%% @hidden
+canSetTransparent(This) -> wxWindow:canSetTransparent(This).
+%% @hidden
+setTransparent(This,Alpha) -> wxWindow:setTransparent(This,Alpha).
+%% @hidden
warpPointer(This,X,Y) -> wxWindow:warpPointer(This,X,Y).
%% @hidden
validate(This) -> wxWindow:validate(This).
diff --git a/lib/wx/src/gen/wxSpinButton.erl b/lib/wx/src/gen/wxSpinButton.erl
index 52d71dd9c2..82b48f87da 100644
--- a/lib/wx/src/gen/wxSpinButton.erl
+++ b/lib/wx/src/gen/wxSpinButton.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.
@@ -34,10 +34,10 @@
new/2,setRange/3,setValue/2]).
%% inherited exports
--export([cacheBestSize/2,captureMouse/1,center/1,center/2,centerOnParent/1,
- centerOnParent/2,centre/1,centre/2,centreOnParent/1,centreOnParent/2,
- clearBackground/1,clientToScreen/2,clientToScreen/3,close/1,close/2,
- connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
+-export([cacheBestSize/2,canSetTransparent/1,captureMouse/1,center/1,center/2,
+ centerOnParent/1,centerOnParent/2,centre/1,centre/2,centreOnParent/1,
+ centreOnParent/2,clearBackground/1,clientToScreen/2,clientToScreen/3,
+ close/1,close/2,connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
destroyChildren/1,disable/1,disconnect/1,disconnect/2,disconnect/3,
enable/1,enable/2,findWindow/2,fit/1,fitInside/1,freeze/1,getAcceleratorTable/1,
getBackgroundColour/1,getBackgroundStyle/1,getBestSize/1,getCaret/1,
@@ -49,24 +49,25 @@
getScrollRange/2,getScrollThumb/2,getSize/1,getSizer/1,getTextExtent/2,
getTextExtent/3,getToolTip/1,getUpdateRegion/1,getVirtualSize/1,getWindowStyleFlag/1,
getWindowVariant/1,hasCapture/1,hasScrollbar/2,hasTransparentBackground/1,
- hide/1,inheritAttributes/1,initDialog/1,invalidateBestSize/1,isEnabled/1,
- isExposed/2,isExposed/3,isExposed/5,isRetained/1,isShown/1,isTopLevel/1,
- layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,move/2,
- move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,navigate/1,
- navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,popEventHandler/2,
- popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,refresh/2,refreshRect/2,
- refreshRect/3,releaseMouse/1,removeChild/2,reparent/2,screenToClient/1,
- screenToClient/2,scrollLines/2,scrollPages/2,scrollWindow/3,scrollWindow/4,
- setAcceleratorTable/2,setAutoLayout/2,setBackgroundColour/2,setBackgroundStyle/2,
- setCaret/2,setClientSize/2,setClientSize/3,setContainingSizer/2,setCursor/2,
+ hide/1,inheritAttributes/1,initDialog/1,invalidateBestSize/1,isDoubleBuffered/1,
+ isEnabled/1,isExposed/2,isExposed/3,isExposed/5,isRetained/1,isShown/1,
+ isTopLevel/1,layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,
+ move/2,move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,
+ navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,
+ popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,
+ refresh/2,refreshRect/2,refreshRect/3,releaseMouse/1,removeChild/2,
+ reparent/2,screenToClient/1,screenToClient/2,scrollLines/2,scrollPages/2,
+ scrollWindow/3,scrollWindow/4,setAcceleratorTable/2,setAutoLayout/2,
+ setBackgroundColour/2,setBackgroundStyle/2,setCaret/2,setClientSize/2,
+ setClientSize/3,setContainingSizer/2,setCursor/2,setDoubleBuffered/2,
setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,setFont/2,
setForegroundColour/2,setHelpText/2,setId/2,setLabel/2,setMaxSize/2,
setMinSize/2,setName/2,setOwnBackgroundColour/2,setOwnFont/2,setOwnForegroundColour/2,
setPalette/2,setScrollPos/3,setScrollPos/4,setScrollbar/5,setScrollbar/6,
setSize/2,setSize/3,setSize/5,setSize/6,setSizeHints/2,setSizeHints/3,
setSizeHints/4,setSizer/2,setSizer/3,setSizerAndFit/2,setSizerAndFit/3,
- setThemeEnabled/2,setToolTip/2,setVirtualSize/2,setVirtualSize/3,
- setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
+ setThemeEnabled/2,setToolTip/2,setTransparent/2,setVirtualSize/2,
+ setVirtualSize/3,setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
setWindowStyle/2,setWindowStyleFlag/2,setWindowVariant/2,shouldInheritColours/1,
show/1,show/2,thaw/1,transferDataFromWindow/1,transferDataToWindow/1,
update/1,updateWindowUI/1,updateWindowUI/2,validate/1,warpPointer/3]).
@@ -195,6 +196,14 @@ setLabel(This,Label) -> wxControl:setLabel(This,Label).
getLabel(This) -> wxControl:getLabel(This).
%% From wxWindow
%% @hidden
+setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On).
+%% @hidden
+isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This).
+%% @hidden
+canSetTransparent(This) -> wxWindow:canSetTransparent(This).
+%% @hidden
+setTransparent(This,Alpha) -> wxWindow:setTransparent(This,Alpha).
+%% @hidden
warpPointer(This,X,Y) -> wxWindow:warpPointer(This,X,Y).
%% @hidden
validate(This) -> wxWindow:validate(This).
diff --git a/lib/wx/src/gen/wxSpinCtrl.erl b/lib/wx/src/gen/wxSpinCtrl.erl
index 6fe5197359..89fa971543 100644
--- a/lib/wx/src/gen/wxSpinCtrl.erl
+++ b/lib/wx/src/gen/wxSpinCtrl.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.
@@ -34,10 +34,10 @@
new/2,setRange/3,setSelection/3,setValue/2]).
%% inherited exports
--export([cacheBestSize/2,captureMouse/1,center/1,center/2,centerOnParent/1,
- centerOnParent/2,centre/1,centre/2,centreOnParent/1,centreOnParent/2,
- clearBackground/1,clientToScreen/2,clientToScreen/3,close/1,close/2,
- connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
+-export([cacheBestSize/2,canSetTransparent/1,captureMouse/1,center/1,center/2,
+ centerOnParent/1,centerOnParent/2,centre/1,centre/2,centreOnParent/1,
+ centreOnParent/2,clearBackground/1,clientToScreen/2,clientToScreen/3,
+ close/1,close/2,connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
destroyChildren/1,disable/1,disconnect/1,disconnect/2,disconnect/3,
enable/1,enable/2,findWindow/2,fit/1,fitInside/1,freeze/1,getAcceleratorTable/1,
getBackgroundColour/1,getBackgroundStyle/1,getBestSize/1,getCaret/1,
@@ -49,24 +49,25 @@
getScrollRange/2,getScrollThumb/2,getSize/1,getSizer/1,getTextExtent/2,
getTextExtent/3,getToolTip/1,getUpdateRegion/1,getVirtualSize/1,getWindowStyleFlag/1,
getWindowVariant/1,hasCapture/1,hasScrollbar/2,hasTransparentBackground/1,
- hide/1,inheritAttributes/1,initDialog/1,invalidateBestSize/1,isEnabled/1,
- isExposed/2,isExposed/3,isExposed/5,isRetained/1,isShown/1,isTopLevel/1,
- layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,move/2,
- move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,navigate/1,
- navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,popEventHandler/2,
- popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,refresh/2,refreshRect/2,
- refreshRect/3,releaseMouse/1,removeChild/2,reparent/2,screenToClient/1,
- screenToClient/2,scrollLines/2,scrollPages/2,scrollWindow/3,scrollWindow/4,
- setAcceleratorTable/2,setAutoLayout/2,setBackgroundColour/2,setBackgroundStyle/2,
- setCaret/2,setClientSize/2,setClientSize/3,setContainingSizer/2,setCursor/2,
+ hide/1,inheritAttributes/1,initDialog/1,invalidateBestSize/1,isDoubleBuffered/1,
+ isEnabled/1,isExposed/2,isExposed/3,isExposed/5,isRetained/1,isShown/1,
+ isTopLevel/1,layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,
+ move/2,move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,
+ navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,
+ popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,
+ refresh/2,refreshRect/2,refreshRect/3,releaseMouse/1,removeChild/2,
+ reparent/2,screenToClient/1,screenToClient/2,scrollLines/2,scrollPages/2,
+ scrollWindow/3,scrollWindow/4,setAcceleratorTable/2,setAutoLayout/2,
+ setBackgroundColour/2,setBackgroundStyle/2,setCaret/2,setClientSize/2,
+ setClientSize/3,setContainingSizer/2,setCursor/2,setDoubleBuffered/2,
setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,setFont/2,
setForegroundColour/2,setHelpText/2,setId/2,setLabel/2,setMaxSize/2,
setMinSize/2,setName/2,setOwnBackgroundColour/2,setOwnFont/2,setOwnForegroundColour/2,
setPalette/2,setScrollPos/3,setScrollPos/4,setScrollbar/5,setScrollbar/6,
setSize/2,setSize/3,setSize/5,setSize/6,setSizeHints/2,setSizeHints/3,
setSizeHints/4,setSizer/2,setSizer/3,setSizerAndFit/2,setSizerAndFit/3,
- setThemeEnabled/2,setToolTip/2,setVirtualSize/2,setVirtualSize/3,
- setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
+ setThemeEnabled/2,setToolTip/2,setTransparent/2,setVirtualSize/2,
+ setVirtualSize/3,setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
setWindowStyle/2,setWindowStyleFlag/2,setWindowVariant/2,shouldInheritColours/1,
show/1,show/2,thaw/1,transferDataFromWindow/1,transferDataToWindow/1,
update/1,updateWindowUI/1,updateWindowUI/2,validate/1,warpPointer/3]).
@@ -232,6 +233,14 @@ setLabel(This,Label) -> wxControl:setLabel(This,Label).
getLabel(This) -> wxControl:getLabel(This).
%% From wxWindow
%% @hidden
+setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On).
+%% @hidden
+isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This).
+%% @hidden
+canSetTransparent(This) -> wxWindow:canSetTransparent(This).
+%% @hidden
+setTransparent(This,Alpha) -> wxWindow:setTransparent(This,Alpha).
+%% @hidden
warpPointer(This,X,Y) -> wxWindow:warpPointer(This,X,Y).
%% @hidden
validate(This) -> wxWindow:validate(This).
diff --git a/lib/wx/src/gen/wxSpinEvent.erl b/lib/wx/src/gen/wxSpinEvent.erl
index 21ebdd500f..da3111e5f5 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.
diff --git a/lib/wx/src/gen/wxSplashScreen.erl b/lib/wx/src/gen/wxSplashScreen.erl
index 6c12907d38..fad8cfcd8e 100644
--- a/lib/wx/src/gen/wxSplashScreen.erl
+++ b/lib/wx/src/gen/wxSplashScreen.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.
@@ -34,11 +34,11 @@
-export([destroy/1,getSplashStyle/1,getTimeout/1,new/0,new/5,new/6]).
%% inherited exports
--export([cacheBestSize/2,captureMouse/1,center/1,center/2,centerOnParent/1,
- centerOnParent/2,centerOnScreen/1,centerOnScreen/2,centre/1,centre/2,
- centreOnParent/1,centreOnParent/2,centreOnScreen/1,centreOnScreen/2,
- clearBackground/1,clientToScreen/2,clientToScreen/3,close/1,close/2,
- connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
+-export([cacheBestSize/2,canSetTransparent/1,captureMouse/1,center/1,center/2,
+ centerOnParent/1,centerOnParent/2,centerOnScreen/1,centerOnScreen/2,
+ centre/1,centre/2,centreOnParent/1,centreOnParent/2,centreOnScreen/1,
+ centreOnScreen/2,clearBackground/1,clientToScreen/2,clientToScreen/3,
+ close/1,close/2,connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
createStatusBar/1,createStatusBar/2,createToolBar/1,createToolBar/2,
destroyChildren/1,disable/1,disconnect/1,disconnect/2,disconnect/3,
enable/1,enable/2,findWindow/2,fit/1,fitInside/1,freeze/1,getAcceleratorTable/1,
@@ -54,32 +54,32 @@
getToolTip/1,getUpdateRegion/1,getVirtualSize/1,getWindowStyleFlag/1,
getWindowVariant/1,hasCapture/1,hasScrollbar/2,hasTransparentBackground/1,
hide/1,iconize/1,iconize/2,inheritAttributes/1,initDialog/1,invalidateBestSize/1,
- isActive/1,isEnabled/1,isExposed/2,isExposed/3,isExposed/5,isFullScreen/1,
- isIconized/1,isMaximized/1,isRetained/1,isShown/1,isTopLevel/1,layout/1,
- lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,maximize/1,maximize/2,
- move/2,move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,
- navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,
- popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4,processCommand/2,
- raise/1,refresh/1,refresh/2,refreshRect/2,refreshRect/3,releaseMouse/1,
- removeChild/2,reparent/2,requestUserAttention/1,requestUserAttention/2,
+ isActive/1,isDoubleBuffered/1,isEnabled/1,isExposed/2,isExposed/3,
+ isExposed/5,isFullScreen/1,isIconized/1,isMaximized/1,isRetained/1,
+ isShown/1,isTopLevel/1,layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,
+ makeModal/2,maximize/1,maximize/2,move/2,move/3,move/4,moveAfterInTabOrder/2,
+ moveBeforeInTabOrder/2,navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1,
+ popEventHandler/1,popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4,
+ processCommand/2,raise/1,refresh/1,refresh/2,refreshRect/2,refreshRect/3,
+ releaseMouse/1,removeChild/2,reparent/2,requestUserAttention/1,requestUserAttention/2,
screenToClient/1,screenToClient/2,scrollLines/2,scrollPages/2,scrollWindow/3,
scrollWindow/4,sendSizeEvent/1,setAcceleratorTable/2,setAutoLayout/2,
setBackgroundColour/2,setBackgroundStyle/2,setCaret/2,setClientSize/2,
- setClientSize/3,setContainingSizer/2,setCursor/2,setDropTarget/2,
- setExtraStyle/2,setFocus/1,setFocusFromKbd/1,setFont/2,setForegroundColour/2,
- setHelpText/2,setIcon/2,setIcons/2,setId/2,setLabel/2,setMaxSize/2,
- setMenuBar/2,setMinSize/2,setName/2,setOwnBackgroundColour/2,setOwnFont/2,
- setOwnForegroundColour/2,setPalette/2,setScrollPos/3,setScrollPos/4,
- setScrollbar/5,setScrollbar/6,setShape/2,setSize/2,setSize/3,setSize/5,
- setSize/6,setSizeHints/2,setSizeHints/3,setSizeHints/4,setSizer/2,
- setSizer/3,setSizerAndFit/2,setSizerAndFit/3,setStatusBar/2,setStatusBarPane/2,
- setStatusText/2,setStatusText/3,setStatusWidths/2,setThemeEnabled/2,
- setTitle/2,setToolBar/2,setToolTip/2,setVirtualSize/2,setVirtualSize/3,
- setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
- setWindowStyle/2,setWindowStyleFlag/2,setWindowVariant/2,shouldInheritColours/1,
- show/1,show/2,showFullScreen/2,showFullScreen/3,thaw/1,transferDataFromWindow/1,
- transferDataToWindow/1,update/1,updateWindowUI/1,updateWindowUI/2,
- validate/1,warpPointer/3]).
+ setClientSize/3,setContainingSizer/2,setCursor/2,setDoubleBuffered/2,
+ setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,setFont/2,
+ setForegroundColour/2,setHelpText/2,setIcon/2,setIcons/2,setId/2,setLabel/2,
+ setMaxSize/2,setMenuBar/2,setMinSize/2,setName/2,setOwnBackgroundColour/2,
+ setOwnFont/2,setOwnForegroundColour/2,setPalette/2,setScrollPos/3,
+ setScrollPos/4,setScrollbar/5,setScrollbar/6,setShape/2,setSize/2,
+ setSize/3,setSize/5,setSize/6,setSizeHints/2,setSizeHints/3,setSizeHints/4,
+ setSizer/2,setSizer/3,setSizerAndFit/2,setSizerAndFit/3,setStatusBar/2,
+ setStatusBarPane/2,setStatusText/2,setStatusText/3,setStatusWidths/2,
+ setThemeEnabled/2,setTitle/2,setToolBar/2,setToolTip/2,setTransparent/2,
+ setVirtualSize/2,setVirtualSize/3,setVirtualSizeHints/2,setVirtualSizeHints/3,
+ setVirtualSizeHints/4,setWindowStyle/2,setWindowStyleFlag/2,setWindowVariant/2,
+ shouldInheritColours/1,show/1,show/2,showFullScreen/2,showFullScreen/3,
+ thaw/1,transferDataFromWindow/1,transferDataToWindow/1,update/1,updateWindowUI/1,
+ updateWindowUI/2,validate/1,warpPointer/3]).
-export_type([wxSplashScreen/0]).
%% @hidden
@@ -230,6 +230,14 @@ getIcons(This) -> wxTopLevelWindow:getIcons(This).
getIcon(This) -> wxTopLevelWindow:getIcon(This).
%% From wxWindow
%% @hidden
+setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On).
+%% @hidden
+isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This).
+%% @hidden
+canSetTransparent(This) -> wxWindow:canSetTransparent(This).
+%% @hidden
+setTransparent(This,Alpha) -> wxWindow:setTransparent(This,Alpha).
+%% @hidden
warpPointer(This,X,Y) -> wxWindow:warpPointer(This,X,Y).
%% @hidden
validate(This) -> wxWindow:validate(This).
diff --git a/lib/wx/src/gen/wxSplitterEvent.erl b/lib/wx/src/gen/wxSplitterEvent.erl
index e8001ec540..3daef5cdc1 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.
diff --git a/lib/wx/src/gen/wxSplitterWindow.erl b/lib/wx/src/gen/wxSplitterWindow.erl
index b6b7a328ad..7db8dc60c4 100644
--- a/lib/wx/src/gen/wxSplitterWindow.erl
+++ b/lib/wx/src/gen/wxSplitterWindow.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.
@@ -37,10 +37,10 @@
unsplit/1,unsplit/2,updateSize/1]).
%% inherited exports
--export([cacheBestSize/2,captureMouse/1,center/1,center/2,centerOnParent/1,
- centerOnParent/2,centre/1,centre/2,centreOnParent/1,centreOnParent/2,
- clearBackground/1,clientToScreen/2,clientToScreen/3,close/1,close/2,
- connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
+-export([cacheBestSize/2,canSetTransparent/1,captureMouse/1,center/1,center/2,
+ centerOnParent/1,centerOnParent/2,centre/1,centre/2,centreOnParent/1,
+ centreOnParent/2,clearBackground/1,clientToScreen/2,clientToScreen/3,
+ close/1,close/2,connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
destroyChildren/1,disable/1,disconnect/1,disconnect/2,disconnect/3,
enable/1,enable/2,findWindow/2,fit/1,fitInside/1,freeze/1,getAcceleratorTable/1,
getBackgroundColour/1,getBackgroundStyle/1,getBestSize/1,getCaret/1,
@@ -52,24 +52,25 @@
getScrollRange/2,getScrollThumb/2,getSize/1,getSizer/1,getTextExtent/2,
getTextExtent/3,getToolTip/1,getUpdateRegion/1,getVirtualSize/1,getWindowStyleFlag/1,
getWindowVariant/1,hasCapture/1,hasScrollbar/2,hasTransparentBackground/1,
- hide/1,inheritAttributes/1,initDialog/1,invalidateBestSize/1,isEnabled/1,
- isExposed/2,isExposed/3,isExposed/5,isRetained/1,isShown/1,isTopLevel/1,
- layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,move/2,
- move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,navigate/1,
- navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,popEventHandler/2,
- popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,refresh/2,refreshRect/2,
- refreshRect/3,releaseMouse/1,removeChild/2,reparent/2,screenToClient/1,
- screenToClient/2,scrollLines/2,scrollPages/2,scrollWindow/3,scrollWindow/4,
- setAcceleratorTable/2,setAutoLayout/2,setBackgroundColour/2,setBackgroundStyle/2,
- setCaret/2,setClientSize/2,setClientSize/3,setContainingSizer/2,setCursor/2,
+ hide/1,inheritAttributes/1,initDialog/1,invalidateBestSize/1,isDoubleBuffered/1,
+ isEnabled/1,isExposed/2,isExposed/3,isExposed/5,isRetained/1,isShown/1,
+ isTopLevel/1,layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,
+ move/2,move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,
+ navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,
+ popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,
+ refresh/2,refreshRect/2,refreshRect/3,releaseMouse/1,removeChild/2,
+ reparent/2,screenToClient/1,screenToClient/2,scrollLines/2,scrollPages/2,
+ scrollWindow/3,scrollWindow/4,setAcceleratorTable/2,setAutoLayout/2,
+ setBackgroundColour/2,setBackgroundStyle/2,setCaret/2,setClientSize/2,
+ setClientSize/3,setContainingSizer/2,setCursor/2,setDoubleBuffered/2,
setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,setFont/2,
setForegroundColour/2,setHelpText/2,setId/2,setLabel/2,setMaxSize/2,
setMinSize/2,setName/2,setOwnBackgroundColour/2,setOwnFont/2,setOwnForegroundColour/2,
setPalette/2,setScrollPos/3,setScrollPos/4,setScrollbar/5,setScrollbar/6,
setSize/2,setSize/3,setSize/5,setSize/6,setSizeHints/2,setSizeHints/3,
setSizeHints/4,setSizer/2,setSizer/3,setSizerAndFit/2,setSizerAndFit/3,
- setThemeEnabled/2,setToolTip/2,setVirtualSize/2,setVirtualSize/3,
- setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
+ setThemeEnabled/2,setToolTip/2,setTransparent/2,setVirtualSize/2,
+ setVirtualSize/3,setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
setWindowStyle/2,setWindowStyleFlag/2,setWindowVariant/2,shouldInheritColours/1,
show/1,show/2,thaw/1,transferDataFromWindow/1,transferDataToWindow/1,
update/1,updateWindowUI/1,updateWindowUI/2,validate/1,warpPointer/3]).
@@ -358,6 +359,14 @@ destroy(Obj=#wx_ref{type=Type}) ->
ok.
%% From wxWindow
%% @hidden
+setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On).
+%% @hidden
+isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This).
+%% @hidden
+canSetTransparent(This) -> wxWindow:canSetTransparent(This).
+%% @hidden
+setTransparent(This,Alpha) -> wxWindow:setTransparent(This,Alpha).
+%% @hidden
warpPointer(This,X,Y) -> wxWindow:warpPointer(This,X,Y).
%% @hidden
validate(This) -> wxWindow:validate(This).
diff --git a/lib/wx/src/gen/wxStaticBitmap.erl b/lib/wx/src/gen/wxStaticBitmap.erl
index 1673e3b62d..4da50262b9 100644
--- a/lib/wx/src/gen/wxStaticBitmap.erl
+++ b/lib/wx/src/gen/wxStaticBitmap.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.
@@ -33,10 +33,10 @@
-export([create/4,create/5,destroy/1,getBitmap/1,new/0,new/3,new/4,setBitmap/2]).
%% inherited exports
--export([cacheBestSize/2,captureMouse/1,center/1,center/2,centerOnParent/1,
- centerOnParent/2,centre/1,centre/2,centreOnParent/1,centreOnParent/2,
- clearBackground/1,clientToScreen/2,clientToScreen/3,close/1,close/2,
- connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
+-export([cacheBestSize/2,canSetTransparent/1,captureMouse/1,center/1,center/2,
+ centerOnParent/1,centerOnParent/2,centre/1,centre/2,centreOnParent/1,
+ centreOnParent/2,clearBackground/1,clientToScreen/2,clientToScreen/3,
+ close/1,close/2,connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
destroyChildren/1,disable/1,disconnect/1,disconnect/2,disconnect/3,
enable/1,enable/2,findWindow/2,fit/1,fitInside/1,freeze/1,getAcceleratorTable/1,
getBackgroundColour/1,getBackgroundStyle/1,getBestSize/1,getCaret/1,
@@ -48,24 +48,25 @@
getScrollRange/2,getScrollThumb/2,getSize/1,getSizer/1,getTextExtent/2,
getTextExtent/3,getToolTip/1,getUpdateRegion/1,getVirtualSize/1,getWindowStyleFlag/1,
getWindowVariant/1,hasCapture/1,hasScrollbar/2,hasTransparentBackground/1,
- hide/1,inheritAttributes/1,initDialog/1,invalidateBestSize/1,isEnabled/1,
- isExposed/2,isExposed/3,isExposed/5,isRetained/1,isShown/1,isTopLevel/1,
- layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,move/2,
- move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,navigate/1,
- navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,popEventHandler/2,
- popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,refresh/2,refreshRect/2,
- refreshRect/3,releaseMouse/1,removeChild/2,reparent/2,screenToClient/1,
- screenToClient/2,scrollLines/2,scrollPages/2,scrollWindow/3,scrollWindow/4,
- setAcceleratorTable/2,setAutoLayout/2,setBackgroundColour/2,setBackgroundStyle/2,
- setCaret/2,setClientSize/2,setClientSize/3,setContainingSizer/2,setCursor/2,
+ hide/1,inheritAttributes/1,initDialog/1,invalidateBestSize/1,isDoubleBuffered/1,
+ isEnabled/1,isExposed/2,isExposed/3,isExposed/5,isRetained/1,isShown/1,
+ isTopLevel/1,layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,
+ move/2,move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,
+ navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,
+ popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,
+ refresh/2,refreshRect/2,refreshRect/3,releaseMouse/1,removeChild/2,
+ reparent/2,screenToClient/1,screenToClient/2,scrollLines/2,scrollPages/2,
+ scrollWindow/3,scrollWindow/4,setAcceleratorTable/2,setAutoLayout/2,
+ setBackgroundColour/2,setBackgroundStyle/2,setCaret/2,setClientSize/2,
+ setClientSize/3,setContainingSizer/2,setCursor/2,setDoubleBuffered/2,
setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,setFont/2,
setForegroundColour/2,setHelpText/2,setId/2,setLabel/2,setMaxSize/2,
setMinSize/2,setName/2,setOwnBackgroundColour/2,setOwnFont/2,setOwnForegroundColour/2,
setPalette/2,setScrollPos/3,setScrollPos/4,setScrollbar/5,setScrollbar/6,
setSize/2,setSize/3,setSize/5,setSize/6,setSizeHints/2,setSizeHints/3,
setSizeHints/4,setSizer/2,setSizer/3,setSizerAndFit/2,setSizerAndFit/3,
- setThemeEnabled/2,setToolTip/2,setVirtualSize/2,setVirtualSize/3,
- setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
+ setThemeEnabled/2,setToolTip/2,setTransparent/2,setVirtualSize/2,
+ setVirtualSize/3,setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
setWindowStyle/2,setWindowStyleFlag/2,setWindowVariant/2,shouldInheritColours/1,
show/1,show/2,thaw/1,transferDataFromWindow/1,transferDataToWindow/1,
update/1,updateWindowUI/1,updateWindowUI/2,validate/1,warpPointer/3]).
@@ -167,6 +168,14 @@ setLabel(This,Label) -> wxControl:setLabel(This,Label).
getLabel(This) -> wxControl:getLabel(This).
%% From wxWindow
%% @hidden
+setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On).
+%% @hidden
+isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This).
+%% @hidden
+canSetTransparent(This) -> wxWindow:canSetTransparent(This).
+%% @hidden
+setTransparent(This,Alpha) -> wxWindow:setTransparent(This,Alpha).
+%% @hidden
warpPointer(This,X,Y) -> wxWindow:warpPointer(This,X,Y).
%% @hidden
validate(This) -> wxWindow:validate(This).
diff --git a/lib/wx/src/gen/wxStaticBox.erl b/lib/wx/src/gen/wxStaticBox.erl
index f6a715f051..04584f23b2 100644
--- a/lib/wx/src/gen/wxStaticBox.erl
+++ b/lib/wx/src/gen/wxStaticBox.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.
@@ -33,10 +33,10 @@
-export([create/4,create/5,destroy/1,new/0,new/3,new/4]).
%% inherited exports
--export([cacheBestSize/2,captureMouse/1,center/1,center/2,centerOnParent/1,
- centerOnParent/2,centre/1,centre/2,centreOnParent/1,centreOnParent/2,
- clearBackground/1,clientToScreen/2,clientToScreen/3,close/1,close/2,
- connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
+-export([cacheBestSize/2,canSetTransparent/1,captureMouse/1,center/1,center/2,
+ centerOnParent/1,centerOnParent/2,centre/1,centre/2,centreOnParent/1,
+ centreOnParent/2,clearBackground/1,clientToScreen/2,clientToScreen/3,
+ close/1,close/2,connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
destroyChildren/1,disable/1,disconnect/1,disconnect/2,disconnect/3,
enable/1,enable/2,findWindow/2,fit/1,fitInside/1,freeze/1,getAcceleratorTable/1,
getBackgroundColour/1,getBackgroundStyle/1,getBestSize/1,getCaret/1,
@@ -48,24 +48,25 @@
getScrollRange/2,getScrollThumb/2,getSize/1,getSizer/1,getTextExtent/2,
getTextExtent/3,getToolTip/1,getUpdateRegion/1,getVirtualSize/1,getWindowStyleFlag/1,
getWindowVariant/1,hasCapture/1,hasScrollbar/2,hasTransparentBackground/1,
- hide/1,inheritAttributes/1,initDialog/1,invalidateBestSize/1,isEnabled/1,
- isExposed/2,isExposed/3,isExposed/5,isRetained/1,isShown/1,isTopLevel/1,
- layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,move/2,
- move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,navigate/1,
- navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,popEventHandler/2,
- popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,refresh/2,refreshRect/2,
- refreshRect/3,releaseMouse/1,removeChild/2,reparent/2,screenToClient/1,
- screenToClient/2,scrollLines/2,scrollPages/2,scrollWindow/3,scrollWindow/4,
- setAcceleratorTable/2,setAutoLayout/2,setBackgroundColour/2,setBackgroundStyle/2,
- setCaret/2,setClientSize/2,setClientSize/3,setContainingSizer/2,setCursor/2,
+ hide/1,inheritAttributes/1,initDialog/1,invalidateBestSize/1,isDoubleBuffered/1,
+ isEnabled/1,isExposed/2,isExposed/3,isExposed/5,isRetained/1,isShown/1,
+ isTopLevel/1,layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,
+ move/2,move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,
+ navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,
+ popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,
+ refresh/2,refreshRect/2,refreshRect/3,releaseMouse/1,removeChild/2,
+ reparent/2,screenToClient/1,screenToClient/2,scrollLines/2,scrollPages/2,
+ scrollWindow/3,scrollWindow/4,setAcceleratorTable/2,setAutoLayout/2,
+ setBackgroundColour/2,setBackgroundStyle/2,setCaret/2,setClientSize/2,
+ setClientSize/3,setContainingSizer/2,setCursor/2,setDoubleBuffered/2,
setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,setFont/2,
setForegroundColour/2,setHelpText/2,setId/2,setLabel/2,setMaxSize/2,
setMinSize/2,setName/2,setOwnBackgroundColour/2,setOwnFont/2,setOwnForegroundColour/2,
setPalette/2,setScrollPos/3,setScrollPos/4,setScrollbar/5,setScrollbar/6,
setSize/2,setSize/3,setSize/5,setSize/6,setSizeHints/2,setSizeHints/3,
setSizeHints/4,setSizer/2,setSizer/3,setSizerAndFit/2,setSizerAndFit/3,
- setThemeEnabled/2,setToolTip/2,setVirtualSize/2,setVirtualSize/3,
- setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
+ setThemeEnabled/2,setToolTip/2,setTransparent/2,setVirtualSize/2,
+ setVirtualSize/3,setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
setWindowStyle/2,setWindowStyleFlag/2,setWindowVariant/2,shouldInheritColours/1,
show/1,show/2,thaw/1,transferDataFromWindow/1,transferDataToWindow/1,
update/1,updateWindowUI/1,updateWindowUI/2,validate/1,warpPointer/3]).
@@ -150,6 +151,14 @@ setLabel(This,Label) -> wxControl:setLabel(This,Label).
getLabel(This) -> wxControl:getLabel(This).
%% From wxWindow
%% @hidden
+setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On).
+%% @hidden
+isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This).
+%% @hidden
+canSetTransparent(This) -> wxWindow:canSetTransparent(This).
+%% @hidden
+setTransparent(This,Alpha) -> wxWindow:setTransparent(This,Alpha).
+%% @hidden
warpPointer(This,X,Y) -> wxWindow:warpPointer(This,X,Y).
%% @hidden
validate(This) -> wxWindow:validate(This).
diff --git a/lib/wx/src/gen/wxStaticBoxSizer.erl b/lib/wx/src/gen/wxStaticBoxSizer.erl
index 9edf495679..76dde099b6 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.
diff --git a/lib/wx/src/gen/wxStaticLine.erl b/lib/wx/src/gen/wxStaticLine.erl
index 6306a01c62..6d23c5ac3d 100644
--- a/lib/wx/src/gen/wxStaticLine.erl
+++ b/lib/wx/src/gen/wxStaticLine.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.
@@ -34,10 +34,10 @@
new/2]).
%% inherited exports
--export([cacheBestSize/2,captureMouse/1,center/1,center/2,centerOnParent/1,
- centerOnParent/2,centre/1,centre/2,centreOnParent/1,centreOnParent/2,
- clearBackground/1,clientToScreen/2,clientToScreen/3,close/1,close/2,
- connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
+-export([cacheBestSize/2,canSetTransparent/1,captureMouse/1,center/1,center/2,
+ centerOnParent/1,centerOnParent/2,centre/1,centre/2,centreOnParent/1,
+ centreOnParent/2,clearBackground/1,clientToScreen/2,clientToScreen/3,
+ close/1,close/2,connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
destroyChildren/1,disable/1,disconnect/1,disconnect/2,disconnect/3,
enable/1,enable/2,findWindow/2,fit/1,fitInside/1,freeze/1,getAcceleratorTable/1,
getBackgroundColour/1,getBackgroundStyle/1,getBestSize/1,getCaret/1,
@@ -49,24 +49,25 @@
getScrollRange/2,getScrollThumb/2,getSize/1,getSizer/1,getTextExtent/2,
getTextExtent/3,getToolTip/1,getUpdateRegion/1,getVirtualSize/1,getWindowStyleFlag/1,
getWindowVariant/1,hasCapture/1,hasScrollbar/2,hasTransparentBackground/1,
- hide/1,inheritAttributes/1,initDialog/1,invalidateBestSize/1,isEnabled/1,
- isExposed/2,isExposed/3,isExposed/5,isRetained/1,isShown/1,isTopLevel/1,
- layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,move/2,
- move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,navigate/1,
- navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,popEventHandler/2,
- popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,refresh/2,refreshRect/2,
- refreshRect/3,releaseMouse/1,removeChild/2,reparent/2,screenToClient/1,
- screenToClient/2,scrollLines/2,scrollPages/2,scrollWindow/3,scrollWindow/4,
- setAcceleratorTable/2,setAutoLayout/2,setBackgroundColour/2,setBackgroundStyle/2,
- setCaret/2,setClientSize/2,setClientSize/3,setContainingSizer/2,setCursor/2,
+ hide/1,inheritAttributes/1,initDialog/1,invalidateBestSize/1,isDoubleBuffered/1,
+ isEnabled/1,isExposed/2,isExposed/3,isExposed/5,isRetained/1,isShown/1,
+ isTopLevel/1,layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,
+ move/2,move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,
+ navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,
+ popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,
+ refresh/2,refreshRect/2,refreshRect/3,releaseMouse/1,removeChild/2,
+ reparent/2,screenToClient/1,screenToClient/2,scrollLines/2,scrollPages/2,
+ scrollWindow/3,scrollWindow/4,setAcceleratorTable/2,setAutoLayout/2,
+ setBackgroundColour/2,setBackgroundStyle/2,setCaret/2,setClientSize/2,
+ setClientSize/3,setContainingSizer/2,setCursor/2,setDoubleBuffered/2,
setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,setFont/2,
setForegroundColour/2,setHelpText/2,setId/2,setLabel/2,setMaxSize/2,
setMinSize/2,setName/2,setOwnBackgroundColour/2,setOwnFont/2,setOwnForegroundColour/2,
setPalette/2,setScrollPos/3,setScrollPos/4,setScrollbar/5,setScrollbar/6,
setSize/2,setSize/3,setSize/5,setSize/6,setSizeHints/2,setSizeHints/3,
setSizeHints/4,setSizer/2,setSizer/3,setSizerAndFit/2,setSizerAndFit/3,
- setThemeEnabled/2,setToolTip/2,setVirtualSize/2,setVirtualSize/3,
- setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
+ setThemeEnabled/2,setToolTip/2,setTransparent/2,setVirtualSize/2,
+ setVirtualSize/3,setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
setWindowStyle/2,setWindowStyleFlag/2,setWindowVariant/2,shouldInheritColours/1,
show/1,show/2,thaw/1,transferDataFromWindow/1,transferDataToWindow/1,
update/1,updateWindowUI/1,updateWindowUI/2,validate/1,warpPointer/3]).
@@ -167,6 +168,14 @@ setLabel(This,Label) -> wxControl:setLabel(This,Label).
getLabel(This) -> wxControl:getLabel(This).
%% From wxWindow
%% @hidden
+setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On).
+%% @hidden
+isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This).
+%% @hidden
+canSetTransparent(This) -> wxWindow:canSetTransparent(This).
+%% @hidden
+setTransparent(This,Alpha) -> wxWindow:setTransparent(This,Alpha).
+%% @hidden
warpPointer(This,X,Y) -> wxWindow:warpPointer(This,X,Y).
%% @hidden
validate(This) -> wxWindow:validate(This).
diff --git a/lib/wx/src/gen/wxStaticText.erl b/lib/wx/src/gen/wxStaticText.erl
index 4c5d72d5e7..635f29a1e8 100644
--- a/lib/wx/src/gen/wxStaticText.erl
+++ b/lib/wx/src/gen/wxStaticText.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.
@@ -33,10 +33,10 @@
-export([create/4,create/5,destroy/1,getLabel/1,new/0,new/3,new/4,setLabel/2,wrap/2]).
%% inherited exports
--export([cacheBestSize/2,captureMouse/1,center/1,center/2,centerOnParent/1,
- centerOnParent/2,centre/1,centre/2,centreOnParent/1,centreOnParent/2,
- clearBackground/1,clientToScreen/2,clientToScreen/3,close/1,close/2,
- connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
+-export([cacheBestSize/2,canSetTransparent/1,captureMouse/1,center/1,center/2,
+ centerOnParent/1,centerOnParent/2,centre/1,centre/2,centreOnParent/1,
+ centreOnParent/2,clearBackground/1,clientToScreen/2,clientToScreen/3,
+ close/1,close/2,connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
destroyChildren/1,disable/1,disconnect/1,disconnect/2,disconnect/3,
enable/1,enable/2,findWindow/2,fit/1,fitInside/1,freeze/1,getAcceleratorTable/1,
getBackgroundColour/1,getBackgroundStyle/1,getBestSize/1,getCaret/1,
@@ -48,24 +48,25 @@
getScrollThumb/2,getSize/1,getSizer/1,getTextExtent/2,getTextExtent/3,
getToolTip/1,getUpdateRegion/1,getVirtualSize/1,getWindowStyleFlag/1,
getWindowVariant/1,hasCapture/1,hasScrollbar/2,hasTransparentBackground/1,
- hide/1,inheritAttributes/1,initDialog/1,invalidateBestSize/1,isEnabled/1,
- isExposed/2,isExposed/3,isExposed/5,isRetained/1,isShown/1,isTopLevel/1,
- layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,move/2,
- move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,navigate/1,
- navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,popEventHandler/2,
- popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,refresh/2,refreshRect/2,
- refreshRect/3,releaseMouse/1,removeChild/2,reparent/2,screenToClient/1,
- screenToClient/2,scrollLines/2,scrollPages/2,scrollWindow/3,scrollWindow/4,
- setAcceleratorTable/2,setAutoLayout/2,setBackgroundColour/2,setBackgroundStyle/2,
- setCaret/2,setClientSize/2,setClientSize/3,setContainingSizer/2,setCursor/2,
+ hide/1,inheritAttributes/1,initDialog/1,invalidateBestSize/1,isDoubleBuffered/1,
+ isEnabled/1,isExposed/2,isExposed/3,isExposed/5,isRetained/1,isShown/1,
+ isTopLevel/1,layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,
+ move/2,move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,
+ navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,
+ popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,
+ refresh/2,refreshRect/2,refreshRect/3,releaseMouse/1,removeChild/2,
+ reparent/2,screenToClient/1,screenToClient/2,scrollLines/2,scrollPages/2,
+ scrollWindow/3,scrollWindow/4,setAcceleratorTable/2,setAutoLayout/2,
+ setBackgroundColour/2,setBackgroundStyle/2,setCaret/2,setClientSize/2,
+ setClientSize/3,setContainingSizer/2,setCursor/2,setDoubleBuffered/2,
setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,setFont/2,
setForegroundColour/2,setHelpText/2,setId/2,setMaxSize/2,setMinSize/2,
setName/2,setOwnBackgroundColour/2,setOwnFont/2,setOwnForegroundColour/2,
setPalette/2,setScrollPos/3,setScrollPos/4,setScrollbar/5,setScrollbar/6,
setSize/2,setSize/3,setSize/5,setSize/6,setSizeHints/2,setSizeHints/3,
setSizeHints/4,setSizer/2,setSizer/3,setSizerAndFit/2,setSizerAndFit/3,
- setThemeEnabled/2,setToolTip/2,setVirtualSize/2,setVirtualSize/3,
- setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
+ setThemeEnabled/2,setToolTip/2,setTransparent/2,setVirtualSize/2,
+ setVirtualSize/3,setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
setWindowStyle/2,setWindowStyleFlag/2,setWindowVariant/2,shouldInheritColours/1,
show/1,show/2,thaw/1,transferDataFromWindow/1,transferDataToWindow/1,
update/1,updateWindowUI/1,updateWindowUI/2,validate/1,warpPointer/3]).
@@ -173,6 +174,14 @@ destroy(Obj=#wx_ref{type=Type}) ->
%% From wxControl
%% From wxWindow
%% @hidden
+setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On).
+%% @hidden
+isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This).
+%% @hidden
+canSetTransparent(This) -> wxWindow:canSetTransparent(This).
+%% @hidden
+setTransparent(This,Alpha) -> wxWindow:setTransparent(This,Alpha).
+%% @hidden
warpPointer(This,X,Y) -> wxWindow:warpPointer(This,X,Y).
%% @hidden
validate(This) -> wxWindow:validate(This).
diff --git a/lib/wx/src/gen/wxStatusBar.erl b/lib/wx/src/gen/wxStatusBar.erl
index 254b9b0236..2cd0d4a43e 100644
--- a/lib/wx/src/gen/wxStatusBar.erl
+++ b/lib/wx/src/gen/wxStatusBar.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.
@@ -35,10 +35,10 @@
setStatusStyles/2,setStatusText/2,setStatusText/3,setStatusWidths/2]).
%% inherited exports
--export([cacheBestSize/2,captureMouse/1,center/1,center/2,centerOnParent/1,
- centerOnParent/2,centre/1,centre/2,centreOnParent/1,centreOnParent/2,
- clearBackground/1,clientToScreen/2,clientToScreen/3,close/1,close/2,
- connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
+-export([cacheBestSize/2,canSetTransparent/1,captureMouse/1,center/1,center/2,
+ centerOnParent/1,centerOnParent/2,centre/1,centre/2,centreOnParent/1,
+ centreOnParent/2,clearBackground/1,clientToScreen/2,clientToScreen/3,
+ close/1,close/2,connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
destroyChildren/1,disable/1,disconnect/1,disconnect/2,disconnect/3,
enable/1,enable/2,findWindow/2,fit/1,fitInside/1,freeze/1,getAcceleratorTable/1,
getBackgroundColour/1,getBackgroundStyle/1,getBestSize/1,getCaret/1,
@@ -50,24 +50,25 @@
getScrollRange/2,getScrollThumb/2,getSize/1,getSizer/1,getTextExtent/2,
getTextExtent/3,getToolTip/1,getUpdateRegion/1,getVirtualSize/1,getWindowStyleFlag/1,
getWindowVariant/1,hasCapture/1,hasScrollbar/2,hasTransparentBackground/1,
- hide/1,inheritAttributes/1,initDialog/1,invalidateBestSize/1,isEnabled/1,
- isExposed/2,isExposed/3,isExposed/5,isRetained/1,isShown/1,isTopLevel/1,
- layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,move/2,
- move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,navigate/1,
- navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,popEventHandler/2,
- popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,refresh/2,refreshRect/2,
- refreshRect/3,releaseMouse/1,removeChild/2,reparent/2,screenToClient/1,
- screenToClient/2,scrollLines/2,scrollPages/2,scrollWindow/3,scrollWindow/4,
- setAcceleratorTable/2,setAutoLayout/2,setBackgroundColour/2,setBackgroundStyle/2,
- setCaret/2,setClientSize/2,setClientSize/3,setContainingSizer/2,setCursor/2,
+ hide/1,inheritAttributes/1,initDialog/1,invalidateBestSize/1,isDoubleBuffered/1,
+ isEnabled/1,isExposed/2,isExposed/3,isExposed/5,isRetained/1,isShown/1,
+ isTopLevel/1,layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,
+ move/2,move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,
+ navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,
+ popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,
+ refresh/2,refreshRect/2,refreshRect/3,releaseMouse/1,removeChild/2,
+ reparent/2,screenToClient/1,screenToClient/2,scrollLines/2,scrollPages/2,
+ scrollWindow/3,scrollWindow/4,setAcceleratorTable/2,setAutoLayout/2,
+ setBackgroundColour/2,setBackgroundStyle/2,setCaret/2,setClientSize/2,
+ setClientSize/3,setContainingSizer/2,setCursor/2,setDoubleBuffered/2,
setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,setFont/2,
setForegroundColour/2,setHelpText/2,setId/2,setLabel/2,setMaxSize/2,
setMinSize/2,setName/2,setOwnBackgroundColour/2,setOwnFont/2,setOwnForegroundColour/2,
setPalette/2,setScrollPos/3,setScrollPos/4,setScrollbar/5,setScrollbar/6,
setSize/2,setSize/3,setSize/5,setSize/6,setSizeHints/2,setSizeHints/3,
setSizeHints/4,setSizer/2,setSizer/3,setSizerAndFit/2,setSizerAndFit/3,
- setThemeEnabled/2,setToolTip/2,setVirtualSize/2,setVirtualSize/3,
- setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
+ setThemeEnabled/2,setToolTip/2,setTransparent/2,setVirtualSize/2,
+ setVirtualSize/3,setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
setWindowStyle/2,setWindowStyleFlag/2,setWindowVariant/2,shouldInheritColours/1,
show/1,show/2,thaw/1,transferDataFromWindow/1,transferDataToWindow/1,
update/1,updateWindowUI/1,updateWindowUI/2,validate/1,warpPointer/3]).
@@ -295,6 +296,14 @@ destroy(Obj=#wx_ref{type=Type}) ->
ok.
%% From wxWindow
%% @hidden
+setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On).
+%% @hidden
+isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This).
+%% @hidden
+canSetTransparent(This) -> wxWindow:canSetTransparent(This).
+%% @hidden
+setTransparent(This,Alpha) -> wxWindow:setTransparent(This,Alpha).
+%% @hidden
warpPointer(This,X,Y) -> wxWindow:warpPointer(This,X,Y).
%% @hidden
validate(This) -> wxWindow:validate(This).
diff --git a/lib/wx/src/gen/wxStdDialogButtonSizer.erl b/lib/wx/src/gen/wxStdDialogButtonSizer.erl
index 2843eaf98b..97beee6f14 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.
diff --git a/lib/wx/src/gen/wxStyledTextCtrl.erl b/lib/wx/src/gen/wxStyledTextCtrl.erl
index 4598cc7609..8e629db9ff 100644
--- a/lib/wx/src/gen/wxStyledTextCtrl.erl
+++ b/lib/wx/src/gen/wxStyledTextCtrl.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.
@@ -135,10 +135,10 @@
wordRightExtend/1,wordStartPosition/3,wrapCount/2,zoomIn/1,zoomOut/1]).
%% inherited exports
--export([cacheBestSize/2,captureMouse/1,center/1,center/2,centerOnParent/1,
- centerOnParent/2,centre/1,centre/2,centreOnParent/1,centreOnParent/2,
- clearBackground/1,clientToScreen/2,clientToScreen/3,close/1,close/2,
- connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
+-export([cacheBestSize/2,canSetTransparent/1,captureMouse/1,center/1,center/2,
+ centerOnParent/1,centerOnParent/2,centre/1,centre/2,centreOnParent/1,
+ centreOnParent/2,clearBackground/1,clientToScreen/2,clientToScreen/3,
+ close/1,close/2,connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
destroyChildren/1,disable/1,disconnect/1,disconnect/2,disconnect/3,
enable/1,enable/2,findWindow/2,fit/1,fitInside/1,freeze/1,getAcceleratorTable/1,
getBackgroundColour/1,getBackgroundStyle/1,getBestSize/1,getCaret/1,
@@ -150,27 +150,27 @@
getScrollRange/2,getScrollThumb/2,getSize/1,getSizer/1,getTextExtent/2,
getTextExtent/3,getToolTip/1,getUpdateRegion/1,getVirtualSize/1,getWindowStyleFlag/1,
getWindowVariant/1,hasCapture/1,hasScrollbar/2,hasTransparentBackground/1,
- hide/1,inheritAttributes/1,initDialog/1,invalidateBestSize/1,isEnabled/1,
- isExposed/2,isExposed/3,isExposed/5,isRetained/1,isShown/1,isTopLevel/1,
- layout/1,lower/1,makeModal/1,makeModal/2,move/2,move/3,move/4,moveAfterInTabOrder/2,
- moveBeforeInTabOrder/2,navigate/1,navigate/2,parent_class/1,popEventHandler/1,
- popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,
- refresh/2,refreshRect/2,refreshRect/3,releaseMouse/1,removeChild/2,
- reparent/2,screenToClient/1,screenToClient/2,scrollLines/2,scrollPages/2,
- scrollWindow/3,scrollWindow/4,setAcceleratorTable/2,setAutoLayout/2,
- setBackgroundColour/2,setBackgroundStyle/2,setCaret/2,setClientSize/2,
- setClientSize/3,setContainingSizer/2,setCursor/2,setDropTarget/2,
- setExtraStyle/2,setFocus/1,setFocusFromKbd/1,setFont/2,setForegroundColour/2,
- setHelpText/2,setId/2,setLabel/2,setMaxSize/2,setMinSize/2,setName/2,
- setOwnBackgroundColour/2,setOwnFont/2,setOwnForegroundColour/2,setPalette/2,
- setScrollPos/3,setScrollPos/4,setScrollbar/5,setScrollbar/6,setSize/2,
- setSize/3,setSize/5,setSize/6,setSizeHints/2,setSizeHints/3,setSizeHints/4,
- setSizer/2,setSizer/3,setSizerAndFit/2,setSizerAndFit/3,setThemeEnabled/2,
- setToolTip/2,setVirtualSize/2,setVirtualSize/3,setVirtualSizeHints/2,
- setVirtualSizeHints/3,setVirtualSizeHints/4,setWindowStyle/2,setWindowStyleFlag/2,
- setWindowVariant/2,shouldInheritColours/1,show/1,show/2,thaw/1,transferDataFromWindow/1,
- transferDataToWindow/1,update/1,updateWindowUI/1,updateWindowUI/2,
- validate/1,warpPointer/3]).
+ hide/1,inheritAttributes/1,initDialog/1,invalidateBestSize/1,isDoubleBuffered/1,
+ isEnabled/1,isExposed/2,isExposed/3,isExposed/5,isRetained/1,isShown/1,
+ isTopLevel/1,layout/1,lower/1,makeModal/1,makeModal/2,move/2,move/3,
+ move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,navigate/1,navigate/2,
+ parent_class/1,popEventHandler/1,popEventHandler/2,popupMenu/2,popupMenu/3,
+ popupMenu/4,raise/1,refresh/1,refresh/2,refreshRect/2,refreshRect/3,
+ releaseMouse/1,removeChild/2,reparent/2,screenToClient/1,screenToClient/2,
+ scrollLines/2,scrollPages/2,scrollWindow/3,scrollWindow/4,setAcceleratorTable/2,
+ setAutoLayout/2,setBackgroundColour/2,setBackgroundStyle/2,setCaret/2,
+ setClientSize/2,setClientSize/3,setContainingSizer/2,setCursor/2,
+ setDoubleBuffered/2,setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,
+ setFont/2,setForegroundColour/2,setHelpText/2,setId/2,setLabel/2,setMaxSize/2,
+ setMinSize/2,setName/2,setOwnBackgroundColour/2,setOwnFont/2,setOwnForegroundColour/2,
+ setPalette/2,setScrollPos/3,setScrollPos/4,setScrollbar/5,setScrollbar/6,
+ setSize/2,setSize/3,setSize/5,setSize/6,setSizeHints/2,setSizeHints/3,
+ setSizeHints/4,setSizer/2,setSizer/3,setSizerAndFit/2,setSizerAndFit/3,
+ setThemeEnabled/2,setToolTip/2,setTransparent/2,setVirtualSize/2,
+ setVirtualSize/3,setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
+ setWindowStyle/2,setWindowStyleFlag/2,setWindowVariant/2,shouldInheritColours/1,
+ show/1,show/2,thaw/1,transferDataFromWindow/1,transferDataToWindow/1,
+ update/1,updateWindowUI/1,updateWindowUI/2,validate/1,warpPointer/3]).
-export_type([wxStyledTextCtrl/0]).
%% @hidden
@@ -4078,6 +4078,14 @@ setLabel(This,Label) -> wxControl:setLabel(This,Label).
getLabel(This) -> wxControl:getLabel(This).
%% From wxWindow
%% @hidden
+setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On).
+%% @hidden
+isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This).
+%% @hidden
+canSetTransparent(This) -> wxWindow:canSetTransparent(This).
+%% @hidden
+setTransparent(This,Alpha) -> wxWindow:setTransparent(This,Alpha).
+%% @hidden
warpPointer(This,X,Y) -> wxWindow:warpPointer(This,X,Y).
%% @hidden
validate(This) -> wxWindow:validate(This).
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..9db137b6a1 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.
diff --git a/lib/wx/src/gen/wxSystemSettings.erl b/lib/wx/src/gen/wxSystemSettings.erl
index 57fcf455dc..234b2414c0 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.
diff --git a/lib/wx/src/gen/wxTaskBarIcon.erl b/lib/wx/src/gen/wxTaskBarIcon.erl
index aab41f4645..0f336c6e4c 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.
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..bcc2abf73e 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.
diff --git a/lib/wx/src/gen/wxTextCtrl.erl b/lib/wx/src/gen/wxTextCtrl.erl
index de9e1c307a..5840812579 100644
--- a/lib/wx/src/gen/wxTextCtrl.erl
+++ b/lib/wx/src/gen/wxTextCtrl.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.
@@ -41,10 +41,10 @@
setStyle/4,setValue/2,showPosition/2,undo/1,writeText/2,xYToPosition/3]).
%% inherited exports
--export([cacheBestSize/2,captureMouse/1,center/1,center/2,centerOnParent/1,
- centerOnParent/2,centre/1,centre/2,centreOnParent/1,centreOnParent/2,
- clearBackground/1,clientToScreen/2,clientToScreen/3,close/1,close/2,
- connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
+-export([cacheBestSize/2,canSetTransparent/1,captureMouse/1,center/1,center/2,
+ centerOnParent/1,centerOnParent/2,centre/1,centre/2,centreOnParent/1,
+ centreOnParent/2,clearBackground/1,clientToScreen/2,clientToScreen/3,
+ close/1,close/2,connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
destroyChildren/1,disable/1,disconnect/1,disconnect/2,disconnect/3,
enable/1,enable/2,findWindow/2,fit/1,fitInside/1,freeze/1,getAcceleratorTable/1,
getBackgroundColour/1,getBackgroundStyle/1,getBestSize/1,getCaret/1,
@@ -56,24 +56,25 @@
getScrollRange/2,getScrollThumb/2,getSize/1,getSizer/1,getTextExtent/2,
getTextExtent/3,getToolTip/1,getUpdateRegion/1,getVirtualSize/1,getWindowStyleFlag/1,
getWindowVariant/1,hasCapture/1,hasScrollbar/2,hasTransparentBackground/1,
- hide/1,inheritAttributes/1,initDialog/1,invalidateBestSize/1,isEnabled/1,
- isExposed/2,isExposed/3,isExposed/5,isRetained/1,isShown/1,isTopLevel/1,
- layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,move/2,
- move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,navigate/1,
- navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,popEventHandler/2,
- popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,refresh/2,refreshRect/2,
- refreshRect/3,releaseMouse/1,removeChild/2,reparent/2,screenToClient/1,
- screenToClient/2,scrollLines/2,scrollPages/2,scrollWindow/3,scrollWindow/4,
- setAcceleratorTable/2,setAutoLayout/2,setBackgroundColour/2,setBackgroundStyle/2,
- setCaret/2,setClientSize/2,setClientSize/3,setContainingSizer/2,setCursor/2,
+ hide/1,inheritAttributes/1,initDialog/1,invalidateBestSize/1,isDoubleBuffered/1,
+ isEnabled/1,isExposed/2,isExposed/3,isExposed/5,isRetained/1,isShown/1,
+ isTopLevel/1,layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,
+ move/2,move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,
+ navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,
+ popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,
+ refresh/2,refreshRect/2,refreshRect/3,releaseMouse/1,removeChild/2,
+ reparent/2,screenToClient/1,screenToClient/2,scrollLines/2,scrollPages/2,
+ scrollWindow/3,scrollWindow/4,setAcceleratorTable/2,setAutoLayout/2,
+ setBackgroundColour/2,setBackgroundStyle/2,setCaret/2,setClientSize/2,
+ setClientSize/3,setContainingSizer/2,setCursor/2,setDoubleBuffered/2,
setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,setFont/2,
setForegroundColour/2,setHelpText/2,setId/2,setLabel/2,setMaxSize/2,
setMinSize/2,setName/2,setOwnBackgroundColour/2,setOwnFont/2,setOwnForegroundColour/2,
setPalette/2,setScrollPos/3,setScrollPos/4,setScrollbar/5,setScrollbar/6,
setSize/2,setSize/3,setSize/5,setSize/6,setSizeHints/2,setSizeHints/3,
setSizeHints/4,setSizer/2,setSizer/3,setSizerAndFit/2,setSizerAndFit/3,
- setThemeEnabled/2,setToolTip/2,setVirtualSize/2,setVirtualSize/3,
- setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
+ setThemeEnabled/2,setToolTip/2,setTransparent/2,setVirtualSize/2,
+ setVirtualSize/3,setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
setWindowStyle/2,setWindowStyleFlag/2,setWindowVariant/2,shouldInheritColours/1,
show/1,show/2,thaw/1,transferDataFromWindow/1,transferDataToWindow/1,
update/1,updateWindowUI/1,updateWindowUI/2,validate/1,warpPointer/3]).
@@ -597,6 +598,14 @@ setLabel(This,Label) -> wxControl:setLabel(This,Label).
getLabel(This) -> wxControl:getLabel(This).
%% From wxWindow
%% @hidden
+setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On).
+%% @hidden
+isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This).
+%% @hidden
+canSetTransparent(This) -> wxWindow:canSetTransparent(This).
+%% @hidden
+setTransparent(This,Alpha) -> wxWindow:setTransparent(This,Alpha).
+%% @hidden
warpPointer(This,X,Y) -> wxWindow:warpPointer(This,X,Y).
%% @hidden
validate(This) -> wxWindow:validate(This).
diff --git a/lib/wx/src/gen/wxTextDataObject.erl b/lib/wx/src/gen/wxTextDataObject.erl
index 89e51b24cb..a1893eed1c 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.
diff --git a/lib/wx/src/gen/wxTextEntryDialog.erl b/lib/wx/src/gen/wxTextEntryDialog.erl
index b18ba27607..a93c3857a8 100644
--- a/lib/wx/src/gen/wxTextEntryDialog.erl
+++ b/lib/wx/src/gen/wxTextEntryDialog.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.
@@ -34,11 +34,11 @@
-export([destroy/1,getValue/1,new/2,new/3,setValue/2]).
%% inherited exports
--export([cacheBestSize/2,captureMouse/1,center/1,center/2,centerOnParent/1,
- centerOnParent/2,centerOnScreen/1,centerOnScreen/2,centre/1,centre/2,
- centreOnParent/1,centreOnParent/2,centreOnScreen/1,centreOnScreen/2,
- clearBackground/1,clientToScreen/2,clientToScreen/3,close/1,close/2,
- connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
+-export([cacheBestSize/2,canSetTransparent/1,captureMouse/1,center/1,center/2,
+ centerOnParent/1,centerOnParent/2,centerOnScreen/1,centerOnScreen/2,
+ centre/1,centre/2,centreOnParent/1,centreOnParent/2,centreOnScreen/1,
+ centreOnScreen/2,clearBackground/1,clientToScreen/2,clientToScreen/3,
+ close/1,close/2,connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
createButtonSizer/2,createStdDialogButtonSizer/2,destroyChildren/1,
disable/1,disconnect/1,disconnect/2,disconnect/3,enable/1,enable/2,
endModal/2,findWindow/2,fit/1,fitInside/1,freeze/1,getAcceleratorTable/1,
@@ -53,25 +53,26 @@
getTitle/1,getToolTip/1,getUpdateRegion/1,getVirtualSize/1,getWindowStyleFlag/1,
getWindowVariant/1,hasCapture/1,hasScrollbar/2,hasTransparentBackground/1,
hide/1,iconize/1,iconize/2,inheritAttributes/1,initDialog/1,invalidateBestSize/1,
- isActive/1,isEnabled/1,isExposed/2,isExposed/3,isExposed/5,isFullScreen/1,
- isIconized/1,isMaximized/1,isModal/1,isRetained/1,isShown/1,isTopLevel/1,
- layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,maximize/1,
- maximize/2,move/2,move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,
- navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,
- popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,
- refresh/2,refreshRect/2,refreshRect/3,releaseMouse/1,removeChild/2,
- reparent/2,requestUserAttention/1,requestUserAttention/2,screenToClient/1,
- screenToClient/2,scrollLines/2,scrollPages/2,scrollWindow/3,scrollWindow/4,
- setAcceleratorTable/2,setAffirmativeId/2,setAutoLayout/2,setBackgroundColour/2,
- setBackgroundStyle/2,setCaret/2,setClientSize/2,setClientSize/3,setContainingSizer/2,
- setCursor/2,setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,
- setFont/2,setForegroundColour/2,setHelpText/2,setIcon/2,setIcons/2,
- setId/2,setLabel/2,setMaxSize/2,setMinSize/2,setName/2,setOwnBackgroundColour/2,
- setOwnFont/2,setOwnForegroundColour/2,setPalette/2,setReturnCode/2,
- setScrollPos/3,setScrollPos/4,setScrollbar/5,setScrollbar/6,setShape/2,
- setSize/2,setSize/3,setSize/5,setSize/6,setSizeHints/2,setSizeHints/3,
- setSizeHints/4,setSizer/2,setSizer/3,setSizerAndFit/2,setSizerAndFit/3,
- setThemeEnabled/2,setTitle/2,setToolTip/2,setVirtualSize/2,setVirtualSize/3,
+ isActive/1,isDoubleBuffered/1,isEnabled/1,isExposed/2,isExposed/3,
+ isExposed/5,isFullScreen/1,isIconized/1,isMaximized/1,isModal/1,isRetained/1,
+ isShown/1,isTopLevel/1,layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,
+ makeModal/2,maximize/1,maximize/2,move/2,move/3,move/4,moveAfterInTabOrder/2,
+ moveBeforeInTabOrder/2,navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1,
+ popEventHandler/1,popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4,
+ raise/1,refresh/1,refresh/2,refreshRect/2,refreshRect/3,releaseMouse/1,
+ removeChild/2,reparent/2,requestUserAttention/1,requestUserAttention/2,
+ screenToClient/1,screenToClient/2,scrollLines/2,scrollPages/2,scrollWindow/3,
+ scrollWindow/4,setAcceleratorTable/2,setAffirmativeId/2,setAutoLayout/2,
+ setBackgroundColour/2,setBackgroundStyle/2,setCaret/2,setClientSize/2,
+ setClientSize/3,setContainingSizer/2,setCursor/2,setDoubleBuffered/2,
+ setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,setFont/2,
+ setForegroundColour/2,setHelpText/2,setIcon/2,setIcons/2,setId/2,setLabel/2,
+ setMaxSize/2,setMinSize/2,setName/2,setOwnBackgroundColour/2,setOwnFont/2,
+ setOwnForegroundColour/2,setPalette/2,setReturnCode/2,setScrollPos/3,
+ setScrollPos/4,setScrollbar/5,setScrollbar/6,setShape/2,setSize/2,
+ setSize/3,setSize/5,setSize/6,setSizeHints/2,setSizeHints/3,setSizeHints/4,
+ setSizer/2,setSizer/3,setSizerAndFit/2,setSizerAndFit/3,setThemeEnabled/2,
+ setTitle/2,setToolTip/2,setTransparent/2,setVirtualSize/2,setVirtualSize/3,
setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
setWindowStyle/2,setWindowStyleFlag/2,setWindowVariant/2,shouldInheritColours/1,
show/1,show/2,showFullScreen/2,showFullScreen/3,showModal/1,thaw/1,
@@ -211,6 +212,14 @@ getIcons(This) -> wxTopLevelWindow:getIcons(This).
getIcon(This) -> wxTopLevelWindow:getIcon(This).
%% From wxWindow
%% @hidden
+setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On).
+%% @hidden
+isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This).
+%% @hidden
+canSetTransparent(This) -> wxWindow:canSetTransparent(This).
+%% @hidden
+setTransparent(This,Alpha) -> wxWindow:setTransparent(This,Alpha).
+%% @hidden
warpPointer(This,X,Y) -> wxWindow:warpPointer(This,X,Y).
%% @hidden
validate(This) -> wxWindow:validate(This).
diff --git a/lib/wx/src/gen/wxToggleButton.erl b/lib/wx/src/gen/wxToggleButton.erl
index 45795318c6..dffb4b159d 100644
--- a/lib/wx/src/gen/wxToggleButton.erl
+++ b/lib/wx/src/gen/wxToggleButton.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.
@@ -33,10 +33,10 @@
-export([create/4,create/5,destroy/1,getValue/1,new/0,new/3,new/4,setValue/2]).
%% inherited exports
--export([cacheBestSize/2,captureMouse/1,center/1,center/2,centerOnParent/1,
- centerOnParent/2,centre/1,centre/2,centreOnParent/1,centreOnParent/2,
- clearBackground/1,clientToScreen/2,clientToScreen/3,close/1,close/2,
- connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
+-export([cacheBestSize/2,canSetTransparent/1,captureMouse/1,center/1,center/2,
+ centerOnParent/1,centerOnParent/2,centre/1,centre/2,centreOnParent/1,
+ centreOnParent/2,clearBackground/1,clientToScreen/2,clientToScreen/3,
+ close/1,close/2,connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
destroyChildren/1,disable/1,disconnect/1,disconnect/2,disconnect/3,
enable/1,enable/2,findWindow/2,fit/1,fitInside/1,freeze/1,getAcceleratorTable/1,
getBackgroundColour/1,getBackgroundStyle/1,getBestSize/1,getCaret/1,
@@ -48,24 +48,25 @@
getScrollRange/2,getScrollThumb/2,getSize/1,getSizer/1,getTextExtent/2,
getTextExtent/3,getToolTip/1,getUpdateRegion/1,getVirtualSize/1,getWindowStyleFlag/1,
getWindowVariant/1,hasCapture/1,hasScrollbar/2,hasTransparentBackground/1,
- hide/1,inheritAttributes/1,initDialog/1,invalidateBestSize/1,isEnabled/1,
- isExposed/2,isExposed/3,isExposed/5,isRetained/1,isShown/1,isTopLevel/1,
- layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,move/2,
- move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,navigate/1,
- navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,popEventHandler/2,
- popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,refresh/2,refreshRect/2,
- refreshRect/3,releaseMouse/1,removeChild/2,reparent/2,screenToClient/1,
- screenToClient/2,scrollLines/2,scrollPages/2,scrollWindow/3,scrollWindow/4,
- setAcceleratorTable/2,setAutoLayout/2,setBackgroundColour/2,setBackgroundStyle/2,
- setCaret/2,setClientSize/2,setClientSize/3,setContainingSizer/2,setCursor/2,
+ hide/1,inheritAttributes/1,initDialog/1,invalidateBestSize/1,isDoubleBuffered/1,
+ isEnabled/1,isExposed/2,isExposed/3,isExposed/5,isRetained/1,isShown/1,
+ isTopLevel/1,layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,
+ move/2,move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,
+ navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,
+ popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,
+ refresh/2,refreshRect/2,refreshRect/3,releaseMouse/1,removeChild/2,
+ reparent/2,screenToClient/1,screenToClient/2,scrollLines/2,scrollPages/2,
+ scrollWindow/3,scrollWindow/4,setAcceleratorTable/2,setAutoLayout/2,
+ setBackgroundColour/2,setBackgroundStyle/2,setCaret/2,setClientSize/2,
+ setClientSize/3,setContainingSizer/2,setCursor/2,setDoubleBuffered/2,
setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,setFont/2,
setForegroundColour/2,setHelpText/2,setId/2,setLabel/2,setMaxSize/2,
setMinSize/2,setName/2,setOwnBackgroundColour/2,setOwnFont/2,setOwnForegroundColour/2,
setPalette/2,setScrollPos/3,setScrollPos/4,setScrollbar/5,setScrollbar/6,
setSize/2,setSize/3,setSize/5,setSize/6,setSizeHints/2,setSizeHints/3,
setSizeHints/4,setSizer/2,setSizer/3,setSizerAndFit/2,setSizerAndFit/3,
- setThemeEnabled/2,setToolTip/2,setVirtualSize/2,setVirtualSize/3,
- setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
+ setThemeEnabled/2,setToolTip/2,setTransparent/2,setVirtualSize/2,
+ setVirtualSize/3,setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
setWindowStyle/2,setWindowStyleFlag/2,setWindowVariant/2,shouldInheritColours/1,
show/1,show/2,thaw/1,transferDataFromWindow/1,transferDataToWindow/1,
update/1,updateWindowUI/1,updateWindowUI/2,validate/1,warpPointer/3]).
@@ -171,6 +172,14 @@ setLabel(This,Label) -> wxControl:setLabel(This,Label).
getLabel(This) -> wxControl:getLabel(This).
%% From wxWindow
%% @hidden
+setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On).
+%% @hidden
+isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This).
+%% @hidden
+canSetTransparent(This) -> wxWindow:canSetTransparent(This).
+%% @hidden
+setTransparent(This,Alpha) -> wxWindow:setTransparent(This,Alpha).
+%% @hidden
warpPointer(This,X,Y) -> wxWindow:warpPointer(This,X,Y).
%% @hidden
validate(This) -> wxWindow:validate(This).
diff --git a/lib/wx/src/gen/wxToolBar.erl b/lib/wx/src/gen/wxToolBar.erl
index bee20b97f4..b3cce2b6e9 100644
--- a/lib/wx/src/gen/wxToolBar.erl
+++ b/lib/wx/src/gen/wxToolBar.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,10 +42,10 @@
setToolShortHelp/3,toggleTool/3]).
%% inherited exports
--export([cacheBestSize/2,captureMouse/1,center/1,center/2,centerOnParent/1,
- centerOnParent/2,centre/1,centre/2,centreOnParent/1,centreOnParent/2,
- clearBackground/1,clientToScreen/2,clientToScreen/3,close/1,close/2,
- connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
+-export([cacheBestSize/2,canSetTransparent/1,captureMouse/1,center/1,center/2,
+ centerOnParent/1,centerOnParent/2,centre/1,centre/2,centreOnParent/1,
+ centreOnParent/2,clearBackground/1,clientToScreen/2,clientToScreen/3,
+ close/1,close/2,connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
destroyChildren/1,disable/1,disconnect/1,disconnect/2,disconnect/3,
enable/1,enable/2,findWindow/2,fit/1,fitInside/1,freeze/1,getAcceleratorTable/1,
getBackgroundColour/1,getBackgroundStyle/1,getBestSize/1,getCaret/1,
@@ -57,24 +57,25 @@
getScrollRange/2,getScrollThumb/2,getSize/1,getSizer/1,getTextExtent/2,
getTextExtent/3,getToolTip/1,getUpdateRegion/1,getVirtualSize/1,getWindowStyleFlag/1,
getWindowVariant/1,hasCapture/1,hasScrollbar/2,hasTransparentBackground/1,
- hide/1,inheritAttributes/1,initDialog/1,invalidateBestSize/1,isEnabled/1,
- isExposed/2,isExposed/3,isExposed/5,isRetained/1,isShown/1,isTopLevel/1,
- layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,move/2,
- move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,navigate/1,
- navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,popEventHandler/2,
- popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,refresh/2,refreshRect/2,
- refreshRect/3,releaseMouse/1,removeChild/2,reparent/2,screenToClient/1,
- screenToClient/2,scrollLines/2,scrollPages/2,scrollWindow/3,scrollWindow/4,
- setAcceleratorTable/2,setAutoLayout/2,setBackgroundColour/2,setBackgroundStyle/2,
- setCaret/2,setClientSize/2,setClientSize/3,setContainingSizer/2,setCursor/2,
+ hide/1,inheritAttributes/1,initDialog/1,invalidateBestSize/1,isDoubleBuffered/1,
+ isEnabled/1,isExposed/2,isExposed/3,isExposed/5,isRetained/1,isShown/1,
+ isTopLevel/1,layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,
+ move/2,move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,
+ navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,
+ popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,
+ refresh/2,refreshRect/2,refreshRect/3,releaseMouse/1,removeChild/2,
+ reparent/2,screenToClient/1,screenToClient/2,scrollLines/2,scrollPages/2,
+ scrollWindow/3,scrollWindow/4,setAcceleratorTable/2,setAutoLayout/2,
+ setBackgroundColour/2,setBackgroundStyle/2,setCaret/2,setClientSize/2,
+ setClientSize/3,setContainingSizer/2,setCursor/2,setDoubleBuffered/2,
setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,setFont/2,
setForegroundColour/2,setHelpText/2,setId/2,setLabel/2,setMaxSize/2,
setMinSize/2,setName/2,setOwnBackgroundColour/2,setOwnFont/2,setOwnForegroundColour/2,
setPalette/2,setScrollPos/3,setScrollPos/4,setScrollbar/5,setScrollbar/6,
setSize/2,setSize/3,setSize/5,setSize/6,setSizeHints/2,setSizeHints/3,
setSizeHints/4,setSizer/2,setSizer/3,setSizerAndFit/2,setSizerAndFit/3,
- setThemeEnabled/2,setToolTip/2,setVirtualSize/2,setVirtualSize/3,
- setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
+ setThemeEnabled/2,setToolTip/2,setTransparent/2,setVirtualSize/2,
+ setVirtualSize/3,setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
setWindowStyle/2,setWindowStyleFlag/2,setWindowVariant/2,shouldInheritColours/1,
show/1,show/2,thaw/1,transferDataFromWindow/1,transferDataToWindow/1,
update/1,updateWindowUI/1,updateWindowUI/2,validate/1,warpPointer/3]).
@@ -673,6 +674,14 @@ setLabel(This,Label) -> wxControl:setLabel(This,Label).
getLabel(This) -> wxControl:getLabel(This).
%% From wxWindow
%% @hidden
+setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On).
+%% @hidden
+isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This).
+%% @hidden
+canSetTransparent(This) -> wxWindow:canSetTransparent(This).
+%% @hidden
+setTransparent(This,Alpha) -> wxWindow:setTransparent(This,Alpha).
+%% @hidden
warpPointer(This,X,Y) -> wxWindow:warpPointer(This,X,Y).
%% @hidden
validate(This) -> wxWindow:validate(This).
diff --git a/lib/wx/src/gen/wxToolTip.erl b/lib/wx/src/gen/wxToolTip.erl
index b462dac72a..78831de8c5 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.
diff --git a/lib/wx/src/gen/wxToolbook.erl b/lib/wx/src/gen/wxToolbook.erl
index f959a73004..cf77aefd8a 100644
--- a/lib/wx/src/gen/wxToolbook.erl
+++ b/lib/wx/src/gen/wxToolbook.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.
@@ -38,10 +38,10 @@
setPageSize/2,setPageText/3,setSelection/2]).
%% inherited exports
--export([cacheBestSize/2,captureMouse/1,center/1,center/2,centerOnParent/1,
- centerOnParent/2,centre/1,centre/2,centreOnParent/1,centreOnParent/2,
- clearBackground/1,clientToScreen/2,clientToScreen/3,close/1,close/2,
- connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
+-export([cacheBestSize/2,canSetTransparent/1,captureMouse/1,center/1,center/2,
+ centerOnParent/1,centerOnParent/2,centre/1,centre/2,centreOnParent/1,
+ centreOnParent/2,clearBackground/1,clientToScreen/2,clientToScreen/3,
+ close/1,close/2,connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
destroyChildren/1,disable/1,disconnect/1,disconnect/2,disconnect/3,
enable/1,enable/2,findWindow/2,fit/1,fitInside/1,freeze/1,getAcceleratorTable/1,
getBackgroundColour/1,getBackgroundStyle/1,getBestSize/1,getCaret/1,
@@ -53,24 +53,25 @@
getScrollRange/2,getScrollThumb/2,getSize/1,getSizer/1,getTextExtent/2,
getTextExtent/3,getToolTip/1,getUpdateRegion/1,getVirtualSize/1,getWindowStyleFlag/1,
getWindowVariant/1,hasCapture/1,hasScrollbar/2,hasTransparentBackground/1,
- hide/1,inheritAttributes/1,initDialog/1,invalidateBestSize/1,isEnabled/1,
- isExposed/2,isExposed/3,isExposed/5,isRetained/1,isShown/1,isTopLevel/1,
- layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,move/2,
- move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,navigate/1,
- navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,popEventHandler/2,
- popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,refresh/2,refreshRect/2,
- refreshRect/3,releaseMouse/1,removeChild/2,reparent/2,screenToClient/1,
- screenToClient/2,scrollLines/2,scrollPages/2,scrollWindow/3,scrollWindow/4,
- setAcceleratorTable/2,setAutoLayout/2,setBackgroundColour/2,setBackgroundStyle/2,
- setCaret/2,setClientSize/2,setClientSize/3,setContainingSizer/2,setCursor/2,
+ hide/1,inheritAttributes/1,initDialog/1,invalidateBestSize/1,isDoubleBuffered/1,
+ isEnabled/1,isExposed/2,isExposed/3,isExposed/5,isRetained/1,isShown/1,
+ isTopLevel/1,layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,
+ move/2,move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,
+ navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,
+ popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,
+ refresh/2,refreshRect/2,refreshRect/3,releaseMouse/1,removeChild/2,
+ reparent/2,screenToClient/1,screenToClient/2,scrollLines/2,scrollPages/2,
+ scrollWindow/3,scrollWindow/4,setAcceleratorTable/2,setAutoLayout/2,
+ setBackgroundColour/2,setBackgroundStyle/2,setCaret/2,setClientSize/2,
+ setClientSize/3,setContainingSizer/2,setCursor/2,setDoubleBuffered/2,
setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,setFont/2,
setForegroundColour/2,setHelpText/2,setId/2,setLabel/2,setMaxSize/2,
setMinSize/2,setName/2,setOwnBackgroundColour/2,setOwnFont/2,setOwnForegroundColour/2,
setPalette/2,setScrollPos/3,setScrollPos/4,setScrollbar/5,setScrollbar/6,
setSize/2,setSize/3,setSize/5,setSize/6,setSizeHints/2,setSizeHints/3,
setSizeHints/4,setSizer/2,setSizer/3,setSizerAndFit/2,setSizerAndFit/3,
- setThemeEnabled/2,setToolTip/2,setVirtualSize/2,setVirtualSize/3,
- setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
+ setThemeEnabled/2,setToolTip/2,setTransparent/2,setVirtualSize/2,
+ setVirtualSize/3,setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
setWindowStyle/2,setWindowStyleFlag/2,setWindowVariant/2,shouldInheritColours/1,
show/1,show/2,thaw/1,transferDataFromWindow/1,transferDataToWindow/1,
update/1,updateWindowUI/1,updateWindowUI/2,validate/1,warpPointer/3]).
@@ -383,6 +384,14 @@ setLabel(This,Label) -> wxControl:setLabel(This,Label).
getLabel(This) -> wxControl:getLabel(This).
%% From wxWindow
%% @hidden
+setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On).
+%% @hidden
+isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This).
+%% @hidden
+canSetTransparent(This) -> wxWindow:canSetTransparent(This).
+%% @hidden
+setTransparent(This,Alpha) -> wxWindow:setTransparent(This,Alpha).
+%% @hidden
warpPointer(This,X,Y) -> wxWindow:warpPointer(This,X,Y).
%% @hidden
validate(This) -> wxWindow:validate(This).
diff --git a/lib/wx/src/gen/wxTopLevelWindow.erl b/lib/wx/src/gen/wxTopLevelWindow.erl
index e11a72fab9..72813b0073 100644
--- a/lib/wx/src/gen/wxTopLevelWindow.erl
+++ b/lib/wx/src/gen/wxTopLevelWindow.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,10 +36,10 @@
showFullScreen/2,showFullScreen/3]).
%% inherited exports
--export([cacheBestSize/2,captureMouse/1,center/1,center/2,centerOnParent/1,
- centerOnParent/2,centre/1,centre/2,centreOnParent/1,centreOnParent/2,
- clearBackground/1,clientToScreen/2,clientToScreen/3,close/1,close/2,
- connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
+-export([cacheBestSize/2,canSetTransparent/1,captureMouse/1,center/1,center/2,
+ centerOnParent/1,centerOnParent/2,centre/1,centre/2,centreOnParent/1,
+ centreOnParent/2,clearBackground/1,clientToScreen/2,clientToScreen/3,
+ close/1,close/2,connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
destroyChildren/1,disable/1,disconnect/1,disconnect/2,disconnect/3,
enable/1,enable/2,findWindow/2,fit/1,fitInside/1,freeze/1,getAcceleratorTable/1,
getBackgroundColour/1,getBackgroundStyle/1,getBestSize/1,getCaret/1,
@@ -51,24 +51,25 @@
getScrollRange/2,getScrollThumb/2,getSize/1,getSizer/1,getTextExtent/2,
getTextExtent/3,getToolTip/1,getUpdateRegion/1,getVirtualSize/1,getWindowStyleFlag/1,
getWindowVariant/1,hasCapture/1,hasScrollbar/2,hasTransparentBackground/1,
- hide/1,inheritAttributes/1,initDialog/1,invalidateBestSize/1,isEnabled/1,
- isExposed/2,isExposed/3,isExposed/5,isRetained/1,isShown/1,isTopLevel/1,
- layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,move/2,
- move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,navigate/1,
- navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,popEventHandler/2,
- popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,refresh/2,refreshRect/2,
- refreshRect/3,releaseMouse/1,removeChild/2,reparent/2,screenToClient/1,
- screenToClient/2,scrollLines/2,scrollPages/2,scrollWindow/3,scrollWindow/4,
- setAcceleratorTable/2,setAutoLayout/2,setBackgroundColour/2,setBackgroundStyle/2,
- setCaret/2,setClientSize/2,setClientSize/3,setContainingSizer/2,setCursor/2,
+ hide/1,inheritAttributes/1,initDialog/1,invalidateBestSize/1,isDoubleBuffered/1,
+ isEnabled/1,isExposed/2,isExposed/3,isExposed/5,isRetained/1,isShown/1,
+ isTopLevel/1,layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,
+ move/2,move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,
+ navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,
+ popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,
+ refresh/2,refreshRect/2,refreshRect/3,releaseMouse/1,removeChild/2,
+ reparent/2,screenToClient/1,screenToClient/2,scrollLines/2,scrollPages/2,
+ scrollWindow/3,scrollWindow/4,setAcceleratorTable/2,setAutoLayout/2,
+ setBackgroundColour/2,setBackgroundStyle/2,setCaret/2,setClientSize/2,
+ setClientSize/3,setContainingSizer/2,setCursor/2,setDoubleBuffered/2,
setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,setFont/2,
setForegroundColour/2,setHelpText/2,setId/2,setLabel/2,setMaxSize/2,
setMinSize/2,setName/2,setOwnBackgroundColour/2,setOwnFont/2,setOwnForegroundColour/2,
setPalette/2,setScrollPos/3,setScrollPos/4,setScrollbar/5,setScrollbar/6,
setSize/2,setSize/3,setSize/5,setSize/6,setSizeHints/2,setSizeHints/3,
setSizeHints/4,setSizer/2,setSizer/3,setSizerAndFit/2,setSizerAndFit/3,
- setThemeEnabled/2,setToolTip/2,setVirtualSize/2,setVirtualSize/3,
- setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
+ setThemeEnabled/2,setToolTip/2,setTransparent/2,setVirtualSize/2,
+ setVirtualSize/3,setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
setWindowStyle/2,setWindowStyleFlag/2,setWindowVariant/2,shouldInheritColours/1,
show/1,show/2,thaw/1,transferDataFromWindow/1,transferDataToWindow/1,
update/1,updateWindowUI/1,updateWindowUI/2,validate/1,warpPointer/3]).
@@ -301,6 +302,14 @@ showFullScreen(#wx_ref{type=ThisT,ref=ThisRef},Show, Options)
%% From wxWindow
%% @hidden
+setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On).
+%% @hidden
+isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This).
+%% @hidden
+canSetTransparent(This) -> wxWindow:canSetTransparent(This).
+%% @hidden
+setTransparent(This,Alpha) -> wxWindow:setTransparent(This,Alpha).
+%% @hidden
warpPointer(This,X,Y) -> wxWindow:warpPointer(This,X,Y).
%% @hidden
validate(This) -> wxWindow:validate(This).
diff --git a/lib/wx/src/gen/wxTreeCtrl.erl b/lib/wx/src/gen/wxTreeCtrl.erl
index ef6e2b6fea..43dee9107d 100644
--- a/lib/wx/src/gen/wxTreeCtrl.erl
+++ b/lib/wx/src/gen/wxTreeCtrl.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 @@
unselectItem/2]).
%% inherited exports
--export([cacheBestSize/2,captureMouse/1,center/1,center/2,centerOnParent/1,
- centerOnParent/2,centre/1,centre/2,centreOnParent/1,centreOnParent/2,
- clearBackground/1,clientToScreen/2,clientToScreen/3,close/1,close/2,
- connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
+-export([cacheBestSize/2,canSetTransparent/1,captureMouse/1,center/1,center/2,
+ centerOnParent/1,centerOnParent/2,centre/1,centre/2,centreOnParent/1,
+ centreOnParent/2,clearBackground/1,clientToScreen/2,clientToScreen/3,
+ close/1,close/2,connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
destroyChildren/1,disable/1,disconnect/1,disconnect/2,disconnect/3,
enable/1,enable/2,findWindow/2,fit/1,fitInside/1,freeze/1,getAcceleratorTable/1,
getBackgroundColour/1,getBackgroundStyle/1,getBestSize/1,getCaret/1,
@@ -69,24 +69,25 @@
getScrollRange/2,getScrollThumb/2,getSize/1,getSizer/1,getTextExtent/2,
getTextExtent/3,getToolTip/1,getUpdateRegion/1,getVirtualSize/1,getWindowStyleFlag/1,
getWindowVariant/1,hasCapture/1,hasScrollbar/2,hasTransparentBackground/1,
- hide/1,inheritAttributes/1,initDialog/1,invalidateBestSize/1,isEnabled/1,
- isExposed/2,isExposed/3,isExposed/5,isRetained/1,isShown/1,isTopLevel/1,
- layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,move/2,
- move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,navigate/1,
- navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,popEventHandler/2,
- popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,refresh/2,refreshRect/2,
- refreshRect/3,releaseMouse/1,removeChild/2,reparent/2,screenToClient/1,
- screenToClient/2,scrollLines/2,scrollPages/2,scrollWindow/3,scrollWindow/4,
- setAcceleratorTable/2,setAutoLayout/2,setBackgroundColour/2,setBackgroundStyle/2,
- setCaret/2,setClientSize/2,setClientSize/3,setContainingSizer/2,setCursor/2,
+ hide/1,inheritAttributes/1,initDialog/1,invalidateBestSize/1,isDoubleBuffered/1,
+ isEnabled/1,isExposed/2,isExposed/3,isExposed/5,isRetained/1,isShown/1,
+ isTopLevel/1,layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,
+ move/2,move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,
+ navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,
+ popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,
+ refresh/2,refreshRect/2,refreshRect/3,releaseMouse/1,removeChild/2,
+ reparent/2,screenToClient/1,screenToClient/2,scrollLines/2,scrollPages/2,
+ scrollWindow/3,scrollWindow/4,setAcceleratorTable/2,setAutoLayout/2,
+ setBackgroundColour/2,setBackgroundStyle/2,setCaret/2,setClientSize/2,
+ setClientSize/3,setContainingSizer/2,setCursor/2,setDoubleBuffered/2,
setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,setFont/2,
setForegroundColour/2,setHelpText/2,setId/2,setLabel/2,setMaxSize/2,
setMinSize/2,setName/2,setOwnBackgroundColour/2,setOwnFont/2,setOwnForegroundColour/2,
setPalette/2,setScrollPos/3,setScrollPos/4,setScrollbar/5,setScrollbar/6,
setSize/2,setSize/3,setSize/5,setSize/6,setSizeHints/2,setSizeHints/3,
setSizeHints/4,setSizer/2,setSizer/3,setSizerAndFit/2,setSizerAndFit/3,
- setThemeEnabled/2,setToolTip/2,setVirtualSize/2,setVirtualSize/3,
- setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
+ setThemeEnabled/2,setToolTip/2,setTransparent/2,setVirtualSize/2,
+ setVirtualSize/3,setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
setWindowStyleFlag/2,setWindowVariant/2,shouldInheritColours/1,show/1,
show/2,thaw/1,transferDataFromWindow/1,transferDataToWindow/1,update/1,
updateWindowUI/1,updateWindowUI/2,validate/1,warpPointer/3]).
@@ -945,6 +946,14 @@ setLabel(This,Label) -> wxControl:setLabel(This,Label).
getLabel(This) -> wxControl:getLabel(This).
%% From wxWindow
%% @hidden
+setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On).
+%% @hidden
+isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This).
+%% @hidden
+canSetTransparent(This) -> wxWindow:canSetTransparent(This).
+%% @hidden
+setTransparent(This,Alpha) -> wxWindow:setTransparent(This,Alpha).
+%% @hidden
warpPointer(This,X,Y) -> wxWindow:warpPointer(This,X,Y).
%% @hidden
validate(This) -> wxWindow:validate(This).
diff --git a/lib/wx/src/gen/wxTreeEvent.erl b/lib/wx/src/gen/wxTreeEvent.erl
index 54cdf9ef66..5200a7a8e9 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.
diff --git a/lib/wx/src/gen/wxTreebook.erl b/lib/wx/src/gen/wxTreebook.erl
index 19f1d7cfe4..1900f47289 100644
--- a/lib/wx/src/gen/wxTreebook.erl
+++ b/lib/wx/src/gen/wxTreebook.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,10 +39,10 @@
setPageSize/2,setPageText/3,setSelection/2]).
%% inherited exports
--export([cacheBestSize/2,captureMouse/1,center/1,center/2,centerOnParent/1,
- centerOnParent/2,centre/1,centre/2,centreOnParent/1,centreOnParent/2,
- clearBackground/1,clientToScreen/2,clientToScreen/3,close/1,close/2,
- connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
+-export([cacheBestSize/2,canSetTransparent/1,captureMouse/1,center/1,center/2,
+ centerOnParent/1,centerOnParent/2,centre/1,centre/2,centreOnParent/1,
+ centreOnParent/2,clearBackground/1,clientToScreen/2,clientToScreen/3,
+ close/1,close/2,connect/2,connect/3,convertDialogToPixels/2,convertPixelsToDialog/2,
destroyChildren/1,disable/1,disconnect/1,disconnect/2,disconnect/3,
enable/1,enable/2,findWindow/2,fit/1,fitInside/1,freeze/1,getAcceleratorTable/1,
getBackgroundColour/1,getBackgroundStyle/1,getBestSize/1,getCaret/1,
@@ -54,24 +54,25 @@
getScrollRange/2,getScrollThumb/2,getSize/1,getSizer/1,getTextExtent/2,
getTextExtent/3,getToolTip/1,getUpdateRegion/1,getVirtualSize/1,getWindowStyleFlag/1,
getWindowVariant/1,hasCapture/1,hasScrollbar/2,hasTransparentBackground/1,
- hide/1,inheritAttributes/1,initDialog/1,invalidateBestSize/1,isEnabled/1,
- isExposed/2,isExposed/3,isExposed/5,isRetained/1,isShown/1,isTopLevel/1,
- layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,move/2,
- move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,navigate/1,
- navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,popEventHandler/2,
- popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,refresh/2,refreshRect/2,
- refreshRect/3,releaseMouse/1,removeChild/2,reparent/2,screenToClient/1,
- screenToClient/2,scrollLines/2,scrollPages/2,scrollWindow/3,scrollWindow/4,
- setAcceleratorTable/2,setAutoLayout/2,setBackgroundColour/2,setBackgroundStyle/2,
- setCaret/2,setClientSize/2,setClientSize/3,setContainingSizer/2,setCursor/2,
+ hide/1,inheritAttributes/1,initDialog/1,invalidateBestSize/1,isDoubleBuffered/1,
+ isEnabled/1,isExposed/2,isExposed/3,isExposed/5,isRetained/1,isShown/1,
+ isTopLevel/1,layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,
+ move/2,move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,
+ navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,
+ popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,
+ refresh/2,refreshRect/2,refreshRect/3,releaseMouse/1,removeChild/2,
+ reparent/2,screenToClient/1,screenToClient/2,scrollLines/2,scrollPages/2,
+ scrollWindow/3,scrollWindow/4,setAcceleratorTable/2,setAutoLayout/2,
+ setBackgroundColour/2,setBackgroundStyle/2,setCaret/2,setClientSize/2,
+ setClientSize/3,setContainingSizer/2,setCursor/2,setDoubleBuffered/2,
setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,setFont/2,
setForegroundColour/2,setHelpText/2,setId/2,setLabel/2,setMaxSize/2,
setMinSize/2,setName/2,setOwnBackgroundColour/2,setOwnFont/2,setOwnForegroundColour/2,
setPalette/2,setScrollPos/3,setScrollPos/4,setScrollbar/5,setScrollbar/6,
setSize/2,setSize/3,setSize/5,setSize/6,setSizeHints/2,setSizeHints/3,
setSizeHints/4,setSizer/2,setSizer/3,setSizerAndFit/2,setSizerAndFit/3,
- setThemeEnabled/2,setToolTip/2,setVirtualSize/2,setVirtualSize/3,
- setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
+ setThemeEnabled/2,setToolTip/2,setTransparent/2,setVirtualSize/2,
+ setVirtualSize/3,setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
setWindowStyle/2,setWindowStyleFlag/2,setWindowVariant/2,shouldInheritColours/1,
show/1,show/2,thaw/1,transferDataFromWindow/1,transferDataToWindow/1,
update/1,updateWindowUI/1,updateWindowUI/2,validate/1,warpPointer/3]).
@@ -439,6 +440,14 @@ setLabel(This,Label) -> wxControl:setLabel(This,Label).
getLabel(This) -> wxControl:getLabel(This).
%% From wxWindow
%% @hidden
+setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On).
+%% @hidden
+isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This).
+%% @hidden
+canSetTransparent(This) -> wxWindow:canSetTransparent(This).
+%% @hidden
+setTransparent(This,Alpha) -> wxWindow:setTransparent(This,Alpha).
+%% @hidden
warpPointer(This,X,Y) -> wxWindow:warpPointer(This,X,Y).
%% @hidden
validate(This) -> wxWindow:validate(This).
diff --git a/lib/wx/src/gen/wxUpdateUIEvent.erl b/lib/wx/src/gen/wxUpdateUIEvent.erl
index 5d4fb6e2b0..db126eec40 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.
diff --git a/lib/wx/src/gen/wxWindow.erl b/lib/wx/src/gen/wxWindow.erl
index 09928de09a..a8a61d547b 100644
--- a/lib/wx/src/gen/wxWindow.erl
+++ b/lib/wx/src/gen/wxWindow.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,13 +28,13 @@
-module(wxWindow).
-include("wxe.hrl").
--export(['Destroy'/1,cacheBestSize/2,captureMouse/1,center/1,center/2,centerOnParent/1,
- centerOnParent/2,centre/1,centre/2,centreOnParent/1,centreOnParent/2,
- clearBackground/1,clientToScreen/2,clientToScreen/3,close/1,close/2,
- convertDialogToPixels/2,convertPixelsToDialog/2,destroy/1,destroyChildren/1,
- disable/1,enable/1,enable/2,findFocus/0,findWindow/2,findWindowById/1,
- findWindowById/2,findWindowByLabel/1,findWindowByLabel/2,findWindowByName/1,
- findWindowByName/2,fit/1,fitInside/1,freeze/1,getAcceleratorTable/1,
+-export(['Destroy'/1,cacheBestSize/2,canSetTransparent/1,captureMouse/1,center/1,
+ center/2,centerOnParent/1,centerOnParent/2,centre/1,centre/2,centreOnParent/1,
+ centreOnParent/2,clearBackground/1,clientToScreen/2,clientToScreen/3,
+ close/1,close/2,convertDialogToPixels/2,convertPixelsToDialog/2,destroy/1,
+ destroyChildren/1,disable/1,enable/1,enable/2,findFocus/0,findWindow/2,
+ findWindowById/1,findWindowById/2,findWindowByLabel/1,findWindowByLabel/2,
+ findWindowByName/1,findWindowByName/2,fit/1,fitInside/1,freeze/1,getAcceleratorTable/1,
getBackgroundColour/1,getBackgroundStyle/1,getBestSize/1,getCapture/0,
getCaret/1,getCharHeight/1,getCharWidth/1,getChildren/1,getClientSize/1,
getContainingSizer/1,getCursor/1,getDropTarget/1,getEventHandler/1,
@@ -45,24 +45,24 @@
getSize/1,getSizer/1,getTextExtent/2,getTextExtent/3,getToolTip/1,
getUpdateRegion/1,getVirtualSize/1,getWindowStyleFlag/1,getWindowVariant/1,
hasCapture/1,hasScrollbar/2,hasTransparentBackground/1,hide/1,inheritAttributes/1,
- initDialog/1,invalidateBestSize/1,isEnabled/1,isExposed/2,isExposed/3,
- isExposed/5,isRetained/1,isShown/1,isTopLevel/1,layout/1,lineDown/1,
- lineUp/1,lower/1,makeModal/1,makeModal/2,move/2,move/3,move/4,moveAfterInTabOrder/2,
- moveBeforeInTabOrder/2,navigate/1,navigate/2,new/0,new/2,new/3,pageDown/1,
- pageUp/1,popEventHandler/1,popEventHandler/2,popupMenu/2,popupMenu/3,
- popupMenu/4,raise/1,refresh/1,refresh/2,refreshRect/2,refreshRect/3,
- releaseMouse/1,removeChild/2,reparent/2,screenToClient/1,screenToClient/2,
- scrollLines/2,scrollPages/2,scrollWindow/3,scrollWindow/4,setAcceleratorTable/2,
- setAutoLayout/2,setBackgroundColour/2,setBackgroundStyle/2,setCaret/2,
- setClientSize/2,setClientSize/3,setContainingSizer/2,setCursor/2,
- setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,setFont/2,
- setForegroundColour/2,setHelpText/2,setId/2,setLabel/2,setMaxSize/2,
+ initDialog/1,invalidateBestSize/1,isDoubleBuffered/1,isEnabled/1,
+ isExposed/2,isExposed/3,isExposed/5,isRetained/1,isShown/1,isTopLevel/1,
+ layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,move/2,
+ move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,navigate/1,
+ navigate/2,new/0,new/2,new/3,pageDown/1,pageUp/1,popEventHandler/1,popEventHandler/2,
+ popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,refresh/2,refreshRect/2,
+ refreshRect/3,releaseMouse/1,removeChild/2,reparent/2,screenToClient/1,
+ screenToClient/2,scrollLines/2,scrollPages/2,scrollWindow/3,scrollWindow/4,
+ setAcceleratorTable/2,setAutoLayout/2,setBackgroundColour/2,setBackgroundStyle/2,
+ setCaret/2,setClientSize/2,setClientSize/3,setContainingSizer/2,setCursor/2,
+ setDoubleBuffered/2,setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,
+ setFont/2,setForegroundColour/2,setHelpText/2,setId/2,setLabel/2,setMaxSize/2,
setMinSize/2,setName/2,setOwnBackgroundColour/2,setOwnFont/2,setOwnForegroundColour/2,
setPalette/2,setScrollPos/3,setScrollPos/4,setScrollbar/5,setScrollbar/6,
setSize/2,setSize/3,setSize/5,setSize/6,setSizeHints/2,setSizeHints/3,
setSizeHints/4,setSizer/2,setSizer/3,setSizerAndFit/2,setSizerAndFit/3,
- setThemeEnabled/2,setToolTip/2,setVirtualSize/2,setVirtualSize/3,
- setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
+ setThemeEnabled/2,setToolTip/2,setTransparent/2,setVirtualSize/2,
+ setVirtualSize/3,setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4,
setWindowStyle/2,setWindowStyleFlag/2,setWindowVariant/2,shouldInheritColours/1,
show/1,show/2,thaw/1,transferDataFromWindow/1,transferDataToWindow/1,
update/1,updateWindowUI/1,updateWindowUI/2,validate/1,warpPointer/3]).
@@ -1910,6 +1910,40 @@ warpPointer(#wx_ref{type=ThisT,ref=ThisRef},X,Y)
wxe_util:cast(?wxWindow_WarpPointer,
<<ThisRef:32/?UI,X:32/?UI,Y:32/?UI>>).
+%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowsettransparent">external documentation</a>.
+-spec setTransparent(This, Alpha) -> boolean() when
+ This::wxWindow(), Alpha::integer().
+setTransparent(#wx_ref{type=ThisT,ref=ThisRef},Alpha)
+ when is_integer(Alpha) ->
+ ?CLASS(ThisT,wxWindow),
+ wxe_util:call(?wxWindow_SetTransparent,
+ <<ThisRef:32/?UI,Alpha:32/?UI>>).
+
+%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowcansettransparent">external documentation</a>.
+-spec canSetTransparent(This) -> boolean() when
+ This::wxWindow().
+canSetTransparent(#wx_ref{type=ThisT,ref=ThisRef}) ->
+ ?CLASS(ThisT,wxWindow),
+ wxe_util:call(?wxWindow_CanSetTransparent,
+ <<ThisRef:32/?UI>>).
+
+%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowisdoublebuffered">external documentation</a>.
+-spec isDoubleBuffered(This) -> boolean() when
+ This::wxWindow().
+isDoubleBuffered(#wx_ref{type=ThisT,ref=ThisRef}) ->
+ ?CLASS(ThisT,wxWindow),
+ wxe_util:call(?wxWindow_IsDoubleBuffered,
+ <<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
+ This::wxWindow(), On::boolean().
+setDoubleBuffered(#wx_ref{type=ThisT,ref=ThisRef},On)
+ when is_boolean(On) ->
+ ?CLASS(ThisT,wxWindow),
+ wxe_util:cast(?wxWindow_SetDoubleBuffered,
+ <<ThisRef:32/?UI,(wxe_util:from_bool(On)):32/?UI>>).
+
%% @doc Destroys this object, do not use object again
-spec destroy(This::wxWindow()) -> ok.
destroy(Obj=#wx_ref{type=Type}) ->
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..176580a9bf 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.
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..b4d08fbbd5 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.
diff --git a/lib/wx/src/gen/wx_misc.erl b/lib/wx/src/gen/wx_misc.erl
index 44a9309f7e..5db6ceb036 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.
diff --git a/lib/wx/src/gen/wxe_debug.hrl b/lib/wx/src/gen/wxe_debug.hrl
index 375adde47d..78c6577439 100644
--- a/lib/wx/src/gen/wxe_debug.hrl
+++ b/lib/wx/src/gen/wxe_debug.hrl
@@ -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.
@@ -192,1275 +192,1275 @@ wxdebug_table() ->
{281, {wxWindow, updateWindowUI, 1}},
{282, {wxWindow, validate, 0}},
{283, {wxWindow, warpPointer, 2}},
- {284, {wxTopLevelWindow, getIcon, 0}},
- {285, {wxTopLevelWindow, getIcons, 0}},
- {286, {wxTopLevelWindow, getTitle, 0}},
- {287, {wxTopLevelWindow, isActive, 0}},
- {288, {wxTopLevelWindow, iconize, 1}},
- {289, {wxTopLevelWindow, isFullScreen, 0}},
- {290, {wxTopLevelWindow, isIconized, 0}},
- {291, {wxTopLevelWindow, isMaximized, 0}},
- {292, {wxTopLevelWindow, maximize, 1}},
- {293, {wxTopLevelWindow, requestUserAttention, 1}},
- {294, {wxTopLevelWindow, setIcon, 1}},
- {295, {wxTopLevelWindow, setIcons, 1}},
- {296, {wxTopLevelWindow, centerOnScreen, 1}},
- {297, {wxTopLevelWindow, centreOnScreen, 1}},
- {299, {wxTopLevelWindow, setShape, 1}},
- {300, {wxTopLevelWindow, setTitle, 1}},
- {301, {wxTopLevelWindow, showFullScreen, 2}},
- {303, {wxFrame, new_4, 4}},
- {304, {wxFrame, new_0, 0}},
- {306, {wxFrame, destruct, 0}},
- {307, {wxFrame, create, 4}},
- {308, {wxFrame, createStatusBar, 1}},
- {309, {wxFrame, createToolBar, 1}},
- {310, {wxFrame, getClientAreaOrigin, 0}},
- {311, {wxFrame, getMenuBar, 0}},
- {312, {wxFrame, getStatusBar, 0}},
- {313, {wxFrame, getStatusBarPane, 0}},
- {314, {wxFrame, getToolBar, 0}},
- {315, {wxFrame, processCommand, 1}},
- {316, {wxFrame, sendSizeEvent, 0}},
- {317, {wxFrame, setMenuBar, 1}},
- {318, {wxFrame, setStatusBar, 1}},
- {319, {wxFrame, setStatusBarPane, 1}},
- {320, {wxFrame, setStatusText, 2}},
- {321, {wxFrame, setStatusWidths, 2}},
- {322, {wxFrame, setToolBar, 1}},
- {323, {wxMiniFrame, new_0, 0}},
- {324, {wxMiniFrame, new_4, 4}},
- {325, {wxMiniFrame, create, 4}},
- {326, {wxMiniFrame, 'Destroy', undefined}},
- {327, {wxSplashScreen, new_0, 0}},
- {328, {wxSplashScreen, new_6, 6}},
- {329, {wxSplashScreen, destruct, 0}},
- {330, {wxSplashScreen, getSplashStyle, 0}},
- {331, {wxSplashScreen, getTimeout, 0}},
- {332, {wxPanel, new_0, 0}},
- {333, {wxPanel, new_6, 6}},
- {334, {wxPanel, new_2, 2}},
- {335, {wxPanel, destruct, 0}},
- {336, {wxPanel, initDialog, 0}},
- {337, {wxPanel, setFocusIgnoringChildren, 0}},
- {338, {wxScrolledWindow, new_0, 0}},
- {339, {wxScrolledWindow, new_2, 2}},
- {340, {wxScrolledWindow, destruct, 0}},
- {341, {wxScrolledWindow, calcScrolledPosition_4, 4}},
- {342, {wxScrolledWindow, calcScrolledPosition_1, 1}},
- {343, {wxScrolledWindow, calcUnscrolledPosition_4, 4}},
- {344, {wxScrolledWindow, calcUnscrolledPosition_1, 1}},
- {345, {wxScrolledWindow, enableScrolling, 2}},
- {346, {wxScrolledWindow, getScrollPixelsPerUnit, 2}},
- {347, {wxScrolledWindow, getViewStart, 2}},
- {348, {wxScrolledWindow, doPrepareDC, 1}},
- {349, {wxScrolledWindow, prepareDC, 1}},
- {350, {wxScrolledWindow, scroll, 2}},
- {351, {wxScrolledWindow, setScrollbars, 5}},
- {352, {wxScrolledWindow, setScrollRate, 2}},
- {353, {wxScrolledWindow, setTargetWindow, 1}},
- {354, {wxSashWindow, new_0, 0}},
- {355, {wxSashWindow, new_2, 2}},
- {356, {wxSashWindow, destruct, 0}},
- {357, {wxSashWindow, getSashVisible, 1}},
- {358, {wxSashWindow, getMaximumSizeX, 0}},
- {359, {wxSashWindow, getMaximumSizeY, 0}},
- {360, {wxSashWindow, getMinimumSizeX, 0}},
- {361, {wxSashWindow, getMinimumSizeY, 0}},
- {362, {wxSashWindow, setMaximumSizeX, 1}},
- {363, {wxSashWindow, setMaximumSizeY, 1}},
- {364, {wxSashWindow, setMinimumSizeX, 1}},
- {365, {wxSashWindow, setMinimumSizeY, 1}},
- {366, {wxSashWindow, setSashVisible, 2}},
- {367, {wxSashLayoutWindow, new_0, 0}},
- {368, {wxSashLayoutWindow, new_2, 2}},
- {369, {wxSashLayoutWindow, create, 2}},
- {370, {wxSashLayoutWindow, getAlignment, 0}},
- {371, {wxSashLayoutWindow, getOrientation, 0}},
- {372, {wxSashLayoutWindow, setAlignment, 1}},
- {373, {wxSashLayoutWindow, setDefaultSize, 1}},
- {374, {wxSashLayoutWindow, setOrientation, 1}},
- {375, {wxSashLayoutWindow, 'Destroy', undefined}},
- {376, {wxGrid, new_0, 0}},
- {377, {wxGrid, new_3, 3}},
- {378, {wxGrid, new_4, 4}},
- {379, {wxGrid, destruct, 0}},
- {380, {wxGrid, appendCols, 1}},
- {381, {wxGrid, appendRows, 1}},
- {382, {wxGrid, autoSize, 0}},
- {383, {wxGrid, autoSizeColumn, 2}},
- {384, {wxGrid, autoSizeColumns, 1}},
- {385, {wxGrid, autoSizeRow, 2}},
- {386, {wxGrid, autoSizeRows, 1}},
- {387, {wxGrid, beginBatch, 0}},
- {388, {wxGrid, blockToDeviceRect, 2}},
- {389, {wxGrid, canDragColSize, 0}},
- {390, {wxGrid, canDragRowSize, 0}},
- {391, {wxGrid, canDragGridSize, 0}},
- {392, {wxGrid, canEnableCellControl, 0}},
- {393, {wxGrid, cellToRect_2, 2}},
- {394, {wxGrid, cellToRect_1, 1}},
- {395, {wxGrid, clearGrid, 0}},
- {396, {wxGrid, clearSelection, 0}},
- {397, {wxGrid, createGrid, 3}},
- {398, {wxGrid, deleteCols, 1}},
- {399, {wxGrid, deleteRows, 1}},
- {400, {wxGrid, disableCellEditControl, 0}},
- {401, {wxGrid, disableDragColSize, 0}},
- {402, {wxGrid, disableDragGridSize, 0}},
- {403, {wxGrid, disableDragRowSize, 0}},
- {404, {wxGrid, enableCellEditControl, 1}},
- {405, {wxGrid, enableDragColSize, 1}},
- {406, {wxGrid, enableDragGridSize, 1}},
- {407, {wxGrid, enableDragRowSize, 1}},
- {408, {wxGrid, enableEditing, 1}},
- {409, {wxGrid, enableGridLines, 1}},
- {410, {wxGrid, endBatch, 0}},
- {411, {wxGrid, fit, 0}},
- {412, {wxGrid, forceRefresh, 0}},
- {413, {wxGrid, getBatchCount, 0}},
- {414, {wxGrid, getCellAlignment, 4}},
- {415, {wxGrid, getCellBackgroundColour, 2}},
- {416, {wxGrid, getCellEditor, 2}},
- {417, {wxGrid, getCellFont, 2}},
- {418, {wxGrid, getCellRenderer, 2}},
- {419, {wxGrid, getCellTextColour, 2}},
- {420, {wxGrid, getCellValue_2, 2}},
- {421, {wxGrid, getCellValue_1, 1}},
- {422, {wxGrid, getColLabelAlignment, 2}},
- {423, {wxGrid, getColLabelSize, 0}},
- {424, {wxGrid, getColLabelValue, 1}},
- {425, {wxGrid, getColMinimalAcceptableWidth, 0}},
- {426, {wxGrid, getDefaultCellAlignment, 2}},
- {427, {wxGrid, getDefaultCellBackgroundColour, 0}},
- {428, {wxGrid, getDefaultCellFont, 0}},
- {429, {wxGrid, getDefaultCellTextColour, 0}},
- {430, {wxGrid, getDefaultColLabelSize, 0}},
- {431, {wxGrid, getDefaultColSize, 0}},
- {432, {wxGrid, getDefaultEditor, 0}},
- {433, {wxGrid, getDefaultEditorForCell_2, 2}},
- {434, {wxGrid, getDefaultEditorForCell_1, 1}},
- {435, {wxGrid, getDefaultEditorForType, 1}},
- {436, {wxGrid, getDefaultRenderer, 0}},
- {437, {wxGrid, getDefaultRendererForCell, 2}},
- {438, {wxGrid, getDefaultRendererForType, 1}},
- {439, {wxGrid, getDefaultRowLabelSize, 0}},
- {440, {wxGrid, getDefaultRowSize, 0}},
- {441, {wxGrid, getGridCursorCol, 0}},
- {442, {wxGrid, getGridCursorRow, 0}},
- {443, {wxGrid, getGridLineColour, 0}},
- {444, {wxGrid, gridLinesEnabled, 0}},
- {445, {wxGrid, getLabelBackgroundColour, 0}},
- {446, {wxGrid, getLabelFont, 0}},
- {447, {wxGrid, getLabelTextColour, 0}},
- {448, {wxGrid, getNumberCols, 0}},
- {449, {wxGrid, getNumberRows, 0}},
- {450, {wxGrid, getOrCreateCellAttr, 2}},
- {451, {wxGrid, getRowMinimalAcceptableHeight, 0}},
- {452, {wxGrid, getRowLabelAlignment, 2}},
- {453, {wxGrid, getRowLabelSize, 0}},
- {454, {wxGrid, getRowLabelValue, 1}},
- {455, {wxGrid, getRowSize, 1}},
- {456, {wxGrid, getScrollLineX, 0}},
- {457, {wxGrid, getScrollLineY, 0}},
- {458, {wxGrid, getSelectedCells, 0}},
- {459, {wxGrid, getSelectedCols, 0}},
- {460, {wxGrid, getSelectedRows, 0}},
- {461, {wxGrid, getSelectionBackground, 0}},
- {462, {wxGrid, getSelectionBlockTopLeft, 0}},
- {463, {wxGrid, getSelectionBlockBottomRight, 0}},
- {464, {wxGrid, getSelectionForeground, 0}},
- {465, {wxGrid, getViewWidth, 0}},
- {466, {wxGrid, getGridWindow, 0}},
- {467, {wxGrid, getGridRowLabelWindow, 0}},
- {468, {wxGrid, getGridColLabelWindow, 0}},
- {469, {wxGrid, getGridCornerLabelWindow, 0}},
- {470, {wxGrid, hideCellEditControl, 0}},
- {471, {wxGrid, insertCols, 1}},
- {472, {wxGrid, insertRows, 1}},
- {473, {wxGrid, isCellEditControlEnabled, 0}},
- {474, {wxGrid, isCurrentCellReadOnly, 0}},
- {475, {wxGrid, isEditable, 0}},
- {476, {wxGrid, isInSelection_2, 2}},
- {477, {wxGrid, isInSelection_1, 1}},
- {478, {wxGrid, isReadOnly, 2}},
- {479, {wxGrid, isSelection, 0}},
- {480, {wxGrid, isVisible_3, 3}},
- {481, {wxGrid, isVisible_2, 2}},
- {482, {wxGrid, makeCellVisible_2, 2}},
- {483, {wxGrid, makeCellVisible_1, 1}},
- {484, {wxGrid, moveCursorDown, 1}},
- {485, {wxGrid, moveCursorLeft, 1}},
- {486, {wxGrid, moveCursorRight, 1}},
- {487, {wxGrid, moveCursorUp, 1}},
- {488, {wxGrid, moveCursorDownBlock, 1}},
- {489, {wxGrid, moveCursorLeftBlock, 1}},
- {490, {wxGrid, moveCursorRightBlock, 1}},
- {491, {wxGrid, moveCursorUpBlock, 1}},
- {492, {wxGrid, movePageDown, 0}},
- {493, {wxGrid, movePageUp, 0}},
- {494, {wxGrid, registerDataType, 3}},
- {495, {wxGrid, saveEditControlValue, 0}},
- {496, {wxGrid, selectAll, 0}},
- {497, {wxGrid, selectBlock_5, 5}},
- {498, {wxGrid, selectBlock_3, 3}},
- {499, {wxGrid, selectCol, 2}},
- {500, {wxGrid, selectRow, 2}},
- {501, {wxGrid, setCellAlignment_4, 4}},
- {502, {wxGrid, setCellAlignment_3, 3}},
- {503, {wxGrid, setCellAlignment_1, 1}},
- {504, {wxGrid, setCellBackgroundColour_3_0, 3}},
- {505, {wxGrid, setCellBackgroundColour_1, 1}},
- {506, {wxGrid, setCellBackgroundColour_3_1, 3}},
- {507, {wxGrid, setCellEditor, 3}},
- {508, {wxGrid, setCellFont, 3}},
- {509, {wxGrid, setCellRenderer, 3}},
- {510, {wxGrid, setCellTextColour_3_0, 3}},
- {511, {wxGrid, setCellTextColour_3_1, 3}},
- {512, {wxGrid, setCellTextColour_1, 1}},
- {513, {wxGrid, setCellValue_3_0, 3}},
- {514, {wxGrid, setCellValue_2, 2}},
- {515, {wxGrid, setCellValue_3_1, 3}},
- {516, {wxGrid, setColAttr, 2}},
- {517, {wxGrid, setColFormatBool, 1}},
- {518, {wxGrid, setColFormatNumber, 1}},
- {519, {wxGrid, setColFormatFloat, 2}},
- {520, {wxGrid, setColFormatCustom, 2}},
- {521, {wxGrid, setColLabelAlignment, 2}},
- {522, {wxGrid, setColLabelSize, 1}},
- {523, {wxGrid, setColLabelValue, 2}},
- {524, {wxGrid, setColMinimalWidth, 2}},
- {525, {wxGrid, setColMinimalAcceptableWidth, 1}},
- {526, {wxGrid, setColSize, 2}},
- {527, {wxGrid, setDefaultCellAlignment, 2}},
- {528, {wxGrid, setDefaultCellBackgroundColour, 1}},
- {529, {wxGrid, setDefaultCellFont, 1}},
- {530, {wxGrid, setDefaultCellTextColour, 1}},
- {531, {wxGrid, setDefaultEditor, 1}},
- {532, {wxGrid, setDefaultRenderer, 1}},
- {533, {wxGrid, setDefaultColSize, 2}},
- {534, {wxGrid, setDefaultRowSize, 2}},
- {535, {wxGrid, setGridCursor, 2}},
- {536, {wxGrid, setGridLineColour, 1}},
- {537, {wxGrid, setLabelBackgroundColour, 1}},
- {538, {wxGrid, setLabelFont, 1}},
- {539, {wxGrid, setLabelTextColour, 1}},
- {540, {wxGrid, setMargins, 2}},
- {541, {wxGrid, setReadOnly, 3}},
- {542, {wxGrid, setRowAttr, 2}},
- {543, {wxGrid, setRowLabelAlignment, 2}},
- {544, {wxGrid, setRowLabelSize, 1}},
- {545, {wxGrid, setRowLabelValue, 2}},
- {546, {wxGrid, setRowMinimalHeight, 2}},
- {547, {wxGrid, setRowMinimalAcceptableHeight, 1}},
- {548, {wxGrid, setRowSize, 2}},
- {549, {wxGrid, setScrollLineX, 1}},
- {550, {wxGrid, setScrollLineY, 1}},
- {551, {wxGrid, setSelectionBackground, 1}},
- {552, {wxGrid, setSelectionForeground, 1}},
- {553, {wxGrid, setSelectionMode, 1}},
- {554, {wxGrid, showCellEditControl, 0}},
- {555, {wxGrid, xToCol, 2}},
- {556, {wxGrid, xToEdgeOfCol, 1}},
- {557, {wxGrid, yToEdgeOfRow, 1}},
- {558, {wxGrid, yToRow, 1}},
- {559, {wxGridCellRenderer, draw, 7}},
- {560, {wxGridCellRenderer, getBestSize, 5}},
- {561, {wxGridCellEditor, create, 3}},
- {562, {wxGridCellEditor, isCreated, 0}},
- {563, {wxGridCellEditor, setSize, 1}},
- {564, {wxGridCellEditor, show, 2}},
- {565, {wxGridCellEditor, paintBackground, 2}},
- {566, {wxGridCellEditor, beginEdit, 3}},
- {567, {wxGridCellEditor, endEdit, 3}},
- {568, {wxGridCellEditor, reset, 0}},
- {569, {wxGridCellEditor, startingKey, 1}},
- {570, {wxGridCellEditor, startingClick, 0}},
- {571, {wxGridCellEditor, handleReturn, 1}},
- {572, {wxGridCellBoolRenderer, new, 0}},
- {573, {wxGridCellBoolRenderer, 'Destroy', undefined}},
- {574, {wxGridCellBoolEditor, new, 0}},
- {575, {wxGridCellBoolEditor, isTrueValue, 1}},
- {576, {wxGridCellBoolEditor, useStringValues, 1}},
- {577, {wxGridCellBoolEditor, 'Destroy', undefined}},
- {578, {wxGridCellFloatRenderer, new, 1}},
- {579, {wxGridCellFloatRenderer, getPrecision, 0}},
- {580, {wxGridCellFloatRenderer, getWidth, 0}},
- {581, {wxGridCellFloatRenderer, setParameters, 1}},
- {582, {wxGridCellFloatRenderer, setPrecision, 1}},
- {583, {wxGridCellFloatRenderer, setWidth, 1}},
- {584, {wxGridCellFloatRenderer, 'Destroy', undefined}},
- {585, {wxGridCellFloatEditor, new, 1}},
- {586, {wxGridCellFloatEditor, setParameters, 1}},
- {587, {wxGridCellFloatEditor, 'Destroy', undefined}},
- {588, {wxGridCellStringRenderer, new, 0}},
- {589, {wxGridCellStringRenderer, 'Destroy', undefined}},
- {590, {wxGridCellTextEditor, new, 0}},
- {591, {wxGridCellTextEditor, setParameters, 1}},
- {592, {wxGridCellTextEditor, 'Destroy', undefined}},
- {594, {wxGridCellChoiceEditor, new, 2}},
- {595, {wxGridCellChoiceEditor, setParameters, 1}},
- {596, {wxGridCellChoiceEditor, 'Destroy', undefined}},
- {597, {wxGridCellNumberRenderer, new, 0}},
- {598, {wxGridCellNumberRenderer, 'Destroy', undefined}},
- {599, {wxGridCellNumberEditor, new, 1}},
- {600, {wxGridCellNumberEditor, getValue, 0}},
- {601, {wxGridCellNumberEditor, setParameters, 1}},
- {602, {wxGridCellNumberEditor, 'Destroy', undefined}},
- {603, {wxGridCellAttr, setTextColour, 1}},
- {604, {wxGridCellAttr, setBackgroundColour, 1}},
- {605, {wxGridCellAttr, setFont, 1}},
- {606, {wxGridCellAttr, setAlignment, 2}},
- {607, {wxGridCellAttr, setReadOnly, 1}},
- {608, {wxGridCellAttr, setRenderer, 1}},
- {609, {wxGridCellAttr, setEditor, 1}},
- {610, {wxGridCellAttr, hasTextColour, 0}},
- {611, {wxGridCellAttr, hasBackgroundColour, 0}},
- {612, {wxGridCellAttr, hasFont, 0}},
- {613, {wxGridCellAttr, hasAlignment, 0}},
- {614, {wxGridCellAttr, hasRenderer, 0}},
- {615, {wxGridCellAttr, hasEditor, 0}},
- {616, {wxGridCellAttr, getTextColour, 0}},
- {617, {wxGridCellAttr, getBackgroundColour, 0}},
- {618, {wxGridCellAttr, getFont, 0}},
- {619, {wxGridCellAttr, getAlignment, 2}},
- {620, {wxGridCellAttr, getRenderer, 3}},
- {621, {wxGridCellAttr, getEditor, 3}},
- {622, {wxGridCellAttr, isReadOnly, 0}},
- {623, {wxGridCellAttr, setDefAttr, 1}},
- {624, {wxDC, blit, 5}},
- {625, {wxDC, calcBoundingBox, 2}},
- {626, {wxDC, clear, 0}},
- {627, {wxDC, computeScaleAndOrigin, 0}},
- {628, {wxDC, crossHair, 1}},
- {629, {wxDC, destroyClippingRegion, 0}},
- {630, {wxDC, deviceToLogicalX, 1}},
- {631, {wxDC, deviceToLogicalXRel, 1}},
- {632, {wxDC, deviceToLogicalY, 1}},
- {633, {wxDC, deviceToLogicalYRel, 1}},
- {634, {wxDC, drawArc, 3}},
- {635, {wxDC, drawBitmap, 3}},
- {636, {wxDC, drawCheckMark, 1}},
- {637, {wxDC, drawCircle, 2}},
- {639, {wxDC, drawEllipse_2, 2}},
- {640, {wxDC, drawEllipse_1, 1}},
- {641, {wxDC, drawEllipticArc, 4}},
- {642, {wxDC, drawIcon, 2}},
- {643, {wxDC, drawLabel, 3}},
- {644, {wxDC, drawLine, 2}},
- {645, {wxDC, drawLines, 3}},
- {647, {wxDC, drawPolygon, 3}},
- {649, {wxDC, drawPoint, 1}},
- {651, {wxDC, drawRectangle_2, 2}},
- {652, {wxDC, drawRectangle_1, 1}},
- {653, {wxDC, drawRotatedText, 3}},
- {655, {wxDC, drawRoundedRectangle_3, 3}},
- {656, {wxDC, drawRoundedRectangle_2, 2}},
- {657, {wxDC, drawText, 2}},
- {658, {wxDC, endDoc, 0}},
- {659, {wxDC, endPage, 0}},
- {660, {wxDC, floodFill, 3}},
- {661, {wxDC, getBackground, 0}},
- {662, {wxDC, getBackgroundMode, 0}},
- {663, {wxDC, getBrush, 0}},
- {664, {wxDC, getCharHeight, 0}},
- {665, {wxDC, getCharWidth, 0}},
- {666, {wxDC, getClippingBox, 4}},
- {668, {wxDC, getFont, 0}},
- {669, {wxDC, getLayoutDirection, 0}},
- {670, {wxDC, getLogicalFunction, 0}},
- {671, {wxDC, getMapMode, 0}},
- {672, {wxDC, getMultiLineTextExtent_4, 4}},
- {673, {wxDC, getMultiLineTextExtent_1, 1}},
- {674, {wxDC, getPartialTextExtents, 2}},
- {675, {wxDC, getPen, 0}},
- {676, {wxDC, getPixel, 2}},
- {677, {wxDC, getPPI, 0}},
- {679, {wxDC, getSize, 0}},
- {681, {wxDC, getSizeMM, 0}},
- {682, {wxDC, getTextBackground, 0}},
- {683, {wxDC, getTextExtent_4, 4}},
- {684, {wxDC, getTextExtent_1, 1}},
- {686, {wxDC, getTextForeground, 0}},
- {687, {wxDC, getUserScale, 2}},
- {688, {wxDC, gradientFillConcentric_3, 3}},
- {689, {wxDC, gradientFillConcentric_4, 4}},
- {690, {wxDC, gradientFillLinear, 4}},
- {691, {wxDC, logicalToDeviceX, 1}},
- {692, {wxDC, logicalToDeviceXRel, 1}},
- {693, {wxDC, logicalToDeviceY, 1}},
- {694, {wxDC, logicalToDeviceYRel, 1}},
- {695, {wxDC, maxX, 0}},
- {696, {wxDC, maxY, 0}},
- {697, {wxDC, minX, 0}},
- {698, {wxDC, minY, 0}},
- {699, {wxDC, isOk, 0}},
- {700, {wxDC, resetBoundingBox, 0}},
- {701, {wxDC, setAxisOrientation, 2}},
- {702, {wxDC, setBackground, 1}},
- {703, {wxDC, setBackgroundMode, 1}},
- {704, {wxDC, setBrush, 1}},
- {706, {wxDC, setClippingRegion_2, 2}},
- {707, {wxDC, setClippingRegion_1_1, 1}},
- {708, {wxDC, setClippingRegion_1_0, 1}},
- {709, {wxDC, setDeviceOrigin, 2}},
- {710, {wxDC, setFont, 1}},
- {711, {wxDC, setLayoutDirection, 1}},
- {712, {wxDC, setLogicalFunction, 1}},
- {713, {wxDC, setMapMode, 1}},
- {714, {wxDC, setPalette, 1}},
- {715, {wxDC, setPen, 1}},
- {716, {wxDC, setTextBackground, 1}},
- {717, {wxDC, setTextForeground, 1}},
- {718, {wxDC, setUserScale, 2}},
- {719, {wxDC, startDoc, 1}},
- {720, {wxDC, startPage, 0}},
- {721, {wxMirrorDC, new, 2}},
- {722, {wxMirrorDC, 'Destroy', undefined}},
- {723, {wxScreenDC, new, 0}},
- {724, {wxScreenDC, destruct, 0}},
- {725, {wxPostScriptDC, new_0, 0}},
- {726, {wxPostScriptDC, new_1, 1}},
- {727, {wxPostScriptDC, destruct, 0}},
- {728, {wxPostScriptDC, setResolution, 1}},
- {729, {wxPostScriptDC, getResolution, 0}},
- {730, {wxWindowDC, new_0, 0}},
- {731, {wxWindowDC, new_1, 1}},
- {732, {wxWindowDC, destruct, 0}},
- {733, {wxClientDC, new_0, 0}},
- {734, {wxClientDC, new_1, 1}},
- {735, {wxClientDC, 'Destroy', undefined}},
- {736, {wxPaintDC, new_0, 0}},
- {737, {wxPaintDC, new_1, 1}},
- {738, {wxPaintDC, 'Destroy', undefined}},
- {740, {wxMemoryDC, new_1_0, 1}},
- {741, {wxMemoryDC, new_1_1, 1}},
- {742, {wxMemoryDC, new_0, 0}},
- {744, {wxMemoryDC, destruct, 0}},
- {745, {wxMemoryDC, selectObject, 1}},
- {746, {wxMemoryDC, selectObjectAsSource, 1}},
- {747, {wxBufferedDC, new_0, 0}},
- {748, {wxBufferedDC, new_2, 2}},
- {749, {wxBufferedDC, new_3, 3}},
- {750, {wxBufferedDC, destruct, 0}},
- {751, {wxBufferedDC, init_2, 2}},
- {752, {wxBufferedDC, init_3, 3}},
- {753, {wxBufferedPaintDC, new_3, 3}},
- {754, {wxBufferedPaintDC, new_2, 2}},
- {755, {wxBufferedPaintDC, destruct, 0}},
- {756, {wxGraphicsObject, destruct, 0}},
- {757, {wxGraphicsObject, getRenderer, 0}},
- {758, {wxGraphicsObject, isNull, 0}},
- {759, {wxGraphicsContext, destruct, 0}},
- {760, {wxGraphicsContext, create_1_1, 1}},
- {761, {wxGraphicsContext, create_1_0, 1}},
- {762, {wxGraphicsContext, create_0, 0}},
- {763, {wxGraphicsContext, createPen, 1}},
- {764, {wxGraphicsContext, createBrush, 1}},
- {765, {wxGraphicsContext, createRadialGradientBrush, 7}},
- {766, {wxGraphicsContext, createLinearGradientBrush, 6}},
- {767, {wxGraphicsContext, createFont, 2}},
- {768, {wxGraphicsContext, createMatrix, 1}},
- {769, {wxGraphicsContext, createPath, 0}},
- {770, {wxGraphicsContext, clip_1, 1}},
- {771, {wxGraphicsContext, clip_4, 4}},
- {772, {wxGraphicsContext, resetClip, 0}},
- {773, {wxGraphicsContext, drawBitmap, 5}},
- {774, {wxGraphicsContext, drawEllipse, 4}},
- {775, {wxGraphicsContext, drawIcon, 5}},
- {776, {wxGraphicsContext, drawLines, 3}},
- {777, {wxGraphicsContext, drawPath, 2}},
- {778, {wxGraphicsContext, drawRectangle, 4}},
- {779, {wxGraphicsContext, drawRoundedRectangle, 5}},
- {780, {wxGraphicsContext, drawText_3, 3}},
- {781, {wxGraphicsContext, drawText_4_0, 4}},
- {782, {wxGraphicsContext, drawText_4_1, 4}},
- {783, {wxGraphicsContext, drawText_5, 5}},
- {784, {wxGraphicsContext, fillPath, 2}},
- {785, {wxGraphicsContext, strokePath, 1}},
- {786, {wxGraphicsContext, getPartialTextExtents, 2}},
- {787, {wxGraphicsContext, getTextExtent, 5}},
- {788, {wxGraphicsContext, rotate, 1}},
- {789, {wxGraphicsContext, scale, 2}},
- {790, {wxGraphicsContext, translate, 2}},
- {791, {wxGraphicsContext, getTransform, 0}},
- {792, {wxGraphicsContext, setTransform, 1}},
- {793, {wxGraphicsContext, concatTransform, 1}},
- {794, {wxGraphicsContext, setBrush_1_1, 1}},
- {795, {wxGraphicsContext, setBrush_1_0, 1}},
- {796, {wxGraphicsContext, setFont_1, 1}},
- {797, {wxGraphicsContext, setFont_2, 2}},
- {798, {wxGraphicsContext, setPen_1_0, 1}},
- {799, {wxGraphicsContext, setPen_1_1, 1}},
- {800, {wxGraphicsContext, strokeLine, 4}},
- {801, {wxGraphicsContext, strokeLines, 2}},
- {803, {wxGraphicsMatrix, concat, 1}},
- {805, {wxGraphicsMatrix, get, 1}},
- {806, {wxGraphicsMatrix, invert, 0}},
- {807, {wxGraphicsMatrix, isEqual, 1}},
- {809, {wxGraphicsMatrix, isIdentity, 0}},
- {810, {wxGraphicsMatrix, rotate, 1}},
- {811, {wxGraphicsMatrix, scale, 2}},
- {812, {wxGraphicsMatrix, translate, 2}},
- {813, {wxGraphicsMatrix, set, 1}},
- {814, {wxGraphicsMatrix, transformPoint, 2}},
- {815, {wxGraphicsMatrix, transformDistance, 2}},
- {816, {wxGraphicsPath, moveToPoint_2, 2}},
- {817, {wxGraphicsPath, moveToPoint_1, 1}},
- {818, {wxGraphicsPath, addArc_6, 6}},
- {819, {wxGraphicsPath, addArc_5, 5}},
- {820, {wxGraphicsPath, addArcToPoint, 5}},
- {821, {wxGraphicsPath, addCircle, 3}},
- {822, {wxGraphicsPath, addCurveToPoint_6, 6}},
- {823, {wxGraphicsPath, addCurveToPoint_3, 3}},
- {824, {wxGraphicsPath, addEllipse, 4}},
- {825, {wxGraphicsPath, addLineToPoint_2, 2}},
- {826, {wxGraphicsPath, addLineToPoint_1, 1}},
- {827, {wxGraphicsPath, addPath, 1}},
- {828, {wxGraphicsPath, addQuadCurveToPoint, 4}},
- {829, {wxGraphicsPath, addRectangle, 4}},
- {830, {wxGraphicsPath, addRoundedRectangle, 5}},
- {831, {wxGraphicsPath, closeSubpath, 0}},
- {832, {wxGraphicsPath, contains_3, 3}},
- {833, {wxGraphicsPath, contains_2, 2}},
- {835, {wxGraphicsPath, getBox, 0}},
- {837, {wxGraphicsPath, getCurrentPoint, 0}},
- {838, {wxGraphicsPath, transform, 1}},
- {839, {wxGraphicsRenderer, getDefaultRenderer, 0}},
- {840, {wxGraphicsRenderer, createContext_1_1, 1}},
- {841, {wxGraphicsRenderer, createContext_1_0, 1}},
- {842, {wxGraphicsRenderer, createPen, 1}},
- {843, {wxGraphicsRenderer, createBrush, 1}},
- {844, {wxGraphicsRenderer, createLinearGradientBrush, 6}},
- {845, {wxGraphicsRenderer, createRadialGradientBrush, 7}},
- {846, {wxGraphicsRenderer, createFont, 2}},
- {847, {wxGraphicsRenderer, createMatrix, 1}},
- {848, {wxGraphicsRenderer, createPath, 0}},
- {850, {wxMenuBar, new_1, 1}},
- {852, {wxMenuBar, new_0, 0}},
- {854, {wxMenuBar, destruct, 0}},
- {855, {wxMenuBar, append, 2}},
- {856, {wxMenuBar, check, 2}},
- {857, {wxMenuBar, enable_2, 2}},
- {858, {wxMenuBar, enable_1, 1}},
- {859, {wxMenuBar, enableTop, 2}},
- {860, {wxMenuBar, findMenu, 1}},
- {861, {wxMenuBar, findMenuItem, 2}},
- {862, {wxMenuBar, findItem, 2}},
- {863, {wxMenuBar, getHelpString, 1}},
- {864, {wxMenuBar, getLabel_1, 1}},
- {865, {wxMenuBar, getLabel_0, 0}},
- {866, {wxMenuBar, getLabelTop, 1}},
- {867, {wxMenuBar, getMenu, 1}},
- {868, {wxMenuBar, getMenuCount, 0}},
- {869, {wxMenuBar, insert, 3}},
- {870, {wxMenuBar, isChecked, 1}},
- {871, {wxMenuBar, isEnabled_1, 1}},
- {872, {wxMenuBar, isEnabled_0, 0}},
- {873, {wxMenuBar, remove, 1}},
- {874, {wxMenuBar, replace, 3}},
- {875, {wxMenuBar, setHelpString, 2}},
- {876, {wxMenuBar, setLabel_2, 2}},
- {877, {wxMenuBar, setLabel_1, 1}},
- {878, {wxMenuBar, setLabelTop, 2}},
- {879, {wxControl, getLabel, 0}},
- {880, {wxControl, setLabel, 1}},
- {881, {wxControlWithItems, append_1, 1}},
- {882, {wxControlWithItems, append_2, 2}},
- {883, {wxControlWithItems, appendStrings_1, 1}},
- {884, {wxControlWithItems, clear, 0}},
- {885, {wxControlWithItems, delete, 1}},
- {886, {wxControlWithItems, findString, 2}},
- {887, {wxControlWithItems, getClientData, 1}},
- {888, {wxControlWithItems, setClientData, 2}},
- {889, {wxControlWithItems, getCount, 0}},
- {890, {wxControlWithItems, getSelection, 0}},
- {891, {wxControlWithItems, getString, 1}},
- {892, {wxControlWithItems, getStringSelection, 0}},
- {893, {wxControlWithItems, insert_2, 2}},
- {894, {wxControlWithItems, insert_3, 3}},
- {895, {wxControlWithItems, isEmpty, 0}},
- {896, {wxControlWithItems, select, 1}},
- {897, {wxControlWithItems, setSelection, 1}},
- {898, {wxControlWithItems, setString, 2}},
- {899, {wxControlWithItems, setStringSelection, 1}},
- {902, {wxMenu, new_2, 2}},
- {903, {wxMenu, new_1, 1}},
- {905, {wxMenu, destruct, 0}},
- {906, {wxMenu, append_3, 3}},
- {907, {wxMenu, append_1, 1}},
- {908, {wxMenu, append_4_0, 4}},
- {909, {wxMenu, append_4_1, 4}},
- {910, {wxMenu, appendCheckItem, 3}},
- {911, {wxMenu, appendRadioItem, 3}},
- {912, {wxMenu, appendSeparator, 0}},
- {913, {wxMenu, break, 0}},
- {914, {wxMenu, check, 2}},
- {915, {wxMenu, delete_1_0, 1}},
- {916, {wxMenu, delete_1_1, 1}},
- {917, {wxMenu, destroy_1_0, 1}},
- {918, {wxMenu, destroy_1_1, 1}},
- {919, {wxMenu, enable, 2}},
- {920, {wxMenu, findItem_1, 1}},
- {921, {wxMenu, findItem_2, 2}},
- {922, {wxMenu, findItemByPosition, 1}},
- {923, {wxMenu, getHelpString, 1}},
- {924, {wxMenu, getLabel, 1}},
- {925, {wxMenu, getMenuItemCount, 0}},
- {926, {wxMenu, getMenuItems, 0}},
- {928, {wxMenu, getTitle, 0}},
- {929, {wxMenu, insert_2, 2}},
- {930, {wxMenu, insert_3, 3}},
- {931, {wxMenu, insert_5_1, 5}},
- {932, {wxMenu, insert_5_0, 5}},
- {933, {wxMenu, insertCheckItem, 4}},
- {934, {wxMenu, insertRadioItem, 4}},
- {935, {wxMenu, insertSeparator, 1}},
- {936, {wxMenu, isChecked, 1}},
- {937, {wxMenu, isEnabled, 1}},
- {938, {wxMenu, prepend_1, 1}},
- {939, {wxMenu, prepend_2, 2}},
- {940, {wxMenu, prepend_4_1, 4}},
- {941, {wxMenu, prepend_4_0, 4}},
- {942, {wxMenu, prependCheckItem, 3}},
- {943, {wxMenu, prependRadioItem, 3}},
- {944, {wxMenu, prependSeparator, 0}},
- {945, {wxMenu, remove_1_0, 1}},
- {946, {wxMenu, remove_1_1, 1}},
- {947, {wxMenu, setHelpString, 2}},
- {948, {wxMenu, setLabel, 2}},
- {949, {wxMenu, setTitle, 1}},
- {950, {wxMenuItem, new, 1}},
- {952, {wxMenuItem, destruct, 0}},
- {953, {wxMenuItem, check, 1}},
- {954, {wxMenuItem, enable, 1}},
- {955, {wxMenuItem, getBitmap, 0}},
- {956, {wxMenuItem, getHelp, 0}},
- {957, {wxMenuItem, getId, 0}},
- {958, {wxMenuItem, getKind, 0}},
- {959, {wxMenuItem, getLabel, 0}},
- {960, {wxMenuItem, getLabelFromText, 1}},
- {961, {wxMenuItem, getMenu, 0}},
- {962, {wxMenuItem, getText, 0}},
- {963, {wxMenuItem, getSubMenu, 0}},
- {964, {wxMenuItem, isCheckable, 0}},
- {965, {wxMenuItem, isChecked, 0}},
- {966, {wxMenuItem, isEnabled, 0}},
- {967, {wxMenuItem, isSeparator, 0}},
- {968, {wxMenuItem, isSubMenu, 0}},
- {969, {wxMenuItem, setBitmap, 1}},
- {970, {wxMenuItem, setHelp, 1}},
- {971, {wxMenuItem, setMenu, 1}},
- {972, {wxMenuItem, setSubMenu, 1}},
- {973, {wxMenuItem, setText, 1}},
- {974, {wxToolBar, addControl, 1}},
- {975, {wxToolBar, addSeparator, 0}},
- {976, {wxToolBar, addTool_5, 5}},
- {977, {wxToolBar, addTool_4_0, 4}},
- {978, {wxToolBar, addTool_1, 1}},
- {979, {wxToolBar, addTool_4_1, 4}},
- {980, {wxToolBar, addTool_3, 3}},
- {981, {wxToolBar, addTool_6, 6}},
- {982, {wxToolBar, addCheckTool, 4}},
- {983, {wxToolBar, addRadioTool, 4}},
- {984, {wxToolBar, addStretchableSpace, 0}},
- {985, {wxToolBar, insertStretchableSpace, 1}},
- {986, {wxToolBar, deleteTool, 1}},
- {987, {wxToolBar, deleteToolByPos, 1}},
- {988, {wxToolBar, enableTool, 2}},
- {989, {wxToolBar, findById, 1}},
- {990, {wxToolBar, findControl, 1}},
- {991, {wxToolBar, findToolForPosition, 2}},
- {992, {wxToolBar, getToolSize, 0}},
- {993, {wxToolBar, getToolBitmapSize, 0}},
- {994, {wxToolBar, getMargins, 0}},
- {995, {wxToolBar, getToolEnabled, 1}},
- {996, {wxToolBar, getToolLongHelp, 1}},
- {997, {wxToolBar, getToolPacking, 0}},
- {998, {wxToolBar, getToolPos, 1}},
- {999, {wxToolBar, getToolSeparation, 0}},
- {1000, {wxToolBar, getToolShortHelp, 1}},
- {1001, {wxToolBar, getToolState, 1}},
- {1002, {wxToolBar, insertControl, 2}},
- {1003, {wxToolBar, insertSeparator, 1}},
- {1004, {wxToolBar, insertTool_5, 5}},
- {1005, {wxToolBar, insertTool_2, 2}},
- {1006, {wxToolBar, insertTool_4, 4}},
- {1007, {wxToolBar, realize, 0}},
- {1008, {wxToolBar, removeTool, 1}},
- {1009, {wxToolBar, setMargins, 2}},
- {1010, {wxToolBar, setToolBitmapSize, 1}},
- {1011, {wxToolBar, setToolLongHelp, 2}},
- {1012, {wxToolBar, setToolPacking, 1}},
- {1013, {wxToolBar, setToolShortHelp, 2}},
- {1014, {wxToolBar, setToolSeparation, 1}},
- {1015, {wxToolBar, toggleTool, 2}},
- {1017, {wxStatusBar, new_0, 0}},
- {1018, {wxStatusBar, new_2, 2}},
- {1020, {wxStatusBar, destruct, 0}},
- {1021, {wxStatusBar, create, 2}},
- {1022, {wxStatusBar, getFieldRect, 2}},
- {1023, {wxStatusBar, getFieldsCount, 0}},
- {1024, {wxStatusBar, getStatusText, 1}},
- {1025, {wxStatusBar, popStatusText, 1}},
- {1026, {wxStatusBar, pushStatusText, 2}},
- {1027, {wxStatusBar, setFieldsCount, 2}},
- {1028, {wxStatusBar, setMinHeight, 1}},
- {1029, {wxStatusBar, setStatusText, 2}},
- {1030, {wxStatusBar, setStatusWidths, 2}},
- {1031, {wxStatusBar, setStatusStyles, 2}},
- {1032, {wxBitmap, new_0, 0}},
- {1033, {wxBitmap, new_3, 3}},
- {1034, {wxBitmap, new_4, 4}},
- {1035, {wxBitmap, new_2_0, 2}},
- {1036, {wxBitmap, new_2_1, 2}},
- {1037, {wxBitmap, destruct, 0}},
- {1038, {wxBitmap, convertToImage, 0}},
- {1039, {wxBitmap, copyFromIcon, 1}},
- {1040, {wxBitmap, create, 3}},
- {1041, {wxBitmap, getDepth, 0}},
- {1042, {wxBitmap, getHeight, 0}},
- {1043, {wxBitmap, getPalette, 0}},
- {1044, {wxBitmap, getMask, 0}},
- {1045, {wxBitmap, getWidth, 0}},
- {1046, {wxBitmap, getSubBitmap, 1}},
- {1047, {wxBitmap, loadFile, 2}},
- {1048, {wxBitmap, ok, 0}},
- {1049, {wxBitmap, saveFile, 3}},
- {1050, {wxBitmap, setDepth, 1}},
- {1051, {wxBitmap, setHeight, 1}},
- {1052, {wxBitmap, setMask, 1}},
- {1053, {wxBitmap, setPalette, 1}},
- {1054, {wxBitmap, setWidth, 1}},
- {1055, {wxIcon, new_0, 0}},
- {1056, {wxIcon, new_2, 2}},
- {1057, {wxIcon, new_1, 1}},
- {1058, {wxIcon, copyFromBitmap, 1}},
- {1059, {wxIcon, 'Destroy', undefined}},
- {1060, {wxIconBundle, new_0, 0}},
- {1061, {wxIconBundle, new_2, 2}},
- {1062, {wxIconBundle, new_1_0, 1}},
- {1063, {wxIconBundle, new_1_1, 1}},
- {1064, {wxIconBundle, destruct, 0}},
- {1065, {wxIconBundle, addIcon_2, 2}},
- {1066, {wxIconBundle, addIcon_1, 1}},
- {1067, {wxIconBundle, getIcon_1_1, 1}},
- {1068, {wxIconBundle, getIcon_1_0, 1}},
- {1069, {wxCursor, new_0, 0}},
- {1070, {wxCursor, new_1_0, 1}},
- {1071, {wxCursor, new_1_1, 1}},
- {1072, {wxCursor, new_4, 4}},
- {1073, {wxCursor, destruct, 0}},
- {1074, {wxCursor, ok, 0}},
- {1075, {wxMask, new_0, 0}},
- {1076, {wxMask, new_2_1, 2}},
- {1077, {wxMask, new_2_0, 2}},
- {1078, {wxMask, new_1, 1}},
- {1079, {wxMask, destruct, 0}},
- {1080, {wxMask, create_2_1, 2}},
- {1081, {wxMask, create_2_0, 2}},
- {1082, {wxMask, create_1, 1}},
- {1083, {wxImage, new_0, 0}},
- {1084, {wxImage, new_3_0, 3}},
- {1085, {wxImage, new_4, 4}},
- {1086, {wxImage, new_5, 5}},
- {1087, {wxImage, new_2, 2}},
- {1088, {wxImage, new_3_1, 3}},
- {1089, {wxImage, blur, 1}},
- {1090, {wxImage, blurHorizontal, 1}},
- {1091, {wxImage, blurVertical, 1}},
- {1092, {wxImage, convertAlphaToMask, 1}},
- {1093, {wxImage, convertToGreyscale, 1}},
- {1094, {wxImage, convertToMono, 3}},
- {1095, {wxImage, copy, 0}},
- {1096, {wxImage, create_3, 3}},
- {1097, {wxImage, create_4, 4}},
- {1098, {wxImage, create_5, 5}},
- {1099, {wxImage, 'Destroy', 0}},
- {1100, {wxImage, findFirstUnusedColour, 4}},
- {1101, {wxImage, getImageExtWildcard, 0}},
- {1102, {wxImage, getAlpha_2, 2}},
- {1103, {wxImage, getAlpha_0, 0}},
- {1104, {wxImage, getBlue, 2}},
- {1105, {wxImage, getData, 0}},
- {1106, {wxImage, getGreen, 2}},
- {1107, {wxImage, getImageCount, 2}},
- {1108, {wxImage, getHeight, 0}},
- {1109, {wxImage, getMaskBlue, 0}},
- {1110, {wxImage, getMaskGreen, 0}},
- {1111, {wxImage, getMaskRed, 0}},
- {1112, {wxImage, getOrFindMaskColour, 3}},
- {1113, {wxImage, getPalette, 0}},
- {1114, {wxImage, getRed, 2}},
- {1115, {wxImage, getSubImage, 1}},
- {1116, {wxImage, getWidth, 0}},
- {1117, {wxImage, hasAlpha, 0}},
- {1118, {wxImage, hasMask, 0}},
- {1119, {wxImage, getOption, 1}},
- {1120, {wxImage, getOptionInt, 1}},
- {1121, {wxImage, hasOption, 1}},
- {1122, {wxImage, initAlpha, 0}},
- {1123, {wxImage, initStandardHandlers, 0}},
- {1124, {wxImage, isTransparent, 3}},
- {1125, {wxImage, loadFile_2, 2}},
- {1126, {wxImage, loadFile_3, 3}},
- {1127, {wxImage, ok, 0}},
- {1128, {wxImage, removeHandler, 1}},
- {1129, {wxImage, mirror, 1}},
- {1130, {wxImage, replace, 6}},
- {1131, {wxImage, rescale, 3}},
- {1132, {wxImage, resize, 3}},
- {1133, {wxImage, rotate, 3}},
- {1134, {wxImage, rotateHue, 1}},
- {1135, {wxImage, rotate90, 1}},
- {1136, {wxImage, saveFile_1, 1}},
- {1137, {wxImage, saveFile_2_0, 2}},
- {1138, {wxImage, saveFile_2_1, 2}},
- {1139, {wxImage, scale, 3}},
- {1140, {wxImage, size, 3}},
- {1141, {wxImage, setAlpha_3, 3}},
- {1142, {wxImage, setAlpha_2, 2}},
- {1143, {wxImage, setData_2, 2}},
- {1144, {wxImage, setData_4, 4}},
- {1145, {wxImage, setMask, 1}},
- {1146, {wxImage, setMaskColour, 3}},
- {1147, {wxImage, setMaskFromImage, 4}},
- {1148, {wxImage, setOption_2_1, 2}},
- {1149, {wxImage, setOption_2_0, 2}},
- {1150, {wxImage, setPalette, 1}},
- {1151, {wxImage, setRGB_5, 5}},
- {1152, {wxImage, setRGB_4, 4}},
- {1153, {wxImage, 'Destroy', undefined}},
- {1154, {wxBrush, new_0, 0}},
- {1155, {wxBrush, new_2, 2}},
- {1156, {wxBrush, new_1, 1}},
- {1158, {wxBrush, destruct, 0}},
- {1159, {wxBrush, getColour, 0}},
- {1160, {wxBrush, getStipple, 0}},
- {1161, {wxBrush, getStyle, 0}},
- {1162, {wxBrush, isHatch, 0}},
- {1163, {wxBrush, isOk, 0}},
- {1164, {wxBrush, setColour_1, 1}},
- {1165, {wxBrush, setColour_3, 3}},
- {1166, {wxBrush, setStipple, 1}},
- {1167, {wxBrush, setStyle, 1}},
- {1168, {wxPen, new_0, 0}},
- {1169, {wxPen, new_2, 2}},
- {1170, {wxPen, destruct, 0}},
- {1171, {wxPen, getCap, 0}},
- {1172, {wxPen, getColour, 0}},
- {1173, {wxPen, getJoin, 0}},
- {1174, {wxPen, getStyle, 0}},
- {1175, {wxPen, getWidth, 0}},
- {1176, {wxPen, isOk, 0}},
- {1177, {wxPen, setCap, 1}},
- {1178, {wxPen, setColour_1, 1}},
- {1179, {wxPen, setColour_3, 3}},
- {1180, {wxPen, setJoin, 1}},
- {1181, {wxPen, setStyle, 1}},
- {1182, {wxPen, setWidth, 1}},
- {1183, {wxRegion, new_0, 0}},
- {1184, {wxRegion, new_4, 4}},
- {1185, {wxRegion, new_2, 2}},
- {1186, {wxRegion, new_1_1, 1}},
- {1188, {wxRegion, new_1_0, 1}},
- {1190, {wxRegion, destruct, 0}},
- {1191, {wxRegion, clear, 0}},
- {1192, {wxRegion, contains_2, 2}},
- {1193, {wxRegion, contains_1_0, 1}},
- {1194, {wxRegion, contains_4, 4}},
- {1195, {wxRegion, contains_1_1, 1}},
- {1196, {wxRegion, convertToBitmap, 0}},
- {1197, {wxRegion, getBox, 0}},
- {1198, {wxRegion, intersect_4, 4}},
- {1199, {wxRegion, intersect_1_1, 1}},
- {1200, {wxRegion, intersect_1_0, 1}},
- {1201, {wxRegion, isEmpty, 0}},
- {1202, {wxRegion, subtract_4, 4}},
- {1203, {wxRegion, subtract_1_1, 1}},
- {1204, {wxRegion, subtract_1_0, 1}},
- {1205, {wxRegion, offset_2, 2}},
- {1206, {wxRegion, offset_1, 1}},
- {1207, {wxRegion, union_4, 4}},
- {1208, {wxRegion, union_1_2, 1}},
- {1209, {wxRegion, union_1_1, 1}},
- {1210, {wxRegion, union_1_0, 1}},
- {1211, {wxRegion, union_3, 3}},
- {1212, {wxRegion, xor_4, 4}},
- {1213, {wxRegion, xor_1_1, 1}},
- {1214, {wxRegion, xor_1_0, 1}},
- {1215, {wxAcceleratorTable, new_0, 0}},
- {1216, {wxAcceleratorTable, new_2, 2}},
- {1217, {wxAcceleratorTable, destruct, 0}},
- {1218, {wxAcceleratorTable, ok, 0}},
- {1219, {wxAcceleratorEntry, new_1_0, 1}},
- {1220, {wxAcceleratorEntry, new_1_1, 1}},
- {1221, {wxAcceleratorEntry, getCommand, 0}},
- {1222, {wxAcceleratorEntry, getFlags, 0}},
- {1223, {wxAcceleratorEntry, getKeyCode, 0}},
- {1224, {wxAcceleratorEntry, set, 4}},
- {1225, {wxAcceleratorEntry, 'Destroy', undefined}},
- {1230, {wxCaret, new_3, 3}},
- {1231, {wxCaret, new_2, 2}},
- {1233, {wxCaret, destruct, 0}},
- {1234, {wxCaret, create_3, 3}},
- {1235, {wxCaret, create_2, 2}},
- {1236, {wxCaret, getBlinkTime, 0}},
- {1238, {wxCaret, getPosition, 0}},
- {1240, {wxCaret, getSize, 0}},
- {1241, {wxCaret, getWindow, 0}},
- {1242, {wxCaret, hide, 0}},
- {1243, {wxCaret, isOk, 0}},
- {1244, {wxCaret, isVisible, 0}},
- {1245, {wxCaret, move_2, 2}},
- {1246, {wxCaret, move_1, 1}},
- {1247, {wxCaret, setBlinkTime, 1}},
- {1248, {wxCaret, setSize_2, 2}},
- {1249, {wxCaret, setSize_1, 1}},
- {1250, {wxCaret, show, 1}},
- {1251, {wxSizer, add_2_1, 2}},
- {1252, {wxSizer, add_2_0, 2}},
- {1253, {wxSizer, add_3, 3}},
- {1254, {wxSizer, add_2_3, 2}},
- {1255, {wxSizer, add_2_2, 2}},
- {1256, {wxSizer, addSpacer, 1}},
- {1257, {wxSizer, addStretchSpacer, 1}},
- {1258, {wxSizer, calcMin, 0}},
- {1259, {wxSizer, clear, 1}},
- {1260, {wxSizer, detach_1_2, 1}},
- {1261, {wxSizer, detach_1_1, 1}},
- {1262, {wxSizer, detach_1_0, 1}},
- {1263, {wxSizer, fit, 1}},
- {1264, {wxSizer, fitInside, 1}},
- {1265, {wxSizer, getChildren, 0}},
- {1266, {wxSizer, getItem_2_1, 2}},
- {1267, {wxSizer, getItem_2_0, 2}},
- {1268, {wxSizer, getItem_1, 1}},
- {1269, {wxSizer, getSize, 0}},
- {1270, {wxSizer, getPosition, 0}},
- {1271, {wxSizer, getMinSize, 0}},
- {1272, {wxSizer, hide_2_0, 2}},
- {1273, {wxSizer, hide_2_1, 2}},
- {1274, {wxSizer, hide_1, 1}},
- {1275, {wxSizer, insert_3_1, 3}},
- {1276, {wxSizer, insert_3_0, 3}},
- {1277, {wxSizer, insert_4, 4}},
- {1278, {wxSizer, insert_3_3, 3}},
- {1279, {wxSizer, insert_3_2, 3}},
- {1280, {wxSizer, insert_2, 2}},
- {1281, {wxSizer, insertSpacer, 2}},
- {1282, {wxSizer, insertStretchSpacer, 2}},
- {1283, {wxSizer, isShown_1_2, 1}},
- {1284, {wxSizer, isShown_1_1, 1}},
- {1285, {wxSizer, isShown_1_0, 1}},
- {1286, {wxSizer, layout, 0}},
- {1287, {wxSizer, prepend_2_1, 2}},
- {1288, {wxSizer, prepend_2_0, 2}},
- {1289, {wxSizer, prepend_3, 3}},
- {1290, {wxSizer, prepend_2_3, 2}},
- {1291, {wxSizer, prepend_2_2, 2}},
- {1292, {wxSizer, prepend_1, 1}},
- {1293, {wxSizer, prependSpacer, 1}},
- {1294, {wxSizer, prependStretchSpacer, 1}},
- {1295, {wxSizer, recalcSizes, 0}},
- {1296, {wxSizer, remove_1_1, 1}},
- {1297, {wxSizer, remove_1_0, 1}},
- {1298, {wxSizer, replace_3_1, 3}},
- {1299, {wxSizer, replace_3_0, 3}},
- {1300, {wxSizer, replace_2, 2}},
- {1301, {wxSizer, setDimension, 4}},
- {1302, {wxSizer, setMinSize_2, 2}},
- {1303, {wxSizer, setMinSize_1, 1}},
- {1304, {wxSizer, setItemMinSize_3_2, 3}},
- {1305, {wxSizer, setItemMinSize_2_2, 2}},
- {1306, {wxSizer, setItemMinSize_3_1, 3}},
- {1307, {wxSizer, setItemMinSize_2_1, 2}},
- {1308, {wxSizer, setItemMinSize_3_0, 3}},
- {1309, {wxSizer, setItemMinSize_2_0, 2}},
- {1310, {wxSizer, setSizeHints, 1}},
- {1311, {wxSizer, setVirtualSizeHints, 1}},
- {1312, {wxSizer, show_2_2, 2}},
- {1313, {wxSizer, show_2_1, 2}},
- {1314, {wxSizer, show_2_0, 2}},
- {1315, {wxSizer, show_1, 1}},
- {1316, {wxSizerFlags, new, 1}},
- {1317, {wxSizerFlags, align, 1}},
- {1318, {wxSizerFlags, border_2, 2}},
- {1319, {wxSizerFlags, border_1, 1}},
- {1320, {wxSizerFlags, center, 0}},
- {1321, {wxSizerFlags, centre, 0}},
- {1322, {wxSizerFlags, expand, 0}},
- {1323, {wxSizerFlags, left, 0}},
- {1324, {wxSizerFlags, proportion, 1}},
- {1325, {wxSizerFlags, right, 0}},
- {1326, {wxSizerFlags, 'Destroy', undefined}},
- {1327, {wxSizerItem, new_5_1, 5}},
- {1328, {wxSizerItem, new_2_1, 2}},
- {1329, {wxSizerItem, new_5_0, 5}},
- {1330, {wxSizerItem, new_2_0, 2}},
- {1331, {wxSizerItem, new_6, 6}},
- {1332, {wxSizerItem, new_3, 3}},
- {1333, {wxSizerItem, new_0, 0}},
- {1334, {wxSizerItem, destruct, 0}},
- {1335, {wxSizerItem, calcMin, 0}},
- {1336, {wxSizerItem, deleteWindows, 0}},
- {1337, {wxSizerItem, detachSizer, 0}},
- {1338, {wxSizerItem, getBorder, 0}},
- {1339, {wxSizerItem, getFlag, 0}},
- {1340, {wxSizerItem, getMinSize, 0}},
- {1341, {wxSizerItem, getPosition, 0}},
- {1342, {wxSizerItem, getProportion, 0}},
- {1343, {wxSizerItem, getRatio, 0}},
- {1344, {wxSizerItem, getRect, 0}},
- {1345, {wxSizerItem, getSize, 0}},
- {1346, {wxSizerItem, getSizer, 0}},
- {1347, {wxSizerItem, getSpacer, 0}},
- {1348, {wxSizerItem, getUserData, 0}},
- {1349, {wxSizerItem, getWindow, 0}},
- {1350, {wxSizerItem, isSizer, 0}},
- {1351, {wxSizerItem, isShown, 0}},
- {1352, {wxSizerItem, isSpacer, 0}},
- {1353, {wxSizerItem, isWindow, 0}},
- {1354, {wxSizerItem, setBorder, 1}},
- {1355, {wxSizerItem, setDimension, 2}},
- {1356, {wxSizerItem, setFlag, 1}},
- {1357, {wxSizerItem, setInitSize, 2}},
- {1358, {wxSizerItem, setMinSize_1, 1}},
- {1359, {wxSizerItem, setMinSize_2, 2}},
- {1360, {wxSizerItem, setProportion, 1}},
- {1361, {wxSizerItem, setRatio_2, 2}},
- {1362, {wxSizerItem, setRatio_1_1, 1}},
- {1363, {wxSizerItem, setRatio_1_0, 1}},
- {1364, {wxSizerItem, setSizer, 1}},
- {1365, {wxSizerItem, setSpacer_1, 1}},
- {1366, {wxSizerItem, setSpacer_2, 2}},
- {1367, {wxSizerItem, setWindow, 1}},
- {1368, {wxSizerItem, show, 1}},
- {1369, {wxBoxSizer, new, 1}},
- {1370, {wxBoxSizer, getOrientation, 0}},
- {1371, {wxBoxSizer, 'Destroy', undefined}},
- {1372, {wxStaticBoxSizer, new_2, 2}},
- {1373, {wxStaticBoxSizer, new_3, 3}},
- {1374, {wxStaticBoxSizer, getStaticBox, 0}},
- {1375, {wxStaticBoxSizer, 'Destroy', undefined}},
- {1376, {wxGridSizer, new_4, 4}},
- {1377, {wxGridSizer, new_2, 2}},
- {1378, {wxGridSizer, getCols, 0}},
- {1379, {wxGridSizer, getHGap, 0}},
- {1380, {wxGridSizer, getRows, 0}},
- {1381, {wxGridSizer, getVGap, 0}},
- {1382, {wxGridSizer, setCols, 1}},
- {1383, {wxGridSizer, setHGap, 1}},
- {1384, {wxGridSizer, setRows, 1}},
- {1385, {wxGridSizer, setVGap, 1}},
- {1386, {wxGridSizer, 'Destroy', undefined}},
- {1387, {wxFlexGridSizer, new_4, 4}},
- {1388, {wxFlexGridSizer, new_2, 2}},
- {1389, {wxFlexGridSizer, addGrowableCol, 2}},
- {1390, {wxFlexGridSizer, addGrowableRow, 2}},
- {1391, {wxFlexGridSizer, getFlexibleDirection, 0}},
- {1392, {wxFlexGridSizer, getNonFlexibleGrowMode, 0}},
- {1393, {wxFlexGridSizer, removeGrowableCol, 1}},
- {1394, {wxFlexGridSizer, removeGrowableRow, 1}},
- {1395, {wxFlexGridSizer, setFlexibleDirection, 1}},
- {1396, {wxFlexGridSizer, setNonFlexibleGrowMode, 1}},
- {1397, {wxFlexGridSizer, 'Destroy', undefined}},
- {1398, {wxGridBagSizer, new, 1}},
- {1399, {wxGridBagSizer, add_3_2, 3}},
- {1400, {wxGridBagSizer, add_3_1, 3}},
- {1401, {wxGridBagSizer, add_4, 4}},
- {1402, {wxGridBagSizer, add_1_0, 1}},
- {1403, {wxGridBagSizer, add_2_1, 2}},
- {1404, {wxGridBagSizer, add_2_0, 2}},
- {1405, {wxGridBagSizer, add_3_0, 3}},
- {1406, {wxGridBagSizer, add_1_1, 1}},
- {1407, {wxGridBagSizer, calcMin, 0}},
- {1408, {wxGridBagSizer, checkForIntersection_2, 2}},
- {1409, {wxGridBagSizer, checkForIntersection_3, 3}},
- {1410, {wxGridBagSizer, findItem_1_1, 1}},
- {1411, {wxGridBagSizer, findItem_1_0, 1}},
- {1412, {wxGridBagSizer, findItemAtPoint, 1}},
- {1413, {wxGridBagSizer, findItemAtPosition, 1}},
- {1414, {wxGridBagSizer, findItemWithData, 1}},
- {1415, {wxGridBagSizer, getCellSize, 2}},
- {1416, {wxGridBagSizer, getEmptyCellSize, 0}},
- {1417, {wxGridBagSizer, getItemPosition_1_2, 1}},
- {1418, {wxGridBagSizer, getItemPosition_1_1, 1}},
- {1419, {wxGridBagSizer, getItemPosition_1_0, 1}},
- {1420, {wxGridBagSizer, getItemSpan_1_2, 1}},
- {1421, {wxGridBagSizer, getItemSpan_1_1, 1}},
- {1422, {wxGridBagSizer, getItemSpan_1_0, 1}},
- {1423, {wxGridBagSizer, setEmptyCellSize, 1}},
- {1424, {wxGridBagSizer, setItemPosition_2_2, 2}},
- {1425, {wxGridBagSizer, setItemPosition_2_1, 2}},
- {1426, {wxGridBagSizer, setItemPosition_2_0, 2}},
- {1427, {wxGridBagSizer, setItemSpan_2_2, 2}},
- {1428, {wxGridBagSizer, setItemSpan_2_1, 2}},
- {1429, {wxGridBagSizer, setItemSpan_2_0, 2}},
- {1430, {wxGridBagSizer, 'Destroy', undefined}},
- {1431, {wxStdDialogButtonSizer, new, 0}},
- {1432, {wxStdDialogButtonSizer, addButton, 1}},
- {1433, {wxStdDialogButtonSizer, realize, 0}},
- {1434, {wxStdDialogButtonSizer, setAffirmativeButton, 1}},
- {1435, {wxStdDialogButtonSizer, setCancelButton, 1}},
- {1436, {wxStdDialogButtonSizer, setNegativeButton, 1}},
- {1437, {wxStdDialogButtonSizer, 'Destroy', undefined}},
- {1438, {wxFont, new_0, 0}},
- {1439, {wxFont, new_1, 1}},
- {1440, {wxFont, new_5, 5}},
- {1442, {wxFont, destruct, 0}},
- {1443, {wxFont, isFixedWidth, 0}},
- {1444, {wxFont, getDefaultEncoding, 0}},
- {1445, {wxFont, getFaceName, 0}},
- {1446, {wxFont, getFamily, 0}},
- {1447, {wxFont, getNativeFontInfoDesc, 0}},
- {1448, {wxFont, getNativeFontInfoUserDesc, 0}},
- {1449, {wxFont, getPointSize, 0}},
- {1450, {wxFont, getStyle, 0}},
- {1451, {wxFont, getUnderlined, 0}},
- {1452, {wxFont, getWeight, 0}},
- {1453, {wxFont, ok, 0}},
- {1454, {wxFont, setDefaultEncoding, 1}},
- {1455, {wxFont, setFaceName, 1}},
- {1456, {wxFont, setFamily, 1}},
- {1457, {wxFont, setPointSize, 1}},
- {1458, {wxFont, setStyle, 1}},
- {1459, {wxFont, setUnderlined, 1}},
- {1460, {wxFont, setWeight, 1}},
- {1461, {wxToolTip, enable, 1}},
- {1462, {wxToolTip, setDelay, 1}},
- {1463, {wxToolTip, new, 1}},
- {1464, {wxToolTip, setTip, 1}},
- {1465, {wxToolTip, getTip, 0}},
- {1466, {wxToolTip, getWindow, 0}},
- {1467, {wxToolTip, 'Destroy', undefined}},
- {1469, {wxButton, new_3, 3}},
- {1470, {wxButton, new_0, 0}},
- {1471, {wxButton, destruct, 0}},
- {1472, {wxButton, create, 3}},
- {1473, {wxButton, getDefaultSize, 0}},
- {1474, {wxButton, setDefault, 0}},
- {1475, {wxButton, setLabel, 1}},
- {1477, {wxBitmapButton, new_4, 4}},
- {1478, {wxBitmapButton, new_0, 0}},
- {1479, {wxBitmapButton, create, 4}},
- {1480, {wxBitmapButton, getBitmapDisabled, 0}},
- {1482, {wxBitmapButton, getBitmapFocus, 0}},
- {1484, {wxBitmapButton, getBitmapLabel, 0}},
- {1486, {wxBitmapButton, getBitmapSelected, 0}},
- {1488, {wxBitmapButton, setBitmapDisabled, 1}},
- {1489, {wxBitmapButton, setBitmapFocus, 1}},
- {1490, {wxBitmapButton, setBitmapLabel, 1}},
- {1491, {wxBitmapButton, setBitmapSelected, 1}},
- {1492, {wxBitmapButton, 'Destroy', undefined}},
- {1493, {wxToggleButton, new_0, 0}},
- {1494, {wxToggleButton, new_4, 4}},
- {1495, {wxToggleButton, create, 4}},
- {1496, {wxToggleButton, getValue, 0}},
- {1497, {wxToggleButton, setValue, 1}},
- {1498, {wxToggleButton, 'Destroy', undefined}},
- {1499, {wxCalendarCtrl, new_0, 0}},
- {1500, {wxCalendarCtrl, new_3, 3}},
- {1501, {wxCalendarCtrl, create, 3}},
- {1502, {wxCalendarCtrl, destruct, 0}},
- {1503, {wxCalendarCtrl, setDate, 1}},
- {1504, {wxCalendarCtrl, getDate, 0}},
- {1505, {wxCalendarCtrl, enableYearChange, 1}},
- {1506, {wxCalendarCtrl, enableMonthChange, 1}},
- {1507, {wxCalendarCtrl, enableHolidayDisplay, 1}},
- {1508, {wxCalendarCtrl, setHeaderColours, 2}},
- {1509, {wxCalendarCtrl, getHeaderColourFg, 0}},
- {1510, {wxCalendarCtrl, getHeaderColourBg, 0}},
- {1511, {wxCalendarCtrl, setHighlightColours, 2}},
- {1512, {wxCalendarCtrl, getHighlightColourFg, 0}},
- {1513, {wxCalendarCtrl, getHighlightColourBg, 0}},
- {1514, {wxCalendarCtrl, setHolidayColours, 2}},
- {1515, {wxCalendarCtrl, getHolidayColourFg, 0}},
- {1516, {wxCalendarCtrl, getHolidayColourBg, 0}},
- {1517, {wxCalendarCtrl, getAttr, 1}},
- {1518, {wxCalendarCtrl, setAttr, 2}},
- {1519, {wxCalendarCtrl, setHoliday, 1}},
- {1520, {wxCalendarCtrl, resetAttr, 1}},
- {1521, {wxCalendarCtrl, hitTest, 2}},
- {1522, {wxCalendarDateAttr, new_0, 0}},
- {1523, {wxCalendarDateAttr, new_2_1, 2}},
- {1524, {wxCalendarDateAttr, new_2_0, 2}},
- {1525, {wxCalendarDateAttr, setTextColour, 1}},
- {1526, {wxCalendarDateAttr, setBackgroundColour, 1}},
- {1527, {wxCalendarDateAttr, setBorderColour, 1}},
- {1528, {wxCalendarDateAttr, setFont, 1}},
- {1529, {wxCalendarDateAttr, setBorder, 1}},
- {1530, {wxCalendarDateAttr, setHoliday, 1}},
- {1531, {wxCalendarDateAttr, hasTextColour, 0}},
- {1532, {wxCalendarDateAttr, hasBackgroundColour, 0}},
- {1533, {wxCalendarDateAttr, hasBorderColour, 0}},
- {1534, {wxCalendarDateAttr, hasFont, 0}},
- {1535, {wxCalendarDateAttr, hasBorder, 0}},
- {1536, {wxCalendarDateAttr, isHoliday, 0}},
- {1537, {wxCalendarDateAttr, getTextColour, 0}},
- {1538, {wxCalendarDateAttr, getBackgroundColour, 0}},
- {1539, {wxCalendarDateAttr, getBorderColour, 0}},
- {1540, {wxCalendarDateAttr, getFont, 0}},
- {1541, {wxCalendarDateAttr, getBorder, 0}},
- {1542, {wxCalendarDateAttr, 'Destroy', undefined}},
- {1544, {wxCheckBox, new_4, 4}},
- {1545, {wxCheckBox, new_0, 0}},
- {1546, {wxCheckBox, create, 4}},
- {1547, {wxCheckBox, getValue, 0}},
- {1548, {wxCheckBox, get3StateValue, 0}},
- {1549, {wxCheckBox, is3rdStateAllowedForUser, 0}},
- {1550, {wxCheckBox, is3State, 0}},
- {1551, {wxCheckBox, isChecked, 0}},
- {1552, {wxCheckBox, setValue, 1}},
- {1553, {wxCheckBox, set3StateValue, 1}},
- {1554, {wxCheckBox, 'Destroy', undefined}},
- {1555, {wxCheckListBox, new_0, 0}},
- {1557, {wxCheckListBox, new_3, 3}},
- {1558, {wxCheckListBox, check, 2}},
- {1559, {wxCheckListBox, isChecked, 1}},
- {1560, {wxCheckListBox, 'Destroy', undefined}},
- {1563, {wxChoice, new_3, 3}},
- {1564, {wxChoice, new_0, 0}},
- {1566, {wxChoice, destruct, 0}},
- {1568, {wxChoice, create, 6}},
- {1569, {wxChoice, delete, 1}},
- {1570, {wxChoice, getColumns, 0}},
- {1571, {wxChoice, setColumns, 1}},
- {1572, {wxComboBox, new_0, 0}},
- {1574, {wxComboBox, new_3, 3}},
- {1575, {wxComboBox, destruct, 0}},
- {1577, {wxComboBox, create, 7}},
- {1578, {wxComboBox, canCopy, 0}},
- {1579, {wxComboBox, canCut, 0}},
- {1580, {wxComboBox, canPaste, 0}},
- {1581, {wxComboBox, canRedo, 0}},
- {1582, {wxComboBox, canUndo, 0}},
- {1583, {wxComboBox, copy, 0}},
- {1584, {wxComboBox, cut, 0}},
- {1585, {wxComboBox, getInsertionPoint, 0}},
- {1586, {wxComboBox, getLastPosition, 0}},
- {1587, {wxComboBox, getValue, 0}},
- {1588, {wxComboBox, paste, 0}},
- {1589, {wxComboBox, redo, 0}},
- {1590, {wxComboBox, replace, 3}},
- {1591, {wxComboBox, remove, 2}},
- {1592, {wxComboBox, setInsertionPoint, 1}},
- {1593, {wxComboBox, setInsertionPointEnd, 0}},
- {1594, {wxComboBox, setSelection_1, 1}},
- {1595, {wxComboBox, setSelection_2, 2}},
- {1596, {wxComboBox, setValue, 1}},
- {1597, {wxComboBox, undo, 0}},
- {1598, {wxGauge, new_0, 0}},
- {1599, {wxGauge, new_4, 4}},
- {1600, {wxGauge, create, 4}},
- {1601, {wxGauge, getBezelFace, 0}},
- {1602, {wxGauge, getRange, 0}},
- {1603, {wxGauge, getShadowWidth, 0}},
- {1604, {wxGauge, getValue, 0}},
- {1605, {wxGauge, isVertical, 0}},
- {1606, {wxGauge, setBezelFace, 1}},
- {1607, {wxGauge, setRange, 1}},
- {1608, {wxGauge, setShadowWidth, 1}},
+ {284, {wxWindow, setTransparent, 1}},
+ {285, {wxWindow, canSetTransparent, 0}},
+ {286, {wxWindow, isDoubleBuffered, 0}},
+ {287, {wxWindow, setDoubleBuffered, 1}},
+ {288, {wxTopLevelWindow, getIcon, 0}},
+ {289, {wxTopLevelWindow, getIcons, 0}},
+ {290, {wxTopLevelWindow, getTitle, 0}},
+ {291, {wxTopLevelWindow, isActive, 0}},
+ {292, {wxTopLevelWindow, iconize, 1}},
+ {293, {wxTopLevelWindow, isFullScreen, 0}},
+ {294, {wxTopLevelWindow, isIconized, 0}},
+ {295, {wxTopLevelWindow, isMaximized, 0}},
+ {296, {wxTopLevelWindow, maximize, 1}},
+ {297, {wxTopLevelWindow, requestUserAttention, 1}},
+ {298, {wxTopLevelWindow, setIcon, 1}},
+ {299, {wxTopLevelWindow, setIcons, 1}},
+ {300, {wxTopLevelWindow, centerOnScreen, 1}},
+ {301, {wxTopLevelWindow, centreOnScreen, 1}},
+ {303, {wxTopLevelWindow, setShape, 1}},
+ {304, {wxTopLevelWindow, setTitle, 1}},
+ {305, {wxTopLevelWindow, showFullScreen, 2}},
+ {307, {wxFrame, new_4, 4}},
+ {308, {wxFrame, new_0, 0}},
+ {310, {wxFrame, destruct, 0}},
+ {311, {wxFrame, create, 4}},
+ {312, {wxFrame, createStatusBar, 1}},
+ {313, {wxFrame, createToolBar, 1}},
+ {314, {wxFrame, getClientAreaOrigin, 0}},
+ {315, {wxFrame, getMenuBar, 0}},
+ {316, {wxFrame, getStatusBar, 0}},
+ {317, {wxFrame, getStatusBarPane, 0}},
+ {318, {wxFrame, getToolBar, 0}},
+ {319, {wxFrame, processCommand, 1}},
+ {320, {wxFrame, sendSizeEvent, 0}},
+ {321, {wxFrame, setMenuBar, 1}},
+ {322, {wxFrame, setStatusBar, 1}},
+ {323, {wxFrame, setStatusBarPane, 1}},
+ {324, {wxFrame, setStatusText, 2}},
+ {325, {wxFrame, setStatusWidths, 2}},
+ {326, {wxFrame, setToolBar, 1}},
+ {327, {wxMiniFrame, new_0, 0}},
+ {328, {wxMiniFrame, new_4, 4}},
+ {329, {wxMiniFrame, create, 4}},
+ {330, {wxMiniFrame, 'Destroy', undefined}},
+ {331, {wxSplashScreen, new_0, 0}},
+ {332, {wxSplashScreen, new_6, 6}},
+ {333, {wxSplashScreen, destruct, 0}},
+ {334, {wxSplashScreen, getSplashStyle, 0}},
+ {335, {wxSplashScreen, getTimeout, 0}},
+ {336, {wxPanel, new_0, 0}},
+ {337, {wxPanel, new_6, 6}},
+ {338, {wxPanel, new_2, 2}},
+ {339, {wxPanel, destruct, 0}},
+ {340, {wxPanel, initDialog, 0}},
+ {341, {wxPanel, setFocusIgnoringChildren, 0}},
+ {342, {wxScrolledWindow, new_0, 0}},
+ {343, {wxScrolledWindow, new_2, 2}},
+ {344, {wxScrolledWindow, destruct, 0}},
+ {345, {wxScrolledWindow, calcScrolledPosition_4, 4}},
+ {346, {wxScrolledWindow, calcScrolledPosition_1, 1}},
+ {347, {wxScrolledWindow, calcUnscrolledPosition_4, 4}},
+ {348, {wxScrolledWindow, calcUnscrolledPosition_1, 1}},
+ {349, {wxScrolledWindow, enableScrolling, 2}},
+ {350, {wxScrolledWindow, getScrollPixelsPerUnit, 2}},
+ {351, {wxScrolledWindow, getViewStart, 2}},
+ {352, {wxScrolledWindow, doPrepareDC, 1}},
+ {353, {wxScrolledWindow, prepareDC, 1}},
+ {354, {wxScrolledWindow, scroll, 2}},
+ {355, {wxScrolledWindow, setScrollbars, 5}},
+ {356, {wxScrolledWindow, setScrollRate, 2}},
+ {357, {wxScrolledWindow, setTargetWindow, 1}},
+ {358, {wxSashWindow, new_0, 0}},
+ {359, {wxSashWindow, new_2, 2}},
+ {360, {wxSashWindow, destruct, 0}},
+ {361, {wxSashWindow, getSashVisible, 1}},
+ {362, {wxSashWindow, getMaximumSizeX, 0}},
+ {363, {wxSashWindow, getMaximumSizeY, 0}},
+ {364, {wxSashWindow, getMinimumSizeX, 0}},
+ {365, {wxSashWindow, getMinimumSizeY, 0}},
+ {366, {wxSashWindow, setMaximumSizeX, 1}},
+ {367, {wxSashWindow, setMaximumSizeY, 1}},
+ {368, {wxSashWindow, setMinimumSizeX, 1}},
+ {369, {wxSashWindow, setMinimumSizeY, 1}},
+ {370, {wxSashWindow, setSashVisible, 2}},
+ {371, {wxSashLayoutWindow, new_0, 0}},
+ {372, {wxSashLayoutWindow, new_2, 2}},
+ {373, {wxSashLayoutWindow, create, 2}},
+ {374, {wxSashLayoutWindow, getAlignment, 0}},
+ {375, {wxSashLayoutWindow, getOrientation, 0}},
+ {376, {wxSashLayoutWindow, setAlignment, 1}},
+ {377, {wxSashLayoutWindow, setDefaultSize, 1}},
+ {378, {wxSashLayoutWindow, setOrientation, 1}},
+ {379, {wxSashLayoutWindow, 'Destroy', undefined}},
+ {380, {wxGrid, new_0, 0}},
+ {381, {wxGrid, new_3, 3}},
+ {382, {wxGrid, new_4, 4}},
+ {383, {wxGrid, destruct, 0}},
+ {384, {wxGrid, appendCols, 1}},
+ {385, {wxGrid, appendRows, 1}},
+ {386, {wxGrid, autoSize, 0}},
+ {387, {wxGrid, autoSizeColumn, 2}},
+ {388, {wxGrid, autoSizeColumns, 1}},
+ {389, {wxGrid, autoSizeRow, 2}},
+ {390, {wxGrid, autoSizeRows, 1}},
+ {391, {wxGrid, beginBatch, 0}},
+ {392, {wxGrid, blockToDeviceRect, 2}},
+ {393, {wxGrid, canDragColSize, 0}},
+ {394, {wxGrid, canDragRowSize, 0}},
+ {395, {wxGrid, canDragGridSize, 0}},
+ {396, {wxGrid, canEnableCellControl, 0}},
+ {397, {wxGrid, cellToRect_2, 2}},
+ {398, {wxGrid, cellToRect_1, 1}},
+ {399, {wxGrid, clearGrid, 0}},
+ {400, {wxGrid, clearSelection, 0}},
+ {401, {wxGrid, createGrid, 3}},
+ {402, {wxGrid, deleteCols, 1}},
+ {403, {wxGrid, deleteRows, 1}},
+ {404, {wxGrid, disableCellEditControl, 0}},
+ {405, {wxGrid, disableDragColSize, 0}},
+ {406, {wxGrid, disableDragGridSize, 0}},
+ {407, {wxGrid, disableDragRowSize, 0}},
+ {408, {wxGrid, enableCellEditControl, 1}},
+ {409, {wxGrid, enableDragColSize, 1}},
+ {410, {wxGrid, enableDragGridSize, 1}},
+ {411, {wxGrid, enableDragRowSize, 1}},
+ {412, {wxGrid, enableEditing, 1}},
+ {413, {wxGrid, enableGridLines, 1}},
+ {414, {wxGrid, endBatch, 0}},
+ {415, {wxGrid, fit, 0}},
+ {416, {wxGrid, forceRefresh, 0}},
+ {417, {wxGrid, getBatchCount, 0}},
+ {418, {wxGrid, getCellAlignment, 4}},
+ {419, {wxGrid, getCellBackgroundColour, 2}},
+ {420, {wxGrid, getCellEditor, 2}},
+ {421, {wxGrid, getCellFont, 2}},
+ {422, {wxGrid, getCellRenderer, 2}},
+ {423, {wxGrid, getCellTextColour, 2}},
+ {424, {wxGrid, getCellValue_2, 2}},
+ {425, {wxGrid, getCellValue_1, 1}},
+ {426, {wxGrid, getColLabelAlignment, 2}},
+ {427, {wxGrid, getColLabelSize, 0}},
+ {428, {wxGrid, getColLabelValue, 1}},
+ {429, {wxGrid, getColMinimalAcceptableWidth, 0}},
+ {430, {wxGrid, getDefaultCellAlignment, 2}},
+ {431, {wxGrid, getDefaultCellBackgroundColour, 0}},
+ {432, {wxGrid, getDefaultCellFont, 0}},
+ {433, {wxGrid, getDefaultCellTextColour, 0}},
+ {434, {wxGrid, getDefaultColLabelSize, 0}},
+ {435, {wxGrid, getDefaultColSize, 0}},
+ {436, {wxGrid, getDefaultEditor, 0}},
+ {437, {wxGrid, getDefaultEditorForCell_2, 2}},
+ {438, {wxGrid, getDefaultEditorForCell_1, 1}},
+ {439, {wxGrid, getDefaultEditorForType, 1}},
+ {440, {wxGrid, getDefaultRenderer, 0}},
+ {441, {wxGrid, getDefaultRendererForCell, 2}},
+ {442, {wxGrid, getDefaultRendererForType, 1}},
+ {443, {wxGrid, getDefaultRowLabelSize, 0}},
+ {444, {wxGrid, getDefaultRowSize, 0}},
+ {445, {wxGrid, getGridCursorCol, 0}},
+ {446, {wxGrid, getGridCursorRow, 0}},
+ {447, {wxGrid, getGridLineColour, 0}},
+ {448, {wxGrid, gridLinesEnabled, 0}},
+ {449, {wxGrid, getLabelBackgroundColour, 0}},
+ {450, {wxGrid, getLabelFont, 0}},
+ {451, {wxGrid, getLabelTextColour, 0}},
+ {452, {wxGrid, getNumberCols, 0}},
+ {453, {wxGrid, getNumberRows, 0}},
+ {454, {wxGrid, getOrCreateCellAttr, 2}},
+ {455, {wxGrid, getRowMinimalAcceptableHeight, 0}},
+ {456, {wxGrid, getRowLabelAlignment, 2}},
+ {457, {wxGrid, getRowLabelSize, 0}},
+ {458, {wxGrid, getRowLabelValue, 1}},
+ {459, {wxGrid, getRowSize, 1}},
+ {460, {wxGrid, getScrollLineX, 0}},
+ {461, {wxGrid, getScrollLineY, 0}},
+ {462, {wxGrid, getSelectedCells, 0}},
+ {463, {wxGrid, getSelectedCols, 0}},
+ {464, {wxGrid, getSelectedRows, 0}},
+ {465, {wxGrid, getSelectionBackground, 0}},
+ {466, {wxGrid, getSelectionBlockTopLeft, 0}},
+ {467, {wxGrid, getSelectionBlockBottomRight, 0}},
+ {468, {wxGrid, getSelectionForeground, 0}},
+ {469, {wxGrid, getViewWidth, 0}},
+ {470, {wxGrid, getGridWindow, 0}},
+ {471, {wxGrid, getGridRowLabelWindow, 0}},
+ {472, {wxGrid, getGridColLabelWindow, 0}},
+ {473, {wxGrid, getGridCornerLabelWindow, 0}},
+ {474, {wxGrid, hideCellEditControl, 0}},
+ {475, {wxGrid, insertCols, 1}},
+ {476, {wxGrid, insertRows, 1}},
+ {477, {wxGrid, isCellEditControlEnabled, 0}},
+ {478, {wxGrid, isCurrentCellReadOnly, 0}},
+ {479, {wxGrid, isEditable, 0}},
+ {480, {wxGrid, isInSelection_2, 2}},
+ {481, {wxGrid, isInSelection_1, 1}},
+ {482, {wxGrid, isReadOnly, 2}},
+ {483, {wxGrid, isSelection, 0}},
+ {484, {wxGrid, isVisible_3, 3}},
+ {485, {wxGrid, isVisible_2, 2}},
+ {486, {wxGrid, makeCellVisible_2, 2}},
+ {487, {wxGrid, makeCellVisible_1, 1}},
+ {488, {wxGrid, moveCursorDown, 1}},
+ {489, {wxGrid, moveCursorLeft, 1}},
+ {490, {wxGrid, moveCursorRight, 1}},
+ {491, {wxGrid, moveCursorUp, 1}},
+ {492, {wxGrid, moveCursorDownBlock, 1}},
+ {493, {wxGrid, moveCursorLeftBlock, 1}},
+ {494, {wxGrid, moveCursorRightBlock, 1}},
+ {495, {wxGrid, moveCursorUpBlock, 1}},
+ {496, {wxGrid, movePageDown, 0}},
+ {497, {wxGrid, movePageUp, 0}},
+ {498, {wxGrid, registerDataType, 3}},
+ {499, {wxGrid, saveEditControlValue, 0}},
+ {500, {wxGrid, selectAll, 0}},
+ {501, {wxGrid, selectBlock_5, 5}},
+ {502, {wxGrid, selectBlock_3, 3}},
+ {503, {wxGrid, selectCol, 2}},
+ {504, {wxGrid, selectRow, 2}},
+ {505, {wxGrid, setCellAlignment_4, 4}},
+ {506, {wxGrid, setCellAlignment_3, 3}},
+ {507, {wxGrid, setCellAlignment_1, 1}},
+ {508, {wxGrid, setCellBackgroundColour_3_0, 3}},
+ {509, {wxGrid, setCellBackgroundColour_1, 1}},
+ {510, {wxGrid, setCellBackgroundColour_3_1, 3}},
+ {511, {wxGrid, setCellEditor, 3}},
+ {512, {wxGrid, setCellFont, 3}},
+ {513, {wxGrid, setCellRenderer, 3}},
+ {514, {wxGrid, setCellTextColour_3_0, 3}},
+ {515, {wxGrid, setCellTextColour_3_1, 3}},
+ {516, {wxGrid, setCellTextColour_1, 1}},
+ {517, {wxGrid, setCellValue_3_0, 3}},
+ {518, {wxGrid, setCellValue_2, 2}},
+ {519, {wxGrid, setCellValue_3_1, 3}},
+ {520, {wxGrid, setColAttr, 2}},
+ {521, {wxGrid, setColFormatBool, 1}},
+ {522, {wxGrid, setColFormatNumber, 1}},
+ {523, {wxGrid, setColFormatFloat, 2}},
+ {524, {wxGrid, setColFormatCustom, 2}},
+ {525, {wxGrid, setColLabelAlignment, 2}},
+ {526, {wxGrid, setColLabelSize, 1}},
+ {527, {wxGrid, setColLabelValue, 2}},
+ {528, {wxGrid, setColMinimalWidth, 2}},
+ {529, {wxGrid, setColMinimalAcceptableWidth, 1}},
+ {530, {wxGrid, setColSize, 2}},
+ {531, {wxGrid, setDefaultCellAlignment, 2}},
+ {532, {wxGrid, setDefaultCellBackgroundColour, 1}},
+ {533, {wxGrid, setDefaultCellFont, 1}},
+ {534, {wxGrid, setDefaultCellTextColour, 1}},
+ {535, {wxGrid, setDefaultEditor, 1}},
+ {536, {wxGrid, setDefaultRenderer, 1}},
+ {537, {wxGrid, setDefaultColSize, 2}},
+ {538, {wxGrid, setDefaultRowSize, 2}},
+ {539, {wxGrid, setGridCursor, 2}},
+ {540, {wxGrid, setGridLineColour, 1}},
+ {541, {wxGrid, setLabelBackgroundColour, 1}},
+ {542, {wxGrid, setLabelFont, 1}},
+ {543, {wxGrid, setLabelTextColour, 1}},
+ {544, {wxGrid, setMargins, 2}},
+ {545, {wxGrid, setReadOnly, 3}},
+ {546, {wxGrid, setRowAttr, 2}},
+ {547, {wxGrid, setRowLabelAlignment, 2}},
+ {548, {wxGrid, setRowLabelSize, 1}},
+ {549, {wxGrid, setRowLabelValue, 2}},
+ {550, {wxGrid, setRowMinimalHeight, 2}},
+ {551, {wxGrid, setRowMinimalAcceptableHeight, 1}},
+ {552, {wxGrid, setRowSize, 2}},
+ {553, {wxGrid, setScrollLineX, 1}},
+ {554, {wxGrid, setScrollLineY, 1}},
+ {555, {wxGrid, setSelectionBackground, 1}},
+ {556, {wxGrid, setSelectionForeground, 1}},
+ {557, {wxGrid, setSelectionMode, 1}},
+ {558, {wxGrid, showCellEditControl, 0}},
+ {559, {wxGrid, xToCol, 2}},
+ {560, {wxGrid, xToEdgeOfCol, 1}},
+ {561, {wxGrid, yToEdgeOfRow, 1}},
+ {562, {wxGrid, yToRow, 1}},
+ {563, {wxGridCellRenderer, draw, 7}},
+ {564, {wxGridCellRenderer, getBestSize, 5}},
+ {565, {wxGridCellEditor, create, 3}},
+ {566, {wxGridCellEditor, isCreated, 0}},
+ {567, {wxGridCellEditor, setSize, 1}},
+ {568, {wxGridCellEditor, show, 2}},
+ {569, {wxGridCellEditor, paintBackground, 2}},
+ {570, {wxGridCellEditor, beginEdit, 3}},
+ {571, {wxGridCellEditor, endEdit, 3}},
+ {572, {wxGridCellEditor, reset, 0}},
+ {573, {wxGridCellEditor, startingKey, 1}},
+ {574, {wxGridCellEditor, startingClick, 0}},
+ {575, {wxGridCellEditor, handleReturn, 1}},
+ {576, {wxGridCellBoolRenderer, new, 0}},
+ {577, {wxGridCellBoolRenderer, 'Destroy', undefined}},
+ {578, {wxGridCellBoolEditor, new, 0}},
+ {579, {wxGridCellBoolEditor, isTrueValue, 1}},
+ {580, {wxGridCellBoolEditor, useStringValues, 1}},
+ {581, {wxGridCellBoolEditor, 'Destroy', undefined}},
+ {582, {wxGridCellFloatRenderer, new, 1}},
+ {583, {wxGridCellFloatRenderer, getPrecision, 0}},
+ {584, {wxGridCellFloatRenderer, getWidth, 0}},
+ {585, {wxGridCellFloatRenderer, setParameters, 1}},
+ {586, {wxGridCellFloatRenderer, setPrecision, 1}},
+ {587, {wxGridCellFloatRenderer, setWidth, 1}},
+ {588, {wxGridCellFloatRenderer, 'Destroy', undefined}},
+ {589, {wxGridCellFloatEditor, new, 1}},
+ {590, {wxGridCellFloatEditor, setParameters, 1}},
+ {591, {wxGridCellFloatEditor, 'Destroy', undefined}},
+ {592, {wxGridCellStringRenderer, new, 0}},
+ {593, {wxGridCellStringRenderer, 'Destroy', undefined}},
+ {594, {wxGridCellTextEditor, new, 0}},
+ {595, {wxGridCellTextEditor, setParameters, 1}},
+ {596, {wxGridCellTextEditor, 'Destroy', undefined}},
+ {598, {wxGridCellChoiceEditor, new, 2}},
+ {599, {wxGridCellChoiceEditor, setParameters, 1}},
+ {600, {wxGridCellChoiceEditor, 'Destroy', undefined}},
+ {601, {wxGridCellNumberRenderer, new, 0}},
+ {602, {wxGridCellNumberRenderer, 'Destroy', undefined}},
+ {603, {wxGridCellNumberEditor, new, 1}},
+ {604, {wxGridCellNumberEditor, getValue, 0}},
+ {605, {wxGridCellNumberEditor, setParameters, 1}},
+ {606, {wxGridCellNumberEditor, 'Destroy', undefined}},
+ {607, {wxGridCellAttr, setTextColour, 1}},
+ {608, {wxGridCellAttr, setBackgroundColour, 1}},
+ {609, {wxGridCellAttr, setFont, 1}},
+ {610, {wxGridCellAttr, setAlignment, 2}},
+ {611, {wxGridCellAttr, setReadOnly, 1}},
+ {612, {wxGridCellAttr, setRenderer, 1}},
+ {613, {wxGridCellAttr, setEditor, 1}},
+ {614, {wxGridCellAttr, hasTextColour, 0}},
+ {615, {wxGridCellAttr, hasBackgroundColour, 0}},
+ {616, {wxGridCellAttr, hasFont, 0}},
+ {617, {wxGridCellAttr, hasAlignment, 0}},
+ {618, {wxGridCellAttr, hasRenderer, 0}},
+ {619, {wxGridCellAttr, hasEditor, 0}},
+ {620, {wxGridCellAttr, getTextColour, 0}},
+ {621, {wxGridCellAttr, getBackgroundColour, 0}},
+ {622, {wxGridCellAttr, getFont, 0}},
+ {623, {wxGridCellAttr, getAlignment, 2}},
+ {624, {wxGridCellAttr, getRenderer, 3}},
+ {625, {wxGridCellAttr, getEditor, 3}},
+ {626, {wxGridCellAttr, isReadOnly, 0}},
+ {627, {wxGridCellAttr, setDefAttr, 1}},
+ {628, {wxDC, blit, 5}},
+ {629, {wxDC, calcBoundingBox, 2}},
+ {630, {wxDC, clear, 0}},
+ {631, {wxDC, computeScaleAndOrigin, 0}},
+ {632, {wxDC, crossHair, 1}},
+ {633, {wxDC, destroyClippingRegion, 0}},
+ {634, {wxDC, deviceToLogicalX, 1}},
+ {635, {wxDC, deviceToLogicalXRel, 1}},
+ {636, {wxDC, deviceToLogicalY, 1}},
+ {637, {wxDC, deviceToLogicalYRel, 1}},
+ {638, {wxDC, drawArc, 3}},
+ {639, {wxDC, drawBitmap, 3}},
+ {640, {wxDC, drawCheckMark, 1}},
+ {641, {wxDC, drawCircle, 2}},
+ {643, {wxDC, drawEllipse_2, 2}},
+ {644, {wxDC, drawEllipse_1, 1}},
+ {645, {wxDC, drawEllipticArc, 4}},
+ {646, {wxDC, drawIcon, 2}},
+ {647, {wxDC, drawLabel, 3}},
+ {648, {wxDC, drawLine, 2}},
+ {649, {wxDC, drawLines, 3}},
+ {651, {wxDC, drawPolygon, 3}},
+ {653, {wxDC, drawPoint, 1}},
+ {655, {wxDC, drawRectangle_2, 2}},
+ {656, {wxDC, drawRectangle_1, 1}},
+ {657, {wxDC, drawRotatedText, 3}},
+ {659, {wxDC, drawRoundedRectangle_3, 3}},
+ {660, {wxDC, drawRoundedRectangle_2, 2}},
+ {661, {wxDC, drawText, 2}},
+ {662, {wxDC, endDoc, 0}},
+ {663, {wxDC, endPage, 0}},
+ {664, {wxDC, floodFill, 3}},
+ {665, {wxDC, getBackground, 0}},
+ {666, {wxDC, getBackgroundMode, 0}},
+ {667, {wxDC, getBrush, 0}},
+ {668, {wxDC, getCharHeight, 0}},
+ {669, {wxDC, getCharWidth, 0}},
+ {670, {wxDC, getClippingBox, 4}},
+ {672, {wxDC, getFont, 0}},
+ {673, {wxDC, getLayoutDirection, 0}},
+ {674, {wxDC, getLogicalFunction, 0}},
+ {675, {wxDC, getMapMode, 0}},
+ {676, {wxDC, getMultiLineTextExtent_4, 4}},
+ {677, {wxDC, getMultiLineTextExtent_1, 1}},
+ {678, {wxDC, getPartialTextExtents, 2}},
+ {679, {wxDC, getPen, 0}},
+ {680, {wxDC, getPixel, 2}},
+ {681, {wxDC, getPPI, 0}},
+ {683, {wxDC, getSize, 0}},
+ {685, {wxDC, getSizeMM, 0}},
+ {686, {wxDC, getTextBackground, 0}},
+ {687, {wxDC, getTextExtent_4, 4}},
+ {688, {wxDC, getTextExtent_1, 1}},
+ {690, {wxDC, getTextForeground, 0}},
+ {691, {wxDC, getUserScale, 2}},
+ {692, {wxDC, gradientFillConcentric_3, 3}},
+ {693, {wxDC, gradientFillConcentric_4, 4}},
+ {694, {wxDC, gradientFillLinear, 4}},
+ {695, {wxDC, logicalToDeviceX, 1}},
+ {696, {wxDC, logicalToDeviceXRel, 1}},
+ {697, {wxDC, logicalToDeviceY, 1}},
+ {698, {wxDC, logicalToDeviceYRel, 1}},
+ {699, {wxDC, maxX, 0}},
+ {700, {wxDC, maxY, 0}},
+ {701, {wxDC, minX, 0}},
+ {702, {wxDC, minY, 0}},
+ {703, {wxDC, isOk, 0}},
+ {704, {wxDC, resetBoundingBox, 0}},
+ {705, {wxDC, setAxisOrientation, 2}},
+ {706, {wxDC, setBackground, 1}},
+ {707, {wxDC, setBackgroundMode, 1}},
+ {708, {wxDC, setBrush, 1}},
+ {710, {wxDC, setClippingRegion_2, 2}},
+ {711, {wxDC, setClippingRegion_1_1, 1}},
+ {712, {wxDC, setClippingRegion_1_0, 1}},
+ {713, {wxDC, setDeviceOrigin, 2}},
+ {714, {wxDC, setFont, 1}},
+ {715, {wxDC, setLayoutDirection, 1}},
+ {716, {wxDC, setLogicalFunction, 1}},
+ {717, {wxDC, setMapMode, 1}},
+ {718, {wxDC, setPalette, 1}},
+ {719, {wxDC, setPen, 1}},
+ {720, {wxDC, setTextBackground, 1}},
+ {721, {wxDC, setTextForeground, 1}},
+ {722, {wxDC, setUserScale, 2}},
+ {723, {wxDC, startDoc, 1}},
+ {724, {wxDC, startPage, 0}},
+ {725, {wxMirrorDC, new, 2}},
+ {726, {wxMirrorDC, 'Destroy', undefined}},
+ {727, {wxScreenDC, new, 0}},
+ {728, {wxScreenDC, destruct, 0}},
+ {729, {wxPostScriptDC, new_0, 0}},
+ {730, {wxPostScriptDC, new_1, 1}},
+ {731, {wxPostScriptDC, destruct, 0}},
+ {732, {wxPostScriptDC, setResolution, 1}},
+ {733, {wxPostScriptDC, getResolution, 0}},
+ {734, {wxWindowDC, new_0, 0}},
+ {735, {wxWindowDC, new_1, 1}},
+ {736, {wxWindowDC, destruct, 0}},
+ {737, {wxClientDC, new_0, 0}},
+ {738, {wxClientDC, new_1, 1}},
+ {739, {wxClientDC, 'Destroy', undefined}},
+ {740, {wxPaintDC, new_0, 0}},
+ {741, {wxPaintDC, new_1, 1}},
+ {742, {wxPaintDC, 'Destroy', undefined}},
+ {744, {wxMemoryDC, new_1_0, 1}},
+ {745, {wxMemoryDC, new_1_1, 1}},
+ {746, {wxMemoryDC, new_0, 0}},
+ {748, {wxMemoryDC, destruct, 0}},
+ {749, {wxMemoryDC, selectObject, 1}},
+ {750, {wxMemoryDC, selectObjectAsSource, 1}},
+ {751, {wxBufferedDC, new_0, 0}},
+ {752, {wxBufferedDC, new_2, 2}},
+ {753, {wxBufferedDC, new_3, 3}},
+ {754, {wxBufferedDC, destruct, 0}},
+ {755, {wxBufferedDC, init_2, 2}},
+ {756, {wxBufferedDC, init_3, 3}},
+ {757, {wxBufferedPaintDC, new_3, 3}},
+ {758, {wxBufferedPaintDC, new_2, 2}},
+ {759, {wxBufferedPaintDC, destruct, 0}},
+ {760, {wxGraphicsObject, destruct, 0}},
+ {761, {wxGraphicsObject, getRenderer, 0}},
+ {762, {wxGraphicsObject, isNull, 0}},
+ {763, {wxGraphicsContext, destruct, 0}},
+ {764, {wxGraphicsContext, create_1_1, 1}},
+ {765, {wxGraphicsContext, create_1_0, 1}},
+ {766, {wxGraphicsContext, create_0, 0}},
+ {767, {wxGraphicsContext, createPen, 1}},
+ {768, {wxGraphicsContext, createBrush, 1}},
+ {769, {wxGraphicsContext, createRadialGradientBrush, 7}},
+ {770, {wxGraphicsContext, createLinearGradientBrush, 6}},
+ {771, {wxGraphicsContext, createFont, 2}},
+ {772, {wxGraphicsContext, createMatrix, 1}},
+ {773, {wxGraphicsContext, createPath, 0}},
+ {774, {wxGraphicsContext, clip_1, 1}},
+ {775, {wxGraphicsContext, clip_4, 4}},
+ {776, {wxGraphicsContext, resetClip, 0}},
+ {777, {wxGraphicsContext, drawBitmap, 5}},
+ {778, {wxGraphicsContext, drawEllipse, 4}},
+ {779, {wxGraphicsContext, drawIcon, 5}},
+ {780, {wxGraphicsContext, drawLines, 3}},
+ {781, {wxGraphicsContext, drawPath, 2}},
+ {782, {wxGraphicsContext, drawRectangle, 4}},
+ {783, {wxGraphicsContext, drawRoundedRectangle, 5}},
+ {784, {wxGraphicsContext, drawText_3, 3}},
+ {785, {wxGraphicsContext, drawText_4_0, 4}},
+ {786, {wxGraphicsContext, drawText_4_1, 4}},
+ {787, {wxGraphicsContext, drawText_5, 5}},
+ {788, {wxGraphicsContext, fillPath, 2}},
+ {789, {wxGraphicsContext, strokePath, 1}},
+ {790, {wxGraphicsContext, getPartialTextExtents, 2}},
+ {791, {wxGraphicsContext, getTextExtent, 5}},
+ {792, {wxGraphicsContext, rotate, 1}},
+ {793, {wxGraphicsContext, scale, 2}},
+ {794, {wxGraphicsContext, translate, 2}},
+ {795, {wxGraphicsContext, getTransform, 0}},
+ {796, {wxGraphicsContext, setTransform, 1}},
+ {797, {wxGraphicsContext, concatTransform, 1}},
+ {798, {wxGraphicsContext, setBrush_1_1, 1}},
+ {799, {wxGraphicsContext, setBrush_1_0, 1}},
+ {800, {wxGraphicsContext, setFont_1, 1}},
+ {801, {wxGraphicsContext, setFont_2, 2}},
+ {802, {wxGraphicsContext, setPen_1_0, 1}},
+ {803, {wxGraphicsContext, setPen_1_1, 1}},
+ {804, {wxGraphicsContext, strokeLine, 4}},
+ {805, {wxGraphicsContext, strokeLines, 2}},
+ {807, {wxGraphicsMatrix, concat, 1}},
+ {809, {wxGraphicsMatrix, get, 1}},
+ {810, {wxGraphicsMatrix, invert, 0}},
+ {811, {wxGraphicsMatrix, isEqual, 1}},
+ {813, {wxGraphicsMatrix, isIdentity, 0}},
+ {814, {wxGraphicsMatrix, rotate, 1}},
+ {815, {wxGraphicsMatrix, scale, 2}},
+ {816, {wxGraphicsMatrix, translate, 2}},
+ {817, {wxGraphicsMatrix, set, 1}},
+ {818, {wxGraphicsMatrix, transformPoint, 2}},
+ {819, {wxGraphicsMatrix, transformDistance, 2}},
+ {820, {wxGraphicsPath, moveToPoint_2, 2}},
+ {821, {wxGraphicsPath, moveToPoint_1, 1}},
+ {822, {wxGraphicsPath, addArc_6, 6}},
+ {823, {wxGraphicsPath, addArc_5, 5}},
+ {824, {wxGraphicsPath, addArcToPoint, 5}},
+ {825, {wxGraphicsPath, addCircle, 3}},
+ {826, {wxGraphicsPath, addCurveToPoint_6, 6}},
+ {827, {wxGraphicsPath, addCurveToPoint_3, 3}},
+ {828, {wxGraphicsPath, addEllipse, 4}},
+ {829, {wxGraphicsPath, addLineToPoint_2, 2}},
+ {830, {wxGraphicsPath, addLineToPoint_1, 1}},
+ {831, {wxGraphicsPath, addPath, 1}},
+ {832, {wxGraphicsPath, addQuadCurveToPoint, 4}},
+ {833, {wxGraphicsPath, addRectangle, 4}},
+ {834, {wxGraphicsPath, addRoundedRectangle, 5}},
+ {835, {wxGraphicsPath, closeSubpath, 0}},
+ {836, {wxGraphicsPath, contains_3, 3}},
+ {837, {wxGraphicsPath, contains_2, 2}},
+ {839, {wxGraphicsPath, getBox, 0}},
+ {841, {wxGraphicsPath, getCurrentPoint, 0}},
+ {842, {wxGraphicsPath, transform, 1}},
+ {843, {wxGraphicsRenderer, getDefaultRenderer, 0}},
+ {844, {wxGraphicsRenderer, createContext_1_1, 1}},
+ {845, {wxGraphicsRenderer, createContext_1_0, 1}},
+ {846, {wxGraphicsRenderer, createPen, 1}},
+ {847, {wxGraphicsRenderer, createBrush, 1}},
+ {848, {wxGraphicsRenderer, createLinearGradientBrush, 6}},
+ {849, {wxGraphicsRenderer, createRadialGradientBrush, 7}},
+ {850, {wxGraphicsRenderer, createFont, 2}},
+ {851, {wxGraphicsRenderer, createMatrix, 1}},
+ {852, {wxGraphicsRenderer, createPath, 0}},
+ {854, {wxMenuBar, new_1, 1}},
+ {856, {wxMenuBar, new_0, 0}},
+ {858, {wxMenuBar, destruct, 0}},
+ {859, {wxMenuBar, append, 2}},
+ {860, {wxMenuBar, check, 2}},
+ {861, {wxMenuBar, enable_2, 2}},
+ {862, {wxMenuBar, enable_1, 1}},
+ {863, {wxMenuBar, enableTop, 2}},
+ {864, {wxMenuBar, findMenu, 1}},
+ {865, {wxMenuBar, findMenuItem, 2}},
+ {866, {wxMenuBar, findItem, 2}},
+ {867, {wxMenuBar, getHelpString, 1}},
+ {868, {wxMenuBar, getLabel_1, 1}},
+ {869, {wxMenuBar, getLabel_0, 0}},
+ {870, {wxMenuBar, getLabelTop, 1}},
+ {871, {wxMenuBar, getMenu, 1}},
+ {872, {wxMenuBar, getMenuCount, 0}},
+ {873, {wxMenuBar, insert, 3}},
+ {874, {wxMenuBar, isChecked, 1}},
+ {875, {wxMenuBar, isEnabled_1, 1}},
+ {876, {wxMenuBar, isEnabled_0, 0}},
+ {877, {wxMenuBar, remove, 1}},
+ {878, {wxMenuBar, replace, 3}},
+ {879, {wxMenuBar, setHelpString, 2}},
+ {880, {wxMenuBar, setLabel_2, 2}},
+ {881, {wxMenuBar, setLabel_1, 1}},
+ {882, {wxMenuBar, setLabelTop, 2}},
+ {883, {wxControl, getLabel, 0}},
+ {884, {wxControl, setLabel, 1}},
+ {885, {wxControlWithItems, append_1, 1}},
+ {886, {wxControlWithItems, append_2, 2}},
+ {887, {wxControlWithItems, appendStrings_1, 1}},
+ {888, {wxControlWithItems, clear, 0}},
+ {889, {wxControlWithItems, delete, 1}},
+ {890, {wxControlWithItems, findString, 2}},
+ {891, {wxControlWithItems, getClientData, 1}},
+ {892, {wxControlWithItems, setClientData, 2}},
+ {893, {wxControlWithItems, getCount, 0}},
+ {894, {wxControlWithItems, getSelection, 0}},
+ {895, {wxControlWithItems, getString, 1}},
+ {896, {wxControlWithItems, getStringSelection, 0}},
+ {897, {wxControlWithItems, insert_2, 2}},
+ {898, {wxControlWithItems, insert_3, 3}},
+ {899, {wxControlWithItems, isEmpty, 0}},
+ {900, {wxControlWithItems, select, 1}},
+ {901, {wxControlWithItems, setSelection, 1}},
+ {902, {wxControlWithItems, setString, 2}},
+ {903, {wxControlWithItems, setStringSelection, 1}},
+ {906, {wxMenu, new_2, 2}},
+ {907, {wxMenu, new_1, 1}},
+ {909, {wxMenu, destruct, 0}},
+ {910, {wxMenu, append_3, 3}},
+ {911, {wxMenu, append_1, 1}},
+ {912, {wxMenu, append_4_0, 4}},
+ {913, {wxMenu, append_4_1, 4}},
+ {914, {wxMenu, appendCheckItem, 3}},
+ {915, {wxMenu, appendRadioItem, 3}},
+ {916, {wxMenu, appendSeparator, 0}},
+ {917, {wxMenu, break, 0}},
+ {918, {wxMenu, check, 2}},
+ {919, {wxMenu, delete_1_0, 1}},
+ {920, {wxMenu, delete_1_1, 1}},
+ {921, {wxMenu, destroy_1_0, 1}},
+ {922, {wxMenu, destroy_1_1, 1}},
+ {923, {wxMenu, enable, 2}},
+ {924, {wxMenu, findItem_1, 1}},
+ {925, {wxMenu, findItem_2, 2}},
+ {926, {wxMenu, findItemByPosition, 1}},
+ {927, {wxMenu, getHelpString, 1}},
+ {928, {wxMenu, getLabel, 1}},
+ {929, {wxMenu, getMenuItemCount, 0}},
+ {930, {wxMenu, getMenuItems, 0}},
+ {932, {wxMenu, getTitle, 0}},
+ {933, {wxMenu, insert_2, 2}},
+ {934, {wxMenu, insert_3, 3}},
+ {935, {wxMenu, insert_5_1, 5}},
+ {936, {wxMenu, insert_5_0, 5}},
+ {937, {wxMenu, insertCheckItem, 4}},
+ {938, {wxMenu, insertRadioItem, 4}},
+ {939, {wxMenu, insertSeparator, 1}},
+ {940, {wxMenu, isChecked, 1}},
+ {941, {wxMenu, isEnabled, 1}},
+ {942, {wxMenu, prepend_1, 1}},
+ {943, {wxMenu, prepend_2, 2}},
+ {944, {wxMenu, prepend_4_1, 4}},
+ {945, {wxMenu, prepend_4_0, 4}},
+ {946, {wxMenu, prependCheckItem, 3}},
+ {947, {wxMenu, prependRadioItem, 3}},
+ {948, {wxMenu, prependSeparator, 0}},
+ {949, {wxMenu, remove_1_0, 1}},
+ {950, {wxMenu, remove_1_1, 1}},
+ {951, {wxMenu, setHelpString, 2}},
+ {952, {wxMenu, setLabel, 2}},
+ {953, {wxMenu, setTitle, 1}},
+ {954, {wxMenuItem, new, 1}},
+ {956, {wxMenuItem, destruct, 0}},
+ {957, {wxMenuItem, check, 1}},
+ {958, {wxMenuItem, enable, 1}},
+ {959, {wxMenuItem, getBitmap, 0}},
+ {960, {wxMenuItem, getHelp, 0}},
+ {961, {wxMenuItem, getId, 0}},
+ {962, {wxMenuItem, getKind, 0}},
+ {963, {wxMenuItem, getLabel, 0}},
+ {964, {wxMenuItem, getLabelFromText, 1}},
+ {965, {wxMenuItem, getMenu, 0}},
+ {966, {wxMenuItem, getText, 0}},
+ {967, {wxMenuItem, getSubMenu, 0}},
+ {968, {wxMenuItem, isCheckable, 0}},
+ {969, {wxMenuItem, isChecked, 0}},
+ {970, {wxMenuItem, isEnabled, 0}},
+ {971, {wxMenuItem, isSeparator, 0}},
+ {972, {wxMenuItem, isSubMenu, 0}},
+ {973, {wxMenuItem, setBitmap, 1}},
+ {974, {wxMenuItem, setHelp, 1}},
+ {975, {wxMenuItem, setMenu, 1}},
+ {976, {wxMenuItem, setSubMenu, 1}},
+ {977, {wxMenuItem, setText, 1}},
+ {978, {wxToolBar, addControl, 1}},
+ {979, {wxToolBar, addSeparator, 0}},
+ {980, {wxToolBar, addTool_5, 5}},
+ {981, {wxToolBar, addTool_4_0, 4}},
+ {982, {wxToolBar, addTool_1, 1}},
+ {983, {wxToolBar, addTool_4_1, 4}},
+ {984, {wxToolBar, addTool_3, 3}},
+ {985, {wxToolBar, addTool_6, 6}},
+ {986, {wxToolBar, addCheckTool, 4}},
+ {987, {wxToolBar, addRadioTool, 4}},
+ {988, {wxToolBar, addStretchableSpace, 0}},
+ {989, {wxToolBar, insertStretchableSpace, 1}},
+ {990, {wxToolBar, deleteTool, 1}},
+ {991, {wxToolBar, deleteToolByPos, 1}},
+ {992, {wxToolBar, enableTool, 2}},
+ {993, {wxToolBar, findById, 1}},
+ {994, {wxToolBar, findControl, 1}},
+ {995, {wxToolBar, findToolForPosition, 2}},
+ {996, {wxToolBar, getToolSize, 0}},
+ {997, {wxToolBar, getToolBitmapSize, 0}},
+ {998, {wxToolBar, getMargins, 0}},
+ {999, {wxToolBar, getToolEnabled, 1}},
+ {1000, {wxToolBar, getToolLongHelp, 1}},
+ {1001, {wxToolBar, getToolPacking, 0}},
+ {1002, {wxToolBar, getToolPos, 1}},
+ {1003, {wxToolBar, getToolSeparation, 0}},
+ {1004, {wxToolBar, getToolShortHelp, 1}},
+ {1005, {wxToolBar, getToolState, 1}},
+ {1006, {wxToolBar, insertControl, 2}},
+ {1007, {wxToolBar, insertSeparator, 1}},
+ {1008, {wxToolBar, insertTool_5, 5}},
+ {1009, {wxToolBar, insertTool_2, 2}},
+ {1010, {wxToolBar, insertTool_4, 4}},
+ {1011, {wxToolBar, realize, 0}},
+ {1012, {wxToolBar, removeTool, 1}},
+ {1013, {wxToolBar, setMargins, 2}},
+ {1014, {wxToolBar, setToolBitmapSize, 1}},
+ {1015, {wxToolBar, setToolLongHelp, 2}},
+ {1016, {wxToolBar, setToolPacking, 1}},
+ {1017, {wxToolBar, setToolShortHelp, 2}},
+ {1018, {wxToolBar, setToolSeparation, 1}},
+ {1019, {wxToolBar, toggleTool, 2}},
+ {1021, {wxStatusBar, new_0, 0}},
+ {1022, {wxStatusBar, new_2, 2}},
+ {1024, {wxStatusBar, destruct, 0}},
+ {1025, {wxStatusBar, create, 2}},
+ {1026, {wxStatusBar, getFieldRect, 2}},
+ {1027, {wxStatusBar, getFieldsCount, 0}},
+ {1028, {wxStatusBar, getStatusText, 1}},
+ {1029, {wxStatusBar, popStatusText, 1}},
+ {1030, {wxStatusBar, pushStatusText, 2}},
+ {1031, {wxStatusBar, setFieldsCount, 2}},
+ {1032, {wxStatusBar, setMinHeight, 1}},
+ {1033, {wxStatusBar, setStatusText, 2}},
+ {1034, {wxStatusBar, setStatusWidths, 2}},
+ {1035, {wxStatusBar, setStatusStyles, 2}},
+ {1036, {wxBitmap, new_0, 0}},
+ {1037, {wxBitmap, new_3, 3}},
+ {1038, {wxBitmap, new_4, 4}},
+ {1039, {wxBitmap, new_2_0, 2}},
+ {1040, {wxBitmap, new_2_1, 2}},
+ {1041, {wxBitmap, destruct, 0}},
+ {1042, {wxBitmap, convertToImage, 0}},
+ {1043, {wxBitmap, copyFromIcon, 1}},
+ {1044, {wxBitmap, create, 3}},
+ {1045, {wxBitmap, getDepth, 0}},
+ {1046, {wxBitmap, getHeight, 0}},
+ {1047, {wxBitmap, getPalette, 0}},
+ {1048, {wxBitmap, getMask, 0}},
+ {1049, {wxBitmap, getWidth, 0}},
+ {1050, {wxBitmap, getSubBitmap, 1}},
+ {1051, {wxBitmap, loadFile, 2}},
+ {1052, {wxBitmap, ok, 0}},
+ {1053, {wxBitmap, saveFile, 3}},
+ {1054, {wxBitmap, setDepth, 1}},
+ {1055, {wxBitmap, setHeight, 1}},
+ {1056, {wxBitmap, setMask, 1}},
+ {1057, {wxBitmap, setPalette, 1}},
+ {1058, {wxBitmap, setWidth, 1}},
+ {1059, {wxIcon, new_0, 0}},
+ {1060, {wxIcon, new_2, 2}},
+ {1061, {wxIcon, new_1, 1}},
+ {1062, {wxIcon, copyFromBitmap, 1}},
+ {1063, {wxIcon, 'Destroy', undefined}},
+ {1064, {wxIconBundle, new_0, 0}},
+ {1065, {wxIconBundle, new_2, 2}},
+ {1066, {wxIconBundle, new_1_0, 1}},
+ {1067, {wxIconBundle, new_1_1, 1}},
+ {1068, {wxIconBundle, destruct, 0}},
+ {1069, {wxIconBundle, addIcon_2, 2}},
+ {1070, {wxIconBundle, addIcon_1, 1}},
+ {1071, {wxIconBundle, getIcon_1_1, 1}},
+ {1072, {wxIconBundle, getIcon_1_0, 1}},
+ {1073, {wxCursor, new_0, 0}},
+ {1074, {wxCursor, new_1_0, 1}},
+ {1075, {wxCursor, new_1_1, 1}},
+ {1076, {wxCursor, new_4, 4}},
+ {1077, {wxCursor, destruct, 0}},
+ {1078, {wxCursor, ok, 0}},
+ {1079, {wxMask, new_0, 0}},
+ {1080, {wxMask, new_2_1, 2}},
+ {1081, {wxMask, new_2_0, 2}},
+ {1082, {wxMask, new_1, 1}},
+ {1083, {wxMask, destruct, 0}},
+ {1084, {wxMask, create_2_1, 2}},
+ {1085, {wxMask, create_2_0, 2}},
+ {1086, {wxMask, create_1, 1}},
+ {1087, {wxImage, new_0, 0}},
+ {1088, {wxImage, new_3_0, 3}},
+ {1089, {wxImage, new_4, 4}},
+ {1090, {wxImage, new_5, 5}},
+ {1091, {wxImage, new_2, 2}},
+ {1092, {wxImage, new_3_1, 3}},
+ {1093, {wxImage, blur, 1}},
+ {1094, {wxImage, blurHorizontal, 1}},
+ {1095, {wxImage, blurVertical, 1}},
+ {1096, {wxImage, convertAlphaToMask, 1}},
+ {1097, {wxImage, convertToGreyscale, 1}},
+ {1098, {wxImage, convertToMono, 3}},
+ {1099, {wxImage, copy, 0}},
+ {1100, {wxImage, create_3, 3}},
+ {1101, {wxImage, create_4, 4}},
+ {1102, {wxImage, create_5, 5}},
+ {1103, {wxImage, 'Destroy', 0}},
+ {1104, {wxImage, findFirstUnusedColour, 4}},
+ {1105, {wxImage, getImageExtWildcard, 0}},
+ {1106, {wxImage, getAlpha_2, 2}},
+ {1107, {wxImage, getAlpha_0, 0}},
+ {1108, {wxImage, getBlue, 2}},
+ {1109, {wxImage, getData, 0}},
+ {1110, {wxImage, getGreen, 2}},
+ {1111, {wxImage, getImageCount, 2}},
+ {1112, {wxImage, getHeight, 0}},
+ {1113, {wxImage, getMaskBlue, 0}},
+ {1114, {wxImage, getMaskGreen, 0}},
+ {1115, {wxImage, getMaskRed, 0}},
+ {1116, {wxImage, getOrFindMaskColour, 3}},
+ {1117, {wxImage, getPalette, 0}},
+ {1118, {wxImage, getRed, 2}},
+ {1119, {wxImage, getSubImage, 1}},
+ {1120, {wxImage, getWidth, 0}},
+ {1121, {wxImage, hasAlpha, 0}},
+ {1122, {wxImage, hasMask, 0}},
+ {1123, {wxImage, getOption, 1}},
+ {1124, {wxImage, getOptionInt, 1}},
+ {1125, {wxImage, hasOption, 1}},
+ {1126, {wxImage, initAlpha, 0}},
+ {1127, {wxImage, initStandardHandlers, 0}},
+ {1128, {wxImage, isTransparent, 3}},
+ {1129, {wxImage, loadFile_2, 2}},
+ {1130, {wxImage, loadFile_3, 3}},
+ {1131, {wxImage, ok, 0}},
+ {1132, {wxImage, removeHandler, 1}},
+ {1133, {wxImage, mirror, 1}},
+ {1134, {wxImage, replace, 6}},
+ {1135, {wxImage, rescale, 3}},
+ {1136, {wxImage, resize, 3}},
+ {1137, {wxImage, rotate, 3}},
+ {1138, {wxImage, rotateHue, 1}},
+ {1139, {wxImage, rotate90, 1}},
+ {1140, {wxImage, saveFile_1, 1}},
+ {1141, {wxImage, saveFile_2_0, 2}},
+ {1142, {wxImage, saveFile_2_1, 2}},
+ {1143, {wxImage, scale, 3}},
+ {1144, {wxImage, size, 3}},
+ {1145, {wxImage, setAlpha_3, 3}},
+ {1146, {wxImage, setAlpha_2, 2}},
+ {1147, {wxImage, setData_2, 2}},
+ {1148, {wxImage, setData_4, 4}},
+ {1149, {wxImage, setMask, 1}},
+ {1150, {wxImage, setMaskColour, 3}},
+ {1151, {wxImage, setMaskFromImage, 4}},
+ {1152, {wxImage, setOption_2_1, 2}},
+ {1153, {wxImage, setOption_2_0, 2}},
+ {1154, {wxImage, setPalette, 1}},
+ {1155, {wxImage, setRGB_5, 5}},
+ {1156, {wxImage, setRGB_4, 4}},
+ {1157, {wxImage, 'Destroy', undefined}},
+ {1158, {wxBrush, new_0, 0}},
+ {1159, {wxBrush, new_2, 2}},
+ {1160, {wxBrush, new_1, 1}},
+ {1162, {wxBrush, destruct, 0}},
+ {1163, {wxBrush, getColour, 0}},
+ {1164, {wxBrush, getStipple, 0}},
+ {1165, {wxBrush, getStyle, 0}},
+ {1166, {wxBrush, isHatch, 0}},
+ {1167, {wxBrush, isOk, 0}},
+ {1168, {wxBrush, setColour_1, 1}},
+ {1169, {wxBrush, setColour_3, 3}},
+ {1170, {wxBrush, setStipple, 1}},
+ {1171, {wxBrush, setStyle, 1}},
+ {1172, {wxPen, new_0, 0}},
+ {1173, {wxPen, new_2, 2}},
+ {1174, {wxPen, destruct, 0}},
+ {1175, {wxPen, getCap, 0}},
+ {1176, {wxPen, getColour, 0}},
+ {1177, {wxPen, getJoin, 0}},
+ {1178, {wxPen, getStyle, 0}},
+ {1179, {wxPen, getWidth, 0}},
+ {1180, {wxPen, isOk, 0}},
+ {1181, {wxPen, setCap, 1}},
+ {1182, {wxPen, setColour_1, 1}},
+ {1183, {wxPen, setColour_3, 3}},
+ {1184, {wxPen, setJoin, 1}},
+ {1185, {wxPen, setStyle, 1}},
+ {1186, {wxPen, setWidth, 1}},
+ {1187, {wxRegion, new_0, 0}},
+ {1188, {wxRegion, new_4, 4}},
+ {1189, {wxRegion, new_2, 2}},
+ {1190, {wxRegion, new_1_1, 1}},
+ {1192, {wxRegion, new_1_0, 1}},
+ {1194, {wxRegion, destruct, 0}},
+ {1195, {wxRegion, clear, 0}},
+ {1196, {wxRegion, contains_2, 2}},
+ {1197, {wxRegion, contains_1_0, 1}},
+ {1198, {wxRegion, contains_4, 4}},
+ {1199, {wxRegion, contains_1_1, 1}},
+ {1200, {wxRegion, convertToBitmap, 0}},
+ {1201, {wxRegion, getBox, 0}},
+ {1202, {wxRegion, intersect_4, 4}},
+ {1203, {wxRegion, intersect_1_1, 1}},
+ {1204, {wxRegion, intersect_1_0, 1}},
+ {1205, {wxRegion, isEmpty, 0}},
+ {1206, {wxRegion, subtract_4, 4}},
+ {1207, {wxRegion, subtract_1_1, 1}},
+ {1208, {wxRegion, subtract_1_0, 1}},
+ {1209, {wxRegion, offset_2, 2}},
+ {1210, {wxRegion, offset_1, 1}},
+ {1211, {wxRegion, union_4, 4}},
+ {1212, {wxRegion, union_1_2, 1}},
+ {1213, {wxRegion, union_1_1, 1}},
+ {1214, {wxRegion, union_1_0, 1}},
+ {1215, {wxRegion, union_3, 3}},
+ {1216, {wxRegion, xor_4, 4}},
+ {1217, {wxRegion, xor_1_1, 1}},
+ {1218, {wxRegion, xor_1_0, 1}},
+ {1219, {wxAcceleratorTable, new_0, 0}},
+ {1220, {wxAcceleratorTable, new_2, 2}},
+ {1221, {wxAcceleratorTable, destruct, 0}},
+ {1222, {wxAcceleratorTable, ok, 0}},
+ {1223, {wxAcceleratorEntry, new_1_0, 1}},
+ {1224, {wxAcceleratorEntry, new_1_1, 1}},
+ {1225, {wxAcceleratorEntry, getCommand, 0}},
+ {1226, {wxAcceleratorEntry, getFlags, 0}},
+ {1227, {wxAcceleratorEntry, getKeyCode, 0}},
+ {1228, {wxAcceleratorEntry, set, 4}},
+ {1229, {wxAcceleratorEntry, 'Destroy', undefined}},
+ {1234, {wxCaret, new_3, 3}},
+ {1235, {wxCaret, new_2, 2}},
+ {1237, {wxCaret, destruct, 0}},
+ {1238, {wxCaret, create_3, 3}},
+ {1239, {wxCaret, create_2, 2}},
+ {1240, {wxCaret, getBlinkTime, 0}},
+ {1242, {wxCaret, getPosition, 0}},
+ {1244, {wxCaret, getSize, 0}},
+ {1245, {wxCaret, getWindow, 0}},
+ {1246, {wxCaret, hide, 0}},
+ {1247, {wxCaret, isOk, 0}},
+ {1248, {wxCaret, isVisible, 0}},
+ {1249, {wxCaret, move_2, 2}},
+ {1250, {wxCaret, move_1, 1}},
+ {1251, {wxCaret, setBlinkTime, 1}},
+ {1252, {wxCaret, setSize_2, 2}},
+ {1253, {wxCaret, setSize_1, 1}},
+ {1254, {wxCaret, show, 1}},
+ {1255, {wxSizer, add_2_1, 2}},
+ {1256, {wxSizer, add_2_0, 2}},
+ {1257, {wxSizer, add_3, 3}},
+ {1258, {wxSizer, add_2_3, 2}},
+ {1259, {wxSizer, add_2_2, 2}},
+ {1260, {wxSizer, addSpacer, 1}},
+ {1261, {wxSizer, addStretchSpacer, 1}},
+ {1262, {wxSizer, calcMin, 0}},
+ {1263, {wxSizer, clear, 1}},
+ {1264, {wxSizer, detach_1_2, 1}},
+ {1265, {wxSizer, detach_1_1, 1}},
+ {1266, {wxSizer, detach_1_0, 1}},
+ {1267, {wxSizer, fit, 1}},
+ {1268, {wxSizer, fitInside, 1}},
+ {1269, {wxSizer, getChildren, 0}},
+ {1270, {wxSizer, getItem_2_1, 2}},
+ {1271, {wxSizer, getItem_2_0, 2}},
+ {1272, {wxSizer, getItem_1, 1}},
+ {1273, {wxSizer, getSize, 0}},
+ {1274, {wxSizer, getPosition, 0}},
+ {1275, {wxSizer, getMinSize, 0}},
+ {1276, {wxSizer, hide_2_0, 2}},
+ {1277, {wxSizer, hide_2_1, 2}},
+ {1278, {wxSizer, hide_1, 1}},
+ {1279, {wxSizer, insert_3_1, 3}},
+ {1280, {wxSizer, insert_3_0, 3}},
+ {1281, {wxSizer, insert_4, 4}},
+ {1282, {wxSizer, insert_3_3, 3}},
+ {1283, {wxSizer, insert_3_2, 3}},
+ {1284, {wxSizer, insert_2, 2}},
+ {1285, {wxSizer, insertSpacer, 2}},
+ {1286, {wxSizer, insertStretchSpacer, 2}},
+ {1287, {wxSizer, isShown_1_2, 1}},
+ {1288, {wxSizer, isShown_1_1, 1}},
+ {1289, {wxSizer, isShown_1_0, 1}},
+ {1290, {wxSizer, layout, 0}},
+ {1291, {wxSizer, prepend_2_1, 2}},
+ {1292, {wxSizer, prepend_2_0, 2}},
+ {1293, {wxSizer, prepend_3, 3}},
+ {1294, {wxSizer, prepend_2_3, 2}},
+ {1295, {wxSizer, prepend_2_2, 2}},
+ {1296, {wxSizer, prepend_1, 1}},
+ {1297, {wxSizer, prependSpacer, 1}},
+ {1298, {wxSizer, prependStretchSpacer, 1}},
+ {1299, {wxSizer, recalcSizes, 0}},
+ {1300, {wxSizer, remove_1_1, 1}},
+ {1301, {wxSizer, remove_1_0, 1}},
+ {1302, {wxSizer, replace_3_1, 3}},
+ {1303, {wxSizer, replace_3_0, 3}},
+ {1304, {wxSizer, replace_2, 2}},
+ {1305, {wxSizer, setDimension, 4}},
+ {1306, {wxSizer, setMinSize_2, 2}},
+ {1307, {wxSizer, setMinSize_1, 1}},
+ {1308, {wxSizer, setItemMinSize_3_2, 3}},
+ {1309, {wxSizer, setItemMinSize_2_2, 2}},
+ {1310, {wxSizer, setItemMinSize_3_1, 3}},
+ {1311, {wxSizer, setItemMinSize_2_1, 2}},
+ {1312, {wxSizer, setItemMinSize_3_0, 3}},
+ {1313, {wxSizer, setItemMinSize_2_0, 2}},
+ {1314, {wxSizer, setSizeHints, 1}},
+ {1315, {wxSizer, setVirtualSizeHints, 1}},
+ {1316, {wxSizer, show_2_2, 2}},
+ {1317, {wxSizer, show_2_1, 2}},
+ {1318, {wxSizer, show_2_0, 2}},
+ {1319, {wxSizer, show_1, 1}},
+ {1320, {wxSizerFlags, new, 1}},
+ {1321, {wxSizerFlags, align, 1}},
+ {1322, {wxSizerFlags, border_2, 2}},
+ {1323, {wxSizerFlags, border_1, 1}},
+ {1324, {wxSizerFlags, center, 0}},
+ {1325, {wxSizerFlags, centre, 0}},
+ {1326, {wxSizerFlags, expand, 0}},
+ {1327, {wxSizerFlags, left, 0}},
+ {1328, {wxSizerFlags, proportion, 1}},
+ {1329, {wxSizerFlags, right, 0}},
+ {1330, {wxSizerFlags, 'Destroy', undefined}},
+ {1331, {wxSizerItem, new_5_1, 5}},
+ {1332, {wxSizerItem, new_2_1, 2}},
+ {1333, {wxSizerItem, new_5_0, 5}},
+ {1334, {wxSizerItem, new_2_0, 2}},
+ {1335, {wxSizerItem, new_6, 6}},
+ {1336, {wxSizerItem, new_3, 3}},
+ {1337, {wxSizerItem, new_0, 0}},
+ {1338, {wxSizerItem, destruct, 0}},
+ {1339, {wxSizerItem, calcMin, 0}},
+ {1340, {wxSizerItem, deleteWindows, 0}},
+ {1341, {wxSizerItem, detachSizer, 0}},
+ {1342, {wxSizerItem, getBorder, 0}},
+ {1343, {wxSizerItem, getFlag, 0}},
+ {1344, {wxSizerItem, getMinSize, 0}},
+ {1345, {wxSizerItem, getPosition, 0}},
+ {1346, {wxSizerItem, getProportion, 0}},
+ {1347, {wxSizerItem, getRatio, 0}},
+ {1348, {wxSizerItem, getRect, 0}},
+ {1349, {wxSizerItem, getSize, 0}},
+ {1350, {wxSizerItem, getSizer, 0}},
+ {1351, {wxSizerItem, getSpacer, 0}},
+ {1352, {wxSizerItem, getUserData, 0}},
+ {1353, {wxSizerItem, getWindow, 0}},
+ {1354, {wxSizerItem, isSizer, 0}},
+ {1355, {wxSizerItem, isShown, 0}},
+ {1356, {wxSizerItem, isSpacer, 0}},
+ {1357, {wxSizerItem, isWindow, 0}},
+ {1358, {wxSizerItem, setBorder, 1}},
+ {1359, {wxSizerItem, setDimension, 2}},
+ {1360, {wxSizerItem, setFlag, 1}},
+ {1361, {wxSizerItem, setInitSize, 2}},
+ {1362, {wxSizerItem, setMinSize_1, 1}},
+ {1363, {wxSizerItem, setMinSize_2, 2}},
+ {1364, {wxSizerItem, setProportion, 1}},
+ {1365, {wxSizerItem, setRatio_2, 2}},
+ {1366, {wxSizerItem, setRatio_1_1, 1}},
+ {1367, {wxSizerItem, setRatio_1_0, 1}},
+ {1368, {wxSizerItem, setSizer, 1}},
+ {1369, {wxSizerItem, setSpacer_1, 1}},
+ {1370, {wxSizerItem, setSpacer_2, 2}},
+ {1371, {wxSizerItem, setWindow, 1}},
+ {1372, {wxSizerItem, show, 1}},
+ {1373, {wxBoxSizer, new, 1}},
+ {1374, {wxBoxSizer, getOrientation, 0}},
+ {1375, {wxBoxSizer, 'Destroy', undefined}},
+ {1376, {wxStaticBoxSizer, new_2, 2}},
+ {1377, {wxStaticBoxSizer, new_3, 3}},
+ {1378, {wxStaticBoxSizer, getStaticBox, 0}},
+ {1379, {wxStaticBoxSizer, 'Destroy', undefined}},
+ {1380, {wxGridSizer, new_4, 4}},
+ {1381, {wxGridSizer, new_2, 2}},
+ {1382, {wxGridSizer, getCols, 0}},
+ {1383, {wxGridSizer, getHGap, 0}},
+ {1384, {wxGridSizer, getRows, 0}},
+ {1385, {wxGridSizer, getVGap, 0}},
+ {1386, {wxGridSizer, setCols, 1}},
+ {1387, {wxGridSizer, setHGap, 1}},
+ {1388, {wxGridSizer, setRows, 1}},
+ {1389, {wxGridSizer, setVGap, 1}},
+ {1390, {wxGridSizer, 'Destroy', undefined}},
+ {1391, {wxFlexGridSizer, new_4, 4}},
+ {1392, {wxFlexGridSizer, new_2, 2}},
+ {1393, {wxFlexGridSizer, addGrowableCol, 2}},
+ {1394, {wxFlexGridSizer, addGrowableRow, 2}},
+ {1395, {wxFlexGridSizer, getFlexibleDirection, 0}},
+ {1396, {wxFlexGridSizer, getNonFlexibleGrowMode, 0}},
+ {1397, {wxFlexGridSizer, removeGrowableCol, 1}},
+ {1398, {wxFlexGridSizer, removeGrowableRow, 1}},
+ {1399, {wxFlexGridSizer, setFlexibleDirection, 1}},
+ {1400, {wxFlexGridSizer, setNonFlexibleGrowMode, 1}},
+ {1401, {wxFlexGridSizer, 'Destroy', undefined}},
+ {1402, {wxGridBagSizer, new, 1}},
+ {1403, {wxGridBagSizer, add_3_2, 3}},
+ {1404, {wxGridBagSizer, add_3_1, 3}},
+ {1405, {wxGridBagSizer, add_4, 4}},
+ {1406, {wxGridBagSizer, add_1_0, 1}},
+ {1407, {wxGridBagSizer, add_2_1, 2}},
+ {1408, {wxGridBagSizer, add_2_0, 2}},
+ {1409, {wxGridBagSizer, add_3_0, 3}},
+ {1410, {wxGridBagSizer, add_1_1, 1}},
+ {1411, {wxGridBagSizer, calcMin, 0}},
+ {1412, {wxGridBagSizer, checkForIntersection_2, 2}},
+ {1413, {wxGridBagSizer, checkForIntersection_3, 3}},
+ {1414, {wxGridBagSizer, findItem_1_1, 1}},
+ {1415, {wxGridBagSizer, findItem_1_0, 1}},
+ {1416, {wxGridBagSizer, findItemAtPoint, 1}},
+ {1417, {wxGridBagSizer, findItemAtPosition, 1}},
+ {1418, {wxGridBagSizer, findItemWithData, 1}},
+ {1419, {wxGridBagSizer, getCellSize, 2}},
+ {1420, {wxGridBagSizer, getEmptyCellSize, 0}},
+ {1421, {wxGridBagSizer, getItemPosition_1_2, 1}},
+ {1422, {wxGridBagSizer, getItemPosition_1_1, 1}},
+ {1423, {wxGridBagSizer, getItemPosition_1_0, 1}},
+ {1424, {wxGridBagSizer, getItemSpan_1_2, 1}},
+ {1425, {wxGridBagSizer, getItemSpan_1_1, 1}},
+ {1426, {wxGridBagSizer, getItemSpan_1_0, 1}},
+ {1427, {wxGridBagSizer, setEmptyCellSize, 1}},
+ {1428, {wxGridBagSizer, setItemPosition_2_2, 2}},
+ {1429, {wxGridBagSizer, setItemPosition_2_1, 2}},
+ {1430, {wxGridBagSizer, setItemPosition_2_0, 2}},
+ {1431, {wxGridBagSizer, setItemSpan_2_2, 2}},
+ {1432, {wxGridBagSizer, setItemSpan_2_1, 2}},
+ {1433, {wxGridBagSizer, setItemSpan_2_0, 2}},
+ {1434, {wxGridBagSizer, 'Destroy', undefined}},
+ {1435, {wxStdDialogButtonSizer, new, 0}},
+ {1436, {wxStdDialogButtonSizer, addButton, 1}},
+ {1437, {wxStdDialogButtonSizer, realize, 0}},
+ {1438, {wxStdDialogButtonSizer, setAffirmativeButton, 1}},
+ {1439, {wxStdDialogButtonSizer, setCancelButton, 1}},
+ {1440, {wxStdDialogButtonSizer, setNegativeButton, 1}},
+ {1441, {wxStdDialogButtonSizer, 'Destroy', undefined}},
+ {1442, {wxFont, new_0, 0}},
+ {1443, {wxFont, new_1, 1}},
+ {1444, {wxFont, new_5, 5}},
+ {1446, {wxFont, destruct, 0}},
+ {1447, {wxFont, isFixedWidth, 0}},
+ {1448, {wxFont, getDefaultEncoding, 0}},
+ {1449, {wxFont, getFaceName, 0}},
+ {1450, {wxFont, getFamily, 0}},
+ {1451, {wxFont, getNativeFontInfoDesc, 0}},
+ {1452, {wxFont, getNativeFontInfoUserDesc, 0}},
+ {1453, {wxFont, getPointSize, 0}},
+ {1454, {wxFont, getStyle, 0}},
+ {1455, {wxFont, getUnderlined, 0}},
+ {1456, {wxFont, getWeight, 0}},
+ {1457, {wxFont, ok, 0}},
+ {1458, {wxFont, setDefaultEncoding, 1}},
+ {1459, {wxFont, setFaceName, 1}},
+ {1460, {wxFont, setFamily, 1}},
+ {1461, {wxFont, setPointSize, 1}},
+ {1462, {wxFont, setStyle, 1}},
+ {1463, {wxFont, setUnderlined, 1}},
+ {1464, {wxFont, setWeight, 1}},
+ {1465, {wxToolTip, enable, 1}},
+ {1466, {wxToolTip, setDelay, 1}},
+ {1467, {wxToolTip, new, 1}},
+ {1468, {wxToolTip, setTip, 1}},
+ {1469, {wxToolTip, getTip, 0}},
+ {1470, {wxToolTip, getWindow, 0}},
+ {1471, {wxToolTip, 'Destroy', undefined}},
+ {1473, {wxButton, new_3, 3}},
+ {1474, {wxButton, new_0, 0}},
+ {1475, {wxButton, destruct, 0}},
+ {1476, {wxButton, create, 3}},
+ {1477, {wxButton, getDefaultSize, 0}},
+ {1478, {wxButton, setDefault, 0}},
+ {1479, {wxButton, setLabel, 1}},
+ {1481, {wxBitmapButton, new_4, 4}},
+ {1482, {wxBitmapButton, new_0, 0}},
+ {1483, {wxBitmapButton, create, 4}},
+ {1484, {wxBitmapButton, getBitmapDisabled, 0}},
+ {1486, {wxBitmapButton, getBitmapFocus, 0}},
+ {1488, {wxBitmapButton, getBitmapLabel, 0}},
+ {1490, {wxBitmapButton, getBitmapSelected, 0}},
+ {1492, {wxBitmapButton, setBitmapDisabled, 1}},
+ {1493, {wxBitmapButton, setBitmapFocus, 1}},
+ {1494, {wxBitmapButton, setBitmapLabel, 1}},
+ {1495, {wxBitmapButton, setBitmapSelected, 1}},
+ {1496, {wxBitmapButton, 'Destroy', undefined}},
+ {1497, {wxToggleButton, new_0, 0}},
+ {1498, {wxToggleButton, new_4, 4}},
+ {1499, {wxToggleButton, create, 4}},
+ {1500, {wxToggleButton, getValue, 0}},
+ {1501, {wxToggleButton, setValue, 1}},
+ {1502, {wxToggleButton, 'Destroy', undefined}},
+ {1503, {wxCalendarCtrl, new_0, 0}},
+ {1504, {wxCalendarCtrl, new_3, 3}},
+ {1505, {wxCalendarCtrl, create, 3}},
+ {1506, {wxCalendarCtrl, destruct, 0}},
+ {1507, {wxCalendarCtrl, setDate, 1}},
+ {1508, {wxCalendarCtrl, getDate, 0}},
+ {1509, {wxCalendarCtrl, enableYearChange, 1}},
+ {1510, {wxCalendarCtrl, enableMonthChange, 1}},
+ {1511, {wxCalendarCtrl, enableHolidayDisplay, 1}},
+ {1512, {wxCalendarCtrl, setHeaderColours, 2}},
+ {1513, {wxCalendarCtrl, getHeaderColourFg, 0}},
+ {1514, {wxCalendarCtrl, getHeaderColourBg, 0}},
+ {1515, {wxCalendarCtrl, setHighlightColours, 2}},
+ {1516, {wxCalendarCtrl, getHighlightColourFg, 0}},
+ {1517, {wxCalendarCtrl, getHighlightColourBg, 0}},
+ {1518, {wxCalendarCtrl, setHolidayColours, 2}},
+ {1519, {wxCalendarCtrl, getHolidayColourFg, 0}},
+ {1520, {wxCalendarCtrl, getHolidayColourBg, 0}},
+ {1521, {wxCalendarCtrl, getAttr, 1}},
+ {1522, {wxCalendarCtrl, setAttr, 2}},
+ {1523, {wxCalendarCtrl, setHoliday, 1}},
+ {1524, {wxCalendarCtrl, resetAttr, 1}},
+ {1525, {wxCalendarCtrl, hitTest, 2}},
+ {1526, {wxCalendarDateAttr, new_0, 0}},
+ {1527, {wxCalendarDateAttr, new_2_1, 2}},
+ {1528, {wxCalendarDateAttr, new_2_0, 2}},
+ {1529, {wxCalendarDateAttr, setTextColour, 1}},
+ {1530, {wxCalendarDateAttr, setBackgroundColour, 1}},
+ {1531, {wxCalendarDateAttr, setBorderColour, 1}},
+ {1532, {wxCalendarDateAttr, setFont, 1}},
+ {1533, {wxCalendarDateAttr, setBorder, 1}},
+ {1534, {wxCalendarDateAttr, setHoliday, 1}},
+ {1535, {wxCalendarDateAttr, hasTextColour, 0}},
+ {1536, {wxCalendarDateAttr, hasBackgroundColour, 0}},
+ {1537, {wxCalendarDateAttr, hasBorderColour, 0}},
+ {1538, {wxCalendarDateAttr, hasFont, 0}},
+ {1539, {wxCalendarDateAttr, hasBorder, 0}},
+ {1540, {wxCalendarDateAttr, isHoliday, 0}},
+ {1541, {wxCalendarDateAttr, getTextColour, 0}},
+ {1542, {wxCalendarDateAttr, getBackgroundColour, 0}},
+ {1543, {wxCalendarDateAttr, getBorderColour, 0}},
+ {1544, {wxCalendarDateAttr, getFont, 0}},
+ {1545, {wxCalendarDateAttr, getBorder, 0}},
+ {1546, {wxCalendarDateAttr, 'Destroy', undefined}},
+ {1548, {wxCheckBox, new_4, 4}},
+ {1549, {wxCheckBox, new_0, 0}},
+ {1550, {wxCheckBox, create, 4}},
+ {1551, {wxCheckBox, getValue, 0}},
+ {1552, {wxCheckBox, get3StateValue, 0}},
+ {1553, {wxCheckBox, is3rdStateAllowedForUser, 0}},
+ {1554, {wxCheckBox, is3State, 0}},
+ {1555, {wxCheckBox, isChecked, 0}},
+ {1556, {wxCheckBox, setValue, 1}},
+ {1557, {wxCheckBox, set3StateValue, 1}},
+ {1558, {wxCheckBox, 'Destroy', undefined}},
+ {1559, {wxCheckListBox, new_0, 0}},
+ {1561, {wxCheckListBox, new_3, 3}},
+ {1562, {wxCheckListBox, check, 2}},
+ {1563, {wxCheckListBox, isChecked, 1}},
+ {1564, {wxCheckListBox, 'Destroy', undefined}},
+ {1567, {wxChoice, new_3, 3}},
+ {1568, {wxChoice, new_0, 0}},
+ {1570, {wxChoice, destruct, 0}},
+ {1572, {wxChoice, create, 6}},
+ {1573, {wxChoice, delete, 1}},
+ {1574, {wxChoice, getColumns, 0}},
+ {1575, {wxChoice, setColumns, 1}},
+ {1576, {wxComboBox, new_0, 0}},
+ {1578, {wxComboBox, new_3, 3}},
+ {1579, {wxComboBox, destruct, 0}},
+ {1581, {wxComboBox, create, 7}},
+ {1582, {wxComboBox, canCopy, 0}},
+ {1583, {wxComboBox, canCut, 0}},
+ {1584, {wxComboBox, canPaste, 0}},
+ {1585, {wxComboBox, canRedo, 0}},
+ {1586, {wxComboBox, canUndo, 0}},
+ {1587, {wxComboBox, copy, 0}},
+ {1588, {wxComboBox, cut, 0}},
+ {1589, {wxComboBox, getInsertionPoint, 0}},
+ {1590, {wxComboBox, getLastPosition, 0}},
+ {1591, {wxComboBox, getValue, 0}},
+ {1592, {wxComboBox, paste, 0}},
+ {1593, {wxComboBox, redo, 0}},
+ {1594, {wxComboBox, replace, 3}},
+ {1595, {wxComboBox, remove, 2}},
+ {1596, {wxComboBox, setInsertionPoint, 1}},
+ {1597, {wxComboBox, setInsertionPointEnd, 0}},
+ {1598, {wxComboBox, setSelection_1, 1}},
+ {1599, {wxComboBox, setSelection_2, 2}},
+ {1600, {wxComboBox, setValue, 1}},
+ {1601, {wxComboBox, undo, 0}},
+ {1602, {wxGauge, new_0, 0}},
+ {1603, {wxGauge, new_4, 4}},
+ {1604, {wxGauge, create, 4}},
+ {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}},
@@ -1540,7 +1540,7 @@ wxdebug_table() ->
{1691, {wxListCtrl, getTextColour, 0}},
{1692, {wxListCtrl, getTopItem, 0}},
{1693, {wxListCtrl, getViewRect, 0}},
- {1694, {wxListCtrl, hitTest, 2}},
+ {1694, {wxListCtrl, hitTest, 3}},
{1695, {wxListCtrl, insertColumn_2, 2}},
{1696, {wxListCtrl, insertColumn_3, 3}},
{1697, {wxListCtrl, insertItem_1, 1}},
diff --git a/lib/wx/src/gen/wxe_funcs.hrl b/lib/wx/src/gen/wxe_funcs.hrl
index 35688f3869..84fa592aaa 100644
--- a/lib/wx/src/gen/wxe_funcs.hrl
+++ b/lib/wx/src/gen/wxe_funcs.hrl
@@ -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.
@@ -189,1275 +189,1275 @@
-define(wxWindow_UpdateWindowUI, 281).
-define(wxWindow_Validate, 282).
-define(wxWindow_WarpPointer, 283).
--define(wxTopLevelWindow_GetIcon, 284).
--define(wxTopLevelWindow_GetIcons, 285).
--define(wxTopLevelWindow_GetTitle, 286).
--define(wxTopLevelWindow_IsActive, 287).
--define(wxTopLevelWindow_Iconize, 288).
--define(wxTopLevelWindow_IsFullScreen, 289).
--define(wxTopLevelWindow_IsIconized, 290).
--define(wxTopLevelWindow_IsMaximized, 291).
--define(wxTopLevelWindow_Maximize, 292).
--define(wxTopLevelWindow_RequestUserAttention, 293).
--define(wxTopLevelWindow_SetIcon, 294).
--define(wxTopLevelWindow_SetIcons, 295).
--define(wxTopLevelWindow_CenterOnScreen, 296).
--define(wxTopLevelWindow_CentreOnScreen, 297).
--define(wxTopLevelWindow_SetShape, 299).
--define(wxTopLevelWindow_SetTitle, 300).
--define(wxTopLevelWindow_ShowFullScreen, 301).
--define(wxFrame_new_4, 303).
--define(wxFrame_new_0, 304).
--define(wxFrame_destruct, 306).
--define(wxFrame_Create, 307).
--define(wxFrame_CreateStatusBar, 308).
--define(wxFrame_CreateToolBar, 309).
--define(wxFrame_GetClientAreaOrigin, 310).
--define(wxFrame_GetMenuBar, 311).
--define(wxFrame_GetStatusBar, 312).
--define(wxFrame_GetStatusBarPane, 313).
--define(wxFrame_GetToolBar, 314).
--define(wxFrame_ProcessCommand, 315).
--define(wxFrame_SendSizeEvent, 316).
--define(wxFrame_SetMenuBar, 317).
--define(wxFrame_SetStatusBar, 318).
--define(wxFrame_SetStatusBarPane, 319).
--define(wxFrame_SetStatusText, 320).
--define(wxFrame_SetStatusWidths, 321).
--define(wxFrame_SetToolBar, 322).
--define(wxMiniFrame_new_0, 323).
--define(wxMiniFrame_new_4, 324).
--define(wxMiniFrame_Create, 325).
--define(wxMiniFrame_destroy, 326).
--define(wxSplashScreen_new_0, 327).
--define(wxSplashScreen_new_6, 328).
--define(wxSplashScreen_destruct, 329).
--define(wxSplashScreen_GetSplashStyle, 330).
--define(wxSplashScreen_GetTimeout, 331).
--define(wxPanel_new_0, 332).
--define(wxPanel_new_6, 333).
--define(wxPanel_new_2, 334).
--define(wxPanel_destruct, 335).
--define(wxPanel_InitDialog, 336).
--define(wxPanel_SetFocusIgnoringChildren, 337).
--define(wxScrolledWindow_new_0, 338).
--define(wxScrolledWindow_new_2, 339).
--define(wxScrolledWindow_destruct, 340).
--define(wxScrolledWindow_CalcScrolledPosition_4, 341).
--define(wxScrolledWindow_CalcScrolledPosition_1, 342).
--define(wxScrolledWindow_CalcUnscrolledPosition_4, 343).
--define(wxScrolledWindow_CalcUnscrolledPosition_1, 344).
--define(wxScrolledWindow_EnableScrolling, 345).
--define(wxScrolledWindow_GetScrollPixelsPerUnit, 346).
--define(wxScrolledWindow_GetViewStart, 347).
--define(wxScrolledWindow_DoPrepareDC, 348).
--define(wxScrolledWindow_PrepareDC, 349).
--define(wxScrolledWindow_Scroll, 350).
--define(wxScrolledWindow_SetScrollbars, 351).
--define(wxScrolledWindow_SetScrollRate, 352).
--define(wxScrolledWindow_SetTargetWindow, 353).
--define(wxSashWindow_new_0, 354).
--define(wxSashWindow_new_2, 355).
--define(wxSashWindow_destruct, 356).
--define(wxSashWindow_GetSashVisible, 357).
--define(wxSashWindow_GetMaximumSizeX, 358).
--define(wxSashWindow_GetMaximumSizeY, 359).
--define(wxSashWindow_GetMinimumSizeX, 360).
--define(wxSashWindow_GetMinimumSizeY, 361).
--define(wxSashWindow_SetMaximumSizeX, 362).
--define(wxSashWindow_SetMaximumSizeY, 363).
--define(wxSashWindow_SetMinimumSizeX, 364).
--define(wxSashWindow_SetMinimumSizeY, 365).
--define(wxSashWindow_SetSashVisible, 366).
--define(wxSashLayoutWindow_new_0, 367).
--define(wxSashLayoutWindow_new_2, 368).
--define(wxSashLayoutWindow_Create, 369).
--define(wxSashLayoutWindow_GetAlignment, 370).
--define(wxSashLayoutWindow_GetOrientation, 371).
--define(wxSashLayoutWindow_SetAlignment, 372).
--define(wxSashLayoutWindow_SetDefaultSize, 373).
--define(wxSashLayoutWindow_SetOrientation, 374).
--define(wxSashLayoutWindow_destroy, 375).
--define(wxGrid_new_0, 376).
--define(wxGrid_new_3, 377).
--define(wxGrid_new_4, 378).
--define(wxGrid_destruct, 379).
--define(wxGrid_AppendCols, 380).
--define(wxGrid_AppendRows, 381).
--define(wxGrid_AutoSize, 382).
--define(wxGrid_AutoSizeColumn, 383).
--define(wxGrid_AutoSizeColumns, 384).
--define(wxGrid_AutoSizeRow, 385).
--define(wxGrid_AutoSizeRows, 386).
--define(wxGrid_BeginBatch, 387).
--define(wxGrid_BlockToDeviceRect, 388).
--define(wxGrid_CanDragColSize, 389).
--define(wxGrid_CanDragRowSize, 390).
--define(wxGrid_CanDragGridSize, 391).
--define(wxGrid_CanEnableCellControl, 392).
--define(wxGrid_CellToRect_2, 393).
--define(wxGrid_CellToRect_1, 394).
--define(wxGrid_ClearGrid, 395).
--define(wxGrid_ClearSelection, 396).
--define(wxGrid_CreateGrid, 397).
--define(wxGrid_DeleteCols, 398).
--define(wxGrid_DeleteRows, 399).
--define(wxGrid_DisableCellEditControl, 400).
--define(wxGrid_DisableDragColSize, 401).
--define(wxGrid_DisableDragGridSize, 402).
--define(wxGrid_DisableDragRowSize, 403).
--define(wxGrid_EnableCellEditControl, 404).
--define(wxGrid_EnableDragColSize, 405).
--define(wxGrid_EnableDragGridSize, 406).
--define(wxGrid_EnableDragRowSize, 407).
--define(wxGrid_EnableEditing, 408).
--define(wxGrid_EnableGridLines, 409).
--define(wxGrid_EndBatch, 410).
--define(wxGrid_Fit, 411).
--define(wxGrid_ForceRefresh, 412).
--define(wxGrid_GetBatchCount, 413).
--define(wxGrid_GetCellAlignment, 414).
--define(wxGrid_GetCellBackgroundColour, 415).
--define(wxGrid_GetCellEditor, 416).
--define(wxGrid_GetCellFont, 417).
--define(wxGrid_GetCellRenderer, 418).
--define(wxGrid_GetCellTextColour, 419).
--define(wxGrid_GetCellValue_2, 420).
--define(wxGrid_GetCellValue_1, 421).
--define(wxGrid_GetColLabelAlignment, 422).
--define(wxGrid_GetColLabelSize, 423).
--define(wxGrid_GetColLabelValue, 424).
--define(wxGrid_GetColMinimalAcceptableWidth, 425).
--define(wxGrid_GetDefaultCellAlignment, 426).
--define(wxGrid_GetDefaultCellBackgroundColour, 427).
--define(wxGrid_GetDefaultCellFont, 428).
--define(wxGrid_GetDefaultCellTextColour, 429).
--define(wxGrid_GetDefaultColLabelSize, 430).
--define(wxGrid_GetDefaultColSize, 431).
--define(wxGrid_GetDefaultEditor, 432).
--define(wxGrid_GetDefaultEditorForCell_2, 433).
--define(wxGrid_GetDefaultEditorForCell_1, 434).
--define(wxGrid_GetDefaultEditorForType, 435).
--define(wxGrid_GetDefaultRenderer, 436).
--define(wxGrid_GetDefaultRendererForCell, 437).
--define(wxGrid_GetDefaultRendererForType, 438).
--define(wxGrid_GetDefaultRowLabelSize, 439).
--define(wxGrid_GetDefaultRowSize, 440).
--define(wxGrid_GetGridCursorCol, 441).
--define(wxGrid_GetGridCursorRow, 442).
--define(wxGrid_GetGridLineColour, 443).
--define(wxGrid_GridLinesEnabled, 444).
--define(wxGrid_GetLabelBackgroundColour, 445).
--define(wxGrid_GetLabelFont, 446).
--define(wxGrid_GetLabelTextColour, 447).
--define(wxGrid_GetNumberCols, 448).
--define(wxGrid_GetNumberRows, 449).
--define(wxGrid_GetOrCreateCellAttr, 450).
--define(wxGrid_GetRowMinimalAcceptableHeight, 451).
--define(wxGrid_GetRowLabelAlignment, 452).
--define(wxGrid_GetRowLabelSize, 453).
--define(wxGrid_GetRowLabelValue, 454).
--define(wxGrid_GetRowSize, 455).
--define(wxGrid_GetScrollLineX, 456).
--define(wxGrid_GetScrollLineY, 457).
--define(wxGrid_GetSelectedCells, 458).
--define(wxGrid_GetSelectedCols, 459).
--define(wxGrid_GetSelectedRows, 460).
--define(wxGrid_GetSelectionBackground, 461).
--define(wxGrid_GetSelectionBlockTopLeft, 462).
--define(wxGrid_GetSelectionBlockBottomRight, 463).
--define(wxGrid_GetSelectionForeground, 464).
--define(wxGrid_GetViewWidth, 465).
--define(wxGrid_GetGridWindow, 466).
--define(wxGrid_GetGridRowLabelWindow, 467).
--define(wxGrid_GetGridColLabelWindow, 468).
--define(wxGrid_GetGridCornerLabelWindow, 469).
--define(wxGrid_HideCellEditControl, 470).
--define(wxGrid_InsertCols, 471).
--define(wxGrid_InsertRows, 472).
--define(wxGrid_IsCellEditControlEnabled, 473).
--define(wxGrid_IsCurrentCellReadOnly, 474).
--define(wxGrid_IsEditable, 475).
--define(wxGrid_IsInSelection_2, 476).
--define(wxGrid_IsInSelection_1, 477).
--define(wxGrid_IsReadOnly, 478).
--define(wxGrid_IsSelection, 479).
--define(wxGrid_IsVisible_3, 480).
--define(wxGrid_IsVisible_2, 481).
--define(wxGrid_MakeCellVisible_2, 482).
--define(wxGrid_MakeCellVisible_1, 483).
--define(wxGrid_MoveCursorDown, 484).
--define(wxGrid_MoveCursorLeft, 485).
--define(wxGrid_MoveCursorRight, 486).
--define(wxGrid_MoveCursorUp, 487).
--define(wxGrid_MoveCursorDownBlock, 488).
--define(wxGrid_MoveCursorLeftBlock, 489).
--define(wxGrid_MoveCursorRightBlock, 490).
--define(wxGrid_MoveCursorUpBlock, 491).
--define(wxGrid_MovePageDown, 492).
--define(wxGrid_MovePageUp, 493).
--define(wxGrid_RegisterDataType, 494).
--define(wxGrid_SaveEditControlValue, 495).
--define(wxGrid_SelectAll, 496).
--define(wxGrid_SelectBlock_5, 497).
--define(wxGrid_SelectBlock_3, 498).
--define(wxGrid_SelectCol, 499).
--define(wxGrid_SelectRow, 500).
--define(wxGrid_SetCellAlignment_4, 501).
--define(wxGrid_SetCellAlignment_3, 502).
--define(wxGrid_SetCellAlignment_1, 503).
--define(wxGrid_SetCellBackgroundColour_3_0, 504).
--define(wxGrid_SetCellBackgroundColour_1, 505).
--define(wxGrid_SetCellBackgroundColour_3_1, 506).
--define(wxGrid_SetCellEditor, 507).
--define(wxGrid_SetCellFont, 508).
--define(wxGrid_SetCellRenderer, 509).
--define(wxGrid_SetCellTextColour_3_0, 510).
--define(wxGrid_SetCellTextColour_3_1, 511).
--define(wxGrid_SetCellTextColour_1, 512).
--define(wxGrid_SetCellValue_3_0, 513).
--define(wxGrid_SetCellValue_2, 514).
--define(wxGrid_SetCellValue_3_1, 515).
--define(wxGrid_SetColAttr, 516).
--define(wxGrid_SetColFormatBool, 517).
--define(wxGrid_SetColFormatNumber, 518).
--define(wxGrid_SetColFormatFloat, 519).
--define(wxGrid_SetColFormatCustom, 520).
--define(wxGrid_SetColLabelAlignment, 521).
--define(wxGrid_SetColLabelSize, 522).
--define(wxGrid_SetColLabelValue, 523).
--define(wxGrid_SetColMinimalWidth, 524).
--define(wxGrid_SetColMinimalAcceptableWidth, 525).
--define(wxGrid_SetColSize, 526).
--define(wxGrid_SetDefaultCellAlignment, 527).
--define(wxGrid_SetDefaultCellBackgroundColour, 528).
--define(wxGrid_SetDefaultCellFont, 529).
--define(wxGrid_SetDefaultCellTextColour, 530).
--define(wxGrid_SetDefaultEditor, 531).
--define(wxGrid_SetDefaultRenderer, 532).
--define(wxGrid_SetDefaultColSize, 533).
--define(wxGrid_SetDefaultRowSize, 534).
--define(wxGrid_SetGridCursor, 535).
--define(wxGrid_SetGridLineColour, 536).
--define(wxGrid_SetLabelBackgroundColour, 537).
--define(wxGrid_SetLabelFont, 538).
--define(wxGrid_SetLabelTextColour, 539).
--define(wxGrid_SetMargins, 540).
--define(wxGrid_SetReadOnly, 541).
--define(wxGrid_SetRowAttr, 542).
--define(wxGrid_SetRowLabelAlignment, 543).
--define(wxGrid_SetRowLabelSize, 544).
--define(wxGrid_SetRowLabelValue, 545).
--define(wxGrid_SetRowMinimalHeight, 546).
--define(wxGrid_SetRowMinimalAcceptableHeight, 547).
--define(wxGrid_SetRowSize, 548).
--define(wxGrid_SetScrollLineX, 549).
--define(wxGrid_SetScrollLineY, 550).
--define(wxGrid_SetSelectionBackground, 551).
--define(wxGrid_SetSelectionForeground, 552).
--define(wxGrid_SetSelectionMode, 553).
--define(wxGrid_ShowCellEditControl, 554).
--define(wxGrid_XToCol, 555).
--define(wxGrid_XToEdgeOfCol, 556).
--define(wxGrid_YToEdgeOfRow, 557).
--define(wxGrid_YToRow, 558).
--define(wxGridCellRenderer_Draw, 559).
--define(wxGridCellRenderer_GetBestSize, 560).
--define(wxGridCellEditor_Create, 561).
--define(wxGridCellEditor_IsCreated, 562).
--define(wxGridCellEditor_SetSize, 563).
--define(wxGridCellEditor_Show, 564).
--define(wxGridCellEditor_PaintBackground, 565).
--define(wxGridCellEditor_BeginEdit, 566).
--define(wxGridCellEditor_EndEdit, 567).
--define(wxGridCellEditor_Reset, 568).
--define(wxGridCellEditor_StartingKey, 569).
--define(wxGridCellEditor_StartingClick, 570).
--define(wxGridCellEditor_HandleReturn, 571).
--define(wxGridCellBoolRenderer_new, 572).
--define(wxGridCellBoolRenderer_destroy, 573).
--define(wxGridCellBoolEditor_new, 574).
--define(wxGridCellBoolEditor_IsTrueValue, 575).
--define(wxGridCellBoolEditor_UseStringValues, 576).
--define(wxGridCellBoolEditor_destroy, 577).
--define(wxGridCellFloatRenderer_new, 578).
--define(wxGridCellFloatRenderer_GetPrecision, 579).
--define(wxGridCellFloatRenderer_GetWidth, 580).
--define(wxGridCellFloatRenderer_SetParameters, 581).
--define(wxGridCellFloatRenderer_SetPrecision, 582).
--define(wxGridCellFloatRenderer_SetWidth, 583).
--define(wxGridCellFloatRenderer_destroy, 584).
--define(wxGridCellFloatEditor_new, 585).
--define(wxGridCellFloatEditor_SetParameters, 586).
--define(wxGridCellFloatEditor_destroy, 587).
--define(wxGridCellStringRenderer_new, 588).
--define(wxGridCellStringRenderer_destroy, 589).
--define(wxGridCellTextEditor_new, 590).
--define(wxGridCellTextEditor_SetParameters, 591).
--define(wxGridCellTextEditor_destroy, 592).
--define(wxGridCellChoiceEditor_new, 594).
--define(wxGridCellChoiceEditor_SetParameters, 595).
--define(wxGridCellChoiceEditor_destroy, 596).
--define(wxGridCellNumberRenderer_new, 597).
--define(wxGridCellNumberRenderer_destroy, 598).
--define(wxGridCellNumberEditor_new, 599).
--define(wxGridCellNumberEditor_GetValue, 600).
--define(wxGridCellNumberEditor_SetParameters, 601).
--define(wxGridCellNumberEditor_destroy, 602).
--define(wxGridCellAttr_SetTextColour, 603).
--define(wxGridCellAttr_SetBackgroundColour, 604).
--define(wxGridCellAttr_SetFont, 605).
--define(wxGridCellAttr_SetAlignment, 606).
--define(wxGridCellAttr_SetReadOnly, 607).
--define(wxGridCellAttr_SetRenderer, 608).
--define(wxGridCellAttr_SetEditor, 609).
--define(wxGridCellAttr_HasTextColour, 610).
--define(wxGridCellAttr_HasBackgroundColour, 611).
--define(wxGridCellAttr_HasFont, 612).
--define(wxGridCellAttr_HasAlignment, 613).
--define(wxGridCellAttr_HasRenderer, 614).
--define(wxGridCellAttr_HasEditor, 615).
--define(wxGridCellAttr_GetTextColour, 616).
--define(wxGridCellAttr_GetBackgroundColour, 617).
--define(wxGridCellAttr_GetFont, 618).
--define(wxGridCellAttr_GetAlignment, 619).
--define(wxGridCellAttr_GetRenderer, 620).
--define(wxGridCellAttr_GetEditor, 621).
--define(wxGridCellAttr_IsReadOnly, 622).
--define(wxGridCellAttr_SetDefAttr, 623).
--define(wxDC_Blit, 624).
--define(wxDC_CalcBoundingBox, 625).
--define(wxDC_Clear, 626).
--define(wxDC_ComputeScaleAndOrigin, 627).
--define(wxDC_CrossHair, 628).
--define(wxDC_DestroyClippingRegion, 629).
--define(wxDC_DeviceToLogicalX, 630).
--define(wxDC_DeviceToLogicalXRel, 631).
--define(wxDC_DeviceToLogicalY, 632).
--define(wxDC_DeviceToLogicalYRel, 633).
--define(wxDC_DrawArc, 634).
--define(wxDC_DrawBitmap, 635).
--define(wxDC_DrawCheckMark, 636).
--define(wxDC_DrawCircle, 637).
--define(wxDC_DrawEllipse_2, 639).
--define(wxDC_DrawEllipse_1, 640).
--define(wxDC_DrawEllipticArc, 641).
--define(wxDC_DrawIcon, 642).
--define(wxDC_DrawLabel, 643).
--define(wxDC_DrawLine, 644).
--define(wxDC_DrawLines, 645).
--define(wxDC_DrawPolygon, 647).
--define(wxDC_DrawPoint, 649).
--define(wxDC_DrawRectangle_2, 651).
--define(wxDC_DrawRectangle_1, 652).
--define(wxDC_DrawRotatedText, 653).
--define(wxDC_DrawRoundedRectangle_3, 655).
--define(wxDC_DrawRoundedRectangle_2, 656).
--define(wxDC_DrawText, 657).
--define(wxDC_EndDoc, 658).
--define(wxDC_EndPage, 659).
--define(wxDC_FloodFill, 660).
--define(wxDC_GetBackground, 661).
--define(wxDC_GetBackgroundMode, 662).
--define(wxDC_GetBrush, 663).
--define(wxDC_GetCharHeight, 664).
--define(wxDC_GetCharWidth, 665).
--define(wxDC_GetClippingBox, 666).
--define(wxDC_GetFont, 668).
--define(wxDC_GetLayoutDirection, 669).
--define(wxDC_GetLogicalFunction, 670).
--define(wxDC_GetMapMode, 671).
--define(wxDC_GetMultiLineTextExtent_4, 672).
--define(wxDC_GetMultiLineTextExtent_1, 673).
--define(wxDC_GetPartialTextExtents, 674).
--define(wxDC_GetPen, 675).
--define(wxDC_GetPixel, 676).
--define(wxDC_GetPPI, 677).
--define(wxDC_GetSize, 679).
--define(wxDC_GetSizeMM, 681).
--define(wxDC_GetTextBackground, 682).
--define(wxDC_GetTextExtent_4, 683).
--define(wxDC_GetTextExtent_1, 684).
--define(wxDC_GetTextForeground, 686).
--define(wxDC_GetUserScale, 687).
--define(wxDC_GradientFillConcentric_3, 688).
--define(wxDC_GradientFillConcentric_4, 689).
--define(wxDC_GradientFillLinear, 690).
--define(wxDC_LogicalToDeviceX, 691).
--define(wxDC_LogicalToDeviceXRel, 692).
--define(wxDC_LogicalToDeviceY, 693).
--define(wxDC_LogicalToDeviceYRel, 694).
--define(wxDC_MaxX, 695).
--define(wxDC_MaxY, 696).
--define(wxDC_MinX, 697).
--define(wxDC_MinY, 698).
--define(wxDC_IsOk, 699).
--define(wxDC_ResetBoundingBox, 700).
--define(wxDC_SetAxisOrientation, 701).
--define(wxDC_SetBackground, 702).
--define(wxDC_SetBackgroundMode, 703).
--define(wxDC_SetBrush, 704).
--define(wxDC_SetClippingRegion_2, 706).
--define(wxDC_SetClippingRegion_1_1, 707).
--define(wxDC_SetClippingRegion_1_0, 708).
--define(wxDC_SetDeviceOrigin, 709).
--define(wxDC_SetFont, 710).
--define(wxDC_SetLayoutDirection, 711).
--define(wxDC_SetLogicalFunction, 712).
--define(wxDC_SetMapMode, 713).
--define(wxDC_SetPalette, 714).
--define(wxDC_SetPen, 715).
--define(wxDC_SetTextBackground, 716).
--define(wxDC_SetTextForeground, 717).
--define(wxDC_SetUserScale, 718).
--define(wxDC_StartDoc, 719).
--define(wxDC_StartPage, 720).
--define(wxMirrorDC_new, 721).
--define(wxMirrorDC_destroy, 722).
--define(wxScreenDC_new, 723).
--define(wxScreenDC_destruct, 724).
--define(wxPostScriptDC_new_0, 725).
--define(wxPostScriptDC_new_1, 726).
--define(wxPostScriptDC_destruct, 727).
--define(wxPostScriptDC_SetResolution, 728).
--define(wxPostScriptDC_GetResolution, 729).
--define(wxWindowDC_new_0, 730).
--define(wxWindowDC_new_1, 731).
--define(wxWindowDC_destruct, 732).
--define(wxClientDC_new_0, 733).
--define(wxClientDC_new_1, 734).
--define(wxClientDC_destroy, 735).
--define(wxPaintDC_new_0, 736).
--define(wxPaintDC_new_1, 737).
--define(wxPaintDC_destroy, 738).
--define(wxMemoryDC_new_1_0, 740).
--define(wxMemoryDC_new_1_1, 741).
--define(wxMemoryDC_new_0, 742).
--define(wxMemoryDC_destruct, 744).
--define(wxMemoryDC_SelectObject, 745).
--define(wxMemoryDC_SelectObjectAsSource, 746).
--define(wxBufferedDC_new_0, 747).
--define(wxBufferedDC_new_2, 748).
--define(wxBufferedDC_new_3, 749).
--define(wxBufferedDC_destruct, 750).
--define(wxBufferedDC_Init_2, 751).
--define(wxBufferedDC_Init_3, 752).
--define(wxBufferedPaintDC_new_3, 753).
--define(wxBufferedPaintDC_new_2, 754).
--define(wxBufferedPaintDC_destruct, 755).
--define(wxGraphicsObject_destruct, 756).
--define(wxGraphicsObject_GetRenderer, 757).
--define(wxGraphicsObject_IsNull, 758).
--define(wxGraphicsContext_destruct, 759).
--define(wxGraphicsContext_Create_1_1, 760).
--define(wxGraphicsContext_Create_1_0, 761).
--define(wxGraphicsContext_Create_0, 762).
--define(wxGraphicsContext_CreatePen, 763).
--define(wxGraphicsContext_CreateBrush, 764).
--define(wxGraphicsContext_CreateRadialGradientBrush, 765).
--define(wxGraphicsContext_CreateLinearGradientBrush, 766).
--define(wxGraphicsContext_CreateFont, 767).
--define(wxGraphicsContext_CreateMatrix, 768).
--define(wxGraphicsContext_CreatePath, 769).
--define(wxGraphicsContext_Clip_1, 770).
--define(wxGraphicsContext_Clip_4, 771).
--define(wxGraphicsContext_ResetClip, 772).
--define(wxGraphicsContext_DrawBitmap, 773).
--define(wxGraphicsContext_DrawEllipse, 774).
--define(wxGraphicsContext_DrawIcon, 775).
--define(wxGraphicsContext_DrawLines, 776).
--define(wxGraphicsContext_DrawPath, 777).
--define(wxGraphicsContext_DrawRectangle, 778).
--define(wxGraphicsContext_DrawRoundedRectangle, 779).
--define(wxGraphicsContext_DrawText_3, 780).
--define(wxGraphicsContext_DrawText_4_0, 781).
--define(wxGraphicsContext_DrawText_4_1, 782).
--define(wxGraphicsContext_DrawText_5, 783).
--define(wxGraphicsContext_FillPath, 784).
--define(wxGraphicsContext_StrokePath, 785).
--define(wxGraphicsContext_GetPartialTextExtents, 786).
--define(wxGraphicsContext_GetTextExtent, 787).
--define(wxGraphicsContext_Rotate, 788).
--define(wxGraphicsContext_Scale, 789).
--define(wxGraphicsContext_Translate, 790).
--define(wxGraphicsContext_GetTransform, 791).
--define(wxGraphicsContext_SetTransform, 792).
--define(wxGraphicsContext_ConcatTransform, 793).
--define(wxGraphicsContext_SetBrush_1_1, 794).
--define(wxGraphicsContext_SetBrush_1_0, 795).
--define(wxGraphicsContext_SetFont_1, 796).
--define(wxGraphicsContext_SetFont_2, 797).
--define(wxGraphicsContext_SetPen_1_0, 798).
--define(wxGraphicsContext_SetPen_1_1, 799).
--define(wxGraphicsContext_StrokeLine, 800).
--define(wxGraphicsContext_StrokeLines, 801).
--define(wxGraphicsMatrix_Concat, 803).
--define(wxGraphicsMatrix_Get, 805).
--define(wxGraphicsMatrix_Invert, 806).
--define(wxGraphicsMatrix_IsEqual, 807).
--define(wxGraphicsMatrix_IsIdentity, 809).
--define(wxGraphicsMatrix_Rotate, 810).
--define(wxGraphicsMatrix_Scale, 811).
--define(wxGraphicsMatrix_Translate, 812).
--define(wxGraphicsMatrix_Set, 813).
--define(wxGraphicsMatrix_TransformPoint, 814).
--define(wxGraphicsMatrix_TransformDistance, 815).
--define(wxGraphicsPath_MoveToPoint_2, 816).
--define(wxGraphicsPath_MoveToPoint_1, 817).
--define(wxGraphicsPath_AddArc_6, 818).
--define(wxGraphicsPath_AddArc_5, 819).
--define(wxGraphicsPath_AddArcToPoint, 820).
--define(wxGraphicsPath_AddCircle, 821).
--define(wxGraphicsPath_AddCurveToPoint_6, 822).
--define(wxGraphicsPath_AddCurveToPoint_3, 823).
--define(wxGraphicsPath_AddEllipse, 824).
--define(wxGraphicsPath_AddLineToPoint_2, 825).
--define(wxGraphicsPath_AddLineToPoint_1, 826).
--define(wxGraphicsPath_AddPath, 827).
--define(wxGraphicsPath_AddQuadCurveToPoint, 828).
--define(wxGraphicsPath_AddRectangle, 829).
--define(wxGraphicsPath_AddRoundedRectangle, 830).
--define(wxGraphicsPath_CloseSubpath, 831).
--define(wxGraphicsPath_Contains_3, 832).
--define(wxGraphicsPath_Contains_2, 833).
--define(wxGraphicsPath_GetBox, 835).
--define(wxGraphicsPath_GetCurrentPoint, 837).
--define(wxGraphicsPath_Transform, 838).
--define(wxGraphicsRenderer_GetDefaultRenderer, 839).
--define(wxGraphicsRenderer_CreateContext_1_1, 840).
--define(wxGraphicsRenderer_CreateContext_1_0, 841).
--define(wxGraphicsRenderer_CreatePen, 842).
--define(wxGraphicsRenderer_CreateBrush, 843).
--define(wxGraphicsRenderer_CreateLinearGradientBrush, 844).
--define(wxGraphicsRenderer_CreateRadialGradientBrush, 845).
--define(wxGraphicsRenderer_CreateFont, 846).
--define(wxGraphicsRenderer_CreateMatrix, 847).
--define(wxGraphicsRenderer_CreatePath, 848).
--define(wxMenuBar_new_1, 850).
--define(wxMenuBar_new_0, 852).
--define(wxMenuBar_destruct, 854).
--define(wxMenuBar_Append, 855).
--define(wxMenuBar_Check, 856).
--define(wxMenuBar_Enable_2, 857).
--define(wxMenuBar_Enable_1, 858).
--define(wxMenuBar_EnableTop, 859).
--define(wxMenuBar_FindMenu, 860).
--define(wxMenuBar_FindMenuItem, 861).
--define(wxMenuBar_FindItem, 862).
--define(wxMenuBar_GetHelpString, 863).
--define(wxMenuBar_GetLabel_1, 864).
--define(wxMenuBar_GetLabel_0, 865).
--define(wxMenuBar_GetLabelTop, 866).
--define(wxMenuBar_GetMenu, 867).
--define(wxMenuBar_GetMenuCount, 868).
--define(wxMenuBar_Insert, 869).
--define(wxMenuBar_IsChecked, 870).
--define(wxMenuBar_IsEnabled_1, 871).
--define(wxMenuBar_IsEnabled_0, 872).
--define(wxMenuBar_Remove, 873).
--define(wxMenuBar_Replace, 874).
--define(wxMenuBar_SetHelpString, 875).
--define(wxMenuBar_SetLabel_2, 876).
--define(wxMenuBar_SetLabel_1, 877).
--define(wxMenuBar_SetLabelTop, 878).
--define(wxControl_GetLabel, 879).
--define(wxControl_SetLabel, 880).
--define(wxControlWithItems_Append_1, 881).
--define(wxControlWithItems_Append_2, 882).
--define(wxControlWithItems_appendStrings_1, 883).
--define(wxControlWithItems_Clear, 884).
--define(wxControlWithItems_Delete, 885).
--define(wxControlWithItems_FindString, 886).
--define(wxControlWithItems_getClientData, 887).
--define(wxControlWithItems_setClientData, 888).
--define(wxControlWithItems_GetCount, 889).
--define(wxControlWithItems_GetSelection, 890).
--define(wxControlWithItems_GetString, 891).
--define(wxControlWithItems_GetStringSelection, 892).
--define(wxControlWithItems_Insert_2, 893).
--define(wxControlWithItems_Insert_3, 894).
--define(wxControlWithItems_IsEmpty, 895).
--define(wxControlWithItems_Select, 896).
--define(wxControlWithItems_SetSelection, 897).
--define(wxControlWithItems_SetString, 898).
--define(wxControlWithItems_SetStringSelection, 899).
--define(wxMenu_new_2, 902).
--define(wxMenu_new_1, 903).
--define(wxMenu_destruct, 905).
--define(wxMenu_Append_3, 906).
--define(wxMenu_Append_1, 907).
--define(wxMenu_Append_4_0, 908).
--define(wxMenu_Append_4_1, 909).
--define(wxMenu_AppendCheckItem, 910).
--define(wxMenu_AppendRadioItem, 911).
--define(wxMenu_AppendSeparator, 912).
--define(wxMenu_Break, 913).
--define(wxMenu_Check, 914).
--define(wxMenu_Delete_1_0, 915).
--define(wxMenu_Delete_1_1, 916).
--define(wxMenu_Destroy_1_0, 917).
--define(wxMenu_Destroy_1_1, 918).
--define(wxMenu_Enable, 919).
--define(wxMenu_FindItem_1, 920).
--define(wxMenu_FindItem_2, 921).
--define(wxMenu_FindItemByPosition, 922).
--define(wxMenu_GetHelpString, 923).
--define(wxMenu_GetLabel, 924).
--define(wxMenu_GetMenuItemCount, 925).
--define(wxMenu_GetMenuItems, 926).
--define(wxMenu_GetTitle, 928).
--define(wxMenu_Insert_2, 929).
--define(wxMenu_Insert_3, 930).
--define(wxMenu_Insert_5_1, 931).
--define(wxMenu_Insert_5_0, 932).
--define(wxMenu_InsertCheckItem, 933).
--define(wxMenu_InsertRadioItem, 934).
--define(wxMenu_InsertSeparator, 935).
--define(wxMenu_IsChecked, 936).
--define(wxMenu_IsEnabled, 937).
--define(wxMenu_Prepend_1, 938).
--define(wxMenu_Prepend_2, 939).
--define(wxMenu_Prepend_4_1, 940).
--define(wxMenu_Prepend_4_0, 941).
--define(wxMenu_PrependCheckItem, 942).
--define(wxMenu_PrependRadioItem, 943).
--define(wxMenu_PrependSeparator, 944).
--define(wxMenu_Remove_1_0, 945).
--define(wxMenu_Remove_1_1, 946).
--define(wxMenu_SetHelpString, 947).
--define(wxMenu_SetLabel, 948).
--define(wxMenu_SetTitle, 949).
--define(wxMenuItem_new, 950).
--define(wxMenuItem_destruct, 952).
--define(wxMenuItem_Check, 953).
--define(wxMenuItem_Enable, 954).
--define(wxMenuItem_GetBitmap, 955).
--define(wxMenuItem_GetHelp, 956).
--define(wxMenuItem_GetId, 957).
--define(wxMenuItem_GetKind, 958).
--define(wxMenuItem_GetLabel, 959).
--define(wxMenuItem_GetLabelFromText, 960).
--define(wxMenuItem_GetMenu, 961).
--define(wxMenuItem_GetText, 962).
--define(wxMenuItem_GetSubMenu, 963).
--define(wxMenuItem_IsCheckable, 964).
--define(wxMenuItem_IsChecked, 965).
--define(wxMenuItem_IsEnabled, 966).
--define(wxMenuItem_IsSeparator, 967).
--define(wxMenuItem_IsSubMenu, 968).
--define(wxMenuItem_SetBitmap, 969).
--define(wxMenuItem_SetHelp, 970).
--define(wxMenuItem_SetMenu, 971).
--define(wxMenuItem_SetSubMenu, 972).
--define(wxMenuItem_SetText, 973).
--define(wxToolBar_AddControl, 974).
--define(wxToolBar_AddSeparator, 975).
--define(wxToolBar_AddTool_5, 976).
--define(wxToolBar_AddTool_4_0, 977).
--define(wxToolBar_AddTool_1, 978).
--define(wxToolBar_AddTool_4_1, 979).
--define(wxToolBar_AddTool_3, 980).
--define(wxToolBar_AddTool_6, 981).
--define(wxToolBar_AddCheckTool, 982).
--define(wxToolBar_AddRadioTool, 983).
--define(wxToolBar_AddStretchableSpace, 984).
--define(wxToolBar_InsertStretchableSpace, 985).
--define(wxToolBar_DeleteTool, 986).
--define(wxToolBar_DeleteToolByPos, 987).
--define(wxToolBar_EnableTool, 988).
--define(wxToolBar_FindById, 989).
--define(wxToolBar_FindControl, 990).
--define(wxToolBar_FindToolForPosition, 991).
--define(wxToolBar_GetToolSize, 992).
--define(wxToolBar_GetToolBitmapSize, 993).
--define(wxToolBar_GetMargins, 994).
--define(wxToolBar_GetToolEnabled, 995).
--define(wxToolBar_GetToolLongHelp, 996).
--define(wxToolBar_GetToolPacking, 997).
--define(wxToolBar_GetToolPos, 998).
--define(wxToolBar_GetToolSeparation, 999).
--define(wxToolBar_GetToolShortHelp, 1000).
--define(wxToolBar_GetToolState, 1001).
--define(wxToolBar_InsertControl, 1002).
--define(wxToolBar_InsertSeparator, 1003).
--define(wxToolBar_InsertTool_5, 1004).
--define(wxToolBar_InsertTool_2, 1005).
--define(wxToolBar_InsertTool_4, 1006).
--define(wxToolBar_Realize, 1007).
--define(wxToolBar_RemoveTool, 1008).
--define(wxToolBar_SetMargins, 1009).
--define(wxToolBar_SetToolBitmapSize, 1010).
--define(wxToolBar_SetToolLongHelp, 1011).
--define(wxToolBar_SetToolPacking, 1012).
--define(wxToolBar_SetToolShortHelp, 1013).
--define(wxToolBar_SetToolSeparation, 1014).
--define(wxToolBar_ToggleTool, 1015).
--define(wxStatusBar_new_0, 1017).
--define(wxStatusBar_new_2, 1018).
--define(wxStatusBar_destruct, 1020).
--define(wxStatusBar_Create, 1021).
--define(wxStatusBar_GetFieldRect, 1022).
--define(wxStatusBar_GetFieldsCount, 1023).
--define(wxStatusBar_GetStatusText, 1024).
--define(wxStatusBar_PopStatusText, 1025).
--define(wxStatusBar_PushStatusText, 1026).
--define(wxStatusBar_SetFieldsCount, 1027).
--define(wxStatusBar_SetMinHeight, 1028).
--define(wxStatusBar_SetStatusText, 1029).
--define(wxStatusBar_SetStatusWidths, 1030).
--define(wxStatusBar_SetStatusStyles, 1031).
--define(wxBitmap_new_0, 1032).
--define(wxBitmap_new_3, 1033).
--define(wxBitmap_new_4, 1034).
--define(wxBitmap_new_2_0, 1035).
--define(wxBitmap_new_2_1, 1036).
--define(wxBitmap_destruct, 1037).
--define(wxBitmap_ConvertToImage, 1038).
--define(wxBitmap_CopyFromIcon, 1039).
--define(wxBitmap_Create, 1040).
--define(wxBitmap_GetDepth, 1041).
--define(wxBitmap_GetHeight, 1042).
--define(wxBitmap_GetPalette, 1043).
--define(wxBitmap_GetMask, 1044).
--define(wxBitmap_GetWidth, 1045).
--define(wxBitmap_GetSubBitmap, 1046).
--define(wxBitmap_LoadFile, 1047).
--define(wxBitmap_Ok, 1048).
--define(wxBitmap_SaveFile, 1049).
--define(wxBitmap_SetDepth, 1050).
--define(wxBitmap_SetHeight, 1051).
--define(wxBitmap_SetMask, 1052).
--define(wxBitmap_SetPalette, 1053).
--define(wxBitmap_SetWidth, 1054).
--define(wxIcon_new_0, 1055).
--define(wxIcon_new_2, 1056).
--define(wxIcon_new_1, 1057).
--define(wxIcon_CopyFromBitmap, 1058).
--define(wxIcon_destroy, 1059).
--define(wxIconBundle_new_0, 1060).
--define(wxIconBundle_new_2, 1061).
--define(wxIconBundle_new_1_0, 1062).
--define(wxIconBundle_new_1_1, 1063).
--define(wxIconBundle_destruct, 1064).
--define(wxIconBundle_AddIcon_2, 1065).
--define(wxIconBundle_AddIcon_1, 1066).
--define(wxIconBundle_GetIcon_1_1, 1067).
--define(wxIconBundle_GetIcon_1_0, 1068).
--define(wxCursor_new_0, 1069).
--define(wxCursor_new_1_0, 1070).
--define(wxCursor_new_1_1, 1071).
--define(wxCursor_new_4, 1072).
--define(wxCursor_destruct, 1073).
--define(wxCursor_Ok, 1074).
--define(wxMask_new_0, 1075).
--define(wxMask_new_2_1, 1076).
--define(wxMask_new_2_0, 1077).
--define(wxMask_new_1, 1078).
--define(wxMask_destruct, 1079).
--define(wxMask_Create_2_1, 1080).
--define(wxMask_Create_2_0, 1081).
--define(wxMask_Create_1, 1082).
--define(wxImage_new_0, 1083).
--define(wxImage_new_3_0, 1084).
--define(wxImage_new_4, 1085).
--define(wxImage_new_5, 1086).
--define(wxImage_new_2, 1087).
--define(wxImage_new_3_1, 1088).
--define(wxImage_Blur, 1089).
--define(wxImage_BlurHorizontal, 1090).
--define(wxImage_BlurVertical, 1091).
--define(wxImage_ConvertAlphaToMask, 1092).
--define(wxImage_ConvertToGreyscale, 1093).
--define(wxImage_ConvertToMono, 1094).
--define(wxImage_Copy, 1095).
--define(wxImage_Create_3, 1096).
--define(wxImage_Create_4, 1097).
--define(wxImage_Create_5, 1098).
--define(wxImage_Destroy, 1099).
--define(wxImage_FindFirstUnusedColour, 1100).
--define(wxImage_GetImageExtWildcard, 1101).
--define(wxImage_GetAlpha_2, 1102).
--define(wxImage_GetAlpha_0, 1103).
--define(wxImage_GetBlue, 1104).
--define(wxImage_GetData, 1105).
--define(wxImage_GetGreen, 1106).
--define(wxImage_GetImageCount, 1107).
--define(wxImage_GetHeight, 1108).
--define(wxImage_GetMaskBlue, 1109).
--define(wxImage_GetMaskGreen, 1110).
--define(wxImage_GetMaskRed, 1111).
--define(wxImage_GetOrFindMaskColour, 1112).
--define(wxImage_GetPalette, 1113).
--define(wxImage_GetRed, 1114).
--define(wxImage_GetSubImage, 1115).
--define(wxImage_GetWidth, 1116).
--define(wxImage_HasAlpha, 1117).
--define(wxImage_HasMask, 1118).
--define(wxImage_GetOption, 1119).
--define(wxImage_GetOptionInt, 1120).
--define(wxImage_HasOption, 1121).
--define(wxImage_InitAlpha, 1122).
--define(wxImage_InitStandardHandlers, 1123).
--define(wxImage_IsTransparent, 1124).
--define(wxImage_LoadFile_2, 1125).
--define(wxImage_LoadFile_3, 1126).
--define(wxImage_Ok, 1127).
--define(wxImage_RemoveHandler, 1128).
--define(wxImage_Mirror, 1129).
--define(wxImage_Replace, 1130).
--define(wxImage_Rescale, 1131).
--define(wxImage_Resize, 1132).
--define(wxImage_Rotate, 1133).
--define(wxImage_RotateHue, 1134).
--define(wxImage_Rotate90, 1135).
--define(wxImage_SaveFile_1, 1136).
--define(wxImage_SaveFile_2_0, 1137).
--define(wxImage_SaveFile_2_1, 1138).
--define(wxImage_Scale, 1139).
--define(wxImage_Size, 1140).
--define(wxImage_SetAlpha_3, 1141).
--define(wxImage_SetAlpha_2, 1142).
--define(wxImage_SetData_2, 1143).
--define(wxImage_SetData_4, 1144).
--define(wxImage_SetMask, 1145).
--define(wxImage_SetMaskColour, 1146).
--define(wxImage_SetMaskFromImage, 1147).
--define(wxImage_SetOption_2_1, 1148).
--define(wxImage_SetOption_2_0, 1149).
--define(wxImage_SetPalette, 1150).
--define(wxImage_SetRGB_5, 1151).
--define(wxImage_SetRGB_4, 1152).
--define(wxImage_destroy, 1153).
--define(wxBrush_new_0, 1154).
--define(wxBrush_new_2, 1155).
--define(wxBrush_new_1, 1156).
--define(wxBrush_destruct, 1158).
--define(wxBrush_GetColour, 1159).
--define(wxBrush_GetStipple, 1160).
--define(wxBrush_GetStyle, 1161).
--define(wxBrush_IsHatch, 1162).
--define(wxBrush_IsOk, 1163).
--define(wxBrush_SetColour_1, 1164).
--define(wxBrush_SetColour_3, 1165).
--define(wxBrush_SetStipple, 1166).
--define(wxBrush_SetStyle, 1167).
--define(wxPen_new_0, 1168).
--define(wxPen_new_2, 1169).
--define(wxPen_destruct, 1170).
--define(wxPen_GetCap, 1171).
--define(wxPen_GetColour, 1172).
--define(wxPen_GetJoin, 1173).
--define(wxPen_GetStyle, 1174).
--define(wxPen_GetWidth, 1175).
--define(wxPen_IsOk, 1176).
--define(wxPen_SetCap, 1177).
--define(wxPen_SetColour_1, 1178).
--define(wxPen_SetColour_3, 1179).
--define(wxPen_SetJoin, 1180).
--define(wxPen_SetStyle, 1181).
--define(wxPen_SetWidth, 1182).
--define(wxRegion_new_0, 1183).
--define(wxRegion_new_4, 1184).
--define(wxRegion_new_2, 1185).
--define(wxRegion_new_1_1, 1186).
--define(wxRegion_new_1_0, 1188).
--define(wxRegion_destruct, 1190).
--define(wxRegion_Clear, 1191).
--define(wxRegion_Contains_2, 1192).
--define(wxRegion_Contains_1_0, 1193).
--define(wxRegion_Contains_4, 1194).
--define(wxRegion_Contains_1_1, 1195).
--define(wxRegion_ConvertToBitmap, 1196).
--define(wxRegion_GetBox, 1197).
--define(wxRegion_Intersect_4, 1198).
--define(wxRegion_Intersect_1_1, 1199).
--define(wxRegion_Intersect_1_0, 1200).
--define(wxRegion_IsEmpty, 1201).
--define(wxRegion_Subtract_4, 1202).
--define(wxRegion_Subtract_1_1, 1203).
--define(wxRegion_Subtract_1_0, 1204).
--define(wxRegion_Offset_2, 1205).
--define(wxRegion_Offset_1, 1206).
--define(wxRegion_Union_4, 1207).
--define(wxRegion_Union_1_2, 1208).
--define(wxRegion_Union_1_1, 1209).
--define(wxRegion_Union_1_0, 1210).
--define(wxRegion_Union_3, 1211).
--define(wxRegion_Xor_4, 1212).
--define(wxRegion_Xor_1_1, 1213).
--define(wxRegion_Xor_1_0, 1214).
--define(wxAcceleratorTable_new_0, 1215).
--define(wxAcceleratorTable_new_2, 1216).
--define(wxAcceleratorTable_destruct, 1217).
--define(wxAcceleratorTable_Ok, 1218).
--define(wxAcceleratorEntry_new_1_0, 1219).
--define(wxAcceleratorEntry_new_1_1, 1220).
--define(wxAcceleratorEntry_GetCommand, 1221).
--define(wxAcceleratorEntry_GetFlags, 1222).
--define(wxAcceleratorEntry_GetKeyCode, 1223).
--define(wxAcceleratorEntry_Set, 1224).
--define(wxAcceleratorEntry_destroy, 1225).
--define(wxCaret_new_3, 1230).
--define(wxCaret_new_2, 1231).
--define(wxCaret_destruct, 1233).
--define(wxCaret_Create_3, 1234).
--define(wxCaret_Create_2, 1235).
--define(wxCaret_GetBlinkTime, 1236).
--define(wxCaret_GetPosition, 1238).
--define(wxCaret_GetSize, 1240).
--define(wxCaret_GetWindow, 1241).
--define(wxCaret_Hide, 1242).
--define(wxCaret_IsOk, 1243).
--define(wxCaret_IsVisible, 1244).
--define(wxCaret_Move_2, 1245).
--define(wxCaret_Move_1, 1246).
--define(wxCaret_SetBlinkTime, 1247).
--define(wxCaret_SetSize_2, 1248).
--define(wxCaret_SetSize_1, 1249).
--define(wxCaret_Show, 1250).
--define(wxSizer_Add_2_1, 1251).
--define(wxSizer_Add_2_0, 1252).
--define(wxSizer_Add_3, 1253).
--define(wxSizer_Add_2_3, 1254).
--define(wxSizer_Add_2_2, 1255).
--define(wxSizer_AddSpacer, 1256).
--define(wxSizer_AddStretchSpacer, 1257).
--define(wxSizer_CalcMin, 1258).
--define(wxSizer_Clear, 1259).
--define(wxSizer_Detach_1_2, 1260).
--define(wxSizer_Detach_1_1, 1261).
--define(wxSizer_Detach_1_0, 1262).
--define(wxSizer_Fit, 1263).
--define(wxSizer_FitInside, 1264).
--define(wxSizer_GetChildren, 1265).
--define(wxSizer_GetItem_2_1, 1266).
--define(wxSizer_GetItem_2_0, 1267).
--define(wxSizer_GetItem_1, 1268).
--define(wxSizer_GetSize, 1269).
--define(wxSizer_GetPosition, 1270).
--define(wxSizer_GetMinSize, 1271).
--define(wxSizer_Hide_2_0, 1272).
--define(wxSizer_Hide_2_1, 1273).
--define(wxSizer_Hide_1, 1274).
--define(wxSizer_Insert_3_1, 1275).
--define(wxSizer_Insert_3_0, 1276).
--define(wxSizer_Insert_4, 1277).
--define(wxSizer_Insert_3_3, 1278).
--define(wxSizer_Insert_3_2, 1279).
--define(wxSizer_Insert_2, 1280).
--define(wxSizer_InsertSpacer, 1281).
--define(wxSizer_InsertStretchSpacer, 1282).
--define(wxSizer_IsShown_1_2, 1283).
--define(wxSizer_IsShown_1_1, 1284).
--define(wxSizer_IsShown_1_0, 1285).
--define(wxSizer_Layout, 1286).
--define(wxSizer_Prepend_2_1, 1287).
--define(wxSizer_Prepend_2_0, 1288).
--define(wxSizer_Prepend_3, 1289).
--define(wxSizer_Prepend_2_3, 1290).
--define(wxSizer_Prepend_2_2, 1291).
--define(wxSizer_Prepend_1, 1292).
--define(wxSizer_PrependSpacer, 1293).
--define(wxSizer_PrependStretchSpacer, 1294).
--define(wxSizer_RecalcSizes, 1295).
--define(wxSizer_Remove_1_1, 1296).
--define(wxSizer_Remove_1_0, 1297).
--define(wxSizer_Replace_3_1, 1298).
--define(wxSizer_Replace_3_0, 1299).
--define(wxSizer_Replace_2, 1300).
--define(wxSizer_SetDimension, 1301).
--define(wxSizer_SetMinSize_2, 1302).
--define(wxSizer_SetMinSize_1, 1303).
--define(wxSizer_SetItemMinSize_3_2, 1304).
--define(wxSizer_SetItemMinSize_2_2, 1305).
--define(wxSizer_SetItemMinSize_3_1, 1306).
--define(wxSizer_SetItemMinSize_2_1, 1307).
--define(wxSizer_SetItemMinSize_3_0, 1308).
--define(wxSizer_SetItemMinSize_2_0, 1309).
--define(wxSizer_SetSizeHints, 1310).
--define(wxSizer_SetVirtualSizeHints, 1311).
--define(wxSizer_Show_2_2, 1312).
--define(wxSizer_Show_2_1, 1313).
--define(wxSizer_Show_2_0, 1314).
--define(wxSizer_Show_1, 1315).
--define(wxSizerFlags_new, 1316).
--define(wxSizerFlags_Align, 1317).
--define(wxSizerFlags_Border_2, 1318).
--define(wxSizerFlags_Border_1, 1319).
--define(wxSizerFlags_Center, 1320).
--define(wxSizerFlags_Centre, 1321).
--define(wxSizerFlags_Expand, 1322).
--define(wxSizerFlags_Left, 1323).
--define(wxSizerFlags_Proportion, 1324).
--define(wxSizerFlags_Right, 1325).
--define(wxSizerFlags_destroy, 1326).
--define(wxSizerItem_new_5_1, 1327).
--define(wxSizerItem_new_2_1, 1328).
--define(wxSizerItem_new_5_0, 1329).
--define(wxSizerItem_new_2_0, 1330).
--define(wxSizerItem_new_6, 1331).
--define(wxSizerItem_new_3, 1332).
--define(wxSizerItem_new_0, 1333).
--define(wxSizerItem_destruct, 1334).
--define(wxSizerItem_CalcMin, 1335).
--define(wxSizerItem_DeleteWindows, 1336).
--define(wxSizerItem_DetachSizer, 1337).
--define(wxSizerItem_GetBorder, 1338).
--define(wxSizerItem_GetFlag, 1339).
--define(wxSizerItem_GetMinSize, 1340).
--define(wxSizerItem_GetPosition, 1341).
--define(wxSizerItem_GetProportion, 1342).
--define(wxSizerItem_GetRatio, 1343).
--define(wxSizerItem_GetRect, 1344).
--define(wxSizerItem_GetSize, 1345).
--define(wxSizerItem_GetSizer, 1346).
--define(wxSizerItem_GetSpacer, 1347).
--define(wxSizerItem_GetUserData, 1348).
--define(wxSizerItem_GetWindow, 1349).
--define(wxSizerItem_IsSizer, 1350).
--define(wxSizerItem_IsShown, 1351).
--define(wxSizerItem_IsSpacer, 1352).
--define(wxSizerItem_IsWindow, 1353).
--define(wxSizerItem_SetBorder, 1354).
--define(wxSizerItem_SetDimension, 1355).
--define(wxSizerItem_SetFlag, 1356).
--define(wxSizerItem_SetInitSize, 1357).
--define(wxSizerItem_SetMinSize_1, 1358).
--define(wxSizerItem_SetMinSize_2, 1359).
--define(wxSizerItem_SetProportion, 1360).
--define(wxSizerItem_SetRatio_2, 1361).
--define(wxSizerItem_SetRatio_1_1, 1362).
--define(wxSizerItem_SetRatio_1_0, 1363).
--define(wxSizerItem_SetSizer, 1364).
--define(wxSizerItem_SetSpacer_1, 1365).
--define(wxSizerItem_SetSpacer_2, 1366).
--define(wxSizerItem_SetWindow, 1367).
--define(wxSizerItem_Show, 1368).
--define(wxBoxSizer_new, 1369).
--define(wxBoxSizer_GetOrientation, 1370).
--define(wxBoxSizer_destroy, 1371).
--define(wxStaticBoxSizer_new_2, 1372).
--define(wxStaticBoxSizer_new_3, 1373).
--define(wxStaticBoxSizer_GetStaticBox, 1374).
--define(wxStaticBoxSizer_destroy, 1375).
--define(wxGridSizer_new_4, 1376).
--define(wxGridSizer_new_2, 1377).
--define(wxGridSizer_GetCols, 1378).
--define(wxGridSizer_GetHGap, 1379).
--define(wxGridSizer_GetRows, 1380).
--define(wxGridSizer_GetVGap, 1381).
--define(wxGridSizer_SetCols, 1382).
--define(wxGridSizer_SetHGap, 1383).
--define(wxGridSizer_SetRows, 1384).
--define(wxGridSizer_SetVGap, 1385).
--define(wxGridSizer_destroy, 1386).
--define(wxFlexGridSizer_new_4, 1387).
--define(wxFlexGridSizer_new_2, 1388).
--define(wxFlexGridSizer_AddGrowableCol, 1389).
--define(wxFlexGridSizer_AddGrowableRow, 1390).
--define(wxFlexGridSizer_GetFlexibleDirection, 1391).
--define(wxFlexGridSizer_GetNonFlexibleGrowMode, 1392).
--define(wxFlexGridSizer_RemoveGrowableCol, 1393).
--define(wxFlexGridSizer_RemoveGrowableRow, 1394).
--define(wxFlexGridSizer_SetFlexibleDirection, 1395).
--define(wxFlexGridSizer_SetNonFlexibleGrowMode, 1396).
--define(wxFlexGridSizer_destroy, 1397).
--define(wxGridBagSizer_new, 1398).
--define(wxGridBagSizer_Add_3_2, 1399).
--define(wxGridBagSizer_Add_3_1, 1400).
--define(wxGridBagSizer_Add_4, 1401).
--define(wxGridBagSizer_Add_1_0, 1402).
--define(wxGridBagSizer_Add_2_1, 1403).
--define(wxGridBagSizer_Add_2_0, 1404).
--define(wxGridBagSizer_Add_3_0, 1405).
--define(wxGridBagSizer_Add_1_1, 1406).
--define(wxGridBagSizer_CalcMin, 1407).
--define(wxGridBagSizer_CheckForIntersection_2, 1408).
--define(wxGridBagSizer_CheckForIntersection_3, 1409).
--define(wxGridBagSizer_FindItem_1_1, 1410).
--define(wxGridBagSizer_FindItem_1_0, 1411).
--define(wxGridBagSizer_FindItemAtPoint, 1412).
--define(wxGridBagSizer_FindItemAtPosition, 1413).
--define(wxGridBagSizer_FindItemWithData, 1414).
--define(wxGridBagSizer_GetCellSize, 1415).
--define(wxGridBagSizer_GetEmptyCellSize, 1416).
--define(wxGridBagSizer_GetItemPosition_1_2, 1417).
--define(wxGridBagSizer_GetItemPosition_1_1, 1418).
--define(wxGridBagSizer_GetItemPosition_1_0, 1419).
--define(wxGridBagSizer_GetItemSpan_1_2, 1420).
--define(wxGridBagSizer_GetItemSpan_1_1, 1421).
--define(wxGridBagSizer_GetItemSpan_1_0, 1422).
--define(wxGridBagSizer_SetEmptyCellSize, 1423).
--define(wxGridBagSizer_SetItemPosition_2_2, 1424).
--define(wxGridBagSizer_SetItemPosition_2_1, 1425).
--define(wxGridBagSizer_SetItemPosition_2_0, 1426).
--define(wxGridBagSizer_SetItemSpan_2_2, 1427).
--define(wxGridBagSizer_SetItemSpan_2_1, 1428).
--define(wxGridBagSizer_SetItemSpan_2_0, 1429).
--define(wxGridBagSizer_destroy, 1430).
--define(wxStdDialogButtonSizer_new, 1431).
--define(wxStdDialogButtonSizer_AddButton, 1432).
--define(wxStdDialogButtonSizer_Realize, 1433).
--define(wxStdDialogButtonSizer_SetAffirmativeButton, 1434).
--define(wxStdDialogButtonSizer_SetCancelButton, 1435).
--define(wxStdDialogButtonSizer_SetNegativeButton, 1436).
--define(wxStdDialogButtonSizer_destroy, 1437).
--define(wxFont_new_0, 1438).
--define(wxFont_new_1, 1439).
--define(wxFont_new_5, 1440).
--define(wxFont_destruct, 1442).
--define(wxFont_IsFixedWidth, 1443).
--define(wxFont_GetDefaultEncoding, 1444).
--define(wxFont_GetFaceName, 1445).
--define(wxFont_GetFamily, 1446).
--define(wxFont_GetNativeFontInfoDesc, 1447).
--define(wxFont_GetNativeFontInfoUserDesc, 1448).
--define(wxFont_GetPointSize, 1449).
--define(wxFont_GetStyle, 1450).
--define(wxFont_GetUnderlined, 1451).
--define(wxFont_GetWeight, 1452).
--define(wxFont_Ok, 1453).
--define(wxFont_SetDefaultEncoding, 1454).
--define(wxFont_SetFaceName, 1455).
--define(wxFont_SetFamily, 1456).
--define(wxFont_SetPointSize, 1457).
--define(wxFont_SetStyle, 1458).
--define(wxFont_SetUnderlined, 1459).
--define(wxFont_SetWeight, 1460).
--define(wxToolTip_Enable, 1461).
--define(wxToolTip_SetDelay, 1462).
--define(wxToolTip_new, 1463).
--define(wxToolTip_SetTip, 1464).
--define(wxToolTip_GetTip, 1465).
--define(wxToolTip_GetWindow, 1466).
--define(wxToolTip_destroy, 1467).
--define(wxButton_new_3, 1469).
--define(wxButton_new_0, 1470).
--define(wxButton_destruct, 1471).
--define(wxButton_Create, 1472).
--define(wxButton_GetDefaultSize, 1473).
--define(wxButton_SetDefault, 1474).
--define(wxButton_SetLabel, 1475).
--define(wxBitmapButton_new_4, 1477).
--define(wxBitmapButton_new_0, 1478).
--define(wxBitmapButton_Create, 1479).
--define(wxBitmapButton_GetBitmapDisabled, 1480).
--define(wxBitmapButton_GetBitmapFocus, 1482).
--define(wxBitmapButton_GetBitmapLabel, 1484).
--define(wxBitmapButton_GetBitmapSelected, 1486).
--define(wxBitmapButton_SetBitmapDisabled, 1488).
--define(wxBitmapButton_SetBitmapFocus, 1489).
--define(wxBitmapButton_SetBitmapLabel, 1490).
--define(wxBitmapButton_SetBitmapSelected, 1491).
--define(wxBitmapButton_destroy, 1492).
--define(wxToggleButton_new_0, 1493).
--define(wxToggleButton_new_4, 1494).
--define(wxToggleButton_Create, 1495).
--define(wxToggleButton_GetValue, 1496).
--define(wxToggleButton_SetValue, 1497).
--define(wxToggleButton_destroy, 1498).
--define(wxCalendarCtrl_new_0, 1499).
--define(wxCalendarCtrl_new_3, 1500).
--define(wxCalendarCtrl_Create, 1501).
--define(wxCalendarCtrl_destruct, 1502).
--define(wxCalendarCtrl_SetDate, 1503).
--define(wxCalendarCtrl_GetDate, 1504).
--define(wxCalendarCtrl_EnableYearChange, 1505).
--define(wxCalendarCtrl_EnableMonthChange, 1506).
--define(wxCalendarCtrl_EnableHolidayDisplay, 1507).
--define(wxCalendarCtrl_SetHeaderColours, 1508).
--define(wxCalendarCtrl_GetHeaderColourFg, 1509).
--define(wxCalendarCtrl_GetHeaderColourBg, 1510).
--define(wxCalendarCtrl_SetHighlightColours, 1511).
--define(wxCalendarCtrl_GetHighlightColourFg, 1512).
--define(wxCalendarCtrl_GetHighlightColourBg, 1513).
--define(wxCalendarCtrl_SetHolidayColours, 1514).
--define(wxCalendarCtrl_GetHolidayColourFg, 1515).
--define(wxCalendarCtrl_GetHolidayColourBg, 1516).
--define(wxCalendarCtrl_GetAttr, 1517).
--define(wxCalendarCtrl_SetAttr, 1518).
--define(wxCalendarCtrl_SetHoliday, 1519).
--define(wxCalendarCtrl_ResetAttr, 1520).
--define(wxCalendarCtrl_HitTest, 1521).
--define(wxCalendarDateAttr_new_0, 1522).
--define(wxCalendarDateAttr_new_2_1, 1523).
--define(wxCalendarDateAttr_new_2_0, 1524).
--define(wxCalendarDateAttr_SetTextColour, 1525).
--define(wxCalendarDateAttr_SetBackgroundColour, 1526).
--define(wxCalendarDateAttr_SetBorderColour, 1527).
--define(wxCalendarDateAttr_SetFont, 1528).
--define(wxCalendarDateAttr_SetBorder, 1529).
--define(wxCalendarDateAttr_SetHoliday, 1530).
--define(wxCalendarDateAttr_HasTextColour, 1531).
--define(wxCalendarDateAttr_HasBackgroundColour, 1532).
--define(wxCalendarDateAttr_HasBorderColour, 1533).
--define(wxCalendarDateAttr_HasFont, 1534).
--define(wxCalendarDateAttr_HasBorder, 1535).
--define(wxCalendarDateAttr_IsHoliday, 1536).
--define(wxCalendarDateAttr_GetTextColour, 1537).
--define(wxCalendarDateAttr_GetBackgroundColour, 1538).
--define(wxCalendarDateAttr_GetBorderColour, 1539).
--define(wxCalendarDateAttr_GetFont, 1540).
--define(wxCalendarDateAttr_GetBorder, 1541).
--define(wxCalendarDateAttr_destroy, 1542).
--define(wxCheckBox_new_4, 1544).
--define(wxCheckBox_new_0, 1545).
--define(wxCheckBox_Create, 1546).
--define(wxCheckBox_GetValue, 1547).
--define(wxCheckBox_Get3StateValue, 1548).
--define(wxCheckBox_Is3rdStateAllowedForUser, 1549).
--define(wxCheckBox_Is3State, 1550).
--define(wxCheckBox_IsChecked, 1551).
--define(wxCheckBox_SetValue, 1552).
--define(wxCheckBox_Set3StateValue, 1553).
--define(wxCheckBox_destroy, 1554).
--define(wxCheckListBox_new_0, 1555).
--define(wxCheckListBox_new_3, 1557).
--define(wxCheckListBox_Check, 1558).
--define(wxCheckListBox_IsChecked, 1559).
--define(wxCheckListBox_destroy, 1560).
--define(wxChoice_new_3, 1563).
--define(wxChoice_new_0, 1564).
--define(wxChoice_destruct, 1566).
--define(wxChoice_Create, 1568).
--define(wxChoice_Delete, 1569).
--define(wxChoice_GetColumns, 1570).
--define(wxChoice_SetColumns, 1571).
--define(wxComboBox_new_0, 1572).
--define(wxComboBox_new_3, 1574).
--define(wxComboBox_destruct, 1575).
--define(wxComboBox_Create, 1577).
--define(wxComboBox_CanCopy, 1578).
--define(wxComboBox_CanCut, 1579).
--define(wxComboBox_CanPaste, 1580).
--define(wxComboBox_CanRedo, 1581).
--define(wxComboBox_CanUndo, 1582).
--define(wxComboBox_Copy, 1583).
--define(wxComboBox_Cut, 1584).
--define(wxComboBox_GetInsertionPoint, 1585).
--define(wxComboBox_GetLastPosition, 1586).
--define(wxComboBox_GetValue, 1587).
--define(wxComboBox_Paste, 1588).
--define(wxComboBox_Redo, 1589).
--define(wxComboBox_Replace, 1590).
--define(wxComboBox_Remove, 1591).
--define(wxComboBox_SetInsertionPoint, 1592).
--define(wxComboBox_SetInsertionPointEnd, 1593).
--define(wxComboBox_SetSelection_1, 1594).
--define(wxComboBox_SetSelection_2, 1595).
--define(wxComboBox_SetValue, 1596).
--define(wxComboBox_Undo, 1597).
--define(wxGauge_new_0, 1598).
--define(wxGauge_new_4, 1599).
--define(wxGauge_Create, 1600).
--define(wxGauge_GetBezelFace, 1601).
--define(wxGauge_GetRange, 1602).
--define(wxGauge_GetShadowWidth, 1603).
--define(wxGauge_GetValue, 1604).
--define(wxGauge_IsVertical, 1605).
--define(wxGauge_SetBezelFace, 1606).
--define(wxGauge_SetRange, 1607).
--define(wxGauge_SetShadowWidth, 1608).
+-define(wxWindow_SetTransparent, 284).
+-define(wxWindow_CanSetTransparent, 285).
+-define(wxWindow_IsDoubleBuffered, 286).
+-define(wxWindow_SetDoubleBuffered, 287).
+-define(wxTopLevelWindow_GetIcon, 288).
+-define(wxTopLevelWindow_GetIcons, 289).
+-define(wxTopLevelWindow_GetTitle, 290).
+-define(wxTopLevelWindow_IsActive, 291).
+-define(wxTopLevelWindow_Iconize, 292).
+-define(wxTopLevelWindow_IsFullScreen, 293).
+-define(wxTopLevelWindow_IsIconized, 294).
+-define(wxTopLevelWindow_IsMaximized, 295).
+-define(wxTopLevelWindow_Maximize, 296).
+-define(wxTopLevelWindow_RequestUserAttention, 297).
+-define(wxTopLevelWindow_SetIcon, 298).
+-define(wxTopLevelWindow_SetIcons, 299).
+-define(wxTopLevelWindow_CenterOnScreen, 300).
+-define(wxTopLevelWindow_CentreOnScreen, 301).
+-define(wxTopLevelWindow_SetShape, 303).
+-define(wxTopLevelWindow_SetTitle, 304).
+-define(wxTopLevelWindow_ShowFullScreen, 305).
+-define(wxFrame_new_4, 307).
+-define(wxFrame_new_0, 308).
+-define(wxFrame_destruct, 310).
+-define(wxFrame_Create, 311).
+-define(wxFrame_CreateStatusBar, 312).
+-define(wxFrame_CreateToolBar, 313).
+-define(wxFrame_GetClientAreaOrigin, 314).
+-define(wxFrame_GetMenuBar, 315).
+-define(wxFrame_GetStatusBar, 316).
+-define(wxFrame_GetStatusBarPane, 317).
+-define(wxFrame_GetToolBar, 318).
+-define(wxFrame_ProcessCommand, 319).
+-define(wxFrame_SendSizeEvent, 320).
+-define(wxFrame_SetMenuBar, 321).
+-define(wxFrame_SetStatusBar, 322).
+-define(wxFrame_SetStatusBarPane, 323).
+-define(wxFrame_SetStatusText, 324).
+-define(wxFrame_SetStatusWidths, 325).
+-define(wxFrame_SetToolBar, 326).
+-define(wxMiniFrame_new_0, 327).
+-define(wxMiniFrame_new_4, 328).
+-define(wxMiniFrame_Create, 329).
+-define(wxMiniFrame_destroy, 330).
+-define(wxSplashScreen_new_0, 331).
+-define(wxSplashScreen_new_6, 332).
+-define(wxSplashScreen_destruct, 333).
+-define(wxSplashScreen_GetSplashStyle, 334).
+-define(wxSplashScreen_GetTimeout, 335).
+-define(wxPanel_new_0, 336).
+-define(wxPanel_new_6, 337).
+-define(wxPanel_new_2, 338).
+-define(wxPanel_destruct, 339).
+-define(wxPanel_InitDialog, 340).
+-define(wxPanel_SetFocusIgnoringChildren, 341).
+-define(wxScrolledWindow_new_0, 342).
+-define(wxScrolledWindow_new_2, 343).
+-define(wxScrolledWindow_destruct, 344).
+-define(wxScrolledWindow_CalcScrolledPosition_4, 345).
+-define(wxScrolledWindow_CalcScrolledPosition_1, 346).
+-define(wxScrolledWindow_CalcUnscrolledPosition_4, 347).
+-define(wxScrolledWindow_CalcUnscrolledPosition_1, 348).
+-define(wxScrolledWindow_EnableScrolling, 349).
+-define(wxScrolledWindow_GetScrollPixelsPerUnit, 350).
+-define(wxScrolledWindow_GetViewStart, 351).
+-define(wxScrolledWindow_DoPrepareDC, 352).
+-define(wxScrolledWindow_PrepareDC, 353).
+-define(wxScrolledWindow_Scroll, 354).
+-define(wxScrolledWindow_SetScrollbars, 355).
+-define(wxScrolledWindow_SetScrollRate, 356).
+-define(wxScrolledWindow_SetTargetWindow, 357).
+-define(wxSashWindow_new_0, 358).
+-define(wxSashWindow_new_2, 359).
+-define(wxSashWindow_destruct, 360).
+-define(wxSashWindow_GetSashVisible, 361).
+-define(wxSashWindow_GetMaximumSizeX, 362).
+-define(wxSashWindow_GetMaximumSizeY, 363).
+-define(wxSashWindow_GetMinimumSizeX, 364).
+-define(wxSashWindow_GetMinimumSizeY, 365).
+-define(wxSashWindow_SetMaximumSizeX, 366).
+-define(wxSashWindow_SetMaximumSizeY, 367).
+-define(wxSashWindow_SetMinimumSizeX, 368).
+-define(wxSashWindow_SetMinimumSizeY, 369).
+-define(wxSashWindow_SetSashVisible, 370).
+-define(wxSashLayoutWindow_new_0, 371).
+-define(wxSashLayoutWindow_new_2, 372).
+-define(wxSashLayoutWindow_Create, 373).
+-define(wxSashLayoutWindow_GetAlignment, 374).
+-define(wxSashLayoutWindow_GetOrientation, 375).
+-define(wxSashLayoutWindow_SetAlignment, 376).
+-define(wxSashLayoutWindow_SetDefaultSize, 377).
+-define(wxSashLayoutWindow_SetOrientation, 378).
+-define(wxSashLayoutWindow_destroy, 379).
+-define(wxGrid_new_0, 380).
+-define(wxGrid_new_3, 381).
+-define(wxGrid_new_4, 382).
+-define(wxGrid_destruct, 383).
+-define(wxGrid_AppendCols, 384).
+-define(wxGrid_AppendRows, 385).
+-define(wxGrid_AutoSize, 386).
+-define(wxGrid_AutoSizeColumn, 387).
+-define(wxGrid_AutoSizeColumns, 388).
+-define(wxGrid_AutoSizeRow, 389).
+-define(wxGrid_AutoSizeRows, 390).
+-define(wxGrid_BeginBatch, 391).
+-define(wxGrid_BlockToDeviceRect, 392).
+-define(wxGrid_CanDragColSize, 393).
+-define(wxGrid_CanDragRowSize, 394).
+-define(wxGrid_CanDragGridSize, 395).
+-define(wxGrid_CanEnableCellControl, 396).
+-define(wxGrid_CellToRect_2, 397).
+-define(wxGrid_CellToRect_1, 398).
+-define(wxGrid_ClearGrid, 399).
+-define(wxGrid_ClearSelection, 400).
+-define(wxGrid_CreateGrid, 401).
+-define(wxGrid_DeleteCols, 402).
+-define(wxGrid_DeleteRows, 403).
+-define(wxGrid_DisableCellEditControl, 404).
+-define(wxGrid_DisableDragColSize, 405).
+-define(wxGrid_DisableDragGridSize, 406).
+-define(wxGrid_DisableDragRowSize, 407).
+-define(wxGrid_EnableCellEditControl, 408).
+-define(wxGrid_EnableDragColSize, 409).
+-define(wxGrid_EnableDragGridSize, 410).
+-define(wxGrid_EnableDragRowSize, 411).
+-define(wxGrid_EnableEditing, 412).
+-define(wxGrid_EnableGridLines, 413).
+-define(wxGrid_EndBatch, 414).
+-define(wxGrid_Fit, 415).
+-define(wxGrid_ForceRefresh, 416).
+-define(wxGrid_GetBatchCount, 417).
+-define(wxGrid_GetCellAlignment, 418).
+-define(wxGrid_GetCellBackgroundColour, 419).
+-define(wxGrid_GetCellEditor, 420).
+-define(wxGrid_GetCellFont, 421).
+-define(wxGrid_GetCellRenderer, 422).
+-define(wxGrid_GetCellTextColour, 423).
+-define(wxGrid_GetCellValue_2, 424).
+-define(wxGrid_GetCellValue_1, 425).
+-define(wxGrid_GetColLabelAlignment, 426).
+-define(wxGrid_GetColLabelSize, 427).
+-define(wxGrid_GetColLabelValue, 428).
+-define(wxGrid_GetColMinimalAcceptableWidth, 429).
+-define(wxGrid_GetDefaultCellAlignment, 430).
+-define(wxGrid_GetDefaultCellBackgroundColour, 431).
+-define(wxGrid_GetDefaultCellFont, 432).
+-define(wxGrid_GetDefaultCellTextColour, 433).
+-define(wxGrid_GetDefaultColLabelSize, 434).
+-define(wxGrid_GetDefaultColSize, 435).
+-define(wxGrid_GetDefaultEditor, 436).
+-define(wxGrid_GetDefaultEditorForCell_2, 437).
+-define(wxGrid_GetDefaultEditorForCell_1, 438).
+-define(wxGrid_GetDefaultEditorForType, 439).
+-define(wxGrid_GetDefaultRenderer, 440).
+-define(wxGrid_GetDefaultRendererForCell, 441).
+-define(wxGrid_GetDefaultRendererForType, 442).
+-define(wxGrid_GetDefaultRowLabelSize, 443).
+-define(wxGrid_GetDefaultRowSize, 444).
+-define(wxGrid_GetGridCursorCol, 445).
+-define(wxGrid_GetGridCursorRow, 446).
+-define(wxGrid_GetGridLineColour, 447).
+-define(wxGrid_GridLinesEnabled, 448).
+-define(wxGrid_GetLabelBackgroundColour, 449).
+-define(wxGrid_GetLabelFont, 450).
+-define(wxGrid_GetLabelTextColour, 451).
+-define(wxGrid_GetNumberCols, 452).
+-define(wxGrid_GetNumberRows, 453).
+-define(wxGrid_GetOrCreateCellAttr, 454).
+-define(wxGrid_GetRowMinimalAcceptableHeight, 455).
+-define(wxGrid_GetRowLabelAlignment, 456).
+-define(wxGrid_GetRowLabelSize, 457).
+-define(wxGrid_GetRowLabelValue, 458).
+-define(wxGrid_GetRowSize, 459).
+-define(wxGrid_GetScrollLineX, 460).
+-define(wxGrid_GetScrollLineY, 461).
+-define(wxGrid_GetSelectedCells, 462).
+-define(wxGrid_GetSelectedCols, 463).
+-define(wxGrid_GetSelectedRows, 464).
+-define(wxGrid_GetSelectionBackground, 465).
+-define(wxGrid_GetSelectionBlockTopLeft, 466).
+-define(wxGrid_GetSelectionBlockBottomRight, 467).
+-define(wxGrid_GetSelectionForeground, 468).
+-define(wxGrid_GetViewWidth, 469).
+-define(wxGrid_GetGridWindow, 470).
+-define(wxGrid_GetGridRowLabelWindow, 471).
+-define(wxGrid_GetGridColLabelWindow, 472).
+-define(wxGrid_GetGridCornerLabelWindow, 473).
+-define(wxGrid_HideCellEditControl, 474).
+-define(wxGrid_InsertCols, 475).
+-define(wxGrid_InsertRows, 476).
+-define(wxGrid_IsCellEditControlEnabled, 477).
+-define(wxGrid_IsCurrentCellReadOnly, 478).
+-define(wxGrid_IsEditable, 479).
+-define(wxGrid_IsInSelection_2, 480).
+-define(wxGrid_IsInSelection_1, 481).
+-define(wxGrid_IsReadOnly, 482).
+-define(wxGrid_IsSelection, 483).
+-define(wxGrid_IsVisible_3, 484).
+-define(wxGrid_IsVisible_2, 485).
+-define(wxGrid_MakeCellVisible_2, 486).
+-define(wxGrid_MakeCellVisible_1, 487).
+-define(wxGrid_MoveCursorDown, 488).
+-define(wxGrid_MoveCursorLeft, 489).
+-define(wxGrid_MoveCursorRight, 490).
+-define(wxGrid_MoveCursorUp, 491).
+-define(wxGrid_MoveCursorDownBlock, 492).
+-define(wxGrid_MoveCursorLeftBlock, 493).
+-define(wxGrid_MoveCursorRightBlock, 494).
+-define(wxGrid_MoveCursorUpBlock, 495).
+-define(wxGrid_MovePageDown, 496).
+-define(wxGrid_MovePageUp, 497).
+-define(wxGrid_RegisterDataType, 498).
+-define(wxGrid_SaveEditControlValue, 499).
+-define(wxGrid_SelectAll, 500).
+-define(wxGrid_SelectBlock_5, 501).
+-define(wxGrid_SelectBlock_3, 502).
+-define(wxGrid_SelectCol, 503).
+-define(wxGrid_SelectRow, 504).
+-define(wxGrid_SetCellAlignment_4, 505).
+-define(wxGrid_SetCellAlignment_3, 506).
+-define(wxGrid_SetCellAlignment_1, 507).
+-define(wxGrid_SetCellBackgroundColour_3_0, 508).
+-define(wxGrid_SetCellBackgroundColour_1, 509).
+-define(wxGrid_SetCellBackgroundColour_3_1, 510).
+-define(wxGrid_SetCellEditor, 511).
+-define(wxGrid_SetCellFont, 512).
+-define(wxGrid_SetCellRenderer, 513).
+-define(wxGrid_SetCellTextColour_3_0, 514).
+-define(wxGrid_SetCellTextColour_3_1, 515).
+-define(wxGrid_SetCellTextColour_1, 516).
+-define(wxGrid_SetCellValue_3_0, 517).
+-define(wxGrid_SetCellValue_2, 518).
+-define(wxGrid_SetCellValue_3_1, 519).
+-define(wxGrid_SetColAttr, 520).
+-define(wxGrid_SetColFormatBool, 521).
+-define(wxGrid_SetColFormatNumber, 522).
+-define(wxGrid_SetColFormatFloat, 523).
+-define(wxGrid_SetColFormatCustom, 524).
+-define(wxGrid_SetColLabelAlignment, 525).
+-define(wxGrid_SetColLabelSize, 526).
+-define(wxGrid_SetColLabelValue, 527).
+-define(wxGrid_SetColMinimalWidth, 528).
+-define(wxGrid_SetColMinimalAcceptableWidth, 529).
+-define(wxGrid_SetColSize, 530).
+-define(wxGrid_SetDefaultCellAlignment, 531).
+-define(wxGrid_SetDefaultCellBackgroundColour, 532).
+-define(wxGrid_SetDefaultCellFont, 533).
+-define(wxGrid_SetDefaultCellTextColour, 534).
+-define(wxGrid_SetDefaultEditor, 535).
+-define(wxGrid_SetDefaultRenderer, 536).
+-define(wxGrid_SetDefaultColSize, 537).
+-define(wxGrid_SetDefaultRowSize, 538).
+-define(wxGrid_SetGridCursor, 539).
+-define(wxGrid_SetGridLineColour, 540).
+-define(wxGrid_SetLabelBackgroundColour, 541).
+-define(wxGrid_SetLabelFont, 542).
+-define(wxGrid_SetLabelTextColour, 543).
+-define(wxGrid_SetMargins, 544).
+-define(wxGrid_SetReadOnly, 545).
+-define(wxGrid_SetRowAttr, 546).
+-define(wxGrid_SetRowLabelAlignment, 547).
+-define(wxGrid_SetRowLabelSize, 548).
+-define(wxGrid_SetRowLabelValue, 549).
+-define(wxGrid_SetRowMinimalHeight, 550).
+-define(wxGrid_SetRowMinimalAcceptableHeight, 551).
+-define(wxGrid_SetRowSize, 552).
+-define(wxGrid_SetScrollLineX, 553).
+-define(wxGrid_SetScrollLineY, 554).
+-define(wxGrid_SetSelectionBackground, 555).
+-define(wxGrid_SetSelectionForeground, 556).
+-define(wxGrid_SetSelectionMode, 557).
+-define(wxGrid_ShowCellEditControl, 558).
+-define(wxGrid_XToCol, 559).
+-define(wxGrid_XToEdgeOfCol, 560).
+-define(wxGrid_YToEdgeOfRow, 561).
+-define(wxGrid_YToRow, 562).
+-define(wxGridCellRenderer_Draw, 563).
+-define(wxGridCellRenderer_GetBestSize, 564).
+-define(wxGridCellEditor_Create, 565).
+-define(wxGridCellEditor_IsCreated, 566).
+-define(wxGridCellEditor_SetSize, 567).
+-define(wxGridCellEditor_Show, 568).
+-define(wxGridCellEditor_PaintBackground, 569).
+-define(wxGridCellEditor_BeginEdit, 570).
+-define(wxGridCellEditor_EndEdit, 571).
+-define(wxGridCellEditor_Reset, 572).
+-define(wxGridCellEditor_StartingKey, 573).
+-define(wxGridCellEditor_StartingClick, 574).
+-define(wxGridCellEditor_HandleReturn, 575).
+-define(wxGridCellBoolRenderer_new, 576).
+-define(wxGridCellBoolRenderer_destroy, 577).
+-define(wxGridCellBoolEditor_new, 578).
+-define(wxGridCellBoolEditor_IsTrueValue, 579).
+-define(wxGridCellBoolEditor_UseStringValues, 580).
+-define(wxGridCellBoolEditor_destroy, 581).
+-define(wxGridCellFloatRenderer_new, 582).
+-define(wxGridCellFloatRenderer_GetPrecision, 583).
+-define(wxGridCellFloatRenderer_GetWidth, 584).
+-define(wxGridCellFloatRenderer_SetParameters, 585).
+-define(wxGridCellFloatRenderer_SetPrecision, 586).
+-define(wxGridCellFloatRenderer_SetWidth, 587).
+-define(wxGridCellFloatRenderer_destroy, 588).
+-define(wxGridCellFloatEditor_new, 589).
+-define(wxGridCellFloatEditor_SetParameters, 590).
+-define(wxGridCellFloatEditor_destroy, 591).
+-define(wxGridCellStringRenderer_new, 592).
+-define(wxGridCellStringRenderer_destroy, 593).
+-define(wxGridCellTextEditor_new, 594).
+-define(wxGridCellTextEditor_SetParameters, 595).
+-define(wxGridCellTextEditor_destroy, 596).
+-define(wxGridCellChoiceEditor_new, 598).
+-define(wxGridCellChoiceEditor_SetParameters, 599).
+-define(wxGridCellChoiceEditor_destroy, 600).
+-define(wxGridCellNumberRenderer_new, 601).
+-define(wxGridCellNumberRenderer_destroy, 602).
+-define(wxGridCellNumberEditor_new, 603).
+-define(wxGridCellNumberEditor_GetValue, 604).
+-define(wxGridCellNumberEditor_SetParameters, 605).
+-define(wxGridCellNumberEditor_destroy, 606).
+-define(wxGridCellAttr_SetTextColour, 607).
+-define(wxGridCellAttr_SetBackgroundColour, 608).
+-define(wxGridCellAttr_SetFont, 609).
+-define(wxGridCellAttr_SetAlignment, 610).
+-define(wxGridCellAttr_SetReadOnly, 611).
+-define(wxGridCellAttr_SetRenderer, 612).
+-define(wxGridCellAttr_SetEditor, 613).
+-define(wxGridCellAttr_HasTextColour, 614).
+-define(wxGridCellAttr_HasBackgroundColour, 615).
+-define(wxGridCellAttr_HasFont, 616).
+-define(wxGridCellAttr_HasAlignment, 617).
+-define(wxGridCellAttr_HasRenderer, 618).
+-define(wxGridCellAttr_HasEditor, 619).
+-define(wxGridCellAttr_GetTextColour, 620).
+-define(wxGridCellAttr_GetBackgroundColour, 621).
+-define(wxGridCellAttr_GetFont, 622).
+-define(wxGridCellAttr_GetAlignment, 623).
+-define(wxGridCellAttr_GetRenderer, 624).
+-define(wxGridCellAttr_GetEditor, 625).
+-define(wxGridCellAttr_IsReadOnly, 626).
+-define(wxGridCellAttr_SetDefAttr, 627).
+-define(wxDC_Blit, 628).
+-define(wxDC_CalcBoundingBox, 629).
+-define(wxDC_Clear, 630).
+-define(wxDC_ComputeScaleAndOrigin, 631).
+-define(wxDC_CrossHair, 632).
+-define(wxDC_DestroyClippingRegion, 633).
+-define(wxDC_DeviceToLogicalX, 634).
+-define(wxDC_DeviceToLogicalXRel, 635).
+-define(wxDC_DeviceToLogicalY, 636).
+-define(wxDC_DeviceToLogicalYRel, 637).
+-define(wxDC_DrawArc, 638).
+-define(wxDC_DrawBitmap, 639).
+-define(wxDC_DrawCheckMark, 640).
+-define(wxDC_DrawCircle, 641).
+-define(wxDC_DrawEllipse_2, 643).
+-define(wxDC_DrawEllipse_1, 644).
+-define(wxDC_DrawEllipticArc, 645).
+-define(wxDC_DrawIcon, 646).
+-define(wxDC_DrawLabel, 647).
+-define(wxDC_DrawLine, 648).
+-define(wxDC_DrawLines, 649).
+-define(wxDC_DrawPolygon, 651).
+-define(wxDC_DrawPoint, 653).
+-define(wxDC_DrawRectangle_2, 655).
+-define(wxDC_DrawRectangle_1, 656).
+-define(wxDC_DrawRotatedText, 657).
+-define(wxDC_DrawRoundedRectangle_3, 659).
+-define(wxDC_DrawRoundedRectangle_2, 660).
+-define(wxDC_DrawText, 661).
+-define(wxDC_EndDoc, 662).
+-define(wxDC_EndPage, 663).
+-define(wxDC_FloodFill, 664).
+-define(wxDC_GetBackground, 665).
+-define(wxDC_GetBackgroundMode, 666).
+-define(wxDC_GetBrush, 667).
+-define(wxDC_GetCharHeight, 668).
+-define(wxDC_GetCharWidth, 669).
+-define(wxDC_GetClippingBox, 670).
+-define(wxDC_GetFont, 672).
+-define(wxDC_GetLayoutDirection, 673).
+-define(wxDC_GetLogicalFunction, 674).
+-define(wxDC_GetMapMode, 675).
+-define(wxDC_GetMultiLineTextExtent_4, 676).
+-define(wxDC_GetMultiLineTextExtent_1, 677).
+-define(wxDC_GetPartialTextExtents, 678).
+-define(wxDC_GetPen, 679).
+-define(wxDC_GetPixel, 680).
+-define(wxDC_GetPPI, 681).
+-define(wxDC_GetSize, 683).
+-define(wxDC_GetSizeMM, 685).
+-define(wxDC_GetTextBackground, 686).
+-define(wxDC_GetTextExtent_4, 687).
+-define(wxDC_GetTextExtent_1, 688).
+-define(wxDC_GetTextForeground, 690).
+-define(wxDC_GetUserScale, 691).
+-define(wxDC_GradientFillConcentric_3, 692).
+-define(wxDC_GradientFillConcentric_4, 693).
+-define(wxDC_GradientFillLinear, 694).
+-define(wxDC_LogicalToDeviceX, 695).
+-define(wxDC_LogicalToDeviceXRel, 696).
+-define(wxDC_LogicalToDeviceY, 697).
+-define(wxDC_LogicalToDeviceYRel, 698).
+-define(wxDC_MaxX, 699).
+-define(wxDC_MaxY, 700).
+-define(wxDC_MinX, 701).
+-define(wxDC_MinY, 702).
+-define(wxDC_IsOk, 703).
+-define(wxDC_ResetBoundingBox, 704).
+-define(wxDC_SetAxisOrientation, 705).
+-define(wxDC_SetBackground, 706).
+-define(wxDC_SetBackgroundMode, 707).
+-define(wxDC_SetBrush, 708).
+-define(wxDC_SetClippingRegion_2, 710).
+-define(wxDC_SetClippingRegion_1_1, 711).
+-define(wxDC_SetClippingRegion_1_0, 712).
+-define(wxDC_SetDeviceOrigin, 713).
+-define(wxDC_SetFont, 714).
+-define(wxDC_SetLayoutDirection, 715).
+-define(wxDC_SetLogicalFunction, 716).
+-define(wxDC_SetMapMode, 717).
+-define(wxDC_SetPalette, 718).
+-define(wxDC_SetPen, 719).
+-define(wxDC_SetTextBackground, 720).
+-define(wxDC_SetTextForeground, 721).
+-define(wxDC_SetUserScale, 722).
+-define(wxDC_StartDoc, 723).
+-define(wxDC_StartPage, 724).
+-define(wxMirrorDC_new, 725).
+-define(wxMirrorDC_destroy, 726).
+-define(wxScreenDC_new, 727).
+-define(wxScreenDC_destruct, 728).
+-define(wxPostScriptDC_new_0, 729).
+-define(wxPostScriptDC_new_1, 730).
+-define(wxPostScriptDC_destruct, 731).
+-define(wxPostScriptDC_SetResolution, 732).
+-define(wxPostScriptDC_GetResolution, 733).
+-define(wxWindowDC_new_0, 734).
+-define(wxWindowDC_new_1, 735).
+-define(wxWindowDC_destruct, 736).
+-define(wxClientDC_new_0, 737).
+-define(wxClientDC_new_1, 738).
+-define(wxClientDC_destroy, 739).
+-define(wxPaintDC_new_0, 740).
+-define(wxPaintDC_new_1, 741).
+-define(wxPaintDC_destroy, 742).
+-define(wxMemoryDC_new_1_0, 744).
+-define(wxMemoryDC_new_1_1, 745).
+-define(wxMemoryDC_new_0, 746).
+-define(wxMemoryDC_destruct, 748).
+-define(wxMemoryDC_SelectObject, 749).
+-define(wxMemoryDC_SelectObjectAsSource, 750).
+-define(wxBufferedDC_new_0, 751).
+-define(wxBufferedDC_new_2, 752).
+-define(wxBufferedDC_new_3, 753).
+-define(wxBufferedDC_destruct, 754).
+-define(wxBufferedDC_Init_2, 755).
+-define(wxBufferedDC_Init_3, 756).
+-define(wxBufferedPaintDC_new_3, 757).
+-define(wxBufferedPaintDC_new_2, 758).
+-define(wxBufferedPaintDC_destruct, 759).
+-define(wxGraphicsObject_destruct, 760).
+-define(wxGraphicsObject_GetRenderer, 761).
+-define(wxGraphicsObject_IsNull, 762).
+-define(wxGraphicsContext_destruct, 763).
+-define(wxGraphicsContext_Create_1_1, 764).
+-define(wxGraphicsContext_Create_1_0, 765).
+-define(wxGraphicsContext_Create_0, 766).
+-define(wxGraphicsContext_CreatePen, 767).
+-define(wxGraphicsContext_CreateBrush, 768).
+-define(wxGraphicsContext_CreateRadialGradientBrush, 769).
+-define(wxGraphicsContext_CreateLinearGradientBrush, 770).
+-define(wxGraphicsContext_CreateFont, 771).
+-define(wxGraphicsContext_CreateMatrix, 772).
+-define(wxGraphicsContext_CreatePath, 773).
+-define(wxGraphicsContext_Clip_1, 774).
+-define(wxGraphicsContext_Clip_4, 775).
+-define(wxGraphicsContext_ResetClip, 776).
+-define(wxGraphicsContext_DrawBitmap, 777).
+-define(wxGraphicsContext_DrawEllipse, 778).
+-define(wxGraphicsContext_DrawIcon, 779).
+-define(wxGraphicsContext_DrawLines, 780).
+-define(wxGraphicsContext_DrawPath, 781).
+-define(wxGraphicsContext_DrawRectangle, 782).
+-define(wxGraphicsContext_DrawRoundedRectangle, 783).
+-define(wxGraphicsContext_DrawText_3, 784).
+-define(wxGraphicsContext_DrawText_4_0, 785).
+-define(wxGraphicsContext_DrawText_4_1, 786).
+-define(wxGraphicsContext_DrawText_5, 787).
+-define(wxGraphicsContext_FillPath, 788).
+-define(wxGraphicsContext_StrokePath, 789).
+-define(wxGraphicsContext_GetPartialTextExtents, 790).
+-define(wxGraphicsContext_GetTextExtent, 791).
+-define(wxGraphicsContext_Rotate, 792).
+-define(wxGraphicsContext_Scale, 793).
+-define(wxGraphicsContext_Translate, 794).
+-define(wxGraphicsContext_GetTransform, 795).
+-define(wxGraphicsContext_SetTransform, 796).
+-define(wxGraphicsContext_ConcatTransform, 797).
+-define(wxGraphicsContext_SetBrush_1_1, 798).
+-define(wxGraphicsContext_SetBrush_1_0, 799).
+-define(wxGraphicsContext_SetFont_1, 800).
+-define(wxGraphicsContext_SetFont_2, 801).
+-define(wxGraphicsContext_SetPen_1_0, 802).
+-define(wxGraphicsContext_SetPen_1_1, 803).
+-define(wxGraphicsContext_StrokeLine, 804).
+-define(wxGraphicsContext_StrokeLines, 805).
+-define(wxGraphicsMatrix_Concat, 807).
+-define(wxGraphicsMatrix_Get, 809).
+-define(wxGraphicsMatrix_Invert, 810).
+-define(wxGraphicsMatrix_IsEqual, 811).
+-define(wxGraphicsMatrix_IsIdentity, 813).
+-define(wxGraphicsMatrix_Rotate, 814).
+-define(wxGraphicsMatrix_Scale, 815).
+-define(wxGraphicsMatrix_Translate, 816).
+-define(wxGraphicsMatrix_Set, 817).
+-define(wxGraphicsMatrix_TransformPoint, 818).
+-define(wxGraphicsMatrix_TransformDistance, 819).
+-define(wxGraphicsPath_MoveToPoint_2, 820).
+-define(wxGraphicsPath_MoveToPoint_1, 821).
+-define(wxGraphicsPath_AddArc_6, 822).
+-define(wxGraphicsPath_AddArc_5, 823).
+-define(wxGraphicsPath_AddArcToPoint, 824).
+-define(wxGraphicsPath_AddCircle, 825).
+-define(wxGraphicsPath_AddCurveToPoint_6, 826).
+-define(wxGraphicsPath_AddCurveToPoint_3, 827).
+-define(wxGraphicsPath_AddEllipse, 828).
+-define(wxGraphicsPath_AddLineToPoint_2, 829).
+-define(wxGraphicsPath_AddLineToPoint_1, 830).
+-define(wxGraphicsPath_AddPath, 831).
+-define(wxGraphicsPath_AddQuadCurveToPoint, 832).
+-define(wxGraphicsPath_AddRectangle, 833).
+-define(wxGraphicsPath_AddRoundedRectangle, 834).
+-define(wxGraphicsPath_CloseSubpath, 835).
+-define(wxGraphicsPath_Contains_3, 836).
+-define(wxGraphicsPath_Contains_2, 837).
+-define(wxGraphicsPath_GetBox, 839).
+-define(wxGraphicsPath_GetCurrentPoint, 841).
+-define(wxGraphicsPath_Transform, 842).
+-define(wxGraphicsRenderer_GetDefaultRenderer, 843).
+-define(wxGraphicsRenderer_CreateContext_1_1, 844).
+-define(wxGraphicsRenderer_CreateContext_1_0, 845).
+-define(wxGraphicsRenderer_CreatePen, 846).
+-define(wxGraphicsRenderer_CreateBrush, 847).
+-define(wxGraphicsRenderer_CreateLinearGradientBrush, 848).
+-define(wxGraphicsRenderer_CreateRadialGradientBrush, 849).
+-define(wxGraphicsRenderer_CreateFont, 850).
+-define(wxGraphicsRenderer_CreateMatrix, 851).
+-define(wxGraphicsRenderer_CreatePath, 852).
+-define(wxMenuBar_new_1, 854).
+-define(wxMenuBar_new_0, 856).
+-define(wxMenuBar_destruct, 858).
+-define(wxMenuBar_Append, 859).
+-define(wxMenuBar_Check, 860).
+-define(wxMenuBar_Enable_2, 861).
+-define(wxMenuBar_Enable_1, 862).
+-define(wxMenuBar_EnableTop, 863).
+-define(wxMenuBar_FindMenu, 864).
+-define(wxMenuBar_FindMenuItem, 865).
+-define(wxMenuBar_FindItem, 866).
+-define(wxMenuBar_GetHelpString, 867).
+-define(wxMenuBar_GetLabel_1, 868).
+-define(wxMenuBar_GetLabel_0, 869).
+-define(wxMenuBar_GetLabelTop, 870).
+-define(wxMenuBar_GetMenu, 871).
+-define(wxMenuBar_GetMenuCount, 872).
+-define(wxMenuBar_Insert, 873).
+-define(wxMenuBar_IsChecked, 874).
+-define(wxMenuBar_IsEnabled_1, 875).
+-define(wxMenuBar_IsEnabled_0, 876).
+-define(wxMenuBar_Remove, 877).
+-define(wxMenuBar_Replace, 878).
+-define(wxMenuBar_SetHelpString, 879).
+-define(wxMenuBar_SetLabel_2, 880).
+-define(wxMenuBar_SetLabel_1, 881).
+-define(wxMenuBar_SetLabelTop, 882).
+-define(wxControl_GetLabel, 883).
+-define(wxControl_SetLabel, 884).
+-define(wxControlWithItems_Append_1, 885).
+-define(wxControlWithItems_Append_2, 886).
+-define(wxControlWithItems_appendStrings_1, 887).
+-define(wxControlWithItems_Clear, 888).
+-define(wxControlWithItems_Delete, 889).
+-define(wxControlWithItems_FindString, 890).
+-define(wxControlWithItems_getClientData, 891).
+-define(wxControlWithItems_setClientData, 892).
+-define(wxControlWithItems_GetCount, 893).
+-define(wxControlWithItems_GetSelection, 894).
+-define(wxControlWithItems_GetString, 895).
+-define(wxControlWithItems_GetStringSelection, 896).
+-define(wxControlWithItems_Insert_2, 897).
+-define(wxControlWithItems_Insert_3, 898).
+-define(wxControlWithItems_IsEmpty, 899).
+-define(wxControlWithItems_Select, 900).
+-define(wxControlWithItems_SetSelection, 901).
+-define(wxControlWithItems_SetString, 902).
+-define(wxControlWithItems_SetStringSelection, 903).
+-define(wxMenu_new_2, 906).
+-define(wxMenu_new_1, 907).
+-define(wxMenu_destruct, 909).
+-define(wxMenu_Append_3, 910).
+-define(wxMenu_Append_1, 911).
+-define(wxMenu_Append_4_0, 912).
+-define(wxMenu_Append_4_1, 913).
+-define(wxMenu_AppendCheckItem, 914).
+-define(wxMenu_AppendRadioItem, 915).
+-define(wxMenu_AppendSeparator, 916).
+-define(wxMenu_Break, 917).
+-define(wxMenu_Check, 918).
+-define(wxMenu_Delete_1_0, 919).
+-define(wxMenu_Delete_1_1, 920).
+-define(wxMenu_Destroy_1_0, 921).
+-define(wxMenu_Destroy_1_1, 922).
+-define(wxMenu_Enable, 923).
+-define(wxMenu_FindItem_1, 924).
+-define(wxMenu_FindItem_2, 925).
+-define(wxMenu_FindItemByPosition, 926).
+-define(wxMenu_GetHelpString, 927).
+-define(wxMenu_GetLabel, 928).
+-define(wxMenu_GetMenuItemCount, 929).
+-define(wxMenu_GetMenuItems, 930).
+-define(wxMenu_GetTitle, 932).
+-define(wxMenu_Insert_2, 933).
+-define(wxMenu_Insert_3, 934).
+-define(wxMenu_Insert_5_1, 935).
+-define(wxMenu_Insert_5_0, 936).
+-define(wxMenu_InsertCheckItem, 937).
+-define(wxMenu_InsertRadioItem, 938).
+-define(wxMenu_InsertSeparator, 939).
+-define(wxMenu_IsChecked, 940).
+-define(wxMenu_IsEnabled, 941).
+-define(wxMenu_Prepend_1, 942).
+-define(wxMenu_Prepend_2, 943).
+-define(wxMenu_Prepend_4_1, 944).
+-define(wxMenu_Prepend_4_0, 945).
+-define(wxMenu_PrependCheckItem, 946).
+-define(wxMenu_PrependRadioItem, 947).
+-define(wxMenu_PrependSeparator, 948).
+-define(wxMenu_Remove_1_0, 949).
+-define(wxMenu_Remove_1_1, 950).
+-define(wxMenu_SetHelpString, 951).
+-define(wxMenu_SetLabel, 952).
+-define(wxMenu_SetTitle, 953).
+-define(wxMenuItem_new, 954).
+-define(wxMenuItem_destruct, 956).
+-define(wxMenuItem_Check, 957).
+-define(wxMenuItem_Enable, 958).
+-define(wxMenuItem_GetBitmap, 959).
+-define(wxMenuItem_GetHelp, 960).
+-define(wxMenuItem_GetId, 961).
+-define(wxMenuItem_GetKind, 962).
+-define(wxMenuItem_GetLabel, 963).
+-define(wxMenuItem_GetLabelFromText, 964).
+-define(wxMenuItem_GetMenu, 965).
+-define(wxMenuItem_GetText, 966).
+-define(wxMenuItem_GetSubMenu, 967).
+-define(wxMenuItem_IsCheckable, 968).
+-define(wxMenuItem_IsChecked, 969).
+-define(wxMenuItem_IsEnabled, 970).
+-define(wxMenuItem_IsSeparator, 971).
+-define(wxMenuItem_IsSubMenu, 972).
+-define(wxMenuItem_SetBitmap, 973).
+-define(wxMenuItem_SetHelp, 974).
+-define(wxMenuItem_SetMenu, 975).
+-define(wxMenuItem_SetSubMenu, 976).
+-define(wxMenuItem_SetText, 977).
+-define(wxToolBar_AddControl, 978).
+-define(wxToolBar_AddSeparator, 979).
+-define(wxToolBar_AddTool_5, 980).
+-define(wxToolBar_AddTool_4_0, 981).
+-define(wxToolBar_AddTool_1, 982).
+-define(wxToolBar_AddTool_4_1, 983).
+-define(wxToolBar_AddTool_3, 984).
+-define(wxToolBar_AddTool_6, 985).
+-define(wxToolBar_AddCheckTool, 986).
+-define(wxToolBar_AddRadioTool, 987).
+-define(wxToolBar_AddStretchableSpace, 988).
+-define(wxToolBar_InsertStretchableSpace, 989).
+-define(wxToolBar_DeleteTool, 990).
+-define(wxToolBar_DeleteToolByPos, 991).
+-define(wxToolBar_EnableTool, 992).
+-define(wxToolBar_FindById, 993).
+-define(wxToolBar_FindControl, 994).
+-define(wxToolBar_FindToolForPosition, 995).
+-define(wxToolBar_GetToolSize, 996).
+-define(wxToolBar_GetToolBitmapSize, 997).
+-define(wxToolBar_GetMargins, 998).
+-define(wxToolBar_GetToolEnabled, 999).
+-define(wxToolBar_GetToolLongHelp, 1000).
+-define(wxToolBar_GetToolPacking, 1001).
+-define(wxToolBar_GetToolPos, 1002).
+-define(wxToolBar_GetToolSeparation, 1003).
+-define(wxToolBar_GetToolShortHelp, 1004).
+-define(wxToolBar_GetToolState, 1005).
+-define(wxToolBar_InsertControl, 1006).
+-define(wxToolBar_InsertSeparator, 1007).
+-define(wxToolBar_InsertTool_5, 1008).
+-define(wxToolBar_InsertTool_2, 1009).
+-define(wxToolBar_InsertTool_4, 1010).
+-define(wxToolBar_Realize, 1011).
+-define(wxToolBar_RemoveTool, 1012).
+-define(wxToolBar_SetMargins, 1013).
+-define(wxToolBar_SetToolBitmapSize, 1014).
+-define(wxToolBar_SetToolLongHelp, 1015).
+-define(wxToolBar_SetToolPacking, 1016).
+-define(wxToolBar_SetToolShortHelp, 1017).
+-define(wxToolBar_SetToolSeparation, 1018).
+-define(wxToolBar_ToggleTool, 1019).
+-define(wxStatusBar_new_0, 1021).
+-define(wxStatusBar_new_2, 1022).
+-define(wxStatusBar_destruct, 1024).
+-define(wxStatusBar_Create, 1025).
+-define(wxStatusBar_GetFieldRect, 1026).
+-define(wxStatusBar_GetFieldsCount, 1027).
+-define(wxStatusBar_GetStatusText, 1028).
+-define(wxStatusBar_PopStatusText, 1029).
+-define(wxStatusBar_PushStatusText, 1030).
+-define(wxStatusBar_SetFieldsCount, 1031).
+-define(wxStatusBar_SetMinHeight, 1032).
+-define(wxStatusBar_SetStatusText, 1033).
+-define(wxStatusBar_SetStatusWidths, 1034).
+-define(wxStatusBar_SetStatusStyles, 1035).
+-define(wxBitmap_new_0, 1036).
+-define(wxBitmap_new_3, 1037).
+-define(wxBitmap_new_4, 1038).
+-define(wxBitmap_new_2_0, 1039).
+-define(wxBitmap_new_2_1, 1040).
+-define(wxBitmap_destruct, 1041).
+-define(wxBitmap_ConvertToImage, 1042).
+-define(wxBitmap_CopyFromIcon, 1043).
+-define(wxBitmap_Create, 1044).
+-define(wxBitmap_GetDepth, 1045).
+-define(wxBitmap_GetHeight, 1046).
+-define(wxBitmap_GetPalette, 1047).
+-define(wxBitmap_GetMask, 1048).
+-define(wxBitmap_GetWidth, 1049).
+-define(wxBitmap_GetSubBitmap, 1050).
+-define(wxBitmap_LoadFile, 1051).
+-define(wxBitmap_Ok, 1052).
+-define(wxBitmap_SaveFile, 1053).
+-define(wxBitmap_SetDepth, 1054).
+-define(wxBitmap_SetHeight, 1055).
+-define(wxBitmap_SetMask, 1056).
+-define(wxBitmap_SetPalette, 1057).
+-define(wxBitmap_SetWidth, 1058).
+-define(wxIcon_new_0, 1059).
+-define(wxIcon_new_2, 1060).
+-define(wxIcon_new_1, 1061).
+-define(wxIcon_CopyFromBitmap, 1062).
+-define(wxIcon_destroy, 1063).
+-define(wxIconBundle_new_0, 1064).
+-define(wxIconBundle_new_2, 1065).
+-define(wxIconBundle_new_1_0, 1066).
+-define(wxIconBundle_new_1_1, 1067).
+-define(wxIconBundle_destruct, 1068).
+-define(wxIconBundle_AddIcon_2, 1069).
+-define(wxIconBundle_AddIcon_1, 1070).
+-define(wxIconBundle_GetIcon_1_1, 1071).
+-define(wxIconBundle_GetIcon_1_0, 1072).
+-define(wxCursor_new_0, 1073).
+-define(wxCursor_new_1_0, 1074).
+-define(wxCursor_new_1_1, 1075).
+-define(wxCursor_new_4, 1076).
+-define(wxCursor_destruct, 1077).
+-define(wxCursor_Ok, 1078).
+-define(wxMask_new_0, 1079).
+-define(wxMask_new_2_1, 1080).
+-define(wxMask_new_2_0, 1081).
+-define(wxMask_new_1, 1082).
+-define(wxMask_destruct, 1083).
+-define(wxMask_Create_2_1, 1084).
+-define(wxMask_Create_2_0, 1085).
+-define(wxMask_Create_1, 1086).
+-define(wxImage_new_0, 1087).
+-define(wxImage_new_3_0, 1088).
+-define(wxImage_new_4, 1089).
+-define(wxImage_new_5, 1090).
+-define(wxImage_new_2, 1091).
+-define(wxImage_new_3_1, 1092).
+-define(wxImage_Blur, 1093).
+-define(wxImage_BlurHorizontal, 1094).
+-define(wxImage_BlurVertical, 1095).
+-define(wxImage_ConvertAlphaToMask, 1096).
+-define(wxImage_ConvertToGreyscale, 1097).
+-define(wxImage_ConvertToMono, 1098).
+-define(wxImage_Copy, 1099).
+-define(wxImage_Create_3, 1100).
+-define(wxImage_Create_4, 1101).
+-define(wxImage_Create_5, 1102).
+-define(wxImage_Destroy, 1103).
+-define(wxImage_FindFirstUnusedColour, 1104).
+-define(wxImage_GetImageExtWildcard, 1105).
+-define(wxImage_GetAlpha_2, 1106).
+-define(wxImage_GetAlpha_0, 1107).
+-define(wxImage_GetBlue, 1108).
+-define(wxImage_GetData, 1109).
+-define(wxImage_GetGreen, 1110).
+-define(wxImage_GetImageCount, 1111).
+-define(wxImage_GetHeight, 1112).
+-define(wxImage_GetMaskBlue, 1113).
+-define(wxImage_GetMaskGreen, 1114).
+-define(wxImage_GetMaskRed, 1115).
+-define(wxImage_GetOrFindMaskColour, 1116).
+-define(wxImage_GetPalette, 1117).
+-define(wxImage_GetRed, 1118).
+-define(wxImage_GetSubImage, 1119).
+-define(wxImage_GetWidth, 1120).
+-define(wxImage_HasAlpha, 1121).
+-define(wxImage_HasMask, 1122).
+-define(wxImage_GetOption, 1123).
+-define(wxImage_GetOptionInt, 1124).
+-define(wxImage_HasOption, 1125).
+-define(wxImage_InitAlpha, 1126).
+-define(wxImage_InitStandardHandlers, 1127).
+-define(wxImage_IsTransparent, 1128).
+-define(wxImage_LoadFile_2, 1129).
+-define(wxImage_LoadFile_3, 1130).
+-define(wxImage_Ok, 1131).
+-define(wxImage_RemoveHandler, 1132).
+-define(wxImage_Mirror, 1133).
+-define(wxImage_Replace, 1134).
+-define(wxImage_Rescale, 1135).
+-define(wxImage_Resize, 1136).
+-define(wxImage_Rotate, 1137).
+-define(wxImage_RotateHue, 1138).
+-define(wxImage_Rotate90, 1139).
+-define(wxImage_SaveFile_1, 1140).
+-define(wxImage_SaveFile_2_0, 1141).
+-define(wxImage_SaveFile_2_1, 1142).
+-define(wxImage_Scale, 1143).
+-define(wxImage_Size, 1144).
+-define(wxImage_SetAlpha_3, 1145).
+-define(wxImage_SetAlpha_2, 1146).
+-define(wxImage_SetData_2, 1147).
+-define(wxImage_SetData_4, 1148).
+-define(wxImage_SetMask, 1149).
+-define(wxImage_SetMaskColour, 1150).
+-define(wxImage_SetMaskFromImage, 1151).
+-define(wxImage_SetOption_2_1, 1152).
+-define(wxImage_SetOption_2_0, 1153).
+-define(wxImage_SetPalette, 1154).
+-define(wxImage_SetRGB_5, 1155).
+-define(wxImage_SetRGB_4, 1156).
+-define(wxImage_destroy, 1157).
+-define(wxBrush_new_0, 1158).
+-define(wxBrush_new_2, 1159).
+-define(wxBrush_new_1, 1160).
+-define(wxBrush_destruct, 1162).
+-define(wxBrush_GetColour, 1163).
+-define(wxBrush_GetStipple, 1164).
+-define(wxBrush_GetStyle, 1165).
+-define(wxBrush_IsHatch, 1166).
+-define(wxBrush_IsOk, 1167).
+-define(wxBrush_SetColour_1, 1168).
+-define(wxBrush_SetColour_3, 1169).
+-define(wxBrush_SetStipple, 1170).
+-define(wxBrush_SetStyle, 1171).
+-define(wxPen_new_0, 1172).
+-define(wxPen_new_2, 1173).
+-define(wxPen_destruct, 1174).
+-define(wxPen_GetCap, 1175).
+-define(wxPen_GetColour, 1176).
+-define(wxPen_GetJoin, 1177).
+-define(wxPen_GetStyle, 1178).
+-define(wxPen_GetWidth, 1179).
+-define(wxPen_IsOk, 1180).
+-define(wxPen_SetCap, 1181).
+-define(wxPen_SetColour_1, 1182).
+-define(wxPen_SetColour_3, 1183).
+-define(wxPen_SetJoin, 1184).
+-define(wxPen_SetStyle, 1185).
+-define(wxPen_SetWidth, 1186).
+-define(wxRegion_new_0, 1187).
+-define(wxRegion_new_4, 1188).
+-define(wxRegion_new_2, 1189).
+-define(wxRegion_new_1_1, 1190).
+-define(wxRegion_new_1_0, 1192).
+-define(wxRegion_destruct, 1194).
+-define(wxRegion_Clear, 1195).
+-define(wxRegion_Contains_2, 1196).
+-define(wxRegion_Contains_1_0, 1197).
+-define(wxRegion_Contains_4, 1198).
+-define(wxRegion_Contains_1_1, 1199).
+-define(wxRegion_ConvertToBitmap, 1200).
+-define(wxRegion_GetBox, 1201).
+-define(wxRegion_Intersect_4, 1202).
+-define(wxRegion_Intersect_1_1, 1203).
+-define(wxRegion_Intersect_1_0, 1204).
+-define(wxRegion_IsEmpty, 1205).
+-define(wxRegion_Subtract_4, 1206).
+-define(wxRegion_Subtract_1_1, 1207).
+-define(wxRegion_Subtract_1_0, 1208).
+-define(wxRegion_Offset_2, 1209).
+-define(wxRegion_Offset_1, 1210).
+-define(wxRegion_Union_4, 1211).
+-define(wxRegion_Union_1_2, 1212).
+-define(wxRegion_Union_1_1, 1213).
+-define(wxRegion_Union_1_0, 1214).
+-define(wxRegion_Union_3, 1215).
+-define(wxRegion_Xor_4, 1216).
+-define(wxRegion_Xor_1_1, 1217).
+-define(wxRegion_Xor_1_0, 1218).
+-define(wxAcceleratorTable_new_0, 1219).
+-define(wxAcceleratorTable_new_2, 1220).
+-define(wxAcceleratorTable_destruct, 1221).
+-define(wxAcceleratorTable_Ok, 1222).
+-define(wxAcceleratorEntry_new_1_0, 1223).
+-define(wxAcceleratorEntry_new_1_1, 1224).
+-define(wxAcceleratorEntry_GetCommand, 1225).
+-define(wxAcceleratorEntry_GetFlags, 1226).
+-define(wxAcceleratorEntry_GetKeyCode, 1227).
+-define(wxAcceleratorEntry_Set, 1228).
+-define(wxAcceleratorEntry_destroy, 1229).
+-define(wxCaret_new_3, 1234).
+-define(wxCaret_new_2, 1235).
+-define(wxCaret_destruct, 1237).
+-define(wxCaret_Create_3, 1238).
+-define(wxCaret_Create_2, 1239).
+-define(wxCaret_GetBlinkTime, 1240).
+-define(wxCaret_GetPosition, 1242).
+-define(wxCaret_GetSize, 1244).
+-define(wxCaret_GetWindow, 1245).
+-define(wxCaret_Hide, 1246).
+-define(wxCaret_IsOk, 1247).
+-define(wxCaret_IsVisible, 1248).
+-define(wxCaret_Move_2, 1249).
+-define(wxCaret_Move_1, 1250).
+-define(wxCaret_SetBlinkTime, 1251).
+-define(wxCaret_SetSize_2, 1252).
+-define(wxCaret_SetSize_1, 1253).
+-define(wxCaret_Show, 1254).
+-define(wxSizer_Add_2_1, 1255).
+-define(wxSizer_Add_2_0, 1256).
+-define(wxSizer_Add_3, 1257).
+-define(wxSizer_Add_2_3, 1258).
+-define(wxSizer_Add_2_2, 1259).
+-define(wxSizer_AddSpacer, 1260).
+-define(wxSizer_AddStretchSpacer, 1261).
+-define(wxSizer_CalcMin, 1262).
+-define(wxSizer_Clear, 1263).
+-define(wxSizer_Detach_1_2, 1264).
+-define(wxSizer_Detach_1_1, 1265).
+-define(wxSizer_Detach_1_0, 1266).
+-define(wxSizer_Fit, 1267).
+-define(wxSizer_FitInside, 1268).
+-define(wxSizer_GetChildren, 1269).
+-define(wxSizer_GetItem_2_1, 1270).
+-define(wxSizer_GetItem_2_0, 1271).
+-define(wxSizer_GetItem_1, 1272).
+-define(wxSizer_GetSize, 1273).
+-define(wxSizer_GetPosition, 1274).
+-define(wxSizer_GetMinSize, 1275).
+-define(wxSizer_Hide_2_0, 1276).
+-define(wxSizer_Hide_2_1, 1277).
+-define(wxSizer_Hide_1, 1278).
+-define(wxSizer_Insert_3_1, 1279).
+-define(wxSizer_Insert_3_0, 1280).
+-define(wxSizer_Insert_4, 1281).
+-define(wxSizer_Insert_3_3, 1282).
+-define(wxSizer_Insert_3_2, 1283).
+-define(wxSizer_Insert_2, 1284).
+-define(wxSizer_InsertSpacer, 1285).
+-define(wxSizer_InsertStretchSpacer, 1286).
+-define(wxSizer_IsShown_1_2, 1287).
+-define(wxSizer_IsShown_1_1, 1288).
+-define(wxSizer_IsShown_1_0, 1289).
+-define(wxSizer_Layout, 1290).
+-define(wxSizer_Prepend_2_1, 1291).
+-define(wxSizer_Prepend_2_0, 1292).
+-define(wxSizer_Prepend_3, 1293).
+-define(wxSizer_Prepend_2_3, 1294).
+-define(wxSizer_Prepend_2_2, 1295).
+-define(wxSizer_Prepend_1, 1296).
+-define(wxSizer_PrependSpacer, 1297).
+-define(wxSizer_PrependStretchSpacer, 1298).
+-define(wxSizer_RecalcSizes, 1299).
+-define(wxSizer_Remove_1_1, 1300).
+-define(wxSizer_Remove_1_0, 1301).
+-define(wxSizer_Replace_3_1, 1302).
+-define(wxSizer_Replace_3_0, 1303).
+-define(wxSizer_Replace_2, 1304).
+-define(wxSizer_SetDimension, 1305).
+-define(wxSizer_SetMinSize_2, 1306).
+-define(wxSizer_SetMinSize_1, 1307).
+-define(wxSizer_SetItemMinSize_3_2, 1308).
+-define(wxSizer_SetItemMinSize_2_2, 1309).
+-define(wxSizer_SetItemMinSize_3_1, 1310).
+-define(wxSizer_SetItemMinSize_2_1, 1311).
+-define(wxSizer_SetItemMinSize_3_0, 1312).
+-define(wxSizer_SetItemMinSize_2_0, 1313).
+-define(wxSizer_SetSizeHints, 1314).
+-define(wxSizer_SetVirtualSizeHints, 1315).
+-define(wxSizer_Show_2_2, 1316).
+-define(wxSizer_Show_2_1, 1317).
+-define(wxSizer_Show_2_0, 1318).
+-define(wxSizer_Show_1, 1319).
+-define(wxSizerFlags_new, 1320).
+-define(wxSizerFlags_Align, 1321).
+-define(wxSizerFlags_Border_2, 1322).
+-define(wxSizerFlags_Border_1, 1323).
+-define(wxSizerFlags_Center, 1324).
+-define(wxSizerFlags_Centre, 1325).
+-define(wxSizerFlags_Expand, 1326).
+-define(wxSizerFlags_Left, 1327).
+-define(wxSizerFlags_Proportion, 1328).
+-define(wxSizerFlags_Right, 1329).
+-define(wxSizerFlags_destroy, 1330).
+-define(wxSizerItem_new_5_1, 1331).
+-define(wxSizerItem_new_2_1, 1332).
+-define(wxSizerItem_new_5_0, 1333).
+-define(wxSizerItem_new_2_0, 1334).
+-define(wxSizerItem_new_6, 1335).
+-define(wxSizerItem_new_3, 1336).
+-define(wxSizerItem_new_0, 1337).
+-define(wxSizerItem_destruct, 1338).
+-define(wxSizerItem_CalcMin, 1339).
+-define(wxSizerItem_DeleteWindows, 1340).
+-define(wxSizerItem_DetachSizer, 1341).
+-define(wxSizerItem_GetBorder, 1342).
+-define(wxSizerItem_GetFlag, 1343).
+-define(wxSizerItem_GetMinSize, 1344).
+-define(wxSizerItem_GetPosition, 1345).
+-define(wxSizerItem_GetProportion, 1346).
+-define(wxSizerItem_GetRatio, 1347).
+-define(wxSizerItem_GetRect, 1348).
+-define(wxSizerItem_GetSize, 1349).
+-define(wxSizerItem_GetSizer, 1350).
+-define(wxSizerItem_GetSpacer, 1351).
+-define(wxSizerItem_GetUserData, 1352).
+-define(wxSizerItem_GetWindow, 1353).
+-define(wxSizerItem_IsSizer, 1354).
+-define(wxSizerItem_IsShown, 1355).
+-define(wxSizerItem_IsSpacer, 1356).
+-define(wxSizerItem_IsWindow, 1357).
+-define(wxSizerItem_SetBorder, 1358).
+-define(wxSizerItem_SetDimension, 1359).
+-define(wxSizerItem_SetFlag, 1360).
+-define(wxSizerItem_SetInitSize, 1361).
+-define(wxSizerItem_SetMinSize_1, 1362).
+-define(wxSizerItem_SetMinSize_2, 1363).
+-define(wxSizerItem_SetProportion, 1364).
+-define(wxSizerItem_SetRatio_2, 1365).
+-define(wxSizerItem_SetRatio_1_1, 1366).
+-define(wxSizerItem_SetRatio_1_0, 1367).
+-define(wxSizerItem_SetSizer, 1368).
+-define(wxSizerItem_SetSpacer_1, 1369).
+-define(wxSizerItem_SetSpacer_2, 1370).
+-define(wxSizerItem_SetWindow, 1371).
+-define(wxSizerItem_Show, 1372).
+-define(wxBoxSizer_new, 1373).
+-define(wxBoxSizer_GetOrientation, 1374).
+-define(wxBoxSizer_destroy, 1375).
+-define(wxStaticBoxSizer_new_2, 1376).
+-define(wxStaticBoxSizer_new_3, 1377).
+-define(wxStaticBoxSizer_GetStaticBox, 1378).
+-define(wxStaticBoxSizer_destroy, 1379).
+-define(wxGridSizer_new_4, 1380).
+-define(wxGridSizer_new_2, 1381).
+-define(wxGridSizer_GetCols, 1382).
+-define(wxGridSizer_GetHGap, 1383).
+-define(wxGridSizer_GetRows, 1384).
+-define(wxGridSizer_GetVGap, 1385).
+-define(wxGridSizer_SetCols, 1386).
+-define(wxGridSizer_SetHGap, 1387).
+-define(wxGridSizer_SetRows, 1388).
+-define(wxGridSizer_SetVGap, 1389).
+-define(wxGridSizer_destroy, 1390).
+-define(wxFlexGridSizer_new_4, 1391).
+-define(wxFlexGridSizer_new_2, 1392).
+-define(wxFlexGridSizer_AddGrowableCol, 1393).
+-define(wxFlexGridSizer_AddGrowableRow, 1394).
+-define(wxFlexGridSizer_GetFlexibleDirection, 1395).
+-define(wxFlexGridSizer_GetNonFlexibleGrowMode, 1396).
+-define(wxFlexGridSizer_RemoveGrowableCol, 1397).
+-define(wxFlexGridSizer_RemoveGrowableRow, 1398).
+-define(wxFlexGridSizer_SetFlexibleDirection, 1399).
+-define(wxFlexGridSizer_SetNonFlexibleGrowMode, 1400).
+-define(wxFlexGridSizer_destroy, 1401).
+-define(wxGridBagSizer_new, 1402).
+-define(wxGridBagSizer_Add_3_2, 1403).
+-define(wxGridBagSizer_Add_3_1, 1404).
+-define(wxGridBagSizer_Add_4, 1405).
+-define(wxGridBagSizer_Add_1_0, 1406).
+-define(wxGridBagSizer_Add_2_1, 1407).
+-define(wxGridBagSizer_Add_2_0, 1408).
+-define(wxGridBagSizer_Add_3_0, 1409).
+-define(wxGridBagSizer_Add_1_1, 1410).
+-define(wxGridBagSizer_CalcMin, 1411).
+-define(wxGridBagSizer_CheckForIntersection_2, 1412).
+-define(wxGridBagSizer_CheckForIntersection_3, 1413).
+-define(wxGridBagSizer_FindItem_1_1, 1414).
+-define(wxGridBagSizer_FindItem_1_0, 1415).
+-define(wxGridBagSizer_FindItemAtPoint, 1416).
+-define(wxGridBagSizer_FindItemAtPosition, 1417).
+-define(wxGridBagSizer_FindItemWithData, 1418).
+-define(wxGridBagSizer_GetCellSize, 1419).
+-define(wxGridBagSizer_GetEmptyCellSize, 1420).
+-define(wxGridBagSizer_GetItemPosition_1_2, 1421).
+-define(wxGridBagSizer_GetItemPosition_1_1, 1422).
+-define(wxGridBagSizer_GetItemPosition_1_0, 1423).
+-define(wxGridBagSizer_GetItemSpan_1_2, 1424).
+-define(wxGridBagSizer_GetItemSpan_1_1, 1425).
+-define(wxGridBagSizer_GetItemSpan_1_0, 1426).
+-define(wxGridBagSizer_SetEmptyCellSize, 1427).
+-define(wxGridBagSizer_SetItemPosition_2_2, 1428).
+-define(wxGridBagSizer_SetItemPosition_2_1, 1429).
+-define(wxGridBagSizer_SetItemPosition_2_0, 1430).
+-define(wxGridBagSizer_SetItemSpan_2_2, 1431).
+-define(wxGridBagSizer_SetItemSpan_2_1, 1432).
+-define(wxGridBagSizer_SetItemSpan_2_0, 1433).
+-define(wxGridBagSizer_destroy, 1434).
+-define(wxStdDialogButtonSizer_new, 1435).
+-define(wxStdDialogButtonSizer_AddButton, 1436).
+-define(wxStdDialogButtonSizer_Realize, 1437).
+-define(wxStdDialogButtonSizer_SetAffirmativeButton, 1438).
+-define(wxStdDialogButtonSizer_SetCancelButton, 1439).
+-define(wxStdDialogButtonSizer_SetNegativeButton, 1440).
+-define(wxStdDialogButtonSizer_destroy, 1441).
+-define(wxFont_new_0, 1442).
+-define(wxFont_new_1, 1443).
+-define(wxFont_new_5, 1444).
+-define(wxFont_destruct, 1446).
+-define(wxFont_IsFixedWidth, 1447).
+-define(wxFont_GetDefaultEncoding, 1448).
+-define(wxFont_GetFaceName, 1449).
+-define(wxFont_GetFamily, 1450).
+-define(wxFont_GetNativeFontInfoDesc, 1451).
+-define(wxFont_GetNativeFontInfoUserDesc, 1452).
+-define(wxFont_GetPointSize, 1453).
+-define(wxFont_GetStyle, 1454).
+-define(wxFont_GetUnderlined, 1455).
+-define(wxFont_GetWeight, 1456).
+-define(wxFont_Ok, 1457).
+-define(wxFont_SetDefaultEncoding, 1458).
+-define(wxFont_SetFaceName, 1459).
+-define(wxFont_SetFamily, 1460).
+-define(wxFont_SetPointSize, 1461).
+-define(wxFont_SetStyle, 1462).
+-define(wxFont_SetUnderlined, 1463).
+-define(wxFont_SetWeight, 1464).
+-define(wxToolTip_Enable, 1465).
+-define(wxToolTip_SetDelay, 1466).
+-define(wxToolTip_new, 1467).
+-define(wxToolTip_SetTip, 1468).
+-define(wxToolTip_GetTip, 1469).
+-define(wxToolTip_GetWindow, 1470).
+-define(wxToolTip_destroy, 1471).
+-define(wxButton_new_3, 1473).
+-define(wxButton_new_0, 1474).
+-define(wxButton_destruct, 1475).
+-define(wxButton_Create, 1476).
+-define(wxButton_GetDefaultSize, 1477).
+-define(wxButton_SetDefault, 1478).
+-define(wxButton_SetLabel, 1479).
+-define(wxBitmapButton_new_4, 1481).
+-define(wxBitmapButton_new_0, 1482).
+-define(wxBitmapButton_Create, 1483).
+-define(wxBitmapButton_GetBitmapDisabled, 1484).
+-define(wxBitmapButton_GetBitmapFocus, 1486).
+-define(wxBitmapButton_GetBitmapLabel, 1488).
+-define(wxBitmapButton_GetBitmapSelected, 1490).
+-define(wxBitmapButton_SetBitmapDisabled, 1492).
+-define(wxBitmapButton_SetBitmapFocus, 1493).
+-define(wxBitmapButton_SetBitmapLabel, 1494).
+-define(wxBitmapButton_SetBitmapSelected, 1495).
+-define(wxBitmapButton_destroy, 1496).
+-define(wxToggleButton_new_0, 1497).
+-define(wxToggleButton_new_4, 1498).
+-define(wxToggleButton_Create, 1499).
+-define(wxToggleButton_GetValue, 1500).
+-define(wxToggleButton_SetValue, 1501).
+-define(wxToggleButton_destroy, 1502).
+-define(wxCalendarCtrl_new_0, 1503).
+-define(wxCalendarCtrl_new_3, 1504).
+-define(wxCalendarCtrl_Create, 1505).
+-define(wxCalendarCtrl_destruct, 1506).
+-define(wxCalendarCtrl_SetDate, 1507).
+-define(wxCalendarCtrl_GetDate, 1508).
+-define(wxCalendarCtrl_EnableYearChange, 1509).
+-define(wxCalendarCtrl_EnableMonthChange, 1510).
+-define(wxCalendarCtrl_EnableHolidayDisplay, 1511).
+-define(wxCalendarCtrl_SetHeaderColours, 1512).
+-define(wxCalendarCtrl_GetHeaderColourFg, 1513).
+-define(wxCalendarCtrl_GetHeaderColourBg, 1514).
+-define(wxCalendarCtrl_SetHighlightColours, 1515).
+-define(wxCalendarCtrl_GetHighlightColourFg, 1516).
+-define(wxCalendarCtrl_GetHighlightColourBg, 1517).
+-define(wxCalendarCtrl_SetHolidayColours, 1518).
+-define(wxCalendarCtrl_GetHolidayColourFg, 1519).
+-define(wxCalendarCtrl_GetHolidayColourBg, 1520).
+-define(wxCalendarCtrl_GetAttr, 1521).
+-define(wxCalendarCtrl_SetAttr, 1522).
+-define(wxCalendarCtrl_SetHoliday, 1523).
+-define(wxCalendarCtrl_ResetAttr, 1524).
+-define(wxCalendarCtrl_HitTest, 1525).
+-define(wxCalendarDateAttr_new_0, 1526).
+-define(wxCalendarDateAttr_new_2_1, 1527).
+-define(wxCalendarDateAttr_new_2_0, 1528).
+-define(wxCalendarDateAttr_SetTextColour, 1529).
+-define(wxCalendarDateAttr_SetBackgroundColour, 1530).
+-define(wxCalendarDateAttr_SetBorderColour, 1531).
+-define(wxCalendarDateAttr_SetFont, 1532).
+-define(wxCalendarDateAttr_SetBorder, 1533).
+-define(wxCalendarDateAttr_SetHoliday, 1534).
+-define(wxCalendarDateAttr_HasTextColour, 1535).
+-define(wxCalendarDateAttr_HasBackgroundColour, 1536).
+-define(wxCalendarDateAttr_HasBorderColour, 1537).
+-define(wxCalendarDateAttr_HasFont, 1538).
+-define(wxCalendarDateAttr_HasBorder, 1539).
+-define(wxCalendarDateAttr_IsHoliday, 1540).
+-define(wxCalendarDateAttr_GetTextColour, 1541).
+-define(wxCalendarDateAttr_GetBackgroundColour, 1542).
+-define(wxCalendarDateAttr_GetBorderColour, 1543).
+-define(wxCalendarDateAttr_GetFont, 1544).
+-define(wxCalendarDateAttr_GetBorder, 1545).
+-define(wxCalendarDateAttr_destroy, 1546).
+-define(wxCheckBox_new_4, 1548).
+-define(wxCheckBox_new_0, 1549).
+-define(wxCheckBox_Create, 1550).
+-define(wxCheckBox_GetValue, 1551).
+-define(wxCheckBox_Get3StateValue, 1552).
+-define(wxCheckBox_Is3rdStateAllowedForUser, 1553).
+-define(wxCheckBox_Is3State, 1554).
+-define(wxCheckBox_IsChecked, 1555).
+-define(wxCheckBox_SetValue, 1556).
+-define(wxCheckBox_Set3StateValue, 1557).
+-define(wxCheckBox_destroy, 1558).
+-define(wxCheckListBox_new_0, 1559).
+-define(wxCheckListBox_new_3, 1561).
+-define(wxCheckListBox_Check, 1562).
+-define(wxCheckListBox_IsChecked, 1563).
+-define(wxCheckListBox_destroy, 1564).
+-define(wxChoice_new_3, 1567).
+-define(wxChoice_new_0, 1568).
+-define(wxChoice_destruct, 1570).
+-define(wxChoice_Create, 1572).
+-define(wxChoice_Delete, 1573).
+-define(wxChoice_GetColumns, 1574).
+-define(wxChoice_SetColumns, 1575).
+-define(wxComboBox_new_0, 1576).
+-define(wxComboBox_new_3, 1578).
+-define(wxComboBox_destruct, 1579).
+-define(wxComboBox_Create, 1581).
+-define(wxComboBox_CanCopy, 1582).
+-define(wxComboBox_CanCut, 1583).
+-define(wxComboBox_CanPaste, 1584).
+-define(wxComboBox_CanRedo, 1585).
+-define(wxComboBox_CanUndo, 1586).
+-define(wxComboBox_Copy, 1587).
+-define(wxComboBox_Cut, 1588).
+-define(wxComboBox_GetInsertionPoint, 1589).
+-define(wxComboBox_GetLastPosition, 1590).
+-define(wxComboBox_GetValue, 1591).
+-define(wxComboBox_Paste, 1592).
+-define(wxComboBox_Redo, 1593).
+-define(wxComboBox_Replace, 1594).
+-define(wxComboBox_Remove, 1595).
+-define(wxComboBox_SetInsertionPoint, 1596).
+-define(wxComboBox_SetInsertionPointEnd, 1597).
+-define(wxComboBox_SetSelection_1, 1598).
+-define(wxComboBox_SetSelection_2, 1599).
+-define(wxComboBox_SetValue, 1600).
+-define(wxComboBox_Undo, 1601).
+-define(wxGauge_new_0, 1602).
+-define(wxGauge_new_4, 1603).
+-define(wxGauge_Create, 1604).
+-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).
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..6498b58cda 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]).
@@ -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}) ->
diff --git a/lib/wx/src/wx_object.erl b/lib/wx/src/wx_object.erl
index 35069425ac..c22a083eb9 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,7 +107,8 @@
call/2, call/3,
cast/2,
reply/2,
- get_pid/1
+ get_pid/1,
+ set_pid/2
]).
%% -export([behaviour_info/1]).
@@ -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..06be0367f8 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.
diff --git a/lib/wx/src/wxe_server.erl b/lib/wx/src/wxe_server.erl
index ae9440f890..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.
@@ -272,7 +272,7 @@ invoke_callback(Pid, Ev, Ref) ->
wx:set_env(Env),
wxe_util:cast(?WXE_CB_START, <<>>),
try
- case get_wx_object_state(Pid) of
+ case get_wx_object_state(Pid, 5) of
ignore ->
%% Ignore early events
wxEvent:skip(Ref);
@@ -307,16 +307,24 @@ invoke_callback_fun(Fun) ->
wxe_util:cast(?WXE_CB_RETURN, Res).
-get_wx_object_state(Pid) ->
+get_wx_object_state(Pid, N) when N > 0 ->
case process_info(Pid, dictionary) of
{dictionary, Dict} ->
case lists:keysearch('_wx_object_',1,Dict) of
- {value, {'_wx_object_', {_Mod, '_wx_init_'}}} -> ignore;
- {value, {'_wx_object_', Value}} -> Value;
- _ -> ignore
+ {value, {'_wx_object_', {_Mod, '_wx_init_'}}} ->
+ timer:sleep(50),
+ get_wx_object_state(Pid, N-1);
+ {value, {'_wx_object_', Value}} ->
+ Value;
+ _ ->
+ ignore
end;
- _ -> ignore
- end.
+ _ ->
+ ignore
+ end;
+get_wx_object_state(_, _) ->
+ ignore.
+
attach_fun(Fun, S = #state{cb=CB,cb_cnt=Next}) ->
case gb_trees:lookup(Fun,CB) of
diff --git a/lib/wx/src/wxe_util.erl b/lib/wx/src/wxe_util.erl
index 398ceddd4f..3eaf6aebed 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.
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 2c746158e5..f89f25274a 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,
@@ -338,6 +338,20 @@ data_types(_Config) ->
?m(true, is_boolean(wxCalendarCtrl:setDate(Cal,DateTime))),
?m({Date,_}, wxCalendarCtrl:getDate(Cal)),
+ %% Images, test sending and reading binaries
+ Colors = << <<200:8, 199:8, 198:8 >> || _ <- lists:seq(1, 128*64) >>,
+ Alpha = << <<255:8>> || _ <- lists:seq(1, 128*64) >>,
+ ImgRGB = ?mt(wxImage, wxImage:new(128, 64, Colors)),
+ ?m(true, wxImage:ok(ImgRGB)),
+ ?m(false, wxImage:hasAlpha(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(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).
wx:destroy().
@@ -347,7 +361,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}]),
@@ -357,6 +372,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())),
@@ -364,6 +380,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 7e71d6ca69..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,10 +44,10 @@ 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, connect_msg_20, connect_cb_20,
+all() ->
+ [connect, disconnect, disconnect_cb, connect_msg_20, connect_cb_20,
mouse_on_grid, spin_event, connect_in_callback, recursive,
dialog, char_events, callback_clean
].
@@ -162,9 +162,33 @@ disconnect(Config) ->
?m([], wx_test_lib:flush()),
wx_test_lib:wx_destroy(Frame, Config).
-
+
+disconnect_cb(TestInfo) when is_atom(TestInfo) -> wx_test_lib:tc_info(TestInfo);
+disconnect_cb(Config) ->
+ ?mr(wx_ref, wx:new()),
+ Frame = ?mt(wxFrame, wxFrame:new(wx:null(), 1, "Event Testing")),
+ Panel = ?mt(wxPanel, wxPanel:new(Frame)),
+
+ Tester = self(),
+ CB = fun(#wx{event=#wxSize{},userData=UserD}, SizeEvent) ->
+ ?mt(wxSizeEvent, SizeEvent),
+ wxEvtHandler:disconnect(Frame, close_window),
+ Tester ! {got_size, UserD}
+ end,
+ ?m(ok, wxFrame:connect(Frame, close_window)),
+ ?m(ok, wxFrame:connect(Frame, size)),
+ ?m(ok, wxEvtHandler:connect(Panel, size, [{callback,CB},{userData, panel}])),
+
+ ?m(true, wxFrame:show(Frame)),
+
+ wxWindow:setSize(Panel, {200,100}),
+ get_size_messages(Frame, [frame, panel_cb]),
+ wx_test_lib:flush(),
+
+ wx_test_lib:wx_destroy(Frame, Config).
+
%% Test that the msg events are forwarded as supposed to
connect_msg_20(TestInfo)
when is_atom(TestInfo) -> wx_test_lib:tc_info(TestInfo);
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 a1bacb5d66..de723b2a2d 100644
--- a/lib/wx/vsn.mk
+++ b/lib/wx/vsn.mk
@@ -1 +1 @@
-WX_VSN = 1.6
+WX_VSN = 1.6.1
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 19274e95ae..4f61d4b52c 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,20 @@
<p>This document describes the changes made to the Xmerl application.</p>
+<section><title>Xmerl 1.3.10</title>
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p> Suppress Dialyzer warnings. </p>
+ <p>
+ Own Id: OTP-12862</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
<section><title>Xmerl 1.3.9</title>
<section><title>Fixed Bugs and Malfunctions</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..5ef5dce737 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.
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..d97913ecbc 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
@@ -1178,7 +1176,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
@@ -3436,7 +3434,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 +4012,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 +4968,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 +5004,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 +5032,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 14e11d5fc4..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.
diff --git a/lib/xmerl/test/xmerl_SUITE.erl b/lib/xmerl/test/xmerl_SUITE.erl
index 672f8a43d1..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.
@@ -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 2e026d7476..aaa80097cd 100644
--- a/lib/xmerl/test/xmerl_SUITE_data/xpath/xpath_abbrev.erl
+++ b/lib/xmerl/test/xmerl_SUITE_data/xpath/xpath_abbrev.erl
@@ -14,109 +14,109 @@
-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 f5c65b0c63..e539436c12 100644
--- a/lib/xmerl/test/xmerl_SUITE_data/xpath/xpath_lib.erl
+++ b/lib/xmerl/test/xmerl_SUITE_data/xpath/xpath_lib.erl
@@ -13,105 +13,102 @@
-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 c3a1fb9c4d..77adde85e9 100644
--- a/lib/xmerl/test/xmerl_SUITE_data/xpath/xpath_text.erl
+++ b/lib/xmerl/test/xmerl_SUITE_data/xpath/xpath_text.erl
@@ -13,16 +13,16 @@
-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 f0e80f81d3..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.
@@ -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 b820bd5bc2..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.
@@ -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 d3e28353e2..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.
@@ -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 aa8a86138a..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.
@@ -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 7393a878e2..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.
@@ -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 6a645b255e..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.
@@ -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 e1ce8525c7..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.
@@ -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 5057e70956..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.
@@ -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 58fb6a27cc..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.
@@ -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 0d6082e023..09d81e0533 100644
--- a/lib/xmerl/vsn.mk
+++ b/lib/xmerl/vsn.mk
@@ -1 +1 @@
-XMERL_VSN = 1.3.9
+XMERL_VSN = 1.3.10
diff --git a/make/make_emakefile b/make/make_emakefile
index 80c4acae94..56440d9bf0 100755
--- a/make/make_emakefile
+++ b/make/make_emakefile
@@ -1,4 +1,4 @@
-#!/usr/bin/perl
+#!/usr/bin/env perl
# -*- cperl -*-
use strict;
diff --git a/otp_build b/otp_build
index 57dc2e3a9c..1b79b0b0fe 100755
--- a/otp_build
+++ b/otp_build
@@ -139,7 +139,7 @@ check_erltop ()
if [ "X$ERL_TOP" = "X" ]; then
if [ -f ./otp_build -a -f ./erts/autoconf/config.guess ]; then
ERLTOP_FORCED=true
- ERL_TOP=`/bin/pwd`
+ ERL_TOP=`pwd`
export ERL_TOP
else
echo "The environment variable ERL_TOP must be set." >&2
@@ -679,7 +679,7 @@ echo_env_erltop ()
if [ X"$ERL_TOP" = X"" -o "$ERLTOP_FORCED" = "true" ]; then
if [ -f ./otp_build ]; then
# Seems to be current directory...
- echo_setenv ERL_TOP `/bin/pwd` ';'
+ echo_setenv ERL_TOP `pwd` ';'
else
echo "You need to either set ERL_TOP first or stand in the same" \
"directory as this script resides in." >&2
diff --git a/otp_versions.table b/otp_versions.table
index 6aa367d6f1..f68986d831 100644
--- a/otp_versions.table
+++ b/otp_versions.table
@@ -1,3 +1,7 @@
+OTP-18.3.3 : common_test-1.12.1 inets-6.2.3 ssl-7.3.2 # asn1-4.0.2 compiler-6.0.3 cosEvent-2.2 cosEventDomain-1.2 cosFileTransfer-1.2 cosNotification-1.2.1 cosProperty-1.2 cosTime-1.2.1 cosTransactions-1.3.1 crypto-3.6.3 debugger-4.1.2 dialyzer-2.9 diameter-1.11.2 edoc-0.7.18 eldap-1.2.1 erl_docgen-0.4.2 erl_interface-3.8.2 erts-7.3.1 et-1.5.1 eunit-2.2.13 gs-1.6 hipe-3.15 ic-4.4 jinterface-1.6.1 kernel-4.2 megaco-3.18 mnesia-4.13.4 observer-2.1.2 odbc-2.11.1 orber-3.8.1 os_mon-2.4 ose-1.1 otp_mibs-1.1 parsetools-2.1.1 percept-0.8.11 public_key-1.1.1 reltool-0.7 runtime_tools-1.9.3 sasl-2.7 snmp-5.2.2 ssh-4.2.2 stdlib-2.8 syntax_tools-1.7 test_server-3.10 tools-2.8.3 typer-0.9.10 webtool-0.9.1 wx-1.6.1 xmerl-1.3.10 :
+OTP-18.3.2 : inets-6.2.2 ssl-7.3.1 # asn1-4.0.2 common_test-1.12 compiler-6.0.3 cosEvent-2.2 cosEventDomain-1.2 cosFileTransfer-1.2 cosNotification-1.2.1 cosProperty-1.2 cosTime-1.2.1 cosTransactions-1.3.1 crypto-3.6.3 debugger-4.1.2 dialyzer-2.9 diameter-1.11.2 edoc-0.7.18 eldap-1.2.1 erl_docgen-0.4.2 erl_interface-3.8.2 erts-7.3.1 et-1.5.1 eunit-2.2.13 gs-1.6 hipe-3.15 ic-4.4 jinterface-1.6.1 kernel-4.2 megaco-3.18 mnesia-4.13.4 observer-2.1.2 odbc-2.11.1 orber-3.8.1 os_mon-2.4 ose-1.1 otp_mibs-1.1 parsetools-2.1.1 percept-0.8.11 public_key-1.1.1 reltool-0.7 runtime_tools-1.9.3 sasl-2.7 snmp-5.2.2 ssh-4.2.2 stdlib-2.8 syntax_tools-1.7 test_server-3.10 tools-2.8.3 typer-0.9.10 webtool-0.9.1 wx-1.6.1 xmerl-1.3.10 :
+OTP-18.3.1 : erts-7.3.1 inets-6.2.1 mnesia-4.13.4 # asn1-4.0.2 common_test-1.12 compiler-6.0.3 cosEvent-2.2 cosEventDomain-1.2 cosFileTransfer-1.2 cosNotification-1.2.1 cosProperty-1.2 cosTime-1.2.1 cosTransactions-1.3.1 crypto-3.6.3 debugger-4.1.2 dialyzer-2.9 diameter-1.11.2 edoc-0.7.18 eldap-1.2.1 erl_docgen-0.4.2 erl_interface-3.8.2 et-1.5.1 eunit-2.2.13 gs-1.6 hipe-3.15 ic-4.4 jinterface-1.6.1 kernel-4.2 megaco-3.18 observer-2.1.2 odbc-2.11.1 orber-3.8.1 os_mon-2.4 ose-1.1 otp_mibs-1.1 parsetools-2.1.1 percept-0.8.11 public_key-1.1.1 reltool-0.7 runtime_tools-1.9.3 sasl-2.7 snmp-5.2.2 ssh-4.2.2 ssl-7.3 stdlib-2.8 syntax_tools-1.7 test_server-3.10 tools-2.8.3 typer-0.9.10 webtool-0.9.1 wx-1.6.1 xmerl-1.3.10 :
+OTP-18.3 : asn1-4.0.2 common_test-1.12 compiler-6.0.3 cosNotification-1.2.1 cosTime-1.2.1 cosTransactions-1.3.1 crypto-3.6.3 debugger-4.1.2 dialyzer-2.9 diameter-1.11.2 edoc-0.7.18 eldap-1.2.1 erl_docgen-0.4.2 erl_interface-3.8.2 erts-7.3 eunit-2.2.13 hipe-3.15 inets-6.2 kernel-4.2 mnesia-4.13.3 observer-2.1.2 orber-3.8.1 public_key-1.1.1 runtime_tools-1.9.3 sasl-2.7 snmp-5.2.2 ssh-4.2.2 ssl-7.3 stdlib-2.8 test_server-3.10 tools-2.8.3 webtool-0.9.1 wx-1.6.1 xmerl-1.3.10 # cosEvent-2.2 cosEventDomain-1.2 cosFileTransfer-1.2 cosProperty-1.2 et-1.5.1 gs-1.6 ic-4.4 jinterface-1.6.1 megaco-3.18 odbc-2.11.1 os_mon-2.4 ose-1.1 otp_mibs-1.1 parsetools-2.1.1 percept-0.8.11 reltool-0.7 syntax_tools-1.7 typer-0.9.10 :
OTP-18.2.4 : common_test-1.11.2 # asn1-4.0.1 compiler-6.0.2 cosEvent-2.2 cosEventDomain-1.2 cosFileTransfer-1.2 cosNotification-1.2 cosProperty-1.2 cosTime-1.2 cosTransactions-1.3 crypto-3.6.2 debugger-4.1.1 dialyzer-2.8.2 diameter-1.11.1 edoc-0.7.17 eldap-1.2 erl_docgen-0.4.1 erl_interface-3.8.1 erts-7.2.1 et-1.5.1 eunit-2.2.12 gs-1.6 hipe-3.14 ic-4.4 inets-6.1.1 jinterface-1.6.1 kernel-4.1.1 megaco-3.18 mnesia-4.13.2 observer-2.1.1 odbc-2.11.1 orber-3.8 os_mon-2.4 ose-1.1 otp_mibs-1.1 parsetools-2.1.1 percept-0.8.11 public_key-1.1 reltool-0.7 runtime_tools-1.9.2 sasl-2.6.1 snmp-5.2.1 ssh-4.2.1 ssl-7.2 stdlib-2.7 syntax_tools-1.7 test_server-3.9.1 tools-2.8.2 typer-0.9.10 webtool-0.9 wx-1.6 xmerl-1.3.9 :
OTP-18.2.3 : inets-6.1.1 # asn1-4.0.1 common_test-1.11.1 compiler-6.0.2 cosEvent-2.2 cosEventDomain-1.2 cosFileTransfer-1.2 cosNotification-1.2 cosProperty-1.2 cosTime-1.2 cosTransactions-1.3 crypto-3.6.2 debugger-4.1.1 dialyzer-2.8.2 diameter-1.11.1 edoc-0.7.17 eldap-1.2 erl_docgen-0.4.1 erl_interface-3.8.1 erts-7.2.1 et-1.5.1 eunit-2.2.12 gs-1.6 hipe-3.14 ic-4.4 jinterface-1.6.1 kernel-4.1.1 megaco-3.18 mnesia-4.13.2 observer-2.1.1 odbc-2.11.1 orber-3.8 os_mon-2.4 ose-1.1 otp_mibs-1.1 parsetools-2.1.1 percept-0.8.11 public_key-1.1 reltool-0.7 runtime_tools-1.9.2 sasl-2.6.1 snmp-5.2.1 ssh-4.2.1 ssl-7.2 stdlib-2.7 syntax_tools-1.7 test_server-3.9.1 tools-2.8.2 typer-0.9.10 webtool-0.9 wx-1.6 xmerl-1.3.9 :
OTP-18.2.2 : ssh-4.2.1 # asn1-4.0.1 common_test-1.11.1 compiler-6.0.2 cosEvent-2.2 cosEventDomain-1.2 cosFileTransfer-1.2 cosNotification-1.2 cosProperty-1.2 cosTime-1.2 cosTransactions-1.3 crypto-3.6.2 debugger-4.1.1 dialyzer-2.8.2 diameter-1.11.1 edoc-0.7.17 eldap-1.2 erl_docgen-0.4.1 erl_interface-3.8.1 erts-7.2.1 et-1.5.1 eunit-2.2.12 gs-1.6 hipe-3.14 ic-4.4 inets-6.1 jinterface-1.6.1 kernel-4.1.1 megaco-3.18 mnesia-4.13.2 observer-2.1.1 odbc-2.11.1 orber-3.8 os_mon-2.4 ose-1.1 otp_mibs-1.1 parsetools-2.1.1 percept-0.8.11 public_key-1.1 reltool-0.7 runtime_tools-1.9.2 sasl-2.6.1 snmp-5.2.1 ssl-7.2 stdlib-2.7 syntax_tools-1.7 test_server-3.9.1 tools-2.8.2 typer-0.9.10 webtool-0.9 wx-1.6 xmerl-1.3.9 :
@@ -13,6 +17,7 @@ OTP-18.0.3 : erts-7.0.3 # asn1-4.0 common_test-1.11 compiler-6.0 cosEvent-2.2 co
OTP-18.0.2 : erts-7.0.2 runtime_tools-1.9.1 # asn1-4.0 common_test-1.11 compiler-6.0 cosEvent-2.2 cosEventDomain-1.2 cosFileTransfer-1.2 cosNotification-1.2 cosProperty-1.2 cosTime-1.2 cosTransactions-1.3 crypto-3.6 debugger-4.1 dialyzer-2.8 diameter-1.10 edoc-0.7.17 eldap-1.2 erl_docgen-0.4 erl_interface-3.8 et-1.5.1 eunit-2.2.10 gs-1.6 hipe-3.12 ic-4.4 inets-6.0 jinterface-1.6 kernel-4.0 megaco-3.18 mnesia-4.13 observer-2.1 odbc-2.11 orber-3.8 os_mon-2.4 ose-1.1 otp_mibs-1.1 parsetools-2.1 percept-0.8.11 public_key-1.0 reltool-0.7 sasl-2.5 snmp-5.2 ssh-4.0 ssl-7.0 stdlib-2.5 syntax_tools-1.7 test_server-3.9 tools-2.8 typer-0.9.9 webtool-0.9 wx-1.4 xmerl-1.3.8 :
OTP-18.0.1 : erts-7.0.1 # asn1-4.0 common_test-1.11 compiler-6.0 cosEvent-2.2 cosEventDomain-1.2 cosFileTransfer-1.2 cosNotification-1.2 cosProperty-1.2 cosTime-1.2 cosTransactions-1.3 crypto-3.6 debugger-4.1 dialyzer-2.8 diameter-1.10 edoc-0.7.17 eldap-1.2 erl_docgen-0.4 erl_interface-3.8 et-1.5.1 eunit-2.2.10 gs-1.6 hipe-3.12 ic-4.4 inets-6.0 jinterface-1.6 kernel-4.0 megaco-3.18 mnesia-4.13 observer-2.1 odbc-2.11 orber-3.8 os_mon-2.4 ose-1.1 otp_mibs-1.1 parsetools-2.1 percept-0.8.11 public_key-1.0 reltool-0.7 runtime_tools-1.9 sasl-2.5 snmp-5.2 ssh-4.0 ssl-7.0 stdlib-2.5 syntax_tools-1.7 test_server-3.9 tools-2.8 typer-0.9.9 webtool-0.9 wx-1.4 xmerl-1.3.8 :
OTP-18.0 : asn1-4.0 common_test-1.11 compiler-6.0 cosEvent-2.2 cosEventDomain-1.2 cosFileTransfer-1.2 cosNotification-1.2 cosProperty-1.2 cosTime-1.2 cosTransactions-1.3 crypto-3.6 debugger-4.1 dialyzer-2.8 diameter-1.10 edoc-0.7.17 eldap-1.2 erl_docgen-0.4 erl_interface-3.8 erts-7.0 et-1.5.1 eunit-2.2.10 gs-1.6 hipe-3.12 ic-4.4 inets-6.0 jinterface-1.6 kernel-4.0 megaco-3.18 mnesia-4.13 observer-2.1 odbc-2.11 orber-3.8 os_mon-2.4 ose-1.1 otp_mibs-1.1 parsetools-2.1 percept-0.8.11 public_key-1.0 reltool-0.7 runtime_tools-1.9 sasl-2.5 snmp-5.2 ssh-4.0 ssl-7.0 stdlib-2.5 syntax_tools-1.7 test_server-3.9 tools-2.8 typer-0.9.9 webtool-0.9 wx-1.4 xmerl-1.3.8 # :
+OTP-17.5.6.9 : diameter-1.9.2.4 erts-6.4.1.6 ssl-6.0.1.2 # asn1-3.0.4 common_test-1.10.1 compiler-5.0.4 cosEvent-2.1.15 cosEventDomain-1.1.14 cosFileTransfer-1.1.16 cosNotification-1.1.21 cosProperty-1.1.17 cosTime-1.1.14 cosTransactions-1.2.14 crypto-3.5 debugger-4.0.3.1 dialyzer-2.7.4 edoc-0.7.16 eldap-1.1.1 erl_docgen-0.3.7 erl_interface-3.7.20 et-1.5 eunit-2.2.9 gs-1.5.16 hipe-3.11.3 ic-4.3.6 inets-5.10.9 jinterface-1.5.12 kernel-3.2.0.1 megaco-3.17.3 mnesia-4.12.5 observer-2.0.4 odbc-2.10.22 orber-3.7.1 os_mon-2.3.1 ose-1.0.2 otp_mibs-1.0.10 parsetools-2.0.12 percept-0.8.10 public_key-0.23 reltool-0.6.6 runtime_tools-1.8.16.1 sasl-2.4.1 snmp-5.1.2 ssh-3.2.4 stdlib-2.4 syntax_tools-1.6.18 test_server-3.8.1 tools-2.7.2 typer-0.9.8 webtool-0.8.10 wx-1.3.3 xmerl-1.3.7 :
OTP-17.5.6.8 : diameter-1.9.2.3 # asn1-3.0.4 common_test-1.10.1 compiler-5.0.4 cosEvent-2.1.15 cosEventDomain-1.1.14 cosFileTransfer-1.1.16 cosNotification-1.1.21 cosProperty-1.1.17 cosTime-1.1.14 cosTransactions-1.2.14 crypto-3.5 debugger-4.0.3.1 dialyzer-2.7.4 edoc-0.7.16 eldap-1.1.1 erl_docgen-0.3.7 erl_interface-3.7.20 erts-6.4.1.5 et-1.5 eunit-2.2.9 gs-1.5.16 hipe-3.11.3 ic-4.3.6 inets-5.10.9 jinterface-1.5.12 kernel-3.2.0.1 megaco-3.17.3 mnesia-4.12.5 observer-2.0.4 odbc-2.10.22 orber-3.7.1 os_mon-2.3.1 ose-1.0.2 otp_mibs-1.0.10 parsetools-2.0.12 percept-0.8.10 public_key-0.23 reltool-0.6.6 runtime_tools-1.8.16.1 sasl-2.4.1 snmp-5.1.2 ssh-3.2.4 ssl-6.0.1.1 stdlib-2.4 syntax_tools-1.6.18 test_server-3.8.1 tools-2.7.2 typer-0.9.8 webtool-0.8.10 wx-1.3.3 xmerl-1.3.7 :
OTP-17.5.6.7 : diameter-1.9.2.2 # asn1-3.0.4 common_test-1.10.1 compiler-5.0.4 cosEvent-2.1.15 cosEventDomain-1.1.14 cosFileTransfer-1.1.16 cosNotification-1.1.21 cosProperty-1.1.17 cosTime-1.1.14 cosTransactions-1.2.14 crypto-3.5 debugger-4.0.3.1 dialyzer-2.7.4 edoc-0.7.16 eldap-1.1.1 erl_docgen-0.3.7 erl_interface-3.7.20 erts-6.4.1.5 et-1.5 eunit-2.2.9 gs-1.5.16 hipe-3.11.3 ic-4.3.6 inets-5.10.9 jinterface-1.5.12 kernel-3.2.0.1 megaco-3.17.3 mnesia-4.12.5 observer-2.0.4 odbc-2.10.22 orber-3.7.1 os_mon-2.3.1 ose-1.0.2 otp_mibs-1.0.10 parsetools-2.0.12 percept-0.8.10 public_key-0.23 reltool-0.6.6 runtime_tools-1.8.16.1 sasl-2.4.1 snmp-5.1.2 ssh-3.2.4 ssl-6.0.1.1 stdlib-2.4 syntax_tools-1.6.18 test_server-3.8.1 tools-2.7.2 typer-0.9.8 webtool-0.8.10 wx-1.3.3 xmerl-1.3.7 :
OTP-17.5.6.6 : erts-6.4.1.5 # asn1-3.0.4 common_test-1.10.1 compiler-5.0.4 cosEvent-2.1.15 cosEventDomain-1.1.14 cosFileTransfer-1.1.16 cosNotification-1.1.21 cosProperty-1.1.17 cosTime-1.1.14 cosTransactions-1.2.14 crypto-3.5 debugger-4.0.3.1 dialyzer-2.7.4 diameter-1.9.2.1 edoc-0.7.16 eldap-1.1.1 erl_docgen-0.3.7 erl_interface-3.7.20 et-1.5 eunit-2.2.9 gs-1.5.16 hipe-3.11.3 ic-4.3.6 inets-5.10.9 jinterface-1.5.12 kernel-3.2.0.1 megaco-3.17.3 mnesia-4.12.5 observer-2.0.4 odbc-2.10.22 orber-3.7.1 os_mon-2.3.1 ose-1.0.2 otp_mibs-1.0.10 parsetools-2.0.12 percept-0.8.10 public_key-0.23 reltool-0.6.6 runtime_tools-1.8.16.1 sasl-2.4.1 snmp-5.1.2 ssh-3.2.4 ssl-6.0.1.1 stdlib-2.4 syntax_tools-1.6.18 test_server-3.8.1 tools-2.7.2 typer-0.9.8 webtool-0.8.10 wx-1.3.3 xmerl-1.3.7 :
diff --git a/system/COPYRIGHT b/system/COPYRIGHT
index 0d0668974d..ef76b66f6b 100644
--- a/system/COPYRIGHT
+++ b/system/COPYRIGHT
@@ -5,7 +5,7 @@ This software is subject to the following Copyrights and Licenses:
%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/system/doc/definitions/term.defs b/system/doc/definitions/term.defs
index 6091a46a20..921175a7f0 100644
--- a/system/doc/definitions/term.defs
+++ b/system/doc/definitions/term.defs
@@ -76,6 +76,7 @@ the module Erlang in the application kernel","kenneth"},
{"gen_event","gen_event","A behaviour used for programming event handling mechanisms, such as alarm handlers, error loggers, and plug-and-play handlers.","mbj"},
{"gen_fsm","gen_fsm","A behaviour used for programming finite state machines.","mbj"},
{"gen_server","gen_server","A behaviour used for programming client-server processes.","mbj"},
+{"gen_statem","gen_statem","A behaviour used for programming generic state machines.","raimo"},
{"gterm","Global Glossary Database","A glossary database used to list common acronymns and defintions etc.","jocke"},
{"xref","xref","A cross reference tool that can be used for finding dependencies between functions, modules, applications and releases. Part of the Tools application.","gunilla"},
{"GSlong","Graphics System","A library module which provides a graphics interface for Erlang.","mbj"},
diff --git a/system/doc/design_principles/Makefile b/system/doc/design_principles/Makefile
index 29df484279..937b3e28c8 100644
--- a/system/doc/design_principles/Makefile
+++ b/system/doc/design_principles/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.
@@ -58,6 +58,12 @@ GIF_FILES = \
sup5.gif \
sup6.gif
+PNG_FILES = \
+ code_lock.png \
+ code_lock_2.png
+
+IMAGE_FILES = $(GIF_FILES) $(PNG_FILES)
+
XML_FILES = \
$(BOOK_FILES) $(XML_CHAPTER_FILES) \
$(XML_PART_FILES)
@@ -85,13 +91,16 @@ _create_dirs := $(shell mkdir -p $(HTMLDIR))
$(HTMLDIR)/%.gif: %.gif
$(INSTALL_DATA) $< $@
+$(HTMLDIR)/%.png: %.png
+ $(INSTALL_DATA) $< $@
+
docs: html
local_docs: PDFDIR=../../pdf
-html: $(HTML_UG_FILE) gifs
+html: $(HTML_UG_FILE) images
-gifs: $(GIF_FILES:%=$(HTMLDIR)/%)
+images: $(IMAGE_FILES:%=$(HTMLDIR)/%)
debug opt:
@@ -109,7 +118,7 @@ release_docs_spec: docs
# $(INSTALL_DIR) "$(RELEASE_PATH)/pdf"
# $(INSTALL_DATA) $(TOP_PDF_FILE) "$(RELEASE_PATH)/pdf"
$(INSTALL_DIR) $(RELSYSDIR)
- $(INSTALL_DATA) $(GIF_FILES) $(HTMLDIR)/*.html \
+ $(INSTALL_DATA) $(IMAGE_FILES) $(HTMLDIR)/*.html \
$(RELSYSDIR)
diff --git a/system/doc/design_principles/applications.xml b/system/doc/design_principles/applications.xml
index 4d73e0fc66..0a1b65ea8e 100644
--- a/system/doc/design_principles/applications.xml
+++ b/system/doc/design_principles/applications.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/system/doc/design_principles/appup_cookbook.xml b/system/doc/design_principles/appup_cookbook.xml
index 31335197d7..4f23c42c59 100644
--- a/system/doc/design_principles/appup_cookbook.xml
+++ b/system/doc/design_principles/appup_cookbook.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2003</year><year>2014</year>
+ <year>2003</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -50,7 +50,8 @@
<p>In a system implemented according to the OTP design principles,
all processes, except system processes and special processes,
reside in one of the behaviours <c>supervisor</c>,
- <c>gen_server</c>, <c>gen_fsm</c>, or <c>gen_event</c>. These
+ <c>gen_server</c>, <c>gen_fsm</c>,
+ <c>gen_statem</c> or <c>gen_event</c>. These
belong to the STDLIB application and upgrading/downgrading
normally requires an emulator restart.</p>
<p>OTP thus provides no support for changing residence modules except
diff --git a/system/doc/design_principles/book.xml b/system/doc/design_principles/book.xml
index 663551df2f..a734f1d1e4 100644
--- a/system/doc/design_principles/book.xml
+++ b/system/doc/design_principles/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/system/doc/design_principles/code_lock.dia b/system/doc/design_principles/code_lock.dia
new file mode 100644
index 0000000000..8e6ff8a898
--- /dev/null
+++ b/system/doc/design_principles/code_lock.dia
Binary files differ
diff --git a/system/doc/design_principles/code_lock.png b/system/doc/design_principles/code_lock.png
new file mode 100644
index 0000000000..745fd91920
--- /dev/null
+++ b/system/doc/design_principles/code_lock.png
Binary files differ
diff --git a/system/doc/design_principles/code_lock_2.dia b/system/doc/design_principles/code_lock_2.dia
new file mode 100644
index 0000000000..142909a2f5
--- /dev/null
+++ b/system/doc/design_principles/code_lock_2.dia
Binary files differ
diff --git a/system/doc/design_principles/code_lock_2.png b/system/doc/design_principles/code_lock_2.png
new file mode 100644
index 0000000000..ecf7b0d799
--- /dev/null
+++ b/system/doc/design_principles/code_lock_2.png
Binary files differ
diff --git a/system/doc/design_principles/des_princ.xml b/system/doc/design_principles/des_princ.xml
index 0e087cf843..8ab8661c2d 100644
--- a/system/doc/design_principles/des_princ.xml
+++ b/system/doc/design_principles/des_princ.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>
@@ -226,7 +226,9 @@ free(Ch, {Alloc, Free} = Channels) ->
<item><p><seealso marker="gen_server_concepts">gen_server</seealso></p>
<p>For implementing the server of a client-server relation</p></item>
<item><p><seealso marker="fsm">gen_fsm</seealso></p>
- <p>For implementing finite-state machines</p></item>
+ <p>For implementing finite-state machines (Old)</p></item>
+ <item><p><seealso marker="statem">gen_statem</seealso></p>
+ <p>For implementing state machines (New)</p></item>
<item><p><seealso marker="events">gen_event</seealso></p>
<p>For implementing event handling functionality</p></item>
<item><p><seealso marker="sup_princ">supervisor</seealso></p>
diff --git a/system/doc/design_principles/distributed_applications.xml b/system/doc/design_principles/distributed_applications.xml
index f1624a9ad7..a1a0149eb5 100644
--- a/system/doc/design_principles/distributed_applications.xml
+++ b/system/doc/design_principles/distributed_applications.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/system/doc/design_principles/events.xml b/system/doc/design_principles/events.xml
index 3c9d0996dc..e37b8b460d 100644
--- a/system/doc/design_principles/events.xml
+++ b/system/doc/design_principles/events.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/system/doc/design_principles/fsm.xml b/system/doc/design_principles/fsm.xml
index f58b50cbff..4f2b75e6e8 100644
--- a/system/doc/design_principles/fsm.xml
+++ b/system/doc/design_principles/fsm.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>
@@ -30,6 +30,16 @@
<file>fsm.xml</file>
</header>
<marker id="gen_fsm behaviour"></marker>
+ <note>
+ <p>
+ There is a new behaviour
+ <seealso marker="statem"><c>gen_statem</c></seealso>
+ that is intended to replace <c>gen_fsm</c> for new code.
+ It has the same features and add some really useful.
+ This module will not be removed for the foreseeable future
+ to keep old state machine implementations running.
+ </p>
+ </note>
<p>This section is to be read with the <c>gen_fsm(3)</c> manual page
in STDLIB, where all interface functions and callback
functions are described in detail.</p>
diff --git a/system/doc/design_principles/gen_server_concepts.xml b/system/doc/design_principles/gen_server_concepts.xml
index f8f98918fa..c1b98189d5 100644
--- a/system/doc/design_principles/gen_server_concepts.xml
+++ b/system/doc/design_principles/gen_server_concepts.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/system/doc/design_principles/included_applications.xml b/system/doc/design_principles/included_applications.xml
index 3257795e5f..34501c0296 100644
--- a/system/doc/design_principles/included_applications.xml
+++ b/system/doc/design_principles/included_applications.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/system/doc/design_principles/part.xml b/system/doc/design_principles/part.xml
index 42fd3beb6a..6495211e04 100644
--- a/system/doc/design_principles/part.xml
+++ b/system/doc/design_principles/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>
@@ -31,6 +31,7 @@
<xi:include href="des_princ.xml"/>
<xi:include href="gen_server_concepts.xml"/>
<xi:include href="fsm.xml"/>
+ <xi:include href="statem.xml"/>
<xi:include href="events.xml"/>
<xi:include href="sup_princ.xml"/>
<xi:include href="spec_proc.xml"/>
diff --git a/system/doc/design_principles/release_handling.xml b/system/doc/design_principles/release_handling.xml
index 20ddc3dbf5..4f71ad4437 100644
--- a/system/doc/design_principles/release_handling.xml
+++ b/system/doc/design_principles/release_handling.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2003</year><year>2014</year>
+ <year>2003</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -249,7 +249,7 @@
<p>If <c>Modules=dynamic</c>, which is the case for event
managers, the event manager process informs the release handler
about the list of currently installed event handlers
- (<c>gen_fsm</c>), and it is checked if the module name is in
+ (<c>gen_event</c>), and it is checked if the module name is in
this list instead.</p>
<p>The release handler suspends, asks for code change, and
resumes processes by calling the functions
diff --git a/system/doc/design_principles/release_structure.xml b/system/doc/design_principles/release_structure.xml
index 6e7ab06094..a0ab21c43f 100644
--- a/system/doc/design_principles/release_structure.xml
+++ b/system/doc/design_principles/release_structure.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/system/doc/design_principles/spec_proc.xml b/system/doc/design_principles/spec_proc.xml
index 3d7a88da3f..5b156ac263 100644
--- a/system/doc/design_principles/spec_proc.xml
+++ b/system/doc/design_principles/spec_proc.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>
@@ -522,9 +522,36 @@ init(Parent, Name, Module) ->
-module(db).
-behaviour(simple_server).
--export([init/0, handle_req/2, terminate/0]).
+-export([init/1, handle_req/2, terminate/0]).
...</code>
+
+ <p>The contracts specified with <c>-callback</c> attributes in
+ behaviour modules can be further refined by adding <c>-spec</c>
+ attributes in callback modules. This can be useful as
+ <c>-callback</c> contracts are usually generic. The same callback
+ module with contracts for the callbacks:</p>
+
+ <code type="none">
+-module(db).
+-behaviour(simple_server).
+
+-export([init/1, handle_req/2, terminate/0]).
+
+-record(state, {field1 :: [atom()], field2 :: integer()}).
+
+-type state() :: #state{}.
+-type request() :: {'store', term(), term()};
+ {'lookup', term()}.
+
+...
+
+-spec handle_req(request(), state()) -> {'ok', term()}.
+
+...</code>
+
+ <p>Each <c>-spec</c> contract is to be a subtype of the respective
+ <c>-callback</c> contract.</p>
+
</section>
</chapter>
-
diff --git a/system/doc/design_principles/statem.xml b/system/doc/design_principles/statem.xml
new file mode 100644
index 0000000000..b63327291d
--- /dev/null
+++ b/system/doc/design_principles/statem.xml
@@ -0,0 +1,1457 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE chapter SYSTEM "chapter.dtd">
+
+<chapter>
+ <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 Behavior</title>
+ <prepared></prepared>
+ <docno></docno>
+ <date></date>
+ <rev></rev>
+ <file>statem.xml</file>
+ </header>
+ <marker id="gen_statem behaviour"></marker>
+ <p>
+ This section is to be read with the
+ <seealso marker="stdlib:gen_statem"><c>gen_statem(3)</c></seealso>
+ manual page in <c>STDLIB</c>, where all interface functions and callback
+ functions are described in detail.
+ </p>
+ <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>
+
+<!-- =================================================================== -->
+
+ <section>
+ <title>Event-Driven State Machines</title>
+ <p>
+ Established Automata theory does not deal much with
+ how a state transition is triggered,
+ but assumes that the output is a function
+ of the input (and the state) and that they are
+ some kind of values.
+ </p>
+ <p>
+ For an Event-Driven State Machine, the input is an event
+ that triggers a state transition and the output
+ is actions executed during the state transition.
+ It can analogously to the mathematical model of a
+ Finite-State Machine be described as
+ a set of relations of the following form:
+ </p>
+ <pre>
+State(S) x Event(E) -> Actions(A), State(S')</pre>
+ <p>These relations are interpreted as follows:
+ if we are in state <c>S</c> and event <c>E</c> occurs, we
+ are to perform actions <c>A</c> and make a transition to
+ state <c>S'</c>. Notice that <c>S'</c> can be equal to <c>S</c>.
+ </p>
+ <p>
+ As <c>A</c> and <c>S'</c> depend only on
+ <c>S</c> and <c>E</c>, the kind of state machine described
+ here is a Mealy Machine
+ (see, for example, the corresponding Wikipedia article).
+ </p>
+ <p>
+ Like most <c>gen_</c> behaviors, <c>gen_statem</c> keeps
+ a server <c>Data</c> besides the state. Because of this, and as
+ there is no restriction on the number of states
+ (assuming that there is enough virtual machine memory)
+ or on the number of distinct input events,
+ a state machine implemented with this behavior
+ is in fact Turing complete.
+ But it feels mostly like an Event-Driven Mealy Machine.
+ </p>
+ </section>
+
+<!-- =================================================================== -->
+
+ <section>
+ <marker id="callback_modes" />
+ <title>Callback Modes</title>
+ <p>
+ The <c>gen_statem</c> behavior supports two callback modes:
+ </p>
+ <list type="bulleted">
+ <item>
+ <p>
+ In mode
+ <seealso marker="stdlib:gen_statem#type-callback_mode"><c>state_functions</c></seealso>,
+ the state transition rules are written as some Erlang
+ functions, which conform to the following convention:
+ </p>
+ <pre>
+StateName(EventType, EventContent, Data) ->
+ .. code for actions here ...
+ {next_state, NewStateName, NewData}.</pre>
+ </item>
+ <item>
+ <p>
+ In mode
+ <seealso marker="stdlib:gen_statem#type-callback_mode"><c>handle_event_function</c></seealso>,
+ only one Erlang function provides all state transition rules:
+ </p>
+ <pre>
+handle_event(EventType, EventContent, State, Data) ->
+ .. code for actions here ...
+ {next_state, NewState, NewData}</pre>
+ </item>
+ </list>
+ <p>
+ Both these modes allow other return tuples; see
+ <seealso marker="stdlib:gen_statem#Module:StateName/3"><c>Module:StateName/3</c></seealso>
+ in the <c>gen_statem</c> manual page.
+ These other return tuples can, for example, stop the machine,
+ execute state transition actions on the machine engine itself,
+ and send replies.
+ </p>
+
+ <section>
+ <title>Choosing the Callback Mode</title>
+ <p>
+ The two
+ <seealso marker="#callback_modes">callback modes</seealso>
+ give different possibilities
+ and restrictions, but one goal remains:
+ you want to handle all possible combinations of
+ events and states.
+ </p>
+ <p>
+ This can be done, for example, by focusing on one state at the time
+ and for every state ensure that all events are handled.
+ Alternatively, you can focus on one event at the time
+ and ensure that it is handled in every state.
+ You can also use a mix of these strategies.
+ </p>
+ <p>
+ With <c>state_functions</c>, you are restricted to use
+ atom-only states, and the <c>gen_statem</c> engine
+ branches depending on state name for you.
+ This encourages the callback module to gather
+ the implementation of all event actions particular
+ to one state in the same place in the code,
+ hence to focus on one state at the time.
+ </p>
+ <p>
+ This mode fits well when you have a regular state diagram,
+ like the ones in this chapter, which describes all events and actions
+ belonging to a state visually around that state,
+ and each state has its unique name.
+ </p>
+ <p>
+ With <c>handle_event_function</c>, you are free to mix strategies,
+ as all events and states are handled in the same callback function.
+ </p>
+ <p>
+ This mode works equally well when you want to focus on
+ one event at the time or on
+ one state at the time, but function
+ <seealso marker="stdlib:gen_statem#Module:handle_event/4"><c>Module:handle_event/4</c></seealso>
+ quickly grows too large to handle without branching to
+ helper functions.
+ </p>
+ <p>
+ The mode enables the use of non-atom states, for example,
+ complex states or even hierarchical states.
+ If, for example, a state diagram is largely alike
+ for the client side and the server side of a protocol,
+ you can have a state <c>{StateName,server}</c> or
+ <c>{StateName,client}</c>,
+ and make <c>StateName</c> determine where in the code
+ to handle most events in the state.
+ The second element of the tuple is then used to select
+ whether to handle special client-side or server-side events.
+ </p>
+ </section>
+ </section>
+
+<!-- =================================================================== -->
+
+ <section>
+ <title>Example</title>
+ <p>
+ This example starts off as equivalent to the example in section
+ <seealso marker="fsm"><c>gen_fsm</c> Behavior</seealso>.
+ In later sections, additions and tweaks are made
+ using features in <c>gen_statem</c> that <c>gen_fsm</c> does not have.
+ The end of this chapter provides the example again
+ with all the added features.
+ </p>
+ <p>
+ A door with a code lock can be seen as a state machine.
+ Initially, the door is locked. When someone presses a button,
+ an event is generated.
+ Depending on what buttons have been pressed before,
+ the sequence so far can be correct, incomplete, or wrong.
+ If correct, the door is unlocked for 10 seconds (10,000 milliseconds).
+ If incomplete, we wait for another button to be pressed. If
+ wrong, we start all over, waiting for a new button sequence.
+ </p>
+ <image file="../design_principles/code_lock.png">
+ <icaption>Code Lock State Diagram</icaption>
+ </image>
+ <p>
+ This code lock state machine can be implemented using
+ <c>gen_statem</c> with the following callback module:
+ </p>
+ <marker id="ex"></marker>
+ <code type="erl"><![CDATA[
+-module(code_lock).
+-behaviour(gen_statem).
+-define(NAME, code_lock).
+-define(CALLBACK_MODE, state_functions).
+
+-export([start_link/1]).
+-export([button/1]).
+-export([init/1,terminate/3,code_change/4]).
+-export([locked/3,open/3]).
+
+start_link(Code) ->
+ gen_statem:start_link({local,?NAME}, ?MODULE, Code, []).
+
+button(Digit) ->
+ gen_statem:cast(?NAME, {button,Digit}).
+
+init(Code) ->
+ do_lock(),
+ Data = #{code => Code, remaining => Code},
+ {?CALLBACK_MODE,locked,Data}.
+
+locked(
+ cast, {button,Digit},
+ #{code := Code, remaining := Remaining} = Data) ->
+ case Remaining of
+ [Digit] ->
+ do_unlock(),
+ {next_state,open,Data#{remaining := Code},10000};
+ [Digit|Rest] -> % Incomplete
+ {next_state,locked,Data#{remaining := Rest}};
+ _Wrong ->
+ {next_state,locked,Data#{remaining := Code}}
+ end.
+
+open(timeout, _, Data) ->
+ do_lock(),
+ {next_state,locked,Data};
+open(cast, {button,_}, Data) ->
+ do_lock(),
+ {next_state,locked,Data}.
+
+do_lock() ->
+ io:format("Lock~n", []).
+do_unlock() ->
+ io:format("Unlock~n", []).
+
+terminate(_Reason, State, _Data) ->
+ State =/= locked andalso do_lock(),
+ ok.
+code_change(_Vsn, State, Data, _Extra) ->
+ {?CALLBACK_MODE,State,Data}.
+ ]]></code>
+ <p>The code is explained in the next sections.</p>
+ </section>
+
+<!-- =================================================================== -->
+
+ <section>
+ <title>Starting gen_statem</title>
+ <p>
+ In the example in the previous section, <c>gen_statem</c> is
+ started by calling <c>code_lock:start_link(Code)</c>:
+ </p>
+ <code type="erl"><![CDATA[
+start_link(Code) ->
+ gen_statem:start_link({local,?NAME}, ?MODULE, Code, []).
+ ]]></code>
+ <p>
+ <c>start_link</c> calls function
+ <seealso marker="stdlib:gen_statem#start_link/4"><c>gen_statem:start_link/4</c></seealso>,
+ which spawns and links to a new process, a <c>gen_statem</c>.
+ </p>
+ <list type="bulleted">
+ <item>
+ <p>
+ The first argument, <c>{local,?NAME}</c>, specifies
+ the name. In this case, the <c>gen_statem</c> is locally
+ registered as <c>code_lock</c> through the macro <c>?NAME</c>.
+ </p>
+ <p>
+ If the name is omitted, the <c>gen_statem</c> is not registered.
+ Instead its pid must be used. The name can also be specified
+ as <c>{global,Name}</c>, then the <c>gen_statem</c> is
+ registered using
+ <seealso marker="kernel:global#register_name/2"><c>global:register_name/2</c></seealso>
+ in <c>Kernel</c>.
+ </p>
+ </item>
+ <item>
+ <p>
+ The second argument, <c>?MODULE</c>, is the name of
+ the callback module, that is, the module where the callback
+ functions are located, which is this module.
+ </p>
+ <p>
+ The interface functions (<c>start_link/1</c> and <c>button/1</c>)
+ are located in the same module as the callback functions
+ (<c>init/1</c>, <c>locked/3</c>, and <c>open/3</c>).
+ It is normally good programming practice to have the client-side
+ code and the server-side code contained in one module.
+ </p>
+ </item>
+ <item>
+ <p>
+ The third argument, <c>Code</c>, is a list of digits, which
+ is the correct unlock code that is passed
+ to callback function <c>init/1</c>.
+ </p>
+ </item>
+ <item>
+ <p>
+ The fourth argument, <c>[]</c>, is a list of options.
+ For the available options, see
+ <seealso marker="stdlib:gen_statem#start_link/3"><c>gen_statem:start_link/3</c></seealso>.
+ </p>
+ </item>
+ </list>
+ <p>
+ If name registration succeeds, the new <c>gen_statem</c> process
+ calls callback function <c>code_lock:init(Code)</c>.
+ This function is expected to return <c>{CallbackMode,State,Data}</c>,
+ where
+ <seealso marker="#callback_modes"><c>CallbackMode</c></seealso>
+ selects callback module state function mode, in this case
+ <seealso marker="stdlib:gen_statem#type-callback_mode"><c>state_functions</c></seealso>
+ through macro <c>?CALLBACK_MODE</c>. That is, each state
+ has got its own handler function.
+ <c>State</c> is the initial state of the <c>gen_statem</c>,
+ in this case <c>locked</c>; assuming that the door is locked to begin
+ with. <c>Data</c> is the internal server data of the <c>gen_statem</c>.
+ Here the server data is a <seealso marker="stdlib:maps">map</seealso>
+ with key <c>code</c> that stores
+ the correct button sequence, and key <c>remaining</c>
+ that stores the remaining correct button sequence
+ (the same as the <c>code</c> to begin with).
+ </p>
+ <code type="erl"><![CDATA[
+init(Code) ->
+ do_lock(),
+ Data = #{code => Code, remaining => Code},
+ {?CALLBACK_MODE,locked,Data}.
+ ]]></code>
+ <p>Function
+ <seealso marker="stdlib:gen_statem#start_link/3"><c>gen_statem:start_link</c></seealso>
+ is synchronous. It does not return until the <c>gen_statem</c>
+ is initialized and is ready to receive events.
+ </p>
+ <p>
+ Function
+ <seealso marker="stdlib:gen_statem#start_link/3"><c>gen_statem:start_link</c></seealso>
+ must be used if the <c>gen_statem</c>
+ is part of a supervision tree, that is, started by a supervisor.
+ Another function,
+ <seealso marker="stdlib:gen_statem#start/3"><c>gen_statem:start</c></seealso>
+ can be used to start a standalone <c>gen_statem</c>, that is,
+ a <c>gen_statem</c> that is not part of a supervision tree.
+ </p>
+ </section>
+
+<!-- =================================================================== -->
+
+ <section>
+ <title>Handling Events</title>
+ <p>The function notifying the code lock about a button event is
+ implemented using
+ <seealso marker="stdlib:gen_statem#cast/2"><c>gen_statem:cast/2</c></seealso>:
+ </p>
+ <code type="erl"><![CDATA[
+button(Digit) ->
+ gen_statem:cast(?NAME, {button,Digit}).
+ ]]></code>
+ <p>
+ The first argument is the name of the <c>gen_statem</c> and must
+ agree with the name used to start it. So, we use the
+ same macro <c>?NAME</c> as when starting.
+ <c>{button,Digit}</c> is the event content.
+ </p>
+ <p>
+ The event is made into a message and sent to the <c>gen_statem</c>.
+ When the event is received, the <c>gen_statem</c> calls
+ <c>StateName(cast, Event, Data)</c>, which is expected to
+ return a tuple <c>{next_state,NewStateName,NewData}</c>.
+ <c>StateName</c> is the name of the current state and
+ <c>NewStateName</c> is the name of the next state to go to.
+ <c>NewData</c> is a new value for the server data of
+ the <c>gen_statem</c>.
+ </p>
+ <code type="erl"><![CDATA[
+locked(
+ cast, {button,Digit},
+ #{code := Code, remaining := Remaining} = Data) ->
+ case Remaining of
+ [Digit] -> % Complete
+ do_unlock(),
+ {next_state,open,Data#{remaining := Code},10000};
+ [Digit|Rest] -> % Incomplete
+ {next_state,locked,Data#{remaining := Rest}};
+ [_|_] -> % Wrong
+ {next_state,locked,Data#{remaining := Code}}
+ end.
+
+open(timeout, _, Data) ->
+ do_lock(),
+ {next_state,locked,Data};
+open(cast, {button,_}, Data) ->
+ do_lock(),
+ {next_state,locked,Data}.
+ ]]></code>
+ <p>
+ If the door is locked and a button is pressed, the pressed
+ button is compared with the next correct button.
+ Depending on the result, the door is either unlocked
+ and the <c>gen_statem</c> goes to state <c>open</c>,
+ or the door remains in state <c>locked</c>.
+ </p>
+ <p>
+ If the pressed button is incorrect, the server data
+ restarts from the start of the code sequence.
+ </p>
+ <p>
+ In state <c>open</c>, any button locks the door, as
+ any event cancels the event timer, so no
+ time-out event occurs after a button event.
+ </p>
+ </section>
+
+ <section>
+ <title>Event Time-Outs</title>
+ <p>
+ When a correct code has been given, the door is unlocked and
+ the following tuple is returned from <c>locked/2</c>:
+ </p>
+ <code type="erl"><![CDATA[
+{next_state,open,Data#{remaining := Code},10000};
+ ]]></code>
+ <p>
+ 10,000 is a time-out value in milliseconds.
+ After this time (10 seconds), a time-out occurs.
+ Then, <c>StateName(timeout, 10000, Data)</c> is called.
+ The time-out occurs when the door has been in state <c>open</c>
+ for 10 seconds. After that the door is locked again:
+ </p>
+ <code type="erl"><![CDATA[
+open(timeout, _, Data) ->
+ do_lock(),
+ {next_state,locked,Data};
+ ]]></code>
+ </section>
+
+<!-- =================================================================== -->
+
+ <section>
+ <title>All State Events</title>
+ <p>
+ Sometimes events can arrive in any state of the <c>gen_statem</c>.
+ It is convenient to handle these in a common state handler function
+ that all state functions call for events not specific to the state.
+ </p>
+ <p>
+ Consider a <c>code_length/0</c> function that returns
+ the length of the correct code
+ (that should not be sensitive to reveal).
+ We dispatch all events that are not state-specific
+ to the common function <c>handle_event/3</c>:
+ </p>
+ <code type="erl"><![CDATA[
+...
+-export([button/1,code_length/0]).
+...
+
+code_length() ->
+ gen_statem:call(?NAME, code_length).
+
+...
+locked(...) -> ... ;
+locked(EventType, EventContent, Data) ->
+ handle_event(EventType, EventContent, Data).
+
+...
+open(...) -> ... ;
+open(EventType, EventContent, Data) ->
+ handle_event(EventType, EventContent, Data).
+
+handle_event({call,From}, code_length, #{code := Code} = Data) ->
+ {keep_state,Data,[{reply,From,length(Code)}]}.
+ ]]></code>
+ <p>
+ This example uses
+ <seealso marker="stdlib:gen_statem#call/2"><c>gen_statem:call/2</c></seealso>,
+ which waits for a reply from the server.
+ The reply is sent with a <c>{reply,From,Reply}</c> tuple
+ in an action list in the <c>{keep_state,...}</c> tuple
+ that retains the current state.
+ </p>
+ </section>
+
+<!-- =================================================================== -->
+
+ <section>
+ <title>One Event Handler</title>
+ <p>
+ If mode <c>handle_event_function</c> is used,
+ all events are handled in
+ <seealso marker="stdlib:gen_statem#Module:handle_event/4"><c>Module:handle_event/4</c></seealso>
+ and we can (but do not have to) use an event-centered approach
+ where we first branch depending on event
+ and then depending on state:
+ </p>
+ <code type="erl"><![CDATA[
+...
+-define(CALLBACK_MODE, handle_event_function).
+
+...
+-export([handle_event/4]).
+
+...
+
+handle_event(cast, {button,Digit}, State, #{code := Code} = Data) ->
+ case State of
+ locked ->
+ case maps:get(remaining, Data) of
+ [Digit] -> % Complete
+ do_unlock(),
+ {next_state,open,Data#{remaining := Code},10000};
+ [Digit|Rest] -> % Incomplete
+ {keep_state,Data#{remaining := Rest}};
+ [_|_] -> % Wrong
+ {keep_state,Data#{remaining := Code}}
+ end;
+ open ->
+ do_lock(),
+ {next_state,locked,Data}
+ end;
+handle_event(timeout, _, open, Data) ->
+ do_lock(),
+ {next_state,locked,Data}.
+
+...
+ ]]></code>
+ </section>
+
+<!-- =================================================================== -->
+
+ <section>
+ <title>Stopping</title>
+
+ <section>
+ <title>In a Supervision Tree</title>
+ <p>
+ If the <c>gen_statem</c> is part of a supervision tree,
+ no stop function is needed.
+ The <c>gen_statem</c> is automatically terminated by its supervisor.
+ Exactly how this is done is defined by a
+ <seealso marker="sup_princ#shutdown">shutdown strategy</seealso>
+ set in the supervisor.
+ </p>
+ <p>
+ If it is necessary to clean up before termination, the shutdown
+ strategy must be a time-out value and the <c>gen_statem</c> must
+ in function <c>init/1</c> set itself to trap exit signals
+ by calling
+ <seealso marker="erts:erlang#process_flag/2"><c>process_flag(trap_exit, true)</c></seealso>:
+ </p>
+ <code type="erl"><![CDATA[
+init(Args) ->
+ process_flag(trap_exit, true),
+ do_lock(),
+ ...
+ ]]></code>
+ <p>
+ When ordered to shut down, the <c>gen_statem</c> then calls
+ callback function <c>terminate(shutdown, State, Data)</c>.
+ </p>
+ <p>
+ In the following example, function <c>terminate/3</c>
+ locks the door if it is open, so we do not accidentally leave the door
+ open when the supervision tree terminates:
+ </p>
+ <code type="erl"><![CDATA[
+terminate(_Reason, State, _Data) ->
+ State =/= locked andalso do_lock(),
+ ok.
+ ]]></code>
+ </section>
+
+ <section>
+ <title>Standalone gen_statem</title>
+ <p>
+ If the <c>gen_statem</c> is not part of a supervision tree,
+ it can be stopped using
+ <seealso marker="stdlib:gen_statem#stop/1"><c>gen_statem:stop</c></seealso>,
+ preferably through an API function:
+ </p>
+ <code type="erl"><![CDATA[
+...
+-export([start_link/1,stop/0]).
+
+...
+stop() ->
+ gen_statem:stop(?NAME).
+ ]]></code>
+ <p>
+ This makes the <c>gen_statem</c> call callback function
+ <c>terminate/3</c> just like for a supervised server
+ and waits for the process to terminate.
+ </p>
+ </section>
+ </section>
+
+<!-- =================================================================== -->
+
+ <section>
+ <title>Actions</title>
+ <p>
+ In the first sections actions were mentioned as a part of
+ the general state machine model. These general actions
+ are implemented with the code that callback module
+ <c>gen_statem</c> executes in an event-handling
+ callback function before returning
+ to the <c>gen_statem</c> engine.
+ </p>
+ <p>
+ There are more specific state-transition actions
+ that a callback function can order the <c>gen_statem</c>
+ engine to do after the callback function return.
+ These are ordered by returning a list of
+ <seealso marker="stdlib:gen_statem#type-action">actions</seealso>
+ in the
+ <seealso marker="stdlib:gen_statem#type-state_function_result">return tuple</seealso>
+ from the
+ <seealso marker="stdlib:gen_statem#Module:StateName/3">callback function</seealso>.
+ These state transition actions affect the <c>gen_statem</c>
+ engine itself and can do the following:
+ </p>
+ <list type="bulleted">
+ <item>Postpone the current event</item>
+ <item>Hibernate the <c>gen_statem</c></item>
+ <item>Start an event time-out</item>
+ <item>Reply to a caller</item>
+ <item>Generate the next event to handle</item>
+ </list>
+ <p>
+ In the example earlier was mentioned the event time-out
+ and replying to a caller.
+ An example of event postponing is included later in this chapter.
+ For details, see the
+ <seealso marker="stdlib:gen_statem#type-action"><c>gen_statem(3)</c></seealso>
+ manual page.
+ You can, for example, reply to many callers
+ and generate multiple next events to handle.
+ </p>
+ </section>
+
+<!-- =================================================================== -->
+
+ <section>
+ <title>Event Types</title>
+ <p>
+ The previous sections mentioned a few
+ <seealso marker="stdlib:gen_statem#type-event_type">event types</seealso>.
+ Events of all types are handled in the same callback function,
+ for a given state, and the function gets
+ <c>EventType</c> and <c>EventContent</c> as arguments.
+ </p>
+ <p>
+ The following is a complete list of event types and where
+ they come from:
+ </p>
+ <taglist>
+ <tag><c>cast</c></tag>
+ <item>
+ Generated by
+ <seealso marker="stdlib:gen_statem#cast/2"><c>gen_statem:cast</c></seealso>.
+ </item>
+ <tag><c>{call,From}</c></tag>
+ <item>
+ Generated by
+ <seealso marker="stdlib:gen_statem#call/2"><c>gen_statem:call</c></seealso>,
+ where <c>From</c> is the reply address to use
+ when replying either through the state transition action
+ <c>{reply,From,Msg}</c> or by calling
+ <seealso marker="stdlib:gen_statem#reply/1"><c>gen_statem:reply</c></seealso>.
+ </item>
+ <tag><c>info</c></tag>
+ <item>
+ Generated by any regular process message sent to
+ the <c>gen_statem</c> process.
+ </item>
+ <tag><c>timeout</c></tag>
+ <item>
+ Generated by state transition action
+ <c>{timeout,Time,EventContent}</c> (or its short form <c>Time</c>)
+ timer timing out.
+ </item>
+ <tag><c>internal</c></tag>
+ <item>
+ Generated by state transition action
+ <c>{next_event,internal,EventContent}</c>.
+ All event types above can also be generated using
+ <c>{next_event,EventType,EventContent}</c>.
+ </item>
+ </taglist>
+ </section>
+
+<!-- =================================================================== -->
+
+ <section>
+ <title>State Time-Outs</title>
+ <p>
+ The time-out event generated by state transition action
+ <c>{timeout,Time,EventContent}</c> is an event time-out,
+ that is, if an event arrives the timer is cancelled.
+ You get either an event or a time-out, but not both.
+ </p>
+ <p>
+ Often you want a timer not to be cancelled by any event
+ or you want to start a timer in one state and respond
+ to the time-out in another. This can be accomplished
+ with a regular Erlang timer:
+ <seealso marker="erts:erlang#start_timer/4"><c>erlang:start_timer</c></seealso>.
+ </p>
+ <p>
+ For the example so far in this chapter: using the
+ <c>gen_statem</c> event timer has the consequence that
+ if a button event is generated while in the <c>open</c> state,
+ the time-out is cancelled and the button event is delivered.
+ So, we choose to lock the door if this occurred.
+ </p>
+ <p>
+ Suppose that we do not want a button to lock the door,
+ instead we want to ignore button events in the <c>open</c> state.
+ Then we start a timer when entering the <c>open</c> state
+ and waits for it to expire while ignoring button events:
+ </p>
+ <code type="erl"><![CDATA[
+...
+locked(
+ cast, {button,Digit},
+ #{code := Code, remaining := Remaining} = Data) ->
+ case Remaining of
+ [Digit] ->
+ do_unlock(),
+ Tref = erlang:start_timer(10000, self(), lock),
+ {next_state,open,Data#{remaining := Code, timer := Tref}};
+...
+
+open(info, {timeout,Tref,lock}, #{timer := Tref} = Data) ->
+ do_lock(),
+ {next_state,locked,Data};
+open(cast, {button,_}, Data) ->
+ {keep_state,Data};
+...
+ ]]></code>
+ <p>
+ If you need to cancel a timer because of some other event, you can use
+ <seealso marker="erts:erlang#cancel_timer/2"><c>erlang:cancel_timer(Tref)</c></seealso>.
+ Notice that a time-out message cannot arrive after this,
+ unless you have postponed it (see the next section) before,
+ so ensure that you do not accidentally postpone such messages.
+ </p>
+ <p>
+ Another way to cancel a timer is not to cancel it,
+ but to ignore it if it arrives in a state
+ where it is known to be late.
+ </p>
+ </section>
+
+<!-- =================================================================== -->
+
+ <section>
+ <title>Postponing Events</title>
+ <p>
+ If you want to ignore a particular event in the current state
+ and handle it in a future state, you can postpone the event.
+ A postponed event is retried after the state has
+ changed, that is, <c>OldState =/= NewState</c>.
+ </p>
+ <p>
+ Postponing is ordered by the state transition
+ <seealso marker="stdlib:gen_statem#type-action">action</seealso>
+ <c>postpone</c>.
+ </p>
+ <p>
+ In this example, instead of ignoring button events
+ while in the <c>open</c> state, we can postpone them
+ and they are queued and later handled in the <c>locked</c> state:
+ </p>
+ <code type="erl"><![CDATA[
+...
+open(cast, {button,_}, Data) ->
+ {keep_state,Data,[postpone]};
+...
+ ]]></code>
+ <p>
+ The fact that a postponed event is only retried after a state change
+ translates into a requirement on the event and state space.
+ If you have a choice between storing a state data item
+ in the <c>State</c> or in the <c>Data</c>:
+ if a change in the item value affects which events that
+ are handled, then this item is to be part of the state.
+ </p>
+ <p>
+ You want to avoid that you maybe much later decide
+ to postpone an event in one state and by misfortune it is never retried,
+ as the code only changes the <c>Data</c> but not the <c>State</c>.
+ </p>
+
+ <section>
+ <title>Fuzzy State Diagrams</title>
+ <p>
+ It is not uncommon that a state diagram does not specify
+ how to handle events that are not illustrated
+ in a particular state in the diagram.
+ Hopefully this is described in an associated text
+ or from the context.
+ </p>
+ <p>
+ Possible actions: ignore as in drop the event
+ (maybe log it) or deal with the event in some other state
+ as in postpone it.
+ </p>
+ </section>
+
+ <section>
+ <title>Selective Receive</title>
+ <p>
+ Erlang's selective receive statement is often used to
+ describe simple state machine examples in straightforward
+ Erlang code. The following is a possible implementation of
+ the first example:
+ </p>
+ <code type="erl"><![CDATA[
+-module(code_lock).
+-define(NAME, code_lock_1).
+-export([start_link/1,button/1]).
+
+start_link(Code) ->
+ spawn(
+ fun () ->
+ true = register(?NAME, self()),
+ do_lock(),
+ locked(Code, Code)
+ end).
+
+button(Digit) ->
+ ?NAME ! {button,Digit}.
+
+locked(Code, [Digit|Remaining]) ->
+ receive
+ {button,Digit} when Remaining =:= [] ->
+ do_unlock(),
+ open(Code);
+ {button,Digit} ->
+ locked(Code, Remaining);
+ {button,_} ->
+ locked(Code, Code)
+ end.
+
+open(Code) ->
+ receive
+ after 10000 ->
+ do_lock(),
+ locked(Code, Code)
+ end.
+
+do_lock() ->
+ io:format("Locked~n", []).
+do_unlock() ->
+ io:format("Open~n", []).
+ ]]></code>
+ <p>
+ The selective receive in this case causes implicitly <c>open</c>
+ to postpone any events to the <c>locked</c> state.
+ </p>
+ <p>
+ A selective receive cannot be used from a <c>gen_statem</c>
+ behavior as for any <c>gen_*</c> behavior,
+ as the receive statement is within the <c>gen_*</c> engine itself.
+ It must be there because all
+ <seealso marker="stdlib:sys"><c>sys</c></seealso>
+ compatible behaviors must respond to system messages and therefore
+ do that in their engine receive loop,
+ passing non-system messages to the callback module.
+ </p>
+ <p>
+ The state transition
+ <seealso marker="stdlib:gen_statem#type-action">action</seealso>
+ <c>postpone</c> is designed to model
+ selective receives. A selective receive implicitly postpones
+ any not received events, but the <c>postpone</c>
+ state transition action explicitly postpones one received event.
+ </p>
+ <p>
+ Both mechanisms have the same theoretical
+ time and memory complexity, while the selective receive
+ language construct has smaller constant factors.
+ </p>
+ </section>
+ </section>
+
+<!-- =================================================================== -->
+
+ <section>
+ <title>Self-Generated Events</title>
+ <p>
+ It can sometimes be beneficial to be able to generate events
+ to your own state machine.
+ This can be done with the state transition
+ <seealso marker="stdlib:gen_statem#type-action">action</seealso>
+ <c>{next_event,EventType,EventContent}</c>.
+ </p>
+ <p>
+ You can generate events of any existing
+ <seealso marker="stdlib:gen_statem#type-action">type</seealso>,
+ but the <c>internal</c> type can only be generated through action
+ <c>next_event</c>. Hence, it cannot come from an external source,
+ so you can be certain that an <c>internal</c> event is an event
+ from your state machine to itself.
+ </p>
+ <p>
+ One example of using self-generated events can be when you have
+ a state machine specification that uses state entry actions.
+ You can code that using a dedicated function
+ to do the state transition. But if you want that code to be
+ visible besides the other state logic, you can insert
+ an <c>internal</c> event that does the entry actions.
+ This has the same unfortunate consequence as using
+ state transition functions: everywhere you go to
+ the state, you must explicitly
+ insert the <c>internal</c> event
+ or use a state transition function.
+ </p>
+ <p>
+ The following is an implementation of entry actions
+ using <c>internal</c> events with content <c>enter</c>
+ using a helper function <c>enter/3</c> for state entry:
+ </p>
+ <code type="erl"><![CDATA[
+...
+-define(CALLBACK_MODE, state_functions).
+
+...
+
+init(Code) ->
+ process_flag(trap_exit, true),
+ Data = #{code => Code},
+ enter(?CALLBACK_MODE, locked, Data).
+
+...
+
+locked(internal, enter, _Data) ->
+ do_lock(),
+ {keep_state,Data#{remaining => Code}};
+locked(
+ cast, {button,Digit},
+ #{code := Code, remaining := Remaining} = Data) ->
+ case Remaining of
+ [Digit] ->
+ enter(next_state, open, Data);
+...
+
+open(internal, enter, _Data) ->
+ Tref = erlang:start_timer(10000, self(), lock),
+ do_unlock(),
+ {keep_state,Data#{timer => Tref}};
+open(info, {timeout,Tref,lock}, #{timer := Tref} = Data) ->
+ enter(next_state, locked, Data);
+...
+
+enter(Tag, State, Data) ->
+ {Tag,State,Data,[{next_event,internal,enter}]}.
+ ]]></code>
+ </section>
+
+<!-- =================================================================== -->
+
+ <section>
+ <title>Example Revisited</title>
+ <p>
+ This section includes the example after all mentioned modifications
+ and some more using the entry actions,
+ which deserves a new state diagram:
+ </p>
+ <image file="../design_principles/code_lock_2.png">
+ <icaption>Code Lock State Diagram Revisited</icaption>
+ </image>
+ <p>
+ Notice that this state diagram does not specify how to handle
+ a button event in the state <c>open</c>. So, you need to
+ read somewhere else that unspecified events
+ must be ignored as in not consumed but handled in some other state.
+ Also, the state diagram does not show that the <c>code_length/0</c>
+ call must be handled in every state.
+ </p>
+
+ <section>
+ <title>Callback Mode: state_functions</title>
+ <p>
+ Using state functions:
+ </p>
+ <code type="erl"><![CDATA[
+-module(code_lock).
+-behaviour(gen_statem).
+-define(NAME, code_lock_2).
+-define(CALLBACK_MODE, state_functions).
+
+-export([start_link/1,stop/0]).
+-export([button/1,code_length/0]).
+-export([init/1,terminate/3,code_change/4]).
+-export([locked/3,open/3]).
+
+start_link(Code) ->
+ gen_statem:start_link({local,?NAME}, ?MODULE, Code, []).
+stop() ->
+ gen_statem:stop(?NAME).
+
+button(Digit) ->
+ gen_statem:cast(?NAME, {button,Digit}).
+code_length() ->
+ gen_statem:call(?NAME, code_length).
+
+init(Code) ->
+ process_flag(trap_exit, true),
+ Data = #{code => Code},
+ enter(?CALLBACK_MODE, locked, Data).
+
+locked(internal, enter, #{code := Code} = Data) ->
+ do_lock(),
+ {keep_state,Data#{remaining => Code}};
+locked(
+ cast, {button,Digit},
+ #{code := Code, remaining := Remaining} = Data) ->
+ case Remaining of
+ [Digit] -> % Complete
+ enter(next_state, open, Data);
+ [Digit|Rest] -> % Incomplete
+ {keep_state,Data#{remaining := Rest}};
+ [_|_] -> % Wrong
+ {keep_state,Data#{remaining := Code}}
+ end;
+locked(EventType, EventContent, Data) ->
+ handle_event(EventType, EventContent, Data).
+
+open(internal, enter, Data) ->
+ Tref = erlang:start_timer(10000, self(), lock),
+ do_unlock(),
+ {keep_state,Data#{timer => Tref}};
+open(info, {timeout,Tref,lock}, #{timer := Tref} = Data) ->
+ enter(next_state, locked, Data);
+open(cast, {button,_}, _) ->
+ {keep_state_and_data,[postpone]};
+open(EventType, EventContent, Data) ->
+ handle_event(EventType, EventContent, Data).
+
+handle_event({call,From}, code_length, #{code := Code}) ->
+ {keep_state_and_data,[{reply,From,length(Code)}]}.
+enter(Tag, State, Data) ->
+ {Tag,State,Data,[{next_event,internal,enter}]}.
+
+do_lock() ->
+ io:format("Locked~n", []).
+do_unlock() ->
+ io:format("Open~n", []).
+
+terminate(_Reason, State, _Data) ->
+ State =/= locked andalso do_lock(),
+ ok.
+code_change(_Vsn, State, Data, _Extra) ->
+ {?CALLBACK_MODE,State,Data}.
+ ]]></code>
+ </section>
+
+ <section>
+ <title>Callback Mode: handle_event_function</title>
+ <p>
+ This section describes what to change in the example
+ to use one <c>handle_event/4</c> function.
+ The previously used approach to first branch depending on event
+ does not work that well here because of the generated
+ entry actions, so this example first branches depending on state:
+ </p>
+ <code type="erl"><![CDATA[
+...
+-define(CALLBACK_MODE, handle_event_function).
+
+...
+-export([handle_event/4]).
+
+...
+
+%% State: locked
+handle_event(internal, enter, locked, #{code := Code} = Data) ->
+ do_lock(),
+ {keep_state,Data#{remaining => Code}};
+handle_event(
+ cast, {button,Digit}, locked,
+ #{code := Code, remaining := Remaining} = Data) ->
+ case Remaining of
+ [Digit] -> % Complete
+ enter(next_state, open, Data);
+ [Digit|Rest] -> % Incomplete
+ {keep_state,Data#{remaining := Rest}};
+ [_|_] -> % Wrong
+ {keep_state,Data#{remaining := Code}}
+ end;
+%%
+%% State: open
+handle_event(internal, enter, open, Data) ->
+ Tref = erlang:start_timer(10000, self(), lock),
+ do_unlock(),
+ {keep_state,Data#{timer => Tref}};
+handle_event(info, {timeout,Tref,lock}, open, #{timer := Tref} = Data) ->
+ enter(next_state, locked, Data);
+handle_event(cast, {button,_}, open, _) ->
+ {keep_state_and_data,[postpone]};
+%%
+%% Any state
+handle_event({call,From}, code_length, _State, #{code := Code}) ->
+ {keep_state_and_data,[{reply,From,length(Code)}]}.
+
+...
+ ]]></code>
+ </section>
+ <p>
+ Notice that postponing buttons from the <c>locked</c> state
+ to the <c>open</c> state feels like the wrong thing to do
+ for a code lock, but it at least illustrates event postponing.
+ </p>
+ </section>
+
+<!-- =================================================================== -->
+
+ <section>
+ <title>Filter the State</title>
+ <p>
+ The example servers so far in this chapter
+ print the full internal state in the error log, for example,
+ when killed by an exit signal or because of an internal error.
+ This state contains both the code lock code
+ and which digits that remain to unlock.
+ </p>
+ <p>
+ This state data can be regarded as sensitive,
+ and maybe not what you want in the error log
+ because of some unpredictable event.
+ </p>
+ <p>
+ Another reason to filter the state can be
+ that the state is too large to print, as it fills
+ the error log with uninteresting details.
+ </p>
+ <p>
+ To avoid this, you can format the internal state
+ that gets in the error log and gets returned from
+ <seealso marker="stdlib:sys#get_status/1"><c>sys:get_status/1,2</c></seealso>
+ by implementing function
+ <seealso marker="stdlib:gen_statem#Module:format_status/2"><c>Module:format_status/2</c></seealso>,
+ for example like this:
+ </p>
+ <code type="erl"><![CDATA[
+...
+-export([init/1,terminate/3,code_change/4,format_status/2]).
+...
+
+format_status(Opt, [_PDict,State,Data]) ->
+ StateData =
+ {State,
+ maps:filter(
+ fun (code, _) -> false;
+ (remaining, _) -> false;
+ (_, _) -> true
+ end,
+ Data)},
+ case Opt of
+ terminate ->
+ StateData;
+ normal ->
+ [{data,[{"State",StateData}]}]
+ end.
+ ]]></code>
+ <p>
+ It is not mandatory to implement a
+ <seealso marker="stdlib:gen_statem#Module:format_status/2"><c>Module:format_status/2</c></seealso>
+ function. If you do not, a default implementation is used that
+ does the same as this example function without filtering
+ the <c>Data</c> term, that is, <c>StateData = {State,Data}</c>.
+ </p>
+ </section>
+
+<!-- =================================================================== -->
+
+ <section>
+ <title>Complex State</title>
+ <p>
+ The callback mode
+ <seealso marker="stdlib:gen_statem#type-callback_mode"><c>handle_event_function</c></seealso>
+ enables using a non-atom state as described in section
+ <seealso marker="#callback_modes">Callback Modes</seealso>,
+ for example, a complex state term like a tuple.
+ </p>
+ <p>
+ One reason to use this is when you have
+ a state item that affects the event handling,
+ in particular in combination with postponing events.
+ We complicate the previous example
+ by introducing a configurable lock button
+ (this is the state item in question),
+ which in the <c>open</c> state immediately locks the door,
+ and an API function <c>set_lock_button/1</c> to set the lock button.
+ </p>
+ <p>
+ Suppose now that we call <c>set_lock_button</c>
+ while the door is open,
+ and have already postponed a button event
+ that until now was not the lock button.
+ The sensible thing can be to say that
+ the button was pressed too early so it is
+ not to be recognized as the lock button.
+ However, then it can be surprising that a button event
+ that now is the lock button event arrives (as retried postponed)
+ immediately after the state transits to <c>locked</c>.
+ </p>
+ <p>
+ So we make the <c>button/1</c> function synchronous
+ by using
+ <seealso marker="stdlib:gen_statem#call/2"><c>gen_statem:call</c></seealso>
+ and still postpone its events in the <c>open</c> state.
+ Then a call to <c>button/1</c> during the <c>open</c>
+ state does not return until the state transits to <c>locked</c>,
+ as it is there the event is handled and the reply is sent.
+ </p>
+ <p>
+ If a process now calls <c>set_lock_button/1</c>
+ to change the lock button while another process
+ hangs in <c>button/1</c> with the new lock button,
+ it can be expected that the hanging lock button call
+ immediately takes effect and locks the lock.
+ Therefore, we make the current lock button a part of the state,
+ so that when we change the lock button, the state changes
+ and all postponed events are retried.
+ </p>
+ <p>
+ We define the state as <c>{StateName,LockButton}</c>,
+ where <c>StateName</c> is as before
+ and <c>LockButton</c> is the current lock button:
+ </p>
+ <code type="erl"><![CDATA[
+-module(code_lock).
+-behaviour(gen_statem).
+-define(NAME, code_lock_3).
+-define(CALLBACK_MODE, handle_event_function).
+
+-export([start_link/2,stop/0]).
+-export([button/1,code_length/0,set_lock_button/1]).
+-export([init/1,terminate/3,code_change/4,format_status/2]).
+-export([handle_event/4]).
+
+start_link(Code, LockButton) ->
+ gen_statem:start_link(
+ {local,?NAME}, ?MODULE, {Code,LockButton}, []).
+stop() ->
+ gen_statem:stop(?NAME).
+
+button(Digit) ->
+ gen_statem:call(?NAME, {button,Digit}).
+code_length() ->
+ gen_statem:call(?NAME, code_length).
+set_lock_button(LockButton) ->
+ gen_statem:call(?NAME, {set_lock_button,LockButton}).
+
+init({Code,LockButton}) ->
+ process_flag(trap_exit, true),
+ Data = #{code => Code, remaining => undefined, timer => undefined},
+ enter(?CALLBACK_MODE, {locked,LockButton}, Data, []).
+
+handle_event(
+ {call,From}, {set_lock_button,NewLockButton},
+ {StateName,OldLockButton}, Data) ->
+ {next_state,{StateName,NewLockButton},Data,
+ [{reply,From,OldLockButton}]};
+handle_event(
+ {call,From}, code_length,
+ {_StateName,_LockButton}, #{code := Code}) ->
+ {keep_state_and_data,
+ [{reply,From,length(Code)}]};
+handle_event(
+ EventType, EventContent,
+ {locked,LockButton}, #{code := Code, remaining := Remaining} = Data) ->
+ case {EventType,EventContent} of
+ {internal,enter} ->
+ do_lock(),
+ {keep_state,Data#{remaining := Code}};
+ {{call,From},{button,Digit}} ->
+ case Remaining of
+ [Digit] -> % Complete
+ next_state(
+ {open,LockButton}, Data,
+ [{reply,From,ok}]);
+ [Digit|Rest] -> % Incomplete
+ {keep_state,Data#{remaining := Rest},
+ [{reply,From,ok}]};
+ [_|_] -> % Wrong
+ {keep_state,Data#{remaining := Code},
+ [{reply,From,ok}]}
+ end
+ end;
+handle_event(
+ EventType, EventContent,
+ {open,LockButton}, #{timer := Timer} = Data) ->
+ case {EventType,EventContent} of
+ {internal,enter} ->
+ Tref = erlang:start_timer(10000, self(), lock),
+ do_unlock(),
+ {keep_state,Data#{timer := Tref}};
+ {info,{timeout,Timer,lock}} ->
+ next_state({locked,LockButton}, Data, []);
+ {{call,From},{button,Digit}} ->
+ if
+ Digit =:= LockButton ->
+ erlang:cancel_timer(Timer),
+ next_state(
+ {locked,LockButton}, Data,
+ [{reply,From,locked}]);
+ true ->
+ {keep_state_and_data,
+ [postpone]}
+ end
+ end.
+
+next_state(State, Data, Actions) ->
+ enter(next_state, State, Data, Actions).
+enter(Tag, State, Data, Actions) ->
+ {Tag,State,Data,[{next_event,internal,enter}|Actions]}.
+
+do_lock() ->
+ io:format("Locked~n", []).
+do_unlock() ->
+ io:format("Open~n", []).
+
+terminate(_Reason, State, _Data) ->
+ State =/= locked andalso do_lock(),
+ ok.
+code_change(_Vsn, State, Data, _Extra) ->
+ {?CALLBACK_MODE,State,Data}.
+format_status(Opt, [_PDict,State,Data]) ->
+ StateData =
+ {State,
+ maps:filter(
+ fun (code, _) -> false;
+ (remaining, _) -> false;
+ (_, _) -> true
+ end,
+ Data)},
+ case Opt of
+ terminate ->
+ StateData;
+ normal ->
+ [{data,[{"State",StateData}]}]
+ end.
+ ]]></code>
+ <p>
+ It can be an ill-fitting model for a physical code lock
+ that the <c>button/1</c> call can hang until the lock
+ is locked. But for an API in general it is not that strange.
+ </p>
+ </section>
+
+<!-- =================================================================== -->
+
+ <section>
+ <title>Hibernation</title>
+ <p>
+ If you have many servers in one node
+ and they have some state(s) in their lifetime in which
+ the servers can be expected to idle for a while,
+ and the amount of heap memory all these servers need
+ is a problem, then the memory footprint of a server
+ can be mimimized by hibernating it through
+ <seealso marker="stdlib:proc_lib#hibernate/3"><c>proc_lib:hibernate/3</c></seealso>.
+ </p>
+ <note>
+ <p>
+ It is rather costly to hibernate a process; see
+ <seealso marker="erts:erlang#hibernate/3"><c>erlang:hibernate/3</c></seealso>.
+ It is not something you want to do after every event.
+ </p>
+ </note>
+ <p>
+ We can in this example hibernate in the <c>{open,_}</c> state,
+ because what normally occurs in that state is that
+ the state time-out after a while
+ triggers a transition to <c>{locked,_}</c>:
+ </p>
+ <code type="erl"><![CDATA[
+...
+handle_event(
+ EventType, EventContent,
+ {open,LockButton}, #{timer := Timer} = Data) ->
+ case {EventType,EventContent} of
+ {internal,enter} ->
+ Tref = erlang:start_timer(10000, self(), lock),
+ do_unlock(),
+ {keep_state,Data#{timer := Tref},[hibernate]};
+...
+ ]]></code>
+ <p>
+ The
+ <seealso marker="stdlib:gen_statem#type-hibernate"><c>[hibernate]</c></seealso>
+ action list on the last line
+ when entering the <c>{open,_}</c> state is the only change.
+ If any event arrives in the <c>{open,_},</c> state, we
+ do not bother to rehibernate, so the server stays
+ awake after any event.
+ </p>
+ <p>
+ To change that we would need to insert
+ action <c>hibernate</c> in more places.
+ For example, for the state-independent <c>set_lock_button</c>
+ and <c>code_length</c> operations that then would have to
+ be aware of using <c>hibernate</c> while in the
+ <c>{open,_}</c> state, which would clutter the code.
+ </p>
+ <p>
+ This server probably does not use
+ heap memory worth hibernating for.
+ To gain anything from hibernation, your server would
+ have to produce some garbage during callback execution,
+ for which this example server can serve as a bad example.
+ </p>
+ </section>
+
+</chapter>
diff --git a/system/doc/design_principles/sup_princ.xml b/system/doc/design_principles/sup_princ.xml
index 5e2f6ba9cb..a77b3964fc 100644
--- a/system/doc/design_principles/sup_princ.xml
+++ b/system/doc/design_principles/sup_princ.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>
@@ -213,6 +213,7 @@ child_spec() = #{id => child_id(), % mandatory
<item><c>supervisor:start_link</c></item>
<item><c>gen_server:start_link</c></item>
<item><c>gen_fsm:start_link</c></item>
+ <item><c>gen_statem:start_link</c></item>
<item><c>gen_event:start_link</c></item>
<item>A function compliant with these functions. For details,
see the <c>supervisor(3)</c> manual page.</item>
@@ -229,7 +230,7 @@ child_spec() = #{id => child_id(), % mandatory
is <c>rest_for_one</c> or <c>one_for_all</c> and a sibling
death causes the temporary process to be terminated).</item>
<item>A <c>transient</c> child process is restarted only if it
- terminates abnormally, that is, with another exit reason than
+ terminates abnormally, that is, with an exit reason other than
<c>normal</c>, <c>shutdown</c>, or <c>{shutdown,Term}</c>.</item>
</list>
<p>The <c>restart</c> key is optional. If it is not given, the
@@ -276,7 +277,8 @@ child_spec() = #{id => child_id(), % mandatory
<p><c>modules</c> are to be a list with one element
<c>[Module]</c>, where <c>Module</c> is the name of
the callback module, if the child process is a supervisor,
- gen_server or gen_fsm. If the child process is a gen_event,
+ gen_server, gen_fsm or gen_statem.
+ If the child process is a gen_event,
the value shall be <c>dynamic</c>.</p>
<p>This information is used by the release handler during
upgrades and downgrades, see
@@ -400,8 +402,8 @@ supervisor:delete_child(Sup, Id)</code>
restarts.</p>
</section>
- <marker id="simple"/>
<section>
+ <marker id="simple"/>
<title>Simplified one_for_one Supervisors</title>
<p>A supervisor with restart strategy <c>simple_one_for_one</c> is
a simplified <c>one_for_one</c> supervisor, where all child
diff --git a/system/doc/design_principles/xmlfiles.mk b/system/doc/design_principles/xmlfiles.mk
index 3032ac3ab9..e476255d62 100644
--- a/system/doc/design_principles/xmlfiles.mk
+++ b/system/doc/design_principles/xmlfiles.mk
@@ -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.
@@ -25,6 +25,7 @@ DESIGN_PRINCIPLES_CHAPTER_FILES = \
distributed_applications.xml \
events.xml \
fsm.xml \
+ statem.xml \
gen_server_concepts.xml \
included_applications.xml \
release_handling.xml \
diff --git a/system/doc/efficiency_guide/Makefile b/system/doc/efficiency_guide/Makefile
index 0665bb91f7..36e4cd00df 100644
--- a/system/doc/efficiency_guide/Makefile
+++ b/system/doc/efficiency_guide/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/system/doc/efficiency_guide/advanced.xml b/system/doc/efficiency_guide/advanced.xml
index d4e47f4f10..3609b8d88e 100644
--- a/system/doc/efficiency_guide/advanced.xml
+++ b/system/doc/efficiency_guide/advanced.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/system/doc/efficiency_guide/appendix.xml b/system/doc/efficiency_guide/appendix.xml
index 1e2e906515..225c8c4e2f 100644
--- a/system/doc/efficiency_guide/appendix.xml
+++ b/system/doc/efficiency_guide/appendix.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/system/doc/efficiency_guide/binaryhandling.xml b/system/doc/efficiency_guide/binaryhandling.xml
index 0964b759d8..0295d18644 100644
--- a/system/doc/efficiency_guide/binaryhandling.xml
+++ b/system/doc/efficiency_guide/binaryhandling.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>2007</year>
- <year>2014</year>
+ <year>2016</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
diff --git a/system/doc/efficiency_guide/book.xml b/system/doc/efficiency_guide/book.xml
index 76f0ad24d3..e3d6fd5fc2 100644
--- a/system/doc/efficiency_guide/book.xml
+++ b/system/doc/efficiency_guide/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/system/doc/efficiency_guide/commoncaveats.xml b/system/doc/efficiency_guide/commoncaveats.xml
index c1d71e745a..ecfeff0349 100644
--- a/system/doc/efficiency_guide/commoncaveats.xml
+++ b/system/doc/efficiency_guide/commoncaveats.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/system/doc/efficiency_guide/drivers.xml b/system/doc/efficiency_guide/drivers.xml
index 202551ab8e..c99701eeba 100644
--- a/system/doc/efficiency_guide/drivers.xml
+++ b/system/doc/efficiency_guide/drivers.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/system/doc/efficiency_guide/functions.xml b/system/doc/efficiency_guide/functions.xml
index 9616df554e..4a8248e65c 100644
--- a/system/doc/efficiency_guide/functions.xml
+++ b/system/doc/efficiency_guide/functions.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/system/doc/efficiency_guide/introduction.xml b/system/doc/efficiency_guide/introduction.xml
index 121ce3af21..ca4a41c798 100644
--- a/system/doc/efficiency_guide/introduction.xml
+++ b/system/doc/efficiency_guide/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/system/doc/efficiency_guide/listhandling.xml b/system/doc/efficiency_guide/listhandling.xml
index c7b5cf9a9a..2ebc877820 100644
--- a/system/doc/efficiency_guide/listhandling.xml
+++ b/system/doc/efficiency_guide/listhandling.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/system/doc/efficiency_guide/myths.xml b/system/doc/efficiency_guide/myths.xml
index 651d909834..5d3ad78b23 100644
--- a/system/doc/efficiency_guide/myths.xml
+++ b/system/doc/efficiency_guide/myths.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/system/doc/efficiency_guide/part.xml b/system/doc/efficiency_guide/part.xml
index 2862058bf2..6e10a0c031 100644
--- a/system/doc/efficiency_guide/part.xml
+++ b/system/doc/efficiency_guide/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/system/doc/efficiency_guide/processes.xml b/system/doc/efficiency_guide/processes.xml
index 2d486ef7ff..f2d9712f51 100644
--- a/system/doc/efficiency_guide/processes.xml
+++ b/system/doc/efficiency_guide/processes.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/system/doc/efficiency_guide/profiling.xml b/system/doc/efficiency_guide/profiling.xml
index 4fbec927f4..1f3d503170 100644
--- a/system/doc/efficiency_guide/profiling.xml
+++ b/system/doc/efficiency_guide/profiling.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/system/doc/efficiency_guide/tablesDatabases.xml b/system/doc/efficiency_guide/tablesDatabases.xml
index 865c46bc33..3f77151e55 100644
--- a/system/doc/efficiency_guide/tablesDatabases.xml
+++ b/system/doc/efficiency_guide/tablesDatabases.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/system/doc/efficiency_guide/xmlfiles.mk b/system/doc/efficiency_guide/xmlfiles.mk
index e3373d545a..88df9417f5 100644
--- a/system/doc/efficiency_guide/xmlfiles.mk
+++ b/system/doc/efficiency_guide/xmlfiles.mk
@@ -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/system/doc/embedded/Makefile b/system/doc/embedded/Makefile
index c1134dd62c..40a1b1fb23 100644
--- a/system/doc/embedded/Makefile
+++ b/system/doc/embedded/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/system/doc/embedded/book.xml b/system/doc/embedded/book.xml
index 5a414152d0..7737da7d2e 100644
--- a/system/doc/embedded/book.xml
+++ b/system/doc/embedded/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/system/doc/embedded/embedded_nt.xml b/system/doc/embedded/embedded_nt.xml
index b35a5edf36..a1a4b90f3c 100644
--- a/system/doc/embedded/embedded_nt.xml
+++ b/system/doc/embedded/embedded_nt.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/system/doc/embedded/embedded_solaris.xml b/system/doc/embedded/embedded_solaris.xml
index ade5ad344e..f8febcc546 100644
--- a/system/doc/embedded/embedded_solaris.xml
+++ b/system/doc/embedded/embedded_solaris.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/system/doc/embedded/intro.xml b/system/doc/embedded/intro.xml
index 7fea2eeb82..2b9d35d24c 100644
--- a/system/doc/embedded/intro.xml
+++ b/system/doc/embedded/intro.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/system/doc/embedded/part.xml b/system/doc/embedded/part.xml
index 7bac643be7..d359a888e7 100644
--- a/system/doc/embedded/part.xml
+++ b/system/doc/embedded/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/system/doc/embedded/starting.xml b/system/doc/embedded/starting.xml
index f9454f1021..720383e8ac 100644
--- a/system/doc/embedded/starting.xml
+++ b/system/doc/embedded/starting.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/system/doc/embedded/target.xml b/system/doc/embedded/target.xml
index 20ef6b0fc6..754269aa2f 100644
--- a/system/doc/embedded/target.xml
+++ b/system/doc/embedded/target.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/system/doc/embedded/vme_problems.xml b/system/doc/embedded/vme_problems.xml
index 54618935cd..ac276ce9d3 100644
--- a/system/doc/embedded/vme_problems.xml
+++ b/system/doc/embedded/vme_problems.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/system/doc/embedded/xmlfiles.mk b/system/doc/embedded/xmlfiles.mk
index 4446aa1516..1e0c71c726 100644
--- a/system/doc/embedded/xmlfiles.mk
+++ b/system/doc/embedded/xmlfiles.mk
@@ -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/system/doc/embedded/xntp.xml b/system/doc/embedded/xntp.xml
index 2f4dc9a534..46213c7865 100644
--- a/system/doc/embedded/xntp.xml
+++ b/system/doc/embedded/xntp.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/system/doc/getting_started/Makefile b/system/doc/getting_started/Makefile
index f16dc0dde1..1fe3d39e4e 100644
--- a/system/doc/getting_started/Makefile
+++ b/system/doc/getting_started/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/system/doc/getting_started/book.xml b/system/doc/getting_started/book.xml
index 8dfca19480..1d92105429 100644
--- a/system/doc/getting_started/book.xml
+++ b/system/doc/getting_started/book.xml
@@ -4,7 +4,7 @@
<book xmlns:xi="http://www.w3.org/2001/XInclude">
<header titlestyle="normal">
<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/system/doc/getting_started/conc_prog.xml b/system/doc/getting_started/conc_prog.xml
index 9f13ee4802..f3136898ad 100644
--- a/system/doc/getting_started/conc_prog.xml
+++ b/system/doc/getting_started/conc_prog.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/system/doc/getting_started/intro.xml b/system/doc/getting_started/intro.xml
index 6ac4f912fe..afae4e8c18 100644
--- a/system/doc/getting_started/intro.xml
+++ b/system/doc/getting_started/intro.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/system/doc/getting_started/part.xml b/system/doc/getting_started/part.xml
index 4b902f4c63..71e551a404 100644
--- a/system/doc/getting_started/part.xml
+++ b/system/doc/getting_started/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/system/doc/getting_started/records_macros.xml b/system/doc/getting_started/records_macros.xml
index dd2441b64e..3fcdb10088 100644
--- a/system/doc/getting_started/records_macros.xml
+++ b/system/doc/getting_started/records_macros.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/system/doc/getting_started/robustness.xml b/system/doc/getting_started/robustness.xml
index abd5892b80..6932f0ca0f 100644
--- a/system/doc/getting_started/robustness.xml
+++ b/system/doc/getting_started/robustness.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/system/doc/getting_started/seq_prog.xml b/system/doc/getting_started/seq_prog.xml
index 5698405ed2..6b7e1cd24f 100644
--- a/system/doc/getting_started/seq_prog.xml
+++ b/system/doc/getting_started/seq_prog.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/system/doc/getting_started/xmlfiles.mk b/system/doc/getting_started/xmlfiles.mk
index 892db0e8de..d5a41121d6 100644
--- a/system/doc/getting_started/xmlfiles.mk
+++ b/system/doc/getting_started/xmlfiles.mk
@@ -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/system/doc/installation_guide/Makefile b/system/doc/installation_guide/Makefile
index 52485382d5..673c203422 100644
--- a/system/doc/installation_guide/Makefile
+++ b/system/doc/installation_guide/Makefile
@@ -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/system/doc/installation_guide/book.xml b/system/doc/installation_guide/book.xml
index 92a64345c0..a7686252c6 100644
--- a/system/doc/installation_guide/book.xml
+++ b/system/doc/installation_guide/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/system/doc/installation_guide/install-binary.xml b/system/doc/installation_guide/install-binary.xml
index 43f5a57077..b070c02633 100644
--- a/system/doc/installation_guide/install-binary.xml
+++ b/system/doc/installation_guide/install-binary.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>
diff --git a/system/doc/installation_guide/part.xml b/system/doc/installation_guide/part.xml
index 0aacd0f49b..7e51e6ae84 100644
--- a/system/doc/installation_guide/part.xml
+++ b/system/doc/installation_guide/part.xml
@@ -4,7 +4,7 @@
<part xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>2000</year><year>2014</year>
+ <year>2000</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/system/doc/installation_guide/xmlfiles.mk b/system/doc/installation_guide/xmlfiles.mk
index 05effe1534..3f720e1ee5 100644
--- a/system/doc/installation_guide/xmlfiles.mk
+++ b/system/doc/installation_guide/xmlfiles.mk
@@ -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/system/doc/oam/Makefile b/system/doc/oam/Makefile
index 0638a4dbd6..9095744423 100644
--- a/system/doc/oam/Makefile
+++ b/system/doc/oam/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/system/doc/oam/book.xml b/system/doc/oam/book.xml
index 93f5fe344a..05aa2334a5 100644
--- a/system/doc/oam/book.xml
+++ b/system/doc/oam/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/system/doc/oam/oam_intro.xml b/system/doc/oam/oam_intro.xml
index 22a2080fd9..cdcb6e3111 100644
--- a/system/doc/oam/oam_intro.xml
+++ b/system/doc/oam/oam_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/system/doc/oam/part.xml b/system/doc/oam/part.xml
index efbaa05b94..817b70751c 100644
--- a/system/doc/oam/part.xml
+++ b/system/doc/oam/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/system/doc/oam/xmlfiles.mk b/system/doc/oam/xmlfiles.mk
index 5876243466..b2351c661c 100644
--- a/system/doc/oam/xmlfiles.mk
+++ b/system/doc/oam/xmlfiles.mk
@@ -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/system/doc/programming_examples/Makefile b/system/doc/programming_examples/Makefile
index e5f7a330f4..237076d770 100644
--- a/system/doc/programming_examples/Makefile
+++ b/system/doc/programming_examples/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/system/doc/programming_examples/book.xml b/system/doc/programming_examples/book.xml
index c6eb4fec97..0f0fca5874 100644
--- a/system/doc/programming_examples/book.xml
+++ b/system/doc/programming_examples/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/system/doc/programming_examples/funs.xmlsrc b/system/doc/programming_examples/funs.xmlsrc
index 8469f0871c..bb519be612 100644
--- a/system/doc/programming_examples/funs.xmlsrc
+++ b/system/doc/programming_examples/funs.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>
@@ -212,7 +212,7 @@ f(...) ->
...
end, ...)
...</code>
- <p>instead of writng the following code:</p>
+ <p>instead of writing the following code:</p>
<code type="none">
f(...) ->
Y = ...
diff --git a/system/doc/programming_examples/list_comprehensions.xml b/system/doc/programming_examples/list_comprehensions.xml
index 5667571ec5..706cb337ad 100644
--- a/system/doc/programming_examples/list_comprehensions.xml
+++ b/system/doc/programming_examples/list_comprehensions.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/system/doc/programming_examples/part.xml b/system/doc/programming_examples/part.xml
index e1f8cc5d57..930646ff4b 100644
--- a/system/doc/programming_examples/part.xml
+++ b/system/doc/programming_examples/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/system/doc/programming_examples/records.xml b/system/doc/programming_examples/records.xml
index 6bda6dc0fd..da346dd0b3 100644
--- a/system/doc/programming_examples/records.xml
+++ b/system/doc/programming_examples/records.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/system/doc/programming_examples/xmlfiles.mk b/system/doc/programming_examples/xmlfiles.mk
index cc77f48253..5129e488f4 100644
--- a/system/doc/programming_examples/xmlfiles.mk
+++ b/system/doc/programming_examples/xmlfiles.mk
@@ -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/system/doc/reference_manual/Makefile b/system/doc/reference_manual/Makefile
index 30febb1ade..e14a056979 100644
--- a/system/doc/reference_manual/Makefile
+++ b/system/doc/reference_manual/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/system/doc/reference_manual/book.xml b/system/doc/reference_manual/book.xml
index 6b7306fb77..590d3580a4 100644
--- a/system/doc/reference_manual/book.xml
+++ b/system/doc/reference_manual/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/system/doc/reference_manual/code_loading.xml b/system/doc/reference_manual/code_loading.xml
index e9da40e02f..f6fd2911fa 100644
--- a/system/doc/reference_manual/code_loading.xml
+++ b/system/doc/reference_manual/code_loading.xml
@@ -130,26 +130,6 @@ loop() ->
<marker id="on_load"></marker>
<title>Running a Function When a Module is Loaded</title>
- <warning>
- <p>The <c>on_load</c> feature is to be considered experimental
- as there are a number of known weak points in current semantics,
- which therefore might change in future Erlang/OTP releases:</p>
- <list>
- <item><p>Doing external call in <c>on_load</c> to the module itself
- leads to deadlock.</p></item>
- <item><p>At module upgrade, other processes calling the module
- get suspended waiting for <c>on_load</c> to finish. This can be very bad
- for applications with demands on realtime characteristics.</p></item>
- <item><p>At module upgrade, no rollback is done if the
- <c>on_load</c> function fails.
- The system is left in a bad limbo state without any working
- and reachable instance of the module.</p></item>
- </list>
- <p>The problems with module upgrade described above can be fixed in future
- Erlang/OTP releases by changing the behaviour to not make the module reachable until
- after the <c>on_load</c> function has successfully returned.</p>
- </warning>
-
<p>The <c>-on_load()</c> directive names a function that is to
be run automatically when a module is loaded.</p>
<p>Its syntax is as follows:</p>
@@ -159,20 +139,35 @@ loop() ->
<p>It is not necessary to export the function. It is called in a
freshly spawned process (which terminates as soon as the function
- returns). The function must return <c>ok</c> if the module is to
- remain loaded and become callable, or any other value if the module
- is to be unloaded. Generating an exception also causes the
- module to be unloaded. If the return value is not an atom,
- a warning error report is sent to the error logger.</p>
-
- <p>A process that calls any function in a module whose <c>on_load</c>
- function has not yet returned, is suspended until the <c>on_load</c>
- function has returned.</p>
+ returns).</p>
+
+ <p>The function must return <c>ok</c> if the module is to
+ become the new current code for the module and become
+ callable.</p>
+
+ <p>Returning any other value or generating an exception
+ causes the new code to be unloaded. If the return value is not an
+ atom, a warning error report is sent to the error logger.</p>
+
+ <p>If there already is current code for the module, that code will
+ remain current and can be called until the <c>on_load</c> function
+ has returned. If the <c>on_load</c> function fails, the current
+ code (if any) will remain current. If there is no current code for
+ a module, any process that makes an external call to the module
+ before the <c>on_load</c> function has finished will be suspended
+ until the <c>on_load</c> function have finished.</p>
+
+ <note>
+ <p>Before OTP 19, if the <c>on_load</c> function failed, any
+ previously current code would become old, essentially leaving
+ the system without any working and reachable instance of the
+ module. That problem has been eliminated in OTP 19.</p>
+ </note>
<p>In embedded mode, first all modules are loaded.
Then all <c>on_load</c> functions are called. The system is
terminated unless all of the <c>on_load</c> functions return
- <c>ok</c></p>.
+ <c>ok</c>.</p>
<p><em>Example:</em></p>
diff --git a/system/doc/reference_manual/expressions.xml b/system/doc/reference_manual/expressions.xml
index e98fcbcbb9..355fd3cfef 100644
--- a/system/doc/reference_manual/expressions.xml
+++ b/system/doc/reference_manual/expressions.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2003</year><year>2015</year>
+ <year>2003</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -1556,9 +1556,11 @@ end</pre>
<p>Bit string comprehensions are written with
the following syntax:</p>
<pre>
-&lt;&lt; BitString || Qualifier1,...,QualifierN &gt;&gt;</pre>
- <p>Here, <c>BitString</c> is a bit string expression and each
- <c>Qualifier</c> is either a generator, a bit string generator or a filter.</p>
+&lt;&lt; BitStringExpr || Qualifier1,...,QualifierN &gt;&gt;</pre>
+ <p><c>BitStringExpr</c> is an expression that evalutes to a bit
+ string. If <c>BitStringExpr</c> is a function call, it must be
+ enclosed in parentheses. Each <c>Qualifier</c> is either a
+ generator, a bit string generator or a filter.</p>
<list type="bulleted">
<item>A <em>generator</em> is written as: <br></br>
&nbsp;&nbsp;<c><![CDATA[Pattern <- ListExpr]]></c>. <br></br>
diff --git a/system/doc/reference_manual/macros.xml b/system/doc/reference_manual/macros.xml
index 42ea639b54..350bb1d123 100644
--- a/system/doc/reference_manual/macros.xml
+++ b/system/doc/reference_manual/macros.xml
@@ -234,6 +234,53 @@ or
</section>
<section>
+ <title>-error() and -warning() directives</title>
+
+ <p>The directive <c>-error(Term)</c> causes a compilation error.</p>
+
+ <p><em>Example:</em></p>
+ <code type="none">
+-module(t).
+-export([version/0]).
+
+-ifdef(VERSION).
+version() -> ?VERSION.
+-else.
+-error("Macro VERSION must be defined.").
+version() -> "".
+-endif.</code>
+
+ <p>The error message will look like this:</p>
+
+ <pre>
+% <input>erlc t.erl</input>
+t.erl:7: -error("Macro VERSION must be defined.").</pre>
+
+ <p>The directive <c>-warning(Term)</c> causes a compilation warning.</p>
+
+ <p><em>Example:</em></p>
+ <code type="none">
+-module(t).
+-export([version/0]).
+
+-ifndef(VERSION).
+-warning("Macro VERSION not defined -- using default version.").
+-define(VERSION, "0").
+-endif.
+version() -> ?VERSION.</code>
+
+ <p>The warning message will look like this:</p>
+
+ <pre>
+% <input>erlc t.erl</input>
+t.erl:5: Warning: -warning("Macro VERSION not defined -- using default version.").</pre>
+
+ <p>The <c>-error()</c> and <c>-warning()</c> directives were added
+ in OTP 19.</p>
+
+ </section>
+
+ <section>
<title>Stringifying Macro Arguments</title>
<p>The construction <c>??Arg</c>, where <c>Arg</c> is a macro
argument, is expanded to a string containing the tokens of
@@ -253,5 +300,6 @@ io:format("Call ~s: ~w~n",["you : function ( 2 , 1 )",you:function(2,1)]).</code
<p>That is, a trace output, with both the function called and
the resulting value.</p>
</section>
+
</chapter>
diff --git a/system/doc/reference_manual/modules.xml b/system/doc/reference_manual/modules.xml
index 5f2ac2a67d..96968b547e 100644
--- a/system/doc/reference_manual/modules.xml
+++ b/system/doc/reference_manual/modules.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2003</year><year>2015</year>
+ <year>2003</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -144,6 +144,7 @@ fact(0) -> % |
<list type="bulleted">
<item><c>gen_server</c></item>
<item><c>gen_fsm</c></item>
+ <item><c>gen_statem</c></item>
<item><c>gen_event</c></item>
<item><c>supervisor</c></item>
</list>
diff --git a/system/doc/reference_manual/part.xml b/system/doc/reference_manual/part.xml
index 58483b099a..3d31157973 100644
--- a/system/doc/reference_manual/part.xml
+++ b/system/doc/reference_manual/part.xml
@@ -4,7 +4,7 @@
<part xmlns:xi="http://www.w3.org/2001/XInclude">
<header>
<copyright>
- <year>2003</year><year>2014</year>
+ <year>2003</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/system/doc/reference_manual/patterns.xml b/system/doc/reference_manual/patterns.xml
index 043d282de7..57b84b4dfc 100644
--- a/system/doc/reference_manual/patterns.xml
+++ b/system/doc/reference_manual/patterns.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/system/doc/reference_manual/typespec.xml b/system/doc/reference_manual/typespec.xml
index 8915302088..9e26e9058d 100644
--- a/system/doc/reference_manual/typespec.xml
+++ b/system/doc/reference_manual/typespec.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2003</year><year>2015</year>
+ <year>2003</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -132,15 +132,18 @@
| nonempty_list(Type) %% Proper non-empty list
Map :: map() %% stands for a map of any size
- | #{} %% stands for a map of any size
+ | #{} %% stands for the empty map
| #{PairList}
Tuple :: tuple() %% stands for a tuple of any size
| {}
| {TList}
- PairList :: Type => Type
- | Type => Type, PairList
+ PairList :: Pair
+ | Pair, PairList
+
+ Pair :: Type := Type %% notes a pair that must be present
+ | Type => Type
TList :: Type
| Type, TList
@@ -148,9 +151,9 @@
Union :: Type1 | Type2
]]></pre>
<p>
- The general form of bitstrings is <c>&lt;&lt;_:M, _:_*N&gt;&gt;</c>,
+ The general form of bit strings is <c>&lt;&lt;_:M, _:_*N&gt;&gt;</c>,
where <c>M</c> and <c>N</c> are positive integers. It denotes a
- bitstring that is <c>M + (k*N)</c> bits long (that is, a bitstring that
+ bit string that is <c>M + (k*N)</c> bits long (that is, a bit string that
starts with <c>M</c> bits and continues with <c>k</c> segments of
<c>N</c> bits each, where <c>k</c> is also a positive integer).
The notations <c>&lt;&lt;_:_*N&gt;&gt;</c>, <c>&lt;&lt;_:M&gt;&gt;</c>,
@@ -170,6 +173,23 @@
The notation <c>[]</c> specifies the singleton type for the empty list.
</p>
<p>
+ The general form of maps is <c>#{PairList}</c>. The key types in
+ <c>PairList</c> are allowed to overlap, and if they do, the leftmost pair
+ takes precedence. A map value does not belong to this type if contains a key
+ that is not in <c>PairList</c>.
+ </p>
+ <p>
+ Because it is common to end a map type with <c>any() =&gt; any()</c> to denote
+ that keys that do not belong to any other pair in <c>PairList</c> are
+ allowed, and may map to any value, the shorthand notation <c>...</c> is
+ allowed as the last pair of a map type.
+ </p>
+ <p>
+ Notice that the syntactic representation of <c>map()</c> is <c>#{...}</c>
+ (or <c>#{_ =&gt; _}</c>, or <c>#{any() =&gt; any()}</c>), not <c>#{}</c>.
+ The notation <c>#{}</c> specifies the singleton type for the empty map.
+ </p>
+ <p>
For convenience, the following types are also built-in.
They can be thought as predefined aliases for the type unions also shown in
the table.
@@ -302,12 +322,6 @@
This is described in <seealso marker="#typeinrecords">
Type Information in Record Declarations</seealso>.
</p>
- <note>
- <p>Map types, both <c>map()</c> and <c>#{...}</c>,
- are considered experimental during OTP 17.</p>
- <p>No type information of maps pairs, only the containing map types,
- are used by Dialyzer in OTP 17.</p>
- </note>
</section>
<section>
@@ -514,7 +528,7 @@
<em>the same</em> tuple.
</p>
<p>
- However, it is up to the tools that process the specificationss
+ However, it is up to the tools that process the specifications
to choose whether to take this extra information into account
or not.
</p>
diff --git a/system/doc/reference_manual/xmlfiles.mk b/system/doc/reference_manual/xmlfiles.mk
index 323b94c0de..61637ae701 100644
--- a/system/doc/reference_manual/xmlfiles.mk
+++ b/system/doc/reference_manual/xmlfiles.mk
@@ -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/system/doc/system_architecture_intro/Makefile b/system/doc/system_architecture_intro/Makefile
index 8bc86ab312..446e66205c 100644
--- a/system/doc/system_architecture_intro/Makefile
+++ b/system/doc/system_architecture_intro/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/system/doc/system_architecture_intro/book.xml b/system/doc/system_architecture_intro/book.xml
index 318f940a18..4b9f03c7f9 100644
--- a/system/doc/system_architecture_intro/book.xml
+++ b/system/doc/system_architecture_intro/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/system/doc/system_architecture_intro/part.xml b/system/doc/system_architecture_intro/part.xml
index eb0f9e0ba6..c000892449 100644
--- a/system/doc/system_architecture_intro/part.xml
+++ b/system/doc/system_architecture_intro/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/system/doc/system_architecture_intro/sys_arch_intro.xml b/system/doc/system_architecture_intro/sys_arch_intro.xml
index b9535f66f8..cf75e1f100 100644
--- a/system/doc/system_architecture_intro/sys_arch_intro.xml
+++ b/system/doc/system_architecture_intro/sys_arch_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/system/doc/system_architecture_intro/xmlfiles.mk b/system/doc/system_architecture_intro/xmlfiles.mk
index 6e7e712703..60c2047796 100644
--- a/system/doc/system_architecture_intro/xmlfiles.mk
+++ b/system/doc/system_architecture_intro/xmlfiles.mk
@@ -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/system/doc/system_principles/Makefile b/system/doc/system_principles/Makefile
index 2bb84474df..77edea8f58 100644
--- a/system/doc/system_principles/Makefile
+++ b/system/doc/system_principles/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/system/doc/system_principles/book.xml b/system/doc/system_principles/book.xml
index 11eacba578..cd84d4cf6b 100644
--- a/system/doc/system_principles/book.xml
+++ b/system/doc/system_principles/book.xml
@@ -4,7 +4,7 @@
<book xmlns:xi="http://www.w3.org/2001/XInclude">
<header titlestyle="normal">
<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/system/doc/system_principles/create_target.xmlsrc b/system/doc/system_principles/create_target.xmlsrc
index ccc26081c3..8a463076f5 100644
--- a/system/doc/system_principles/create_target.xmlsrc
+++ b/system/doc/system_principles/create_target.xmlsrc
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2002</year><year>2014</year>
+ <year>2002</year><year>2016</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
diff --git a/system/doc/system_principles/error_logging.xml b/system/doc/system_principles/error_logging.xml
index 024137a430..c99d59ddb7 100644
--- a/system/doc/system_principles/error_logging.xml
+++ b/system/doc/system_principles/error_logging.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/system/doc/system_principles/part.xml b/system/doc/system_principles/part.xml
index 1557b5ff62..1b87ecd350 100644
--- a/system/doc/system_principles/part.xml
+++ b/system/doc/system_principles/part.xml
@@ -4,7 +4,7 @@
<part xmlns:xi="http://www.w3.org/2001/XInclude">
<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/system/doc/system_principles/upgrade.xml b/system/doc/system_principles/upgrade.xml
index 173e46185c..c491bd855e 100644
--- a/system/doc/system_principles/upgrade.xml
+++ b/system/doc/system_principles/upgrade.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>
diff --git a/system/doc/system_principles/versions.xml b/system/doc/system_principles/versions.xml
index ee104a8302..3772d773fc 100644
--- a/system/doc/system_principles/versions.xml
+++ b/system/doc/system_principles/versions.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>
diff --git a/system/doc/system_principles/xmlfiles.mk b/system/doc/system_principles/xmlfiles.mk
index fcc1fc886f..c3c3bb4731 100644
--- a/system/doc/system_principles/xmlfiles.mk
+++ b/system/doc/system_principles/xmlfiles.mk
@@ -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/system/doc/top/Makefile b/system/doc/top/Makefile
index 7e3041ce1e..caae19a8d1 100644
--- a/system/doc/top/Makefile
+++ b/system/doc/top/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.
diff --git a/system/doc/top/book.xml b/system/doc/top/book.xml
index 7bbeb38472..c94b0f24d6 100644
--- a/system/doc/top/book.xml
+++ b/system/doc/top/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/system/doc/top/src/erl_html_tools.erl b/system/doc/top/src/erl_html_tools.erl
index dddf025020..ab58fdf666 100644
--- a/system/doc/top/src/erl_html_tools.erl
+++ b/system/doc/top/src/erl_html_tools.erl
@@ -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/system/doc/top/src/erlresolvelinks.erl b/system/doc/top/src/erlresolvelinks.erl
index 7946fd4bea..cfe8d0fa0b 100644
--- a/system/doc/top/src/erlresolvelinks.erl
+++ b/system/doc/top/src/erlresolvelinks.erl
@@ -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/system/doc/top/src/otp_man_index.erl b/system/doc/top/src/otp_man_index.erl
index 753e952ecb..12aaba1423 100644
--- a/system/doc/top/src/otp_man_index.erl
+++ b/system/doc/top/src/otp_man_index.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.
diff --git a/system/doc/top/templates/applications.html.src b/system/doc/top/templates/applications.html.src
index 4be969f9d1..1f73c44d69 100644
--- a/system/doc/top/templates/applications.html.src
+++ b/system/doc/top/templates/applications.html.src
@@ -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/system/doc/top/templates/index.html.src b/system/doc/top/templates/index.html.src
index bdac3895b0..9637685946 100644
--- a/system/doc/top/templates/index.html.src
+++ b/system/doc/top/templates/index.html.src
@@ -2,7 +2,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.
@@ -145,10 +145,10 @@ verification, comment support including paragraph filling, skeletons,
tags support and more. See the <a href="#tools#/index.html">
Tools</a> application for details.
<p>
-There is also an
-<a href="http://erlide.org/index.html">
-Erlang plugin (ErlIDE) for Eclipse</a> if you prefer a more graphical
-environment. ErlIDE is under active development with new features in almost every release.
+There are also Erlang plugins for
+<a href="http://erlide.org/index.html">Eclipse (ErlIDE)</a> and
+<a href="http://ignatov.github.io/intellij-erlang/">IntelliJ IDEA</a>
+if you prefer a more graphical environment, which are both under active development.
<li>When developing with Erlang/OTP you usually test your programs
from the interactive shell (see <a href="getting_started/users_guide.html">
Getting Started With Erlang</a>) where you can call individual
diff --git a/system/doc/tutorial/Makefile b/system/doc/tutorial/Makefile
index 868e79cd83..5deea41f0a 100644
--- a/system/doc/tutorial/Makefile
+++ b/system/doc/tutorial/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/system/doc/tutorial/appendix.xmlsrc b/system/doc/tutorial/appendix.xmlsrc
index 52c24c1b67..4be6c91fe9 100644
--- a/system/doc/tutorial/appendix.xmlsrc
+++ b/system/doc/tutorial/appendix.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/system/doc/tutorial/book.xml b/system/doc/tutorial/book.xml
index 81530f25eb..1841a2df60 100644
--- a/system/doc/tutorial/book.xml
+++ b/system/doc/tutorial/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/system/doc/tutorial/distribution.xml b/system/doc/tutorial/distribution.xml
index 40d60acb3a..b489410841 100644
--- a/system/doc/tutorial/distribution.xml
+++ b/system/doc/tutorial/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>
diff --git a/system/doc/tutorial/part.xml b/system/doc/tutorial/part.xml
index 5216d1653d..4a66f0cb22 100644
--- a/system/doc/tutorial/part.xml
+++ b/system/doc/tutorial/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/system/doc/tutorial/xmlfiles.mk b/system/doc/tutorial/xmlfiles.mk
index 28b66f232d..f8ed7be064 100644
--- a/system/doc/tutorial/xmlfiles.mk
+++ b/system/doc/tutorial/xmlfiles.mk
@@ -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.