Release v0.5.0: isolate screenshot editor and support manifest-based updates
This commit is contained in:
+16
-4
@@ -4,10 +4,9 @@
|
||||
#include <iostream>
|
||||
int main()
|
||||
{
|
||||
auto temp=std::filesystem::temp_directory_path()/(L"KSwitcher-editor-test-"+std::to_wstring(GetCurrentProcessId()));
|
||||
try {
|
||||
INITCOMMONCONTROLSEX controls{sizeof(controls),ICC_STANDARD_CLASSES}; InitCommonControlsEx(&controls);
|
||||
ks::App app(GetModuleHandleW(nullptr),true,temp);
|
||||
ks::ScreenshotHost app{GetModuleHandleW(nullptr)};
|
||||
app.window=CreateWindowW(L"STATIC",L"",0,0,0,0,0,HWND_MESSAGE,nullptr,app.instance,nullptr);
|
||||
ks::Capture c(app);
|
||||
c.image=std::make_unique<ks::Surface>(320,240);
|
||||
@@ -18,6 +17,8 @@ int main()
|
||||
auto require=[](bool ok,const char *message){ if(!ok) throw std::runtime_error(message); };
|
||||
require(window!=nullptr,"editor creation");
|
||||
ks::edit(window,c); ShowWindow(window,SW_HIDE);
|
||||
require(GetWindow(window,GW_OWNER)==nullptr && (GetWindowLongPtrW(window,GWL_EXSTYLE)&WS_EX_APPWINDOW),
|
||||
"editor is an independent Alt+Tab application window");
|
||||
require(GetDlgItem(window,50)!=nullptr && c.statusHeight>0,"status bar is created");
|
||||
require(c.pencilCursor!=nullptr,"pencil drawing cursor loads");
|
||||
for(int size:{32,48,64,96}) {
|
||||
@@ -30,7 +31,7 @@ int main()
|
||||
DestroyCursor(cursor);
|
||||
}
|
||||
wchar_t windowTitle[128]{}; GetWindowTextW(window,windowTitle,128);
|
||||
require(std::wstring(windowTitle)==L"KSwitcher — Screenshot","title has no usage hints");
|
||||
require(std::wstring(windowTitle)==L"KSwitcher — Screenshot #1","title includes editor index without usage hints");
|
||||
RECT client{}; GetClientRect(window,&client);
|
||||
require(c.view.bottom<=client.bottom-c.statusHeight,"image does not overlap status bar");
|
||||
ks::updateStatus(c);
|
||||
@@ -124,6 +125,18 @@ int main()
|
||||
SendMessageW(window,WM_COMMAND,18,0);
|
||||
require(ks::screenshotTextBounds(ks::screenshotArrowLabel(c.marks[0])).left==beforeNudge.left+5,"redo restores one nudge");
|
||||
SetWindowPos(window,nullptr,80,60,720,500,SWP_NOZORDER|SWP_SHOWWINDOW);
|
||||
ks::copy(window,c,[](HWND,const ks::Clip &clip)->DWORD {
|
||||
if(clip.formats.empty()) throw std::runtime_error("copy produced no image");
|
||||
return 0;
|
||||
});
|
||||
require(IsWindow(window) && c.copied,"copy publishes screenshot and keeps editor open");
|
||||
c.selected=0; c.selectedLabel=false;
|
||||
SendMessageW(window,WM_KEYDOWN,VK_RIGHT,0);
|
||||
require(!c.copied,"editing after copy requires confirmation again");
|
||||
c.copied=true; SendMessageW(window,WM_COMMAND,12,0);
|
||||
require(!c.copied,"undo after copy requires confirmation again");
|
||||
c.copied=true; SendMessageW(window,WM_COMMAND,18,0);
|
||||
require(!c.copied,"redo after copy requires confirmation again");
|
||||
SetPropW(window,L"ConfirmationCentered",nullptr);
|
||||
SetTimer(window,987,10,[](HWND owner,UINT,UINT_PTR id,DWORD) {
|
||||
EnumThreadWindows(GetCurrentThreadId(),[](HWND popup,LPARAM parent)->BOOL {
|
||||
@@ -150,7 +163,6 @@ int main()
|
||||
SendMessageW(window,WM_CLOSE,0,0);
|
||||
require(!IsWindow(window),"copied screenshot closes without confirmation");
|
||||
DestroyWindow(app.window); app.window=nullptr;
|
||||
std::filesystem::remove_all(temp);
|
||||
std::cout<<"Passed screenshot editor UI integration checks\n";
|
||||
} catch(const std::exception &e) { std::cerr<<e.what()<<'\n'; return 1; }
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user