* feat(server): 外部皮肤接受跨平台客户端的 base 与装饰规则,社区皮肤可在 Windows 加载 社区皮肤库按跨平台客户端(msime 的 client-core)的规则校验,base 写的是全局主题 system / shuishan / light / paper / night / ink,而 Windows 只认六个内置皮肤 ID,所以社区里绝大多数皮肤在 Windows 上整包加载失败。 - base 为 system 时按 fluent 加载,配色原样保留。 - base 为五个内置全局主题时按 fluent 加载,并照 theme::resolve 换算配色:主题固定明暗,只取包里那一种明暗的配色,深浅两种模式都画它;读不懂的颜色当作没写,没写的按主题补齐,右键菜单和悬浮工具栏一并补上。包没声明那一种明暗时不生效,与客户端一致。 - 装饰规则与客户端对齐:空表或两个尺寸都为 0 表示无装饰;有尺寸而无 image 时用图片类型的 preview,都没有就不画。 - 复制 msime-cloud 的 client_dialect.json 作测试夹具,新测试要求客户端接受的每个包在 Windows 上都能加载;scripts/sync-client-dialect.py 负责同步,每周的 Skin client dialect 工作流比对上游。 * feat(server): 皮肤清单与跨平台客户端统一为同一套规则 同一个皮肤包现在在每个平台上要么都能加载,要么都被拒绝。规则以 msime client-core 的 load() 为准,共享用例表 client_dialect.json 改为从 msime 同步,测试要求每一条用例的接受与否都与客户端一致。 - 保留 ID 加上全局主题 ID(system、shuishan、light、paper、night、ink、custom)。 - 收紧到客户端的规则:skin.toml 最大 64 KiB;schema_version 必须是整数 1;author、description 写了不能为空;preview 写了必须指向包内已有的文件;toolbar_stylesheet 写了必须是包根目录里已有的 .css 文件;[license] 的各键有长度限制;[candidate] 与其中的 dark、light 必须是表;装饰图与背景图须是图片扩展名。 - 仓库自带的 7 个皮肤、示例皮肤和 msime-skins 里的 4 个皮肤在新规则下都能加载。
2044 lines
46 KiB
JSON
2044 lines
46 KiB
JSON
{
|
|
"_comment": "皮肤清单规则的共享用例表,规则以 msime 的 crates/client-core/src/skin/catalog.rs load() 为准,本文件 crates/client-core/src/skin/catalog/client_dialect.json 是唯一来源。各实现都按它校验并各存一份副本:client-core 的 catalog/tests.rs、msime-cloud 的 internal/skins/client_test.go 与 scripts/test_candidate_skins_seed.py、msime-windows 的 server/tests(它只核对接受与否,不核对原因)。改规则先改这里,再用各仓库的同步脚本刷新副本。reason 是客户端的拒绝原因,null 表示接受。模板中的 {id} 换成用例的 id(默认 sample 或 bigfish);replace 只替换第一处;prepend、append 加在清单前后;pad_to 在末尾补注释直到清单达到该字节数;files 是 skin.toml 旁边的文件。接受的用例写了 base 时,是包解析后的 base:清单里的 fluent 和 msime-windows 的其他内置外观都解析为 system。",
|
|
"templates": {
|
|
"sample": {
|
|
"id": "sample",
|
|
"manifest": "schema_version = 1\nid = '{id}'\nname = 'Sample'\nversion = '1.0'\nbase = 'night'\n[supports]\nlayouts = ['vertical']\nthemes = ['light']\n[candidate_window]\nmin_width_dip = 10\n[candidate_window.decoration]\ntop_inset_dip = 0\nwidth_dip = 0\n",
|
|
"files": []
|
|
},
|
|
"styled": {
|
|
"id": "bigfish",
|
|
"manifest": "schema_version = 1\nid = '{id}'\nname = '蓝色大肥鱼'\nversion = '1.0.0'\nbase = 'system'\n[supports]\nlayouts = ['horizontal', 'vertical']\nthemes = ['dark', 'light']\n[candidate_window]\nmin_width_dip = 176\ncorner_radius_dip = 12\n[candidate_window.decoration]\nimage = 'assets/character.png'\ntop_inset_dip = 104\nwidth_dip = 96\nalign = 'left'\n[candidate_window.background]\nimage = 'assets/background.png'\nfit = 'contain'\nopacity = 0.35\n[candidate.dark]\nnumber = '#E0C07A'\ntranslation = '#9FB4E0'\n[candidate.light]\ntranslation = 'rgba(90, 106, 150, .5)'\n[toolbar]\ncorner_radius_dip = 8\n[toolbar.dark]\nbackground = '#141B33'\nborder = 'rgba(91, 155, 255, 0.38)'\nhandle = '#5B9BFF'\ndivider = 'rgba(91, 155, 255, 0.28)'\nicon = '#E3EAFF'\nhover = 'not a colour'\n[toolbar.light]\nbackground = '#f4f8ff'\n[license]\ncode = 'MIT'\nassets = 'CC-BY-4.0'\nsource = 'synthetic'\n",
|
|
"files": [
|
|
"assets/character.png",
|
|
"assets/background.png"
|
|
]
|
|
}
|
|
},
|
|
"cases": [
|
|
{
|
|
"name": "sample loads",
|
|
"reason": null,
|
|
"template": "sample",
|
|
"base": "night"
|
|
},
|
|
{
|
|
"name": "dimensions default to zero",
|
|
"reason": null,
|
|
"template": "sample",
|
|
"replace": [
|
|
[
|
|
"min_width_dip = 10\n",
|
|
""
|
|
],
|
|
[
|
|
"top_inset_dip = 0\n",
|
|
""
|
|
],
|
|
[
|
|
"width_dip = 0\n",
|
|
""
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"name": "decoration table may be left out",
|
|
"reason": null,
|
|
"template": "sample",
|
|
"replace": [
|
|
[
|
|
"[candidate_window.decoration]\ntop_inset_dip = 0\nwidth_dip = 0\n",
|
|
""
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"name": "background defaults to cover at full strength",
|
|
"reason": null,
|
|
"template": "sample",
|
|
"append": "[candidate_window.background]\nimage = 'bg.webp'\n",
|
|
"files": [
|
|
"bg.webp"
|
|
]
|
|
},
|
|
{
|
|
"name": "styled package loads every drawn key",
|
|
"reason": null,
|
|
"template": "styled"
|
|
},
|
|
{
|
|
"name": "styled package with the Windows base fluent",
|
|
"reason": null,
|
|
"template": "styled",
|
|
"replace": [
|
|
[
|
|
"base = 'system'",
|
|
"base = 'fluent'"
|
|
]
|
|
],
|
|
"base": "system"
|
|
},
|
|
{
|
|
"name": "both palettes carry every colour",
|
|
"reason": null,
|
|
"template": "sample",
|
|
"append": "[candidate.dark]\naccent = '#123456'\nselected = '#234567'\nhover = '#345678'\nsurface = '#456789'\nborder = '#56789a'\ntext = '#6789ab'\nnumber = '#789abc'\ntranslation = '#89abcd'\nshow_selected_bar = false\n[candidate.light]\ntext = '#123'\nshow_selected_bar = true\n"
|
|
},
|
|
{
|
|
"name": "dark.accent may be empty",
|
|
"reason": null,
|
|
"template": "sample",
|
|
"append": "[candidate.dark]\naccent = ''\n"
|
|
},
|
|
{
|
|
"name": "dark.accent may be 80 bytes",
|
|
"reason": null,
|
|
"template": "sample",
|
|
"append": "[candidate.dark]\naccent = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'\n"
|
|
},
|
|
{
|
|
"name": "dark.accent = false",
|
|
"reason": "invalid candidate colors",
|
|
"template": "sample",
|
|
"append": "[candidate.dark]\naccent = false\n"
|
|
},
|
|
{
|
|
"name": "dark.accent = 7",
|
|
"reason": "invalid candidate colors",
|
|
"template": "sample",
|
|
"append": "[candidate.dark]\naccent = 7\n"
|
|
},
|
|
{
|
|
"name": "dark.accent = []",
|
|
"reason": "invalid candidate colors",
|
|
"template": "sample",
|
|
"append": "[candidate.dark]\naccent = []\n"
|
|
},
|
|
{
|
|
"name": "dark.accent = {}",
|
|
"reason": "invalid candidate colors",
|
|
"template": "sample",
|
|
"append": "[candidate.dark]\naccent = {}\n"
|
|
},
|
|
{
|
|
"name": "dark.accent of 81 ASCII bytes",
|
|
"reason": "candidate color exceeds 80 bytes",
|
|
"template": "sample",
|
|
"append": "[candidate.dark]\naccent = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'\n"
|
|
},
|
|
{
|
|
"name": "dark.accent of 81 UTF-8 bytes",
|
|
"reason": "candidate color exceeds 80 bytes",
|
|
"template": "sample",
|
|
"append": "[candidate.dark]\naccent = '色色色色色色色色色色色色色色色色色色色色色色色色色色色'\n"
|
|
},
|
|
{
|
|
"name": "dark.translation may be empty",
|
|
"reason": null,
|
|
"template": "sample",
|
|
"append": "[candidate.dark]\ntranslation = ''\n"
|
|
},
|
|
{
|
|
"name": "dark.translation may be 80 bytes",
|
|
"reason": null,
|
|
"template": "sample",
|
|
"append": "[candidate.dark]\ntranslation = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'\n"
|
|
},
|
|
{
|
|
"name": "dark.translation = false",
|
|
"reason": "invalid candidate colors",
|
|
"template": "sample",
|
|
"append": "[candidate.dark]\ntranslation = false\n"
|
|
},
|
|
{
|
|
"name": "dark.translation = 7",
|
|
"reason": "invalid candidate colors",
|
|
"template": "sample",
|
|
"append": "[candidate.dark]\ntranslation = 7\n"
|
|
},
|
|
{
|
|
"name": "dark.translation = []",
|
|
"reason": "invalid candidate colors",
|
|
"template": "sample",
|
|
"append": "[candidate.dark]\ntranslation = []\n"
|
|
},
|
|
{
|
|
"name": "dark.translation = {}",
|
|
"reason": "invalid candidate colors",
|
|
"template": "sample",
|
|
"append": "[candidate.dark]\ntranslation = {}\n"
|
|
},
|
|
{
|
|
"name": "dark.translation of 81 ASCII bytes",
|
|
"reason": "candidate color exceeds 80 bytes",
|
|
"template": "sample",
|
|
"append": "[candidate.dark]\ntranslation = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'\n"
|
|
},
|
|
{
|
|
"name": "dark.translation of 81 UTF-8 bytes",
|
|
"reason": "candidate color exceeds 80 bytes",
|
|
"template": "sample",
|
|
"append": "[candidate.dark]\ntranslation = '色色色色色色色色色色色色色色色色色色色色色色色色色色色'\n"
|
|
},
|
|
{
|
|
"name": "light.accent may be empty",
|
|
"reason": null,
|
|
"template": "sample",
|
|
"append": "[candidate.light]\naccent = ''\n"
|
|
},
|
|
{
|
|
"name": "light.accent may be 80 bytes",
|
|
"reason": null,
|
|
"template": "sample",
|
|
"append": "[candidate.light]\naccent = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'\n"
|
|
},
|
|
{
|
|
"name": "light.accent = false",
|
|
"reason": "invalid candidate colors",
|
|
"template": "sample",
|
|
"append": "[candidate.light]\naccent = false\n"
|
|
},
|
|
{
|
|
"name": "light.accent = 7",
|
|
"reason": "invalid candidate colors",
|
|
"template": "sample",
|
|
"append": "[candidate.light]\naccent = 7\n"
|
|
},
|
|
{
|
|
"name": "light.accent = []",
|
|
"reason": "invalid candidate colors",
|
|
"template": "sample",
|
|
"append": "[candidate.light]\naccent = []\n"
|
|
},
|
|
{
|
|
"name": "light.accent = {}",
|
|
"reason": "invalid candidate colors",
|
|
"template": "sample",
|
|
"append": "[candidate.light]\naccent = {}\n"
|
|
},
|
|
{
|
|
"name": "light.accent of 81 ASCII bytes",
|
|
"reason": "candidate color exceeds 80 bytes",
|
|
"template": "sample",
|
|
"append": "[candidate.light]\naccent = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'\n"
|
|
},
|
|
{
|
|
"name": "light.accent of 81 UTF-8 bytes",
|
|
"reason": "candidate color exceeds 80 bytes",
|
|
"template": "sample",
|
|
"append": "[candidate.light]\naccent = '色色色色色色色色色色色色色色色色色色色色色色色色色色色'\n"
|
|
},
|
|
{
|
|
"name": "light.translation may be empty",
|
|
"reason": null,
|
|
"template": "sample",
|
|
"append": "[candidate.light]\ntranslation = ''\n"
|
|
},
|
|
{
|
|
"name": "light.translation may be 80 bytes",
|
|
"reason": null,
|
|
"template": "sample",
|
|
"append": "[candidate.light]\ntranslation = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'\n"
|
|
},
|
|
{
|
|
"name": "light.translation = false",
|
|
"reason": "invalid candidate colors",
|
|
"template": "sample",
|
|
"append": "[candidate.light]\ntranslation = false\n"
|
|
},
|
|
{
|
|
"name": "light.translation = 7",
|
|
"reason": "invalid candidate colors",
|
|
"template": "sample",
|
|
"append": "[candidate.light]\ntranslation = 7\n"
|
|
},
|
|
{
|
|
"name": "light.translation = []",
|
|
"reason": "invalid candidate colors",
|
|
"template": "sample",
|
|
"append": "[candidate.light]\ntranslation = []\n"
|
|
},
|
|
{
|
|
"name": "light.translation = {}",
|
|
"reason": "invalid candidate colors",
|
|
"template": "sample",
|
|
"append": "[candidate.light]\ntranslation = {}\n"
|
|
},
|
|
{
|
|
"name": "light.translation of 81 ASCII bytes",
|
|
"reason": "candidate color exceeds 80 bytes",
|
|
"template": "sample",
|
|
"append": "[candidate.light]\ntranslation = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'\n"
|
|
},
|
|
{
|
|
"name": "light.translation of 81 UTF-8 bytes",
|
|
"reason": "candidate color exceeds 80 bytes",
|
|
"template": "sample",
|
|
"append": "[candidate.light]\ntranslation = '色色色色色色色色色色色色色色色色色色色色色色色色色色色'\n"
|
|
},
|
|
{
|
|
"name": "unknown palette keys are ignored",
|
|
"reason": null,
|
|
"template": "sample",
|
|
"append": "[candidate.dark]\nshadow = 5\n[candidate.other]\naccent = 1\n"
|
|
},
|
|
{
|
|
"name": "base system",
|
|
"reason": null,
|
|
"template": "sample",
|
|
"replace": [
|
|
[
|
|
"base = 'night'",
|
|
"base = 'system'"
|
|
]
|
|
],
|
|
"base": "system"
|
|
},
|
|
{
|
|
"name": "base shuishan",
|
|
"reason": null,
|
|
"template": "sample",
|
|
"replace": [
|
|
[
|
|
"base = 'night'",
|
|
"base = 'shuishan'"
|
|
]
|
|
],
|
|
"base": "shuishan"
|
|
},
|
|
{
|
|
"name": "base light",
|
|
"reason": null,
|
|
"template": "sample",
|
|
"replace": [
|
|
[
|
|
"base = 'night'",
|
|
"base = 'light'"
|
|
]
|
|
],
|
|
"base": "light"
|
|
},
|
|
{
|
|
"name": "base paper",
|
|
"reason": null,
|
|
"template": "sample",
|
|
"replace": [
|
|
[
|
|
"base = 'night'",
|
|
"base = 'paper'"
|
|
]
|
|
],
|
|
"base": "paper"
|
|
},
|
|
{
|
|
"name": "base night",
|
|
"reason": null,
|
|
"template": "sample",
|
|
"replace": [
|
|
[
|
|
"base = 'night'",
|
|
"base = 'night'"
|
|
]
|
|
],
|
|
"base": "night"
|
|
},
|
|
{
|
|
"name": "base ink",
|
|
"reason": null,
|
|
"template": "sample",
|
|
"replace": [
|
|
[
|
|
"base = 'night'",
|
|
"base = 'ink'"
|
|
]
|
|
],
|
|
"base": "ink"
|
|
},
|
|
{
|
|
"name": "system base with author and empty tables",
|
|
"reason": null,
|
|
"template": "raw",
|
|
"id": "sample_skin",
|
|
"manifest": "schema_version = 1\nid = 'sample_skin'\nname = 'Sample'\nversion = '1.0'\nbase = 'system'\nauthor = 'Test'\ndescription = 'Demo'\n[supports]\nlayouts = ['vertical']\nthemes = ['light']\n[candidate_window]\n[candidate_window.decoration]\n"
|
|
},
|
|
{
|
|
"name": "toolbar stylesheet and preview",
|
|
"reason": null,
|
|
"template": "sample",
|
|
"prepend": "toolbar_stylesheet = 'toolbar.css'\npreview = 'images/preview.svg'\n",
|
|
"files": [
|
|
"toolbar.css",
|
|
"images/preview.svg"
|
|
],
|
|
"replace": [
|
|
[
|
|
"['vertical']",
|
|
"['vertical', 'horizontal']"
|
|
],
|
|
[
|
|
"min_width_dip = 10",
|
|
"min_width_dip = 320.5"
|
|
],
|
|
[
|
|
"top_inset_dip = 0",
|
|
"top_inset_dip = 24.5"
|
|
],
|
|
[
|
|
"width_dip = 0",
|
|
"width_dip = 180"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"name": "decoration image of its own",
|
|
"reason": null,
|
|
"template": "sample",
|
|
"prepend": "preview = 'preview.png'\n",
|
|
"files": [
|
|
"preview.png",
|
|
"ears.png"
|
|
],
|
|
"replace": [
|
|
[
|
|
"top_inset_dip = 0",
|
|
"image = 'ears.png'\ntop_inset_dip = 20"
|
|
],
|
|
[
|
|
"width_dip = 0",
|
|
"width_dip = 40"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"name": "decoration falls back to the preview",
|
|
"reason": null,
|
|
"template": "sample",
|
|
"prepend": "preview = 'preview.png'\n",
|
|
"files": [
|
|
"preview.png"
|
|
],
|
|
"replace": [
|
|
[
|
|
"top_inset_dip = 0",
|
|
"top_inset_dip = 20"
|
|
],
|
|
[
|
|
"width_dip = 0",
|
|
"width_dip = 40"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"name": "preview may name skin.toml",
|
|
"reason": null,
|
|
"template": "sample",
|
|
"prepend": "preview = 'skin.toml'\n"
|
|
},
|
|
{
|
|
"name": "preview may name a directory",
|
|
"reason": null,
|
|
"template": "sample",
|
|
"prepend": "preview = 'assets'\n",
|
|
"files": [
|
|
"assets/a.png"
|
|
]
|
|
},
|
|
{
|
|
"name": "unknown keys are ignored",
|
|
"reason": null,
|
|
"template": "sample",
|
|
"prepend": "homepage = 'https://example.test'\n",
|
|
"append": "[extra]\nvalue = 1\n"
|
|
},
|
|
{
|
|
"name": "broken TOML",
|
|
"reason": "invalid TOML",
|
|
"template": "raw",
|
|
"manifest": "broken="
|
|
},
|
|
{
|
|
"name": "duplicate table",
|
|
"reason": "invalid TOML",
|
|
"template": "sample",
|
|
"append": "[candidate_window]\nmin_width_dip = 1\n"
|
|
},
|
|
{
|
|
"name": "oversized manifest",
|
|
"reason": "skin.toml is too large",
|
|
"template": "sample",
|
|
"pad_to": 65537
|
|
},
|
|
{
|
|
"name": "manifest at the size limit",
|
|
"reason": null,
|
|
"template": "sample",
|
|
"pad_to": 65536
|
|
},
|
|
{
|
|
"name": "schema_version = 2",
|
|
"reason": "unsupported schema_version",
|
|
"template": "sample",
|
|
"replace": [
|
|
[
|
|
"schema_version = 1",
|
|
"schema_version = 2"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"name": "schema_version = 1.0",
|
|
"reason": "unsupported schema_version",
|
|
"template": "sample",
|
|
"replace": [
|
|
[
|
|
"schema_version = 1",
|
|
"schema_version = 1.0"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"name": "schema_version = '1'",
|
|
"reason": "unsupported schema_version",
|
|
"template": "sample",
|
|
"replace": [
|
|
[
|
|
"schema_version = 1",
|
|
"schema_version = '1'"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"name": "schema_version = true",
|
|
"reason": "unsupported schema_version",
|
|
"template": "sample",
|
|
"replace": [
|
|
[
|
|
"schema_version = 1",
|
|
"schema_version = true"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"name": "schema_version missing",
|
|
"reason": "unsupported schema_version",
|
|
"template": "sample",
|
|
"replace": [
|
|
[
|
|
"schema_version = 1\n",
|
|
""
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"name": "reserved id system",
|
|
"reason": "invalid skin id",
|
|
"template": "sample",
|
|
"id": "system"
|
|
},
|
|
{
|
|
"name": "reserved id shuishan",
|
|
"reason": "invalid skin id",
|
|
"template": "sample",
|
|
"id": "shuishan"
|
|
},
|
|
{
|
|
"name": "reserved id light",
|
|
"reason": "invalid skin id",
|
|
"template": "sample",
|
|
"id": "light"
|
|
},
|
|
{
|
|
"name": "reserved id paper",
|
|
"reason": "invalid skin id",
|
|
"template": "sample",
|
|
"id": "paper"
|
|
},
|
|
{
|
|
"name": "reserved id night",
|
|
"reason": "invalid skin id",
|
|
"template": "sample",
|
|
"id": "night"
|
|
},
|
|
{
|
|
"name": "reserved id ink",
|
|
"reason": "invalid skin id",
|
|
"template": "sample",
|
|
"id": "ink"
|
|
},
|
|
{
|
|
"name": "reserved id custom",
|
|
"reason": "invalid skin id",
|
|
"template": "sample",
|
|
"id": "custom"
|
|
},
|
|
{
|
|
"name": "reserved id fluent",
|
|
"reason": "invalid skin id",
|
|
"template": "sample",
|
|
"id": "fluent"
|
|
},
|
|
{
|
|
"name": "reserved id wechat",
|
|
"reason": "invalid skin id",
|
|
"template": "sample",
|
|
"id": "wechat"
|
|
},
|
|
{
|
|
"name": "reserved id graphite",
|
|
"reason": "invalid skin id",
|
|
"template": "sample",
|
|
"id": "graphite"
|
|
},
|
|
{
|
|
"name": "reserved id willow_green",
|
|
"reason": "invalid skin id",
|
|
"template": "sample",
|
|
"id": "willow_green"
|
|
},
|
|
{
|
|
"name": "reserved id autumn_osmanthus",
|
|
"reason": "invalid skin id",
|
|
"template": "sample",
|
|
"id": "autumn_osmanthus"
|
|
},
|
|
{
|
|
"name": "reserved id microsoft",
|
|
"reason": "invalid skin id",
|
|
"template": "sample",
|
|
"id": "microsoft"
|
|
},
|
|
{
|
|
"name": "reserved id default",
|
|
"reason": "invalid skin id",
|
|
"template": "sample",
|
|
"id": "default"
|
|
},
|
|
{
|
|
"name": "unsafe id Bad",
|
|
"reason": "invalid skin id",
|
|
"template": "sample",
|
|
"id": "Bad"
|
|
},
|
|
{
|
|
"name": "unsafe id -lead",
|
|
"reason": "invalid skin id",
|
|
"template": "sample",
|
|
"id": "-lead"
|
|
},
|
|
{
|
|
"name": "unsafe id aaaaaaaaaaaa",
|
|
"reason": "invalid skin id",
|
|
"template": "sample",
|
|
"id": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
|
},
|
|
{
|
|
"name": "unsafe id has space",
|
|
"reason": "invalid skin id",
|
|
"template": "sample",
|
|
"id": "has space"
|
|
},
|
|
{
|
|
"name": "id mismatch",
|
|
"reason": "manifest id does not match folder",
|
|
"template": "raw",
|
|
"id": "mismatch",
|
|
"manifest": "schema_version = 1\nid = 'other'\nname = 'X'\nversion = '1'\nbase = 'night'"
|
|
},
|
|
{
|
|
"name": "id not a string",
|
|
"reason": "id must be a string",
|
|
"template": "sample",
|
|
"replace": [
|
|
[
|
|
"id = 'sample'",
|
|
"id = 5"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"name": "baseless",
|
|
"reason": "base must be a string",
|
|
"template": "raw",
|
|
"id": "baseless",
|
|
"manifest": "schema_version = 1\nid = 'baseless'\nname = 'X'\nversion = '1'\n[supports]\nlayouts = ['vertical']\nthemes = ['light']\n[candidate_window]\n[candidate_window.decoration]\n"
|
|
},
|
|
{
|
|
"name": "base custom refused",
|
|
"reason": "base must be system or a built-in theme",
|
|
"template": "sample",
|
|
"replace": [
|
|
[
|
|
"base = 'night'",
|
|
"base = 'custom'"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"name": "base fluent is a manifest alias of system",
|
|
"reason": null,
|
|
"template": "sample",
|
|
"replace": [
|
|
[
|
|
"base = 'night'",
|
|
"base = 'fluent'"
|
|
]
|
|
],
|
|
"base": "system"
|
|
},
|
|
{
|
|
"name": "base wechat is a Windows look drawn over system",
|
|
"reason": null,
|
|
"template": "sample",
|
|
"replace": [
|
|
[
|
|
"base = 'night'",
|
|
"base = 'wechat'"
|
|
]
|
|
],
|
|
"base": "system"
|
|
},
|
|
{
|
|
"name": "base Fluent refused",
|
|
"reason": "base must be system or a built-in theme",
|
|
"template": "sample",
|
|
"replace": [
|
|
[
|
|
"base = 'night'",
|
|
"base = 'Fluent'"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"name": "base graphite is a Windows look drawn over system",
|
|
"reason": null,
|
|
"template": "sample",
|
|
"replace": [
|
|
[
|
|
"base = 'night'",
|
|
"base = 'graphite'"
|
|
]
|
|
],
|
|
"base": "system"
|
|
},
|
|
{
|
|
"name": "base willow_green is a Windows look drawn over system",
|
|
"reason": null,
|
|
"template": "sample",
|
|
"replace": [
|
|
[
|
|
"base = 'night'",
|
|
"base = 'willow_green'"
|
|
]
|
|
],
|
|
"base": "system"
|
|
},
|
|
{
|
|
"name": "base autumn_osmanthus is a Windows look drawn over system",
|
|
"reason": null,
|
|
"template": "sample",
|
|
"replace": [
|
|
[
|
|
"base = 'night'",
|
|
"base = 'autumn_osmanthus'"
|
|
]
|
|
],
|
|
"base": "system"
|
|
},
|
|
{
|
|
"name": "base microsoft is a Windows look drawn over system",
|
|
"reason": null,
|
|
"template": "sample",
|
|
"replace": [
|
|
[
|
|
"base = 'night'",
|
|
"base = 'microsoft'"
|
|
]
|
|
],
|
|
"base": "system"
|
|
},
|
|
{
|
|
"name": "base Wechat refused",
|
|
"reason": "base must be system or a built-in theme",
|
|
"template": "sample",
|
|
"replace": [
|
|
[
|
|
"base = 'night'",
|
|
"base = 'Wechat'"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"name": "base default refused",
|
|
"reason": "base must be system or a built-in theme",
|
|
"template": "sample",
|
|
"replace": [
|
|
[
|
|
"base = 'night'",
|
|
"base = 'default'"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"name": "base Night refused",
|
|
"reason": "base must be system or a built-in theme",
|
|
"template": "sample",
|
|
"replace": [
|
|
[
|
|
"base = 'night'",
|
|
"base = 'Night'"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"name": "empty name",
|
|
"reason": "name has invalid length",
|
|
"template": "sample",
|
|
"replace": [
|
|
[
|
|
"name = 'Sample'",
|
|
"name = ''"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"name": "name of 81 bytes",
|
|
"reason": "name has invalid length",
|
|
"template": "sample",
|
|
"replace": [
|
|
[
|
|
"name = 'Sample'",
|
|
"name = 'nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn'"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"name": "version of 33 bytes",
|
|
"reason": "version has invalid length",
|
|
"template": "sample",
|
|
"replace": [
|
|
[
|
|
"version = '1.0'",
|
|
"version = '111111111111111111111111111111111'"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"name": "empty author",
|
|
"reason": "author has invalid length",
|
|
"template": "sample",
|
|
"prepend": "author = ''\n"
|
|
},
|
|
{
|
|
"name": "author not a string",
|
|
"reason": "author must be a string",
|
|
"template": "sample",
|
|
"prepend": "author = 1\n"
|
|
},
|
|
{
|
|
"name": "description of 501 bytes",
|
|
"reason": "description has invalid length",
|
|
"template": "sample",
|
|
"prepend": "description = 'ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd'\n"
|
|
},
|
|
{
|
|
"name": "supports not a table",
|
|
"reason": "missing supports",
|
|
"template": "sample",
|
|
"prepend": "supports = 1\n",
|
|
"replace": [
|
|
[
|
|
"[supports]\nlayouts = ['vertical']\nthemes = ['light']\n",
|
|
""
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"name": "supports missing",
|
|
"reason": "missing supports",
|
|
"template": "sample",
|
|
"replace": [
|
|
[
|
|
"[supports]\nlayouts = ['vertical']\nthemes = ['light']\n",
|
|
""
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"name": "supports ['vertical', 'vertical']",
|
|
"reason": "invalid supports",
|
|
"template": "sample",
|
|
"replace": [
|
|
[
|
|
"['vertical']",
|
|
"['vertical', 'vertical']"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"name": "supports ['light', 'light']",
|
|
"reason": "invalid supports",
|
|
"template": "sample",
|
|
"replace": [
|
|
[
|
|
"['light']",
|
|
"['light', 'light']"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"name": "supports []",
|
|
"reason": "invalid supports",
|
|
"template": "sample",
|
|
"replace": [
|
|
[
|
|
"['vertical']",
|
|
"[]"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"name": "supports ['anything']",
|
|
"reason": "invalid supports",
|
|
"template": "sample",
|
|
"replace": [
|
|
[
|
|
"['light']",
|
|
"['anything']"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"name": "supports 'vertical'",
|
|
"reason": "invalid supports",
|
|
"template": "sample",
|
|
"replace": [
|
|
[
|
|
"['vertical']",
|
|
"'vertical'"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"name": "supports [1]",
|
|
"reason": "invalid supports",
|
|
"template": "sample",
|
|
"replace": [
|
|
[
|
|
"['light']",
|
|
"[1]"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"name": "candidate_window missing",
|
|
"reason": "missing candidate_window",
|
|
"template": "raw",
|
|
"manifest": "schema_version = 1\nid = 'sample'\nname = 'Sample'\nversion = '1.0'\nbase = 'night'\n[supports]\nlayouts = ['vertical']\nthemes = ['light']\n"
|
|
},
|
|
{
|
|
"name": "min_width_dip = '10'",
|
|
"reason": "invalid min_width_dip",
|
|
"template": "sample",
|
|
"replace": [
|
|
[
|
|
"min_width_dip = 10",
|
|
"min_width_dip = '10'"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"name": "min_width_dip = false",
|
|
"reason": "invalid min_width_dip",
|
|
"template": "sample",
|
|
"replace": [
|
|
[
|
|
"min_width_dip = 10",
|
|
"min_width_dip = false"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"name": "min_width_dip = []",
|
|
"reason": "invalid min_width_dip",
|
|
"template": "sample",
|
|
"replace": [
|
|
[
|
|
"min_width_dip = 10",
|
|
"min_width_dip = []"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"name": "min_width_dip = {}",
|
|
"reason": "invalid min_width_dip",
|
|
"template": "sample",
|
|
"replace": [
|
|
[
|
|
"min_width_dip = 10",
|
|
"min_width_dip = {}"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"name": "min_width_dip = nan",
|
|
"reason": "invalid min_width_dip",
|
|
"template": "sample",
|
|
"replace": [
|
|
[
|
|
"min_width_dip = 10",
|
|
"min_width_dip = nan"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"name": "min_width_dip = inf",
|
|
"reason": "invalid min_width_dip",
|
|
"template": "sample",
|
|
"replace": [
|
|
[
|
|
"min_width_dip = 10",
|
|
"min_width_dip = inf"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"name": "min_width_dip = -1",
|
|
"reason": "invalid min_width_dip",
|
|
"template": "sample",
|
|
"replace": [
|
|
[
|
|
"min_width_dip = 10",
|
|
"min_width_dip = -1"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"name": "min_width_dip = 1001",
|
|
"reason": "invalid min_width_dip",
|
|
"template": "sample",
|
|
"replace": [
|
|
[
|
|
"min_width_dip = 10",
|
|
"min_width_dip = 1001"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"name": "top_inset_dip = '10'",
|
|
"reason": "invalid decoration",
|
|
"template": "sample",
|
|
"replace": [
|
|
[
|
|
"top_inset_dip = 0",
|
|
"top_inset_dip = '10'"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"name": "top_inset_dip = false",
|
|
"reason": "invalid decoration",
|
|
"template": "sample",
|
|
"replace": [
|
|
[
|
|
"top_inset_dip = 0",
|
|
"top_inset_dip = false"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"name": "top_inset_dip = []",
|
|
"reason": "invalid decoration",
|
|
"template": "sample",
|
|
"replace": [
|
|
[
|
|
"top_inset_dip = 0",
|
|
"top_inset_dip = []"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"name": "top_inset_dip = {}",
|
|
"reason": "invalid decoration",
|
|
"template": "sample",
|
|
"replace": [
|
|
[
|
|
"top_inset_dip = 0",
|
|
"top_inset_dip = {}"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"name": "top_inset_dip = nan",
|
|
"reason": "invalid decoration",
|
|
"template": "sample",
|
|
"replace": [
|
|
[
|
|
"top_inset_dip = 0",
|
|
"top_inset_dip = nan"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"name": "top_inset_dip = inf",
|
|
"reason": "invalid decoration",
|
|
"template": "sample",
|
|
"replace": [
|
|
[
|
|
"top_inset_dip = 0",
|
|
"top_inset_dip = inf"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"name": "top_inset_dip = -1",
|
|
"reason": "invalid decoration",
|
|
"template": "sample",
|
|
"replace": [
|
|
[
|
|
"top_inset_dip = 0",
|
|
"top_inset_dip = -1"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"name": "top_inset_dip = 1001",
|
|
"reason": "invalid decoration",
|
|
"template": "sample",
|
|
"replace": [
|
|
[
|
|
"top_inset_dip = 0",
|
|
"top_inset_dip = 1001"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"name": "width_dip = '10'",
|
|
"reason": "invalid decoration",
|
|
"template": "sample",
|
|
"replace": [
|
|
[
|
|
"width_dip = 0",
|
|
"width_dip = '10'"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"name": "width_dip = false",
|
|
"reason": "invalid decoration",
|
|
"template": "sample",
|
|
"replace": [
|
|
[
|
|
"width_dip = 0",
|
|
"width_dip = false"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"name": "width_dip = []",
|
|
"reason": "invalid decoration",
|
|
"template": "sample",
|
|
"replace": [
|
|
[
|
|
"width_dip = 0",
|
|
"width_dip = []"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"name": "width_dip = {}",
|
|
"reason": "invalid decoration",
|
|
"template": "sample",
|
|
"replace": [
|
|
[
|
|
"width_dip = 0",
|
|
"width_dip = {}"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"name": "width_dip = nan",
|
|
"reason": "invalid decoration",
|
|
"template": "sample",
|
|
"replace": [
|
|
[
|
|
"width_dip = 0",
|
|
"width_dip = nan"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"name": "width_dip = inf",
|
|
"reason": "invalid decoration",
|
|
"template": "sample",
|
|
"replace": [
|
|
[
|
|
"width_dip = 0",
|
|
"width_dip = inf"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"name": "width_dip = -1",
|
|
"reason": "invalid decoration",
|
|
"template": "sample",
|
|
"replace": [
|
|
[
|
|
"width_dip = 0",
|
|
"width_dip = -1"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"name": "width_dip = 1001",
|
|
"reason": "invalid decoration",
|
|
"template": "sample",
|
|
"replace": [
|
|
[
|
|
"width_dip = 0",
|
|
"width_dip = 1001"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"name": "decoration band needs both sizes",
|
|
"reason": "invalid decoration",
|
|
"template": "sample",
|
|
"replace": [
|
|
[
|
|
"top_inset_dip = 0",
|
|
"top_inset_dip = 20"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"name": "decoration top above 500",
|
|
"reason": "invalid decoration",
|
|
"template": "sample",
|
|
"replace": [
|
|
[
|
|
"top_inset_dip = 0",
|
|
"top_inset_dip = 501"
|
|
],
|
|
[
|
|
"width_dip = 0",
|
|
"width_dip = 40"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"name": "decoration not a table",
|
|
"reason": "invalid decoration",
|
|
"template": "sample",
|
|
"replace": [
|
|
[
|
|
"[candidate_window.decoration]\ntop_inset_dip = 0\nwidth_dip = 0\n",
|
|
""
|
|
],
|
|
[
|
|
"min_width_dip = 10\n",
|
|
"min_width_dip = 10\ndecoration = 1\n"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"name": "background not a table",
|
|
"reason": "invalid background",
|
|
"template": "sample",
|
|
"replace": [
|
|
[
|
|
"min_width_dip = 10\n",
|
|
"min_width_dip = 10\nbackground = 1\n"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"name": "background without image",
|
|
"reason": "invalid background",
|
|
"template": "sample",
|
|
"append": "[candidate_window.background]\nfit = 'cover'\n"
|
|
},
|
|
{
|
|
"name": "toolbar not a table",
|
|
"reason": "invalid toolbar",
|
|
"template": "sample",
|
|
"prepend": "toolbar = 1\n"
|
|
},
|
|
{
|
|
"name": "toolbar palette not a table",
|
|
"reason": "invalid toolbar",
|
|
"template": "sample",
|
|
"append": "[toolbar]\nlight = 1\n"
|
|
},
|
|
{
|
|
"name": "license not a table",
|
|
"reason": "invalid license",
|
|
"template": "sample",
|
|
"prepend": "license = 1\n"
|
|
},
|
|
{
|
|
"name": "license assets of 121 bytes",
|
|
"reason": "assets has invalid length",
|
|
"template": "sample",
|
|
"append": "[license]\nassets = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'\n"
|
|
},
|
|
{
|
|
"name": "license source of 501 bytes",
|
|
"reason": "source has invalid length",
|
|
"template": "sample",
|
|
"append": "[license]\nsource = 'sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss'\n"
|
|
},
|
|
{
|
|
"name": "toolbar_stylesheet toolbar.css with ['toolbar.css']",
|
|
"reason": null,
|
|
"template": "sample",
|
|
"prepend": "toolbar_stylesheet = 'toolbar.css'\n",
|
|
"files": [
|
|
"toolbar.css"
|
|
]
|
|
},
|
|
{
|
|
"name": "toolbar_stylesheet toolbar.css with ['toolbar.css/inner.css']",
|
|
"reason": "invalid toolbar_stylesheet",
|
|
"template": "sample",
|
|
"prepend": "toolbar_stylesheet = 'toolbar.css'\n",
|
|
"files": [
|
|
"toolbar.css/inner.css"
|
|
]
|
|
},
|
|
{
|
|
"name": "toolbar_stylesheet toolbar.css with []",
|
|
"reason": "invalid toolbar_stylesheet",
|
|
"template": "sample",
|
|
"prepend": "toolbar_stylesheet = 'toolbar.css'\n",
|
|
"files": []
|
|
},
|
|
{
|
|
"name": "toolbar_stylesheet nested/toolbar.css with ['nested/toolbar.css']",
|
|
"reason": "invalid toolbar_stylesheet",
|
|
"template": "sample",
|
|
"prepend": "toolbar_stylesheet = 'nested/toolbar.css'\n",
|
|
"files": [
|
|
"nested/toolbar.css"
|
|
]
|
|
},
|
|
{
|
|
"name": "toolbar_stylesheet .css with ['.css']",
|
|
"reason": "invalid toolbar_stylesheet",
|
|
"template": "sample",
|
|
"prepend": "toolbar_stylesheet = '.css'\n",
|
|
"files": [
|
|
".css"
|
|
]
|
|
},
|
|
{
|
|
"name": "toolbar_stylesheet toolbar.txt with []",
|
|
"reason": "invalid toolbar_stylesheet",
|
|
"template": "sample",
|
|
"prepend": "toolbar_stylesheet = 'toolbar.txt'\n",
|
|
"files": []
|
|
},
|
|
{
|
|
"name": "toolbar_stylesheet not a string",
|
|
"reason": "toolbar_stylesheet must be a string",
|
|
"template": "sample",
|
|
"prepend": "toolbar_stylesheet = true\n"
|
|
},
|
|
{
|
|
"name": "preview 'missing.png'",
|
|
"reason": "invalid preview",
|
|
"template": "sample",
|
|
"prepend": "preview = 'missing.png'\n",
|
|
"files": [
|
|
"images/preview.png"
|
|
]
|
|
},
|
|
{
|
|
"name": "preview '../private.png'",
|
|
"reason": "invalid preview",
|
|
"template": "sample",
|
|
"prepend": "preview = '../private.png'\n",
|
|
"files": [
|
|
"images/preview.png"
|
|
]
|
|
},
|
|
{
|
|
"name": "preview '/etc/passwd.png'",
|
|
"reason": "invalid preview",
|
|
"template": "sample",
|
|
"prepend": "preview = '/etc/passwd.png'\n",
|
|
"files": [
|
|
"images/preview.png"
|
|
]
|
|
},
|
|
{
|
|
"name": "preview 'images\\\\\\\\preview.png'",
|
|
"reason": "invalid preview",
|
|
"template": "sample",
|
|
"prepend": "preview = \"images\\\\preview.png\"\n",
|
|
"files": [
|
|
"images/preview.png"
|
|
]
|
|
},
|
|
{
|
|
"name": "preview ''",
|
|
"reason": "preview has invalid length",
|
|
"template": "sample",
|
|
"prepend": "preview = ''\n",
|
|
"files": [
|
|
"images/preview.png"
|
|
]
|
|
},
|
|
{
|
|
"name": "candidate not a table",
|
|
"reason": "invalid candidate colors",
|
|
"template": "sample",
|
|
"prepend": "candidate = false\n"
|
|
},
|
|
{
|
|
"name": "candidate dark = false",
|
|
"reason": "invalid candidate colors",
|
|
"template": "sample",
|
|
"append": "[candidate]\ndark = false\n"
|
|
},
|
|
{
|
|
"name": "candidate light = []",
|
|
"reason": "invalid candidate colors",
|
|
"template": "sample",
|
|
"append": "[candidate]\nlight = []\n"
|
|
},
|
|
{
|
|
"name": "candidate show_selected_bar = 'false'",
|
|
"reason": "invalid candidate colors",
|
|
"template": "sample",
|
|
"append": "[candidate.dark]\nshow_selected_bar = 'false'\n"
|
|
},
|
|
{
|
|
"name": "candidate show_selected_bar = 1",
|
|
"reason": "invalid candidate colors",
|
|
"template": "sample",
|
|
"append": "[candidate.light]\nshow_selected_bar = 1\n"
|
|
},
|
|
{
|
|
"name": "type error in light wins over long dark colour",
|
|
"reason": "invalid candidate colors",
|
|
"template": "sample",
|
|
"append": "[candidate.dark]\naccent = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'\n[candidate.light]\naccent = 1\n"
|
|
},
|
|
{
|
|
"name": "styled corner_radius_dip = 33",
|
|
"reason": "invalid corner_radius_dip",
|
|
"template": "styled",
|
|
"replace": [
|
|
[
|
|
"corner_radius_dip = 12",
|
|
"corner_radius_dip = 33"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"name": "styled corner_radius_dip = -1",
|
|
"reason": "invalid corner_radius_dip",
|
|
"template": "styled",
|
|
"replace": [
|
|
[
|
|
"corner_radius_dip = 12",
|
|
"corner_radius_dip = -1"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"name": "styled corner_radius_dip = '12'",
|
|
"reason": "invalid corner_radius_dip",
|
|
"template": "styled",
|
|
"replace": [
|
|
[
|
|
"corner_radius_dip = 12",
|
|
"corner_radius_dip = '12'"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"name": "styled align = 'top'",
|
|
"reason": "invalid decoration",
|
|
"template": "styled",
|
|
"replace": [
|
|
[
|
|
"align = 'left'",
|
|
"align = 'top'"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"name": "styled align = 3",
|
|
"reason": "align must be a string",
|
|
"template": "styled",
|
|
"replace": [
|
|
[
|
|
"align = 'left'",
|
|
"align = 3"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"name": "styled image = 'assets/missing.png'",
|
|
"reason": "invalid decoration",
|
|
"template": "styled",
|
|
"replace": [
|
|
[
|
|
"image = 'assets/character.png'",
|
|
"image = 'assets/missing.png'"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"name": "styled image = '../outside.png'",
|
|
"reason": "invalid decoration",
|
|
"template": "styled",
|
|
"replace": [
|
|
[
|
|
"image = 'assets/character.png'",
|
|
"image = '../outside.png'"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"name": "styled image = 'skin.toml'",
|
|
"reason": "invalid decoration",
|
|
"template": "styled",
|
|
"replace": [
|
|
[
|
|
"image = 'assets/character.png'",
|
|
"image = 'skin.toml'"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"name": "styled fit = 'tile'",
|
|
"reason": "invalid background",
|
|
"template": "styled",
|
|
"replace": [
|
|
[
|
|
"fit = 'contain'",
|
|
"fit = 'tile'"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"name": "styled fit = 1",
|
|
"reason": "invalid background",
|
|
"template": "styled",
|
|
"replace": [
|
|
[
|
|
"fit = 'contain'",
|
|
"fit = 1"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"name": "styled opacity = 1.5",
|
|
"reason": "invalid background",
|
|
"template": "styled",
|
|
"replace": [
|
|
[
|
|
"opacity = 0.35",
|
|
"opacity = 1.5"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"name": "styled opacity = -0.1",
|
|
"reason": "invalid background",
|
|
"template": "styled",
|
|
"replace": [
|
|
[
|
|
"opacity = 0.35",
|
|
"opacity = -0.1"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"name": "styled opacity = '1'",
|
|
"reason": "invalid background",
|
|
"template": "styled",
|
|
"replace": [
|
|
[
|
|
"opacity = 0.35",
|
|
"opacity = '1'"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"name": "styled image = 'assets/background.txt'",
|
|
"reason": "invalid background",
|
|
"template": "styled",
|
|
"replace": [
|
|
[
|
|
"image = 'assets/background.png'",
|
|
"image = 'assets/background.txt'"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"name": "styled image = '/etc/passwd.png'",
|
|
"reason": "invalid background",
|
|
"template": "styled",
|
|
"replace": [
|
|
[
|
|
"image = 'assets/background.png'",
|
|
"image = '/etc/passwd.png'"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"name": "styled [toolbar]\ncorner_radius_dip = 40",
|
|
"reason": "invalid toolbar",
|
|
"template": "styled",
|
|
"replace": [
|
|
[
|
|
"[toolbar]\ncorner_radius_dip = 8",
|
|
"[toolbar]\ncorner_radius_dip = 40"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"name": "styled background = 5",
|
|
"reason": "invalid toolbar",
|
|
"template": "styled",
|
|
"replace": [
|
|
[
|
|
"background = '#141B33'",
|
|
"background = 5"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"name": "styled background = 'aaaaaaaaaaaaaaaaaaaaaaaaaa",
|
|
"reason": "toolbar color exceeds 80 bytes",
|
|
"template": "styled",
|
|
"replace": [
|
|
[
|
|
"background = '#141B33'",
|
|
"background = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"name": "styled hover = 1",
|
|
"reason": "invalid toolbar",
|
|
"template": "styled",
|
|
"replace": [
|
|
[
|
|
"hover = 'not a colour'",
|
|
"hover = 1"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"name": "styled translation = 7",
|
|
"reason": "invalid candidate colors",
|
|
"template": "styled",
|
|
"replace": [
|
|
[
|
|
"translation = '#9FB4E0'",
|
|
"translation = 7"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"name": "styled code = ''",
|
|
"reason": "code has invalid length",
|
|
"template": "styled",
|
|
"replace": [
|
|
[
|
|
"code = 'MIT'",
|
|
"code = ''"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"name": "styled decoration image without a band",
|
|
"reason": "invalid decoration",
|
|
"template": "styled",
|
|
"replace": [
|
|
[
|
|
"top_inset_dip = 104\nwidth_dip = 96\n",
|
|
""
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"name": "styled background as gif",
|
|
"reason": null,
|
|
"template": "styled",
|
|
"replace": [
|
|
[
|
|
"image = 'assets/background.png'",
|
|
"image = 'assets/background.gif'"
|
|
]
|
|
],
|
|
"files": [
|
|
"assets/character.png",
|
|
"assets/background.gif"
|
|
]
|
|
},
|
|
{
|
|
"name": "border_width_dip at its upper bound",
|
|
"reason": null,
|
|
"template": "sample",
|
|
"replace": [
|
|
[
|
|
"min_width_dip = 10\n",
|
|
"min_width_dip = 10\nborder_width_dip = 4\n"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"name": "border_width_dip may be zero",
|
|
"reason": null,
|
|
"template": "sample",
|
|
"replace": [
|
|
[
|
|
"min_width_dip = 10\n",
|
|
"min_width_dip = 10\nborder_width_dip = 0\n"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"name": "border_width_dip above 4",
|
|
"reason": "invalid border_width_dip",
|
|
"template": "sample",
|
|
"replace": [
|
|
[
|
|
"min_width_dip = 10\n",
|
|
"min_width_dip = 10\nborder_width_dip = 4.5\n"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"name": "border_width_dip negative",
|
|
"reason": "invalid border_width_dip",
|
|
"template": "sample",
|
|
"replace": [
|
|
[
|
|
"min_width_dip = 10\n",
|
|
"min_width_dip = 10\nborder_width_dip = -1\n"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"name": "border_width_dip as a string",
|
|
"reason": "invalid border_width_dip",
|
|
"template": "sample",
|
|
"replace": [
|
|
[
|
|
"min_width_dip = 10\n",
|
|
"min_width_dip = 10\nborder_width_dip = '2'\n"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"name": "item_corner_radius_dip at its upper bound",
|
|
"reason": null,
|
|
"template": "sample",
|
|
"replace": [
|
|
[
|
|
"min_width_dip = 10\n",
|
|
"min_width_dip = 10\nitem_corner_radius_dip = 16\n"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"name": "item_corner_radius_dip above 16",
|
|
"reason": "invalid item_corner_radius_dip",
|
|
"template": "sample",
|
|
"replace": [
|
|
[
|
|
"min_width_dip = 10\n",
|
|
"min_width_dip = 10\nitem_corner_radius_dip = 17\n"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"name": "shadow none",
|
|
"reason": null,
|
|
"template": "sample",
|
|
"replace": [
|
|
[
|
|
"min_width_dip = 10\n",
|
|
"min_width_dip = 10\nshadow = 'none'\n"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"name": "shadow soft",
|
|
"reason": null,
|
|
"template": "sample",
|
|
"replace": [
|
|
[
|
|
"min_width_dip = 10\n",
|
|
"min_width_dip = 10\nshadow = 'soft'\n"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"name": "shadow strong",
|
|
"reason": null,
|
|
"template": "sample",
|
|
"replace": [
|
|
[
|
|
"min_width_dip = 10\n",
|
|
"min_width_dip = 10\nshadow = 'strong'\n"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"name": "shadow outside the enum",
|
|
"reason": "invalid shadow",
|
|
"template": "sample",
|
|
"replace": [
|
|
[
|
|
"min_width_dip = 10\n",
|
|
"min_width_dip = 10\nshadow = 'heavy'\n"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"name": "shadow not a string",
|
|
"reason": "invalid shadow",
|
|
"template": "sample",
|
|
"replace": [
|
|
[
|
|
"min_width_dip = 10\n",
|
|
"min_width_dip = 10\nshadow = 1\n"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"name": "font_family with a Chinese name",
|
|
"reason": null,
|
|
"template": "sample",
|
|
"replace": [
|
|
[
|
|
"min_width_dip = 10\n",
|
|
"min_width_dip = 10\nfont_family = '霞鹜文楷'\n"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"name": "font_family with a space",
|
|
"reason": null,
|
|
"template": "sample",
|
|
"replace": [
|
|
[
|
|
"min_width_dip = 10\n",
|
|
"min_width_dip = 10\nfont_family = 'Segoe UI'\n"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"name": "font_family of 64 bytes",
|
|
"reason": null,
|
|
"template": "sample",
|
|
"replace": [
|
|
[
|
|
"min_width_dip = 10\n",
|
|
"min_width_dip = 10\nfont_family = 'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff'\n"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"name": "font_family empty",
|
|
"reason": "invalid font_family",
|
|
"template": "sample",
|
|
"replace": [
|
|
[
|
|
"min_width_dip = 10\n",
|
|
"min_width_dip = 10\nfont_family = ''\n"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"name": "font_family of 65 bytes",
|
|
"reason": "invalid font_family",
|
|
"template": "sample",
|
|
"replace": [
|
|
[
|
|
"min_width_dip = 10\n",
|
|
"min_width_dip = 10\nfont_family = 'fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff'\n"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"name": "font_family with a comma",
|
|
"reason": "invalid font_family",
|
|
"template": "sample",
|
|
"replace": [
|
|
[
|
|
"min_width_dip = 10\n",
|
|
"min_width_dip = 10\nfont_family = 'A, B'\n"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"name": "font_family with a semicolon",
|
|
"reason": "invalid font_family",
|
|
"template": "sample",
|
|
"replace": [
|
|
[
|
|
"min_width_dip = 10\n",
|
|
"min_width_dip = 10\nfont_family = 'A;B'\n"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"name": "font_family with a quote",
|
|
"reason": "invalid font_family",
|
|
"template": "sample",
|
|
"replace": [
|
|
[
|
|
"min_width_dip = 10\n",
|
|
"min_width_dip = 10\nfont_family = \"A'B\"\n"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"name": "font_family with a brace",
|
|
"reason": "invalid font_family",
|
|
"template": "sample",
|
|
"replace": [
|
|
[
|
|
"min_width_dip = 10\n",
|
|
"min_width_dip = 10\nfont_family = 'A}B'\n"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"name": "font_family with a control character",
|
|
"reason": "invalid font_family",
|
|
"template": "sample",
|
|
"replace": [
|
|
[
|
|
"min_width_dip = 10\n",
|
|
"min_width_dip = 10\nfont_family = \"A\\u0001B\"\n"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"name": "font_family not a string",
|
|
"reason": "invalid font_family",
|
|
"template": "sample",
|
|
"replace": [
|
|
[
|
|
"min_width_dip = 10\n",
|
|
"min_width_dip = 10\nfont_family = 1\n"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"name": "page_arrows true",
|
|
"reason": null,
|
|
"template": "sample",
|
|
"replace": [
|
|
[
|
|
"min_width_dip = 10\n",
|
|
"min_width_dip = 10\npage_arrows = true\n"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"name": "page_arrows false",
|
|
"reason": null,
|
|
"template": "sample",
|
|
"replace": [
|
|
[
|
|
"min_width_dip = 10\n",
|
|
"min_width_dip = 10\npage_arrows = false\n"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"name": "page_arrows not a boolean",
|
|
"reason": "invalid page_arrows",
|
|
"template": "sample",
|
|
"replace": [
|
|
[
|
|
"min_width_dip = 10\n",
|
|
"min_width_dip = 10\npage_arrows = 'yes'\n"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"name": "Windows detail colours and menu",
|
|
"reason": null,
|
|
"template": "sample",
|
|
"append": "[candidate.dark]\ncandidate_text = '#111'\npreedit_text = '#222222'\npreedit_caret = 'rgb(1, 2, 3)'\nselected_text = '#fff'\nselected_number = '#ffffff80'\nselected_translation = 'rgba(1, 2, 3, 0.5)'\nselected_bar = '#07c160'\npreedit_background = 'transparent'\npreedit_divider = '#0000001f'\n[candidate.dark.menu]\nbackground = '#1f1f1f'\nborder = '#343434'\ntext = '#d0d0d0'\nhover = '#2a2a2a'\n"
|
|
},
|
|
{
|
|
"name": "colour with letters and spaces is unreadable but safe",
|
|
"reason": null,
|
|
"template": "sample",
|
|
"append": "[candidate.light]\naccent = 'not a colour'\n"
|
|
},
|
|
{
|
|
"name": "colour that could end a CSS declaration",
|
|
"reason": "invalid candidate colors",
|
|
"template": "sample",
|
|
"append": "[candidate.dark]\naccent = 'red; } body { display: none'\n"
|
|
},
|
|
{
|
|
"name": "colour with a brace",
|
|
"reason": "invalid candidate colors",
|
|
"template": "sample",
|
|
"append": "[candidate.light]\nsurface = '#fff}'\n"
|
|
},
|
|
{
|
|
"name": "Windows detail colour not a string",
|
|
"reason": "invalid candidate colors",
|
|
"template": "sample",
|
|
"append": "[candidate.dark]\ncandidate_text = 7\n"
|
|
},
|
|
{
|
|
"name": "Windows detail colour that could end a CSS declaration",
|
|
"reason": "invalid candidate colors",
|
|
"template": "sample",
|
|
"append": "[candidate.light]\npreedit_divider = '#000;'\n"
|
|
},
|
|
{
|
|
"name": "Windows detail colour of 81 bytes",
|
|
"reason": "candidate color exceeds 80 bytes",
|
|
"template": "sample",
|
|
"append": "[candidate.dark]\nselected_bar = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'\n"
|
|
},
|
|
{
|
|
"name": "menu not a table",
|
|
"reason": "invalid candidate colors",
|
|
"template": "sample",
|
|
"append": "[candidate.dark]\nmenu = 'x'\n"
|
|
},
|
|
{
|
|
"name": "menu colour not a string",
|
|
"reason": "invalid candidate colors",
|
|
"template": "sample",
|
|
"append": "[candidate.light.menu]\ntext = 1\n"
|
|
},
|
|
{
|
|
"name": "menu colour that could end a CSS declaration",
|
|
"reason": "invalid candidate colors",
|
|
"template": "sample",
|
|
"append": "[candidate.dark.menu]\nhover = '#fff;'\n"
|
|
},
|
|
{
|
|
"name": "toolbar colour that could end a CSS declaration",
|
|
"reason": "invalid toolbar",
|
|
"template": "sample",
|
|
"append": "[toolbar.dark]\nicon = 'red;'\n"
|
|
},
|
|
{
|
|
"name": "toolbar colour with a brace",
|
|
"reason": "invalid toolbar",
|
|
"template": "sample",
|
|
"append": "[toolbar.light]\nhover = 'a}'\n"
|
|
}
|
|
]
|
|
}
|