PdfPig/src/UglyToad.PdfPig.Tests/Integration/NonAsciiCharactersBookmarksTests.cs
2024-03-16 07:40:17 +00:00

109 lines
4.6 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

namespace UglyToad.PdfPig.Tests.Integration
{
using UglyToad.PdfPig.Content;
using UglyToad.PdfPig.Outline;
using UglyToad.PdfPig.Outline.Destinations;
using UglyToad.PdfPig.Writer;
public class NonAsciiCharactersBookmarksTests
{
[Theory]
[MemberData(nameof(TestData.TestData_Pass), MemberType = typeof(TestData))]
[MemberData(nameof(TestData.TestData_Failed), MemberType = typeof(TestData))]
public void CanGetBookmarks(string words)
{
using var builder = new PdfDocumentBuilder();
builder.AddPage(PageSize.A4);
// Set bookmark items.
var inputs = words.Split(" ", StringSplitOptions.RemoveEmptyEntries);
builder.Bookmarks = new Bookmarks(inputs.Select(x => new DocumentBookmarkNode(x,
0,
new ExplicitDestination(1,
ExplicitDestinationType.XyzCoordinates,
ExplicitDestinationCoordinates.Empty),
Array.Empty<BookmarkNode>())).ToArray());
// Build PDF data
var bytes = builder.Build();
// Read PDF from bytes. And read bookmark data.
using var doc = PdfDocument.Open(bytes);
bool isSuccess = doc.TryGetBookmarks(out var bookmarks);
// Assert
Assert.True(isSuccess);
var results = bookmarks.GetNodes().Select(x => x.Title).ToArray();
Assert.Equivalent(inputs, results);
}
private static class TestData
{
public static TheoryData<string> TestData_Failed = new TheoryData<string>
{
"ШЩHI차岸岩還館小少尚",
"A Ш Z", // CYRILLIC CAPITAL LETTER
"AШZ", // CYRILLIC CAPITAL LETTER
"A Щ Z", // CYRILLIC CAPITAL LETTER
"AЩZ", // CYRILLIC CAPITAL LETTER
" ", // FULLWIDTH LATIN CAPITAL LETTER A
"", // FULLWIDTH LATIN CAPITAL LETTER A
"차", // HANGUL
"岸 岩", // KANJI
"岸岩", // KANJI
"還 館", // KANJI
"還館", // KANJI
"小 少 尚", // KANJI
"小少尚", // KANJI
};
public static TheoryData<string> TestData_Pass = new TheoryData<string>
{
// FRENCH Alphabet Diacritics and ligatures
"É À È Ù Â Ê Î Ô Û Ë Ï Ü Ç Œ Æ",
"é à è ù â ê î ô û ë ï ü ç œ æ",
// GREEK Alphabet
"Α Β Γ Δ Ε Ζ Η Θ Ι Κ Λ Μ Ν Ξ Ο Π Ρ Σ Τ Υ Φ Χ Ψ Ω",
"α β γ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ σ τ υ φ χ ψ ω",
// CYRILLIC CAPITAL LETTER
// "А Б В Г Д Е Ж З И К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ы Э Ю Я",
// CYRILLIC SMALL LETTER
"а б в г д е ж з и к л м н о п р с т у ф х ц ч ш щ ы э ю я",
// HANGUL CHOSEONG
"ㄱ ㄴ ㄷ ㄹ ㅁ ㅂ ㅅ ㅇ ㅈ ㅊ ㅋ ㅌ ㅍ ㅎ",
// HANGUL GANADA
//"가 나 다 라 마 바 사 아 자 차 카 타 파 하",
// FULLWIDTH LATIN CAPITAL LETTER
// " ",
// FULLWIDTH LATIN SMALL LETTER
" ",
// Halfwidth Katakana
"ア イ ウ エ オ カ キ ク ケ コ サ シ ス セ ソ タ チ ツ テ ト ナ ニ ヌ ネ ノ ハ ヒ フ ヘ ホ マ ミ ム メ モ ヤ ユ ヨ ラ リ ル レ ロ ワ ヲ ン",
// Fullwidth Katakana
"ア イ ウ エ オ カ キ ク ケ コ サ シ ス セ ソ タ チ ツ テ ト ナ ニ ヌ ネ ハ ヒ フ ヘ ホ マ ミ ム メ モ ヤ ユ ヨ ラ リ ル レ ロ ワ ヲ ン",
// Fullwidth Hiragana
"あ い う え お か き く け こ さ し す せ そ た ち つ て と な に ぬ ね の は ひ ふ へ ほ ま み む め も や ゆ よ ら り る れ ろ わ を ん",
// Kanji (Surrogate Pair)
"𩸽 𩹉 𡵅",
// Emoji
"🏠 🚗 📝",
// Emoji (with ZWJ Sequences)
"👨‍💻 👁‍🗨 😶‍🌫️"
};
}
}
}