blob: 11f65c42d9bf1312334d553774ab74618f2229ba [file] [log] [blame]
# Copyright 2020 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 re
import unittest
from types_ import *
from reverse_test import \
reverse_steps, reverse_step_nums, reverse_fidl_steps, reverse_src_steps
class TypesTest(unittest.TestCase):
def test_serialize(self):
serialized = CompatTest(
title='Add protocol method',
fidl={
'before': FidlDef(source='before.test.fidl', instructions=[]),
'after': FidlDef(source='after.test.fidl', instructions=[])
},
bindings={
'hlcpp':
Steps(
starting_fidl='before',
starting_src='before.cpp',
steps=[
SourceStep(
step_num=1,
source='during.cc',
instructions=['do thing']),
FidlStep(step_num=2, fidl='after'),
SourceStep(
step_num=3,
source='after.cc',
instructions=['voila']),
])
})
deserialized = {
'title': 'Add protocol method',
'fidl':
{
'before': {
'source': 'before.test.fidl',
'instructions': []
},
'after': {
'source': 'after.test.fidl',
'instructions': []
}
},
'bindings':
{
'hlcpp':
{
'starting_fidl':
'before',
'starting_src':
'before.cpp',
'steps':
[
{
'step_num': 1,
'source': 'during.cc',
'instructions': ['do thing']
},
{
'step_num': 2,
'fidl': 'after',
},
{
'step_num': 3,
'source': 'after.cc',
'instructions': ['voila']
},
]
}
}
}
self.assertEqual(serialized.todict(), deserialized)
self.assertEqual(CompatTest.fromdict(deserialized), serialized)
class ReverseStepNumTest(unittest.TestCase):
def test_symmetric(self):
# odd number of steps and odd number of total steps means the steps
# are symmetric so there is no change in step numbers:
#
# init | 1 | 2 | 3 | 4 | 5
# -------------------------
# A | B | | C | | D
#
# becomes
#
# init | 1 | 2 | 3 | 4 | 5
# -------------------------
# D | C | | B | | A
self.assertEqual(reverse_step_nums([0, 1, 3, 5], 5), [0, 1, 3, 5])
def test_asymmetric(self):
# even number of steps and even number of total steps means the step
# numbers change:
#
# init | 1 | 2 | 3 | 4
# ---------------------
# A | B | | C |
#
# becomes
#
# init | 1 | 2 | 3 | 4
# ---------------------
# C | | B | | A
self.assertEqual(reverse_step_nums([0, 1, 3], 4), [0, 2, 4])
class ReverseStepsTest(unittest.TestCase):
maxDiff = None
def test_basic(self):
self.assertEqual(
reverse_steps(['step_00_foo', 'step_01_bar', 'step_03_baz'], 3),
['step_00_foo', 'step_01_bar', 'step_03_baz'])
def test_with_parent_paths_and_ext(self):
self.assertEqual(
reverse_steps(['foo/step_00_a.abc', 'bar/step_01_b.xyz'], 2),
['bar/step_00_a.abc', 'foo/step_02_b.xyz'])
def test_fidl(self):
defs = {
'step_00_before':
FidlDef(
source='fidl/step_00_before.test.fidl', instructions=[]),
'step_02_during':
FidlDef(
source='fidl/step_02_during.test.fidl',
instructions=['add/remove method with transitional']),
'step_04_after':
FidlDef(
source='fidl/step_04_after.test.fidl',
instructions=['add/remove transitional']),
}
reversed_defs, old_to_new = reverse_fidl_steps(defs, max_step_num=4)
self.assertEqual(
reversed_defs, {
'step_00_before':
FidlDef(
source='fidl/step_00_before.test.fidl',
instructions=[]),
'step_01_during':
FidlDef(
source='fidl/step_01_during.test.fidl',
instructions=['add/remove transitional']),
'step_03_after':
FidlDef(
source='fidl/step_03_after.test.fidl',
instructions=['add/remove method with transitional']),
})
self.assertEqual(
old_to_new, {
'step_00_before': 'step_03_after',
'step_02_during': 'step_01_during',
'step_04_after': 'step_00_before'
})
def test_src_fidl_assisted(self):
fidl_mapping = {
'step_00_before': 'step_03_after',
'step_02_during': 'step_01_during',
'step_04_after': 'step_00_before'
}
transition = Steps(
starting_fidl='step_00_before',
starting_src='hlcpp/step_00_before.cc',
steps=[
FidlStep(step_num=2, fidl='step_02_during'),
SourceStep(
step_num=3,
source='hlcpp/step_03_after.cc',
instructions=[]),
FidlStep(step_num=4, fidl='step_04_after'),
])
reversed_transition, old_to_new = reverse_src_steps(
transition, fidl_mapping, max_step_num=4)
self.assertEqual(
reversed_transition,
Steps(
starting_fidl='step_00_before',
starting_src='hlcpp/step_00_before.cc',
steps=[
FidlStep(step_num=1, fidl='step_01_during'),
SourceStep(
step_num=2,
source='hlcpp/step_02_after.cc',
instructions=[]),
FidlStep(step_num=3, fidl='step_03_after'),
]))
self.assertEqual(
old_to_new, {
'hlcpp/step_00_before.cc': 'hlcpp/step_02_after.cc',
'hlcpp/step_03_after.cc': 'hlcpp/step_00_before.cc',
})
def test_src_src_assisted(self):
fidl_mapping = {
'step_00_before': 'step_03_after',
'step_02_during': 'step_01_during',
'step_04_after': 'step_00_before'
}
transition = Steps(
starting_fidl='step_00_before',
starting_src='rust/step_00_before.rs',
steps=[
SourceStep(
step_num=1,
source='rust/step_01_during.rs',
instructions=['a']),
FidlStep(step_num=2, fidl='step_02_during'),
SourceStep(
step_num=3,
source='rust/step_03_after.rs',
instructions=['b']),
FidlStep(step_num=4, fidl='step_04_after'),
])
reversed_transition, old_to_new = reverse_src_steps(
transition, fidl_mapping, max_step_num=4)
self.assertEqual(
reversed_transition,
Steps(
starting_fidl='step_00_before',
starting_src='rust/step_00_before.rs',
steps=[
FidlStep(step_num=1, fidl='step_01_during'),
SourceStep(
step_num=2,
source='rust/step_02_during.rs',
instructions=['b']),
FidlStep(step_num=3, fidl='step_03_after'),
SourceStep(
step_num=4,
source='rust/step_04_after.rs',
instructions=['a']),
]))
self.assertEqual(
old_to_new, {
'rust/step_00_before.rs': 'rust/step_04_after.rs',
'rust/step_01_during.rs': 'rust/step_02_during.rs',
'rust/step_03_after.rs': 'rust/step_00_before.rs',
})
if __name__ == '__main__':
unittest.main()