--- !ruby/object:RI::ClassDescription 
attributes: []

class_methods: []

comment: 
- !ruby/struct:SM::Flow::P 
  body: "The Idea:"
- !ruby/struct:SM::Flow::P 
  body: This is supposed to get us thinking about the various dimensions our testing should address. If there are states orthogonal to each other (eg. readable vs unreadable, logged in vs not logged in) each of those states should comprise a dimension in the matrix. By addressing it this way, we should be able to minimize the amount of setup/teardown code and get full coverage across our actions for all these edge cases and as a result have extremely clear tests.
- !ruby/struct:SM::Flow::P 
  body: "Example Test Matrix Specification:"
- !ruby/struct:SM::Flow::P 
  body: matrix :example, :edge1, :edge2, :edge3, ... action :action1, :OK, :e_NF, :mod, ... action :action2, :OK, :e_RO, :na, ... action ...
- !ruby/struct:SM::Flow::P 
  body: "Matrix:"
- !ruby/struct:SM::Flow::P 
  body: I envision the setups being a code that combines the different dimensions of edge case state.
- !ruby/struct:SM::Flow::P 
  body: "Something for a CMS might look like: `[df]_[ugo]_[rRwW]` where:"
- !ruby/struct:SM::Flow::P 
  body: "+ `[df]` for dir/file. + and the rest is in the style of symbolic args to chmod:"
- !ruby/struct:SM::Flow::VERB 
  body: "  + u/g/o = user, group, or other\n  + lowercase `X` == `X`able, uppercase `X` == un`X`able, where `X`\n    is read/write.\n"
- !ruby/struct:SM::Flow::P 
  body: "Action:"
- !ruby/struct:SM::Flow::P 
  body: ":new/:err/:del are just examples, they should have semantic info attached to them."
- !ruby/struct:SM::Flow::P 
  body: Use :na to specify an inapplicable edge case for that action.
- !ruby/struct:SM::Flow::P 
  body: Use :OK to specify the standard positive state. It is equivalent to a result with the same name as the action. (eg matrix_test_index). This cleans up the matrix a lot and allows for narrower and more readable columns.
- !ruby/struct:SM::Flow::P 
  body: Edge cases specific to an action that fall outside the matrix are regular tests.
- !ruby/struct:SM::Flow::P 
  body: "Matrix Methods (the legos):"
- !ruby/struct:SM::Flow::P 
  body: "Everything else basically equates to lego pieces:"
- !ruby/struct:SM::Flow::P 
  body: "+ There is one &quot;init&quot; method per matrix: matrix_init_#{descr}(setup_args) + There is one &quot;setup&quot; method per action: matrix_setup_#{action}(setup, expect) + There is one &quot;test&quot; method per result: matrix_test_#{result}(setup)"
- !ruby/struct:SM::Flow::P 
  body: "Thus, for the matrix &quot;example&quot; above, the top left-most test will end up calling:"
- !ruby/struct:SM::Flow::VERB 
  body: "    matrix_init_example(:edge1)\n    matrix_setup_action1(:edge1, :new)\n    matrix_test_new(:edge1)\n"
- !ruby/struct:SM::Flow::P 
  body: Read the action method for exact details.
constants: []

full_name: FunctionalTestMatrix
includes: []

instance_methods: 
- !ruby/object:RI::MethodSummary 
  name: action
- !ruby/object:RI::MethodSummary 
  name: matrix
name: FunctionalTestMatrix
superclass: 
