Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xxadev
vscode
提交
d7ce91be
V
vscode
项目概览
xxadev
/
vscode
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
V
vscode
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
d7ce91be
编写于
12月 09, 2019
作者:
S
Sandeep Somavarapu
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
#86401 add merge tests
上级
731e2b95
变更
2
显示空白变更内容
内联
并排
Showing
2 changed file
with
416 addition
and
6 deletion
+416
-6
src/vs/platform/userDataSync/common/extensionsMerge.ts
src/vs/platform/userDataSync/common/extensionsMerge.ts
+5
-5
src/vs/platform/userDataSync/test/common/extensionsMerge.test.ts
...platform/userDataSync/test/common/extensionsMerge.test.ts
+411
-1
未找到文件。
src/vs/platform/userDataSync/common/extensionsMerge.ts
浏览文件 @
d7ce91be
...
@@ -59,8 +59,8 @@ export function merge(localExtensions: ISyncExtension[], remoteExtensions: ISync
...
@@ -59,8 +59,8 @@ export function merge(localExtensions: ISyncExtension[], remoteExtensions: ISync
return
{
added
:
[],
removed
:
[],
updated
:
[],
remote
:
null
};
return
{
added
:
[],
removed
:
[],
updated
:
[],
remote
:
null
};
}
}
const
baseToLocal
=
lastSyncExtensionsMap
?
compare
(
lastSyncExtensionsMap
,
localExtensionsMap
,
ignoredExtensionsSet
)
:
{
added
:
keys
(
localExtensionsMap
).
reduce
((
r
,
k
)
=>
{
r
.
add
(
k
);
return
r
;
},
new
Set
<
string
>
()),
removed
:
new
Set
<
string
>
(),
updated
:
new
Set
<
string
>
()
}
;
const
baseToLocal
=
compare
(
lastSyncExtensionsMap
,
localExtensionsMap
,
ignoredExtensionsSet
)
;
const
baseToRemote
=
lastSyncExtensionsMap
?
compare
(
lastSyncExtensionsMap
,
remoteExtensionsMap
,
ignoredExtensionsSet
)
:
{
added
:
keys
(
remoteExtensionsMap
).
reduce
((
r
,
k
)
=>
{
r
.
add
(
k
);
return
r
;
},
new
Set
<
string
>
()),
removed
:
new
Set
<
string
>
(),
updated
:
new
Set
<
string
>
()
}
;
const
baseToRemote
=
compare
(
lastSyncExtensionsMap
,
remoteExtensionsMap
,
ignoredExtensionsSet
)
;
const
massageSyncExtension
=
(
extension
:
ISyncExtension
,
key
:
string
):
ISyncExtension
=>
{
const
massageSyncExtension
=
(
extension
:
ISyncExtension
,
key
:
string
):
ISyncExtension
=>
{
const
massagedExtension
:
ISyncExtension
=
{
const
massagedExtension
:
ISyncExtension
=
{
...
@@ -144,8 +144,8 @@ export function merge(localExtensions: ISyncExtension[], remoteExtensions: ISync
...
@@ -144,8 +144,8 @@ export function merge(localExtensions: ISyncExtension[], remoteExtensions: ISync
return
{
added
,
removed
,
updated
,
remote
};
return
{
added
,
removed
,
updated
,
remote
};
}
}
function
compare
(
from
:
Map
<
string
,
ISyncExtension
>
,
to
:
Map
<
string
,
ISyncExtension
>
,
ignoredExtensions
:
Set
<
string
>
):
{
added
:
Set
<
string
>
,
removed
:
Set
<
string
>
,
updated
:
Set
<
string
>
}
{
function
compare
(
from
:
Map
<
string
,
ISyncExtension
>
|
null
,
to
:
Map
<
string
,
ISyncExtension
>
,
ignoredExtensions
:
Set
<
string
>
):
{
added
:
Set
<
string
>
,
removed
:
Set
<
string
>
,
updated
:
Set
<
string
>
}
{
const
fromKeys
=
keys
(
from
).
filter
(
key
=>
!
ignoredExtensions
.
has
(
key
))
;
const
fromKeys
=
from
?
keys
(
from
).
filter
(
key
=>
!
ignoredExtensions
.
has
(
key
))
:
[]
;
const
toKeys
=
keys
(
to
).
filter
(
key
=>
!
ignoredExtensions
.
has
(
key
));
const
toKeys
=
keys
(
to
).
filter
(
key
=>
!
ignoredExtensions
.
has
(
key
));
const
added
=
toKeys
.
filter
(
key
=>
fromKeys
.
indexOf
(
key
)
===
-
1
).
reduce
((
r
,
key
)
=>
{
r
.
add
(
key
);
return
r
;
},
new
Set
<
string
>
());
const
added
=
toKeys
.
filter
(
key
=>
fromKeys
.
indexOf
(
key
)
===
-
1
).
reduce
((
r
,
key
)
=>
{
r
.
add
(
key
);
return
r
;
},
new
Set
<
string
>
());
const
removed
=
fromKeys
.
filter
(
key
=>
toKeys
.
indexOf
(
key
)
===
-
1
).
reduce
((
r
,
key
)
=>
{
r
.
add
(
key
);
return
r
;
},
new
Set
<
string
>
());
const
removed
=
fromKeys
.
filter
(
key
=>
toKeys
.
indexOf
(
key
)
===
-
1
).
reduce
((
r
,
key
)
=>
{
r
.
add
(
key
);
return
r
;
},
new
Set
<
string
>
());
...
@@ -155,7 +155,7 @@ function compare(from: Map<string, ISyncExtension>, to: Map<string, ISyncExtensi
...
@@ -155,7 +155,7 @@ function compare(from: Map<string, ISyncExtension>, to: Map<string, ISyncExtensi
if
(
removed
.
has
(
key
))
{
if
(
removed
.
has
(
key
))
{
continue
;
continue
;
}
}
const
fromExtension
=
from
.
get
(
key
)
!
;
const
fromExtension
=
from
!
.
get
(
key
)
!
;
const
toExtension
=
to
.
get
(
key
);
const
toExtension
=
to
.
get
(
key
);
if
(
!
toExtension
if
(
!
toExtension
||
fromExtension
.
enabled
!==
toExtension
.
enabled
||
fromExtension
.
enabled
!==
toExtension
.
enabled
...
...
src/vs/platform/userDataSync/test/common/extensionsMerge.test.ts
浏览文件 @
d7ce91be
...
@@ -62,6 +62,51 @@ suite('ExtensionsMerge - No Conflicts', () => {
...
@@ -62,6 +62,51 @@ suite('ExtensionsMerge - No Conflicts', () => {
assert
.
deepEqual
(
actual
.
remote
,
expected
);
assert
.
deepEqual
(
actual
.
remote
,
expected
);
});
});
test
(
'
merge returns local extension if remote does not exist with skipped extensions
'
,
async
()
=>
{
const
localExtensions
:
ISyncExtension
[]
=
[
{
identifier
:
{
id
:
'
a
'
,
uuid
:
'
a
'
},
enabled
:
true
},
{
identifier
:
{
id
:
'
b
'
,
uuid
:
'
b
'
},
enabled
:
true
},
{
identifier
:
{
id
:
'
c
'
,
uuid
:
'
c
'
},
enabled
:
true
},
];
const
skippedExtension
:
ISyncExtension
[]
=
[
{
identifier
:
{
id
:
'
b
'
,
uuid
:
'
b
'
},
enabled
:
true
},
];
const
expected
:
ISyncExtension
[]
=
[
{
identifier
:
{
id
:
'
a
'
,
uuid
:
'
a
'
},
enabled
:
true
},
{
identifier
:
{
id
:
'
b
'
,
uuid
:
'
b
'
},
enabled
:
true
},
{
identifier
:
{
id
:
'
c
'
,
uuid
:
'
c
'
},
enabled
:
true
},
];
const
actual
=
merge
(
localExtensions
,
null
,
null
,
skippedExtension
,
[]);
assert
.
deepEqual
(
actual
.
added
,
[]);
assert
.
deepEqual
(
actual
.
removed
,
[]);
assert
.
deepEqual
(
actual
.
updated
,
[]);
assert
.
deepEqual
(
actual
.
remote
,
expected
);
});
test
(
'
merge returns local extension if remote does not exist with skipped and ignored extensions
'
,
async
()
=>
{
const
localExtensions
:
ISyncExtension
[]
=
[
{
identifier
:
{
id
:
'
a
'
,
uuid
:
'
a
'
},
enabled
:
true
},
{
identifier
:
{
id
:
'
b
'
,
uuid
:
'
b
'
},
enabled
:
true
},
{
identifier
:
{
id
:
'
c
'
,
uuid
:
'
c
'
},
enabled
:
true
},
];
const
skippedExtension
:
ISyncExtension
[]
=
[
{
identifier
:
{
id
:
'
b
'
,
uuid
:
'
b
'
},
enabled
:
true
},
];
const
expected
:
ISyncExtension
[]
=
[
{
identifier
:
{
id
:
'
b
'
,
uuid
:
'
b
'
},
enabled
:
true
},
{
identifier
:
{
id
:
'
c
'
,
uuid
:
'
c
'
},
enabled
:
true
},
];
const
actual
=
merge
(
localExtensions
,
null
,
null
,
skippedExtension
,
[
'
a
'
]);
assert
.
deepEqual
(
actual
.
added
,
[]);
assert
.
deepEqual
(
actual
.
removed
,
[]);
assert
.
deepEqual
(
actual
.
updated
,
[]);
assert
.
deepEqual
(
actual
.
remote
,
expected
);
});
test
(
'
merge local and remote extensions when there is no base
'
,
async
()
=>
{
test
(
'
merge local and remote extensions when there is no base
'
,
async
()
=>
{
const
localExtensions
:
ISyncExtension
[]
=
[
const
localExtensions
:
ISyncExtension
[]
=
[
{
identifier
:
{
id
:
'
a
'
,
uuid
:
'
a
'
},
enabled
:
true
},
{
identifier
:
{
id
:
'
a
'
,
uuid
:
'
a
'
},
enabled
:
true
},
...
@@ -78,9 +123,374 @@ suite('ExtensionsMerge - No Conflicts', () => {
...
@@ -78,9 +123,374 @@ suite('ExtensionsMerge - No Conflicts', () => {
{
identifier
:
{
id
:
'
d
'
,
uuid
:
'
d
'
},
enabled
:
true
},
{
identifier
:
{
id
:
'
d
'
,
uuid
:
'
d
'
},
enabled
:
true
},
];
];
const
actual
=
merge
(
localExtensions
,
remoteExtensions
,
null
,
[],
[
'
A
'
]);
const
actual
=
merge
(
localExtensions
,
remoteExtensions
,
null
,
[],
[]);
assert
.
deepEqual
(
actual
.
added
,
[{
identifier
:
{
id
:
'
b
'
,
uuid
:
'
b
'
},
enabled
:
true
},
{
identifier
:
{
id
:
'
c
'
,
uuid
:
'
c
'
},
enabled
:
true
}]);
assert
.
deepEqual
(
actual
.
removed
,
[]);
assert
.
deepEqual
(
actual
.
updated
,
[]);
assert
.
deepEqual
(
actual
.
remote
,
expected
);
});
test
(
'
merge local and remote extensions when there is no base and with ignored extensions
'
,
async
()
=>
{
const
localExtensions
:
ISyncExtension
[]
=
[
{
identifier
:
{
id
:
'
a
'
,
uuid
:
'
a
'
},
enabled
:
true
},
{
identifier
:
{
id
:
'
d
'
,
uuid
:
'
d
'
},
enabled
:
true
},
];
const
remoteExtensions
:
ISyncExtension
[]
=
[
{
identifier
:
{
id
:
'
b
'
,
uuid
:
'
b
'
},
enabled
:
true
},
{
identifier
:
{
id
:
'
c
'
,
uuid
:
'
c
'
},
enabled
:
true
},
];
const
expected
:
ISyncExtension
[]
=
[
{
identifier
:
{
id
:
'
b
'
,
uuid
:
'
b
'
},
enabled
:
true
},
{
identifier
:
{
id
:
'
c
'
,
uuid
:
'
c
'
},
enabled
:
true
},
{
identifier
:
{
id
:
'
d
'
,
uuid
:
'
d
'
},
enabled
:
true
},
];
const
actual
=
merge
(
localExtensions
,
remoteExtensions
,
null
,
[],
[
'
a
'
]);
assert
.
deepEqual
(
actual
.
added
,
[{
identifier
:
{
id
:
'
b
'
,
uuid
:
'
b
'
},
enabled
:
true
},
{
identifier
:
{
id
:
'
c
'
,
uuid
:
'
c
'
},
enabled
:
true
}]);
assert
.
deepEqual
(
actual
.
removed
,
[]);
assert
.
deepEqual
(
actual
.
updated
,
[]);
assert
.
deepEqual
(
actual
.
remote
,
expected
);
});
test
(
'
merge local and remote extensions when remote is moved forwarded
'
,
async
()
=>
{
const
baseExtensions
:
ISyncExtension
[]
=
[
{
identifier
:
{
id
:
'
a
'
,
uuid
:
'
a
'
},
enabled
:
true
},
{
identifier
:
{
id
:
'
d
'
,
uuid
:
'
d
'
},
enabled
:
true
},
];
const
localExtensions
:
ISyncExtension
[]
=
[
{
identifier
:
{
id
:
'
a
'
,
uuid
:
'
a
'
},
enabled
:
true
},
{
identifier
:
{
id
:
'
d
'
,
uuid
:
'
d
'
},
enabled
:
true
},
];
const
remoteExtensions
:
ISyncExtension
[]
=
[
{
identifier
:
{
id
:
'
b
'
,
uuid
:
'
b
'
},
enabled
:
true
},
{
identifier
:
{
id
:
'
c
'
,
uuid
:
'
c
'
},
enabled
:
true
},
];
const
actual
=
merge
(
localExtensions
,
remoteExtensions
,
baseExtensions
,
[],
[]);
assert
.
deepEqual
(
actual
.
added
,
[{
identifier
:
{
id
:
'
b
'
,
uuid
:
'
b
'
},
enabled
:
true
},
{
identifier
:
{
id
:
'
c
'
,
uuid
:
'
c
'
},
enabled
:
true
}]);
assert
.
deepEqual
(
actual
.
added
,
[{
identifier
:
{
id
:
'
b
'
,
uuid
:
'
b
'
},
enabled
:
true
},
{
identifier
:
{
id
:
'
c
'
,
uuid
:
'
c
'
},
enabled
:
true
}]);
assert
.
deepEqual
(
actual
.
removed
,
[{
id
:
'
a
'
,
uuid
:
'
a
'
},
{
id
:
'
d
'
,
uuid
:
'
d
'
}]);
assert
.
deepEqual
(
actual
.
updated
,
[]);
assert
.
equal
(
actual
.
remote
,
null
);
});
test
(
'
merge local and remote extensions when remote moved forwarded with ignored extensions
'
,
async
()
=>
{
const
baseExtensions
:
ISyncExtension
[]
=
[
{
identifier
:
{
id
:
'
a
'
,
uuid
:
'
a
'
},
enabled
:
true
},
{
identifier
:
{
id
:
'
d
'
,
uuid
:
'
d
'
},
enabled
:
true
},
];
const
localExtensions
:
ISyncExtension
[]
=
[
{
identifier
:
{
id
:
'
a
'
,
uuid
:
'
a
'
},
enabled
:
true
},
{
identifier
:
{
id
:
'
d
'
,
uuid
:
'
d
'
},
enabled
:
true
},
];
const
remoteExtensions
:
ISyncExtension
[]
=
[
{
identifier
:
{
id
:
'
b
'
,
uuid
:
'
b
'
},
enabled
:
true
},
{
identifier
:
{
id
:
'
c
'
,
uuid
:
'
c
'
},
enabled
:
true
},
];
const
actual
=
merge
(
localExtensions
,
remoteExtensions
,
baseExtensions
,
[],
[
'
a
'
]);
assert
.
deepEqual
(
actual
.
added
,
[{
identifier
:
{
id
:
'
b
'
,
uuid
:
'
b
'
},
enabled
:
true
},
{
identifier
:
{
id
:
'
c
'
,
uuid
:
'
c
'
},
enabled
:
true
}]);
assert
.
deepEqual
(
actual
.
removed
,
[{
id
:
'
d
'
,
uuid
:
'
d
'
}]);
assert
.
deepEqual
(
actual
.
updated
,
[]);
assert
.
equal
(
actual
.
remote
,
null
);
});
test
(
'
merge local and remote extensions when remote is moved forwarded with skipped extensions
'
,
async
()
=>
{
const
baseExtensions
:
ISyncExtension
[]
=
[
{
identifier
:
{
id
:
'
a
'
,
uuid
:
'
a
'
},
enabled
:
true
},
{
identifier
:
{
id
:
'
d
'
,
uuid
:
'
d
'
},
enabled
:
true
},
];
const
localExtensions
:
ISyncExtension
[]
=
[
{
identifier
:
{
id
:
'
d
'
,
uuid
:
'
d
'
},
enabled
:
true
},
];
const
skippedExtensions
:
ISyncExtension
[]
=
[
{
identifier
:
{
id
:
'
a
'
,
uuid
:
'
a
'
},
enabled
:
true
},
];
const
remoteExtensions
:
ISyncExtension
[]
=
[
{
identifier
:
{
id
:
'
b
'
,
uuid
:
'
b
'
},
enabled
:
true
},
{
identifier
:
{
id
:
'
c
'
,
uuid
:
'
c
'
},
enabled
:
true
},
];
const
actual
=
merge
(
localExtensions
,
remoteExtensions
,
baseExtensions
,
skippedExtensions
,
[]);
assert
.
deepEqual
(
actual
.
added
,
[{
identifier
:
{
id
:
'
b
'
,
uuid
:
'
b
'
},
enabled
:
true
},
{
identifier
:
{
id
:
'
c
'
,
uuid
:
'
c
'
},
enabled
:
true
}]);
assert
.
deepEqual
(
actual
.
removed
,
[{
id
:
'
d
'
,
uuid
:
'
d
'
}]);
assert
.
deepEqual
(
actual
.
updated
,
[]);
assert
.
equal
(
actual
.
remote
,
null
);
});
test
(
'
merge local and remote extensions when remote is moved forwarded with skipped and ignored extensions
'
,
async
()
=>
{
const
baseExtensions
:
ISyncExtension
[]
=
[
{
identifier
:
{
id
:
'
a
'
,
uuid
:
'
a
'
},
enabled
:
true
},
{
identifier
:
{
id
:
'
d
'
,
uuid
:
'
d
'
},
enabled
:
true
},
];
const
localExtensions
:
ISyncExtension
[]
=
[
{
identifier
:
{
id
:
'
d
'
,
uuid
:
'
d
'
},
enabled
:
true
},
];
const
skippedExtensions
:
ISyncExtension
[]
=
[
{
identifier
:
{
id
:
'
a
'
,
uuid
:
'
a
'
},
enabled
:
true
},
];
const
remoteExtensions
:
ISyncExtension
[]
=
[
{
identifier
:
{
id
:
'
b
'
,
uuid
:
'
b
'
},
enabled
:
true
},
{
identifier
:
{
id
:
'
c
'
,
uuid
:
'
c
'
},
enabled
:
true
},
];
const
actual
=
merge
(
localExtensions
,
remoteExtensions
,
baseExtensions
,
skippedExtensions
,
[
'
b
'
]);
assert
.
deepEqual
(
actual
.
added
,
[{
identifier
:
{
id
:
'
c
'
,
uuid
:
'
c
'
},
enabled
:
true
}]);
assert
.
deepEqual
(
actual
.
removed
,
[{
id
:
'
d
'
,
uuid
:
'
d
'
}]);
assert
.
deepEqual
(
actual
.
updated
,
[]);
assert
.
equal
(
actual
.
remote
,
null
);
});
test
(
'
merge local and remote extensions when local is moved forwarded
'
,
async
()
=>
{
const
baseExtensions
:
ISyncExtension
[]
=
[
{
identifier
:
{
id
:
'
a
'
,
uuid
:
'
a
'
},
enabled
:
true
},
{
identifier
:
{
id
:
'
d
'
,
uuid
:
'
d
'
},
enabled
:
true
},
];
const
localExtensions
:
ISyncExtension
[]
=
[
{
identifier
:
{
id
:
'
b
'
,
uuid
:
'
b
'
},
enabled
:
true
},
{
identifier
:
{
id
:
'
c
'
,
uuid
:
'
c
'
},
enabled
:
true
},
];
const
remoteExtensions
:
ISyncExtension
[]
=
[
{
identifier
:
{
id
:
'
a
'
,
uuid
:
'
a
'
},
enabled
:
true
},
{
identifier
:
{
id
:
'
d
'
,
uuid
:
'
d
'
},
enabled
:
true
},
];
const
actual
=
merge
(
localExtensions
,
remoteExtensions
,
baseExtensions
,
[],
[]);
assert
.
deepEqual
(
actual
.
added
,
[]);
assert
.
deepEqual
(
actual
.
removed
,
[]);
assert
.
deepEqual
(
actual
.
updated
,
[]);
assert
.
deepEqual
(
actual
.
remote
,
localExtensions
);
});
test
(
'
merge local and remote extensions when local is moved forwarded with ignored settings
'
,
async
()
=>
{
const
baseExtensions
:
ISyncExtension
[]
=
[
{
identifier
:
{
id
:
'
a
'
,
uuid
:
'
a
'
},
enabled
:
true
},
{
identifier
:
{
id
:
'
d
'
,
uuid
:
'
d
'
},
enabled
:
true
},
];
const
localExtensions
:
ISyncExtension
[]
=
[
{
identifier
:
{
id
:
'
b
'
,
uuid
:
'
b
'
},
enabled
:
true
},
{
identifier
:
{
id
:
'
c
'
,
uuid
:
'
c
'
},
enabled
:
true
},
];
const
remoteExtensions
:
ISyncExtension
[]
=
[
{
identifier
:
{
id
:
'
a
'
,
uuid
:
'
a
'
},
enabled
:
true
},
{
identifier
:
{
id
:
'
d
'
,
uuid
:
'
d
'
},
enabled
:
true
},
];
const
actual
=
merge
(
localExtensions
,
remoteExtensions
,
baseExtensions
,
[],
[
'
b
'
]);
assert
.
deepEqual
(
actual
.
added
,
[]);
assert
.
deepEqual
(
actual
.
removed
,
[]);
assert
.
deepEqual
(
actual
.
updated
,
[]);
assert
.
deepEqual
(
actual
.
remote
,
[
{
identifier
:
{
id
:
'
c
'
,
uuid
:
'
c
'
},
enabled
:
true
},
]);
});
test
(
'
merge local and remote extensions when local is moved forwarded with skipped extensions
'
,
async
()
=>
{
const
baseExtensions
:
ISyncExtension
[]
=
[
{
identifier
:
{
id
:
'
a
'
,
uuid
:
'
a
'
},
enabled
:
true
},
{
identifier
:
{
id
:
'
d
'
,
uuid
:
'
d
'
},
enabled
:
true
},
];
const
skippedExtensions
:
ISyncExtension
[]
=
[
{
identifier
:
{
id
:
'
d
'
,
uuid
:
'
d
'
},
enabled
:
true
},
];
const
localExtensions
:
ISyncExtension
[]
=
[
{
identifier
:
{
id
:
'
b
'
,
uuid
:
'
b
'
},
enabled
:
true
},
{
identifier
:
{
id
:
'
c
'
,
uuid
:
'
c
'
},
enabled
:
true
},
];
const
remoteExtensions
:
ISyncExtension
[]
=
[
{
identifier
:
{
id
:
'
a
'
,
uuid
:
'
a
'
},
enabled
:
true
},
{
identifier
:
{
id
:
'
d
'
,
uuid
:
'
d
'
},
enabled
:
true
},
];
const
expected
:
ISyncExtension
[]
=
[
{
identifier
:
{
id
:
'
d
'
,
uuid
:
'
d
'
},
enabled
:
true
},
{
identifier
:
{
id
:
'
b
'
,
uuid
:
'
b
'
},
enabled
:
true
},
{
identifier
:
{
id
:
'
c
'
,
uuid
:
'
c
'
},
enabled
:
true
},
];
const
actual
=
merge
(
localExtensions
,
remoteExtensions
,
baseExtensions
,
skippedExtensions
,
[]);
assert
.
deepEqual
(
actual
.
added
,
[]);
assert
.
deepEqual
(
actual
.
removed
,
[]);
assert
.
deepEqual
(
actual
.
updated
,
[]);
assert
.
deepEqual
(
actual
.
remote
,
expected
);
});
test
(
'
merge local and remote extensions when local is moved forwarded with skipped and ignored extensions
'
,
async
()
=>
{
const
baseExtensions
:
ISyncExtension
[]
=
[
{
identifier
:
{
id
:
'
a
'
,
uuid
:
'
a
'
},
enabled
:
true
},
{
identifier
:
{
id
:
'
d
'
,
uuid
:
'
d
'
},
enabled
:
true
},
];
const
skippedExtensions
:
ISyncExtension
[]
=
[
{
identifier
:
{
id
:
'
d
'
,
uuid
:
'
d
'
},
enabled
:
true
},
];
const
localExtensions
:
ISyncExtension
[]
=
[
{
identifier
:
{
id
:
'
b
'
,
uuid
:
'
b
'
},
enabled
:
true
},
{
identifier
:
{
id
:
'
c
'
,
uuid
:
'
c
'
},
enabled
:
true
},
];
const
remoteExtensions
:
ISyncExtension
[]
=
[
{
identifier
:
{
id
:
'
a
'
,
uuid
:
'
a
'
},
enabled
:
true
},
{
identifier
:
{
id
:
'
d
'
,
uuid
:
'
d
'
},
enabled
:
true
},
];
const
expected
:
ISyncExtension
[]
=
[
{
identifier
:
{
id
:
'
d
'
,
uuid
:
'
d
'
},
enabled
:
true
},
{
identifier
:
{
id
:
'
b
'
,
uuid
:
'
b
'
},
enabled
:
true
},
];
const
actual
=
merge
(
localExtensions
,
remoteExtensions
,
baseExtensions
,
skippedExtensions
,
[
'
c
'
]);
assert
.
deepEqual
(
actual
.
added
,
[]);
assert
.
deepEqual
(
actual
.
removed
,
[]);
assert
.
deepEqual
(
actual
.
updated
,
[]);
assert
.
deepEqual
(
actual
.
remote
,
expected
);
});
test
(
'
merge local and remote extensions when both moved forwarded
'
,
async
()
=>
{
const
baseExtensions
:
ISyncExtension
[]
=
[
{
identifier
:
{
id
:
'
a
'
,
uuid
:
'
a
'
},
enabled
:
true
},
{
identifier
:
{
id
:
'
d
'
,
uuid
:
'
d
'
},
enabled
:
true
},
];
const
localExtensions
:
ISyncExtension
[]
=
[
{
identifier
:
{
id
:
'
a
'
,
uuid
:
'
a
'
},
enabled
:
true
},
{
identifier
:
{
id
:
'
b
'
,
uuid
:
'
b
'
},
enabled
:
true
},
{
identifier
:
{
id
:
'
c
'
,
uuid
:
'
c
'
},
enabled
:
true
},
];
const
remoteExtensions
:
ISyncExtension
[]
=
[
{
identifier
:
{
id
:
'
d
'
,
uuid
:
'
d
'
},
enabled
:
true
},
{
identifier
:
{
id
:
'
b
'
,
uuid
:
'
b
'
},
enabled
:
true
},
{
identifier
:
{
id
:
'
e
'
,
uuid
:
'
e
'
},
enabled
:
true
},
];
const
expected
:
ISyncExtension
[]
=
[
{
identifier
:
{
id
:
'
b
'
,
uuid
:
'
b
'
},
enabled
:
true
},
{
identifier
:
{
id
:
'
e
'
,
uuid
:
'
e
'
},
enabled
:
true
},
{
identifier
:
{
id
:
'
c
'
,
uuid
:
'
c
'
},
enabled
:
true
},
];
const
actual
=
merge
(
localExtensions
,
remoteExtensions
,
baseExtensions
,
[],
[]);
assert
.
deepEqual
(
actual
.
added
,
[{
identifier
:
{
id
:
'
e
'
,
uuid
:
'
e
'
},
enabled
:
true
}]);
assert
.
deepEqual
(
actual
.
removed
,
[{
id
:
'
a
'
,
uuid
:
'
a
'
}]);
assert
.
deepEqual
(
actual
.
updated
,
[]);
assert
.
deepEqual
(
actual
.
remote
,
expected
);
});
test
(
'
merge local and remote extensions when both moved forwarded with ignored extensions
'
,
async
()
=>
{
const
baseExtensions
:
ISyncExtension
[]
=
[
{
identifier
:
{
id
:
'
a
'
,
uuid
:
'
a
'
},
enabled
:
true
},
{
identifier
:
{
id
:
'
d
'
,
uuid
:
'
d
'
},
enabled
:
true
},
];
const
localExtensions
:
ISyncExtension
[]
=
[
{
identifier
:
{
id
:
'
a
'
,
uuid
:
'
a
'
},
enabled
:
true
},
{
identifier
:
{
id
:
'
b
'
,
uuid
:
'
b
'
},
enabled
:
true
},
{
identifier
:
{
id
:
'
c
'
,
uuid
:
'
c
'
},
enabled
:
true
},
];
const
remoteExtensions
:
ISyncExtension
[]
=
[
{
identifier
:
{
id
:
'
d
'
,
uuid
:
'
d
'
},
enabled
:
true
},
{
identifier
:
{
id
:
'
b
'
,
uuid
:
'
b
'
},
enabled
:
true
},
{
identifier
:
{
id
:
'
e
'
,
uuid
:
'
e
'
},
enabled
:
true
},
];
const
expected
:
ISyncExtension
[]
=
[
{
identifier
:
{
id
:
'
b
'
,
uuid
:
'
b
'
},
enabled
:
true
},
{
identifier
:
{
id
:
'
e
'
,
uuid
:
'
e
'
},
enabled
:
true
},
{
identifier
:
{
id
:
'
c
'
,
uuid
:
'
c
'
},
enabled
:
true
},
];
const
actual
=
merge
(
localExtensions
,
remoteExtensions
,
baseExtensions
,
[],
[
'
a
'
,
'
e
'
]);
assert
.
deepEqual
(
actual
.
added
,
[]);
assert
.
deepEqual
(
actual
.
removed
,
[]);
assert
.
deepEqual
(
actual
.
updated
,
[]);
assert
.
deepEqual
(
actual
.
remote
,
expected
);
});
test
(
'
merge local and remote extensions when both moved forwarded with skipped extensions
'
,
async
()
=>
{
const
baseExtensions
:
ISyncExtension
[]
=
[
{
identifier
:
{
id
:
'
a
'
,
uuid
:
'
a
'
},
enabled
:
true
},
{
identifier
:
{
id
:
'
d
'
,
uuid
:
'
d
'
},
enabled
:
true
},
];
const
skippedExtensions
:
ISyncExtension
[]
=
[
{
identifier
:
{
id
:
'
a
'
,
uuid
:
'
a
'
},
enabled
:
true
},
];
const
localExtensions
:
ISyncExtension
[]
=
[
{
identifier
:
{
id
:
'
b
'
,
uuid
:
'
b
'
},
enabled
:
true
},
{
identifier
:
{
id
:
'
c
'
,
uuid
:
'
c
'
},
enabled
:
true
},
];
const
remoteExtensions
:
ISyncExtension
[]
=
[
{
identifier
:
{
id
:
'
d
'
,
uuid
:
'
d
'
},
enabled
:
true
},
{
identifier
:
{
id
:
'
b
'
,
uuid
:
'
b
'
},
enabled
:
true
},
{
identifier
:
{
id
:
'
e
'
,
uuid
:
'
e
'
},
enabled
:
true
},
];
const
expected
:
ISyncExtension
[]
=
[
{
identifier
:
{
id
:
'
b
'
,
uuid
:
'
b
'
},
enabled
:
true
},
{
identifier
:
{
id
:
'
e
'
,
uuid
:
'
e
'
},
enabled
:
true
},
{
identifier
:
{
id
:
'
c
'
,
uuid
:
'
c
'
},
enabled
:
true
},
];
const
actual
=
merge
(
localExtensions
,
remoteExtensions
,
baseExtensions
,
skippedExtensions
,
[]);
assert
.
deepEqual
(
actual
.
added
,
[{
identifier
:
{
id
:
'
e
'
,
uuid
:
'
e
'
},
enabled
:
true
}]);
assert
.
deepEqual
(
actual
.
removed
,
[]);
assert
.
deepEqual
(
actual
.
updated
,
[]);
assert
.
deepEqual
(
actual
.
remote
,
expected
);
});
test
(
'
merge local and remote extensions when both moved forwarded with skipped and ignoredextensions
'
,
async
()
=>
{
const
baseExtensions
:
ISyncExtension
[]
=
[
{
identifier
:
{
id
:
'
a
'
,
uuid
:
'
a
'
},
enabled
:
true
},
{
identifier
:
{
id
:
'
d
'
,
uuid
:
'
d
'
},
enabled
:
true
},
];
const
skippedExtensions
:
ISyncExtension
[]
=
[
{
identifier
:
{
id
:
'
a
'
,
uuid
:
'
a
'
},
enabled
:
true
},
];
const
localExtensions
:
ISyncExtension
[]
=
[
{
identifier
:
{
id
:
'
b
'
,
uuid
:
'
b
'
},
enabled
:
true
},
{
identifier
:
{
id
:
'
c
'
,
uuid
:
'
c
'
},
enabled
:
true
},
];
const
remoteExtensions
:
ISyncExtension
[]
=
[
{
identifier
:
{
id
:
'
d
'
,
uuid
:
'
d
'
},
enabled
:
true
},
{
identifier
:
{
id
:
'
b
'
,
uuid
:
'
b
'
},
enabled
:
true
},
{
identifier
:
{
id
:
'
e
'
,
uuid
:
'
e
'
},
enabled
:
true
},
];
const
expected
:
ISyncExtension
[]
=
[
{
identifier
:
{
id
:
'
b
'
,
uuid
:
'
b
'
},
enabled
:
true
},
{
identifier
:
{
id
:
'
e
'
,
uuid
:
'
e
'
},
enabled
:
true
},
{
identifier
:
{
id
:
'
c
'
,
uuid
:
'
c
'
},
enabled
:
true
},
];
const
actual
=
merge
(
localExtensions
,
remoteExtensions
,
baseExtensions
,
skippedExtensions
,
[
'
e
'
]);
assert
.
deepEqual
(
actual
.
added
,
[]);
assert
.
deepEqual
(
actual
.
removed
,
[]);
assert
.
deepEqual
(
actual
.
updated
,
[]);
assert
.
deepEqual
(
actual
.
remote
,
expected
);
});
test
(
'
merge when remote extension has no uuid and different extension id case
'
,
async
()
=>
{
const
localExtensions
:
ISyncExtension
[]
=
[
{
identifier
:
{
id
:
'
a
'
,
uuid
:
'
a
'
},
enabled
:
true
},
{
identifier
:
{
id
:
'
b
'
,
uuid
:
'
b
'
},
enabled
:
true
},
{
identifier
:
{
id
:
'
c
'
,
uuid
:
'
c
'
},
enabled
:
true
},
];
const
remoteExtensions
:
ISyncExtension
[]
=
[
{
identifier
:
{
id
:
'
A
'
},
enabled
:
true
},
{
identifier
:
{
id
:
'
d
'
,
uuid
:
'
d
'
},
enabled
:
true
},
];
const
expected
:
ISyncExtension
[]
=
[
{
identifier
:
{
id
:
'
A
'
},
enabled
:
true
},
{
identifier
:
{
id
:
'
d
'
,
uuid
:
'
d
'
},
enabled
:
true
},
{
identifier
:
{
id
:
'
b
'
,
uuid
:
'
b
'
},
enabled
:
true
},
{
identifier
:
{
id
:
'
c
'
,
uuid
:
'
c
'
},
enabled
:
true
},
];
const
actual
=
merge
(
localExtensions
,
remoteExtensions
,
null
,
[],
[]);
assert
.
deepEqual
(
actual
.
added
,
[{
identifier
:
{
id
:
'
d
'
,
uuid
:
'
d
'
},
enabled
:
true
}]);
assert
.
deepEqual
(
actual
.
removed
,
[]);
assert
.
deepEqual
(
actual
.
removed
,
[]);
assert
.
deepEqual
(
actual
.
updated
,
[]);
assert
.
deepEqual
(
actual
.
updated
,
[]);
assert
.
deepEqual
(
actual
.
remote
,
expected
);
assert
.
deepEqual
(
actual
.
remote
,
expected
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录