@@ -2,108 +2,118 @@ var libxml = require('../index');
22var semver = require ( 'semver' ) ;
33
44if ( ! global . gc ) {
5- throw new Error ( 'must run with --expose_gc for memory management tests' ) ;
5+ throw new Error ( 'must run with --expose_gc for memory management tests' ) ;
66}
77
8- var nodeVersion = process . versions . node
9- var shouldSkip = semver . satisfies ( nodeVersion , '8.x || 9.x || 10.x' )
8+ var nodeVersion = process . versions . node ;
9+ var shouldSkip = semver . satisfies ( nodeVersion , '8.x || 9.x || 10.x' ) ;
1010
1111module . exports . setUp = function ( done ) {
12- collectGarbage ( ) ;
13- done ( ) ;
12+ collectGarbage ( ) ;
13+ done ( ) ;
1414} ;
1515
1616module . exports . inaccessible_document_freed = function ( assert ) {
17- var xml_memory_before_document = libxml . memoryUsage ( ) ;
18- for ( var i = 0 ; i < 10 ; i ++ ) {
19- makeDocument ( ) ;
20- }
17+ var xml_memory_before_document = libxml . memoryUsage ( ) ;
18+ for ( var i = 0 ; i < 10 ; i ++ ) {
19+ makeDocument ( ) ;
20+ }
21+ process . nextTick ( ( ) => {
2122 collectGarbage ( ) ;
2223 assert . ok ( libxml . memoryUsage ( ) <= xml_memory_before_document ) ;
2324 assert . done ( ) ;
25+ } ) ;
2426} ;
2527
2628module . exports . inaccessible_document_freed_when_node_freed = function ( assert ) {
27- if ( shouldSkip ) {
28- assert . done ( ) ;
29- console . warn ( 'skipping inaccessible_document_freed_when_node_freed' ) ;
30- return ;
31- }
32-
33- var xml_memory_before_document = libxml . memoryUsage ( ) ;
34- var nodes = [ ] ;
35- for ( var i = 0 ; i < 10 ; i ++ ) {
36- nodes . push ( makeDocument ( ) . get ( '//center' ) ) ;
37- }
38- nodes = null ;
29+ if ( shouldSkip ) {
30+ assert . done ( ) ;
31+ console . warn ( 'skipping inaccessible_document_freed_when_node_freed' ) ;
32+ return ;
33+ }
34+
35+ var xml_memory_before_document = libxml . memoryUsage ( ) ;
36+ var nodes = [ ] ;
37+ for ( var i = 0 ; i < 10 ; i ++ ) {
38+ nodes . push ( makeDocument ( ) . get ( '//center' ) ) ;
39+ }
40+ nodes = null ;
41+ process . nextTick ( ( ) => {
3942 collectGarbage ( ) ;
4043 assert . ok ( libxml . memoryUsage ( ) <= xml_memory_before_document ) ;
4144 assert . done ( ) ;
45+ } ) ;
4246} ;
4347
4448module . exports . inaccessible_document_freed_after_middle_nodes_proxied = function ( assert ) {
45- var xml_memory_before_document = libxml . memoryUsage ( ) ;
46- var doc = makeDocument ( ) ;
47- var middle = doc . get ( '//middle' ) ;
48- var inner = doc . get ( '//inner' ) ;
49- inner . remove ( ) ; // v0.14.3, v0.15: proxy ref'd parent but can't unref when destroyed
50- doc = middle = inner = null ;
49+ var xml_memory_before_document = libxml . memoryUsage ( ) ;
50+ var doc = makeDocument ( ) ;
51+ var middle = doc . get ( '//middle' ) ;
52+ var inner = doc . get ( '//inner' ) ;
53+ inner . remove ( ) ; // v0.14.3, v0.15: proxy ref'd parent but can't unref when destroyed
54+ doc = middle = inner = null ;
55+ process . nextTick ( ( ) => {
5156 collectGarbage ( ) ;
5257 assert . ok ( libxml . memoryUsage ( ) <= xml_memory_before_document ) ;
5358 assert . done ( ) ;
59+ } ) ;
5460} ;
5561
5662module . exports . inaccessible_tree_freed = function ( assert ) {
57- if ( shouldSkip ) {
58- assert . done ( ) ;
59- console . warn ( 'skipping inaccessible_tree_freed' ) ;
60- return ;
61- }
62-
63- var doc = makeDocument ( ) ;
64- var xml_memory_after_document = libxml . memoryUsage ( ) ;
65- doc . get ( '//middle' ) . remove ( ) ; ;
63+ if ( shouldSkip ) {
64+ assert . done ( ) ;
65+ console . warn ( 'skipping inaccessible_tree_freed' ) ;
66+ return ;
67+ }
68+
69+ var doc = makeDocument ( ) ;
70+ var xml_memory_after_document = libxml . memoryUsage ( ) ;
71+ doc . get ( '//middle' ) . remove ( ) ;
72+ process . nextTick ( ( ) => {
6673 collectGarbage ( ) ;
67- assert . ok ( libxml . memoryUsage ( ) < xml_memory_after_document ) ;
74+ assert . ok ( libxml . memoryUsage ( ) <= xml_memory_after_document ) ;
6875 assert . done ( ) ;
76+ } ) ;
6977} ;
7078
7179module . exports . namespace_list_freed = function ( assert ) {
72- var doc = makeDocument ( ) ;
73- var el = doc . get ( '//center' ) ;
74- el . namespace ( "bar" , null ) ;
75- var xmlMemBefore = libxml . memoryUsage ( ) ;
76- for ( var i ; i < 1000 ; i ++ ) {
77- el . namespaces ( )
78- }
80+ var doc = makeDocument ( ) ;
81+ var el = doc . get ( '//center' ) ;
82+ el . namespace ( 'bar' , null ) ;
83+ var xmlMemBefore = libxml . memoryUsage ( ) ;
84+ for ( var i ; i < 1000 ; i ++ ) {
85+ el . namespaces ( ) ;
86+ }
87+ process . nextTick ( ( ) => {
7988 collectGarbage ( ) ;
8089 assert . ok ( libxml . memoryUsage ( ) <= xmlMemBefore ) ;
8190 assert . done ( ) ;
91+ } ) ;
8292} ;
8393
8494function makeDocument ( ) {
85- var body = "<?xml version='1.0' encoding='UTF-8'?>\n" +
86- "<root><outer><middle><inner><center/></inner></middle></outer></root>" ;
87- return libxml . parseXml ( body ) ;
95+ var body =
96+ "<?xml version='1.0' encoding='UTF-8'?>\n" +
97+ '<root><outer><middle><inner><center/></inner></middle></outer></root>' ;
98+ return libxml . parseXml ( body ) ;
8899}
89100
90101function collectGarbage ( minCycles , maxCycles ) {
91- minCycles = minCycles || 3 ;
92- maxCycles = maxCycles || 10 ;
102+ minCycles = minCycles || 3 ;
103+ maxCycles = maxCycles || 10 ;
93104
94- var cycles = 0 ;
95- var freedRss = 0 ;
96- var usage = process . memoryUsage ( ) ;
97- do {
98- global . gc ( ) ;
105+ var cycles = 0 ;
106+ var freedRss = 0 ;
107+ var usage = process . memoryUsage ( ) ;
108+ do {
109+ global . gc ( ) ;
99110
100- var usageAfterGc = process . memoryUsage ( ) ;
101- freedRss = usage . rss - usageAfterGc . rss ;
102- usage = usageAfterGc ;
111+ var usageAfterGc = process . memoryUsage ( ) ;
112+ freedRss = usage . rss - usageAfterGc . rss ;
113+ usage = usageAfterGc ;
103114
104- cycles ++ ;
105- }
106- while ( ( cycles < minCycles ) || ( ( freedRss !== 0 ) && ( cycles < maxCycles ) ) ) ;
115+ cycles ++ ;
116+ } while ( cycles < minCycles || ( freedRss !== 0 && cycles < maxCycles ) ) ;
107117
108- return usage ;
118+ return usage ;
109119}
0 commit comments