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
1
Merge Requests
1
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
nexedi
gitlab-ce
Commits
061be86e
Commit
061be86e
authored
Nov 28, 2017
by
Phil Hughes
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
added specs
parent
fd818194
Changes
8
Show whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
714 additions
and
22 deletions
+714
-22
app/assets/javascripts/repo/lib/common/model.js
app/assets/javascripts/repo/lib/common/model.js
+1
-22
spec/javascripts/repo/lib/common/disposable_spec.js
spec/javascripts/repo/lib/common/disposable_spec.js
+44
-0
spec/javascripts/repo/lib/common/model_manager_spec.js
spec/javascripts/repo/lib/common/model_manager_spec.js
+81
-0
spec/javascripts/repo/lib/common/model_spec.js
spec/javascripts/repo/lib/common/model_spec.js
+84
-0
spec/javascripts/repo/lib/decorations/controller_spec.js
spec/javascripts/repo/lib/decorations/controller_spec.js
+120
-0
spec/javascripts/repo/lib/diff/controller_spec.js
spec/javascripts/repo/lib/diff/controller_spec.js
+176
-0
spec/javascripts/repo/lib/diff/diff_spec.js
spec/javascripts/repo/lib/diff/diff_spec.js
+80
-0
spec/javascripts/repo/lib/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 {
...
@@ -28,31 +28,10 @@ export default class Model {
return
this
.
model
.
uri
.
toString
();
return
this
.
model
.
uri
.
toString
();
}
}
get
originalUrl
()
{
return
this
.
originalModel
.
uri
.
toString
();
}
get
path
()
{
get
path
()
{
return
this
.
file
.
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
()
{
getModel
()
{
return
this
.
model
;
return
this
.
model
;
}
}
...
@@ -63,7 +42,7 @@ export default class Model {
...
@@ -63,7 +42,7 @@ export default class Model {
onChange
(
cb
)
{
onChange
(
cb
)
{
this
.
events
.
set
(
this
.
events
.
set
(
this
.
file
.
path
,
this
.
path
,
this
.
disposable
.
add
(
this
.
disposable
.
add
(
this
.
model
.
onDidChangeContent
(
e
=>
cb
(
this
.
model
,
e
)),
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
\n
123
\n
123
'
,
'
123
\n
1234
\n
123
'
);
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
\n
123
'
);
expect
(
diff
[
0
].
added
).
toBeTruthy
();
expect
(
diff
[
0
].
modified
).
toBeUndefined
();
expect
(
diff
[
0
].
removed
).
toBeUndefined
();
});
it
(
''
,
()
=>
{
const
diff
=
computeDiff
(
'
123
\n
123
\n
123
'
,
'
123
\n
123
\n
1234
\n
123
'
);
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
\n
123
\n
123
'
,
'
123
\n
123
'
);
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