Skip to content

Commit 3d343ef

Browse files
authored
Added the Hacker faker (#102)
* Added the documentation. * Added the data for the Hacker faker. * Implemented the Hacker faker. * Added the HackerFaker to the main faker classes.
1 parent cca72c1 commit 3d343ef

File tree

9 files changed

+333
-0
lines changed

9 files changed

+333
-0
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ A .NET port of the Ruby [faker](https://github.com/stympy/faker) gem
2828
- [Faker.File](doc/file.md)
2929
- [Faker.Food](doc/food.md)
3030
- [Faker.GameOfThrones](doc/game_of_thrones.md)
31+
- [Faker.Hacker](doc/hacker.md)
3132
- [Faker.Internet](doc/internet.md)
3233
- [Faker.Lorem](doc/lorem.md)
3334
- [Faker.Name](doc/name.md)

doc/hacker.md

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
# Faker.Hacker
2+
3+
Are you having trouble writing tech-savvy dialogue for your latest screenplay?
4+
Worry not! Hollywood-grade technical talk is ready to fill out any form where you need to look smart.
5+
6+
```cs
7+
// Full Phrase
8+
Faker.Hacker.SaySomethingSmart() //=> "Try to compress the SQL interface, maybe it will program the back-end hard drive!"
9+
10+
// Short technical abbreviations
11+
Faker.Hacker.Abbreviation() //=> "RAM"
12+
13+
// Hacker centric adjectives
14+
Faker.Hacker.Adjective() //=> "open-source"
15+
16+
// Only the best hacker related nouns
17+
Faker.Hacker.Noun() //=> "bandwidth"
18+
19+
// Actions that hackers take
20+
Faker.Hacker.Verb() //=> "bypass"
21+
22+
// Verbs that end in -ing
23+
Faker.Hacker.Ingverb() //=> "synthesizing"
24+
```

src/FakerDotNet/Data/HackerData.cs

Lines changed: 142 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,142 @@
1+
using System.Collections.Generic;
2+
3+
namespace FakerDotNet.Data
4+
{
5+
internal static class HackerData
6+
{
7+
public static readonly IEnumerable<string> Abbreviations = new[]
8+
{
9+
"TCP",
10+
"HTTP",
11+
"SDD",
12+
"RAM",
13+
"GB",
14+
"CSS",
15+
"SSL",
16+
"AGP",
17+
"SQL",
18+
"FTP",
19+
"PCI",
20+
"AI",
21+
"ADP",
22+
"RSS",
23+
"XML",
24+
"EXE",
25+
"COM",
26+
"HDD",
27+
"THX",
28+
"SMTP",
29+
"SMS",
30+
"USB",
31+
"PNG",
32+
"SAS",
33+
"IB",
34+
"SCSI",
35+
"JSON",
36+
"XSS",
37+
"JBOD"
38+
};
39+
40+
public static readonly IEnumerable<string> Adjectives = new[]
41+
{
42+
"auxiliary",
43+
"primary",
44+
"back-end",
45+
"digital",
46+
"open-source",
47+
"virtual",
48+
"cross-platform",
49+
"redundant",
50+
"online",
51+
"haptic",
52+
"multi-byte",
53+
"bluetooth",
54+
"wireless",
55+
"1080p",
56+
"neural, optical",
57+
"solid state",
58+
"mobile"
59+
};
60+
61+
public static readonly IEnumerable<string> Nouns = new[]
62+
{
63+
"driver",
64+
"protocol",
65+
"bandwidth",
66+
"panel",
67+
"microchip",
68+
"program",
69+
"port",
70+
"card",
71+
"array",
72+
"interface",
73+
"system",
74+
"sensor",
75+
"firewall",
76+
"hard drive",
77+
"pixel",
78+
"alarm",
79+
"feed",
80+
"monitor",
81+
"application",
82+
"transmitter",
83+
"bus",
84+
"circuit",
85+
"capacitor",
86+
"matrix"
87+
};
88+
89+
public static readonly IEnumerable<string> Verbs = new[]
90+
{
91+
"back up",
92+
"bypass",
93+
"hack",
94+
"override",
95+
"compress",
96+
"copy",
97+
"navigate",
98+
"index",
99+
"connect",
100+
"generate",
101+
"quantify",
102+
"calculate",
103+
"synthesize",
104+
"input",
105+
"transmit",
106+
"program",
107+
"reboot",
108+
"parse"
109+
};
110+
111+
public static readonly IEnumerable<string> Ingverbs = new[]
112+
{
113+
"backing up",
114+
"bypassing",
115+
"hacking",
116+
"overriding",
117+
"compressing",
118+
"copying",
119+
"navigating",
120+
"indexing",
121+
"connecting",
122+
"generating",
123+
"quantifying",
124+
"calculating, synthesizing",
125+
"transmitting",
126+
"programming",
127+
"parsing"
128+
};
129+
130+
public static readonly IEnumerable<string> Phrases = new[]
131+
{
132+
"If we {Verb} the {Noun}, we can get to the {Abbreviation} {Noun} through the {Adjective} {Abbreviation} {Noun}!",
133+
"We need to {Verb} the {Adjective} {Abbreviation} {Noun}!",
134+
"Try to {Verb} the {Abbreviation} {Noun}, maybe it will {Verb} the {Adjective} {Noun}!",
135+
"You can't {Verb} the {Noun} without {Ingverb} the {Adjective} {Abbreviation} {Noun}!",
136+
"Use the {Adjective} {Abbreviation} {Noun}, then you can {Verb} the {Adjective} {Noun}!",
137+
"The {Abbreviation} {Noun} is down, {Verb} the {Adjective} {Noun} so we can {Verb} the {Abbreviation} {Noun}!",
138+
"{Ingverb} the {Noun} won't do anything, we need to {Verb} the {Adjective} {Abbreviation} {Noun}!",
139+
"I'll {Verb} the {Adjective} {Abbreviation} {Noun}, that should {Noun} the {Abbreviation} {Noun}!"
140+
};
141+
}
142+
}

src/FakerDotNet/Faker.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ public static class Faker
2525
public static IFoodFaker Food { get; } = Container.Food;
2626
public static IFriendsFaker Friends { get; } = Container.Friends;
2727
public static IGameOfThronesFaker GameOfThrones { get; } = Container.GameOfThrones;
28+
public static IHackerFaker Hacker { get; } = Container.Hacker;
2829
public static IInternetFaker Internet { get; } = Container.Internet;
2930
public static ILoremFaker Lorem { get; } = Container.Lorem;
3031
public static INameFaker Name { get; } = Container.Name;

src/FakerDotNet/FakerContainer.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ internal interface IFakerContainer
2323
IFoodFaker Food { get; }
2424
IFriendsFaker Friends { get; }
2525
IGameOfThronesFaker GameOfThrones { get; }
26+
IHackerFaker Hacker { get; }
2627
IInternetFaker Internet { get; }
2728
ILoremFaker Lorem { get; }
2829
INameFaker Name { get; }
@@ -65,6 +66,7 @@ public FakerContainer()
6566
Food = new FoodFaker(this);
6667
Friends = new FriendsFaker(this);
6768
GameOfThrones = new GameOfThronesFaker(this);
69+
Hacker = new HackerFaker(this);
6870
Internet = new InternetFaker(this);
6971
Lorem = new LoremFaker(this);
7072
Name = new NameFaker(this);
@@ -103,6 +105,7 @@ public FakerContainer()
103105
public IFoodFaker Food { get; }
104106
public IFriendsFaker Friends { get; }
105107
public IGameOfThronesFaker GameOfThrones { get; }
108+
public IHackerFaker Hacker { get; }
106109
public IInternetFaker Internet { get; }
107110
public ILoremFaker Lorem { get; }
108111
public INameFaker Name { get; }
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
using System.Text.RegularExpressions;
2+
using FakerDotNet.Data;
3+
4+
namespace FakerDotNet.Fakers
5+
{
6+
public interface IHackerFaker
7+
{
8+
string SaySomethingSmart();
9+
string Abbreviation();
10+
string Adjective();
11+
string Noun();
12+
string Verb();
13+
string Ingverb();
14+
}
15+
16+
internal class HackerFaker : IHackerFaker
17+
{
18+
private readonly IFakerContainer _fakerContainer;
19+
20+
public HackerFaker(IFakerContainer fakerContainer)
21+
{
22+
_fakerContainer = fakerContainer;
23+
}
24+
25+
public string SaySomethingSmart()
26+
{
27+
return Parse(_fakerContainer.Random.Element(HackerData.Phrases));
28+
}
29+
30+
public string Abbreviation()
31+
{
32+
return _fakerContainer.Random.Element(HackerData.Abbreviations);
33+
}
34+
35+
public string Adjective()
36+
{
37+
return _fakerContainer.Random.Element(HackerData.Adjectives);
38+
}
39+
40+
public string Noun()
41+
{
42+
return _fakerContainer.Random.Element(HackerData.Nouns);
43+
}
44+
45+
public string Verb()
46+
{
47+
return _fakerContainer.Random.Element(HackerData.Verbs);
48+
}
49+
50+
public string Ingverb()
51+
{
52+
return _fakerContainer.Random.Element(HackerData.Ingverbs);
53+
}
54+
55+
private string Parse(string format)
56+
{
57+
var text = Regex.Replace(format, @"\{(\w+)\}", @"{Hacker.$1}");
58+
59+
return _fakerContainer.Fake.F(text);
60+
}
61+
}
62+
}

tests/FakerDotNet.Tests/FakerContainerTests.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,12 @@ public void GameOfThrones_returns_IGameOfThronesFaker()
129129
Assert.IsInstanceOf<IGameOfThronesFaker>(_fakerContainer.GameOfThrones);
130130
}
131131

132+
[Test]
133+
public void Hacker_returns_IHackerFaker()
134+
{
135+
Assert.IsInstanceOf<IHackerFaker>(_fakerContainer.Hacker);
136+
}
137+
132138
[Test]
133139
public void Internet_returns_IInternetFaker()
134140
{

tests/FakerDotNet.Tests/FakerTests.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,12 @@ public void GameOfThrones_returns_IGameOfThronesFaker()
121121
Assert.IsInstanceOf<IGameOfThronesFaker>(Faker.GameOfThrones);
122122
}
123123

124+
[Test]
125+
public void Hacker_returns_IHackerFaker()
126+
{
127+
Assert.IsInstanceOf<IHackerFaker>(Faker.Hacker);
128+
}
129+
124130
[Test]
125131
public void Internet_returns_IInternetFaker()
126132
{
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
using FakeItEasy;
2+
using FakerDotNet.Data;
3+
using FakerDotNet.Fakers;
4+
using NUnit.Framework;
5+
6+
namespace FakerDotNet.Tests.Fakers
7+
{
8+
[TestFixture]
9+
[Parallelizable]
10+
public class HackerFakerTests
11+
{
12+
[SetUp]
13+
public void SetUp()
14+
{
15+
_fakerContainer = A.Fake<IFakerContainer>();
16+
_hackerFaker = new HackerFaker(_fakerContainer);
17+
18+
A.CallTo(() => _fakerContainer.Fake).Returns(new FakeFaker(_fakerContainer));
19+
}
20+
21+
private IFakerContainer _fakerContainer;
22+
private IHackerFaker _hackerFaker;
23+
24+
[Test]
25+
public void SaySomethingSmart_returns_something_smart()
26+
{
27+
A.CallTo(() => _fakerContainer.Random.Element(HackerData.Phrases))
28+
.Returns("Try to {Verb} the {Abbreviation} {Noun}, maybe it will {Verb} the {Adjective} {Noun}!");
29+
A.CallTo(() => _fakerContainer.Hacker.Verb())
30+
.ReturnsNextFromSequence("compress", "program");
31+
A.CallTo(() => _fakerContainer.Hacker.Abbreviation())
32+
.Returns("SQL");
33+
A.CallTo(() => _fakerContainer.Hacker.Noun())
34+
.ReturnsNextFromSequence("interface", "hard drive");
35+
A.CallTo(() => _fakerContainer.Hacker.Adjective())
36+
.Returns("back-end");
37+
38+
Assert.AreEqual(
39+
"Try to compress the SQL interface, maybe it will program the back-end hard drive!",
40+
_hackerFaker.SaySomethingSmart());
41+
}
42+
43+
[Test]
44+
public void Abbreviation_returns_an_abbreviation()
45+
{
46+
A.CallTo(() => _fakerContainer.Random.Element(HackerData.Abbreviations))
47+
.Returns("RAM");
48+
49+
Assert.AreEqual("RAM", _hackerFaker.Abbreviation());
50+
}
51+
52+
[Test]
53+
public void Adjective_returns_an_adjective()
54+
{
55+
A.CallTo(() => _fakerContainer.Random.Element(HackerData.Adjectives))
56+
.Returns("open-source");
57+
58+
Assert.AreEqual("open-source", _hackerFaker.Adjective());
59+
}
60+
61+
[Test]
62+
public void Noun_returns_a_noun()
63+
{
64+
A.CallTo(() => _fakerContainer.Random.Element(HackerData.Nouns))
65+
.Returns("bandwidth");
66+
67+
Assert.AreEqual("bandwidth", _hackerFaker.Noun());
68+
}
69+
70+
[Test]
71+
public void Verb_returns_a_verb()
72+
{
73+
A.CallTo(() => _fakerContainer.Random.Element(HackerData.Verbs))
74+
.Returns("bypass");
75+
76+
Assert.AreEqual("bypass", _hackerFaker.Verb());
77+
}
78+
79+
[Test]
80+
public void Ingverb_returns_an_ing_ending_verb()
81+
{
82+
A.CallTo(() => _fakerContainer.Random.Element(HackerData.Ingverbs))
83+
.Returns("synthesizing");
84+
85+
Assert.AreEqual("synthesizing", _hackerFaker.Ingverb());
86+
}
87+
}
88+
}

0 commit comments

Comments
 (0)