[v3] Make environ.exp run on all platforms (and create info-program.exp)

Message ID 874lx9zn4w.fsf@redhat.com
State New, archived
Headers

Commit Message

Sergio Durigan Junior April 27, 2017, 7:06 p.m. UTC
  On Thursday, April 27 2017, Pedro Alves wrote:

> On 04/26/2017 11:28 PM, Sergio Durigan Junior wrote:
>> Changes since v2:
>> 
>> - Removed \t when matching the output of 'info program'.
>> 
>> This has been on my TODO list for a while.  There's a really old bug
>> about this (PR testsuite/8595), and there was no reason for
>> environ.exp to be specific for hppa* targets.  So this patch removes
>> this constraint, modernizes the testcase, and cleans up some things.
>> Most of the tests remained, and some were rewritten (especially the
>> one that checks if "show environment" works, which is something kind
>> of hard to do).
>
> It'd be good to cross check for overlap with gdb.base/testenv.exp.

One could say there is overlap, but testenv.exp is basically testing the
interaction between GDB's environment system with live inferiors, while
environ.exp is testing the "set/show" commands only.  They are both
worth having.

>>  # Verify that we can show all currently-set environment variables.
>> -# (It's a bit hacky, but nonetheless probably safe to check for at
>> -# least the SHELL variable.)
>> -#
>> -# need to increase timeout because of very long output
>> -set oldtimeout $timeout
>> -set timeout [expr "$timeout + 300"]
>> -
>> -send_gdb "show environment\n"
>> -gdb_expect {
>> -  -re ".*SHELL=(\[a-zA-Z0-9\]*).*$gdb_prompt $"\
>> -          {pass "show environment"}
>> -  -re "$gdb_prompt $"\
>> -          {fail "show environment"}
>> -  timeout {fail "(timeout) show environment"}
>> -}
>> -set timeout $oldtimeout
>> +# It's hard to do this verification since we can't really compare each
>> +# entry with the current environment.  So we just check to see if
>> +# there is anything that looks like an environment variable being
>> +# printed.
>> +gdb_test "show environment" "(\[A-Za-z_\]+=.*)+" \
>> +    "show environment works"
>
> We can easily set a variable in the environment before spawning GDB.
> We'd just have to limit that specific test to when not testing with a
> remote host, I think?  See gdb.base/gdbhistsize-history.exp for example.

Yeah, I thought about that, but what this command really wants to test
is that there is a list of environment variables.

testenv.exp has a test that does just what you described; I'd rather
leave the environ.exp test like it is now, unless you really think it's
worth doing it as you proposed.

>
>> +gdb_test_multiple "unset environment" $msg {
>> +    -re "Delete all environment variables.*y or n.*$" {
>> +	gdb_test_no_output "y" $msg
>> +    }
>> +    -re "$gdb_prompt $" {
>> +	fail $msg
>> +    }
>>  }
>
> The '-re "$gdb_prompt $"' part is not necessary because
> gdb_test_multiple already does that by default.
> And then you can use gdb_test for this:
>
>   gdb_test "unset environment" "" $msg \
>     "Delete all environment variables. .y or n. $" \
>     "y"

Hm, thanks, fixed that.

