DynamoDS/Dynamo — pull request #1511 by Benglin (2014-04-15 12:02:14+00:00)
Title: Extended command framework to support custom node authoring

Background
---
This pull request is meant to fix the following defect tracked internally:
- [MAGN-2598 Recorded tests does not support custom node](http://adsk-oss.myjetbrains.com/youtrack/issue/MAGN-2598)

Enhancements/Changes
---
The following changes are made with this pull request:
- Two new recordable commands ```CreateCustomNodeCommand``` and ```SwitchTabCommand``` added
- ```DynamoViewModel.CreateCustomNodeImpl``` and ```SwitchTabImpl``` methods added to work with new commands
- ```OnRequestsFunctionNamePrompt``` moved from ```DynamoModel``` to ```DynamoViewModel```
- ```DynamoModel.CurrentWorkspace``` property setter now notifies property change only for real changes

Shortcomings
---
- Switching of active tabs are recorded as ```SwitchTabCommand``` which works with zero-based tab index. But closing of an active tab is not currently recorded, playback of ```SwitchTabCommand``` might result in error if any of the active tabs is closed during a recording session.

Unit Testing
---
The following new test cases are added to verify this work:
- ```DynamoCoreUITests.RecordedTests.CreateAndUseCustomNode```
- ```DynamoCoreUITests.RecordedTests.TestCreateCustomNodeCommand```
- ```DynamoCoreUITests.RecordedTests.TestSwitchTabCommand```

Recommended Test Scenarios
---
The following manual testing is recommended. These use cases exercise the code changes in this pull request (but they might not be recordable by themselves):
1. Test collapsing few nodes into a custom node (both on home workspace and custom workspace)
2. Test editing custom property through context menu (in home workspace, on a custom node)
3. Test editing custom property through canvas (in custom node workspace)