#!perl -wT
# Win32::GUI::Constants test suite
# $Id: 52_tags.t,v 1.4 2006/08/03 22:19:07 robertemay Exp $
#
# - check a single constant export

use strict;
use warnings;

BEGIN { $| = 1 } # Autoflush

# Check that the rest of the tags don't change from release to release
# without us knowing. IF YOU HAVE CHANGED THE TAG DEFINITIONS, THEN UPDATE
# THIS TEST FILE TO REFLECT THE CHANGES.

use Test::More;

my @tags = qw( common customdraw stockobjects accelerator animation bitmap brush
button class combobox cursor datetime dc font header icon imagelist label listbox listview
mdi menu monthcal notifyicon pen progressbar rebar region richedit scrollbar slider
splitter statusbar tabstrip textfield timer toolbar tooltip treeview updown window );

plan tests => (2 * @tags);

my %RESULTS = (
  common => [ qw( CW_USEDEFAULT ) ],
  customdraw => [
qw( CDDS_ITEM CDDS_ITEMPOSTERASE CDDS_PREERASE CDDS_POSTERASE CDDS_ITEMPOSTPAINT
    CDDS_ITEMPREERASE CDDS_SUBITEM CDDS_ITEMPREPAINT CDDS_POSTPAINT CDDS_PREPAINT
    CDRF_NOTIFYITEMDRAW CDRF_NEWFONT CDRF_SKIPDEFAULT CDRF_NOTIFYPOSTPAINT
    CDRF_NOTIFYSUBITEMDRAW CDRF_DODEFAULT CDRF_NOTIFYPOSTERASE ) ],
  stockobjects => [
qw( WHITE_BRUSH LTGRAY_BRUSH GRAY_BRUSH DKGRAY_BRUSH BLACK_BRUSH NULL_BRUSH HOLLOW_BRUSH
    WHITE_PEN BLACK_PEN NULL_PEN OEM_FIXED_FONT ANSI_FIXED_FONT ANSI_VAR_FONT SYSTEM_FONT
    DEVICE_DEFAULT_FONT DEFAULT_PALETTE SYSTEM_FIXED_FONT DEFAULT_GUI_FONT DC_BRUSH
    DC_PEN ) ],
  accelerator => [
qw( VK_OEM_PERIOD VK_VOLUME_DOWN VK_NUMLOCK VK_NONAME VK_LMENU VK_KANA VK_OEM_FINISH VK_V
    VK_F16 VK_ADD VK_OEM_RESET VK_END VK_LCONTROL VK_OEM_FJ_ROYA VK_NUMPAD0 VK_NEXT VK_O
    VK_OEM_PA1 VK_CANCEL VK_SLEEP VK_RIGHT VK_RETURN VK_F2 VK_LAUNCH_MAIL VK_BACK VK_F20
    VK_Z VK_ESCAPE VK_CAPITAL VK_M VK_PRINT VK_NONCONVERT VK_H VK_SHIFT VK_SPACE VK_F19
    VK_EREOF VK_3 VK_I VK_EXSEL VK_KANJI VK_LAUNCH_APP2 VK_F9 VK_NUMPAD9 VK_CONTROL
    VK_RWIN VK_VOLUME_MUTE VK_F10 VK_CRSEL VK_PA1 VK_B VK_F4 VK_PLAY VK_DIVIDE
    VK_OEM_COPY VK_SUBTRACT VK_DELETE VK_8 VK_NUMPAD5 VK_OEM_WSCTRL VK_NUMPAD2 VK_F24
    VK_LAUNCH_MEDIA_SELECT VK_OEM_ATTN VK_OEM_1 VK_JUNJA VK_F17 VK_F12 VK_OEM_CUSEL VK_A
    VK_HANGUL VK_ICO_HELP VK_R VK_OEM_5 VK_APPS VK_OEM_FJ_TOUROKU VK_OEM_PA2
    VK_OEM_NEC_EQUAL VK_F6 VK_LBUTTON VK_PRIOR VK_OEM_3 VK_F8 VK_UP VK_NUMPAD3 VK_C
    VK_SEPARATOR VK_MENU VK_SELECT VK_HANGEUL VK_X VK_INSERT VK_HELP VK_1 VK_BROWSER_HOME
    VK_F22 VK_DECIMAL VK_XBUTTON2 VK_F13 VK_OEM_AX VK_F VK_OEM_7 VK_OEM_FJ_LOYA VK_P
    VK_ZOOM VK_E VK_OEM_COMMA VK_OEM_FJ_MASSHOU VK_RMENU VK_RBUTTON VK_MEDIA_NEXT_TRACK
    VK_ICO_00 VK_OEM_ENLW VK_EXECUTE VK_F7 VK_OEM_BACKTAB VK_XBUTTON1 VK_F15
    VK_BROWSER_FORWARD VK_4 VK_NUMPAD8 VK_6 VK_N VK_T VK_PAUSE VK_LEFT VK_U
    VK_BROWSER_STOP VK_F3 VK_SNAPSHOT VK_F1 VK_ACCEPT VK_PACKET VK_MULTIPLY VK_G VK_ATTN
    VK_PROCESSKEY VK_K VK_LWIN VK_BROWSER_FAVORITES VK_NUMPAD1 VK_CONVERT VK_HOME
    VK_OEM_AUTO VK_RCONTROL VK_SCROLL VK_OEM_FJ_JISHO VK_OEM_6 VK_ICO_CLEAR VK_5
    VK_OEM_MINUS VK_L VK_F5 VK_S VK_TAB VK_OEM_CLEAR VK_OEM_PA3 VK_OEM_102 VK_RSHIFT
    VK_OEM_PLUS VK_LAUNCH_APP1 VK_BROWSER_SEARCH VK_MEDIA_PLAY_PAUSE VK_OEM_2 VK_CLEAR
    VK_9 VK_NUMPAD7 VK_NUMPAD6 VK_FINAL VK_MEDIA_STOP VK_2 VK_F21 VK_Y VK_F18 VK_Q VK_D
    VK_DOWN VK_F23 VK_F11 VK_OEM_8 VK_7 VK_0 VK_J VK_MEDIA_PREV_TRACK VK_MBUTTON VK_F14
    VK_BROWSER_REFRESH VK_BROWSER_BACK VK_VOLUME_UP VK_OEM_JUMP VK_NUMPAD4 VK_HANJA VK_W
    VK_LSHIFT VK_OEM_4 VK_MODECHANGE ) ],
  animation => [ qw( ACS_CENTER ACS_TRANSPARENT ACS_AUTOPLAY ACS_TIMER ) ],
  bitmap => [
qw( OBM_DNARROWD OBM_UPARROWI OBM_DNARROWI OBM_CHECKBOXES OBM_RGARROWI OBM_DNARROW
    OBM_RGARROW OBM_ZOOMD OBM_CHECK OBM_BTNCORNERS OBM_RESTORED OBM_MNARROW
    OBM_REDUCE OBM_UPARROWD OBM_RESTORE OBM_LFARROWI OBM_BTSIZE OBM_RGARROWD
    OBM_REDUCED OBM_SIZE OBM_ZOOM OBM_LFARROW OBM_LFARROWD OBM_COMBO OBM_UPARROW
    OBM_CLOSE ) ],
  brush => [ qw(  ) ],
  button => [
qw( BS_PUSHBUTTON BS_DEFPUSHBUTTON BS_CHECKBOX BS_AUTOCHECKBOX BS_RADIOBUTTON BS_3STATE
    BS_AUTO3STATE BS_GROUPBOX BS_USERBUTTON BS_AUTORADIOBUTTON BS_PUSHBOX BS_OWNERDRAW
    BS_TYPEMASK BS_LEFTTEXT BS_TEXT BS_ICON BS_BITMAP BS_LEFT BS_RIGHT BS_CENTER BS_TOP
    BS_BOTTOM BS_VCENTER BS_PUSHLIKE BS_MULTILINE BS_NOTIFY BS_FLAT BS_RIGHTBUTTON
    IMAGE_CURSOR IMAGE_BITMAP IMAGE_ENHMETAFILE IMAGE_ICON ) ],
  class => [
qw( COLOR_WINDOW COLOR_BACKGROUND COLOR_3DHIGHLIGHT COLOR_MENUTEXT COLOR_WINDOWTEXT
    COLOR_BTNSHADOW COLOR_GRAYTEXT COLOR_INACTIVEBORDER COLOR_BTNHIGHLIGHT COLOR_INFOTEXT
    COLOR_BTNTEXT COLOR_SCROLLBAR COLOR_MENUHILIGHT COLOR_CAPTIONTEXT COLOR_3DSHADOW
    COLOR_HOTLIGHT COLOR_MENUBAR COLOR_INACTIVECAPTIONTEXT COLOR_HIGHLIGHTTEXT
    COLOR_BTNHILIGHT COLOR_HIGHLIGHT COLOR_GRADIENTINACTIVECAPTION COLOR_MENU
    COLOR_BTNFACE COLOR_ACTIVECAPTION COLOR_3DDKSHADOW COLOR_ACTIVEBORDER
    COLOR_WINDOWFRAME COLOR_INACTIVECAPTION COLOR_INFOBK COLOR_APPWORKSPACE
    COLOR_GRADIENTACTIVECAPTION COLOR_DESKTOP COLOR_3DFACE COLOR_3DHILIGHT COLOR_3DLIGHT
    CS_DROPSHADOW CS_PARENTDC CS_NOCLOSE CS_VREDRAW CS_BYTEALIGNCLIENT CS_OWNDC
    CS_CLASSDC CS_BYTEALIGNWINDOW CS_DBLCLKS CS_IME CS_HREDRAW CS_SAVEBITS
    CS_GLOBALCLASS ) ],
  combobox => [
qw( CBS_SIMPLE CBS_DROPDOWN CBS_DROPDOWNLIST CBS_OWNERDRAWFIXED CBS_OWNERDRAWVARIABLE
    CBS_AUTOHSCROLL CBS_OEMCONVERT CBS_SORT CBS_HASSTRINGS CBS_NOINTEGRALHEIGHT
    CBS_DISABLENOSCROLL CBS_UPPERCASE CBS_LOWERCASE CBES_EX_NOEDITIMAGE
    CBES_EX_NOEDITIMAGEINDENT CBES_EX_PATHWORDBREAKPROC CBES_EX_NOSIZELIMIT
    CBES_EX_CASESENSITIVE ) ],
  cursor => [
qw( IDC_ARROW IDC_IBEAM IDC_WAIT IDC_CROSS IDC_UPARROW IDC_SIZENWSE
    IDC_SIZENESW IDC_SIZEWE IDC_SIZENS IDC_SIZEALL IDC_NO IDC_HAND
    IDC_APPSTARTING IDC_HELP IDC_HSPLIT IDC_VSPLIT
    OCR_NORMAL OCR_IBEAM OCR_WAIT OCR_CROSS OCR_UP OCR_SIZENWSE
    OCR_SIZENESW OCR_SIZEWE OCR_SIZENS OCR_SIZEALL OCR_NO OCR_HAND
    OCR_APPSTARTING ) ],
  datetime => [
qw( DTS_LONGDATEFORMAT DTS_APPCANPARSE DTS_TIMEFORMAT DTS_SHORTDATEFORMAT DTS_UPDOWN
    DTS_RIGHTALIGN DTS_SHORTDATECENTURYFORMAT DTS_SHOWNONE ) ],
  dc => [
qw( OPAQUE TRANSPARENT BDR_OUTER BDR_INNER BDR_SUNKENOUTER BDR_RAISED BDR_SUNKEN
    BDR_SUNKENINNER BDR_RAISEDINNER BDR_RAISEDOUTER EDGE_SUNKEN EDGE_ETCHED EDGE_BUMP
    EDGE_RAISED BF_FLAT BF_DIAGONAL_ENDBOTTOMRIGHT BF_MIDDLE BF_DIAGONAL_ENDTOPLEFT
    BF_DIAGONAL_ENDTOPRIGHT BF_LEFT BF_DIAGONAL_ENDBOTTOMLEFT BF_SOFT BF_DIAGONAL
    BF_RECT BF_MONO BF_RIGHT BF_TOPLEFT BF_BOTTOM BF_ADJUST BF_TOP BF_TOPRIGHT
    BF_BOTTOMRIGHT BF_BOTTOMLEFT CLR_INVALID HWND_DESKTOP DFC_SCROLL DFC_CAPTION
    DFC_MENU DFC_BUTTON DFC_POPUPMENU DFCS_SCROLLSIZEGRIP DFCS_PUSHED DFCS_SCROLLDOWN
    DFCS_MENUARROWRIGHT DFCS_SCROLLRIGHT DFCS_SCROLLCOMBOBOX DFCS_FLAT DFCS_BUTTONRADIO
    DFCS_CAPTIONRESTORE DFCS_CAPTIONCLOSE DFCS_CHECKED DFCS_BUTTONRADIOMASK
    DFCS_BUTTON3STATE DFCS_BUTTONPUSH DFCS_ADJUSTRECT DFCS_SCROLLUP DFCS_MENUCHECK
    DFCS_HOT DFCS_CAPTIONHELP DFCS_BUTTONRADIOIMAGE DFCS_INACTIVE DFCS_CAPTIONMAX
    DFCS_TRANSPARENT DFCS_SCROLLLEFT DFCS_SCROLLSIZEGRIPRIGHT DFCS_MONO DFCS_MENUARROW
    DFCS_CAPTIONMIN DFCS_BUTTONCHECK DFCS_MENUBULLET DT_WORDBREAK DT_BOTTOM DT_SINGLELINE
    DT_CALCRECT DT_RIGHT DT_EXPANDTABS DT_TOP DT_INTERNAL DT_EDITCONTROL DT_MODIFYSTRING
    DT_PREFIXONLY DT_PATH_ELLIPSIS DT_NOPREFIX DT_EXTERNALLEADING DT_RTLREADING
    DT_NOCLIP DT_TABSTOP DT_HIDEPREFIX DT_WORD_ELLIPSIS DT_CENTER DT_LEFT
    DT_NOFULLWIDTHCHARBREAK DT_END_ELLIPSIS DT_VCENTER FLOODFILLBORDER FLOODFILLSURFACE
    OBJ_PEN OBJ_MEMDC OBJ_BRUSH OBJ_DC OBJ_METAFILE OBJ_METADC OBJ_ENHMETADC OBJ_REGION
    OBJ_COLORSPACE OBJ_BITMAP OBJ_EXTPEN OBJ_PAL OBJ_FONT OBJ_ENHMETAFILE R2_NOT R2_BLACK
    R2_MERGENOTPEN R2_NOTXORPEN R2_XORPEN R2_WHITE R2_NOTMERGEPEN R2_MASKPEN
    R2_MASKPENNOT R2_COPYPEN R2_MERGEPENNOT R2_NOTCOPYPEN R2_NOP R2_MASKNOTPEN
    R2_NOTMASKPEN R2_MERGEPEN SRCCOPY SRCPAINT SRCAND SRCINVERT SRCERASE NOTSRCCOPY
    NOTSRCERASE MERGECOPY MERGEPAINT PATCOPY PATPAINT PATINVERT DSTINVERT BLACKNESS
    WHITENESS NOMIRRORBITMAP CAPTUREBLT ERROR NULLREGION SIMPLEREGION COMPLEXREGION
    RGN_DIFF RGN_AND RGN_MIN RGN_MAX RGN_XOR RGN_COPY RGN_ERROR RGN_OR BS_SOLID BS_NULL
    BS_HOLLOW BS_HATCHED BS_PATTERN BS_INDEXED BS_DIBPATTERN BS_DIBPATTERNPT
    BS_PATTERN8X8 BS_DIBPATTERN8X8 BS_MONOPATTERN HS_VERTICAL HS_CROSS HS_HORIZONTAL
    HS_DIAGCROSS HS_FDIAGONAL HS_BDIAGONAL PS_JOIN_BEVEL PS_ENDCAP_MASK PS_DASHDOT
    PS_ENDCAP_FLAT PS_STYLE_MASK PS_DASHDOTDOT PS_COSMETIC PS_INSIDEFRAME PS_TYPE_MASK
    PS_SOLID PS_JOIN_MITER PS_ENDCAP_SQUARE PS_JOIN_ROUND PS_ENDCAP_ROUND PS_DASH
    PS_JOIN_MASK PS_GEOMETRIC PS_DOT PS_USERSTYLE PS_NULL PS_ALTERNATE BLACKONWHITE
    WHITEONBLACK COLORONCOLOR HALFTONE STRETCH_ORSCANS STRETCH_HALFTONE
    STRETCH_DELETESCANS STRETCH_ANDSCANS ) ],
  font => [ qw(  ) ],
  header => [
qw( HDS_HORZ HDS_BUTTONS HDS_HOTTRACK HDS_HIDDEN HDS_DRAGDROP HDS_FULLDRAG HDS_FILTERBAR
    HDS_FLAT ) ],
  icon => [
qw( IDI_EXCLAMATION IDI_ASTERISK IDI_APPLICATION IDI_HAND IDI_INFORMATION IDI_ERROR
    IDI_QUESTION IDI_WARNING IDI_WINLOGO IDI_DEFAULTICON
    OIC_WINLOGO OIC_BANG OIC_QUES OIC_INFORMATION OIC_NOTE OIC_SAMPLE OIC_WARNING
    OIC_ERROR OIC_HAND ) ],
  imagelist => [
qw( ILC_COLOR16 ILC_MIRROR ILC_COLOR24 ILC_COLORDDB ILC_COLOR8 ILC_COLOR
    ILC_PERITEMMIRROR ILC_MASK ILC_COLOR32 ILC_PALETTE ILC_COLOR4 ILD_ROP ILD_OVERLAYMASK
    ILD_BLEND25 ILD_PRESERVEALPHA ILD_DPISCALE ILD_SELECTED ILD_BLEND50 ILD_FOCUS
    ILD_BLEND ILD_TRANSPARENT ILD_SCALE ILD_NORMAL ILD_IMAGE ILD_MASK ILS_ALPHA
    ILS_SATURATE ILS_GLOW ILS_NORMAL ILS_SHADOW CLR_NONE CLR_DEFAULT IMAGE_CURSOR
    IMAGE_BITMAP IMAGE_ENHMETAFILE IMAGE_ICON ) ],
  label => [ qw( IMAGE_CURSOR IMAGE_BITMAP IMAGE_ENHMETAFILE IMAGE_ICON ) ],
  listbox => [
qw( LBS_NOTIFY LBS_SORT LBS_NOREDRAW LBS_MULTIPLESEL LBS_OWNERDRAWFIXED LBS_OWNERDRAWVARIABLE
    LBS_HASSTRINGS LBS_USETABSTOPS LBS_NOINTEGRALHEIGHT LBS_MULTICOLUMN LBS_WANTKEYBOARDINPUT
    LBS_EXTENDEDSEL LBS_DISABLENOSCROLL LBS_NODATA LBS_NOSEL LBS_COMBOBOX LBS_STANDARD   ) ],
  listview => [
qw( LVS_ICON LVS_REPORT LVS_SMALLICON LVS_LIST LVS_TYPEMASK LVS_SINGLESEL LVS_SHOWSELALWAYS
    LVS_SORTASCENDING LVS_SORTDESCENDING LVS_SHAREIMAGELISTS LVS_NOLABELWRAP LVS_AUTOARRANGE
    LVS_EDITLABELS LVS_OWNERDATA LVS_NOSCROLL LVS_TYPESTYLEMASK LVS_ALIGNTOP LVS_ALIGNLEFT
    LVS_ALIGNMASK LVS_OWNERDRAWFIXED LVS_NOCOLUMNHEADER LVS_NOSORTHEADER LVS_EX_GRIDLINES
    LVS_EX_SUBITEMIMAGES LVS_EX_CHECKBOXES LVS_EX_TRACKSELECT LVS_EX_HEADERDRAGDROP
    LVS_EX_FULLROWSELECT LVS_EX_ONECLICKACTIVATE LVS_EX_TWOCLICKACTIVATE LVS_EX_FLATSB
    LVS_EX_REGIONAL LVS_EX_INFOTIP LVS_EX_UNDERLINEHOT LVS_EX_UNDERLINECOLD
    LVS_EX_MULTIWORKAREAS LVS_EX_LABELTIP LVS_EX_BORDERSELECT LVS_EX_DOUBLEBUFFER
    LVS_EX_HIDELABELS LVS_EX_SINGLEROW LVS_EX_SNAPTOGRID LVS_EX_SIMPLESELECT LVIS_FOCUSED
    LVIS_SELECTED LVIS_CUT LVIS_DROPHILITED LVIS_GLOW LVIS_ACTIVATING LVIS_OVERLAYMASK
    LVIS_STATEIMAGEMASK LVSIL_NORMAL LVSIL_SMALL LVSIL_STATE LVIR_BOUNDS LVIR_ICON
    LVIR_LABEL LVIR_SELECTBOUNDS CLR_NONE ) ],
  mdi => [ qw(  ) ],
  menu => [
qw( MF_STRING MF_POPUP MF_BYCOMMAND MF_RIGHTJUSTIFY MF_USECHECKBITMAPS MF_MENUBREAK
    MF_SEPARATOR MF_BITMAP MF_HILITE MF_BYPOSITION MF_SYSMENU MF_APPEND MF_DELETE
    MF_DEFAULT MF_CHECKED MF_DISABLED MF_UNCHECKED MF_CHANGE MF_MOUSESELECT MF_GRAYED
    MF_REMOVE MF_OWNERDRAW MF_MENUBARBREAK MF_HELP MF_UNHILITE MF_ENABLED SC_VSCROLL
    SC_HOTKEY SC_MOUSEMENU SC_CONTEXTHELP SC_RESTORE SC_NEXTWINDOW SC_KEYMENU SC_MAXIMIZE
    SC_ARRANGE SC_CLOSE SC_MINIMIZE SC_MONITORPOWER SC_ZOOM SC_MOVE SC_TASKLIST
    SC_HSCROLL SC_ICON SC_DEFAULT SC_SEPARATOR SC_PREVWINDOW SC_SIZE SC_SCREENSAVE
    TPM_VERPOSANIMATION TPM_CENTERALIGN TPM_NONOTIFY TPM_HORPOSANIMATION TPM_NOANIMATION
    TPM_RETURNCMD TPM_HORNEGANIMATION TPM_HORIZONTAL TPM_TOPALIGN TPM_VERTICAL
    TPM_LAYOUTRTL TPM_RIGHTALIGN TPM_VERNEGANIMATION TPM_VCENTERALIGN TPM_BOTTOMALIGN
    TPM_LEFTBUTTON TPM_RIGHTBUTTON TPM_LEFTALIGN TPM_RECURSE ) ],
  monthcal => [
qw( MCS_DAYSTATE MCS_MULTISELECT MCS_WEEKNUMBERS MCS_NOTODAYCIRCLE MCS_NOTODAY
    MCSC_TITLEBK MCSC_BACKGROUND MCSC_TRAILINGTEXT MCSC_TITLETEXT MCSC_MONTHBK
    MCSC_TEXT ) ],
  notifyicon => [ qw(  ) ],
  pen => [
qw( PS_JOIN_BEVEL PS_ENDCAP_MASK PS_DASHDOT PS_ENDCAP_FLAT PS_STYLE_MASK PS_DASHDOTDOT
    PS_COSMETIC PS_INSIDEFRAME PS_TYPE_MASK PS_SOLID PS_JOIN_MITER PS_ENDCAP_SQUARE
    PS_JOIN_ROUND PS_ENDCAP_ROUND PS_DASH PS_JOIN_MASK PS_GEOMETRIC PS_DOT PS_USERSTYLE
    PS_NULL PS_ALTERNATE ) ],
  progressbar => [ qw( CLR_DEFAULT ) ],
  rebar => [
qw( CLR_DEFAULT RBBS_GRIPPERALWAYS RBBS_FIXEDBMP RBBS_VARIABLEHEIGHT RBBS_BREAK
    RBBS_USECHEVRON RBBS_TOPALIGN RBBS_HIDETITLE RBBS_NOVERT RBBS_NOGRIPPER
    RBBS_FIXEDSIZE RBBS_CHILDEDGE RBBS_HIDDEN ) ],
  region => [ qw( RGN_DIFF RGN_AND RGN_MIN RGN_MAX RGN_XOR RGN_COPY RGN_ERROR RGN_OR ) ],
  richedit => [
qw( CP_MACCP CP_UTF8 CP_OEMCP CP_SYMBOL CP_ACP CP_UTF7 CP_THREAD_ACP EM_GETWORDBREAKPROC
    EM_LINEFROMCHAR EM_GETMARGINS EM_SETIMESTATUS EM_POSFROMCHAR EM_GETSEL EM_SETMODIFY
    EM_GETFIRSTVISIBLELINE EM_SETHANDLE EM_EMPTYUNDOBUFFER EM_GETMODIFY EM_FMTLINES
    EM_GETIMESTATUS EM_SETREADONLY EM_GETLIMITTEXT EM_LINESCROLL EM_GETLINE EM_SETSEL
    EM_LINEINDEX EM_REPLACESEL EM_GETPASSWORDCHAR EM_LIMITTEXT EM_SETPASSWORDCHAR
    EM_SCROLLCARET EM_UNDO EM_SETTABSTOPS EM_SETRECTNP EM_GETLINECOUNT EM_SETLIMITTEXT
    EM_GETHANDLE EM_SCROLL EM_LINELENGTH EM_SETWORDBREAKPROC EM_CHARFROMPOS EM_CANUNDO
    EM_SETMARGINS EM_GETTHUMB EM_GETRECT EM_SETRECT ENM_CHANGE ENM_MOUSEEVENTS
    ENM_KEYEVENTS ENM_PROTECTED ENM_PARAGRAPHEXPANDED ENM_LANGCHANGE ENM_UPDATE
    ENM_SCROLLEVENTS ENM_REQUESTRESIZE ENM_LINK ENM_SCROLL ENM_PAGECHANGE ENM_NONE
    ENM_OBJECTPOSITIONS ENM_CORRECTTEXT ENM_SELCHANGE ENM_LOWFIRTF ENM_DRAGDROPDONE
    ENM_DROPFILES ENM_IMECHANGE ES_AUTOHSCROLL ES_CENTER ES_OEMCONVERT ES_AUTOVSCROLL
    ES_NUMBER ES_RIGHT ES_READONLY ES_MULTILINE ES_PASSWORD ES_LOWERCASE ES_LEFT
    ES_NOHIDESEL ES_UPPERCASE ES_WANTRETURN GT_DEFAULT GT_RAWTEXT GT_NOHIDDENTEXT
    GT_USECRLF GT_SELECTION SF_NCRFORNONASCII SF_TEXT SF_TEXTIZED SF_RTFVAL SF_UNICODE
    SF_RTF SF_RTFNOOBJS SF_USECODEPAGE SFF_PLAINRTF SFF_PWD SFF_SELECTION
    SFF_WRITEXTRAPAR SFF_PERSISTVIEWSCALE SFF_KEEPDOCINFO ) ],
  scrollbar => [
qw( SB_THUMBTRACK SB_LINEUP SB_BOTTOM SB_LEFT SB_ENDSCROLL SB_PAGEUP SB_HORZ SB_BOTH
    SB_THUMBPOSITION SB_PAGELEFT SB_LINERIGHT SB_LINELEFT SB_VERT SB_RIGHT SB_CTL
    SB_PAGEDOWN SB_TOP SB_LINEDOWN SB_PAGERIGHT ) ],
  slider => [ qw( TBTS_BOTTOM TBTS_LEFT TBTS_RIGHT TBTS_TOP ) ],
  splitter => [ qw(  ) ],
  statusbar => [
qw( CLR_DEFAULT SBT_NOBORDERS SBT_POPOUT SBT_OWNERDRAW SBT_NOTABPARSING
    SBT_RTLREADING ) ],
  tabstrip => [ qw(  ) ],
  textfield => [
qw( EM_GETWORDBREAKPROC EM_LINEFROMCHAR EM_GETMARGINS EM_SETIMESTATUS EM_POSFROMCHAR
    EM_GETSEL EM_SETMODIFY EM_GETFIRSTVISIBLELINE EM_SETHANDLE EM_EMPTYUNDOBUFFER
    EM_GETMODIFY EM_FMTLINES EM_GETIMESTATUS EM_SETREADONLY EM_GETLIMITTEXT EM_LINESCROLL
    EM_GETLINE EM_SETSEL EM_LINEINDEX EM_REPLACESEL EM_GETPASSWORDCHAR EM_LIMITTEXT
    EM_SETPASSWORDCHAR EM_SCROLLCARET EM_UNDO EM_SETTABSTOPS EM_SETRECTNP EM_GETLINECOUNT
    EM_SETLIMITTEXT EM_GETHANDLE EM_SCROLL EM_LINELENGTH EM_SETWORDBREAKPROC
    EM_CHARFROMPOS EM_CANUNDO EM_SETMARGINS EM_GETTHUMB EM_GETRECT EM_SETRECT
    ES_AUTOHSCROLL ES_CENTER ES_OEMCONVERT ES_AUTOVSCROLL ES_NUMBER ES_RIGHT ES_READONLY
    ES_MULTILINE ES_PASSWORD ES_LOWERCASE ES_LEFT ES_NOHIDESEL ES_UPPERCASE
    ES_WANTRETURN ) ],
  timer => [ qw(  ) ],
  toolbar => [
qw( BTNS_WHOLEDROPDOWN BTNS_DROPDOWN BTNS_NOPREFIX BTNS_GROUP BTNS_SHOWTEXT
    BTNS_CHECKGROUP BTNS_SEP BTNS_AUTOSIZE BTNS_BUTTON BTNS_CHECK TBSTATE_CHECKED
    TBSTATE_ELLIPSES TBSTATE_WRAP TBSTATE_MARKED TBSTATE_HIDDEN TBSTATE_PRESSED
    TBSTATE_ENABLED TBSTATE_INDETERMINATE TBSTYLE_EX_HIDECLIPPEDBUTTONS
    TBSTYLE_TRANSPARENT TBSTYLE_CHECK TBSTYLE_FLAT TBSTYLE_LIST TBSTYLE_CHECKGROUP
    TBSTYLE_SEP TBSTYLE_BUTTON TBSTYLE_DROPDOWN TBSTYLE_ALTDRAG TBSTYLE_TOOLTIPS
    TBSTYLE_EX_DRAWDDARROWS TBSTYLE_REGISTERDROP TBSTYLE_GROUP TBSTYLE_EX_DOUBLEBUFFER
    TBSTYLE_AUTOSIZE TBSTYLE_NOPREFIX TBSTYLE_EX_MIXEDBUTTONS TBSTYLE_WRAPABLE
    TBSTYLE_CUSTOMERASE I_IMAGENONE I_IMAGECALLBACK CLR_DEFAULT TRANSPARENT OPAQUE
    HINST_COMMCTRL ) ],
  tooltip => [
qw( TTDT_AUTOMATIC TTDT_RESHOW TTDT_AUTOPOP TTDT_INITIAL TTF_IDISHWND TTF_CENTERTIP
    TTF_RTLREADING TTF_SUBCLASS TTF_TRACK TTF_ABSOLUTE TTF_TRANSPARENT TTF_PARSELINKS
    TTF_DI_SETITEM TTM_ACTIVATE TTM_SETDELAYTIME TTM_ADDTOOL TTM_DELTOOL TTM_NEWTOOLRECT
    TTM_RELAYEVENT TTM_GETTOOLINFO TTM_SETTOOLINFO TTM_HITTEST TTM_GETTEXT
    TTM_UPDATETIPTEXT TTM_GETTOOLCOUNT TTM_ENUMTOOLS TTM_GETCURRENTTOOL
    TTM_WINDOWFROMPOINT TTM_TRACKACTIVATE TTM_TRACKPOSITION TTM_SETTIPBKCOLOR
    TTM_SETTIPTEXTCOLOR TTM_GETDELAYTIME TTM_GETTIPBKCOLOR TTM_GETTIPTEXTCOLOR
    TTM_SETMAXTIPWIDTH TTM_GETMAXTIPWIDTH TTM_SETMARGIN TTM_GETMARGIN TTM_POP
    TTM_UPDATE TTM_GETBUBBLESIZE TTM_ADJUSTRECT TTM_SETTITLE TTN_GETDISPINFO
    TTN_NEEDTEXT TTN_SHOW TTN_POP ) ],
  treeview => [
qw( CLR_DEFAULT TVGN_PREVIOUS TVGN_DROPHILITE TVGN_PREVIOUSVISIBLE TVGN_CHILD TVGN_ROOT
    TVGN_NEXTVISIBLE TVGN_PARENT TVGN_LASTVISIBLE TVGN_FIRSTVISIBLE TVGN_NEXT
    TVGN_CARET TVHT_NOWHERE TVHT_ONITEMICON TVHT_ONITEMLABEL TVHT_ONITEM
    TVHT_ONITEMINDENT TVHT_ONITEMBUTTON TVHT_ONITEMRIGHT TVHT_ONITEMSTATEICON
    TVHT_ABOVE TVHT_BELOW TVHT_TORIGHT TVHT_TOLEFT ) ],
  updown => [ qw(  ) ],
  window => [
qw( DS_CENTERMOUSE DS_CENTER DS_FIXEDSYS DS_CONTROL DS_SETFOREGROUND
    DS_3DLOOK DS_NOIDLEMSG DS_SETFONT DS_LOCALEDIT DS_CONTEXTHELP DS_SHELLFONT
    DS_MODALFRAME DS_NOFAILCREATE DS_ABSALIGN DS_SYSMODAL IDYES IDABORT IDCONTINUE IDNO
    IDIGNORE IDTIMEOUT IDTRYAGAIN IDOK IDCLOSE IDHELP IDCANCEL IDRETRY MA_NOACTIVATE
    MA_NOACTIVATEANDEAT MA_ACTIVATEANDEAT MA_ACTIVATE MK_XBUTTON1 MK_LBUTTON MK_CONTROL
    MK_XBUTTON2 MK_RBUTTON MK_SHIFT MK_MBUTTON NM_RCLICK NM_RELEASEDCAPTURE NM_RDBLCLK
    NM_LDOWN NM_KILLFOCUS NM_TOOLTIPSCREATED NM_SETCURSOR NM_SETFOCUS NM_THEMECHANGED
    NM_OUTOFMEMORY NM_CUSTOMDRAW NM_CLICK NM_RDOWN NM_CHAR NM_HOVER NM_DBLCLK
    NM_NCHITTEST NM_RETURN NM_KEYDOWN RDW_NOINTERNALPAINT RDW_ERASENOW RDW_UPDATENOW
    RDW_NOCHILDREN RDW_NOFRAME RDW_VALIDATE RDW_ERASE RDW_INVALIDATE RDW_NOERASE
    RDW_FRAME RDW_INTERNALPAINT RDW_ALLCHILDREN SIZE_MAXIMIZED SIZE_RESTORED
    SIZE_MAXSHOW SIZE_MINIMIZED SIZE_MAXHIDE SW_SHOWNORMAL SW_HIDE SW_NORMAL
    SW_SHOWMINIMIZED SW_SHOWMAXIMIZED SW_SHOW SW_FORCEMINIMIZE SW_RESTORE SW_SHOWDEFAULT
    SW_MAXIMIZE SW_MINIMIZE SW_SHOWNOACTIVATE SW_SHOWMINNOACTIVE SW_SHOWNA WA_INACTIVE
    WA_ACTIVE WA_CLICKACTIVE WM_NCACTIVATE WM_SYSKEYUP WM_ERASEBKGND WM_CHANGEUISTATE
    WM_USERCHANGED WM_NOTIFYFORMAT WM_CHARTOITEM WM_MDIICONARRANGE WM_QUERYENDSESSION
    WM_APPCOMMAND WM_NCMOUSELEAVE WM_MOUSEMOVE WM_SETCURSOR WM_TIMER WM_WININICHANGE
    WM_MDINEXT WM_IME_CONTROL WM_COMPACTING WM_DRAWCLIPBOARD WM_FONTCHANGE WM_PRINTCLIENT
    WM_MDIMAXIMIZE WM_MDISETMENU WM_MDIREFRESHMENU WM_SHOWWINDOW WM_XBUTTONUP
    WM_SYSCOLORCHANGE WM_UNDO WM_CTLCOLORDLG WM_RBUTTONDBLCLK WM_INPUT WM_CTLCOLORSTATIC
    WM_MDICREATE WM_PAINTCLIPBOARD WM_CHILDACTIVATE WM_MEASUREITEM WM_DESTROY WM_NCCREATE
    WM_MOUSEFIRST WM_MOUSELAST WM_TABLET_LAST WM_QUIT WM_MENUCOMMAND
    WM_IME_STARTCOMPOSITION WM_MDIACTIVATE WM_SYSDEADCHAR WM_USER WM_SYNCPAINT
    WM_MOVING WM_NCMOUSEHOVER WM_KEYFIRST WM_MBUTTONDOWN WM_SYSCHAR WM_MBUTTONDBLCLK
    WM_CHANGECBCHAIN WM_PALETTECHANGED WM_GETTEXT WM_CLOSE WM_RENDERFORMAT WM_SETFONT
    WM_SIZING WM_RBUTTONUP WM_CTLCOLORBTN WM_INPUTLANGCHANGEREQUEST WM_CONTEXTMENU
    WM_WINDOWPOSCHANGING WM_CTLCOLORSCROLLBAR WM_KILLFOCUS WM_DROPFILES
    WM_WTSSESSION_CHANGE WM_MDIDESTROY WM_VSCROLLCLIPBOARD WM_NCHITTEST WM_ENDSESSION
    WM_IME_KEYLAST WM_HELP WM_TABLET_FIRST WM_IME_KEYDOWN WM_ACTIVATE WM_MOUSEHOVER
    WM_MOUSELEAVE WM_IME_CHAR WM_DISPLAYCHANGE WM_INPUTLANGCHANGE WM_NCLBUTTONUP
    WM_SETICON WM_NULL WM_AFXLAST WM_KEYUP WM_DELETEITEM WM_RENDERALLFORMATS
    WM_ICONERASEBKGND WM_MOUSEWHEEL WM_ACTIVATEAPP WM_NOTIFY WM_IME_COMPOSITION
    WM_THEMECHANGED WM_IME_COMPOSITIONFULL WM_SYSKEYDOWN WM_NCXBUTTONDBLCLK
    WM_XBUTTONDOWN WM_IME_SETCONTEXT WM_COMMAND WM_SIZE WM_LBUTTONDBLCLK WM_ENABLE
    WM_NEXTDLGCTL WM_MDITILE WM_KEYLAST WM_GETHOTKEY WM_CTLCOLOREDIT WM_PALETTEISCHANGING
    WM_DEVMODECHANGE WM_INITMENUPOPUP WM_WINDOWPOSCHANGED WM_SIZECLIPBOARD WM_INITDIALOG
    WM_PARENTNOTIFY WM_MDIGETACTIVE WM_QUEUESYNC WM_MOVE WM_DEADCHAR WM_NCLBUTTONDBLCLK
    WM_NCLBUTTONDOWN WM_MENUGETOBJECT WM_NCDESTROY WM_GETDLGCODE WM_HOTKEY
    WM_DESTROYCLIPBOARD WM_QUERYOPEN WM_IME_ENDCOMPOSITION WM_COPY WM_MENUCHAR
    WM_TIMECHANGE WM_IME_NOTIFY WM_HANDHELDFIRST WM_NCCALCSIZE WM_CTLCOLORMSGBOX
    WM_MENURBUTTONUP WM_LBUTTONUP WM_RBUTTONDOWN WM_EXITSIZEMOVE WM_SETTEXT WM_GETOBJECT
    WM_VKEYTOITEM WM_NCXBUTTONDOWN WM_EXITMENULOOP WM_SYSCOMMAND WM_COPYDATA WM_VSCROLL
    WM_LBUTTONDOWN WM_NEXTMENU WM_CLEAR WM_KEYDOWN WM_CUT WM_QUERYUISTATE
    WM_ASKCBFORMATNAME WM_QUERYDRAGICON WM_NCRBUTTONDBLCLK WM_PRINT WM_HSCROLLCLIPBOARD
    WM_CANCELJOURNAL WM_PENWINFIRST WM_MENUSELECT WM_UNINITMENUPOPUP WM_IME_SELECT
    WM_CREATE WM_UPDATEUISTATE WM_ENTERMENULOOP WM_SETREDRAW WM_PASTE WM_DRAWITEM
    WM_MOUSEACTIVATE WM_SETFOCUS WM_NCRBUTTONDOWN WM_ENTERSIZEMOVE WM_STYLECHANGING
    WM_INITMENU WM_CTLCOLORLISTBOX WM_GETICON WM_AFXFIRST WM_NCMOUSEMOVE WM_SETTINGCHANGE
    WM_STYLECHANGED WM_PAINT WM_NCMBUTTONUP WM_HSCROLL WM_XBUTTONDBLCLK
    WM_QUERYNEWPALETTE WM_MBUTTONUP WM_SETHOTKEY WM_APP WM_POWER WM_DEVICECHANGE WM_TCARD
    WM_GETMINMAXINFO WM_CANCELMODE WM_NCMBUTTONDOWN WM_GETFONT WM_POWERBROADCAST WM_CHAR
    WM_MDICASCADE WM_IME_KEYUP WM_COMPAREITEM WM_NCPAINT WM_NCMBUTTONDBLCLK
    WM_CAPTURECHANGED WM_UNICHAR WM_IME_REQUEST WM_NCXBUTTONUP WM_MENUDRAG
    WM_SPOOLERSTATUS WM_COMMNOTIFY WM_MDIRESTORE WM_PENWINLAST WM_NCRBUTTONUP
    WM_HANDHELDLAST WM_ENTERIDLE WM_PAINTICON WM_GETTEXTLENGTH WS_EX_TOPMOST
    WS_EX_ACCEPTFILES WS_CHILDWINDOW WS_EX_RIGHT WS_EX_LAYERED WS_EX_PALETTEWINDOW
    WS_EX_CLIENTEDGE WS_EX_WINDOWEDGE WS_EX_STATICEDGE WS_MAXIMIZE WS_EX_OVERLAPPEDWINDOW
    WS_TILEDWINDOW WS_EX_LEFT WS_CHILD WS_POPUP WS_TABSTOP WS_BORDER WS_CLIPSIBLINGS
    WS_HSCROLL WS_EX_TRANSPARENT WS_EX_LEFTSCROLLBAR WS_SYSMENU WS_DISABLED WS_TILED
    WS_CLIPCHILDREN WS_EX_CONTEXTHELP WS_EX_LAYOUTRTL WS_EX_NOINHERITLAYOUT
    WS_EX_APPWINDOW WS_CAPTION WS_EX_DLGMODALFRAME WS_MINIMIZEBOX WS_EX_CONTROLPARENT
    WS_VSCROLL WS_POPUPWINDOW WS_EX_TOOLWINDOW WS_EX_LTRREADING WS_VISIBLE
    WS_EX_COMPOSITED WS_EX_NOPARENTNOTIFY WS_EX_RIGHTSCROLLBAR WS_EX_RTLREADING
    WS_MAXIMIZEBOX WS_EX_NOACTIVATE WS_EX_MDICHILD WS_ICONIC WS_SIZEBOX
    WS_OVERLAPPEDWINDOW WS_THICKFRAME WS_DLGFRAME WS_OVERLAPPED WS_MINIMIZE WS_GROUP ) ],
);

require Win32::GUI::Constants::Tags;

for my $tag (@tags) {
	my @TAGS = @{Win32::GUI::Constants::Tags::tag($tag)};
	my @REQUIRED = @{$RESULTS{$tag}};

	#both lists the same size?
	ok(@TAGS == @REQUIRED, ":$tag is correct size");

	#both lists contain the same items?
	my %h;
	for my $item (@TAGS, @REQUIRED) {
		$h{$item}++;
	}
	my @errors;
	for my $item (keys %h) {
		next if $h{$item} == 2;
		push @errors, $item;
	}
	ok(!@errors, "Lists have no differing items (@errors)");
}