>> -# Verify that GDB can manipulate the distinguished PATH variable.
>> -#
>> -send_gdb "path /tmp/FOOBARBAZGRUNGESPAZBALL\n"
>> -gdb_expect {
>> -  -re ".*Executable and object file path: /tmp/FOOBARBAZGRUNGESPAZBALL.*$gdb_prompt $"\
>> -          {pass "issue path"}
>> -  -re "$gdb_prompt $"\
>> -          {fail "issue path"}
>> -  timeout {fail "(timeout) issue path"}
>> -}
>> -send_gdb "show paths\n"
>> -gdb_expect {
>> -  -re "Executable and object file path: /tmp/FOOBARBAZGRUNGESPAZBALL.*$gdb_prompt $"\
>> -          {pass "show paths"}
>> -  -re "$gdb_prompt $"\
>> -          {fail "show paths"}
>> -  timeout {fail "(timeout) show paths"}
>
> Any reason these "path" command tests are dropped?
> (AFAICS, the MI equivalent is tested by gdb.mi/mi-basics.exp).

Somehow I thought these tests were not really testing anything useful.
I've put them back now.

>> -}
>> +gdb_test_no_output "set environment FOOBARBAZGRUNGESPAZBALL =        foo" \
>> +    "set environment variable with trailing whitespace"
>> +gdb_test "show environment FOOBARBAZGRUNGESPAZBALL" \
>> +    "FOOBARBAZGRUNGESPAZBALL = foo" \
>> +    "confirm set environment variable with trailing whitespace"
>>  
>>  gdb_exit
>>  return 0
>> diff --git a/gdb/testsuite/gdb.base/info-program.exp b/gdb/testsuite/gdb.base/info-program.exp
>> new file mode 100644
>> index 0000000..e5e5fb9
>> --- /dev/null
>> +++ b/gdb/testsuite/gdb.base/info-program.exp
>> @@ -0,0 +1,45 @@
>> +# Copyright 2017 Free Software Foundation, Inc.
>
> If the moved code is based on older code, the original copyright year
> must be preserved.

Fixed.

Below is the updated patch.

Thanks for the review,
  

Comments

Pedro Alves April 27, 2017, 10:37 p.m. UTC | #1
On 04/27/2017 08:06 PM, Sergio Durigan Junior wrote:
>  # Verify that GDB can manipulate the distinguished PATH variable.
> -#
> -send_gdb "path /tmp/FOOBARBAZGRUNGESPAZBALL\n"
> -gdb_expect {
> -  -re ".*Executable and object file path: /tmp/FOOBARBAZGRUNGESPAZBALL.*$gdb_prompt $"\
> -          {pass "issue path"}
> -  -re "$gdb_prompt $"\
> -          {fail "issue path"}
> -  timeout {fail "(timeout) issue path"}
> -}
> -send_gdb "show paths\n"
> -gdb_expect {
> -  -re "Executable and object file path: /tmp/FOOBARBAZGRUNGESPAZBALL.*$gdb_prompt $"\
> -          {pass "show paths"}
> -  -re "$gdb_prompt $"\
> -          {fail "show paths"}
> -  timeout {fail "(timeout) show paths"}
> -}
> +gdb_test "path /tmp/FOOBARBAZGRUNGESPAZBALL" \
> +    ".*Executable and object file path: /tmp/FOOBARBAZGRUNGESPAZBALL.*" \
> +    "set path containing env var name"

Can you drop the redundant leading ".*" in the regexes while at it?
I saw a couple in info-program.exp, but there might be more
throughout the patch.

BTW, re. the test msg above, I don't think that the fact that that
funny name was used as env var name in the previous tests is relevant.

> +gdb_test "show paths" \
> +    "Executable and object file path: /tmp/FOOBARBAZGRUNGESPAZBALL.*" \
> +    "show paths correctly show path with env var name"

Ditto.  (and "correctly shows path")

> +# We don't really care where this step lands, so long as it gets
> +# the inferior pushed off the breakpoint it's currently on...
> +gdb_test "next" "$decimal\t.*" "advancing pc"

s/advancing/advance.  But the old test message was better IMO:

> -  {pass "step before info program"}

because the next test is explicitly checking that
"It stopped after being stepped" is printed.

OK with the nits above addressed.

Thanks,
Pedro Alves
  

Patch

diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog
index c4d5b79..c3279ad 100644
--- a/gdb/testsuite/ChangeLog
+++ b/gdb/testsuite/ChangeLog
@@ -1,3 +1,14 @@ 
+2017-04-27  Sergio Durigan Junior  <sergiodj@redhat.com>
+
+	PR testsuite/8595
+	* gdb.base/environ.exp: Make test available in all architectures.
+	Move bits related to "info program" testing to
+	gdb.base/info-program.exp.  Rewrite tests to use the two new
+	procedures mentione below.
+	(test_set_show_env_var) New procedure.
+	(test_set_show_env_var_equal): Likewise.
+	* gdb.base/info-program.exp: New file.
+
 2017-04-19  Pedro Alves  <palves@redhat.com>
 
 	* gdb.threads/threadapply.exp (kill_and_remove_inferior): New
