All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
pxr/usdImaging/usdviewq/blackBoxTesting.md
1 # Usdview Black Box Testing
2 
3 The testusdview automated testing harness allows us to test many of
4 usdview's features, but not all. As we develop, when we fix or deploy
5 a feature for which it does not seem reasonable to add a testusdview
6 test-case, we should instead add a test for it here.
7 
8 ## Viewport prim Vising and Invising
9 
10 ### Goal
11 
12 Ensure that when we select (including multi-select) prims (or models, when
13 "Pick Mode" is "Models") in the viewport, and **then** use the hotkeys for
14 _Make Invisible_, _Make Visible_, _Vis Only_, _Remove Session Visibility_, and
15 _Remove All Session Visibility_, that:
16 - The prims actually appear/disappear as expected in the viewport
17 - When the selected items are viewed in the Prim View browser subsequently,
18  the **Vis** column shows "I" appropriately for invisible prims and their
19  descendants, and "V" elsewhere (except for non-Imageable prims such as
20  Materials and Shaders, which should show nothing).
21 
22 ### Method
23 
24 - Start usdview with a sufficiently complex asset such that not all prims are
25  open in the Prim View browser. The Kitchen_set.usd asset works well.
26 - In the viewport, Shift-select several pieces of geometry, from different
27  parts of the scene.
28 - Run through the visibility operations via hotkey (or RMB context menu),
29  ensuring that geometry disappears and reappears. E.g. Ctrl-h to invis/hide,
30  followed by Shift-h to vis/unhide.
31 - After invising some geometry, hover mouse over Prim View, and hit 'f' to
32  frame the selection(s), which should cause rows to be expanded, showing the
33  selected prims. You should see that the newly exposed prims have 'I' in the
34  _Vis_ column (as well as all of their descendants, if you are in "Pick Models"
35  mode, and open the model in the browser).
36 
37 
38 ## Vis and Draw Mode Columns Do Not Affect Selection
39 
40 ### Goal
41 
42 The Prim View Browser should select prims when the user clicks within the
43 __Prim Name__ or __Type__ columns, but when clicking in the __Vis__ or
44 __Draw Mode__ columns, the current selection should not be affected, and instead
45 the user should just be modifying the prim's visibility or Draw Mode.
46 
47 After initial deployment of this feature, there was an uncaught regression in
48 which interacting with a prim/row when the selected prim/row was not visible
49 in the browser would cause the browser to scroll to the selected prim and cancel
50 the interaction.
51 
52 
53 ## Prim View Framing
54 
55 ### Goal
56 
57 When making selections in the viewport, we do not expect the "expansion state"
58 of the Prim View to change. Instead, if selected prim(s) is already visible in
59 the browser, then it should highlight (become selected); but if it is not
60 visible/exposed, then only its visible ancestors should be highlighted in a
61 secondary, muted selection color.
62 
63 ### Method
64 
65 - Start usdview with a sufficiently complex asset such that not all prims are
66  open in the Prim View browser. The Kitchen_set.usd asset works well.
67 - Pick some geometry in the viewer, and ensure we see desired behavior in
68  browser, as described in Goal above. (The top of the kitchen table is a
69  good one.)
70 - Now hover over the browser, and hit 'f' to frame the selection (or first
71  selected prim if a multi-selection).
72 - Reset Prim View with Alt-3 (Show > Prim View Depth > Level 3)
73 - Go back to the viewport, and select something else (e.g refridgerator door).
74  Ensure browser updates only in that a different ancestor selection is made
75  (since the refridgerator is in the _North_Group_ as opposed to the
76  _DiningTable_group_ ).
77 - Hover over the Prim View, and use the arrow/cursor keys to change selection.
78  Upon first keypress, the selected item should become visible/expanded, and
79  uniquely selected (if you had a multi-selection), and navigation should
80  then proceed as expected using up/down, left/rught keys.
81 
void if(!TfPyIsInitialized())
Invokes wrapFunc to wrap type T if T is not already wrapped.
Definition: pyUtils.h:212