You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

273 lines
3.8 KiB

RenderKid = require '../src/RenderKid'
{strip} = require '../src/AnsiPainter'
match = (input, expected, setStuff) ->
r = new RenderKid
r.style
span:
display: 'inline'
div:
display: 'block'
setStuff?(r)
strip(r.render(input)).trim().should.equal expected.trim()
describe "RenderKid", ->
describe "constructor()", ->
it "should work", ->
new RenderKid
describe "whitespace management - inline", ->
it "shouldn't put extra whitespaces", ->
input = """
a<span>b</span>c
"""
expected = """
abc
"""
match input, expected
it "should allow 1 whitespace character on each side", ->
input = """
a<span> b </span>c
"""
expected = """
a b c
"""
match input, expected
it "should eliminate extra whitespaces inside text", ->
input = """
a<span>b1 \n b2</span>c
"""
expected = """
ab1 b2c
"""
match input, expected
it "should allow line breaks with <br />", ->
input = """
a<span>b1<br />b2</span>c
"""
expected = """
ab1\nb2c
"""
match input, expected
it "should allow line breaks with &nl;", ->
input = """
a<span>b1&nl;b2</span>c
"""
expected = """
ab1\nb2c
"""
match input, expected
it "should allow whitespaces with &sp;", ->
input = """
a<span>b1&sp;b2</span>c
"""
expected = """
ab1 b2c
"""
match input, expected
describe "whitespace management - block", ->
it "should add one linebreak between two blocks", ->
input = """
<div>a</div>
<div>b</div>
"""
expected = """
a
b
"""
match input, expected
it "should ignore empty blocks", ->
input = """
<div>a</div>
<div></div>
<div>b</div>
"""
expected = """
a
b
"""
match input, expected
it "should add an extra linebreak between two adjacent blocks inside an inline", ->
input = """
<span>
<div>a</div>
<div>b</div>
</span>
"""
expected = """
a
b
"""
match input, expected
it "example: div(marginBottom:1)+div", ->
input = """
<div class="first">a</div>
<div>b</div>
"""
expected = """
a
b
"""
match input, expected, (r) ->
r.style '.first': marginBottom: 1
it "example: div+div(marginTop:1)", ->
input = """
<div>a</div>
<div class="second">b</div>
"""
expected = """
a
b
"""
match input, expected, (r) ->
r.style '.second': marginTop: 1
it "example: div(marginBottom:1)+div(marginTop:1)", ->
input = """
<div class="first">a</div>
<div class="second">b</div>
"""
expected = """
a
b
"""
match input, expected, (r) ->
r.style
'.first': marginBottom: 1
'.second': marginTop: 1
it "example: div(marginBottom:2)+div(marginTop:1)", ->
input = """
<div class="first">a</div>
<div class="second">b</div>
"""
expected = """
a
b
"""
match input, expected, (r) ->
r.style
'.first': marginBottom: 2
'.second': marginTop: 1
it "example: div(marginBottom:2)+span+div(marginTop:1)", ->
input = """
<div class="first">a</div>
<span>span</span>
<div class="second">b</div>
"""
expected = """
a
span
b
"""
match input, expected, (r) ->
r.style
'.first': marginBottom: 2
'.second': marginTop: 1