mangayomi-mirror/epubx/test/random_data_generator.dart
2025-05-04 23:45:46 +02:00

260 lines
9.4 KiB
Dart

import 'dart:math' show Random;
import 'package:epubx/epub.dart';
import 'package:epubx/src/schema/navigation/epub_metadata.dart';
import 'package:epubx/src/schema/navigation/epub_navigation_doc_author.dart';
import 'package:epubx/src/schema/navigation/epub_navigation_doc_title.dart';
import 'package:epubx/src/schema/navigation/epub_navigation_head.dart';
import 'package:epubx/src/schema/navigation/epub_navigation_head_meta.dart';
import 'package:epubx/src/schema/navigation/epub_navigation_label.dart';
import 'package:epubx/src/schema/navigation/epub_navigation_point.dart';
import 'package:epubx/src/schema/navigation/epub_navigation_target.dart';
import 'package:epubx/src/schema/opf/epub_guide.dart';
import 'package:epubx/src/schema/opf/epub_guide_reference.dart';
import 'package:epubx/src/schema/opf/epub_manifest.dart';
import 'package:epubx/src/schema/opf/epub_manifest_item.dart';
import 'package:epubx/src/schema/opf/epub_metadata.dart';
import 'package:epubx/src/schema/opf/epub_metadata_contributor.dart';
import 'package:epubx/src/schema/opf/epub_metadata_creator.dart';
import 'package:epubx/src/schema/opf/epub_metadata_date.dart';
import 'package:epubx/src/schema/opf/epub_metadata_identifier.dart';
import 'package:epubx/src/schema/opf/epub_metadata_meta.dart';
import 'package:epubx/src/schema/opf/epub_spine.dart';
import 'package:epubx/src/schema/opf/epub_spine_item_ref.dart';
import 'package:epubx/src/schema/opf/epub_version.dart';
class RandomString {
final Random rng;
RandomString(this.rng) {}
static const ASCII_START = 33;
static const ASCII_END = 126;
static const NUMERIC_START = 48;
static const NUMERIC_END = 57;
static const LOWER_ALPHA_START = 97;
static const LOWER_ALPHA_END = 122;
static const UPPER_ALPHA_START = 65;
static const UPPER_ALPHA_END = 90;
/// Generates a random integer where [from] <= [to].
int randomBetween(int from, int to) {
if (from > to) throw new Exception('$from is not > $to');
return ((to - from) * rng.nextDouble()).toInt() + from;
}
/// Generates a random string of [length] with characters
/// between ascii [from] to [to].
/// Defaults to characters of ascii '!' to '~'.
String randomString(int length, {int from: ASCII_START, int to: ASCII_END}) {
return new String.fromCharCodes(
new List.generate(length, (index) => randomBetween(from, to)));
}
/// Generates a random string of [length] with only numeric characters.
String randomNumeric(int length) =>
randomString(length, from: NUMERIC_START, to: NUMERIC_END);
/// Generates a random string of [length] with only alpha characters.
String randomAlpha(int length) {
var lowerAlphaLength = randomBetween(0, length);
var upperAlphaLength = length - lowerAlphaLength;
var lowerAlpha = randomString(lowerAlphaLength,
from: LOWER_ALPHA_START, to: LOWER_ALPHA_END);
var upperAlpha = randomString(upperAlphaLength,
from: UPPER_ALPHA_START, to: UPPER_ALPHA_END);
return randomMerge(lowerAlpha, upperAlpha);
}
/// Generates a random string of [length] with alpha-numeric characters.
String randomAlphaNumeric(int length) {
var alphaLength = randomBetween(0, length);
var numericLength = length - alphaLength;
var alpha = randomAlpha(alphaLength);
var numeric = randomNumeric(numericLength);
return randomMerge(alpha, numeric);
}
/// Merge [a] with [b] and scramble characters.
String randomMerge(String a, String b) {
List<int> mergedCodeUnits = new List.from("$a$b".codeUnits);
mergedCodeUnits.shuffle(rng);
return new String.fromCharCodes(mergedCodeUnits);
}
}
class RandomDataGenerator {
final Random rng;
RandomString _randomString;
final int _length;
RandomDataGenerator(this.rng, this._length) {
_randomString = new RandomString(rng);
}
String randomString() {
return _randomString.randomAlphaNumeric(_length);
}
EpubNavigationPoint randomEpubNavigationPoint([int depth = 0]) {
return new EpubNavigationPoint()
..PlayOrder = randomString()
..NavigationLabels = [randomEpubNavigationLabel()]
..Id = randomString()
..Content = randomEpubNavigationContent()
..Class = randomString()
..ChildNavigationPoints = depth > 0
? [randomEpubNavigationPoint(depth - 1)]
: new List<EpubNavigationPoint>();
}
EpubNavigationContent randomEpubNavigationContent() {
return new EpubNavigationContent()
..Id = randomString()
..Source = randomString();
}
EpubNavigationTarget randomEpubNavigationTarget() {
return new EpubNavigationTarget()
..Class = randomString()
..Content = randomEpubNavigationContent()
..Id = randomString()
..NavigationLabels = [randomEpubNavigationLabel()]
..PlayOrder = randomString()
..Value = randomString();
}
EpubNavigationLabel randomEpubNavigationLabel() {
return new EpubNavigationLabel()..Text = randomString();
}
EpubNavigationHead randomEpubNavigationHead() {
return new EpubNavigationHead()..Metadata = [randomNavigationHeadMeta()];
}
EpubNavigationHeadMeta randomNavigationHeadMeta() {
return new EpubNavigationHeadMeta()
..Content = randomString()
..Name = randomString()
..Scheme = randomString();
}
EpubNavigationDocTitle randomNavigationDocTitle() {
return new EpubNavigationDocTitle()..Titles = [randomString()];
}
EpubNavigationDocAuthor randomNavigationDocAuthor() {
return new EpubNavigationDocAuthor()..Authors = [randomString()];
}
EpubPackage randomEpubPackage() {
return new EpubPackage()
..Guide = randomEpubGuide()
..Manifest = randomEpubManifest()
..Metadata = randomEpubMetadata()
..Spine = randomEpubSpine()
..Version = rng.nextBool() ? EpubVersion.Epub2 : EpubVersion.Epub3;
}
EpubSpine randomEpubSpine() {
var reference = new EpubSpine()
..Items = [randomEpubSpineItemRef()]
..TableOfContents = _randomString.randomAlpha(_length);
return reference;
}
EpubSpineItemRef randomEpubSpineItemRef() {
return new EpubSpineItemRef()
..IdRef = _randomString.randomAlpha(_length)
..IdRef = _randomString.randomAlpha(_length);
}
EpubManifest randomEpubManifest() {
var reference = new EpubManifest();
reference.Items = [randomEpubManifestItem()];
return reference;
}
EpubManifestItem randomEpubManifestItem() {
return new EpubManifestItem()
..Fallback = _randomString.randomAlpha(_length)
..FallbackStyle = _randomString.randomAlpha(_length)
..Href = _randomString.randomAlpha(_length)
..Id = _randomString.randomAlpha(_length)
..MediaType = _randomString.randomAlpha(_length)
..RequiredModules = _randomString.randomAlpha(_length)
..RequiredNamespace = _randomString.randomAlpha(_length);
}
EpubGuide randomEpubGuide() {
var reference = new EpubGuide();
reference.Items = [randomEpubGuideReference()];
return reference;
}
EpubGuideReference randomEpubGuideReference() {
return new EpubGuideReference()
..Href = _randomString.randomAlpha(_length)
..Title = _randomString.randomAlpha(_length)
..Type = _randomString.randomAlpha(_length);
}
EpubMetadata randomEpubMetadata() {
var reference = new EpubMetadata()
..Contributors = [randomEpubMetadataContributor()]
..Coverages = [_randomString.randomAlpha(_length)]
..Creators = [randomEpubMetadataCreator()]
..Dates = [randomEpubMetadataDate()]
..Description = _randomString.randomAlpha(_length)
..Formats = [_randomString.randomAlpha(_length)]
..Identifiers = [randomEpubMetadataIdentifier()]
..Languages = [_randomString.randomAlpha(_length)]
..MetaItems = [randomEpubMetadataMeta()]
..Publishers = [_randomString.randomAlpha(_length)]
..Relations = [_randomString.randomAlpha(_length)]
..Rights = [_randomString.randomAlpha(_length)]
..Sources = [_randomString.randomAlpha(_length)]
..Subjects = [_randomString.randomAlpha(_length)]
..Titles = [_randomString.randomAlpha(_length)]
..Types = [_randomString.randomAlpha(_length)];
return reference;
}
EpubMetadataMeta randomEpubMetadataMeta() {
return new EpubMetadataMeta()
..Content = _randomString.randomAlpha(_length)
..Id = _randomString.randomAlpha(_length)
..Name = _randomString.randomAlpha(_length)
..Property = _randomString.randomAlpha(_length)
..Refines = _randomString.randomAlpha(_length)
..Scheme = _randomString.randomAlpha(_length);
}
EpubMetadataIdentifier randomEpubMetadataIdentifier() {
return new EpubMetadataIdentifier()
..Id = _randomString.randomAlpha(_length)
..Identifier = _randomString.randomAlpha(_length)
..Scheme = _randomString.randomAlpha(_length);
}
EpubMetadataDate randomEpubMetadataDate() {
return new EpubMetadataDate()
..Date = _randomString.randomAlpha(_length)
..Event = _randomString.randomAlpha(_length);
}
EpubMetadataContributor randomEpubMetadataContributor() {
return new EpubMetadataContributor()
..Contributor = _randomString.randomAlpha(_length)
..FileAs = _randomString.randomAlpha(_length)
..Role = _randomString.randomAlpha(_length);
}
EpubMetadataCreator randomEpubMetadataCreator() {
return new EpubMetadataCreator()
..Creator = _randomString.randomAlpha(_length)
..FileAs = _randomString.randomAlpha(_length)
..Role = _randomString.randomAlpha(_length);
}
}