blob: 27392c63eb9d479f253c71dd4a9725581436828e [file] [log] [blame]
// Copyright 2018 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'package:lib_setui_common/syllabus.dart';
import 'package:lib_setui_common/syllabus_parser.dart';
import 'package:test/test.dart';
import 'package:yaml/yaml.dart';
/// A well-formed syllabus.
const String _testSyllabus = '''
---
entry: start
...
---
start:
action: begin
default_transition: connectivity
results: {signin: login}
connectivity:
action: connect
results: {repeat: connectivity, finish: end}
login:
action: authenticate
default_transition: end
end:
action: finish
...
''';
/// A syllabus with a default_transition.
const String _defaultTransitionSyllabus = '''
---
entry: start
...
---
start:
action: begin
default_transition: connectivity
connectivity:
action: connect
...
''';
/// A well-formed syllabus with single use id.
const String _singleUseIdSyllabus = '''
---
entry: start
single_use_id: com.test.syllabus.id
...
---
start:
action: begin
...
''';
/// The single use id should be a [String].
const String _malformedSingleUseIdSyllabus = '''
---
entry: start
single_use_id: [one, two, three]
...
---
start:
action: begin
...
''';
/// The syllabus is missing step definitions.
const String _wrongLengthSyllabus = '''
---
entry: start
...
''';
/// A result step is referenced without being defined.
const String _missingResultStepSyllabus = '''
---
entry: start
...
---
start:
action: begin
default_transition: connectivity
results: {signin: login}
connectivity:
action: connect
...
''';
/// The entry points to a non-existent step.
const String _undefinedEntrySyllabus = '''
---
entry: nonexist
...
---
start:
action: begin
...
''';
/// The results field should be a map.
const String _malformedResultSyllabus = '''
---
entry: start
...
---
start:
action: begin
results: nothing
...
''';
/// The results field key is misspelled.
const String _malformedStepSyllabus = '''
---
entry: start
...
---
start:
action: begin
res: nothing
...
''';
/// Extra entry under the metadata.
const String _malformedMetaSyllabus = '''
---
entry: start
last: foo
...
---
start:
action: begin
...
''';
/// The resulting step is undefined.
const String _undefinedResultSyllabus = '''
---
entry: start
...
---
start:
action: begin
results: {foo: bar}
...
''';
/// The next step is undefined.
const String _undefinedNextSyllabus = '''
---
entry: start
...
---
start:
action: begin
default_transition: foo
...
''';
/// Unreachable step.
const String _unreachableStepSyllabus = '''
---
entry: start
...
---
start:
action: begin
end:
action: finish
...
''';
/// Unreachable step.
const String _emptySyllabus = '''
---
...
''';
void main() {
// Exercises SyllabusParser's validate method, which ensures syllabus
// files are well-formed before consuming.
test('test_validation', () {
expect(SyllabusParser.validate(loadYamlDocuments(_testSyllabus)),
ParseResult.success);
expect(SyllabusParser.validate(loadYamlDocuments(_singleUseIdSyllabus)),
ParseResult.success);
expect(
SyllabusParser
.validate(loadYamlDocuments(_malformedSingleUseIdSyllabus)),
ParseResult.malformedSingleUseId);
expect(
SyllabusParser.validate(loadYamlDocuments(_missingResultStepSyllabus)),
ParseResult.undefinedResultStep);
expect(SyllabusParser.validate(null), ParseResult.wronglength);
expect(SyllabusParser.validate(loadYamlDocuments(_emptySyllabus)),
ParseResult.wronglength);
expect(SyllabusParser.validate(loadYamlDocuments(_wrongLengthSyllabus)),
ParseResult.wronglength);
expect(SyllabusParser.validate(loadYamlDocuments(_undefinedEntrySyllabus)),
ParseResult.entryNotDefined);
expect(SyllabusParser.validate(loadYamlDocuments(_malformedResultSyllabus)),
ParseResult.malformedResults);
expect(SyllabusParser.validate(loadYamlDocuments(_malformedStepSyllabus)),
ParseResult.malformedStep);
expect(SyllabusParser.validate(loadYamlDocuments(_malformedMetaSyllabus)),
ParseResult.malformedMetaData);
expect(SyllabusParser.validate(loadYamlDocuments(_undefinedResultSyllabus)),
ParseResult.undefinedResultStep);
expect(SyllabusParser.validate(loadYamlDocuments(_undefinedNextSyllabus)),
ParseResult.undefinedDefaultTransition);
expect(SyllabusParser.validate(loadYamlDocuments(_unreachableStepSyllabus)),
ParseResult.unreachableStep);
});
// Verifies the syllabus object generated is consistent with the input.
test('test_syllabus_creation', () {
final Syllabus syllabus =
SyllabusParser.parse(loadYamlDocuments(_singleUseIdSyllabus));
expect(syllabus.retrieveStep('start').action, 'begin');
expect(syllabus.singleUseId, 'com.test.syllabus.id');
expect(syllabus.entry.key, 'start');
});
// Ensures default transition is set properly
test('test_default_transition', () {
final Syllabus syllabus =
SyllabusParser.parse(loadYamlDocuments(_defaultTransitionSyllabus));
expect(syllabus.entry.getNext() != null, true);
});
}