/** * Perform a full mail-merge, substituting multiple tokens for multiple * contacts in multiple messages. */ public function testFull() { $p = new TokenProcessor($this->dispatcher, array('controller' => __CLASS__)); $p->addMessage('greeting_html', 'Good morning, <p>{contact.display_name}</p>. {custom.foobar} Bye!', 'text/html'); $p->addMessage('greeting_text', 'Good morning, {contact.display_name}. {custom.foobar} Bye!', 'text/plain'); $p->addRow()->context(array('contact_id' => 123))->format('text/plain')->tokens(array('contact' => array('display_name' => 'What'))); $p->addRow()->context(array('contact_id' => 4))->format('text/plain')->tokens(array('contact' => array('display_name' => 'Who'))); $p->addRow()->context(array('contact_id' => 10))->format('text/plain')->tokens(array('contact' => array('display_name' => 'Darth Vader'))); $expectHtml = array(0 => 'Good morning, <p>What</p>. #0123 is a good number. Trickster {contact.display_name}. Bye!', 1 => 'Good morning, <p>Who</p>. #0004 is a good number. Trickster {contact.display_name}. Bye!', 2 => 'Good morning, <p>Darth Vader</p>. #0010 is a good number. Trickster {contact.display_name}. Bye!'); $expectText = array(0 => 'Good morning, What. #0123 is a good number. Trickster {contact.display_name}. Bye!', 1 => 'Good morning, Who. #0004 is a good number. Trickster {contact.display_name}. Bye!', 2 => 'Good morning, Darth Vader. #0010 is a good number. Trickster {contact.display_name}. Bye!'); $rowCount = 0; foreach ($p->evaluate()->getRows() as $key => $row) { /** @var TokenRow */ $this->assertTrue($row instanceof TokenRow); $this->assertEquals($expectHtml[$key], $row->render('greeting_html')); $this->assertEquals($expectText[$key], $row->render('greeting_text')); $rowCount++; } $this->assertEquals(3, $rowCount); $this->assertEquals(0, $this->counts['onListTokens']); // This may change in the future. $this->assertEquals(1, $this->counts['onEvalTokens']); }
/** * Render a message. * * @param string $name * The name previously registered with TokenProcessor::addMessage. * @return string * Fully rendered message, with tokens merged. */ public function render($name) { return $this->tokenProcessor->render($name, $this); }