Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
G
gitlab-ce
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Boxiang Sun
gitlab-ce
Commits
f3ae99fa
Commit
f3ae99fa
authored
Oct 31, 2017
by
Simon Knox
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
remove global export from SmartInterval
parent
1d298e49
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
138 additions
and
136 deletions
+138
-136
app/assets/javascripts/smart_interval.js
app/assets/javascripts/smart_interval.js
+1
-2
app/assets/javascripts/vue_merge_request_widget/mr_widget_options.js
...javascripts/vue_merge_request_widget/mr_widget_options.js
+3
-2
spec/javascripts/smart_interval_spec.js
spec/javascripts/smart_interval_spec.js
+123
-125
spec/javascripts/vue_mr_widget/mr_widget_options_spec.js
spec/javascripts/vue_mr_widget/mr_widget_options_spec.js
+11
-7
No files found.
app/assets/javascripts/smart_interval.js
View file @
f3ae99fa
...
...
@@ -3,7 +3,7 @@
* and controllable by a public API.
*/
class
SmartInterval
{
export
default
class
SmartInterval
{
/**
* @param { function } opts.callback Function to be called on each iteration (required)
* @param { milliseconds } opts.startingInterval `currentInterval` is set to this initially
...
...
@@ -168,4 +168,3 @@ class SmartInterval {
}
}
window
.
gl
.
SmartInterval
=
SmartInterval
;
app/assets/javascripts/vue_merge_request_widget/mr_widget_options.js
View file @
f3ae99fa
import
SmartInterval
from
'
~/smart_interval
'
;
import
Flash
from
'
../flash
'
;
import
{
WidgetHeader
,
...
...
@@ -97,7 +98,7 @@ export default {
});
},
initPolling
()
{
this
.
pollingInterval
=
new
gl
.
SmartInterval
({
this
.
pollingInterval
=
new
SmartInterval
({
callback
:
this
.
checkStatus
,
startingInterval
:
10000
,
maxInterval
:
30000
,
...
...
@@ -106,7 +107,7 @@ export default {
});
},
initDeploymentsPolling
()
{
this
.
deploymentsInterval
=
new
gl
.
SmartInterval
({
this
.
deploymentsInterval
=
new
SmartInterval
({
callback
:
this
.
fetchDeployments
,
startingInterval
:
30000
,
maxInterval
:
120000
,
...
...
spec/javascripts/smart_interval_spec.js
View file @
f3ae99fa
import
'
~/smart_interval
'
;
import
SmartInterval
from
'
~/smart_interval
'
;
(()
=>
{
describe
(
'
SmartInterval
'
,
function
()
{
const
DEFAULT_MAX_INTERVAL
=
100
;
const
DEFAULT_STARTING_INTERVAL
=
5
;
const
DEFAULT_SHORT_TIMEOUT
=
75
;
...
...
@@ -22,170 +22,168 @@ import '~/smart_interval';
_
.
extend
(
defaultParams
,
config
);
}
return
new
gl
.
SmartInterval
(
defaultParams
);
return
new
SmartInterval
(
defaultParams
);
}
describe
(
'
SmartInterval
'
,
function
()
{
describe
(
'
Increment Interval
'
,
function
()
{
beforeEach
(
function
()
{
this
.
smartInterval
=
createDefaultSmartInterval
();
});
it
(
'
should increment the interval delay
'
,
function
(
done
)
{
const
interval
=
this
.
smartInterval
;
setTimeout
(()
=>
{
const
intervalConfig
=
this
.
smartInterval
.
cfg
;
const
iterationCount
=
4
;
const
maxIntervalAfterIterations
=
intervalConfig
.
startingInterval
*
(
intervalConfig
.
incrementByFactorOf
**
(
iterationCount
-
1
));
// 40
const
currentInterval
=
interval
.
getCurrentInterval
();
// Provide some flexibility for performance of testing environment
expect
(
currentInterval
).
toBeGreaterThan
(
intervalConfig
.
startingInterval
);
expect
(
currentInterval
<=
maxIntervalAfterIterations
).
toBeTruthy
();
done
();
},
DEFAULT_SHORT_TIMEOUT
);
// 4 iterations, increment by 2x = (5 + 10 + 20 + 40)
});
describe
(
'
Increment Interval
'
,
function
()
{
beforeEach
(
function
()
{
this
.
smartInterval
=
createDefaultSmartInterval
();
});
it
(
'
should not increment past maxInterval
'
,
function
(
done
)
{
const
interval
=
this
.
smartInterval
;
it
(
'
should increment the interval delay
'
,
function
(
done
)
{
const
interval
=
this
.
smartInterval
;
setTimeout
(()
=>
{
const
intervalConfig
=
this
.
smartInterval
.
cfg
;
const
iterationCount
=
4
;
const
maxIntervalAfterIterations
=
intervalConfig
.
startingInterval
*
(
intervalConfig
.
incrementByFactorOf
**
(
iterationCount
-
1
));
// 40
const
currentInterval
=
interval
.
getCurrentInterval
();
// Provide some flexibility for performance of testing environment
expect
(
currentInterval
).
toBeGreaterThan
(
intervalConfig
.
startingInterval
);
expect
(
currentInterval
<=
maxIntervalAfterIterations
).
toBeTruthy
();
done
();
},
DEFAULT_SHORT_TIMEOUT
);
// 4 iterations, increment by 2x = (5 + 10 + 20 + 40)
});
setTimeout
(()
=>
{
const
currentInterval
=
interval
.
getCurrentInterval
();
expect
(
currentInterval
).
toBe
(
interval
.
cfg
.
maxInterval
);
it
(
'
should not increment past maxInterval
'
,
function
(
done
)
{
const
interval
=
this
.
smartInterval
;
done
();
},
DEFAULT_LONG_TIMEOUT
);
}
);
setTimeout
(()
=>
{
const
currentInterval
=
interval
.
getCurrentInterval
(
);
expect
(
currentInterval
).
toBe
(
interval
.
cfg
.
maxInterval
);
it
(
'
does not increment while waiting for callback
'
,
function
(
done
)
{
const
smartInterval
=
createDefaultSmartInterval
({
callback
:
()
=>
new
Promise
(
$
.
noop
),
});
done
();
},
DEFAULT_LONG_TIMEOUT
);
});
setTimeout
(()
=>
{
const
oneInterval
=
smartInterval
.
cfg
.
startingInterval
*
DEFAULT_INCREMENT_FACTOR
;
expect
(
smartInterval
.
getCurrentInterval
()).
toEqual
(
oneInterval
);
done
();
},
DEFAULT_SHORT_TIMEOUT
);
it
(
'
does not increment while waiting for callback
'
,
function
(
done
)
{
const
smartInterval
=
createDefaultSmartInterval
({
callback
:
()
=>
new
Promise
(
$
.
noop
),
});
setTimeout
(()
=>
{
const
oneInterval
=
smartInterval
.
cfg
.
startingInterval
*
DEFAULT_INCREMENT_FACTOR
;
expect
(
smartInterval
.
getCurrentInterval
()).
toEqual
(
oneInterval
);
done
();
},
DEFAULT_SHORT_TIMEOUT
);
});
});
describe
(
'
Public methods
'
,
function
()
{
beforeEach
(
function
()
{
this
.
smartInterval
=
createDefaultSmartInterval
();
});
describe
(
'
Public methods
'
,
function
()
{
beforeEach
(
function
()
{
this
.
smartInterval
=
createDefaultSmartInterval
();
});
it
(
'
should cancel an interval
'
,
function
(
done
)
{
const
interval
=
this
.
smartInterval
;
it
(
'
should cancel an interval
'
,
function
(
done
)
{
const
interval
=
this
.
smartInterval
;
setTimeout
(()
=>
{
interval
.
cancel
();
setTimeout
(()
=>
{
interval
.
cancel
();
const
intervalId
=
interval
.
state
.
intervalId
;
const
currentInterval
=
interval
.
getCurrentInterval
();
const
intervalLowerLimit
=
interval
.
cfg
.
startingInterval
;
const
intervalId
=
interval
.
state
.
intervalId
;
const
currentInterval
=
interval
.
getCurrentInterval
();
const
intervalLowerLimit
=
interval
.
cfg
.
startingInterval
;
expect
(
intervalId
).
toBeUndefined
();
expect
(
currentInterval
).
toBe
(
intervalLowerLimit
);
expect
(
intervalId
).
toBeUndefined
();
expect
(
currentInterval
).
toBe
(
intervalLowerLimit
);
done
();
},
DEFAULT_SHORT_TIMEOUT
);
});
done
();
},
DEFAULT_SHORT_TIMEOUT
);
});
it
(
'
should resume an interval
'
,
function
(
done
)
{
const
interval
=
this
.
smartInterval
;
it
(
'
should resume an interval
'
,
function
(
done
)
{
const
interval
=
this
.
smartInterval
;
setTimeout
(()
=>
{
interval
.
cancel
();
setTimeout
(()
=>
{
interval
.
cancel
();
interval
.
resume
();
interval
.
resume
();
const
intervalId
=
interval
.
state
.
intervalId
;
const
intervalId
=
interval
.
state
.
intervalId
;
expect
(
intervalId
).
toBeTruthy
();
expect
(
intervalId
).
toBeTruthy
();
done
();
},
DEFAULT_SHORT_TIMEOUT
);
});
done
();
},
DEFAULT_SHORT_TIMEOUT
);
});
});
describe
(
'
DOM Events
'
,
function
()
{
beforeEach
(
function
()
{
// This ensures DOM and DOM events are initialized for these specs.
setFixtures
(
'
<div></div>
'
);
describe
(
'
DOM Events
'
,
function
()
{
beforeEach
(
function
()
{
// This ensures DOM and DOM events are initialized for these specs.
setFixtures
(
'
<div></div>
'
);
this
.
smartInterval
=
createDefaultSmartInterval
();
});
this
.
smartInterval
=
createDefaultSmartInterval
();
});
it
(
'
should pause when page is not visible
'
,
function
(
done
)
{
const
interval
=
this
.
smartInterval
;
it
(
'
should pause when page is not visible
'
,
function
(
done
)
{
const
interval
=
this
.
smartInterval
;
setTimeout
(()
=>
{
expect
(
interval
.
state
.
intervalId
).
toBeTruthy
();
setTimeout
(()
=>
{
expect
(
interval
.
state
.
intervalId
).
toBeTruthy
();
// simulates triggering of visibilitychange event
interval
.
handleVisibilityChange
({
target
:
{
visibilityState
:
'
hidden
'
}
});
// simulates triggering of visibilitychange event
interval
.
handleVisibilityChange
({
target
:
{
visibilityState
:
'
hidden
'
}
});
expect
(
interval
.
state
.
intervalId
).
toBeUndefined
();
done
();
},
DEFAULT_SHORT_TIMEOUT
);
});
expect
(
interval
.
state
.
intervalId
).
toBeUndefined
();
done
();
},
DEFAULT_SHORT_TIMEOUT
);
});
it
(
'
should change to the hidden interval when page is not visible
'
,
function
(
done
)
{
const
HIDDEN_INTERVAL
=
1500
;
const
interval
=
createDefaultSmartInterval
({
hiddenInterval
:
HIDDEN_INTERVAL
});
it
(
'
should change to the hidden interval when page is not visible
'
,
function
(
done
)
{
const
HIDDEN_INTERVAL
=
1500
;
const
interval
=
createDefaultSmartInterval
({
hiddenInterval
:
HIDDEN_INTERVAL
});
setTimeout
(()
=>
{
expect
(
interval
.
state
.
intervalId
).
toBeTruthy
();
expect
(
interval
.
getCurrentInterval
()
>=
DEFAULT_STARTING_INTERVAL
&&
interval
.
getCurrentInterval
()
<=
DEFAULT_MAX_INTERVAL
).
toBeTruthy
();
setTimeout
(()
=>
{
expect
(
interval
.
state
.
intervalId
).
toBeTruthy
();
expect
(
interval
.
getCurrentInterval
()
>=
DEFAULT_STARTING_INTERVAL
&&
interval
.
getCurrentInterval
()
<=
DEFAULT_MAX_INTERVAL
).
toBeTruthy
();
// simulates triggering of visibilitychange event
interval
.
handleVisibilityChange
({
target
:
{
visibilityState
:
'
hidden
'
}
});
// simulates triggering of visibilitychange event
interval
.
handleVisibilityChange
({
target
:
{
visibilityState
:
'
hidden
'
}
});
expect
(
interval
.
state
.
intervalId
).
toBeTruthy
();
expect
(
interval
.
getCurrentInterval
()).
toBe
(
HIDDEN_INTERVAL
);
done
();
},
DEFAULT_SHORT_TIMEOUT
);
});
expect
(
interval
.
state
.
intervalId
).
toBeTruthy
();
expect
(
interval
.
getCurrentInterval
()).
toBe
(
HIDDEN_INTERVAL
);
done
();
},
DEFAULT_SHORT_TIMEOUT
);
});
it
(
'
should resume when page is becomes visible at the previous interval
'
,
function
(
done
)
{
const
interval
=
this
.
smartInterval
;
it
(
'
should resume when page is becomes visible at the previous interval
'
,
function
(
done
)
{
const
interval
=
this
.
smartInterval
;
setTimeout
(()
=>
{
expect
(
interval
.
state
.
intervalId
).
toBeTruthy
();
setTimeout
(()
=>
{
expect
(
interval
.
state
.
intervalId
).
toBeTruthy
();
// simulates triggering of visibilitychange event
interval
.
handleVisibilityChange
({
target
:
{
visibilityState
:
'
hidden
'
}
});
// simulates triggering of visibilitychange event
interval
.
handleVisibilityChange
({
target
:
{
visibilityState
:
'
hidden
'
}
});
expect
(
interval
.
state
.
intervalId
).
toBeUndefined
();
expect
(
interval
.
state
.
intervalId
).
toBeUndefined
();
// simulates triggering of visibilitychange event
interval
.
handleVisibilityChange
({
target
:
{
visibilityState
:
'
visible
'
}
});
// simulates triggering of visibilitychange event
interval
.
handleVisibilityChange
({
target
:
{
visibilityState
:
'
visible
'
}
});
expect
(
interval
.
state
.
intervalId
).
toBeTruthy
();
expect
(
interval
.
state
.
intervalId
).
toBeTruthy
();
done
();
},
DEFAULT_SHORT_TIMEOUT
);
});
done
();
},
DEFAULT_SHORT_TIMEOUT
);
});
it
(
'
should cancel on page unload
'
,
function
(
done
)
{
const
interval
=
this
.
smartInterval
;
it
(
'
should cancel on page unload
'
,
function
(
done
)
{
const
interval
=
this
.
smartInterval
;
setTimeout
(()
=>
{
$
(
document
).
triggerHandler
(
'
beforeunload
'
);
expect
(
interval
.
state
.
intervalId
).
toBeUndefined
();
expect
(
interval
.
getCurrentInterval
()).
toBe
(
interval
.
cfg
.
startingInterval
);
done
();
},
DEFAULT_SHORT_TIMEOUT
);
});
setTimeout
(()
=>
{
$
(
document
).
triggerHandler
(
'
beforeunload
'
);
expect
(
interval
.
state
.
intervalId
).
toBeUndefined
();
expect
(
interval
.
getCurrentInterval
()).
toBe
(
interval
.
cfg
.
startingInterval
);
done
();
},
DEFAULT_SHORT_TIMEOUT
);
});
it
(
'
should execute callback before first interval
'
,
function
()
{
const
interval
=
createDefaultSmartInterval
({
immediateExecution
:
true
});
expect
(
interval
.
cfg
.
immediateExecution
).
toBeFalsy
();
});
it
(
'
should execute callback before first interval
'
,
function
()
{
const
interval
=
createDefaultSmartInterval
({
immediateExecution
:
true
});
expect
(
interval
.
cfg
.
immediateExecution
).
toBeFalsy
();
});
});
})
(
window
.
gl
||
(
window
.
gl
=
{}))
;
});
spec/javascripts/vue_mr_widget/mr_widget_options_spec.js
View file @
f3ae99fa
...
...
@@ -121,24 +121,28 @@ describe('mrWidgetOptions', () => {
describe
(
'
initPolling
'
,
()
=>
{
it
(
'
should call SmartInterval
'
,
()
=>
{
spyOn
(
gl
,
'
SmartInterval
'
).
and
.
returnValue
({
resume
()
{},
stopTimer
()
{},
});
spyOn
(
vm
,
'
checkStatus
'
).
and
.
returnValue
(
Promise
.
resolve
());
jasmine
.
clock
().
install
();
vm
.
initPolling
();
expect
(
vm
.
checkStatus
).
not
.
toHaveBeenCalled
();
jasmine
.
clock
().
tick
(
10000
);
expect
(
vm
.
pollingInterval
).
toBeDefined
();
expect
(
gl
.
SmartInterval
).
toHaveBeenCalled
();
expect
(
vm
.
checkStatus
).
toHaveBeenCalled
();
jasmine
.
clock
().
uninstall
();
});
});
describe
(
'
initDeploymentsPolling
'
,
()
=>
{
it
(
'
should call SmartInterval
'
,
()
=>
{
spyOn
(
gl
,
'
SmartInterval
'
);
spyOn
(
vm
,
'
fetchDeployments
'
).
and
.
returnValue
(
Promise
.
resolve
()
);
vm
.
initDeploymentsPolling
();
expect
(
vm
.
deploymentsInterval
).
toBeDefined
();
expect
(
gl
.
SmartInterval
).
toHaveBeenCalled
();
expect
(
vm
.
fetchDeployments
).
toHaveBeenCalled
();
});
});
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment