package edge

import "testing"

func TestHasCapability(t *testing.T) {
	tests := []struct {
		name                   string
		webview2RuntimeVersion string
		capability             Capability
		want                   bool
	}{
		{
			name:                   "GetAdditionalObjects supported",
			webview2RuntimeVersion: "113.0.1774.30",
			capability:             GetAdditionalObjects,
			want:                   true,
		},
		{
			name:                   "GetAdditionalObjects not supported",
			webview2RuntimeVersion: "113.0.1774.29",
			capability:             GetAdditionalObjects,
			want:                   false,
		},
		{
			name:                   "SwipeNavigation supported",
			webview2RuntimeVersion: "94.0.992.31",
			capability:             SwipeNavigation,
			want:                   true,
		},
		{
			name:                   "SwipeNavigation not supported",
			webview2RuntimeVersion: "94.0.992.30",
			capability:             SwipeNavigation,
			want:                   false,
		},
		{
			name:                   "AllowExternalDrop supported",
			webview2RuntimeVersion: "100.0.1185.39",
			capability:             AllowExternalDrop,
			want:                   true,
		},
		{
			name:                   "AllowExternalDrop not supported",
			webview2RuntimeVersion: "100.0.1185.38",
			capability:             AllowExternalDrop,
			want:                   false,
		},
		{
			name:                   "GeneralAutofillEnabled supported",
			webview2RuntimeVersion: "100.0.1185.39",
			capability:             GeneralAutofillEnabled,
			want:                   true,
		},
		{
			name:                   "GeneralAutofillEnabled not supported",
			webview2RuntimeVersion: "100.0.1185.38",
			capability:             GeneralAutofillEnabled,
			want:                   false,
		},
		{
			name:                   "PasswordAutosaveEnabled supported",
			webview2RuntimeVersion: "100.0.1185.39",
			capability:             PasswordAutosaveEnabled,
			want:                   true,
		},
		{
			name:                   "PasswordAutosaveEnabled not supported",
			webview2RuntimeVersion: "100.0.1185.38",
			capability:             PasswordAutosaveEnabled,
			want:                   false,
		},
		{
			name:                   "ScreenCapture supported",
			webview2RuntimeVersion: "131.0.2903.40",
			capability:             ScreenCapture,
			want:                   true,
		},
		{
			name:                   "ScreenCapture not supported",
			webview2RuntimeVersion: "131.0.2903.39",
			capability:             ScreenCapture,
			want:                   false,
		},
		{
			name:                   "NonClientRegion supported",
			webview2RuntimeVersion: "131.0.2903.40",
			capability:             NonClientRegion,
			want:                   true,
		},
		{
			name:                   "NonClientRegion not supported",
			webview2RuntimeVersion: "131.0.2903.39",
			capability:             NonClientRegion,
			want:                   false,
		},
		{
			name:                   "DownloadDialog supported",
			webview2RuntimeVersion: "131.0.2903.40",
			capability:             DownloadDialog,
			want:                   true,
		},
		{
			name:                   "DownloadDialog not supported",
			webview2RuntimeVersion: "131.0.2903.39",
			capability:             DownloadDialog,
			want:                   false,
		},
		{
			name:                   "BrowserExtension supported",
			webview2RuntimeVersion: "131.0.2903.40",
			capability:             BrowserExtension,
			want:                   true,
		},
		{
			name:                   "BrowserExtension not supported",
			webview2RuntimeVersion: "131.0.2903.39",
			capability:             BrowserExtension,
			want:                   false,
		},
		{
			name:                   "BasicAuthentication supported",
			webview2RuntimeVersion: "131.0.2903.40",
			capability:             BasicAuthentication,
			want:                   true,
		},
		{
			name:                   "BasicAuthentication not supported",
			webview2RuntimeVersion: "131.0.2903.39",
			capability:             BasicAuthentication,
			want:                   false,
		},
		{
			name:                   "SaveFileDialog supported",
			webview2RuntimeVersion: "131.0.2903.40",
			capability:             SaveFileDialog,
			want:                   true,
		},
		{
			name:                   "SaveFileDialog not supported",
			webview2RuntimeVersion: "131.0.2903.39",
			capability:             SaveFileDialog,
			want:                   false,
		},
		{
			name:                   "CustomScheme supported",
			webview2RuntimeVersion: "98.0.1108.43",
			capability:             CustomScheme,
			want:                   true,
		},
		{
			name:                   "CustomScheme not supported",
			webview2RuntimeVersion: "98.0.1108.42",
			capability:             CustomScheme,
			want:                   false,
		},
		{
			name:                   "PrintToPdf supported",
			webview2RuntimeVersion: "98.0.1108.43",
			capability:             PrintToPdf,
			want:                   true,
		},
		{
			name:                   "PrintToPdf not supported",
			webview2RuntimeVersion: "98.0.1108.42",
			capability:             PrintToPdf,
			want:                   false,
		},
		{
			name:                   "SharedBuffer supported",
			webview2RuntimeVersion: "98.0.1108.43",
			capability:             SharedBuffer,
			want:                   true,
		},
		{
			name:                   "SharedBuffer not supported",
			webview2RuntimeVersion: "98.0.1108.42",
			capability:             SharedBuffer,
			want:                   false,
		},
		{
			name:                   "ServerCertificate supported",
			webview2RuntimeVersion: "98.0.1108.43",
			capability:             ServerCertificate,
			want:                   true,
		},
		{
			name:                   "ServerCertificate not supported",
			webview2RuntimeVersion: "98.0.1108.42",
			capability:             ServerCertificate,
			want:                   false,
		},
		{
			name:                   "FrameNavigation supported",
			webview2RuntimeVersion: "98.0.1108.43",
			capability:             FrameNavigation,
			want:                   true,
		},
		{
			name:                   "FrameNavigation not supported",
			webview2RuntimeVersion: "98.0.1108.42",
			capability:             FrameNavigation,
			want:                   false,
		},
		{
			name:                   "ClientCertificate supported",
			webview2RuntimeVersion: "97.0.1072.69",
			capability:             ClientCertificate,
			want:                   true,
		},
		{
			name:                   "ClientCertificate not supported",
			webview2RuntimeVersion: "97.0.1072.68",
			capability:             ClientCertificate,
			want:                   false,
		},
		{
			name:                   "ContextMenus supported",
			webview2RuntimeVersion: "97.0.1072.69",
			capability:             ContextMenus,
			want:                   true,
		},
		{
			name:                   "ContextMenus not supported",
			webview2RuntimeVersion: "97.0.1072.68",
			capability:             ContextMenus,
			want:                   false,
		},
		{
			name:                   "BackgroundColor supported",
			webview2RuntimeVersion: "97.0.1072.69",
			capability:             BackgroundColor,
			want:                   true,
		},
		{
			name:                   "BackgroundColor not supported",
			webview2RuntimeVersion: "97.0.1072.68",
			capability:             BackgroundColor,
			want:                   false,
		},
		{
			name:                   "ScriptEnabled supported",
			webview2RuntimeVersion: "97.0.1072.69",
			capability:             ScriptEnabled,
			want:                   true,
		},
		{
			name:                   "ScriptEnabled not supported",
			webview2RuntimeVersion: "97.0.1072.68",
			capability:             ScriptEnabled,
			want:                   false,
		},
		{
			name:                   "StatusBar supported",
			webview2RuntimeVersion: "97.0.1072.69",
			capability:             StatusBar,
			want:                   true,
		},
		{
			name:                   "StatusBar not supported",
			webview2RuntimeVersion: "97.0.1072.68",
			capability:             StatusBar,
			want:                   false,
		},
		{
			name:                   "WebMessageReceived supported",
			webview2RuntimeVersion: "95.0.1020.44",
			capability:             WebMessageReceived,
			want:                   true,
		},
		{
			name:                   "WebMessageReceived not supported",
			webview2RuntimeVersion: "95.0.1020.43",
			capability:             WebMessageReceived,
			want:                   false,
		},
		{
			name:                   "NewWindowRequested supported",
			webview2RuntimeVersion: "95.0.1020.44",
			capability:             NewWindowRequested,
			want:                   true,
		},
		{
			name:                   "NewWindowRequested not supported",
			webview2RuntimeVersion: "95.0.1020.43",
			capability:             NewWindowRequested,
			want:                   false,
		},
		{
			name:                   "DocumentTitleChanged supported",
			webview2RuntimeVersion: "95.0.1020.44",
			capability:             DocumentTitleChanged,
			want:                   true,
		},
		{
			name:                   "DocumentTitleChanged not supported",
			webview2RuntimeVersion: "95.0.1020.43",
			capability:             DocumentTitleChanged,
			want:                   false,
		},
		{
			name:                   "ContainsFullScreen supported",
			webview2RuntimeVersion: "95.0.1020.44",
			capability:             ContainsFullScreen,
			want:                   true,
		},
		{
			name:                   "ContainsFullScreen not supported",
			webview2RuntimeVersion: "95.0.1020.43",
			capability:             ContainsFullScreen,
			want:                   false,
		},
		{
			name:                   "WebResourceRequested supported",
			webview2RuntimeVersion: "95.0.1020.44",
			capability:             WebResourceRequested,
			want:                   true,
		},
		{
			name:                   "WebResourceRequested not supported",
			webview2RuntimeVersion: "95.0.1020.43",
			capability:             WebResourceRequested,
			want:                   false,
		},
		{
			name:                   "NavigationStarting supported",
			webview2RuntimeVersion: "94.0.992.31",
			capability:             NavigationStarting,
			want:                   true,
		},
		{
			name:                   "NavigationStarting not supported",
			webview2RuntimeVersion: "94.0.992.30",
			capability:             NavigationStarting,
			want:                   false,
		},
		{
			name:                   "NavigationCompleted supported",
			webview2RuntimeVersion: "94.0.992.31",
			capability:             NavigationCompleted,
			want:                   true,
		},
		{
			name:                   "NavigationCompleted not supported",
			webview2RuntimeVersion: "94.0.992.30",
			capability:             NavigationCompleted,
			want:                   false,
		},
		{
			name:                   "FrameNavigationStarting supported",
			webview2RuntimeVersion: "94.0.992.31",
			capability:             FrameNavigationStarting,
			want:                   true,
		},
		{
			name:                   "FrameNavigationStarting not supported",
			webview2RuntimeVersion: "94.0.992.30",
			capability:             FrameNavigationStarting,
			want:                   false,
		},
		{
			name:                   "SourceChanged supported",
			webview2RuntimeVersion: "94.0.992.31",
			capability:             SourceChanged,
			want:                   true,
		},
		{
			name:                   "SourceChanged not supported",
			webview2RuntimeVersion: "94.0.992.30",
			capability:             SourceChanged,
			want:                   false,
		},
		{
			name:                   "HistoryChanged supported",
			webview2RuntimeVersion: "94.0.992.31",
			capability:             HistoryChanged,
			want:                   true,
		},
		{
			name:                   "HistoryChanged not supported",
			webview2RuntimeVersion: "94.0.992.30",
			capability:             HistoryChanged,
			want:                   false,
		},
		{
			name:                   "DOMContentLoaded supported",
			webview2RuntimeVersion: "93.0.961.52",
			capability:             DOMContentLoaded,
			want:                   true,
		},
		{
			name:                   "DOMContentLoaded not supported",
			webview2RuntimeVersion: "93.0.961.51",
			capability:             DOMContentLoaded,
			want:                   false,
		},
		{
			name:                   "WebResourceLoaded supported",
			webview2RuntimeVersion: "93.0.961.52",
			capability:             WebResourceLoaded,
			want:                   true,
		},
		{
			name:                   "WebResourceLoaded not supported",
			webview2RuntimeVersion: "93.0.961.51",
			capability:             WebResourceLoaded,
			want:                   false,
		},
		{
			name:                   "ScriptDialogOpening supported",
			webview2RuntimeVersion: "93.0.961.52",
			capability:             ScriptDialogOpening,
			want:                   true,
		},
		{
			name:                   "ScriptDialogOpening not supported",
			webview2RuntimeVersion: "93.0.961.51",
			capability:             ScriptDialogOpening,
			want:                   false,
		},
		{
			name:                   "PermissionRequested supported",
			webview2RuntimeVersion: "93.0.961.52",
			capability:             PermissionRequested,
			want:                   true,
		},
		{
			name:                   "PermissionRequested not supported",
			webview2RuntimeVersion: "93.0.961.51",
			capability:             PermissionRequested,
			want:                   false,
		},
		{
			name:                   "ProcessFailed supported",
			webview2RuntimeVersion: "93.0.961.52",
			capability:             ProcessFailed,
			want:                   true,
		},
		{
			name:                   "ProcessFailed not supported",
			webview2RuntimeVersion: "93.0.961.51",
			capability:             ProcessFailed,
			want:                   false,
		},
		{
			name:                   "AcceleratorKeyPressed supported",
			webview2RuntimeVersion: "92.0.902.78",
			capability:             AcceleratorKeyPressed,
			want:                   true,
		},
		{
			name:                   "AcceleratorKeyPressed not supported",
			webview2RuntimeVersion: "92.0.902.77",
			capability:             AcceleratorKeyPressed,
			want:                   false,
		},
		{
			name:                   "ZoomFactorChanged supported",
			webview2RuntimeVersion: "92.0.902.78",
			capability:             ZoomFactorChanged,
			want:                   true,
		},
		{
			name:                   "ZoomFactorChanged not supported",
			webview2RuntimeVersion: "92.0.902.77",
			capability:             ZoomFactorChanged,
			want:                   false,
		},
		{
			name:                   "MoveFocusRequested supported",
			webview2RuntimeVersion: "92.0.902.78",
			capability:             MoveFocusRequested,
			want:                   true,
		},
		{
			name:                   "MoveFocusRequested not supported",
			webview2RuntimeVersion: "92.0.902.77",
			capability:             MoveFocusRequested,
			want:                   false,
		},
		{
			name:                   "DevToolsProtocol supported",
			webview2RuntimeVersion: "92.0.902.78",
			capability:             DevToolsProtocol,
			want:                   true,
		},
		{
			name:                   "DevToolsProtocol not supported",
			webview2RuntimeVersion: "92.0.902.77",
			capability:             DevToolsProtocol,
			want:                   false,
		},
		{
			name:                   "BrowserProcessExited supported",
			webview2RuntimeVersion: "92.0.902.78",
			capability:             BrowserProcessExited,
			want:                   true,
		},
		{
			name:                   "BrowserProcessExited not supported",
			webview2RuntimeVersion: "92.0.902.77",
			capability:             BrowserProcessExited,
			want:                   false,
		},
		{
			name:                   "DefaultDownloadDialog supported",
			webview2RuntimeVersion: "91.0.864.41",
			capability:             DefaultDownloadDialog,
			want:                   true,
		},
		{
			name:                   "DefaultDownloadDialog not supported",
			webview2RuntimeVersion: "91.0.864.40",
			capability:             DefaultDownloadDialog,
			want:                   false,
		},
		{
			name:                   "DefaultContextMenus supported",
			webview2RuntimeVersion: "91.0.864.41",
			capability:             DefaultContextMenus,
			want:                   true,
		},
		{
			name:                   "DefaultContextMenus not supported",
			webview2RuntimeVersion: "91.0.864.40",
			capability:             DefaultContextMenus,
			want:                   false,
		},
		{
			name:                   "FaviconChanged supported",
			webview2RuntimeVersion: "91.0.864.41",
			capability:             FaviconChanged,
			want:                   true,
		},
		{
			name:                   "FaviconChanged not supported",
			webview2RuntimeVersion: "91.0.864.40",
			capability:             FaviconChanged,
			want:                   false,
		},
		{
			name:                   "WindowCloseRequested supported",
			webview2RuntimeVersion: "91.0.864.41",
			capability:             WindowCloseRequested,
			want:                   true,
		},
		{
			name:                   "WindowCloseRequested not supported",
			webview2RuntimeVersion: "91.0.864.40",
			capability:             WindowCloseRequested,
			want:                   false,
		},
		{
			name:                   "RasterizationScale supported",
			webview2RuntimeVersion: "91.0.864.41",
			capability:             RasterizationScale,
			want:                   true,
		},
		{
			name:                   "RasterizationScale not supported",
			webview2RuntimeVersion: "91.0.864.40",
			capability:             RasterizationScale,
			want:                   false,
		},
		{
			name:                   "SecurityUpdated supported",
			webview2RuntimeVersion: "91.0.864.41",
			capability:             SecurityUpdated,
			want:                   true,
		},
		{
			name:                   "SecurityUpdated not supported",
			webview2RuntimeVersion: "91.0.864.40",
			capability:             SecurityUpdated,
			want:                   false,
		},
		{
			name:                   "ProcessInfoReceived supported",
			webview2RuntimeVersion: "91.0.864.41",
			capability:             ProcessInfoReceived,
			want:                   true,
		},
		{
			name:                   "ProcessInfoReceived not supported",
			webview2RuntimeVersion: "91.0.864.40",
			capability:             ProcessInfoReceived,
			want:                   false,
		},
		{
			name:                   "FramePermissionRequested supported",
			webview2RuntimeVersion: "91.0.864.41",
			capability:             FramePermissionRequested,
			want:                   true,
		},
		{
			name:                   "FramePermissionRequested not supported",
			webview2RuntimeVersion: "91.0.864.40",
			capability:             FramePermissionRequested,
			want:                   false,
		},
		{
			name:                   "ClearBrowsingData supported",
			webview2RuntimeVersion: "91.0.864.41",
			capability:             ClearBrowsingData,
			want:                   true,
		},
		{
			name:                   "ClearBrowsingData not supported",
			webview2RuntimeVersion: "91.0.864.40",
			capability:             ClearBrowsingData,
			want:                   false,
		},
		{
			name:                   "IsMutedChanged supported",
			webview2RuntimeVersion: "91.0.864.41",
			capability:             IsMutedChanged,
			want:                   true,
		},
		{
			name:                   "IsMutedChanged not supported",
			webview2RuntimeVersion: "91.0.864.40",
			capability:             IsMutedChanged,
			want:                   false,
		},
	}

	for _, tt := range tests {
		t.Run(tt.name, func(t *testing.T) {
			if got := HasCapability(tt.webview2RuntimeVersion, tt.capability); got != tt.want {
				t.Errorf("HasCapability() = %v, want %v", got, tt.want)
			}
		})
	}
}