diff --git a/gdb/testsuite/gdb.base/environ.exp b/gdb/testsuite/gdb.base/environ.exp
index a833f79..dd7bd8f 100644
--- a/gdb/testsuite/gdb.base/environ.exp
+++ b/gdb/testsuite/gdb.base/environ.exp
@@ -13,297 +13,95 @@ 
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
-#
-# test running programs
-#
+gdb_start
 
-# This test exists solely to exercise the "environment" commands for
-# code-coverage on HP-UX.
-#
-if ![istarget "hppa*-*-hpux*"] then {
-  return
-}
-
-standard_testfile break.c break1.c
-
-if {[prepare_for_testing "failed to prepare" $testfile \
-	 [list $srcfile $srcfile2] {debug nowarnings}]} {
-    return -1
-}
-
-if ![runto_main] then { fail "environment command tests suppressed" }
-
-# (No, this is not really related to the environment commands.  But it's
-# a convenient place to verify that this command works.)
-#
-send_gdb "info program\n"
-gdb_expect {
-  -re ".*Using the running image of child process \[0-9\]*.\r\nProgram stopped at 0x\[0-9a-fA-F\]*.\r\nIt stopped at breakpoint 1..*$gdb_prompt $"\
-          {pass "info program"}
-  -re "$gdb_prompt $"\
-          {fail "info program"}
-  timeout {fail "(timeout) info program"}
-}
-
-# We don't really care where this step lands, so long as it gets
-# the inferior pushed off the breakpoint it's currently on...
-#
-send_gdb "next\n"
-gdb_expect {
-  -re ".*$gdb_prompt $"\
-          {pass "step before info program"}
-  timeout {fail "(timeout) step before info program"}
+proc test_set_show_env_var { name value test_name } {
+    gdb_test_no_output "set environment $name $value" "$test_name"
+    gdb_test "show environment $name" "$name = $value" \
+	"confirm $test_name"
 }
-send_gdb "info program\n"
-gdb_expect {
-  -re ".*Using the running image of child process \[0-9\]*.\r\nProgram stopped at 0x\[0-9a-fA-F\]*.\r\nIt stopped after being stepped..*$gdb_prompt $"\
-          {pass "info program after step"}
-  -re "$gdb_prompt $"\
-          {fail "info program after step"}
-  timeout {fail "(timeout) info program after step"}
-}
-
-if ![runto_main] then { fail "environment command tests suppressed" }
 
-send_gdb "delete\n"
-gdb_expect {
-  -re ".*y or n. $"\
-          {send_gdb "y\n"
-           gdb_expect {
-             -re ".*$gdb_prompt $"\
-                     {pass "delete breakpoint before info program"}
-             timeout {fail "(timeout) delete breakpoint before info program"}
-           }
-          }
-  -re "$gdb_prompt $"\
-          {fail "delete breakpoint before info program"}
-  timeout {fail "(timeout) delete breakpoint before info program"}
-}
-send_gdb "info program\n"
-gdb_expect {
-  -re ".*Using the running image of child process \[0-9\]*.\r\nProgram stopped at 0x\[0-9a-fA-F\]*.\r\nIt stopped at a breakpoint that has since been deleted..*$gdb_prompt $"\
-          {pass "info program after deleted breakpoint"}
-  -re "$gdb_prompt $"\
-          {fail "info program after deleted breakpoint"}
-  timeout {fail "(timeout) info program after deleted breakpoint"}
+proc test_set_show_env_var_equal { name value test_name } {
+    gdb_test_no_output "set environment $name = $value" "$test_name"
+    gdb_test "show environment $name" "$name = $value" \
+	"confirm $test_name"
 }
 
 # Verify that we can show all currently-set environment variables.
-# (It's a bit hacky, but nonetheless probably safe to check for at
-# least the SHELL variable.)
-#
-# need to increase timeout because of very long output
-set oldtimeout $timeout
-set timeout [expr "$timeout + 300"]
-
-send_gdb "show environment\n"
-gdb_expect {
-  -re ".*SHELL=(\[a-zA-Z0-9\]*).*$gdb_prompt $"\
-          {pass "show environment"}
-  -re "$gdb_prompt $"\
-          {fail "show environment"}
-  timeout {fail "(timeout) show environment"}
-}
-set timeout $oldtimeout
+# It's hard to do this verification since we can't really compare each
+# entry with the current environment.  So we just check to see if
+# there is anything that looks like an environment variable being
+# printed.
+gdb_test "show environment" "(\[A-Za-z_\]+=.*)+" \
+    "show environment works"
 
 # Verify that we can unset a specific environment variable.
-#
-send_gdb "unset environment EDITOR\n"
-gdb_expect {
-  -re "$gdb_prompt $"\
-          {pass "issue unset environment"}
-  timeout {fail "(timeout) issue unset environment"}
-}
-send_gdb "show environment EDITOR\n"
-gdb_expect {
-  -re "Environment variable \"EDITOR\" not defined.\r\n$gdb_prompt $"\
-          {pass "unset environment"}
-  -re "$gdb_prompt $"\
-          {fail "unset environment"}
-  timeout {fail "(timeout) unset environment"}
-}
+gdb_test_no_output "unset environment EDITOR" "unset environment variable"
+
+gdb_test "show environment EDITOR" "Environment variable \"EDITOR\" not defined\." \
+    "confirm unset environment variable worked"
 
 # Verify that we can unset all environment variables.
-#
-send_gdb "unset environment\n"
-gdb_expect {
-  -re "Delete all environment variables.*y or n. $"\
-          {send_gdb "y\n"
-           gdb_expect {
-             -re "$gdb_prompt $"\
-                     {pass "unset entire environment"}
-             timeout {fail "(timeout) unset entire environment"}
-           }
-          }
-  -re "$gdb_prompt $"\
-          {fail "unset entire environment"}
-  timeout {fail "(timeout) unset entire environment"}
-}
+gdb_test "unset environment" "" "unset all environment variables" \
+    "Delete all environment variables. .y or n. $" \
+    "y"
 
 # Verify that we can set a specific environment variable.
-#
-send_gdb "set environment EDITOR emacs\n"
-gdb_expect {
-  -re "$gdb_prompt $"\
-          {pass "issue set environment"}
-  timeout {fail "(timeout) issue set environment"}
-}
-send_gdb "show environment EDITOR\n"
-gdb_expect {
-  -re "EDITOR = emacs\r\n$gdb_prompt $"\
-          {pass "set environment"}
-  -re "$gdb_prompt $"\
-          {fail "set environment"}
-  timeout {fail "(timeout) set environment"}
-}
+test_set_show_env_var "EDITOR" "emacs" "set environment variable"
 
 # Verify that GDB responds gracefully to a request to set environment,
 # with no variable name.
-#
-send_gdb "set environment\n"
-gdb_expect {
-  -re "Argument required .environment variable and value..*$gdb_prompt $"\
-          {pass "set environment without variable disallowed"}
-  -re "$gdb_prompt $"\
-          {fail "set environment without variable disallowed"}
-  timeout {fail "(timeout) set environment without variable disallowed"}
-}
+gdb_test "set environment" "Argument required \\\(environment variable and value\\\)\." \
+    "set environment without arguments"
 
 # I'm not sure just what GDB has in mind in explicitly checking
 # for this variant, but since GDB handles it, test it.
-#
-send_gdb "set environment =\n"
-gdb_expect {
-  -re "Argument required .environment variable to set..*$gdb_prompt $"\
-          {pass "set environment equals without variable disallowed"}
-  -re "$gdb_prompt $"\
-          {fail "set environment equals without variable disallowed"}
-  timeout {fail "(timeout) set environment equals without variable disallowed"}
-}
+gdb_test "set environment =" "Argument required \\\(environment variable to set\\\)\." \
+    "set environment without variable name"
 
 # Setting an environment variable without a value sets it to a NULL
 # value.
-#
-send_gdb "set environment EDITOR\n"
-gdb_expect {
-  -re "Setting environment variable \"EDITOR\" to null value..*$gdb_prompt $"\
-          {pass "issue set environment without variable value"}
-  -re "$gdb_prompt $"\
-          {fail "issue set environment without variable value"}
-  timeout {fail "(timeout) issue set environment without variable value"}
-}
-send_gdb "show environment EDITOR\n"
-gdb_expect {
-  -re "EDITOR = \r\n$gdb_prompt $"\
-          {pass "set environment without variable value"}
-  -re "$gdb_prompt $"\
-          {fail "set environment without variable value"}
-  timeout {fail "(timeout) set environment without variable value"}
-}
+gdb_test "set environment EDITOR" "Setting environment variable \"EDITOR\" to null value\." \
+    "set environment variable to null value"
+gdb_test "show environment EDITOR" "EDITOR = " "show null environment variable"
 
 # Verify that GDB responds gracefully to an attempt to show a
 # non-existent environment variable.  (We hope this variable is
 # undefined!)
-#
-send_gdb "show environment FOOBARBAZGRUNGESPAZBALL\n"
-gdb_expect {
-  -re "Environment variable \"FOOBARBAZGRUNGESPAZBALL\" not defined..*$gdb_prompt $"\
-          {pass "show non-existent environment variable disallowed"}
-  -re "$gdb_prompt $"\
-          {fail "show non-existent environment variable disallowed"}
-  timeout {fail "(timeout) show non-existent environment variable disallowed"}
-}
+gdb_test "show environment FOOBARBAZGRUNGESPAZBALL" \
+    "Environment variable \"FOOBARBAZGRUNGESPAZBALL\" not defined\." \
+    "show non-existent environment variable"
 
 # Verify that GDB can set an environment variable hitherto undefined.
-#
-send_gdb "set environment FOOBARBAZGRUNGESPAZBALL t\n"
-gdb_expect {
-  -re "$gdb_prompt $"\
-          {pass "issue set environment for previously undefined variable"}
-  timeout {fail "(timeout) issue set environment for previously undefined variable"}
-}
-send_gdb "show environment FOOBARBAZGRUNGESPAZBALL\n"
-gdb_expect {
-  -re "FOOBARBAZGRUNGESPAZBALL = t\r\n$gdb_prompt $"\
-          {pass "set environment for previously undefined variable"}
-  -re "$gdb_prompt $"\
-          {fail "set environment for previously undefined variable"}
-  timeout {fail "(timeout) set environment for previously undefined variable"}
-}
+test_set_show_env_var "FOOBARBAZGRUNGESPAZBALL" "t" \
+    "set environment variable previously undefined"
 
 # Verify that GDB can also set an environment variable using the "="
 # syntax.
-#
-send_gdb "set environment FOOBARBAZGRUNGESPAZBALL = t\n"
-gdb_expect {
-  -re "$gdb_prompt $"\
-          {pass "issue set environment with equals"}
-  timeout {fail "(timeout) issue set environment with equals"}
-}
-send_gdb "show environment FOOBARBAZGRUNGESPAZBALL\n"
-gdb_expect {
-  -re "FOOBARBAZGRUNGESPAZBALL = t\r\n$gdb_prompt $"\
-          {pass "set environment with equals"}
-  -re "$gdb_prompt $"\
-          {fail "set environment with equals"}
-  timeout {fail "(timeout) set environment with equals"}
-}
+test_set_show_env_var_equal "FOOBARBAZGRUNGESPAZBALL" "y" \
+    "set environment variable using = syntax"
 
 # Verify that GDB can set an environment variable to a value that has
 # an embedded (trailing, in this case) equals.
-#
-send_gdb "set environment FOOBARBAZGRUNGESPAZBALL t=\n"
-gdb_expect {
-  -re "$gdb_prompt $"\
-          {pass "issue set environment with trailing equals"}
-  timeout {fail "(timeout) issue set environment with trailing equals"}
-}
-send_gdb "show environment FOOBARBAZGRUNGESPAZBALL\n"
-gdb_expect {
-  -re "FOOBARBAZGRUNGESPAZBALL = t=\r\n$gdb_prompt $"\
-          {pass "set environment with trailing equals"}
-  -re "$gdb_prompt $"\
-          {fail "set environment with trailing equals"}
-  timeout {fail "(timeout) set environment with trailing equals"}
-}
+test_set_show_env_var_equal "FOOBARBAZGRUNGESPAZBALL" "t=" \
+    "set environment variable with trailing equals"
 
 # Verify that GDB can set an environment variable to a value preceded
 # by whitespace, and that such whitespace is ignored (not included
 # in the set value).
-#
-send_gdb "set environment FOOBARBAZGRUNGESPAZBALL =     foo\n"
-gdb_expect {
-  -re "$gdb_prompt $"\
-          {pass "issue set environment with preceding whitespace"}
-  timeout {fail "(timeout) issue set environment with preceding whitespace"}
-}
-send_gdb "show environment FOOBARBAZGRUNGESPAZBALL\n"
-gdb_expect {
-  -re "FOOBARBAZGRUNGESPAZBALL = foo\r\n$gdb_prompt $"\
-          {pass "set environment with preceding whitespace"}
-  -re "$gdb_prompt $"\
-          {fail "set environment with preceding whitespace"}
-  timeout {fail "(timeout) set environment with preceding whitespace"}
-}
+gdb_test_no_output "set environment FOOBARBAZGRUNGESPAZBALL =        foo" \
+    "set environment variable with trailing whitespace"
+gdb_test "show environment FOOBARBAZGRUNGESPAZBALL" \
+    "FOOBARBAZGRUNGESPAZBALL = foo" \
+    "confirm set environment variable with trailing whitespace"
 
 # Verify that GDB can manipulate the distinguished PATH variable.
-#
-send_gdb "path /tmp/FOOBARBAZGRUNGESPAZBALL\n"
-gdb_expect {
-  -re ".*Executable and object file path: /tmp/FOOBARBAZGRUNGESPAZBALL.*$gdb_prompt $"\
-          {pass "issue path"}
-  -re "$gdb_prompt $"\
-          {fail "issue path"}
-  timeout {fail "(timeout) issue path"}
-}
-send_gdb "show paths\n"
-gdb_expect {
-  -re "Executable and object file path: /tmp/FOOBARBAZGRUNGESPAZBALL.*$gdb_prompt $"\
-          {pass "show paths"}
-  -re "$gdb_prompt $"\
-          {fail "show paths"}
-  timeout {fail "(timeout) show paths"}
-}
+gdb_test "path /tmp/FOOBARBAZGRUNGESPAZBALL" \
+    ".*Executable and object file path: /tmp/FOOBARBAZGRUNGESPAZBALL.*" \
+    "set path containing env var name"
+gdb_test "show paths" \
+    "Executable and object file path: /tmp/FOOBARBAZGRUNGESPAZBALL.*" \
+    "show paths correctly show path with env var name"
 
 gdb_exit
 return 0
diff --git a/gdb/testsuite/gdb.base/info-program.exp b/gdb/testsuite/gdb.base/info-program.exp
new file mode 100644
index 0000000..e3690c8
--- /dev/null
+++ b/gdb/testsuite/gdb.base/info-program.exp
@@ -0,0 +1,45 @@ 
+# Copyright 1997-2017 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+standard_testfile normal.c
+
+if { [prepare_for_testing "failed to prepare" $testfile $srcfile] } {
+    return -1
+}
+
+if { ![runto_main] } {
+    fail "can't run to main"
+    return -1
+}
+
+gdb_test "info program" ".*\r\nProgram stopped at $hex\.\r\nIt stopped at breakpoint $decimal\.\r\nType \"info stack\" or \"info registers\" for more information\." \
+    "info program after run to main"
+
+# We don't really care where this step lands, so long as it gets
+# the inferior pushed off the breakpoint it's currently on...
+gdb_test "next" "$decimal\t.*" "advancing pc"
+
+gdb_test "info program" ".*\r\nProgram stopped at $hex\.\r\nIt stopped after being stepped\.\r\nType \"info stack\" or \"info registers\" for more information\." \
+    "info program after next"
+
+if { ![runto_main] } then {
+    fail "can't restart program"
+    return -1
+}
+
+delete_breakpoints
+
+gdb_test "info program" ".*\r\nProgram stopped at $hex\.\r\nIt stopped at a breakpoint that has since been deleted\.\r\nType \"info stack\" or \"info registers\" for more information\." \
+    "info program after deleting all breakpoints"