public function testNormalize_Complex()
{
$subExpression = new Expression();
$subExpression->mod('$fieldName', 2);
$expression = Expression::normalize(array('field1' => 1, 'field2' => $subExpression, 'field3' => function ($expression) {
$expression->add('$fieldName', 5);
}, 'field4' => array('subField41' => 1, 'subField42' => $subExpression, 'subField43' => function ($expression) {
$expression->add('$fieldName', 5);
}, 'subField44' => array('subField441' => 1, 'subField442' => $subExpression, 'subField443' => function ($expression) {
$expression->add('$fieldName', 5);
}))));
$this->assertEquals(array('field1' => 1, 'field2' => array('$mod' => array('$fieldName', 2)), 'field3' => array('$add' => array('$fieldName', 5)), 'field4' => array('subField41' => 1, 'subField42' => array('$mod' => array('$fieldName', 2)), 'subField43' => array('$add' => array('$fieldName', 5)), 'subField44' => array('subField441' => 1, 'subField442' => array('$mod' => array('$fieldName', 2)), 'subField443' => array('$add' => array('$fieldName', 5))))), $expression);
}