protected function assertFormletsEqual(Formlet $a, Formlet $b, $value, $contains_applicable) { // Two formlets are considered equal, when their observable output // is equal (that is like extensional equality?) $ns_a = NameSource::instantiate("test"); $ns_b = NameSource::instantiate("test"); $ns = NameSource::instantiate("test"); $repr_a = $a->instantiate($ns_a); $repr_b = $b->instantiate($ns_b); $name_and_ns = $ns->getNameAndNext(); $inp = array($name_and_ns["name"] => "100"); $val_a = $repr_a["collector"]->collect($inp); $val_b = $repr_b["collector"]->collect($inp); // This will only work if equal works as expected on the result, that // is the thing checked really is equality and not identity. if (!$contains_applicable) { if ($val_a->isError()) { print_r($val_a->toDict()); } $this->assertEquals($val_a->get(), $val_b->get()); } else { $this->assertEquals($val_a->apply($value)->get(), $val_b->apply($value)->get()); } $dict_a = new RenderDict($inp, $val_a); $dict_b = new RenderDict($inp, $val_b); $rendered_a = $repr_a["builder"]->build()->render(); $rendered_b = $repr_b["builder"]->build()->render(); $this->assertEquals($rendered_a, $rendered_b); $rendered_a2 = $repr_a["builder"]->buildWithDict($dict_a)->render(); $rendered_b2 = $repr_b["builder"]->buildWithDict($dict_b)->render(); $this->assertEquals($rendered_a2, $rendered_b2); }