BigW Consortium Gitlab
Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
G
gitlab-ce
Project
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
Forest Godfrey
gitlab-ce
Commits
061be86e
Unverified
Commit
061be86e
authored
Nov 28, 2017
by
Phil Hughes
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
added specs
parent
fd818194
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
714 additions
and
22 deletions
+714
-22
model.js
app/assets/javascripts/repo/lib/common/model.js
+1
-22
disposable_spec.js
spec/javascripts/repo/lib/common/disposable_spec.js
+44
-0
model_manager_spec.js
spec/javascripts/repo/lib/common/model_manager_spec.js
+81
-0
model_spec.js
spec/javascripts/repo/lib/common/model_spec.js
+84
-0
controller_spec.js
spec/javascripts/repo/lib/decorations/controller_spec.js
+120
-0
controller_spec.js
spec/javascripts/repo/lib/diff/controller_spec.js
+176
-0
diff_spec.js
spec/javascripts/repo/lib/diff/diff_spec.js
+80
-0
editor_spec.js
spec/javascripts/repo/lib/editor_spec.js
+128
-0
No files found.
app/assets/javascripts/repo/lib/common/model.js
View file @
061be86e
...
...
@@ -28,31 +28,10 @@ export default class Model {
return
this
.
model
.
uri
.
toString
();
}
get
originalUrl
()
{
return
this
.
originalModel
.
uri
.
toString
();
}
get
path
()
{
return
this
.
file
.
path
;
}
get
diffModel
()
{
return
Model
.
getDiffModel
(
this
.
model
);
}
get
originalDiffModel
()
{
return
Model
.
getDiffModel
(
this
.
originalModel
);
}
static
getDiffModel
(
model
)
{
return
{
url
:
model
.
uri
.
toString
(),
versionId
:
model
.
getVersionId
(),
lines
:
model
.
getLinesContent
(),
EOL
:
'
\
n'
,
};
}
getModel
()
{
return
this
.
model
;
}
...
...
@@ -63,7 +42,7 @@ export default class Model {
onChange
(
cb
)
{
this
.
events
.
set
(
this
.
file
.
path
,
this
.
path
,
this
.
disposable
.
add
(
this
.
model
.
onDidChangeContent
(
e
=>
cb
(
this
.
model
,
e
)),
),
...
...
spec/javascripts/repo/lib/common/disposable_spec.js
0 → 100644
View file @
061be86e
import
Disposable
from
'~/repo/lib/common/disposable'
;
describe
(
'Multi-file editor library disposable class'
,
()
=>
{
let
instance
;
let
disposableClass
;
beforeEach
(()
=>
{
instance
=
new
Disposable
();
disposableClass
=
{
dispose
:
jasmine
.
createSpy
(
'dispose'
),
};
});
afterEach
(()
=>
{
instance
.
dispose
();
});
describe
(
'add'
,
()
=>
{
it
(
'adds disposable classes'
,
()
=>
{
instance
.
add
(
disposableClass
);
expect
(
instance
.
disposers
.
size
).
toBe
(
1
);
});
});
describe
(
'dispose'
,
()
=>
{
beforeEach
(()
=>
{
instance
.
add
(
disposableClass
);
});
it
(
'calls dispose on all cached disposers'
,
()
=>
{
instance
.
dispose
();
expect
(
disposableClass
.
dispose
).
toHaveBeenCalled
();
});
it
(
'clears cached disposers'
,
()
=>
{
instance
.
dispose
();
expect
(
instance
.
disposers
.
size
).
toBe
(
0
);
});
});
});
spec/javascripts/repo/lib/common/model_manager_spec.js
0 → 100644
View file @
061be86e
/* global monaco */
import
monacoLoader
from
'~/repo/monaco_loader'
;
import
ModelManager
from
'~/repo/lib/common/model_manager'
;
import
{
file
}
from
'../../helpers'
;
describe
(
'Multi-file editor library model manager'
,
()
=>
{
let
instance
;
beforeEach
((
done
)
=>
{
monacoLoader
([
'vs/editor/editor.main'
],
()
=>
{
instance
=
new
ModelManager
(
monaco
);
done
();
});
});
afterEach
(()
=>
{
instance
.
dispose
();
});
describe
(
'addModel'
,
()
=>
{
it
(
'caches model'
,
()
=>
{
instance
.
addModel
(
file
());
expect
(
instance
.
models
.
size
).
toBe
(
1
);
});
it
(
'caches model by file path'
,
()
=>
{
instance
.
addModel
(
file
(
'path-name'
));
expect
(
instance
.
models
.
keys
().
next
().
value
).
toBe
(
'path-name'
);
});
it
(
'adds model into disposable'
,
()
=>
{
spyOn
(
instance
.
disposable
,
'add'
).
and
.
callThrough
();
instance
.
addModel
(
file
());
expect
(
instance
.
disposable
.
add
).
toHaveBeenCalled
();
});
it
(
'returns cached model'
,
()
=>
{
spyOn
(
instance
.
models
,
'get'
).
and
.
callThrough
();
instance
.
addModel
(
file
());
instance
.
addModel
(
file
());
expect
(
instance
.
models
.
get
).
toHaveBeenCalled
();
});
});
describe
(
'hasCachedModel'
,
()
=>
{
it
(
'returns false when no models exist'
,
()
=>
{
expect
(
instance
.
hasCachedModel
(
'path'
)).
toBeFalsy
();
});
it
(
'returns true when model exists'
,
()
=>
{
instance
.
addModel
(
file
(
'path-name'
));
expect
(
instance
.
hasCachedModel
(
'path-name'
)).
toBeTruthy
();
});
});
describe
(
'dispose'
,
()
=>
{
it
(
'clears cached models'
,
()
=>
{
instance
.
addModel
(
file
());
instance
.
dispose
();
expect
(
instance
.
models
.
size
).
toBe
(
0
);
});
it
(
'calls disposable dispose'
,
()
=>
{
spyOn
(
instance
.
disposable
,
'dispose'
).
and
.
callThrough
();
instance
.
dispose
();
expect
(
instance
.
disposable
.
dispose
).
toHaveBeenCalled
();
});
});
});
spec/javascripts/repo/lib/common/model_spec.js
0 → 100644
View file @
061be86e
/* global monaco */
import
monacoLoader
from
'~/repo/monaco_loader'
;
import
Model
from
'~/repo/lib/common/model'
;
import
{
file
}
from
'../../helpers'
;
describe
(
'Multi-file editor library model'
,
()
=>
{
let
model
;
beforeEach
((
done
)
=>
{
monacoLoader
([
'vs/editor/editor.main'
],
()
=>
{
model
=
new
Model
(
monaco
,
file
(
'path'
));
done
();
});
});
afterEach
(()
=>
{
model
.
dispose
();
});
it
(
'creates original model & new model'
,
()
=>
{
expect
(
model
.
originalModel
).
not
.
toBeNull
();
expect
(
model
.
model
).
not
.
toBeNull
();
});
describe
(
'path'
,
()
=>
{
it
(
'returns file path'
,
()
=>
{
expect
(
model
.
path
).
toBe
(
'path'
);
});
});
describe
(
'getModel'
,
()
=>
{
it
(
'returns model'
,
()
=>
{
expect
(
model
.
getModel
()).
toBe
(
model
.
model
);
});
});
describe
(
'getOriginalModel'
,
()
=>
{
it
(
'returns original model'
,
()
=>
{
expect
(
model
.
getOriginalModel
()).
toBe
(
model
.
originalModel
);
});
});
describe
(
'onChange'
,
()
=>
{
it
(
'caches event by path'
,
()
=>
{
model
.
onChange
(()
=>
{});
expect
(
model
.
events
.
size
).
toBe
(
1
);
expect
(
model
.
events
.
keys
().
next
().
value
).
toBe
(
'path'
);
});
it
(
'calls callback on change'
,
(
done
)
=>
{
const
spy
=
jasmine
.
createSpy
();
model
.
onChange
(
spy
);
model
.
getModel
().
setValue
(
'123'
);
setTimeout
(()
=>
{
expect
(
spy
).
toHaveBeenCalledWith
(
model
.
getModel
(),
jasmine
.
anything
());
done
();
});
});
});
describe
(
'dispose'
,
()
=>
{
it
(
'calls disposable dispose'
,
()
=>
{
spyOn
(
model
.
disposable
,
'dispose'
).
and
.
callThrough
();
model
.
dispose
();
expect
(
model
.
disposable
.
dispose
).
toHaveBeenCalled
();
});
it
(
'clears events'
,
()
=>
{
model
.
onChange
(()
=>
{});
expect
(
model
.
events
.
size
).
toBe
(
1
);
model
.
dispose
();
expect
(
model
.
events
.
size
).
toBe
(
0
);
});
});
});
spec/javascripts/repo/lib/decorations/controller_spec.js
0 → 100644
View file @
061be86e
/* global monaco */
import
monacoLoader
from
'~/repo/monaco_loader'
;
import
editor
from
'~/repo/lib/editor'
;
import
DecorationsController
from
'~/repo/lib/decorations/controller'
;
import
Model
from
'~/repo/lib/common/model'
;
import
{
file
}
from
'../../helpers'
;
describe
(
'Multi-file editor library decorations controller'
,
()
=>
{
let
editorInstance
;
let
controller
;
let
model
;
beforeEach
((
done
)
=>
{
monacoLoader
([
'vs/editor/editor.main'
],
()
=>
{
editorInstance
=
editor
.
create
(
monaco
);
editorInstance
.
createInstance
(
document
.
createElement
(
'div'
));
controller
=
new
DecorationsController
(
editorInstance
);
model
=
new
Model
(
monaco
,
file
(
'path'
));
done
();
});
});
afterEach
(()
=>
{
model
.
dispose
();
editorInstance
.
dispose
();
controller
.
dispose
();
});
describe
(
'getAllDecorationsForModel'
,
()
=>
{
it
(
'returns empty array when no decorations exist for model'
,
()
=>
{
const
decorations
=
controller
.
getAllDecorationsForModel
(
model
);
expect
(
decorations
).
toEqual
([]);
});
it
(
'returns decorations by model URL'
,
()
=>
{
controller
.
addDecorations
(
model
,
'key'
,
[{
decoration
:
'decorationValue'
}]);
const
decorations
=
controller
.
getAllDecorationsForModel
(
model
);
expect
(
decorations
[
0
]).
toEqual
({
decoration
:
'decorationValue'
});
});
});
describe
(
'addDecorations'
,
()
=>
{
it
(
'caches decorations in a new map'
,
()
=>
{
controller
.
addDecorations
(
model
,
'key'
,
[{
decoration
:
'decorationValue'
}]);
expect
(
controller
.
decorations
.
size
).
toBe
(
1
);
});
it
(
'does not create new cache model'
,
()
=>
{
controller
.
addDecorations
(
model
,
'key'
,
[{
decoration
:
'decorationValue'
}]);
controller
.
addDecorations
(
model
,
'key'
,
[{
decoration
:
'decorationValue2'
}]);
expect
(
controller
.
decorations
.
size
).
toBe
(
1
);
});
it
(
'caches decorations by model URL'
,
()
=>
{
controller
.
addDecorations
(
model
,
'key'
,
[{
decoration
:
'decorationValue'
}]);
expect
(
controller
.
decorations
.
size
).
toBe
(
1
);
expect
(
controller
.
decorations
.
keys
().
next
().
value
).
toBe
(
'path'
);
});
it
(
'calls decorate method'
,
()
=>
{
spyOn
(
controller
,
'decorate'
);
controller
.
addDecorations
(
model
,
'key'
,
[{
decoration
:
'decorationValue'
}]);
expect
(
controller
.
decorate
).
toHaveBeenCalled
();
});
});
describe
(
'decorate'
,
()
=>
{
it
(
'sets decorations on editor instance'
,
()
=>
{
spyOn
(
controller
.
editor
.
instance
,
'deltaDecorations'
);
controller
.
decorate
(
model
);
expect
(
controller
.
editor
.
instance
.
deltaDecorations
).
toHaveBeenCalledWith
([],
[]);
});
it
(
'caches decorations'
,
()
=>
{
spyOn
(
controller
.
editor
.
instance
,
'deltaDecorations'
).
and
.
returnValue
([]);
controller
.
decorate
(
model
);
expect
(
controller
.
editorDecorations
.
size
).
toBe
(
1
);
});
it
(
'caches decorations by model URL'
,
()
=>
{
spyOn
(
controller
.
editor
.
instance
,
'deltaDecorations'
).
and
.
returnValue
([]);
controller
.
decorate
(
model
);
expect
(
controller
.
editorDecorations
.
keys
().
next
().
value
).
toBe
(
'path'
);
});
});
describe
(
'dispose'
,
()
=>
{
it
(
'clears cached decorations'
,
()
=>
{
controller
.
addDecorations
(
model
,
'key'
,
[{
decoration
:
'decorationValue'
}]);
controller
.
dispose
();
expect
(
controller
.
decorations
.
size
).
toBe
(
0
);
});
it
(
'clears cached editorDecorations'
,
()
=>
{
controller
.
addDecorations
(
model
,
'key'
,
[{
decoration
:
'decorationValue'
}]);
controller
.
dispose
();
expect
(
controller
.
editorDecorations
.
size
).
toBe
(
0
);
});
});
});
spec/javascripts/repo/lib/diff/controller_spec.js
0 → 100644
View file @
061be86e
/* global monaco */
import
monacoLoader
from
'~/repo/monaco_loader'
;
import
editor
from
'~/repo/lib/editor'
;
import
ModelManager
from
'~/repo/lib/common/model_manager'
;
import
DecorationsController
from
'~/repo/lib/decorations/controller'
;
import
DirtyDiffController
,
{
getDiffChangeType
,
getDecorator
}
from
'~/repo/lib/diff/controller'
;
import
{
computeDiff
}
from
'~/repo/lib/diff/diff'
;
import
{
file
}
from
'../../helpers'
;
describe
(
'Multi-file editor library dirty diff controller'
,
()
=>
{
let
editorInstance
;
let
controller
;
let
modelManager
;
let
decorationsController
;
let
model
;
beforeEach
((
done
)
=>
{
monacoLoader
([
'vs/editor/editor.main'
],
()
=>
{
editorInstance
=
editor
.
create
(
monaco
);
editorInstance
.
createInstance
(
document
.
createElement
(
'div'
));
modelManager
=
new
ModelManager
(
monaco
);
decorationsController
=
new
DecorationsController
(
editorInstance
);
model
=
modelManager
.
addModel
(
file
());
controller
=
new
DirtyDiffController
(
modelManager
,
decorationsController
);
done
();
});
});
afterEach
(()
=>
{
controller
.
dispose
();
model
.
dispose
();
decorationsController
.
dispose
();
editorInstance
.
dispose
();
});
describe
(
'getDiffChangeType'
,
()
=>
{
[
'added'
,
'removed'
,
'modified'
].
forEach
((
type
)
=>
{
it
(
`returns
${
type
}
`
,
()
=>
{
const
change
=
{
[
type
]:
true
,
};
expect
(
getDiffChangeType
(
change
)).
toBe
(
type
);
});
});
});
describe
(
'getDecorator'
,
()
=>
{
[
'added'
,
'removed'
,
'modified'
].
forEach
((
type
)
=>
{
it
(
`returns with linesDecorationsClassName for
${
type
}
`
,
()
=>
{
const
change
=
{
[
type
]:
true
,
};
expect
(
getDecorator
(
change
).
options
.
linesDecorationsClassName
,
).
toBe
(
`dirty-diff dirty-diff-
${
type
}
`
);
});
it
(
'returns with line numbers'
,
()
=>
{
const
change
=
{
lineNumber
:
1
,
endLineNumber
:
2
,
[
type
]:
true
,
};
const
range
=
getDecorator
(
change
).
range
;
expect
(
range
.
startLineNumber
).
toBe
(
1
);
expect
(
range
.
endLineNumber
).
toBe
(
2
);
expect
(
range
.
startColumn
).
toBe
(
1
);
expect
(
range
.
endColumn
).
toBe
(
1
);
});
});
});
describe
(
'attachModel'
,
()
=>
{
it
(
'adds change event callback'
,
()
=>
{
spyOn
(
model
,
'onChange'
);
controller
.
attachModel
(
model
);
expect
(
model
.
onChange
).
toHaveBeenCalled
();
});
it
(
'calls throttledComputeDiff on change'
,
()
=>
{
spyOn
(
controller
,
'throttledComputeDiff'
);
controller
.
attachModel
(
model
);
model
.
getModel
().
setValue
(
'123'
);
expect
(
controller
.
throttledComputeDiff
).
toHaveBeenCalled
();
});
});
describe
(
'computeDiff'
,
()
=>
{
it
(
'posts to worker'
,
()
=>
{
spyOn
(
controller
.
dirtyDiffWorker
,
'postMessage'
);
controller
.
computeDiff
(
model
);
expect
(
controller
.
dirtyDiffWorker
.
postMessage
).
toHaveBeenCalledWith
({
path
:
model
.
path
,
originalContent
:
''
,
newContent
:
''
,
});
});
});
describe
(
'reDecorate'
,
()
=>
{
it
(
'calls decorations controller decorate'
,
()
=>
{
spyOn
(
controller
.
decorationsController
,
'decorate'
);
controller
.
reDecorate
(
model
);
expect
(
controller
.
decorationsController
.
decorate
).
toHaveBeenCalledWith
(
model
);
});
});
describe
(
'decorate'
,
()
=>
{
it
(
'adds decorations into decorations controller'
,
()
=>
{
spyOn
(
controller
.
decorationsController
,
'addDecorations'
);
controller
.
decorate
({
data
:
{
changes
:
[],
path
:
'path'
}
});
expect
(
controller
.
decorationsController
.
addDecorations
).
toHaveBeenCalledWith
(
'path'
,
'dirtyDiff'
,
jasmine
.
anything
());
});
it
(
'adds decorations into editor'
,
()
=>
{
const
spy
=
spyOn
(
controller
.
decorationsController
.
editor
.
instance
,
'deltaDecorations'
);
controller
.
decorate
({
data
:
{
changes
:
computeDiff
(
'123'
,
'1234'
),
path
:
'path'
}
});
expect
(
spy
).
toHaveBeenCalledWith
([],
[{
range
:
new
monaco
.
Range
(
1
,
1
,
1
,
1
,
),
options
:
{
isWholeLine
:
true
,
linesDecorationsClassName
:
'dirty-diff dirty-diff-modified'
,
},
}]);
});
});
describe
(
'dispose'
,
()
=>
{
it
(
'calls disposable dispose'
,
()
=>
{
spyOn
(
controller
.
disposable
,
'dispose'
).
and
.
callThrough
();
controller
.
dispose
();
expect
(
controller
.
disposable
.
dispose
).
toHaveBeenCalled
();
});
it
(
'terminates worker'
,
()
=>
{
spyOn
(
controller
.
dirtyDiffWorker
,
'terminate'
).
and
.
callThrough
();
controller
.
dispose
();
expect
(
controller
.
dirtyDiffWorker
.
terminate
).
toHaveBeenCalled
();
});
it
(
'removes worker event listener'
,
()
=>
{
spyOn
(
controller
.
dirtyDiffWorker
,
'removeEventListener'
).
and
.
callThrough
();
controller
.
dispose
();
expect
(
controller
.
dirtyDiffWorker
.
removeEventListener
).
toHaveBeenCalledWith
(
'message'
,
jasmine
.
anything
());
});
});
});
spec/javascripts/repo/lib/diff/diff_spec.js
0 → 100644
View file @
061be86e
import
{
computeDiff
}
from
'~/repo/lib/diff/diff'
;
describe
(
'Multi-file editor library diff calculator'
,
()
=>
{
describe
(
'computeDiff'
,
()
=>
{
it
(
'returns empty array if no changes'
,
()
=>
{
const
diff
=
computeDiff
(
'123'
,
'123'
);
expect
(
diff
).
toEqual
([]);
});
describe
(
'modified'
,
()
=>
{
it
(
''
,
()
=>
{
const
diff
=
computeDiff
(
'123'
,
'1234'
);
expect
(
diff
[
0
].
added
).
toBeTruthy
();
expect
(
diff
[
0
].
modified
).
toBeTruthy
();
expect
(
diff
[
0
].
removed
).
toBeUndefined
();
});
it
(
''
,
()
=>
{
const
diff
=
computeDiff
(
'123
\
n123
\
n123'
,
'123
\
n1234
\
n123'
);
expect
(
diff
[
0
].
added
).
toBeTruthy
();
expect
(
diff
[
0
].
modified
).
toBeTruthy
();
expect
(
diff
[
0
].
removed
).
toBeUndefined
();
expect
(
diff
[
0
].
lineNumber
).
toBe
(
2
);
});
});
describe
(
'added'
,
()
=>
{
it
(
''
,
()
=>
{
const
diff
=
computeDiff
(
'123'
,
'123
\
n123'
);
expect
(
diff
[
0
].
added
).
toBeTruthy
();
expect
(
diff
[
0
].
modified
).
toBeUndefined
();
expect
(
diff
[
0
].
removed
).
toBeUndefined
();
});
it
(
''
,
()
=>
{
const
diff
=
computeDiff
(
'123
\
n123
\
n123'
,
'123
\
n123
\
n1234
\
n123'
);
expect
(
diff
[
0
].
added
).
toBeTruthy
();
expect
(
diff
[
0
].
modified
).
toBeUndefined
();
expect
(
diff
[
0
].
removed
).
toBeUndefined
();
expect
(
diff
[
0
].
lineNumber
).
toBe
(
3
);
});
});
describe
(
'removed'
,
()
=>
{
it
(
''
,
()
=>
{
const
diff
=
computeDiff
(
'123'
,
''
);
expect
(
diff
[
0
].
added
).
toBeUndefined
();
expect
(
diff
[
0
].
modified
).
toBeUndefined
();
expect
(
diff
[
0
].
removed
).
toBeTruthy
();
});
it
(
''
,
()
=>
{
const
diff
=
computeDiff
(
'123
\
n123
\
n123'
,
'123
\
n123'
);
expect
(
diff
[
0
].
added
).
toBeUndefined
();
expect
(
diff
[
0
].
modified
).
toBeTruthy
();
expect
(
diff
[
0
].
removed
).
toBeTruthy
();
expect
(
diff
[
0
].
lineNumber
).
toBe
(
2
);
});
});
it
(
'includes line number of change'
,
()
=>
{
const
diff
=
computeDiff
(
'123'
,
''
);
expect
(
diff
[
0
].
lineNumber
).
toBe
(
1
);
});
it
(
'includes end line number of change'
,
()
=>
{
const
diff
=
computeDiff
(
'123'
,
''
);
expect
(
diff
[
0
].
endLineNumber
).
toBe
(
1
);
});
});
});
spec/javascripts/repo/lib/editor_spec.js
0 → 100644
View file @
061be86e
/* global monaco */
import
monacoLoader
from
'~/repo/monaco_loader'
;
import
editor
from
'~/repo/lib/editor'
;
import
{
file
}
from
'../helpers'
;
describe
(
'Multi-file editor library'
,
()
=>
{
let
instance
;
beforeEach
((
done
)
=>
{
monacoLoader
([
'vs/editor/editor.main'
],
()
=>
{
instance
=
editor
.
create
(
monaco
);
done
();
});
});
afterEach
(()
=>
{
instance
.
dispose
();
});
it
(
'creates instance of editor'
,
()
=>
{
expect
(
editor
.
editorInstance
).
not
.
toBeNull
();
});
describe
(
'createInstance'
,
()
=>
{
let
el
;
beforeEach
(()
=>
{
el
=
document
.
createElement
(
'div'
);
});
it
(
'creates editor instance'
,
()
=>
{
spyOn
(
instance
.
monaco
.
editor
,
'create'
).
and
.
callThrough
();
instance
.
createInstance
(
el
);
expect
(
instance
.
monaco
.
editor
.
create
).
toHaveBeenCalled
();
});
it
(
'creates dirty diff controller'
,
()
=>
{
instance
.
createInstance
(
el
);
expect
(
instance
.
dirtyDiffController
).
not
.
toBeNull
();
});
});
describe
(
'createModel'
,
()
=>
{
it
(
'calls model manager addModel'
,
()
=>
{
spyOn
(
instance
.
modelManager
,
'addModel'
);
instance
.
createModel
(
'FILE'
);
expect
(
instance
.
modelManager
.
addModel
).
toHaveBeenCalledWith
(
'FILE'
);
});
});
describe
(
'attachModel'
,
()
=>
{
let
model
;
beforeEach
(()
=>
{
instance
.
createInstance
(
document
.
createElement
(
'div'
));
model
=
instance
.
createModel
(
file
());
});
it
(
'sets the current model on the instance'
,
()
=>
{
instance
.
attachModel
(
model
);
expect
(
instance
.
currentModel
).
toBe
(
model
);
});
it
(
'attaches the model to the current instance'
,
()
=>
{
spyOn
(
instance
.
instance
,
'setModel'
);
instance
.
attachModel
(
model
);
expect
(
instance
.
instance
.
setModel
).
toHaveBeenCalledWith
(
model
.
getModel
());
});
it
(
'attaches the model to the dirty diff controller'
,
()
=>
{
spyOn
(
instance
.
dirtyDiffController
,
'attachModel'
);
instance
.
attachModel
(
model
);
expect
(
instance
.
dirtyDiffController
.
attachModel
).
toHaveBeenCalledWith
(
model
);
});
it
(
're-decorates with the dirty diff controller'
,
()
=>
{
spyOn
(
instance
.
dirtyDiffController
,
'reDecorate'
);
instance
.
attachModel
(
model
);
expect
(
instance
.
dirtyDiffController
.
reDecorate
).
toHaveBeenCalledWith
(
model
);
});
});
describe
(
'clearEditor'
,
()
=>
{
it
(
'resets the editor model'
,
()
=>
{
instance
.
createInstance
(
document
.
createElement
(
'div'
));
spyOn
(
instance
.
instance
,
'setModel'
);
instance
.
clearEditor
();
expect
(
instance
.
instance
.
setModel
).
toHaveBeenCalledWith
(
null
);
});
});
describe
(
'dispose'
,
()
=>
{
it
(
'calls disposble dispose method'
,
()
=>
{
spyOn
(
instance
.
disposable
,
'dispose'
).
and
.
callThrough
();
instance
.
dispose
();
expect
(
instance
.
disposable
.
dispose
).
toHaveBeenCalled
();
});
it
(
'resets instance'
,
()
=>
{
instance
.
createInstance
(
document
.
createElement
(
'div'
));
expect
(
instance
.
instance
).
not
.
toBeNull
();
instance
.
dispose
();
expect
(
instance
.
instance
).
toBeNull
();
});
});
});
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