@@ 52,13 52,13 @@ extra-doc-files:    CHANGELOG.md
 
 library
     -- Modules exported by the library.
-    exposed-modules:  Data.Text.ParagraphLayout
+    exposed-modules:
+        Data.Text.ParagraphLayout,
+        Data.Text.ParagraphLayout.Run,
+        Data.Text.ParagraphLayout.Span
 
     -- Modules included in this library but not exported.
-    other-modules:
-        Data.Text.ParagraphLayout.Run,
-        Data.Text.ParagraphLayout.Span,
-        Data.Text.Script
+    other-modules:    Data.Text.Script
 
     -- LANGUAGE extensions used by modules in this package.
     -- other-extensions:
 
@@ 2,16 2,31 @@ module Main (main) where
 
 import qualified Data.ByteString as BS
 import Data.List (intersperse)
-import Data.Text.Glyphize (Font, GlyphInfo, GlyphPos, createFace, createFont)
+import Data.Text.Glyphize
+    (Direction(..)
+    ,Font
+    ,GlyphInfo
+    ,GlyphPos
+    ,createFace
+    ,createFont
+    )
 import Data.Text.Lazy (pack)
 
 import Test.Hspec
 import Test.Hspec.Golden
 import System.FilePath ((</>))
 import Data.Text.ParagraphLayout
+import Data.Text.ParagraphLayout.Run
 
 type LayoutOutput = [[(GlyphInfo,GlyphPos)]]
 
+emptySpan :: Font -> Span
+emptySpan font = Span
+    { spanText = pack ""
+    , spanFont = font
+    , spanLanguage = Nothing
+    }
+
 czechHello :: Font -> Span
 czechHello font = Span
     { spanText = pack "Ahoj, světe!"
@@ 19,6 34,13 @@ czechHello font = Span
     , spanLanguage = Just "cs"
     }
 
+serbianMixedScript :: Font -> Span
+serbianMixedScript font = Span
+    { spanText = pack "Vikipedija (Википедија)"
+    , spanFont = font
+    , spanLanguage = Just "sr"
+    }
+
 prettyShow :: LayoutOutput -> String
 prettyShow = showOutput
     where
@@ 47,8 69,43 @@ main = do
     let face = createFace ttf 0
     let font = createFont face
     hspec $ do
+        describe "spanToRuns" $ do
+            it "handles span with no text" $ do
+                spanToRuns (emptySpan font) `shouldBe` []
+            it "handles Czech hello" $ do
+                let inputSpan = czechHello font
+                let runs = spanToRuns inputSpan
+                runs `shouldBe`
+                    [ Run
+                        { runText = spanText inputSpan
+                        , runDirection = Just DirLTR
+                        , runScript = Just "Latn"
+                        , runOriginalSpan = inputSpan
+                        }
+                    ]
+            it "handles Serbian with mixed script" $ do
+                let inputSpan = serbianMixedScript font
+                let runs = spanToRuns inputSpan
+                runs `shouldBe`
+                    [ Run
+                        -- TODO: We might want both parentheses in the same run.
+                        { runText = pack "Vikipedija ("
+                        , runDirection = Just DirLTR
+                        , runScript = Just "Latn"
+                        , runOriginalSpan = inputSpan
+                        }
+                    , Run
+                        { runText = pack "Википедија)"
+                        , runDirection = Just DirLTR
+                        , runScript = Just "Cyrl"
+                        , runOriginalSpan = inputSpan
+                        }
+                    ]
+
         describe "layout" $ do
-            it "handles empty input" $ do
+            it "handles input with no spans" $ do
                 layout [] `shouldBe` []
+            it "handles one span with no text" $ do
+                layout [emptySpan font] `shouldBe` []
             it "handles Czech hello" $ do
                 layout [czechHello font] `shouldBeGolden` "czechHello"