121 lines
3.2 KiB
C#
121 lines
3.2 KiB
C#
namespace Ficdown.Parser.Tests
|
|
{
|
|
using System;
|
|
using System.Linq;
|
|
using System.Collections.Generic;
|
|
using Xunit;
|
|
using Parser;
|
|
using Model.Parser;
|
|
using Extensions;
|
|
|
|
public class BlockHandlerTests
|
|
{
|
|
[Fact]
|
|
public void NoStoryBlockThrowsException()
|
|
{
|
|
var bh = new BlockHandler();
|
|
Assert.Throws<FicdownException>(() => bh.ParseBlocks(bh.ExtractBlocks(@"
|
|
## this file has no story
|
|
just a lonely scene".ToLines())));
|
|
}
|
|
|
|
[Fact]
|
|
public void StoryWithNoAnchorThrowsException()
|
|
{
|
|
var bh = new BlockHandler();
|
|
Assert.Throws<FicdownException>(() => bh.ParseBlocks(bh.ExtractBlocks(@"
|
|
# my story
|
|
doesn't link to a scene
|
|
## a scene
|
|
nothing links here".ToLines())));
|
|
}
|
|
|
|
[Fact]
|
|
public void StoriesWithFancyAnchorsThrowExceptions()
|
|
{
|
|
var bh = new BlockHandler();
|
|
Assert.Throws<FicdownException>(() => bh.ParseBlocks(bh.ExtractBlocks(@"
|
|
# [my story](/a-scene?conditional)
|
|
story with a conditional
|
|
## a scene
|
|
this is a scene".ToLines())));
|
|
Assert.Throws<FicdownException>(() => bh.ParseBlocks(bh.ExtractBlocks(@"
|
|
# [my story](/a-scene#toggle)
|
|
story with a toggle
|
|
## a scene
|
|
this is a scene".ToLines())));
|
|
Assert.Throws<FicdownException>(() => bh.ParseBlocks(bh.ExtractBlocks(@"
|
|
# [my story](/a-scene#?conditional#toggle)
|
|
story with a conditional and a toggle
|
|
## a scene
|
|
this is a scene".ToLines())));
|
|
}
|
|
|
|
[Fact]
|
|
public void StoryLinkingToNonExistentSceneThrowsException()
|
|
{
|
|
var bh = new BlockHandler();
|
|
Assert.Throws<FicdownException>(() => bh.ParseBlocks(bh.ExtractBlocks(@"
|
|
# [a story](/non-existent)
|
|
this story links to a first scene that doesn't exist
|
|
## a scene
|
|
this scene is so cold and lonely".ToLines())));
|
|
}
|
|
|
|
[Fact]
|
|
public void StoryWithALegitAnchorParses()
|
|
{
|
|
var bh = new BlockHandler();
|
|
bh.ParseBlocks(bh.ExtractBlocks(@"
|
|
# [my story](/a-scene)
|
|
story with a simple link
|
|
## a scene
|
|
this is a scene".ToLines()));
|
|
}
|
|
|
|
[Fact]
|
|
public void StoryWithDuplicateActionsThrowsException()
|
|
{
|
|
var bh = new BlockHandler();
|
|
Assert.Throws<FicdownException>(() => bh.ParseBlocks(bh.ExtractBlocks(@"
|
|
# [a story](/a-scene)
|
|
this story is action-happy
|
|
## a scene
|
|
this is the first scene
|
|
### an action
|
|
this is an action
|
|
## another scene
|
|
this is another scene
|
|
### an action
|
|
oops, this is the same action!".ToLines())));
|
|
}
|
|
|
|
[Fact]
|
|
public void StoryWithScenesAndActionsParses()
|
|
{
|
|
var bh = new BlockHandler();
|
|
var story = bh.ParseBlocks(bh.ExtractBlocks(@"
|
|
# [my story](/a-scene)
|
|
story with a simple link
|
|
## a scene
|
|
this is a scene
|
|
## [a scene](?something)
|
|
this is the same scene with a conditional
|
|
## another scene
|
|
this is another scene
|
|
### action1
|
|
this is an action
|
|
### action 2
|
|
this is another action
|
|
## yet another scene
|
|
yup here's some more
|
|
### another action
|
|
the last action (hero?)".ToLines()));
|
|
|
|
Assert.Equal(3, story.Scenes.Count);
|
|
Assert.Equal(2, story.Scenes["a-scene"].Count);
|
|
Assert.Equal(3, story.Actions.Count);
|
|
}
|
|
}
|
|
}
|