Fix test-data.js to be more faithful to the spec

This commit is contained in:
2026-02-01 15:58:25 +02:00
parent 0fe78595da
commit 90bc9b5a2c

View File

@@ -58,46 +58,51 @@ const TEST_CASES = {
{ code: 'Gf', expected: 'Female' }, { code: 'Gf', expected: 'Female' },
{ code: 'Gh', expected: 'Hermaphrodite' }, { code: 'Gh', expected: 'Hermaphrodite' },
{ code: 'Gn', expected: 'Neuter' }, { code: 'Gn', expected: 'Neuter' },
{ code: 'G?', expected: 'not telling' }, { code: 'Gp', expected: 'Pseudo-hermaphrodite' },
{ code: 'G~', expected: 'variable' } { code: 'G~', expected: 'Variable between two or more' },
{ code: 'G?', expected: "Unknown - 'No dice! Cartoon characters aren't anatomically correct!'" }
], ],
length: [ length: [
{ code: 'L+++!', expected: 'Celestial' }, { code: 'L+++!', expected: "Celestial - 'I hate it when planets get in my mouth when I yawn!'" },
{ code: 'L+++', expected: 'Mistaken for mountain ranges' }, { code: 'L+++', expected: "Mistaken for mountain ranges - 'Sorry Mr Battleship, I didn't see you!'" },
{ code: 'L++', expected: 'Lair fits a regiment' }, { code: 'L++', expected: "Can't see own tail on a foggy day - 'Can you say \"jungle gym\"?'" },
{ code: 'L+', expected: 'Bigger than most dragons' }, { code: 'L+', expected: "Godzilla-sized - 'They look up to me. Literally.'" },
{ code: 'L', expected: 'Normal (Draco-sized)' }, { code: 'L', expected: "Draco-sized - 'About as normal as dragons get.'" },
{ code: 'L-', expected: 'Smaller than most dragons' }, { code: 'L-', expected: "Human-sized - 'Please, don't step on the tail...'" },
{ code: 'L--', expected: 'Fits on your shoulder' }, { code: 'L--', expected: "Dog-sized - 'Please, don't step on me...'" },
{ code: 'L---', expected: 'Fits in your pocket' }, { code: 'L---', expected: "Pocket Dragon-sized or below - 'Please, don't sneeze...'" },
{ code: 'L---!', expected: 'Microscopic' }, { code: 'L---!', expected: "Microscopic - 'Honey, I shrunk the dragon!'" },
{ code: 'L10m', expected: '10 meters' }, { code: 'L~', expected: "Variable - 'I change size on a whim!'" },
{ code: 'L^', expected: "One-Dragon-Sized - 'I am just long enough to reach the ground!'" },
{ code: 'L10m', expected: '10 metres' },
{ code: 'L10f', expected: '10 feet' }, { code: 'L10f', expected: '10 feet' },
{ code: 'L10m4t', expected: '10 meters (with 4meters tail length)' } { code: 'L10m4t', expected: '10 metres (with 4 metres tail length)' }
], ],
width: [ width: [
{ code: 'W+++!', expected: "I am Athelind! My belly is now several galaxies wide" }, { code: 'W+++!', expected: "I am Athelind! My belly is now several galaxies wide ... while I'm only a few hundred feet long!" },
{ code: 'W+++', expected: "Planets have been known to crack in half with my arrival!" }, { code: 'W+++', expected: 'Planets have been known to crack in half with my arrival!' },
{ code: 'W++', expected: "My digestion of food has been known to cause earthquakes" }, { code: 'W++', expected: 'My digestion of food has been known to cause earthquakes.' },
{ code: 'W+', expected: "I move by rolling" }, { code: 'W+', expected: 'I move by rolling. Flying has always been an effort for me.' },
{ code: 'W', expected: "I'm normal" }, { code: 'W', expected: "What can I say ... I'm normal, except for a few feasts here or there." },
{ code: 'W~', expected: "Variable" }, { code: 'W-', expected: "I'm slightly on the slim side!" },
{ code: 'W-', expected: "slightly on the slim side" }, { code: 'W--', expected: 'Ever heard of serpentine?' },
{ code: 'W--', expected: "serpentine" }, { code: 'W---', expected: 'Whoah! Whaddaya mean I look like a long string with wings?' },
{ code: 'W---', expected: "long string with wings" }, { code: 'W---!', expected: "I'm one-dimensional - all length and no width or depth. Just one long super-string!" },
{ code: 'W---!', expected: "one-dimensional" } { code: 'W~', expected: "Variable - 'My girth depends on what I've just eaten!'" }
], ],
weight: [ weight: [
{ code: 'T+++', expected: 'Obese' }, { code: 'T+++!', expected: "Black-Hole - 'Everything gravitates towards me eventually!'" },
{ code: 'T++', expected: 'Fat' }, { code: 'T+++', expected: "Massive - 'I've been eating rocks again!'" },
{ code: 'T+', expected: 'Over-weight' }, { code: 'T++', expected: "Obese - 'I'm on a sea-food diet ... I see food and eat it!'" },
{ code: 'T', expected: 'Normal weight' }, { code: 'T+', expected: "Over-weight - 'I've been eating too many doughnuts again!'" },
{ code: 'T-', expected: 'Under-weight' }, { code: 'T', expected: "Normal - 'I'm as normal a weight as one gets.'" },
{ code: 'T--', expected: 'Skeleton with scales' }, { code: 'T-', expected: "Under-weight - 'I've not had a good meal for ages!'" },
{ code: 'T---', expected: 'Anorexic' } { code: 'T--', expected: "Buoyant - 'I've been breathing helium again!'" },
{ code: 'T---', expected: "Feather-weight - 'I get blown about by the wind.'" },
{ code: 'T---!', expected: "Weightless - 'I'm made out of gossamer.'" }
], ],
skinType: [ skinType: [
@@ -119,184 +124,240 @@ const TEST_CASES = {
], ],
age: [ age: [
{ code: 'A+++!', expected: 'Eternal' }, { code: 'A+++!', expected: 'Ancient' },
{ code: 'A+++', expected: 'Ancient beyond measure' }, { code: 'A+++', expected: 'Venerable' },
{ code: 'A++', expected: 'Ancient' }, { code: 'A++', expected: 'Old enough to know better!' },
{ code: 'A+', expected: "You've been around" }, { code: 'A+', expected: "You've been around." },
{ code: 'A', expected: 'Adult' }, { code: 'A', expected: 'Mature Adult' },
{ code: 'A-', expected: 'Young adult' }, { code: 'A-', expected: 'Young Adult' },
{ code: 'A--', expected: 'Adolescent' }, { code: 'A--', expected: "Still under Mom's (or Dad's) wing." },
{ code: 'A---', expected: 'Hatchling' }, { code: 'A---', expected: 'Hatchling' },
{ code: 'A?', expected: 'Unknown age' } { code: 'A---!', expected: 'An egg (nearly hatched)!' },
{ code: 'A?', expected: 'I have no idea how old I am .. I lost count years ago!' }
], ],
breath: [ breath: [
{ code: 'B+++', expected: 'Legendary breath weapon' }, { code: 'Bfl', expected: 'Flame or fire' },
{ code: 'B++', expected: 'Very powerful breath' }, { code: 'Bac', expected: 'Acid' },
{ code: 'B+', expected: 'Above average breath' }, { code: 'Bco', expected: 'Cold or frost' },
{ code: 'B', expected: 'Normal breath weapon' }, { code: 'Bic', expected: 'Ice' },
{ code: 'B-', expected: 'Weak breath' }, { code: 'Bzz', expected: 'Electricity or lightning' },
{ code: 'B--', expected: 'Very weak breath' }, { code: 'Bhe', expected: 'Heat' },
{ code: 'B---', expected: 'No breath weapon' }, { code: 'Bwa', expected: 'Water' },
{ code: 'Bfl', expected: 'flame' }, { code: 'Bwi', expected: 'Wind' },
{ code: 'Bfi', expected: 'fire' }, { code: 'B-', expected: 'No Breath-Weapon' }
{ code: 'Bac', expected: 'acid' },
{ code: 'Bic', expected: 'ice' },
{ code: 'Bli', expected: 'lightning' }
], ],
reality: [ reality: [
{ code: 'R+++', expected: 'I AM a dragon' }, { code: 'R+++!', expected: 'I AM as I describe myself, and no-one is going to persuade me otherwise. What you see is what your mind wants you to see!' },
{ code: 'R++', expected: 'Strongly identify with on-line form' }, { code: 'R+++', expected: 'I AM as I describe myself on-line. The human body is either an unfortunate mismatch, an illusion, or just my messenger.' },
{ code: 'R+', expected: 'Identify with character' }, { code: 'R++', expected: "I tend to answer to my on-line name quicker than my given one. I strongly identify with this form. It would explain a lot if I wasn't really human, but I'm hedging my bets." },
{ code: 'R', expected: 'Just playing' }, { code: 'R+', expected: "It's a role, but it's a role that's part of my self-image, without which I would feel like something was missing." },
{ code: 'R-', expected: "It's only a game" }, { code: 'R', expected: 'I haven\'t given much thought to whether I am more "real" in human form or in my on-line identity. I\'m just me.' },
{ code: 'R--', expected: "Don't confuse RL with online" }, { code: 'R-', expected: "It would be nice to be as I say I am on-line, but I've got some real doubts about whether such a thing is possible." },
{ code: 'R---', expected: 'Completely separate' } { code: 'R--', expected: 'This is a hobby for me. My character is just a product of my imagination, nothing more.' },
{ code: 'R---', expected: "I consider all of this imaginary. You R+++ people scare me. Don't you think you're taking things a bit too seriously?" },
{ code: 'R---!', expected: 'I am role-playing. You are role-playing. If you try to correct me on this assumption, I will publicly flame you as insane.' },
{ code: 'R*', expected: "Don't ask, don't tell." },
{ code: 'R?', expected: "The thought just hasn't crossed my mind!" }
], ],
activity: [ activity: [
{ code: 'Ac+++!', expected: 'T1 connection, never off the net' }, { code: 'Ac+++!', expected: "I have a T1 connection and am never off the 'net! I even order pizza across it!" },
{ code: 'Ac+++', expected: 'Online most of the time' }, { code: 'Ac+++', expected: 'This is my home! I spend as many waking moments as possible on-line.' },
{ code: 'Ac++', expected: 'Online frequently' }, { code: 'Ac++', expected: "I'm on-line every day for about eight hours or so!" },
{ code: 'Ac+', expected: 'Online regularly' }, { code: 'Ac+', expected: "I'm on-line for at least two hours every day!" },
{ code: 'Ac', expected: 'Moderate activity' }, { code: 'Ac', expected: 'I get on every day, briefly, to check my mail and the newsgroups.' },
{ code: 'Ac-', expected: 'Occasional visits' }, { code: 'Ac-', expected: 'I only get on occasionally during the week, but am here every weekend.' },
{ code: 'Ac--', expected: 'Rare appearances' }, { code: 'Ac--', expected: 'I can barely manage to connect once a week.' },
{ code: 'Ac---', expected: 'Almost never online' } { code: 'Ac---', expected: "I'm lucky if I get on-line once a month!" },
{ code: 'Ac---!', expected: 'If you see me, it must be raining frogs again!' },
{ code: 'Ac~', expected: "I go on-line when I fee like it. It may be hours, it may be months!" },
{ code: 'Ac?', expected: "I really don't know when I'll be on-line again!" }
], ],
technology: [ technology: [
{ code: 'Tc+++', expected: 'Program in assembly' }, { code: 'Tc+++!', expected: 'I write microcode in my spare time!' },
{ code: 'Tc++', expected: 'Expert programmer' }, { code: 'Tc+++', expected: 'I can program computers using assembly language.' },
{ code: 'Tc+', expected: 'Competent with tech' }, { code: 'Tc++', expected: 'I can program computers using high-level languages.' },
{ code: 'Tc', expected: 'Normal tech skills' }, { code: 'Tc+', expected: 'I can program the video.' },
{ code: 'Tc-', expected: 'Basic computer use' }, { code: 'Tc', expected: "I haven't yet learned how to wire a plug!" },
{ code: 'Tc--', expected: 'Technology challenged' }, { code: 'Tc-', expected: "If a program has a bug, I'll find it!" },
{ code: 'Tc---', expected: "What's a computer?" }, { code: 'Tc--', expected: "Electricity does funny things when I'm at the controls!" },
{ code: 'Tc+++[SE]', expected: 'Program in assembly, specialist in SE' } { code: 'Tc---', expected: 'Only the most basic mechanisms survive when I get hold of them!' },
{ code: 'Tc---!', expected: "All items of technology fail when I'm near!" },
{ code: 'Tc+++![hw]', expected: 'I write microcode in my spare time! Specialist in hw' },
{ code: 'Tc+++[SE]', expected: 'I can program computers using assembly language. Specialist in SE' },
{ code: 'Tc++[sw]', expected: 'I can program computers using high-level languages. Specialist in sw' },
{ code: 'Tc+[ai]', expected: 'I can program the video. Specialist in ai' }
], ],
mating: [ mating: [
{ code: 'M+++!1', expected: 'Mated in RL to online mate\'s RL self, 1 mate' }, { code: 'M+++!', expected: "I'm mated in real life to my on-line mate's real life self as well!" },
{ code: 'M+++', expected: 'Mated to RL person I met online' }, { code: 'M+++', expected: 'Am I mated? Ask my hatchlings!' },
{ code: 'M++', expected: 'Mated online, not met in RL' }, { code: 'M++', expected: 'Ask my significant other!' },
{ code: 'M+', expected: 'Mated/married' }, { code: 'M+', expected: 'Ask my mate-to-be!' },
{ code: 'M', expected: 'Dating' }, { code: 'M', expected: 'Ask me, and I might just say yes!' },
{ code: 'M-', expected: 'Looking' }, { code: 'M-', expected: "Don't ask!" },
{ code: 'M--', expected: 'Not interested' }, { code: 'M--', expected: 'Ask my (poker/football/bridge/Trivial Pursuit) buddies!' },
{ code: 'M---', expected: 'Sworn celibate' } { code: 'M---', expected: "I'm single and very proud of it!" },
{ code: 'M---!', expected: 'Not only am I single, but I despise the idea of mating.' },
{ code: 'M/', expected: "Ask me, and I'll ask your snout to meet your kidneys!" },
{ code: 'M+++!1', expected: "I'm mated in real life to my on-line mate's real life self as well! (1 mate)" },
{ code: 'M +++!', expected: "I'm mated in real life to my on-line mate's real life self as well! (distant from mate)" },
{ code: 'M +++', expected: 'Am I mated? Ask my hatchlings! (distant from mate)' },
{ code: 'M ++', expected: 'Ask my significant other! (distant from mate)' },
{ code: 'M +', expected: 'Ask my mate-to-be! (distant from mate)' }
], ],
offspring: [ offspring: [
{ code: 'O+++', expected: 'Large family' }, { code: 'O+++!', expected: 'I have many of them, and none of them look like leaving yet!' },
{ code: 'O++', expected: 'Several offspring' }, { code: 'O+++', expected: "I have several that haven't fledged yet." },
{ code: 'O+', expected: 'Have offspring' }, { code: 'O++', expected: 'I have a couple that have not yet left home.' },
{ code: 'O', expected: 'Interested in having' }, { code: 'O+', expected: "I've got one still in the nest." },
{ code: 'O-', expected: 'Not interested' }, { code: 'O', expected: "There's just me (and my mate, if applicable)." },
{ code: 'O--', expected: "Don't even think about it" }, { code: 'O-', expected: "I had one, but they've left home." },
{ code: 'O---', expected: 'Absolutely not' }, { code: 'O--', expected: "I had a couple, but they're living their own lives now." },
{ code: 'O/', expected: "If one was my fault, I'd faint" } { code: 'O---', expected: "I've had several, all successfully fledged." },
{ code: 'O---!', expected: "I've had many, but they've all flown away now." },
{ code: 'O?', expected: 'I lost track long ago. If it meeps, I feed it.' },
{ code: 'O~', expected: "I have a variable number, depending on who I'm fostering this month!" },
{ code: 'O/', expected: "If I ever heard one was my fault, I'd faint!" }
], ],
hoard: [ hoard: [
{ code: 'DC2.Dw H+++', expected: "Really can't tell when someone steals" }, { code: 'H+++!', expected: "Governments quake when they hear you're going to sell!" },
{ code: 'DC2.Dw H++', expected: 'Large hoard' }, { code: 'H+++', expected: "You really can't tell when someone steals an item!" },
{ code: 'DC2.Dw H+', expected: 'Growing collection' }, { code: 'H++', expected: "You're comfortable, but you wouldn't mind some more." },
{ code: 'DC2.Dw H', expected: 'Small hoard' }, { code: 'H+', expected: "You're not down to your last copper, but..." },
{ code: 'DC2.Dw H-', expected: 'Starting out' }, { code: 'H', expected: "You've got your own lair, unfurnished." },
{ code: 'DC2.Dw H--', expected: 'No hoard yet' }, { code: 'H-', expected: 'You and the bank own your lair.' },
{ code: 'DC2.Dw H---', expected: 'No interest in hoarding' } { code: 'H--', expected: 'The lair is rented, and cramped.' },
{ code: 'H---', expected: "No money, no lair, at least you aren't starving!" },
{ code: 'H---!', expected: "Look on the bright side. At least you've got friends!" }
], ],
money: [ money: [
{ code: '$$$', expected: 'Richest dragon alive' }, { code: '$+++!', expected: 'All things of value gravitate towards me. When I\'ve got my claws on them I never let go!' },
{ code: '$$', expected: 'Wealthy' }, { code: '$+++', expected: 'The coinage has my likeness on it. I own the whole kingdom!' },
{ code: '$', expected: "Don't touch my hoard" }, { code: '$++', expected: 'Besides humans, I kill other dragons for their wealth.' },
{ code: '$-', expected: 'Getting by' }, { code: '$+', expected: 'Investments in human businesses. I do repossessions "CHOMP" personally!' },
{ code: '$--', expected: 'Poor' }, { code: '$', expected: "Take your hands off my hoard or I'll take your hands." },
{ code: '$---', expected: 'Broke' } { code: '$-', expected: "Bought up the weapons smiths with my savings. At least there's no more dragon-proof armour or vorpal swords." },
{ code: '$--', expected: 'Some thief stole most of it whilst I was out hunting hobbits!' },
{ code: '$---', expected: 'I\'m a philanthropist. I gave it all to the poor!' },
{ code: '$---!', expected: "I eschew all things of value. I don't need them! Whatever I find I give away." }
], ],
diet: [ diet: [
{ code: 'F+++o', expected: 'Glutton omnivore' }, { code: 'F+++!', expected: "Insatiable - 'More! More! More!'" },
{ code: 'F++o', expected: 'Overindulgent omnivore' }, { code: 'F+++', expected: "Voracious - 'At least you don't have to wash up the plates now!'" },
{ code: 'F+o', expected: 'Healthy appetite omnivore' }, { code: 'F++', expected: "Glutton - 'I have three square meals an hour!'" },
{ code: 'Fc', expected: 'carnivore' }, { code: 'F+', expected: "Overindulgent - 'One more of those won't hurt!'" },
{ code: 'Fh', expected: 'herbivore' }, { code: 'F', expected: "Normal for your species - 'I have three square meals a day!'" },
{ code: 'Fo', expected: 'omnivore' }, { code: 'F-', expected: "Dieting - 'Only a soupçon of that if you please!'" },
{ code: 'Fv', expected: 'vegetarian' } { code: 'F--', expected: "Efficient - 'Only soup if you please!'" },
{ code: 'F---', expected: "Anorexic - 'Eating is something I do every blue moon!'" },
{ code: 'F---!', expected: "Fasting - 'Duke Humphrey is an ideal dinner guest!'" },
{ code: 'Fc', expected: 'Carnivourous' },
{ code: 'Fo', expected: 'Omnivorous' },
{ code: 'Fv', expected: 'Vegetarian' },
{ code: 'F++o', expected: "Glutton - 'I have three square meals an hour!' - Omnivorous" }
], ],
humor: [ humor: [
{ code: 'J+++', expected: 'Constantly joking' }, { code: 'J+++!', expected: 'Everything is a joke. I find something to laugh at everywhere I look ... and that includes you!' },
{ code: 'J++', expected: 'Laughing is good for you' }, { code: 'J+++', expected: "There's very little I won't laugh about ... and very little I won't do to make you laugh!" },
{ code: 'J+', expected: 'Good sense of humor' }, { code: 'J++', expected: "Laughing is just so good for you! Even when you're being serious about something it's good to slip in the odd joke!" },
{ code: 'J', expected: 'Normal humor' }, { code: 'J+', expected: 'I appreciate humour of all kinds, but I do know when to take things seriously.' },
{ code: 'J-', expected: 'Serious' }, { code: 'J', expected: "I laugh at many things, but there's a time and a place for joking." },
{ code: 'J--', expected: 'Very serious' }, { code: 'J-', expected: 'A joke a day keeps depression at bay ... but laughing out loud is bad for my health!' },
{ code: 'J---', expected: 'No sense of humor' } { code: 'J--', expected: "Some things are OK to laugh at, but many things are not. I'll take whatever you say seriously unless you put those cute little smileys by it!" },
{ code: 'J---', expected: "I can't think of the time when I last laughed." },
{ code: 'J---!', expected: "Jokes, frivolity, they're all just works of the Devil!" }
], ],
social: [ social: [
{ code: 'S+++', expected: 'Everyone knows' }, { code: 'S+++!', expected: "I have made a determined effort to advertise the fact that I'm not a human. My close friends have got used to explaining me to strangers to save them time. I'm so militant about my true identity that even the men in white coats were impressed!" },
{ code: 'S++', expected: 'Most people know' }, { code: 'S+++', expected: "My friends' parents all know. I use my on-line name in front of total strangers regularly. I've received letter from people I've never met asking questions about how to deal with being non-human." },
{ code: 'S+', expected: 'Several people know' }, { code: 'S++', expected: "All of my friends know. I told my parents instead of waiting for them to find out. The local cybercafé's manager calls me by my on-line name." },
{ code: 'S', expected: 'A few friends know' }, { code: 'S+', expected: "Most of my friends know. I'd tell my parents if I thought they'd take it well. I've used my on-line name in public on occasion." },
{ code: 'S-', expected: 'Very select few know' }, { code: 'S', expected: "A few of my friends know. I'm glad my parents have never asked me about this. I'm rather low-key but don't dodge the subject." },
{ code: 'S--', expected: 'One or two people know' }, { code: 'S-', expected: "I don't want to be thought crazy in human life. If the subject came up, I'd tell my closest friends only." },
{ code: 'S---', expected: 'Complete secret' }, { code: 'S--', expected: "It's something that would make me rather uncomfortable to have let out. I'm open on-line but try to keep my human side untraceable, and vice versa." },
{ code: 'S!', expected: 'Out and proud' } { code: 'S---', expected: "I've e-mailed only a few kindred souls I think I can trust, not telling them anything about my human life, naturally. There are great advantages to my continued silence." },
{ code: 'S---!', expected: "No on knows, period. I live in fear that my intolerant neighbours, colleagues, or relatives will turn me over to the Thought Police! I post only under condition of anonymity. I'm going out on a limb even assembling my Dragon Code!" }
], ],
ubiquity: [ ubiquity: [
{ code: 'U+++', expected: 'Legendary status' }, { code: 'U+++!', expected: "They call me 'The Vanisher'. Odd Beholder creatures that I only vaguely remember are still fighting holy wars over me. I've lost track of the number of planets my friends and I have personally shaped the history of. I'm not a god!" },
{ code: 'U++', expected: 'Well known' }, { code: 'U+++', expected: 'Not only do I remember most of my dozens (or hundreds) of past lives, but I remember a few things about you too!' },
{ code: 'U+', expected: 'Known in community' }, { code: 'U++', expected: 'See that book over there? I wrote that in a different life!' },
{ code: 'U', expected: 'Regular member' }, { code: 'U+', expected: 'I can remember several past-life names, and am occasionally recognised too!' },
{ code: 'U-', expected: 'Pretty sure did something important' }, { code: 'U', expected: "I've done some soul-searching, and got real results! This isn't my first time around." },
{ code: 'U--', expected: 'Mostly unnoticed' }, { code: 'U-', expected: "I'm pretty sure I've done something important, sometime, but I haven't got much of a clue as to what it was." },
{ code: 'U---', expected: 'Unknown' } { code: 'U--', expected: "When I tried to do a past-life regression, I got a '404 Not found - Access denied'. Why don't past lives come with search engines?" },
{ code: 'U---', expected: "Whatever it was I did, it made me end up here. I don't want to look!" },
{ code: 'U---!', expected: "I blocked out my memories in self-defence after the incident with the Trout farm, the Spell of Growth, and the women's locker room at the Magic Academy! Total strangers occasionally give me odd looks and move to the other side of the street as I pass." },
{ code: 'U?', expected: "What's a past life?" },
{ code: 'U!', expected: 'This is my first life!' },
{ code: 'U*', expected: "I've been around a bit, I'm just not saying how many times!" }
], ],
irritability: [ irritability: [
{ code: 'I+++', expected: 'Constantly angry' }, { code: 'I+++!', expected: "You're just not going to catch me in a good mood! Live with it or you'd better like barbeque!" },
{ code: 'I++', expected: 'Short temper' }, { code: 'I+++', expected: "I'd eat my mother if she looked at me wrong!" },
{ code: 'I+', expected: 'Get annoyed easily' }, { code: 'I++', expected: "Come too close and you're a cinder." },
{ code: 'I', expected: 'Normal temperament' }, { code: 'I+', expected: 'Call me grumpy.' },
{ code: 'I-', expected: 'Patient' }, { code: 'I', expected: 'I will defend my honour, but I will only attack with reason.' },
{ code: 'I--', expected: 'Take everything in stride' }, { code: 'I-', expected: "Just don't call me lizard lips and you should be fine." },
{ code: 'I---', expected: 'Nothing bothers me' } { code: 'I--', expected: 'I take everything in my stride, as opposed to my jaws!' },
{ code: 'I---', expected: "You could stab me with a ten-foot pike, and I wouldn't blink!" },
{ code: 'I---!', expected: "There's nothing you can do that will make me lose my cool!" }
], ],
magic: [ magic: [
{ code: 'V+++', expected: 'Archmage level' }, { code: 'V+++!', expected: 'I have reached the pinnacle of my profession.' },
{ code: 'V++', expected: 'Powerful magic' }, { code: 'V+++', expected: "I'm reasonably adept in my field." },
{ code: 'V+', expected: 'Competent magic user' }, { code: 'V++', expected: 'I know a number of spells.' },
{ code: 'V', expected: 'Some magical ability' }, { code: 'V+', expected: 'I can perform a few cantrips with candles.' },
{ code: 'V-', expected: 'Minor magic' }, { code: 'V', expected: "Magic is something I've never really looked into." },
{ code: 'V--', expected: 'Magicians worry when near' }, { code: 'V-', expected: "Magicians worry when I'm near." },
{ code: 'V---', expected: 'Magic has no effect' } { code: 'V--', expected: 'Most magic seems to fail when I\'m nearby!' },
{ code: 'V---', expected: 'Only a few spells seem to have an effect, but that could just be psychological.' },
{ code: 'V---!', expected: "Magic? What's that?" },
{ code: 'V+++![necro]', expected: 'I have reached the pinnacle of my profession. Specialist in necro' },
{ code: 'V+++[ice]', expected: "I'm reasonably adept in my field. Specialist in ice" },
{ code: 'V++[fire]', expected: 'I know a number of spells. Specialist in fire' },
{ code: 'V+[heal]', expected: 'I can perform a few cantrips with candles. Specialist in heal' }
], ],
psyPower: [ psyPower: [
{ code: 'Q+++', expected: 'Master psychic' }, { code: 'Q+++!', expected: "There's almost nothing I can't do if I put my mind to it." },
{ code: 'Q++', expected: 'Strong psychic' }, { code: 'Q+++', expected: 'I can move mountains, and not bit by bit!' },
{ code: 'Q+', expected: 'Psychic abilities' }, { code: 'Q++', expected: 'I know what you\'re thinking... did I use six psychic blasts or only five!!!' },
{ code: 'Q', expected: 'Minor psychic talent' }, { code: 'Q+', expected: 'I can talk to the odd spirit, or move very small rocks (churches, lead, ducks, etc.).' },
{ code: 'Q-', expected: 'Resistant to psionics' }, { code: 'Q', expected: "I'm like a book, but haven't learned to read myself yet!" },
{ code: 'Q--', expected: 'Immune to psionics' }, { code: 'Q-', expected: "Psychics have trouble communicating when I'm around." },
{ code: 'Q---', expected: 'Psionics have no effect' } { code: 'Q--', expected: 'Only my very outer thoughts are exposed.' },
{ code: 'Q---', expected: "Psionics just don't seem to have any affect." },
{ code: 'Q---!', expected: 'Not only am I immune to any Psionic effect, but I prevent them happening around me as well.' },
{ code: 'Q+++![emp]', expected: "There's almost nothing I can't do if I put my mind to it. Specialist in emp" },
{ code: 'Q+++[tel]', expected: 'I can move mountains, and not bit by bit! Specialist in tel' },
{ code: 'Q++[tk]', expected: 'I know what you\'re thinking... did I use six psychic blasts or only five!!! Specialist in tk' },
{ code: 'Q+[pre]', expected: 'I can talk to the odd spirit, or move very small rocks (churches, lead, ducks, etc.). Specialist in pre' }
], ],
emotion: [ emotion: [
{ code: 'E+++', expected: 'Extremely affectionate' }, { code: 'E+++!', expected: 'If it is living or dead, I\'ll hug it (to death)!' },
{ code: 'E++', expected: 'Fairly free with hugs' }, { code: 'E+++', expected: "If it is living, I'll hug it freely." },
{ code: 'E+', expected: 'Affectionate' }, { code: 'E++', expected: "I'm fairly free with my hugs, so try me!" },
{ code: 'E', expected: 'Normal emotional expression' }, { code: 'E+', expected: "I'm selective, to a point, but give me a hug and I'll return it." },
{ code: 'E-', expected: 'Reserved' }, { code: 'E', expected: "I don't mind hugs from any of my friends, but I draw the line there." },
{ code: 'E--', expected: 'Emotionally distant' }, { code: 'E-', expected: "I'll accept hugs from my nearest and dearest, but no-one else." },
{ code: 'E---', expected: 'Cold/unemotional' } { code: 'E--', expected: 'Hugging me is something that only my mate is allowed to do!' },
{ code: 'E---', expected: "Don't you dare hug me! I mean it!" },
{ code: 'E---!', expected: "Don't even touch me ... in fact don't even think about touching me!" }
], ],
dragonFriend: [ dragonFriend: [
@@ -309,6 +370,41 @@ const TEST_CASES = {
{ code: 'Df--', expected: 'Maddening - they think about a quick snack ... now!' }, { code: 'Df--', expected: 'Maddening - they think about a quick snack ... now!' },
{ code: 'Df---', expected: "Infuriating - you're not good enough for a snack" }, { code: 'Df---', expected: "Infuriating - you're not good enough for a snack" },
{ code: 'Df---!', expected: "Cold fury - they're going to hunt you, and find you, and..." } { code: 'Df---!', expected: "Cold fury - they're going to hunt you, and find you, and..." }
],
nativeLand: [
{ code: 'Na', expected: 'Air - \'I live in the clouds!\'' },
{ code: 'Ne', expected: 'Earth - \'I prefer to dwell underground!\'' },
{ code: 'Nf', expected: 'Fire - \'I am a child of the flame!\'' },
{ code: 'Ni', expected: 'Ice - \'I thrive in the cold polar winds and the tundra is my playground!\'' },
{ code: 'Nj', expected: 'Jungle - \'I only feel happy in the tropical rainforests of my home.\'' },
{ code: 'Nm', expected: 'Mountains - \'I am only truly happy when surrounded by tall peaks!\'' },
{ code: 'Nn', expected: 'Nature - \'I was born in the wilderness, and that\'s where I\'m happiest!\'' },
{ code: 'Np', expected: 'Plains - \'I prefer to walk on a carpet of green!\'' },
{ code: 'Nr', expected: 'Rock - \'I have a bed of marble and a granite pillow!\'' },
{ code: 'Ns', expected: 'Space - \'The dark lifeless void is my home!\'' },
{ code: 'Nt', expected: 'Trees - \'I like swinging through the branches!\'' },
{ code: 'Nu', expected: 'Urban - \'Cities and towns hold fascination for me!\'' },
{ code: 'Nw', expected: 'Water - \'I am only truly at home in water!\'' },
{ code: 'N^', expected: 'Ethereal - \'I exist in the folds of reality!\'' },
{ code: 'N!', expected: 'Imaginary - \'I am a figment of my imagination!\'' }
],
appendages: [
{ code: 'Pa', expected: 'A pair of arms' },
{ code: 'Pf', expected: 'A pair of fore-limbs' },
{ code: 'Ph', expected: 'A head' },
{ code: 'Pk', expected: 'A crest' },
{ code: 'Pl', expected: 'A pair of legs' },
{ code: 'Pp', expected: 'A pair of paddles, flukes, or fins' },
{ code: 'Pt', expected: 'A tail' },
{ code: 'Pv', expected: 'A pair of horns or spines on the head' },
{ code: 'Pw', expected: 'A pair of wings' },
{ code: "Pw'", expected: 'A pair of wings that also act as arms, legs, or fore-limbs' },
{ code: 'Ph+', expected: 'One more head than normal - \'I got ahead in advertising!\'' },
{ code: 'Pw-', expected: 'One less wing than normal - \'I have only one wing!\'' },
{ code: 'Pl!', expected: 'Many legs - \'I am a millipede!\'' },
{ code: 'Pl^', expected: 'Legs end in webbed feet - \'Don\'t call me a frog!\'' }
] ]
}; };