package Ġdev . ss ch . mini java . compiler Ċ Ċ import Ġdev . ss ch . mini java . compiler . util . Compiler Test Ċ import Ġorg . assertj . core . api . Assertions . assertThat Ċ import Ġorg . junit . jupiter . api . Test Ċ Ċ class ĠThis Test Ġ: ĠCompiler Test () Ġ{ ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` access Ġfields Ġin Ġconstructor Ġwith Ġthis `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġoutput Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclass ĠMain Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġstatic Ġvoid Ġmain () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPoint Ġp Ġ= Ġnew ĠPoint ( 1 2 3 , Ġ 4 5 6 ); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConsole . println ( p . x ); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConsole . println ( p . y ); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġclass ĠPoint Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġint Ġx ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġint Ġy ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPoint ( int Ġx , Ġint Ġy ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . x Ġ= Ġx ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . y Ġ= Ġy ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConsole . println ( this . x ); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConsole . println ( this . y ); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . x Ġ= Ġthis . y ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . y Ġ= Ġx ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConsole . println ( this . x ); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConsole . println ( this . y ); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . y Ġ= Ġthis . x ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . x Ġ= Ġx ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConsole . println ( this . x ); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConsole . println ( this . y ); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ""" . compile And Run () ĊĠĠĠĠĠĠĠ ĠassertThat ( output . lines ()). contains Exactly (" 1 2 3 ", Ġ" 4 5 6 ", Ġ" 4 5 6 ", Ġ" 1 2 3 ", Ġ" 1 2 3 ", Ġ" 4 5 6 ", Ġ" 1 2 3 ", Ġ" 4 5 6 ", Ġ"") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` pass Ġthis Ġaround `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġoutput Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclass ĠMain Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġstatic Ġvoid Ġmain () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠA Ġa Ġ= Ġnew ĠA (); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConsole . println ( a . value ); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConsole . println ( a . b . value ); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConsole . println ( a . b . a . value ); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConsole . println ( a . b . a . b . value ); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġclass ĠA Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠB Ġb ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġint Ġvalue ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠA () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġb Ġ= Ġnew ĠB ( this ); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġ 1 2 3 ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġclass ĠB Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠA Ġa ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġint Ġvalue ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠB ( A Ġa ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . a Ġ= Ġa ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġ 4 5 6 ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ""" . compile And Run () ĊĠĠĠĠĠĠĠ ĠassertThat ( output . lines ()). contains Exactly (" 1 2 3 ", Ġ" 4 5 6 ", Ġ" 1 2 3 ", Ġ" 4 5 6 ", Ġ"") ĊĠĠĠ Ġ} ĊĊ Ċ }