Skip to content

Commit 8db3e00

Browse files
Merge pull request #40 from wieslawsoltes/Modifiers
Modifiers
2 parents 516c889 + f42a18e commit 8db3e00

17 files changed

+2029
-4
lines changed

ReactiveGenerator.Tests/ReactiveGenerator/ReactiveGeneratorTests.cs

Lines changed: 293 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1269,4 +1269,297 @@ public partial class RegularClass
12691269

12701270
return TestAndVerify(source);
12711271
}
1272+
1273+
[Fact]
1274+
public Task RequiredPropertyTest()
1275+
{
1276+
var source = @"
1277+
[Reactive]
1278+
public partial class Person
1279+
{
1280+
public required partial string Name { get; set; }
1281+
public required partial int Age { get; set; }
1282+
public partial string? OptionalNickname { get; set; }
1283+
}";
1284+
1285+
return TestAndVerify(source);
1286+
}
1287+
1288+
[Fact]
1289+
public Task RequiredPropertyWithReactiveObjectTest()
1290+
{
1291+
var source = @"
1292+
using ReactiveUI;
1293+
1294+
[Reactive]
1295+
public partial class Person : ReactiveObject
1296+
{
1297+
public required partial string Name { get; set; }
1298+
public required partial DateOnly BirthDate { get; set; }
1299+
}";
1300+
1301+
return TestAndVerify(source);
1302+
}
1303+
1304+
[Fact]
1305+
public Task RequiredPropertyWithInheritanceTest()
1306+
{
1307+
var source = @"
1308+
[Reactive]
1309+
public abstract partial class Entity
1310+
{
1311+
public required partial string Id { get; set; }
1312+
}
1313+
1314+
[Reactive]
1315+
public partial class Person : Entity
1316+
{
1317+
public required partial string Name { get; set; }
1318+
}";
1319+
1320+
return TestAndVerify(source);
1321+
}
1322+
1323+
[Fact]
1324+
public Task RequiredPropertyWithMixedModifiersTest()
1325+
{
1326+
var source = @"
1327+
[Reactive]
1328+
public partial class BaseClass
1329+
{
1330+
public required virtual partial string VirtualRequired { get; set; }
1331+
}
1332+
1333+
[Reactive]
1334+
public partial class DerivedClass : BaseClass
1335+
{
1336+
public required override partial string VirtualRequired { get; set; }
1337+
public required partial string LocalRequired { get; set; }
1338+
}";
1339+
1340+
return TestAndVerify(source);
1341+
}
1342+
1343+
[Fact]
1344+
public Task AllPropertyModifiersTest()
1345+
{
1346+
var source = @"
1347+
[Reactive]
1348+
public partial class Base
1349+
{
1350+
// Static properties
1351+
public static partial string StaticProp { get; set; }
1352+
protected static partial string ProtectedStaticProp { get; set; }
1353+
1354+
// Virtual and abstract properties
1355+
public virtual partial string VirtualProp { get; set; }
1356+
public abstract partial string AbstractProp { get; set; }
1357+
1358+
// Required properties
1359+
public required partial string RequiredProp { get; set; }
1360+
1361+
// Mixed modifiers
1362+
public required virtual partial string RequiredVirtualProp { get; set; }
1363+
}
1364+
1365+
[Reactive]
1366+
public partial class Derived : Base
1367+
{
1368+
// New properties (shadowing)
1369+
public new partial string VirtualProp { get; set; }
1370+
1371+
// Override properties
1372+
public override partial string AbstractProp { get; set; }
1373+
1374+
// Sealed override properties
1375+
public sealed override partial string RequiredVirtualProp { get; set; }
1376+
1377+
// Static shadows
1378+
public new static partial string StaticProp { get; set; }
1379+
}";
1380+
1381+
return TestAndVerify(source);
1382+
}
1383+
1384+
[Fact]
1385+
public Task StaticPropertyTest()
1386+
{
1387+
var source = @"
1388+
[Reactive]
1389+
public partial class TestClass
1390+
{
1391+
public static partial string GlobalConfig { get; set; }
1392+
private static partial int Counter { get; set; }
1393+
}";
1394+
1395+
return TestAndVerify(source);
1396+
}
1397+
1398+
[Fact]
1399+
public Task NewModifierTest()
1400+
{
1401+
var source = @"
1402+
[Reactive]
1403+
public partial class Base
1404+
{
1405+
public partial string Name { get; set; }
1406+
}
1407+
1408+
[Reactive]
1409+
public partial class Derived : Base
1410+
{
1411+
public new partial string Name { get; set; }
1412+
}";
1413+
1414+
return TestAndVerify(source);
1415+
}
1416+
1417+
[Fact]
1418+
public Task SealedOverrideTest()
1419+
{
1420+
var source = @"
1421+
[Reactive]
1422+
public partial class Base
1423+
{
1424+
public virtual partial string VirtualProp { get; set; }
1425+
}
1426+
1427+
[Reactive]
1428+
public partial class Derived : Base
1429+
{
1430+
public sealed override partial string VirtualProp { get; set; }
1431+
}";
1432+
1433+
return TestAndVerify(source);
1434+
}
1435+
1436+
[Fact]
1437+
public Task MixedModifiersTest()
1438+
{
1439+
var source = @"
1440+
[Reactive]
1441+
public partial class TestClass
1442+
{
1443+
// Static + Required
1444+
public static required partial string StaticRequired { get; set; }
1445+
1446+
// New + Static
1447+
public new static partial string NewStatic { get; set; }
1448+
1449+
// Virtual + Required
1450+
public virtual required partial string VirtualRequired { get; set; }
1451+
1452+
// Override + Sealed
1453+
public sealed override partial string SealedOverride { get; set; }
1454+
}";
1455+
1456+
return TestAndVerify(source);
1457+
}
1458+
1459+
[Fact]
1460+
public Task AccessorModifiersTest()
1461+
{
1462+
var source = @"
1463+
[Reactive]
1464+
public partial class TestClass
1465+
{
1466+
// Property with private setter
1467+
public partial string Name { get; private set; }
1468+
1469+
// Protected property with private getter
1470+
protected partial string Id { private get; set; }
1471+
1472+
// Internal property with protected setter
1473+
internal partial string Code { get; protected set; }
1474+
1475+
// Public property with protected internal setter
1476+
public partial string Key { get; protected internal set; }
1477+
}";
1478+
1479+
return TestAndVerify(source);
1480+
}
1481+
1482+
[Fact]
1483+
public Task ModifierOrderingTest()
1484+
{
1485+
var source = @"
1486+
[Reactive]
1487+
public partial class Base
1488+
{
1489+
// Base class properties for override/shadowing
1490+
public virtual partial string VirtualProp { get; set; }
1491+
protected virtual partial string ProtectedVirtualProp { get; set; }
1492+
public static partial string StaticProp { get; set; }
1493+
public abstract partial string AbstractProp { get; set; }
1494+
}
1495+
1496+
[Reactive]
1497+
public partial class Derived : Base
1498+
{
1499+
// Test new modifier comes first
1500+
public new partial string VirtualProp { get; set; }
1501+
1502+
// Test new + static ordering
1503+
public new static partial string StaticProp { get; set; }
1504+
1505+
// Test override + sealed + required ordering
1506+
public sealed override required partial string ProtectedVirtualProp { get; set; }
1507+
1508+
// Test override + required ordering
1509+
public override required partial string AbstractProp { get; set; }
1510+
1511+
// Test required only
1512+
public required partial string RequiredProp { get; set; }
1513+
}";
1514+
1515+
return TestAndVerify(source);
1516+
}
1517+
1518+
[Fact]
1519+
public Task InheritanceModifiersTest()
1520+
{
1521+
var source = @"
1522+
[Reactive]
1523+
public abstract partial class BaseClass
1524+
{
1525+
// Virtual property
1526+
public virtual partial string VirtualProp { get; set; }
1527+
1528+
// Abstract property
1529+
public abstract partial string AbstractProp { get; set; }
1530+
}
1531+
1532+
[Reactive]
1533+
public partial class DerivedClass : BaseClass
1534+
{
1535+
// Override property
1536+
public override partial string VirtualProp { get; set; }
1537+
1538+
// Sealed override property
1539+
public sealed override partial string AbstractProp { get; set; }
1540+
}";
1541+
1542+
return TestAndVerify(source);
1543+
}
1544+
1545+
[Fact]
1546+
public Task RequiredModifierTest()
1547+
{
1548+
var source = @"
1549+
[Reactive]
1550+
public partial class TestClass
1551+
{
1552+
// Required property
1553+
public required partial string Name { get; set; }
1554+
1555+
// Required with virtual
1556+
public virtual required partial string VirtualRequired { get; set; }
1557+
1558+
// Required with different access levels
1559+
protected required partial string ProtectedRequired { get; set; }
1560+
private required partial string PrivateRequired { get; set; }
1561+
}";
1562+
1563+
return TestAndVerify(source);
1564+
}
12721565
}

0 commit comments

Comments
 (0)