Нет, не по умолчанию. Откуда pandoc должен знать, что не является частью вашего кода?
Однако вы можете написать фильтр pandoc , который соответствует каждому блоку кода и преобразует его в необработанный HTML блок. Что-то вроде (не проверено):
function CodeBlock(elem)
html = "" .. elem.text .. "
"
return pandoc.RawBlock("html", html)
end
Обратите внимание, что вам нужно убедиться, что у вас нет другого неэкранированного HTML в ваших блоках кода.
Обновление
Если вам также нужна подсветка синтаксиса, возможно, вы захотите попробовать фильтр кодов пандока-подчеркивания .
Из-за динамического характера передачи сообщений стиля агента насмешка агентов обычно не является никакой проблемой вообще. Просто создайте агента, который получает желаемое сообщение, и Вы дома свободные. Необходимо будет, конечно, удостовериться, что этот ложный агент является одним, которому передаются сообщения, но это не должно быть проблемой пока агент, которого Вы пытаетесь протестировать, повторно используемо.
Я думаю, что сложность зависит от пары факторов...
Если это ведет себя как идемпотентная функция, только асинхронная, то это должен быть простой вопрос копирования агента, который отправляет сообщение и затем проверяет, что это получает ожидаемые сообщения назад. Вы, вероятно, хотите использовать react/receiveWithin на ложном агенте в случае, если существует ответ в разумном сроке, который можно привести к сбою вместо зависания.
Однако, если сообщения не независимы друг от друга, то необходимо протестировать его с различными последовательностями сообщений и ожидаемых результатов.
Если агент, как ожидают, будет взаимодействовать со многими другими, и это с сохранением информации, то это должно быть протестировано с несколькими агентами, отправляющими/получающими сообщения. Так как у Вас, вероятно, нет гарантии порядка, в который прибудут сообщения, несомненно, или необходимо будет переставить заказы, в которых агенты отправляют сообщения или представляют случайные паузы в агентах, генерирующих сообщения, и много раз запускают тест.
Я не знаю ни о каких предварительно созданных платформах для тестирования агентов, но Вы могли возможно обратиться к Erlang для вдохновения.
http://svn.process-one.net/contribs/trunk/eunit/doc/overview-summary.html
Мне было интересно, как самому тестировать Актеров.
Вот что я придумал, видит ли кто-нибудь проблемы с этим подходом?
Вместо того, чтобы отправлять сообщения напрямую, что если ваш актер делегировал отправку сообщения функции?
Затем ваши тесты могут заменить функцию той, которая отслеживает количество вызовов и / или аргументов, с которыми был вызван метод:
class MyActor extends Actor {
var sendMessage:(Actor, ContactMsg) => Unit = {
(contactActor, msg) => {
Log.trace("real sendMessage called")
contactActor ! msg
}
}
var reactImpl:PartialFunction(Any, Unit) = {
case INCOMING(otherActor1, otherActor2, args) => {
/* logic to test */
if(args){
sendMessage(otherActor1, OUTGOING_1("foo"))
} else {
sendMessage(otherActor2, OUTGOING_2("bar"))
}
}
}
final def act = loop {
react {
reactImpl
}
}
Ваш тестовый пример может содержать такой код:
// setup the test
var myActor = new MyActor
var target1 = new MyActor
var target2 = new MyActor
var sendMessageCalls:List[(Actor, String)] = Nil
/*
* Create a fake implementation of sendMessage
* that tracks the arguments it was called with
* in the sendMessageCalls list:
*/
myActor.sendMessage = (actor, message) => {
Log.trace("fake sendMessage called")
message match {
case OUTGOING_1(payload) => {
sendMessageCalls = (actor, payload) :: sendMessageCalls
}
case _ => { fail("Unexpected Message sent:"+message) }
}
}
// run the test
myActor.start
myActor.reactImpl(Incoming(target1, target2, true))
// assert the results
assertEquals(1, sendMessageCalls.size)
val(sentActor, sentPayload) = sendMessageCalls(0)
assertSame(target1, sentActor)
assertEquals("foo", sentPayload)
// .. etc.
Моя попытка модульного тестирования актера (оно работает). Я использую Specs в качестве основы.
object ControllerSpec extends Specification {
"ChatController" should{
"add a listener and respond SendFriends" in{
var res = false
val a = actor{}
val mos = {ChatController !? AddListener(a)}
mos match{
case SendFriends => res = true
case _ => res = false
}
res must beTrue
}
Это работает путем отправки синхронного вызова одноэлементному ChatController. ChatController отвечает, используя reply () . Ответ отправляется как возврат вызываемой функции, который сохраняется в mos. Затем сопоставление применяется к mos, получая класс дела, который был отправлен из ChatController. Если результат соответствует ожиданиям (SendFriends), установите для res значение true. Утверждение res must beTrue определяет успех или неудачу теста.
Мой одиночный объект-субъект, который я тестирую
import ldc.socialirc.model._
import scala.collection.mutable.{HashMap, HashSet}
import scala.actors.Actor
import scala.actors.Actor._
import net.liftweb.util.Helpers._
//Message types
case class AddListener(listener: Actor)
case class RemoveListener(listener: Actor)
case class SendFriends
//Data Types
case class Authority(usr: Actor, role: String)
case class Channel(channelName: String, password: String, creator: String, motd: String, users: HashSet[Authority])
object ChatController extends Actor {
// The Channel List - Shows what actors are in each Chan
val chanList = new HashMap[String, Channel]
// The Actor List - Shows what channels its in
val actorList = new HashMap[Actor, HashSet[String]]
def notifyListeners = {
}
def act = {
loop {
react {
case AddListener(listener: Actor)=>
actorList += listener -> new HashSet[String]
reply(SendFriends)
}
}
}
start //Dont forget to start
}
Несмотря на то, что он не завершен, он возвращает класс случая Sendfriends, как ожидалось.